<?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>6638</bug_id>
          
          <creation_ts>2006-01-17 20:42:40 -0800</creation_ts>
          <short_desc>Support Mozilla&apos;s XPathEvaluator object.</short_desc>
          <delta_ts>2024-05-29 16:51:35 -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>XML</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>8734</dependson>
          <blocked>10489</blocked>
    
    <blocked>274864</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jesse Costello-Good">jesse</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>amonre</cc>
    
    <cc>joost</cc>
    
    <cc>manos_lists</cc>
    
    <cc>michiel</cc>
    
    <cc>m.williams</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28766</commentid>
    <comment_count>0</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-01-17 20:42:40 -0800</bug_when>
    <thetext>Mozilla supports the following method of executing an XPath query on a document:

var xpe = new XPathEvaluator();
var nsResolver = xpe.createNSResolver(doc)
var objResult = xpe.evaluate(&quot;/xpath/query&quot;, doc, nsResolver, 0, null);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28767</commentid>
    <comment_count>1</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-01-17 20:43:17 -0800</bug_when>
    <thetext>I am evaluating Safari for a port of TIBCO(R) General Interface, a mature AJAX platform that is currently IE 
only. Fixing this bug would make the port more feasible. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28794</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-17 22:30:39 -0800</bug_when>
    <thetext>It&apos;s possible we could pick up KDOM&apos;s xpath 1.0 support from frerich.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30754</commentid>
    <comment_count>3</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2006-01-31 07:15:17 -0800</bug_when>
    <thetext>This is an enhancement, marking as such. It seems to be in wide demand :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30757</commentid>
    <comment_count>4</comment_count>
    <who name="Manos Batsis">manos_lists</who>
    <bug_when>2006-01-31 07:19:06 -0800</bug_when>
    <thetext>It should be noted that this is actually W3C DOM L3 XPath [1]. Anyone care to raising a bounty? As the author of sarissa [2] i&apos;d like it to work in webkit so i&apos;m willing to add some of my pocketmoney, perhaps more commercial interests can also join in :-)

[1] http://www.w3.org/TR/DOM-Level-3-XPath/
[2] sarissa.sf.net

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41252</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-04 11:11:20 -0700</bug_when>
    <thetext>I&apos;m working on this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41258</commentid>
    <comment_count>6</comment_count>
      <attachid>8109</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-04 12:12:49 -0700</bug_when>
    <thetext>Created attachment 8109
XPath implementation

Here&apos;s an XPath implementation based on the work of Frerich Raabe in KDOM.

There are some things remaining to fix, for example:

* It should be possible to use custom NS resolver objects, the DOM spec has more info about this
* Use String instead of DeprecatedString
* The tokenizer and parser could work a little better, like CSSParser.

Anyway, I think it&apos;s a good idea to land this and file bugs for the remaining issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41265</commentid>
    <comment_count>7</comment_count>
      <attachid>8111</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-04 13:25:18 -0700</bug_when>
    <thetext>Created attachment 8111
Just the test cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41266</commentid>
    <comment_count>8</comment_count>
      <attachid>8112</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-04 13:27:33 -0700</bug_when>
    <thetext>Created attachment 8112
Implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41273</commentid>
    <comment_count>9</comment_count>
      <attachid>8114</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-04 14:30:43 -0700</bug_when>
    <thetext>Created attachment 8114
Misc fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41284</commentid>
    <comment_count>10</comment_count>
      <attachid>8117</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-04 16:54:51 -0700</bug_when>
    <thetext>Created attachment 8117
Cleanup of misc fixes patch

Here is my attempt at some additional cleanup, including removing spaces in ( ), removing extra { } and adding XPATH_SUPPORT define.

There is some additional work required to make !XPATH_SUPPORT work (sending IDL files through cpp), but we can take care of that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41308</commentid>
    <comment_count>11</comment_count>
      <attachid>8121</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-05 01:37:06 -0700</bug_when>
    <thetext>Created attachment 8121
Incorporate changes

New patch, incorporating some of the changes. I think we&apos;ll do the #define after we&apos;ve landed so we can do it correctly wrt #ifdefs in the IDL files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41309</commentid>
    <comment_count>12</comment_count>
      <attachid>8121</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-05 01:43:46 -0700</bug_when>
    <thetext>Comment on attachment 8121
Incorporate changes

Still discussing this with anders over irc.  We shoudl do the #define stuff now, while it&apos;s still easy to see the changes.  Also there are a few more rounds of style fixes which we might as well do now while we&apos;re in this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41321</commentid>
    <comment_count>13</comment_count>
      <attachid>8124</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-05 07:57:34 -0700</bug_when>
    <thetext>Created attachment 8124
New iteration

Here&apos;s a new version with a bunch of style changes. I also modified the parsing process to be more like the CSS parser, and also make it reentrant because that can theoretically happen when we support custom NS resolvers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41324</commentid>
    <comment_count>14</comment_count>
      <attachid>8124</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-05 08:39:13 -0700</bug_when>
    <thetext>Comment on attachment 8124
New iteration

I was working on an extensive review of this, and the browser crashed and I lost my comments! I&apos;ll try to do it again. I see many minor issues and a few major ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41325</commentid>
    <comment_count>15</comment_count>
      <attachid>8124</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-05 09:22:30 -0700</bug_when>
    <thetext>Comment on attachment 8124
New iteration

Many cases of * not next to the type. It should be Node*, not Node *.

+  } elsif ($type eq &quot;XPathEvaluator&quot;) {
+      return 0;
+  } elsif ($type eq &quot;XPathNSResolver&quot;) {
+      return 0;
+  } elsif ($type eq &quot;XPathResult&quot;) {
+      return 0;

+  } elsif ($type eq &quot;XPathNSResolver&quot; or
+           $type eq &quot;XPathResult&quot;) {
+    $implIncludes{&quot;JS$type.h&quot;} = 1;
+    return &quot;to$type($value)&quot;;

+  } elsif ($type eq &quot;XPathExpression&quot; or
+           $type eq &quot;XPathNSResolver&quot; or
+           $type eq &quot;XPathResult&quot;) {
+    $implIncludes{&quot;JS$type.h&quot;} = 1;
+    return &quot;toJS(exec, $value)&quot;;

Why are these all separate and not sharing code with other cases?

+           $type eq &quot;float&quot; or 
+           $type eq &quot;double&quot;) {

+        readonly attribute double          numberValue

Is double really allowed in IDL? Doesn&apos;t float in IDL mean double?

+    virtual JSObject* construct(ExecState* exec, const List &amp;args) { return static_cast&lt;JSObject *&gt;(toJS(exec, new $interfaceName)); }

Why the static_cast here?

+    int nameIndex = code - INVALID_EXPRESSION_ERR;

This can underflow if the code is a large negative number. Should write this so it works with any value.

-  const char* name = code &lt; nameTableSize ? nameTable[code] : 0;
+  if (!name)
+      name = code &lt; nameTableSize ? nameTable[code] : 0;

I don&apos;t like the way this works. If we need a separate nameIndex then lets do that in all cases. The use of a null name as a special flag does not seem like a good way to do things.

+        case Node::XPATH_NAMESPACE_NODE:
+            // FIXME: Create an XPath objective C wrapper
+            return nil;

I&apos;d like to see a bug number here.

+    $(WebCore)/xpath

Missing trailing \ character.

+    PassRefPtr&lt;XPathExpression&gt; createExpression(const String&amp; expression,
+                                                 XPathNSResolver* resolver,
+                                                 ExceptionCode&amp; ec);

Should leave out names like &quot;resolver&quot; and &quot;ec&quot; that are completely redundant with the type name. It&apos;s our preferred style and I think it makes things easier to read (especially for &quot;ec&quot;).

+Element *XPathNamespace::ownerElement() const
+{
+    // FIXME
+    return 0;
+}

Need more detail here. Also, is there a reason we can&apos;t fix this?

+#include &quot;impl/expression.h&quot;
+#include &quot;impl/util.h&quot;

XCode, at least, uses a flat namespace for all headers. So short names like expression.h and util.h are not really compatible; directories don&apos;t really provide a namespace. Our filenames will need to include the prefix XPath.

+PassRefPtr&lt;XPathExpression&gt; XPathExpression::createExpression(const String&amp; expression, XPathNSResolver* resolver, ExceptionCode&amp; ec)
+{
+    XPathExpression* expr = new XPathExpression;
+    
+    Expression::evaluationContext().resolver = resolver;
+    if (!expr-&gt;m_statement.parse(expression.deprecatedString(), ec)) {
+        delete expr;
+        return 0;
+    }
+    
+    return expr;
+}

Needs to use a RefPtr for the expr local variable. It&apos;s bad form to call functions with an expr object floating like this, and it&apos;s bad form to do a delete on a shared object.

+    XPathResult* result = new XPathResult(static_cast&lt;EventTargetNode*&gt;(eventTarget),
+                                          m_statement.evaluate(contextNode));
+    
+    if (type != XPathResult::ANY_TYPE) {
+        result-&gt;convertTo(type, ec);
+
+        if (ec)
+            return 0;
+    }
+
+    return result;

The result here should be a RefPtr to avoid a storage leak in the case where convertTo fails.

+    // Apparently Node::lookupNamespaceURI doesn&apos;t do this.
+    if (prefix == &quot;xml&quot;)
+        return &quot;http://www.w3.org/XML/1998/namespace&quot;;

Is this a bug in lookupNamespaceURI or not? I don&apos;t like leaving the comment like this. I&apos;d like to be clearer on whether this is correct or not.

m_node in XPathNSResolver needs to be a RefPtr.

I think NodeSet is an awful name for a Vector of node pointers!

Expression::optimize overwrites m_constantValue without deleting the old value. Is it guaranteed to only be called once?

+    explicit Value(Node *value);
+    explicit Value(const NodeSet&amp; value);
+    explicit Value(bool value);
+    explicit Value(double value);
+    explicit Value(const String&amp; value);

Why does the Value constructor need to be marked explicit? It doesn&apos;t seem harmful to have an implicit conversion to a Value, and we could remove tons of explicit calls to the Value constructor.

+            if (rightVal == 0.0 || rightVal == -0.0)

The way floating point works, both of these expressions are the same. Negative 0 and positive 0 return the same thing. But also, why have this check? Floating point correctly produces infinities and NaN&apos;s as needed for cases like this. THere&apos;s no need for our code to do a redunddant check.

In NumericOp::doEvaluate:

+        default:
+            assert(0);
+        return Value();

If you leave out the default case from the switch statement, gcc will warn if one of the enum cases is not handled. So you should do that.

+    Parser(const Parser &amp;rhs);                  // disabled
+    Parser &amp;operator=(const Parser &amp;rhs);       // disabled

Preferred style for this is to inherit from Noncopyable.

Can Value go in its own header file, instead of with Expression?

+        if (a.isNodeset())
+            node = a.toNodeSet()[0].get();

If there are no nodes in the set, then this will crash.

Patch doesn&apos;t include the NodeSet class!

+    return Value(node-&gt;localName().deprecatedString());

Value now takes a String, so this is going to convert to DeprecatedString and then back!

+    // extract &apos;en&apos; out of &apos;en-us&apos;
+    langNodeValue = langNodeValue.left(langNodeValue.find(&apos;-&apos;));

What does this do when langNodeValue doesn&apos;t have a &quot;-&quot;.

+        LOG(XPath, &quot;sum() expects &lt;nodeset&gt;\n&quot;);

Don&apos;t use &quot;\n&quot; in LOG, since it already terminates lines. This is in all the LOG statements.

+    const double num = arg(0)-&gt;evaluate().toNumber();
+
+    if (isnan(num) || isinf(num)) {
+        return Value(num);
+    }
+
+    return Value(floor(num));

Excessive use of const on local variable here and elsewhere.

What&apos;s the point of checking for nan and inf before calling floor? It already handles those cases properly.

+    return Value(double(round(arg(0)-&gt;evaluate().toNumber())));

What&apos;s the point of the cast to double here? THe round function returns a double.

+    static FunctionMapping functions[] = {

Need to be static const, not just static.

+    static const unsigned int numFunctions = sizeof(functions) / sizeof(functions[ 0 ]);

No need for static here. I believe with static we get a global variable rather than a compile time constant.

Since we&apos;re using objects that are allocated and returned, I think we need to be very careful and come up with a calling convention that makes it clear that objects are allocated.

+Function *FunctionLibrary::getFunction(const char *name, const Vector&lt;Expression*&gt; &amp;args) const

There&apos;s nothing about the name of this that makes it clear to me that it allocates its results and you are responsible for deleting it. Should talk to Maciej about the memory allocation strategy.

+            Node *n = context-&gt;firstChild();
+            while (n) {
+                nodes.append(n);
+                n = n-&gt;nextSibling();
+            }

+            Node *n = context-&gt;parentNode();
+            while (n) {
+                nodes.append(n);
+                n = n-&gt;parentNode();
+            }
+            return nodes;

+            Node *n = context-&gt;nextSibling();
+            while (n) {
+                nodes.append(n);
+                n = n-&gt;nextSibling();
+            }

I prefer for statements for this sort of thing. Also, with a for statement you would not need the outer braces.

+        default:
+            LOG(XPath, &quot;Unknown axis %s passed to Step::nodesInAxis&quot;, axisAsString(m_axis).ascii());

Same comment about default here as elsewhere.

+/* @return all ancestor nodes of the given node, in document order.
+ */
+NodeSet getChildrenRecursively(Node *node);

This function is a bad idea. There&apos;s no need to use a recursive algorithm to build the list of all the children in order because we have enough pointers to walk the tree without that. Instead clients can write a simple loop using traverseNextNode and avoid building a NodeSet entirely. Also, it says &quot;all ancestor nodes&quot; but I assume it means &quot;all desecendant nodes&quot;.

+bool isValidContextNode(WebCore::Node *node);

Need to eliminate excess WebCore:: prefixes like this one.

XPathGrammar.y needs a strategy to delete the nodes if there&apos;s a parse failure. You can&apos;t just use new inside a Yacc grammar. See the JavaScript grammar and the CSS grammar for examples of how to do this.

Don&apos;t use cell() on QChar. Instead use unicode(), which is more efficient.

There are a lot of return statements with else statements after them. I think it&apos;s better style not to do that.

+&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r14202

Oops! Please remove that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41326</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-05 09:26:24 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think NodeSet is an awful name for a Vector of node pointers!

I think NodeVector is a better name.

&gt; Patch doesn&apos;t include the NodeSet class!

Oops, please disregard this incorrect comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41417</commentid>
    <comment_count>17</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-05-06 15:56:12 -0700</bug_when>
    <thetext>IDL has both float and double.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41487</commentid>
    <comment_count>18</comment_count>
      <attachid>8111</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-07 18:51:12 -0700</bug_when>
    <thetext>Comment on attachment 8111
Just the test cases

Test cases look fine to me, but I&apos;m going to clear the review flag until we get the patch with the code changes approved so this doesn&apos;t show up in the review queue or the patches-to-be-committed queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41510</commentid>
    <comment_count>19</comment_count>
      <attachid>8163</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-08 01:43:25 -0700</bug_when>
    <thetext>Created attachment 8163
Address Darin&apos;s comments

(In reply to comment #15)
&gt; (From update of attachment 8124 [edit])
&gt; Many cases of * not next to the type. It should be Node*, not Node *.
&gt; 

I&apos;ve (hopefully) fixed all of these.

&gt; +  } elsif ($type eq &quot;XPathEvaluator&quot;) {
&gt; +      return 0;
&gt; +  } elsif ($type eq &quot;XPathNSResolver&quot;) {
&gt; +      return 0;
&gt; +  } elsif ($type eq &quot;XPathResult&quot;) {
&gt; +      return 0;
&gt; 
&gt; +  } elsif ($type eq &quot;XPathNSResolver&quot; or
&gt; +           $type eq &quot;XPathResult&quot;) {
&gt; +    $implIncludes{&quot;JS$type.h&quot;} = 1;
&gt; +    return &quot;to$type($value)&quot;;
&gt; 
&gt; +  } elsif ($type eq &quot;XPathExpression&quot; or
&gt; +           $type eq &quot;XPathNSResolver&quot; or
&gt; +           $type eq &quot;XPathResult&quot;) {
&gt; +    $implIncludes{&quot;JS$type.h&quot;} = 1;
&gt; +    return &quot;toJS(exec, $value)&quot;;
&gt; 
&gt; Why are these all separate and not sharing code with other cases?

I&apos;ve fixed this.

&gt; 
&gt; +           $type eq &quot;float&quot; or 
&gt; +           $type eq &quot;double&quot;) {
&gt; 
&gt; +        readonly attribute double          numberValue
&gt; 
&gt; Is double really allowed in IDL? Doesn&apos;t float in IDL mean double?

As Maciej said, double is allowed and the IDL for XPathResult uses double.

&gt; 
&gt; +    virtual JSObject* construct(ExecState* exec, const List &amp;args) { return
&gt; static_cast&lt;JSObject *&gt;(toJS(exec, new $interfaceName)); }
&gt; 
&gt; Why the static_cast here?

because toJS returns a JSValue and construct takes a returns a JSObject.

&gt; 
&gt; +    int nameIndex = code - INVALID_EXPRESSION_ERR;
&gt; 
&gt; This can underflow if the code is a large negative number. Should write this so
&gt; it works with any value.

Won&apos;t this be handled by the 

 } else if (code &gt;= XPathExceptionOffset &amp;&amp; code &lt;= XPathExceptionMax) {

anyway?

&gt; 
&gt; -  const char* name = code &lt; nameTableSize ? nameTable[code] : 0;
&gt; +  if (!name)
&gt; +      name = code &lt; nameTableSize ? nameTable[code] : 0;
&gt; 
&gt; I don&apos;t like the way this works. If we need a separate nameIndex then lets do
&gt; that in all cases. The use of a null name as a special flag does not seem like
&gt; a good way to do things.
&gt; 

Fixed

&gt; +        case Node::XPATH_NAMESPACE_NODE:
&gt; +            // FIXME: Create an XPath objective C wrapper
&gt; +            return nil;
&gt; 
&gt; I&apos;d like to see a bug number here.

Fixed

&gt; 
&gt; +    $(WebCore)/xpath
&gt; 
&gt; Missing trailing \ character.

Fixed

&gt; 
&gt; +    PassRefPtr&lt;XPathExpression&gt; createExpression(const String&amp; expression,
&gt; +                                                 XPathNSResolver* resolver,
&gt; +                                                 ExceptionCode&amp; ec);
&gt; 
&gt; Should leave out names like &quot;resolver&quot; and &quot;ec&quot; that are completely redundant
&gt; with the type name. It&apos;s our preferred style and I think it makes things easier
&gt; to read (especially for &quot;ec&quot;).

Fixed (hopefully for all cases)

&gt; 
&gt; +Element *XPathNamespace::ownerElement() const
&gt; +{
&gt; +    // FIXME
&gt; +    return 0;
&gt; +}
&gt; 
&gt; Need more detail here. Also, is there a reason we can&apos;t fix this?
&gt; 

XPathNamespace isn&apos;t used currently (we don&apos;t support returning namespace nodes), but I went ahead and fixed this to work according to the spec anyway.

&gt; +#include &quot;impl/expression.h&quot;
&gt; +#include &quot;impl/util.h&quot;
&gt; 
&gt; XCode, at least, uses a flat namespace for all headers. So short names like
&gt; expression.h and util.h are not really compatible; directories don&apos;t really
&gt; provide a namespace. Our filenames will need to include the prefix XPath.
&gt; 

I&apos;ve renamed all the files in the impl directory.

&gt; +PassRefPtr&lt;XPathExpression&gt; XPathExpression::createExpression(const String&amp;
&gt; expression, XPathNSResolver* resolver, ExceptionCode&amp; ec)
&gt; +{
&gt; +    XPathExpression* expr = new XPathExpression;
&gt; +    
&gt; +    Expression::evaluationContext().resolver = resolver;
&gt; +    if (!expr-&gt;m_statement.parse(expression.deprecatedString(), ec)) {
&gt; +        delete expr;
&gt; +        return 0;
&gt; +    }
&gt; +    
&gt; +    return expr;
&gt; +}
&gt; 
&gt; Needs to use a RefPtr for the expr local variable. It&apos;s bad form to call
&gt; functions with an expr object floating like this, and it&apos;s bad form to do a
&gt; delete on a shared object.
&gt; 

Fixed

&gt; +    XPathResult* result = new
&gt; XPathResult(static_cast&lt;EventTargetNode*&gt;(eventTarget),
&gt; +                                          m_statement.evaluate(contextNode));
&gt; +    
&gt; +    if (type != XPathResult::ANY_TYPE) {
&gt; +        result-&gt;convertTo(type, ec);
&gt; +
&gt; +        if (ec)
&gt; +            return 0;
&gt; +    }
&gt; +
&gt; +    return result;
&gt; 
&gt; The result here should be a RefPtr to avoid a storage leak in the case where
&gt; convertTo fails.

Fixed

&gt; 
&gt; +    // Apparently Node::lookupNamespaceURI doesn&apos;t do this.
&gt; +    if (prefix == &quot;xml&quot;)
&gt; +        return &quot;http://www.w3.org/XML/1998/namespace&quot;;
&gt; 
&gt; Is this a bug in lookupNamespaceURI or not? I don&apos;t like leaving the comment
&gt; like this. I&apos;d like to be clearer on whether this is correct or not.

It&apos;s not a bug. Node::lookupNamespaceURI shouldn&apos;t special-case the xml prefix. The XPath spec says that XPathNSResolver::lookupNamespaceURI should though. I&apos;ve clarified this in the comment.

&gt; 
&gt; m_node in XPathNSResolver needs to be a RefPtr.

Fixed.

&gt; 
&gt; I think NodeSet is an awful name for a Vector of node pointers!

The name in the XPath spec is NodeSet, but I&apos;ve changed this to NodeVector anyway.

&gt; 
&gt; Expression::optimize overwrites m_constantValue without deleting the old value.
&gt; Is it guaranteed to only be called once?

Turns out it wasn&apos;t called at all! I&apos;ve fixed this to have it be called once and I added an ASSERT to make sure this is the case.

&gt; 
&gt; +    explicit Value(Node *value);
&gt; +    explicit Value(const NodeSet&amp; value);
&gt; +    explicit Value(bool value);
&gt; +    explicit Value(double value);
&gt; +    explicit Value(const String&amp; value);
&gt; 
&gt; Why does the Value constructor need to be marked explicit? It doesn&apos;t seem
&gt; harmful to have an implicit conversion to a Value, and we could remove tons of
&gt; explicit calls to the Value constructor.

Fixed.

&gt; 
&gt; +            if (rightVal == 0.0 || rightVal == -0.0)
&gt; 
&gt; The way floating point works, both of these expressions are the same. Negative
&gt; 0 and positive 0 return the same thing. But also, why have this check? Floating
&gt; point correctly produces infinities and NaN&apos;s as needed for cases like this.
&gt; THere&apos;s no need for our code to do a redunddant check.

Right, I&apos;ve removed that.

&gt; 
&gt; In NumericOp::doEvaluate:
&gt; 
&gt; +        default:
&gt; +            assert(0);
&gt; +        return Value();
&gt; 
&gt; If you leave out the default case from the switch statement, gcc will warn if
&gt; one of the enum cases is not handled. So you should do that.

Fixed.

&gt; 
&gt; +    Parser(const Parser &amp;rhs);                  // disabled
&gt; +    Parser &amp;operator=(const Parser &amp;rhs);       // disabled
&gt; 
&gt; Preferred style for this is to inherit from Noncopyable.

Fixed.

&gt; 
&gt; Can Value go in its own header file, instead of with Expression?
&gt; 

Sure, fixed.

&gt; +        if (a.isNodeset())
&gt; +            node = a.toNodeSet()[0].get();
&gt; 
&gt; If there are no nodes in the set, then this will crash.

Fixed. 

&gt; 
&gt; Patch doesn&apos;t include the NodeSet class!
&gt; 
&gt; +    return Value(node-&gt;localName().deprecatedString());
&gt; 
&gt; Value now takes a String, so this is going to convert to DeprecatedString and
&gt; then back!

Fixed.

&gt; 
&gt; +    // extract &apos;en&apos; out of &apos;en-us&apos;
&gt; +    langNodeValue = langNodeValue.left(langNodeValue.find(&apos;-&apos;));
&gt; 
&gt; What does this do when langNodeValue doesn&apos;t have a &quot;-&quot;.

Whoops. Fixed to make it work like the spec says.

&gt; 
&gt; +        LOG(XPath, &quot;sum() expects &lt;nodeset&gt;\n&quot;);
&gt; 
&gt; Don&apos;t use &quot;\n&quot; in LOG, since it already terminates lines. This is in all the
&gt; LOG statements.

Fixed.

&gt; 
&gt; +    const double num = arg(0)-&gt;evaluate().toNumber();
&gt; +
&gt; +    if (isnan(num) || isinf(num)) {
&gt; +        return Value(num);
&gt; +    }
&gt; +
&gt; +    return Value(floor(num));
&gt; 
&gt; Excessive use of const on local variable here and elsewhere.
&gt; 

Fixed.

&gt; What&apos;s the point of checking for nan and inf before calling floor? It already
&gt; handles those cases properly.

Fixed.

&gt; 
&gt; +    return Value(double(round(arg(0)-&gt;evaluate().toNumber())));
&gt; 
&gt; What&apos;s the point of the cast to double here? THe round function returns a
&gt; double.

Fixed.

&gt; 
&gt; +    static FunctionMapping functions[] = {
&gt; 
&gt; Need to be static const, not just static.
&gt; 
&gt; +    static const unsigned int numFunctions = sizeof(functions) /
&gt; sizeof(functions[ 0 ]);
&gt; 
&gt; No need for static here. I believe with static we get a global variable rather
&gt; than a compile time constant.

Fixed.

&gt; 
&gt; Since we&apos;re using objects that are allocated and returned, I think we need to
&gt; be very careful and come up with a calling convention that makes it clear that
&gt; objects are allocated.
&gt; 
&gt; +Function *FunctionLibrary::getFunction(const char *name, const
&gt; Vector&lt;Expression*&gt; &amp;args) const
&gt; 
&gt; There&apos;s nothing about the name of this that makes it clear to me that it
&gt; allocates its results and you are responsible for deleting it. Should talk to
&gt; Maciej about the memory allocation strategy.
&gt; 

I&apos;ve renamed this to createFunction.

&gt; +            Node *n = context-&gt;firstChild();
&gt; +            while (n) {
&gt; +                nodes.append(n);
&gt; +                n = n-&gt;nextSibling();
&gt; +            }
&gt; 
&gt; +            Node *n = context-&gt;parentNode();
&gt; +            while (n) {
&gt; +                nodes.append(n);
&gt; +                n = n-&gt;parentNode();
&gt; +            }
&gt; +            return nodes;
&gt; 
&gt; +            Node *n = context-&gt;nextSibling();
&gt; +            while (n) {
&gt; +                nodes.append(n);
&gt; +                n = n-&gt;nextSibling();
&gt; +            }
&gt; 
&gt; I prefer for statements for this sort of thing. Also, with a for statement you
&gt; would not need the outer braces.

Fixed.

&gt; 
&gt; +        default:
&gt; +            LOG(XPath, &quot;Unknown axis %s passed to Step::nodesInAxis&quot;,
&gt; axisAsString(m_axis).ascii());
&gt; 
&gt; Same comment about default here as elsewhere.

Fixed.

&gt; 
&gt; +/* @return all ancestor nodes of the given node, in document order.
&gt; + */
&gt; +NodeSet getChildrenRecursively(Node *node);
&gt; 
&gt; This function is a bad idea. There&apos;s no need to use a recursive algorithm to
&gt; build the list of all the children in order because we have enough pointers to
&gt; walk the tree without that. Instead clients can write a simple loop using
&gt; traverseNextNode and avoid building a NodeSet entirely. Also, it says &quot;all
&gt; ancestor nodes&quot; but I assume it means &quot;all desecendant nodes&quot;.
&gt; 

I&apos;ve removed this function.

&gt; +bool isValidContextNode(WebCore::Node *node);
&gt; 
&gt; Need to eliminate excess WebCore:: prefixes like this one.
&gt; 

Fixed.

&gt; XPathGrammar.y needs a strategy to delete the nodes if there&apos;s a parse failure.
&gt; You can&apos;t just use new inside a Yacc grammar. See the JavaScript grammar and
&gt; the CSS grammar for examples of how to do this.

I&apos;ve fixed this by keeping around sets of the different object types allocated by the parser. When the parse fails all the objects in the sets are delete. It&apos;s a bit kludgy but it works.

&gt; 
&gt; Don&apos;t use cell() on QChar. Instead use unicode(), which is more efficient.
&gt; 

Fixed.

&gt; There are a lot of return statements with else statements after them. I think
&gt; it&apos;s better style not to do that.
&gt; 

Fixed.

&gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r14202
&gt; 
&gt; Oops! Please remove that.
&gt; 

Fixed.

Phew. Thanks for the thorough review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41537</commentid>
    <comment_count>20</comment_count>
      <attachid>8163</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-08 13:30:42 -0700</bug_when>
    <thetext>Comment on attachment 8163
Address Darin&apos;s comments

There&apos;s still a remnant of the old code path in setDOMException -- the name variable doesn&apos;t need to be declared before the big if statement, since it&apos;s set entirely afterward.

+    Token(int _type): type(_type), intValue(0) {}

Identifiers with an _ prefix are reserved for the compiler and library. We should not use them in new code even though we can&apos;t easily eliminate them all from old code.

Almost all the braces in the case statements in Step::nodesInAxis could be removed. Removing some of the blank lines as well would make that function a bit more consistent and easy to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41538</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-08 13:31:24 -0700</bug_when>
    <thetext>Sorry, I&apos;m close to saying review+ but I am making comments as I go and I actually hit submit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41539</commentid>
    <comment_count>22</comment_count>
      <attachid>8163</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-08 13:35:06 -0700</bug_when>
    <thetext>Comment on attachment 8163
Address Darin&apos;s comments

Seems that unregisterString calls are always paired with a delete.

+    return double();

That&apos;s just a &quot;return 0&quot; in sheep&apos;s clothing.

+    return bool();

And this is just a &quot;return false&quot;.

+            return m_bool ? 1 : 0;

That&apos;s the same as return m_bool.

+            else if (m_number == 0)
+                return &quot;0&quot;;

Do we really need a special case for that? What *does* DeprecatedString::number do with NaN, 0, and infinity?

These are a few things that could still be improved, but I think this is ready to go.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41541</commentid>
    <comment_count>23</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-08 14:13:10 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Do we really need a special case for that? What *does* DeprecatedString::number
&gt; do with NaN, 0, and infinity?
&gt;

::number just uses sprintf, which means that infinity can be converted to either &quot;inf&quot; or &quot;infinity&quot; whereas the XPath spec requires that the value is converted to &quot;Infinity&quot;, according to http://www.w3.org/TR/xpath#function-string
 
&gt; These are a few things that could still be improved, but I think this is ready
&gt; to go.
&gt; 
&gt; r=me
&gt; 

Thanks
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41544</commentid>
    <comment_count>24</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-08 14:28:32 -0700</bug_when>
    <thetext>*** Bug 5576 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45321</commentid>
    <comment_count>25</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-11-18 17:23:56 -0800</bug_when>
    <thetext>Thanks to the Safari team for being so responsive regarding requests for better advanced AJAX support. Safari is quickly becoming a 1st class AJAX platform.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8109</attachid>
            <date>2006-05-04 12:12:49 -0700</date>
            <delta_ts>2006-05-04 13:25:18 -0700</delta_ts>
            <desc>XPath implementation</desc>
            <filename>xpath-support.txt</filename>
            <type>text/plain</type>
            <size>809577</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBz
aG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9vcmRlci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0
ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1f
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTcyIEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIg
Q29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVy
b3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRp
Y3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlz
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRo
ZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53
My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQor
Ki8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVz
dEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0g
LTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmlu
ZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9u
IGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMg
c3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21w
bGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3
aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFn
ZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8v
CisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNl
cHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7
CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVs
bDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2Fk
KGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9Cisg
ICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwg
ZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8v
CisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAg
ICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAg
IFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisv
LyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAg
ICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0
ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3Rh
dHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBY
UGF0aFJlc3VsdCBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSBYUGF0aFJlc3VsdFR5cGUgZm9y
IAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgpIGNoZWNr
aW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuc25hcHNob3RJdGVtKDAuLjMpIGFyZSBpbiBkb2N1
bWVudCBvcmRlci4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LXNuYXBzaG90LWxlbmd0aAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc25hcHNob3RJ
dGVtCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHRUeXBl
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqLworZnVuY3Rp
b24gWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29y
ZGVyKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
X29yZGVyIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7CisgICAgICB2
YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsKKyAgICAgIHZh
ciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTsKKyAgICAg
IHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZhciBPUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsKKyAgICAgIHZh
ciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAg
dmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFy
IG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0gIi9zdGFmZi9lbXBs
b3llZS9lbXBsb3llZUlkL3RleHQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEU7CisgICAgICB2YXIgc25hcHNob3RJdGVtOworICAgICAgdmFyIHNu
YXBzaG90TGVuZ3RoOworICAgICAgdmFyIGluZGV4OworICAgICAgdmFyIHRleHQ7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0g
Y3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5T
UmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2
YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlw
ZSxpbnJlc3VsdCk7CisgICAgICBpbmRleCA9IDA7CisKKyAgICB3aGlsZSgKKwkKKwkoaW5kZXgg
PCA0KQorCisJKSB7CisJc25hcHNob3RJdGVtID0gb3V0cmVzdWx0LnNuYXBzaG90SXRlbShpbmRl
eCk7CisgICAgICB0ZXh0ID0gc25hcHNob3RJdGVtLmRhdGE7CisKKyAgICAgIAorCWlmKAorCSgw
ID09IGluZGV4KQorCSkgeworCWFzc2VydEVxdWFscygiZmlyc3QiLCJFTVAwMDAxIix0ZXh0KTsK
KyAgICAgICAKKwl9CisJCisJaWYoCisJKDEgPT0gaW5kZXgpCisJKSB7CisJYXNzZXJ0RXF1YWxz
KCJzZWNvbmQiLCJFTVAwMDAyIix0ZXh0KTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKDIgPT0g
aW5kZXgpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJ0aGlyZCIsIkVNUDAwMDMiLHRleHQpOworICAg
ICAgIAorCX0KKwkKKwlpZigKKwkoMyA9PSBpbmRleCkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoImZv
dXJ0aCIsIkVNUDAwMDQiLHRleHQpOworICAgICAgIAorCX0KKwlpbmRleCArPSAxOworCisJfQor
Cit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9zbmFwc2hv
dEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVf
RVJSLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJSLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9F
UlIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisKKy8qCitDb3B5cmlnaHQgw4LC
qSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJ
bnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2Zv
ciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1Jp
Z2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKu
IFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3
YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2Nv
cHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlv
biBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsn
WFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlInXTsKK30KKwordmFyIGRvY3NMb2FkZWQg
PSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5u
aW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRp
b24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBp
cyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNv
bXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2Vk
IHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQ
YWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAg
Ly8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4
Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIo
KTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxv
YWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NM
b2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAg
fQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxk
ZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKwor
CisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisv
LyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLwor
Ly8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVk
LAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisv
LyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29t
cGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAgICAgICAKK0V2YWx1
YXRlICJzdHJpbmcoLykiIGFuZCByZXF1ZXN0IHRoYXQgdGhlIHJlc3VsdCBiZSBhIEZJUlNUX09S
REVSRURfTk9ERV9UWVBFLCBzaG91bGQKK3Jlc3VsdCBpbiBhIFRZUEVfRVJSLgorICAgIAorKiBA
YXV0aG9yIEN1cnQgQXJub2xkCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD01MDgK
KyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9UWVBFX0VSUigpIHsKKyAgIHZh
ciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZh
bHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJSIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7
CisgICAgICB2YXIgeHBFdmFsdWF0b3I7CisgICAgICB2YXIgcmVzdWx0OworICAgICAgdmFyIG51
bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAgdmFyIG51bGxSZXN1bHQgPSBudWxsOworCisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICB4cEV2
YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CisKKwl7CisJCXN1Y2Nlc3MgPSBm
YWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRl
KCJzdHJpbmcoLykiLGRvYyxudWxsTlNSZXNvbHZlciw5LG51bGxSZXN1bHQpOworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJ0aHJvd19UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9UWVBFX0VSUigpOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJ
dGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBz
aG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250
YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVj
dH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgw
MDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEw
MC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1NDN4MTgKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NDM6ICJYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1f
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbDogU3VjY2VzcyIKSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
SU5WQUxJRF9FWFBSRVNTSU9OX0VSUi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURf
RVhQUkVTU0lPTl9FUlIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVT
U0lPTl9FUlIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACisKKy8qCitDb3B5cmln
aHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVz
ZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1
bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFs
bCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBX
M0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1w
bGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8y
MDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBm
dW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0
dXJuIFsnWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05f
RVJSJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51
bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZy
YW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAg
IElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cwor
Ly8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0
YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBp
bW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRo
ZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9
ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRv
Y3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRl
ciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOwor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7
CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRV
cFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNh
dGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9
ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQg
c3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBs
b2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlz
IGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJl
IGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2Fk
ZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0K
K30KKworCisvKioKKyogCisgICAgICBUaGUgWFBhdGhFdmFsdWF0b3IgY2FuIGNyZWF0ZSBhICJY
UGF0aEV4cHJlc3Npb24iIHVzaW5nIHRoZSBtZXRob2QKKyAgICAgICJjcmVhdGVFeHByZXNzaW9u
KGV4cHJlc3Npb24sIHJlc29sdmVyKSIuCisgICAgICAKKyAgICAgIFJldHJpZXZlIHRoZSBET00g
ZG9jdW1lbnQgb24gd2hpY2ggdGhlCisgICAgICAnY3JlYXRlRXhwcmVzc2lvbigiMTJhIiwgbnVs
bCknIG1ldGhvZCBpcworICAgICAgaW52b2tlZCB3aXRoIHRoZSBkb2N1bWVudCBlbGVtZW50LiAg
VGhlIG1ldGhvZCBzaG91bGQgZmFpbCB0byBjcmVhdGUKKyAgICAgIHByZS1jb21waWxlZCBleHBy
ZXNzaW9uIGFuZCB0aHJvd3MKKyAgICAgIFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lP
Tl9FUlIKKyAgICAgIHNpbmNlICIxMmEiIGlzIG5vdCBhbiBYUGF0aCBleHByZXNzaW9uLgorICAg
IAorKiBAYXV0aG9yIFBoaWxpcHBlIExlIEjDqWdhcmV0CisqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1
YXRvci1jcmVhdGVFeHByZXNzaW9uCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfY3JlYXRl
RXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05fRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7Cisg
ICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3JfY3JlYXRl
RXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05fRVJSIikgIT0gbnVsbCkgcmV0dXJuOworICAg
IHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIg
eHBFdmFsdWF0b3I7CisgICAgICB2YXIgZXhwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1
YXRvcihkb2MpOworCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAg
ICBleHAgPSB4cEV2YWx1YXRvci5jcmVhdGVFeHByZXNzaW9uKCIxMmEiLG51bGxOU1Jlc29sdmVy
KTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9
ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1MSk7CisJCX0K
KwkJYXNzZXJ0VHJ1ZSgidGhyb3dfSU5WQUxJRF9FWFBSRVNTSU9OX0VSUiIsc3VjY2Vzcyk7CisJ
fQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9j
cmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9VTk9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9D
VFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQor
ICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAi
VGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVs
ZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElU
WSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0K
KyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAg
IDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RB
VElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1w
bG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2Ny
aXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEg
I0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJ
TVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0K
KyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0K
KyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUg
Q0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIg
MS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0i
MCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9V
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50LmpzIi8+DQorPHNjcmlwdCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5N
YXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+
ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERh
bGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEg
UmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJl
bmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RB
VEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8
cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRl
cGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4N
CisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBz
dHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9l
bXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95
ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25u
ZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9
IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29t
cHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0K
KyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBO
b3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVs
bC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRV9udWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBM
MTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBh
dCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSA1Njd4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1Njc6ICJYUGF0
aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsOiBT
dWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHBy
ZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfTk9U
X1NVUFBPUlRFRF9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLnN2
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9U
RVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZO
Uy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAi
MTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5U
SVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50
IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVu
dDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAg
PCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8
IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5P
VEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04g
bm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVj
dCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFU
VExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVj
dCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0K
KyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQor
ICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RB
VEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+
DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxy
ZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV4cHJlc3Npb25fZXZh
bHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBN
YXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAg
ICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxh
cywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
czpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlz
IGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0K
KzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVu
Y2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3Np
dGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQy
OyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFy
eT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4
YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6
ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEu
Y29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxu
bTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVs
IERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxh
cnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3Mg
ZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1w
OmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFk
ZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDov
L3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNp
YWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3
Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURf
Tk9ERV9UWVBFLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBX
b3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
ZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNz
IGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVk
LiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGlj
ZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sx
XSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3
YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5j
dGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9z
aW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUnXTsKK30KKwordmFyIGRvY3NM
b2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAg
ICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZp
Z3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9h
ZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0
IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAg
cmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24g
c2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsK
KyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRo
cm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1
aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAgICAgIGlmIChk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
ICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihi
dWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9m
IAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgor
Ly8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBs
ZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRo
ZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9h
ZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRV
cFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisgICAgICBD
cmVhdGUgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgWFBhdGhSZXN1bHQgbWF0Y2hpbmcgL3N0YWZm
L2VtcGxveWVlL2VtcGxveWVlSWQsCisgICAgICBjaGVja2luZyB0aGF0IFhQYXRoUmVzdWx0LnNp
bmdsZU5vZGVWYWx1ZSBtYXRjaGVzLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVz
b2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxp
emF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJF
RF9OT0RFX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAg
ICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAg
ICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1Owor
ICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05P
REVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAg
ICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7Cisg
ICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAg
ICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N2Zy9l
bXBsb3llZS9lbXBsb3llZUlkIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBBTllfVU5PUkRFUkVE
X05PREVfVFlQRTsKKyAgICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIGVtcGxveWVlSWQ7Cisg
ICAgICB2YXIgbG9jYWxOYW1lOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAg
ICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1Jl
ZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7City
ZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0
Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixj
b250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgb3V0Tm9kZSA9
IG91dHJlc3VsdC5zaW5nbGVOb2RlVmFsdWU7CisgICAgICBsb2NhbE5hbWUgPSBvdXROb2RlLmxv
Y2FsTmFtZTsKKworICAgICAgYXNzZXJ0RXF1YWxzKCJlcXVhbHMiLCJlbXBsb3llZUlkIixsb2Nh
bE5hbWUpOworICAgICAgIAorfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBh
dGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFKCk7Cit9Cklu
ZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBv
cnRlZF9lbXB0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9y
bWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4w
MEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNW
R1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDI3NHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDI3NDogIkNvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX2VtcHR5OiBTdWNjZXNzIgpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X1dST05HX0RPQ1VNRU5UX0VSUi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJS
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMzUgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBX
aWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9s
b2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBN
YXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlz
IHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBb
MV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRw
Oi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIw
MDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBl
eHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV4cHJlc3Npb25fZXZh
bHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAw
MDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUg
dGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2Vw
dGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRl
ZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBh
bmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVu
dGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsK
KyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAg
IC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24K
KyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAg
ICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jMVJlZiA9IG51bGw7Cisg
ICAgICBpZiAodHlwZW9mKHRoaXMuZG9jMSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9j
MVJlZiA9IHRoaXMuZG9jMTsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChk
b2MxUmVmLCAiZG9jMSIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAgICAgdmFyIGRvYzJSZWYg
PSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYzIpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvYzJSZWYgPSB0aGlzLmRvYzI7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jMlJlZiwgImRvYzIiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYg
KGRvY3NMb2FkZWQgPT0gMikgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9y
KGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24g
b2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMu
CisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29t
cGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3Mg
dGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAyKSB7CisgICAgICAgIHNl
dFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAgICAgICAK
KyAgICAgIFRlc3QgaWYgWFBhdGhFeHByZXNzaW9uLmV2YWx1YXRlIHByb3Blcmx5IHRocm93cyBX
Uk9OR19ET0NVTUVOVF9FUlJPUgorICAgIAorKiBAYXV0aG9yIFBoaWxpcHBlIExlIEjDqWdhcmV0
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV4cHJlc3Npb24tZXZhbHVh
dGUKKyovCitmdW5jdGlvbiBYUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRf
RVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUiIpICE9IG51
bGwpIHJldHVybjsKKyAgICB2YXIgZG9jMTsKKyAgICAgIHZhciBkb2MyOworICAgICAgdmFyIHhw
RXZhbHVhdG9yOworICAgICAgdmFyIHJvb3Q7CisgICAgICB2YXIgcmVzdWx0OworICAgICAgdmFy
IG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAgdmFyIG51bGxSZXN1bHQgPSBudWxsOwor
CisgICAgICB2YXIgeHBhdGhFeHByZXNzaW9uOworICAgICAgCisgICAgICB2YXIgZG9jMVJlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jMSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgZG9jMVJlZiA9IHRoaXMuZG9jMTsKKyAgICAgIH0KKyAgICAgIGRvYzEgPSBsb2FkKGRv
YzFSZWYsICJkb2MxIiwgInN0YWZmTlMiKTsKKyAgICAgIAorICAgICAgdmFyIGRvYzJSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYzIpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvYzJSZWYgPSB0aGlzLmRvYzI7CisgICAgICB9CisgICAgICBkb2MyID0gbG9hZChkb2My
UmVmLCAiZG9jMiIsICJzdGFmZiIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2
YWx1YXRvcihkb2MxKTsKK3hwYXRoRXhwcmVzc2lvbiA9IHhwRXZhbHVhdG9yLmNyZWF0ZUV4cHJl
c3Npb24oIi8vZm9vIixudWxsTlNSZXNvbHZlcik7CisgICAgICByb290ID0gZG9jMi5kb2N1bWVu
dEVsZW1lbnQ7CisKKyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAg
ICAgICAgICAgcmVzdWx0ID0geHBhdGhFeHByZXNzaW9uLmV2YWx1YXRlKHJvb3QsMCxudWxsUmVz
dWx0KTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAgc3VjY2VzcyA9ICh0eXBlb2Yo
ZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA0KTsKKwkJfQorCQlhc3NlcnRU
cnVlKCJ0aHJvd19XUk9OR19ET0NVTUVOVF9FUlIiLHN1Y2Nlc3MpOworCX0KKworfQorCisKKwor
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05H
X0RPQ1VNRU5UX0VSUigpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2Vf
aXNTdXBwb3J0ZWRfMy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKworLyoKK0Nv
cHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNz
YWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25z
b3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5
KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3Ro
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xl
Z2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0
ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7
CityZXR1cm4gWydDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zJ107Cit9CisKK3ZhciBkb2NzTG9h
ZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAg
cnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1
cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRp
bmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0
byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJh
aXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNl
dFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7Cisg
ICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJv
dyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWls
ZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVm
ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBw
cmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
ICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihi
dWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9m
IAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgor
Ly8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBs
ZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRo
ZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9h
ZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRV
cFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisgICAgICAx
LjMgQ29uZm9ybWFuY2UgLSBUaGUgImZlYXR1cmUiIHBhcmFtZXRlciBpbiB0aGUgCisgICAgICAi
Tm9kZS5pc1N1cHBvcnRlZChmZWF0dXJlLHZlcnNpb24pIgorICAgICAgbWV0aG9kIGlzIHRoZSBu
YW1lIG9mIHRoZSBmZWF0dXJlIGFuZCB0aGUgdmVyc2lvbiBpcyB0aGUgdmVyc2lvbgorICAgICAg
bnVtYmVyIG9mIHRoZSBmZWF0dXJlIHRvIHRlc3QuICBYUGF0aCBpcyB0aGUgbGVnYWwgdmFsdWUg
Zm9yIHRoZQorICAgICAgWFBhdGggbW9kdWxlLiAgVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuICJ0
cnVlIi4KKyAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIERPTSBkb2N1bWVudCBvbiB3aGljaCB0
aGUKKyAgICAgICJpc1N1cHBvcnRlZChmZWF0dXJlLHZlcnNpb24pIiBtZXRob2QgaXMgaW52b2tl
ZCB3aXRoICJmZWF0dXJlIgorICAgICAgZXF1YWwgdG8gIlhQYXRoIiBhbmQgdmVyc2lvbiB0byAi
My4wIi4gIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhCisgICAgICBib29sZWFuICJ0cnVlIi4K
KyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjQ29uZm9y
bWFuY2UKKyovCitmdW5jdGlvbiBDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zKCkgeworICAgdmFy
IHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiQ29uZm9ybWFu
Y2VfaXNTdXBwb3J0ZWRfMyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAg
dmFyIHN0YXRlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0
eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMu
ZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIp
OworICAgICAgc3RhdGUgPSBkb2MuaXNTdXBwb3J0ZWQoInhwQVRIIiwiMy4wIik7CisgICAgICBh
c3NlcnRUcnVlKCJpc1N1cHBvcnRlZC1YUGF0aC0zLjAiLHN0YXRlKTsKKworfQorCisKKworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMygpOworfQpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxp
ZEl0ZXJhdG9yU3RhdGVfQU5ZX1RZUEUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0
YXRlX0FOWV9UWVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9U
WVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAor
ICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBL
Q2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJ
RF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAw
LDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCww
KSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAz
NTh4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNTg6ICJYUGF0aFJlc3Vs
dF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfdHJ1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFu
VmFsdWVfdHJ1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAK
KyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0
eXBlPVNPTElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4w
MEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9
IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCww
KSBzaXplIDIwOHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwODogIlhQ
YXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0g
YXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDAp
IHNpemUgMTM2eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTM2OiAidHJ1
ZTogYXNzZXJ0VHJ1ZSBmYWlsZWQiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X251
bWJlclZhbHVlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorCisvKgorQ29weXJp
Z2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1
c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRp
dW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBB
bGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUg
VzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGlt
cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwv
MjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3Qg
ZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3Jl
dHVybiBbJ1hQYXRoUmVzdWx0X251bWJlclZhbHVlJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0g
LTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmlu
ZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9u
IGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMg
c3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21w
bGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3
aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFn
ZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8v
CisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNl
cHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7
CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVs
bDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2Fk
KGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9Cisg
ICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwg
ZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8v
CisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAg
ICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAg
IFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisv
LyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAg
ICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0
ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3Rh
dHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBY
UGF0aFJlc3VsdCBOVU1CRVJfVkFMVUUgWFBhdGhSZXN1bHRUeXBlIGZvciBleHByZXNzaW9uCisg
ICAgL3N0YWZmL2VtcGxveWVlL3NhbGFyeVt0ZXh0KCkgPSAnNTYsMDAwJ10gY2hlY2tpbmcgdGhh
dCB0aGUgCisgICAgWFBhdGhSZXN1bHQubnVtYmVyVmFsdWUgPT0gNTYuMAorICAgIAorKiBAYXV0
aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtbnVtYmVyVmFsdWUKKyogQHNl
ZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMx
L3hwYXRoI1hQYXRoUmVzdWx0CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdFR5cGUKKyogQHNlZSBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hw
YXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aFJl
c3VsdF9udW1iZXJWYWx1ZSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlh
bGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X251bWJlclZhbHVlIikgIT0gbnVsbCkgcmV0
dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOwor
ICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOwor
ICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9
IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJ
UlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVz
b2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAg
ICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisK
KyAgICAgIHZhciBleHByZXNzaW9uID0gInN1YnN0cmluZy1iZWZvcmUoL3N2Zy9lbXBsb3llZS9z
YWxhcnlbdGV4dCgpID0gJzU2LDAwMCddLCAnLCcpIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBO
VU1CRVJfVFlQRTsKKyAgICAgIHZhciBudW1iZXJWYWx1ZTsKKyAgICAgIAorICAgICAgdmFyIGRv
Y1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykg
eworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQo
ZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2
YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2Mp
OworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1
YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsK
KyAgICAgIG51bWJlclZhbHVlID0gb3V0cmVzdWx0Lm51bWJlclZhbHVlOworCisgICAgICBhc3Nl
cnRFcXVhbHMoInNhbWUiLDU2LjAsbnVtYmVyVmFsdWUpOworICAgICAgIAorfQorCisKKworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfbnVtYmVyVmFsdWUoKTsKK30KSW5k
ZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5W
YWx1ZV9mYWxzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFsc2UuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVf
ZmFsc2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACisKKy8qCitDb3B5cmlnaHQg
w4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0
cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAK
K2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAK
K1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PD
gsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAy
L2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5j
dGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJu
IFsnWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlJ107Cit9CisKK3ZhciBkb2NzTG9hZGVk
ID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVu
bmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0
aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcg
aXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBj
b21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNl
ZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVw
UGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAg
IC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBl
eGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVy
KCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVs
b2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xv
YWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9
CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRl
ciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisK
Ky8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8v
ICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisv
LyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQs
CisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8v
ICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21w
bGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdl
U3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgQ3JlYXRl
IEJPT0xFQU5fVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGluZyAvc3RhZmYvd29ya2VyYmVlLAorICAg
ICAgY2hlY2tpbmcgdGhhdCBYUGF0aFJlc3VsdC5ib29sZWFuVmFsdWUgPT0gZmFsc2UKKyAgICAK
KyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NS
LURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2
YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0
cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0
aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtYm9vbGVhblZhbHVlCisqLwor
ZnVuY3Rpb24gWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlKCkgeworICAgdmFyIHN1Y2Nl
c3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfYm9v
bGVhblZhbHVlX2ZhbHNlIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7
CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsK
KyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0g
NTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZh
ciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJF
RF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsK
KyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9y
OworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKwor
ICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0gIi9z
dGFmZi93b3JrZXJiZWUiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEJPT0xFQU5fVFlQRTsKKyAg
ICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgdmFyIHBhcmVudDsK
KyAgICAgIHZhciBvd25lcjsKKyAgICAgIHZhciBvd25lclR5cGU7CisgICAgICB2YXIgYm9vbGVh
blZhbHVlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2
YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7
CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxy
ZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVz
dWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAgYXNzZXJ0RmFsc2UoImZhbHNlIixib29sZWFuVmFs
dWUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9i
b29sZWFuVmFsdWVfZmFsc2UoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9E
RV9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5PUkRFUkVE
X05PREVfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5P
UkRFUkVEX05PREVfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAw
eDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmls
bD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4w
MCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7
dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgNTIyeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTIy
OiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1
YXRlX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VY
UFJFU1NJT05fRVJSLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorCisvKgorQ29w
eXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3Nh
Y2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNv
cnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkp
LiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0
aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhl
IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVn
YWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRl
c3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sK
K3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIn
XTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsK
KworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3
b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYg
dGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAg
ICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVz
CisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVk
aWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRl
c3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1
bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1l
bnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0g
Y3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAg
ICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykg
IT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9Cisg
ICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAg
ICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFn
ZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJ
bml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2Nv
bXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
b24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFy
dGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRl
ZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hh
bmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhl
Y3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKy8qKgorKiAgICAgICAKKyAgICBUZXN0IGlmIFhQYXRoRXZhbHVhdG9yLmV2YWx1YXRlIHBy
b3Blcmx5IHRocm93cyBJTlZBTElEX0VYUFJFU1NJT05fRVJST1IKKyAgICAKKyogQGF1dGhvciBQ
aGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItZXZhbHVhdGUKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hl
Y2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJ
RF9FWFBSRVNTSU9OX0VSUiIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAg
dmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFyIHJvb3Q7CisgICAgICB2YXIgcmVzdWx0OworICAg
ICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAgdmFyIG51bGxSZXN1bHQgPSBu
dWxsOworCisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVv
Zih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7
CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7Cisg
ICAgICB4cEV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Cityb290ID0gZG9j
LmRvY3VtZW50RWxlbWVudDsKKworICAgICAgCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRy
eSB7CisgICAgICAgICAgICByZXN1bHQgPSB4cEV2YWx1YXRvci5ldmFsdWF0ZSgiMTJhIixyb290
LG51bGxOU1Jlc29sdmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsg
ICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmlu
ZWQnICYmIGV4LmNvZGUgPT0gNTEpOworCQl9CisJCWFzc2VydFRydWUoInRocm93X0lOVkFMSURf
RVhQUkVTU0lPTl9FUlIiLHN1Y2Nlc3MpOworCX0KKworfQorCisKKworCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9OX0VS
UigpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFs
dWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFE
T0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElU
WSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAg
PCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4
bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0
YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJl
bnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVy
aSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0
eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMg
Im5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRp
b24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVt
cDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5z
IENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBD
REFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1Qg
cmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVE
DQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFV
SVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlw
dCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQg
bnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht
bG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TLmpzIi8+DQor
PHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0
LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1z
dGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291
bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0K
KyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZ
ZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJh
eW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVy
ZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENE
QVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAg
PHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5u
ZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5h
Z2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4m
ZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
Tm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6
bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAw
NDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQor
ICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVt
cDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6
Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50
MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERh
bGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisg
IDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVl
dD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIEly
dmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0K
SW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9l
dmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9XUk9OR19ET0NV
TUVOVF9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5zdmcJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1T
VFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRk
IiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAg
RGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBl
bnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRh
PC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBV
QkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5U
SVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJ
VFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElP
TiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0
aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNj
cmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNU
IHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1Q
VFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4N
CisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwh
LS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4
PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X1dST05HX0RPQ1VNRU5UX0VSUi5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0
dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRp
bjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0K
KyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBU
ZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRt
c3RjPSJodHRwOi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRBW1RoaXMgaXMgYSBD
REFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFb
Q0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0
byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERh
bGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95
ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEw
MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
bXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5
ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3llZSB4bWxuczplbXA9
Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFsdGF2aXN0YS5jb20i
ID4gICAgPGVtcDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlkPg0KKyAgPG5tOm5h
bWU+SmVueSBPY29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5QZXJzb25uZWwgRGly
ZWN0b3I8L2VtcDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwvZW1wOnNhbGFyeT4N
CisgIDxlbXA6Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6YWRkcmVzcyBlbXA6
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FOQURBIiBlbXA6bG9j
YWwxPSJUUlVFIj4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2PC9lbXA6YWRkcmVz
cz4NCisgPC9lbXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAyPSJodHRwOi8vd3d3
Lm5pc3QuZ292IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9M
ZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8
bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlz
dDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0dHA6Ly93d3cubmlz
dC5nb3YiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX2VtcHR5LnN2Zwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJl
X2VtcHR5LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8
IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5U
SVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisg
ICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQx
IHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9Q
SXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIg
ImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAi
dXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50
aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJ
QyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3Rh
dGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywg
ZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1s
bnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1l
IENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElT
VCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlS
RUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JF
UVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2Ny
aXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVu
dCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
eG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIiBzcmM9IkNvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuanMiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMi
Lz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0i
aHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFu
dDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+
MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9s
ZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNl
IG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFT
ZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9z
aXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHpl
cm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0
OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+
UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQor
IDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0i
aHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9l
bXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxl
bXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNh
bGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5k
ZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIg
ZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFz
LCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95
ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZ
ZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5n
IFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJ
dGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMg
QEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0
aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBS
ZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2Vp
byBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9D
b25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisK
Ky8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rp
b25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEVfbnVsbCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAw
OwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRl
c3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRp
b25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQu
ICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5k
IHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRl
cmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7Cisg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAv
LyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisg
ICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAg
ICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkg
eworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0
Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAg
ICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2gg
YXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2
ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0
aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkg
b2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7Cisg
ICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdj
b21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICBDcmVhdGUgYW4gWFBhdGhSZXN1
bHQgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgWFBhdGhSZXN1bHRUeXBlIGZvciAKKyAgICBl
eHByZXNzaW9uIC9zdGFmZi9lbXBsb3llZS9lbXBsb3llZUlkL3RleHQoKSBjaGVja2luZyB0aGF0
OgorICAgIFhQYXRoUmVzdWx0LnNuYXBzaG90SXRlbSh4UGF0aFJlc3VsdC5zbmFwc2hvdExlbmd0
aCkgPT0gbnVsbCwKKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LXNuYXBzaG90LWxlbmd0aAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc25hcHNob3RJ
dGVtCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHRUeXBl
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqLworZnVuY3Rp
b24gWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251
bGwoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxk
ZXIsICJYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVf
bnVsbCIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFy
IE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIg
Qk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2
YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBF
ID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIg
ZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZh
ciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBv
dXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYvZW1wbG95
ZWUvZW1wbG95ZWVJZC90ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IE9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFOworICAgICAgdmFyIHNuYXBzaG90SXRlbTsKKyAgICAgIHZhciBzbmFw
c2hvdExlbmd0aDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7
CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIg
PSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAg
ZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5v
ZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIHNuYXBzaG90TGVuZ3RoID0g
b3V0cmVzdWx0LnNuYXBzaG90TGVuZ3RoOworCisgICAgICBzbmFwc2hvdEl0ZW0gPSBvdXRyZXN1
bHQuc25hcHNob3RJdGVtKHNuYXBzaG90TGVuZ3RoKTsKKyAgICAgIGFzc2VydE51bGwoIm51bGwi
LHNuYXBzaG90SXRlbSk7CisgICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVs
bCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvRWxlbWVudF9O
b2Rlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
RWxlbWVudF9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9FbGVtZW50X05vZGVzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBF
IHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8
IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhh
cyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVu
dCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVu
dDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAg
PCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFO
T1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3ll
ZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQs
IGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklY
RUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJ
RUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAg
ICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdp
ZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8
IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFU
QSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0t
Pg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5
PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iRWxlbWVudF9Ob2Rlcy5qcyIvPg0KKzxzY3JpcHQg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0K
KyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bv
c2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
MS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0
eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFj
ZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+
UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMi
PjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvUHJvY2Vzc2luZ19JbnN0cnVjdGlvbl9Ob2Rlcy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3Np
bmdfSW5zdHJ1Y3Rpb25fTm9kZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisK
Ky8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
CisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFy
Y2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5p
dmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBl
eHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFt
ZXMoKQoreworcmV0dXJuIFsnUHJvY2Vzc2luZ19JbnN0cnVjdGlvbl9Ob2RlcyddOworfQorCit2
YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8g
ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3Jl
CisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUg
bm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1
bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAg
ICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8v
ICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitm
dW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7Cisg
ICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVy
LCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25m
aWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NM
b2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAg
ICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlv
bkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBs
ZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVw
VGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBo
YXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBh
bGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5j
dGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAg
ICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAK
KyAgICAgIFMxLjIuNyBQcm9jZXNzaW5nIEluc3RydWN0aW9uIE5vZGVzIC0gCisgICAgICBDcmVh
dGUgQU5ZX1RZUEUgWFBhdGhSZXN1bHQgbWF0Y2hpbmcgLy9wcm9jZXNzaW5nLWluc3RydWN0aW9u
KCksCisgICAgICBjaGVjayB0aGF0IGVhY2ggbWF0Y2hpbmcgTm9kZSBpcyBhIFByb2Nlc3Npbmcg
SW5zdHJ1Y3Rpb24gTm9kZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I01hcHBpbmcKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2
YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFs
dWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3Vs
dAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaXRlcmF0ZU5leHQKKyovCitmdW5jdGlvbiBQcm9j
ZXNzaW5nX0luc3RydWN0aW9uX05vZGVzKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hl
Y2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiUHJvY2Vzc2luZ19JbnN0cnVjdGlvbl9Ob2RlcyIp
ICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJF
Ul9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVB
Tl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsK
KyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsK
KyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9jOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBjb250
ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRyZXN1
bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvL3Byb2Nlc3NpbmctaW5zdHJ1
Y3Rpb24oKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2YXIgY3Vy
ck5vZGU7CisgICAgICB2YXIgbm9kZVR5cGU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwg
ImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3Io
ZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAg
IGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHBy
ZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBj
dXJyTm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgCisgICAgd2hpbGUoCisJ
CisJKGN1cnJOb2RlICE9IG51bGwpCisKKwkpIHsKKwlub2RlVHlwZSA9IGN1cnJOb2RlLm5vZGVU
eXBlOworCisgICAgICBhc3NlcnRFcXVhbHMoIlMxLjIuNy1Qcm9jZXNzaW5nLUluc3RydWN0aW9u
LU5vZGVzLW5vZGV0eXBlIiw3LG5vZGVUeXBlKTsKKyAgICAgICBjdXJyTm9kZSA9IG91dHJlc3Vs
dC5pdGVyYXRlTmV4dCgpOworICAgICAgCisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICBQcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzKCk7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX25vX05TLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVh
dGVFeHByZXNzaW9uX25vX05TLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorCisv
KgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAor
KE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNo
IENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZl
cnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1
bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRp
dW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhw
b3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVz
KCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMnXTsK
K30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKwor
Ly8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3Jr
IGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhl
cmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAg
ICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisv
LyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0
ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3Qu
CisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5p
bmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQg
YnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3Jl
YXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAg
ICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9
ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0
aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBs
ZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
dGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVk
IGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBk
b2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdl
ZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0
ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisK
Ky8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2YWx1YXRvciBjYW4gY3JlYXRlIGEgIlhQYXRoRXhw
cmVzc2lvbiIgdXNpbmcgdGhlIG1ldGhvZAorICAgICAgImNyZWF0ZUV4cHJlc3Npb24oZXhwcmVz
c2lvbiwgcmVzb2x2ZXIpIi4KKyAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIERPTSBkb2N1bWVu
dCBvbiB3aGljaCB0aGUKKyAgICAgICJjcmVhdGVFeHByZXNzaW9uKCIvIiwgbnVsbCkiIG1ldGhv
ZCBpcyBpbnZva2VkIHdpdGggdGhlIGRvY3VtZW50CisgICAgICBlbGVtZW50LiBUaGUgbWV0aG9k
IHNob3VsZCByZXR1cm4gYSBwcmUtY29tcGlsZWQgZXhwcmVzc2lvbi4KKyAgICAKKyogQGF1dGhv
ciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRl
RXhwcmVzc2lvbgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
bm9fTlMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1
aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TIikgIT0gbnVsbCkg
cmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7CisgICAgICB2YXIg
bnVsbE5TUmVzb2x2ZXIgPSBudWxsOworCisgICAgICB2YXIgZXhwOworICAgICAgCisgICAgICB2
YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0g
bG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVh
dGVYUGF0aEV2YWx1YXRvcihkb2MpOworZXhwID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lv
bigiLyIsbnVsbE5TUmVzb2x2ZXIpOworICAgICAgYXNzZXJ0Tm90TnVsbCgibm90bnVsbCIsZXhw
KTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlRXhwcmVzc2lvbl9ub19OUygpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFX29yZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEVfb3JkZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAw
eDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4wMCww
LjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgNDk0eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggNDk0OiAiWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFX29yZGVyIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3
ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTQweDE4Cisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTQwOiAiVHlwZUVycm9yOiBOdWxsIHZh
bHVlIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
aW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxF
IFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5U
SVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisg
ICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQg
ZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRh
Pz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBO
REFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJl
IGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFG
aWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0K
KyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1F
TlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisg
ICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAg
ICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAg
PCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRB
ICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBD
REFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRU
TElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBp
cyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxz
Y3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhSZXN1
bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMiLz4N
Cis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3Vu
aXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95
ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2Nv
dW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4N
CisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4x
MjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24g
d2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBp
cyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFi
O11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFy
eT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVz
cyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4
NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUz
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAg
PHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVz
dGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5
ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxv
eWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4N
CisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0
cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX251bGwuc3ZnCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNv
bHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNl
VVJJX251bGwuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RB
RkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVO
VElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+
DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5j
b20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAg
PCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0
aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRp
b24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQi
Pg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1F
TlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSop
Pg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwh
RUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEg
I1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAj
UkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNj
cmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+
ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoTlNS
ZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbC5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95
ZWUgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVz
YS5jb20iPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1h
cmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4g
ICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2
ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+
RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRB
W1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVu
dDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBh
IHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRh
cnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Illl
cyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpv
bmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2
aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3ll
ZSB4bWxuczplbXA9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFs
dGF2aXN0YS5jb20iID4gICAgPGVtcDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlk
Pg0KKyAgPG5tOm5hbWU+SmVueSBPY29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5Q
ZXJzb25uZWwgRGlyZWN0b3I8L2VtcDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwv
ZW1wOnNhbGFyeT4NCisgIDxlbXA6Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6
YWRkcmVzcyBlbXA6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FO
QURBIiBlbXA6bG9jYWwxPSJUUlVFIj4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2
PC9lbXA6YWRkcmVzcz4NCisgPC9lbXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAy
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxv
eWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0
ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0
dHA6Ly93d3cubmlzdC5nb3YiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8
L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9B
TllfVFlQRS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVFlQRS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFs
aWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNSBA
QAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRp
dW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJl
c2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlv
IFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0Nv
bnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKwor
Ly8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlv
bk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FO
WV9UWVBFJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9
IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5n
IGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisv
LyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91
cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhl
IHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBp
cyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9m
IHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1
cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0
IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVp
bGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAw
OworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhp
cy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAg
ICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAlj
YXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2Ug
PSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2Fk
IHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMg
bG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBp
cyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBi
ZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9h
ZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9
Cit9CisKKworLyoqCisqIAorICAgICAgQ3JlYXRlIGEgQU5ZX1RZUEUgWFBhdGhSZXN1bHQgbWF0
Y2hpbmcgL3N0YWZmL2VtcGxveWVlLAorICAgICAgbW9kaWZ5IHRoZSBEb2N1bWVudCwgdGhlbiBj
aGVjayB0aGF0IGl0ZXJhdG9yIFhQYXRoUmVzdWx0cworICAgICAgYXJlIGludmFsaWRhdGVkIFhQ
YXRoUmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlID09IHRydWUuCisgICAgCisqIEBhdXRob3Ig
Qm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwt
My1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
dmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZh
bHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1
bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2ludmFs
aWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hl
Y2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfQU5ZX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAg
ICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAg
ICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1Owor
ICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05P
REVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAg
ICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7Cisg
ICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAg
ICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N2Zy9l
bXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2YXIgZW1w
bG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAgIHZhciBpbnZhbGlkSXRlcmF0b3JT
dGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsK
KyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAg
ICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFs
dWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOwor
b3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVz
b2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0VsZW1lbnQgPSBkb2MuZG9jdW1l
bnRFbGVtZW50OworICAgICAgZW1wbG95ZWUgPSBkb2MuY3JlYXRlRWxlbWVudCgiZW1wbG95ZWUi
KTsKKyAgICAgIGVtcGxveWVlID0gZG9jRWxlbWVudC5hcHBlbmRDaGlsZChlbXBsb3llZSk7Cisg
ICAgICBpbnZhbGlkSXRlcmF0b3JTdGF0ZSA9IG91dHJlc3VsdC5pbnZhbGlkSXRlcmF0b3JTdGF0
ZTsKKyAgICAgIGFzc2VydFRydWUoInRydWUiLGludmFsaWRJdGVyYXRvclN0YXRlKTsKKworfQor
CisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJh
dG9yU3RhdGVfQU5ZX1RZUEUoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
RXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAw
eDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCww
LjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMzUxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggMzUxOiAiWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudDogU3Vj
Y2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JT
dGF0ZV9TVFJJTkdfVFlQRS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQ
RS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQi
IFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxs
YXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQg
IjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJ
dGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAi
ZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50
aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJ
QyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3Rh
dGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+
DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRU
TElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0
IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQor
ICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisg
ICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFU
QSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4N
Cis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
cmM9IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFLmpzIi8+DQor
PHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0
LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3Vu
dGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIz
MCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdp
dGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMg
YW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtd
XT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1
NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEw
MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1Mzwv
YWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+
RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxw
b3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1
NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQor
ICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjkw
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJl
ZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBw
b3J0ZWRfMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIg
e3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQg
KDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0g
W2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJd
CisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyNDN4MTgKKyAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCAyNDM6ICJDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zOiBTdWNj
ZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OQU1FU1BBQ0VfRVJS
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUi5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMjAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdl
YiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBF
dXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1h
dGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsg
aXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4g
dGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3
LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMx
CisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VU
ZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9O
QU1FU1BBQ0VfRVJSJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVp
bGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0
ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4K
Ky8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5j
aHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lz
ZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBi
b2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRl
cyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAg
ICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2Fk
ZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogICAgICAgCisgICAgVGVzdCBpZiBYUGF0aEV2YWx1YXRv
ci5ldmFsdWF0ZSBwcm9wZXJseSB0aHJvd3MgTkFNRVNQQUNFX0VSUk9SCisgICAgCisqIEBhdXRo
b3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I1hQYXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfZXZh
bHVhdGVfTkFNRVNQQUNFX0VSUigpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5p
dGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFDRV9F
UlIiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAgICAgIHZhciB4cEV2YWx1YXRv
cjsKKyAgICAgIHZhciByb290OworICAgICAgdmFyIHJlc3VsdDsKKyAgICAgIHZhciBudWxsTlNS
ZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAg
CisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAg
ICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0
b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1l
bnQ7CisKKyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAg
ICAgcmVzdWx0ID0geHBFdmFsdWF0b3IuZXZhbHVhdGUoIi8vZm9vOmJhciIscm9vdCxudWxsTlNS
ZXNvbHZlciwwLG51bGxSZXN1bHQpOworICAgICAgICB9CisJCWNhdGNoKGV4KSB7CisgICAgICBz
dWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDE0
KTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ0aHJvd19OQU1FU1BBQ0VfRVJSIixzdWNjZXNzKTsKKwl9
CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9yX2V2
YWx1YXRlX05BTUVTUEFDRV9FUlIoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5
cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfcmVzdWx0VHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNh
bnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0
ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNp
emUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJN
MC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAg
UmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjEzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggMjEzOiAiWFBhdGhSZXN1bHRfcmVzdWx0VHlwZTogU3VjY2VzcyIKSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5T
UmVzb2x2ZXJfZG9jdW1lbnRFbGVtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1l
bnRFbGVtZW50LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTExIEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAx
LTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1
dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZv
cm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBS
ZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3
YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50
eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
IAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdo
dC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1l
cworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhF
dmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQnXTsKK30KKwordmFyIGRv
Y3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8g
ICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNv
bmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQg
bG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMg
c2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAg
ICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rp
b24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5
IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5
IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJl
ZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBk
b2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVk
ICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAg
aWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7
CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVy
cm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9
Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRp
b24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVz
dHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMg
Y29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxv
d3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlv
biBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAg
IHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAg
ICAgIFRoZSBYUGF0aEV2YWx1YXRvciBjYW4gY3JlYXRlICJYUGF0aE5TUmVzb2x2ZXIiIHVzaW5n
IHRoZSBtZXRob2QKKyAgICAgICJjcmVhdGVOU1Jlc29sdmVyKG5vZGVSZXNvbHZlcikiLgorICAg
ICAgCisgICAgICBSZXRyaWV2ZSB0aGUgRE9NIGRvY3VtZW50IG9uIHdoaWNoIHRoZQorICAgICAg
ImNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0
aGUgZG9jdW1lbnQKKyAgICAgIGVsZW1lbnQuICBUaGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBy
ZXNvbHZlci4KKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZh
bHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnRFbGVtZW50KCkgeworICAgdmFyIHN1Y2Nl
c3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQiKSAhPSBudWxsKSByZXR1cm47CisgICAg
dmFyIGRvYzsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAg
ICAgIHZhciByb290OworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlm
ICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRo
aXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZO
UyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9v
dCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgIHJlc29sdmVyID0geHBFdmFsdWF0b3Iu
Y3JlYXRlTlNSZXNvbHZlcihyb290KTsKKyAgICAgIGFzc2VydE5vdE51bGwoIm5vdG51bGwiLHJl
c29sdmVyKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFdmFs
dWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEVfbnVsbC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEVfbnVsbC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcg
U1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJ
VFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0K
KyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0
YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBV
QkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5U
SVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJ
T04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3Rh
dGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1s
bnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBs
b3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0K
KyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHgg
Q0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBD
REFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVN
RU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lN
UExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8
c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIg
d2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRV9udWxsLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMg
OTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtD
REFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAy
ICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdp
dGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2Vj
cmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMi
PiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFu
YWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5Q
TyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3
IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lh
bGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5t
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQs
IElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNo
b3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLnN2Zwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0
ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIuc3ZnCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVt
X09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQor
PCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVz
Ij4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBl
bnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1ll
cyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwh
RU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlv
bjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+
DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8
IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElT
VCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0
LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBD
REFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RB
VEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJl
Y3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0K
KyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlS
RUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQg
dHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51
bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVj
dCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfc25hcHNob3RJ
dGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLmpzIi8+DQorPHNjcmlwdCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRp
b24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZl
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUu
IERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3ll
ZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0
aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVm
ZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQg
Q0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQor
ICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwv
ZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJz
b25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+
Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgy
MSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1
bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMzcgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3Js
ZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNo
bm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFu
ZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBU
aGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5z
ZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBo
dHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJl
LTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlv
biBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRSddOworfQorCit2YXIgZG9j
c0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAg
ICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29u
ZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBs
b2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBz
ZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAg
ICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlv
biBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkg
eworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkg
dGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVk
QnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRv
Y1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykg
eworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQg
Kz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYg
KGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9y
KGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24g
b2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMu
CisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29t
cGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3Mg
dGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNl
dFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAg
IENyZWF0ZSBhIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9z
dGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUgRG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhh
dCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFyZSBub3QgaW52YWxpZGF0ZWQgWFBhdGhS
ZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGUgPT0gZmFsc2UuCisgICAgCisqIEBhdXRob3IgQm9i
IENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1Y
UGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFs
dWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVh
dGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQt
aW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2ludmFsaWRJ
dGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7
CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaW52YWxp
ZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUiKSAhPSBudWxsKSByZXR1cm47
CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAg
ICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAg
ICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsK
KyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZl
cjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2
YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAg
ICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlIjsKKyAgICAgIHZhciB4cGF0aFR5
cGUgPSBBTllfVU5PUkRFUkVEX05PREVfVFlQRTsKKyAgICAgIHZhciBlbXBsb3llZTsKKyAgICAg
IHZhciBkb2NFbGVtZW50OworICAgICAgdmFyIGludmFsaWRJdGVyYXRvclN0YXRlOworICAgICAg
CisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAg
ICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9
IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVO
U1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBl
dmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5
cGUsaW5yZXN1bHQpOworICAgICAgZG9jRWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisK
KyAgICAgIGVtcGxveWVlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImVtcGxveWVlIik7CisgICAgICBl
bXBsb3llZSA9IGRvY0VsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wbG95ZWUpOworICAgICAgaW52YWxp
ZEl0ZXJhdG9yU3RhdGUgPSBvdXRyZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAg
IGFzc2VydEZhbHNlKCJmYWxzZSIsaW52YWxpZEl0ZXJhdG9yU3RhdGUpOworCit9CisKKworCisK
K2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0
ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfSUQuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0lELnN2ZwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0lELnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFE
T0NUWVBFIHN2ZyBbDQorICA8IUVMRU1FTlQgdGVzdCAoY2hpbGQpKyA+DQorICA8IUFUVExJU1Qg
dGVzdCB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgIDwhRUxFTUVOVCBjaGlsZCBFTVBUWT4NCisg
IDwhQVRUTElTVCBjaGlsZCBpZCBJRCAjSU1QTElFRD4NCisgIDwhQVRUTElTVCBjaGlsZCBjaGVj
ayBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIHRlc3Qp
Pg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwh
RUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEg
I1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAj
UkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNj
cmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+
ICAgICAgDQorICA8IUVOVElUWSBzdmd1bml0IFNZU1RFTSAic3ZndW5pdC5qcyI+DQorICA8IUVO
VElUWSBzdmd0ZXN0IFNZU1RFTSAiQ29uZm9ybWFuY2VfSUQuanMiPiAgDQorXT4NCis8c3ZnIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiLz48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+JnN2Z3Rl
c3Q7JnN2Z3VuaXQ7PC9zY3JpcHQ+DQorPHRlc3QgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5v
cmciPg0KKyAgPGNoaWxkIGlkPSJjaGlsZDEiIGNoZWNrPSJjaGlsZDEiLz4NCisgIDxjaGlsZCBp
ZD0iY2hpbGQyIiBjaGVjaz0iY2hpbGQyIi8+DQorPC90ZXN0Pg0KKzwvc3ZnPg0KKw0KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0
ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQ
T1JURURfRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VS
Ui1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0Nh
bnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwx
MDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkg
c2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDEy
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDEyOiAiWFBhdGhFeHByZXNz
aW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVf
U1RSSU5HX1RZUEUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RSSU5HX1RZUEUuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQRS5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMzcgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdl
YiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBF
dXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1h
dGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsg
aXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4g
dGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3
LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMx
CisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VU
ZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0
b3JTdGF0ZV9TVFJJTkdfVFlQRSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwor
dmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBi
eSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qg
c3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25z
LCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBP
dGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRo
ZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmlu
ZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBz
ZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAg
IGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAg
IC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBk
b2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBp
ZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0
aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJk
b2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgewor
ICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2go
ZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAg
ICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5
Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5
IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUg
cGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2Yg
dGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAg
aWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21w
bGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhIFNUUklOR19UWVBF
IFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUg
RG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFy
ZSBub3QgaW52YWxpZGF0ZWQgWFBhdGhSZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGUgPT0gZmFs
c2UuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRv
cgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAw
MzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0
aW9uIFhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFKCkgeworICAg
dmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhS
ZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RSSU5HX1RZUEUiKSAhPSBudWxsKSByZXR1cm47
CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAg
ICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAg
ICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsK
KyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZl
cjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2
YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAg
ICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlIjsKKyAgICAgIHZhciB4cGF0aFR5
cGUgPSBTVFJJTkdfVFlQRTsKKyAgICAgIHZhciBlbXBsb3llZTsKKyAgICAgIHZhciBkb2NFbGVt
ZW50OworICAgICAgdmFyIGludmFsaWRJdGVyYXRvclN0YXRlOworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRo
RXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRv
Yyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZh
bHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQp
OworICAgICAgZG9jRWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgIGVtcGxv
eWVlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImVtcGxveWVlIik7CisgICAgICBlbXBsb3llZSA9IGRv
Y0VsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wbG95ZWUpOworICAgICAgaW52YWxpZEl0ZXJhdG9yU3Rh
dGUgPSBvdXRyZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAgIGFzc2VydEZhbHNl
KCJmYWxzZSIsaW52YWxpZEl0ZXJhdG9yU3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQ
RSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1
bHRfYm9vbGVhblZhbHVlX2ZhbHNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFsc2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVu
ZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2
Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2Rh
dGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisg
ICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyNzF4MTgKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAyNzE6ICJYUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFsc2U6IFN1
Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9U
WVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAs
MC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3Rl
eHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDU2N3gxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU2Nzog
IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBz
aG90TGVuZ3RoX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzMiBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUg
V2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ks
IEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhl
bWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29y
ayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBp
biB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93
d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEy
MzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9z
ZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X3NuYXBzaG90TGVu
Z3RoX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0g
LTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmlu
ZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9u
IGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMg
c3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21w
bGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3
aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFn
ZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8v
CisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNl
cHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7
CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVs
bDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2Fk
KGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9Cisg
ICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwg
ZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8v
CisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAg
ICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAg
IFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisv
LyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAg
ICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0
ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3Rh
dHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBY
UGF0aFJlc3VsdCBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSBYUGF0aFJlc3VsdFR5cGUgZm9y
IAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgpIGNoZWNr
aW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuc25hcHNob3RMZW5ndGggaXMgY29ycmVjdCB2YWx1
ZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXNu
YXBzaG90LWxlbmd0aAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc25hcHNob3RJdGVtCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHRUeXBlCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqLworZnVuY3Rpb24gWFBhdGhS
ZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJl
c3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSIpICE9IG51bGwp
IHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0g
MTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0g
MzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZh
ciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZh
ciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9jOworICAgICAgdmFy
IHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsK
KyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxs
OworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90
ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
OworICAgICAgdmFyIHNuYXBzaG90SXRlbTsKKyAgICAgIHZhciBzbmFwc2hvdExlbmd0aDsKKyAg
ICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9j
KSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0K
KyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0
b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3Jl
YXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0
ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBh
dGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIHNuYXBzaG90TGVuZ3RoID0gb3V0cmVzdWx0LnNuYXBz
aG90TGVuZ3RoOworCisgICAgICBhc3NlcnRFcXVhbHMoInNhbWUiLDUsc25hcHNob3RMZW5ndGgp
OworICAgICAgIAorfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1
bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUoKTsKK30KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBO
YW1lc3BhY2VVUklfcHJlZml4LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeC5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeC5zdmcJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/
Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAg
PCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQi
Pg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxl
bWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50
MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5
VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVC
TElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhp
cyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEg
UFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0g
Im5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95
ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAg
ICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAg
IG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFB
VFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFU
QSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElT
VCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBj
b21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3
aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9w
cmVmaXguanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
IiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3Qu
Z292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8
cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1z
dGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3
dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9M
ZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8
bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdp
dGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMg
YW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtd
XT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0K
KyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3Rj
PSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5E
ZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5p
c3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1w
bG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5v
cjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9z
aXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRl
cj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+Mjcg
U291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15
ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0K
KyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5v
cmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0K
KyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzcgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSddOwor
fQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisv
LworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsg
YmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVy
ZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAg
ICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8v
ICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRl
bHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4K
Ky8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmlu
Zyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAg
CisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFs
aXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRl
JzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhl
IGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGlu
IHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1
bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3
aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQu
CitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7
CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8q
KgorKiAKKyAgICAgIENyZWF0ZSBhIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIFhQYXRoUmVz
dWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUgRG9jdW1lbnQs
IHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFyZSBub3QgaW52
YWxpZGF0ZWQgWFBhdGhSZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGUgPT0gZmFsc2UuCisgICAg
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
dmFsdWF0b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhSZXN1bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0aW9uIFhQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKCkg
eworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAi
WFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBO
VU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJP
T0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9
IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFy
IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9
IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRv
YzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIg
Y29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0
cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVl
IjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRTsKKyAg
ICAgIHZhciBlbXBsb3llZTsKKyAgICAgIHZhciBkb2NFbGVtZW50OworICAgICAgdmFyIGludmFs
aWRJdGVyYXRvclN0YXRlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAg
IGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9
IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNv
bHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9k
ZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250
ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgZG9jRWxlbWVudCA9
IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgIGVtcGxveWVlID0gZG9jLmNyZWF0ZUVsZW1l
bnQoImVtcGxveWVlIik7CisgICAgICBlbXBsb3llZSA9IGRvY0VsZW1lbnQuYXBwZW5kQ2hpbGQo
ZW1wbG95ZWUpOworICAgICAgaW52YWxpZEl0ZXJhdG9yU3RhdGUgPSBvdXRyZXN1bHQuaW52YWxp
ZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAgIGFzc2VydEZhbHNlKCJmYWxzZSIsaW52YWxpZEl0ZXJh
dG9yU3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSgpOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfRXhw
cmVzc2lvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0V4cHJlc3Npb25zLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0V4
cHJlc3Npb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBM
MTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBh
dCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAyMjh4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyMjg6ICJDb25m
b3JtYW5jZV9FeHByZXNzaW9uczogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVFlQRS5zdmcJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0
b3JTdGF0ZV9BTllfVFlQRS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lT
VEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkg
ZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAg
IDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwv
ZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJ
QyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZ
IGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04g
bm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMg
Q0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3ll
ZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAg
IDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFU
QSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5U
IHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJ
RUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9U
WVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
c3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RB
VEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NE
QVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8g
YSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZl
bnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpv
bmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0
ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxh
cywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXll
cnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMy5zdmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNT
dXBwb3J0ZWRfMy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQor
PCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/
UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkki
ICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMg
InVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVu
dGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJM
SUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90
YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSss
IGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHht
bG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFt
ZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJ
U1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJ
UkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNS
RVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNj
cmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1l
bnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3JjPSJDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLmpzIi8+DQorPHNjcmlw
dCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0
dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8
L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdl
bmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEy
MzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8
ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRz
DQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBu
dW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2Vj
dGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0
aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJv
LmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8
L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBP
IEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0
dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1w
OmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1w
OnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxh
cnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVy
Pg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVt
cDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywg
dGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVz
IiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBU
ZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4
dF9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0X09SREVSRURf
Tk9ERV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJz
dGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAi
MTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5U
SVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxl
bWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50
aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEg
IlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lT
VEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEg
I0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0K
KyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlw
dCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAg
ICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEw
MCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRS5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAg
PHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAy
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFz
LCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0K
KyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmlu
ZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25u
b3I8L25hbWU+DQorICA8cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisg
IDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBE
YWxsYXMsIFRleGFzIDk4NTU2PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxl
cyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0
IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMg
OTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dST05HX0RP
Q1VNRU5UX0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLnN2ZwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwh
RE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJ
VFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAg
IDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEg
eG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJ
dGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAi
ZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1
cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRp
dHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElD
ICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0
aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBl
bXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxu
cyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUg
Q0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNU
IHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJF
RA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVR
VUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3Jp
cHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50
IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4
bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHNyYz0iWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJS
LmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3Jj
PSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIg
eG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAx
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRv
bWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNh
LmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVu
dGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFk
amFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9u
YW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3Rj
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1
NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0
cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0
bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8
L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0Lmdv
diIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVl
SWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25t
Om5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9u
Pg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVt
YWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRo
IFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwv
bmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxz
YWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMu
IFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9z
dmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAw
eDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmls
bD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4w
MCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7
dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgNTcxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTcx
OiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVy
IGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAg
ICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBl
PVNPTElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwx
MDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0
ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDQ5NHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ5NDogIlhQYXRo
UmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUiCisgICAg
ICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyOTR4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCAyOTQ6ICJzYW1lOiBhc3NlcnRFcXVhbHMgZmFpbGVkLCBhY3R1YWwgMCwg
ZXhwZWN0ZWQgNS4iCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25f
ZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9k
b2N1bWVudEVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAs
MC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3Rl
eHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDM1MHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM1MDog
IlhQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQ6IFN1Y2Nlc3MiCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Qcm9jZXNzaW5nX0luc3RydWN0aW9u
X05vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9Qcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3Npbmdf
SW5zdHJ1Y3Rpb25fTm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcg
QEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEw
MHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2Zp
bGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAu
MDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQg
e3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDI1MHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI1
MDogIlByb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXM6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9JRC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2Vf
SUQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvQ29uZm9ybWFuY2VfSUQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4w
MEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
TlMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Np
b25fTlMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisKKy8qCitDb3B5cmlnaHQg
w4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0
cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAK
K2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAK
K1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PD
gsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAy
L2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5j
dGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJu
IFsnWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUyddOworfQorCit2YXIgZG9jc0xv
YWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAg
IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmln
dXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2Fk
aW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQg
dG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICBy
YWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBz
ZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgewor
ICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhy
b3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVp
bGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1Jl
ZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgewor
ICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0g
cHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAo
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3Io
YnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBv
ZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4K
Ky8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21w
bGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0
aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxv
YWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0
VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAg
VGhlIFhQYXRoRXZhbHVhdG9yIGNhbiBjcmVhdGUgYSAiWFBhdGhFeHByZXNzaW9uIiB1c2luZyB0
aGUgbWV0aG9kCisgICAgICAiY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciki
LgorICAgICAgCisgICAgICBSZXRyaWV2ZSB0aGUgRE9NIGRvY3VtZW50IG9uIHdoaWNoIHRoZQor
ICAgICAgJ2NyZWF0ZUV4cHJlc3Npb24oIi9zdGFmZi9uaXN0OmVtcGxveWVlIiwgcmVzb2x2ZXIp
JyBtZXRob2QgaXMKKyAgICAgIGludm9rZWQgd2l0aCB0aGUgZG9jdW1lbnQgZWxlbWVudC4gIFRo
ZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhCisgICAgICBwcmUtY29tcGlsZWQgZXhwcmVzc2lvbi4K
KyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
dmFsdWF0b3ItY3JlYXRlRXhwcmVzc2lvbgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2Ny
ZWF0ZUV4cHJlc3Npb25fTlMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRp
YWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TIikg
IT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7Cisg
ICAgICB2YXIgZXhwOworICAgICAgdmFyIHJvb3Q7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAg
ICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykg
IT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9Cisg
ICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICB4cEV2YWx1
YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Cityb290ID0gZG9jLmRvY3VtZW50RWxl
bWVudDsKKworICAgICAgcmVzb2x2ZXIgPSB4cEV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKHJv
b3QpOworICAgICAgZXhwID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lvbigiL3N0YWZmL25p
c3Q6ZW1wbG95ZWUiLHJlc29sdmVyKTsKKyAgICAgIGFzc2VydE5vdE51bGwoIm5vdG51bGwiLGV4
cCk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fTlMoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVf
VFlQRS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURfTk9ERV9U
WVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVf
VFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAg
IEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNP
TElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAu
MDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgw
LDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDQzOXgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQzOTogIlhQYXRoUmVz
dWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRSIKKyAgICAgIFJlbmRl
clNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0MHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDE0MDogIlR5cGVFcnJvcjogTnVsbCB2YWx1ZSIKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVf
RVJSLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0ZU5l
eHRfSU5WQUxJRF9TVEFURV9FUlIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUwIEBACisK
Ky8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
CisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFy
Y2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5p
dmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBl
eHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFt
ZXMoKQoreworcmV0dXJuIFsnWFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9F
UlInXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVs
bDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJh
bWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAg
SWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisv
LyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3Rh
dHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGlt
bWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhl
IHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0g
J3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9j
dW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVy
ID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7Cisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7Cisg
ICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBh
Z2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNo
SW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3Rh
cnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2Fk
ZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNo
YW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4
ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisvKioKKyogCisgICAgICBDcmVhdGUgYSBBTllfVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGlu
ZyAvc3RhZmYvZW1wbG95ZWUsCisgICAgICBtb2RpZnkgdGhlIERvY3VtZW50LCB0aGVuIGNoZWNr
IHRoYXQgWFBhdGhSZXN1bHRzLml0ZXJhdGVOZXh0CisgICAgICB0aHJvd3MgRE9NRXhjZXB0aW9u
IElOVkFMSURfU1RBVEVfRVJSLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVz
b2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0CisqIEBzZWUgaHR0cDovL3d3
dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0
aFJlc3VsdC1pdGVyYXRlTmV4dAorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0
X0lOVkFMSURfU1RBVEVfRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0
aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFU
RV9FUlIiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZh
ciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFy
IEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAg
dmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQ
RSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFy
IGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2
YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIg
b3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxv
eWVlIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBBTllfVFlQRTsKKyAgICAgIHZhciBvdXROb2Rl
OworICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgdmFyIHBhcmVudDsKKyAgICAgIHZhciBvd25l
cjsKKyAgICAgIHZhciBvd25lclR5cGU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIg
ZG9jRWxlbWVudDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7
CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIg
PSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAg
ZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5v
ZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0VsZW1lbnQgPSBkb2Mu
ZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJl
bXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGVtcGxv
eWVlKTsKKyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAg
ICAgb3V0Tm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgICB9CisJCWNhdGNo
KGV4KSB7CisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAm
JiBleC5jb2RlID09IDExKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ0aHJvd19JTlZBTElEX1NUQVRF
X0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBYUGF0aFJlc3VsdF9pdGVyYXRlTmV4dF9JTlZBTElEX1NUQVRFX0VSUigpOworfQpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0
X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRf
T1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0
X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZh
cyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgw
LDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUg
MTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4w
MCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDQxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggNDQxOiAiWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0X09SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4
MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjk3eDE4CisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjk3OiAiY291bnQ6IGFzc2VydEVxdWFscyBm
YWlsZWQsIGFjdHVhbCAwLCBleHBlY3RlZCA1LiIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHktZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNl
X2hhc0ZlYXR1cmVfZW1wdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9lbXB0eS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2Fu
dmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0
ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xv
cj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBM
MC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3
ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjY3eDE4Cisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjY3OiAiQ29uZm9ybWFuY2VfaGFzRmVh
dHVyZV9lbXB0eTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFDRV9FUlItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2V2YWx1YXRlX05BTUVTUEFDRV9FUlItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVf
TkFNRVNQQUNFX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMzY2eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzY2OiAi
WFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUjogU3VjY2VzcyIKSW5kZXg6IExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVz
b2x2ZXJfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVy
X2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2Rv
Y3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgNDAzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDAzOiAi
WFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQ6IFN1Y2Nlc3Mi
CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Qcm9jZXNzaW5nX0luc3Ry
dWN0aW9uX05vZGVzLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9Qcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzLnN2ZwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25f
Tm9kZXMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RFTSAic3RhZmYu
ZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAg
RGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBl
bnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQ+
PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVS
SSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQxICJUaGlz
IGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQ
VUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAi
bm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENEQVRBICNJTVBM
SUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrKT4NCisgICA8
IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQg
cmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJF
RA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVE
DQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQ
Q0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0K
K10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhl
aWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgc3JjPSJQcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzLmpzIi8+DQorPHNjcmlwdCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRp
b24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZl
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUu
IERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3ll
ZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0
aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVm
ZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQg
Q0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQor
ICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwv
ZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJz
b25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+
Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgy
MSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJf
bG9va3VwTmFtZXNwYWNlVVJJX251bGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVz
cGFjZVVSSV9udWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMzAyeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzAyOiAi
WFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsIgorICAgICAgUmVuZGVyU1ZH
VGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMTk5eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggMTk5OiAibm90bnVsbDogYXNzZXJ0TnVsbCBmYWlsZWQsIGFjdHVhbCIKSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0
YXRlX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRl
cmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29u
dGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3Jl
Y3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4
MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwx
MDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgK
KyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNTQzeDE4CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTQzOiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJh
dG9yU3RhdGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9UWVBF
X0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQ
RV9FUlIuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYi
ICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElU
WSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQor
ICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20n
PkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFF
TlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9u
MT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24y
Pg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0K
KyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFO
T1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQg
c3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0K
KyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlw
dCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAg
ICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0
LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVh
dG9yX2V2YWx1YXRlX1RZUEVfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFy
dGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAg
DQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50Mjsg
RGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFz
IDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVt
cD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNv
bSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06
bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBE
aXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5
Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVt
cDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDps
b2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRy
ZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFs
aXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29tbWVu
dF9Ob2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAg
ICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9
U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEw
MC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQg
KDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgMTY5eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTY5OiAiQ29tbWVu
dF9Ob2RlczogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFs
dWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNp
emUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEw
MCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAw
TDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZH
VGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgNDAzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggNDAzOiAiWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlI6IFN1Y2Nl
c3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9F
eHByZXNzaW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9Db25mb3JtYW5jZV9FeHByZXNzaW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0V4cHJlc3Npb25zLmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMwNyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0
IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9m
IFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRp
Y3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2
ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBM
aWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2Yg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKwor
WzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29m
dHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1
bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ0NvbmZvcm1hbmNl
X0V4cHJlc3Npb25zJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVp
bGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0
ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4K
Ky8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5j
aHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lz
ZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBi
b2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRl
cyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAg
ICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2Fk
ZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogCisgICAgICAxLjMgQ29uZm9ybWFuY2UgLSBJdGVyYXRl
IG92ZXIgYSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyAKKyAgICAgIHZhbGlkIFhQYXRoIGV4
cHJlc3Npb25zLCBjYWxsaW5nIFhQYXRoRXZhbHVhdG9yLmNyZWF0ZUV4cHJlc3Npb24gCisgICAg
ICBmb3IgZWFjaC4gSWYgbm8gZXhwZWN0aW9ucyBhcmUgdGhyb3duIGFuZCBlYWNoIHJlc3VsdCBp
cyBub24tbnVsbCwgCisgICAgICB0aGVuIHRoZSB0ZXN0IHBhc3Nlcy4KKyAgICAKKyogQGF1dGhv
ciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZl
bC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI0NvbmZvcm1hbmNlCisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2
YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMt
WFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlRXhwcmVzc2lvbgorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhOU1Jlc29sdmVyCisqLworZnVuY3Rpb24gQ29uZm9ybWFuY2VfRXhwcmVzc2lvbnMoKSB7Cisg
ICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25m
b3JtYW5jZV9FeHByZXNzaW9ucyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAg
ICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBleHByZXNz
aW9uOworICAgICAgdmFyIGV4cHJlc3Npb25MaXN0ID0gbmV3IEFycmF5KCk7CisKKyAgICAgIHZh
ciB4cGF0aGV4cHJlc3Npb247CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAg
ICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVm
ID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOwor
cmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgZXhwcmVz
c2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIvIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiY2hpbGQ6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImNoaWxkOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJjaGlsZDo6cHJvY2Vzc2luZy1pbnN0cnVjdGlv
bigpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiY2hpbGQ6OnBy
b2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25hbWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9u
TGlzdC5sZW5ndGhdID0gImNoaWxkOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lv
bkxpc3QubGVuZ3RoXSA9ICJjaGlsZDo6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlz
dC5sZW5ndGhdID0gImNoaWxkOjpuaXN0OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxp
c3QubGVuZ3RoXSA9ICJjaGlsZDo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lv
bkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojpjb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojp0ZXh0KCkiOworZXhwcmVzc2lv
bkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojpwcm9jZXNzaW5nLWlu
c3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJk
ZXNjZW5kYW50Ojpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojpub2RlKCkiOworZXhwcmVz
c2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50OjoqIjsKK2V4cHJl
c3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZGVzY2VuZGFudDo6bmlzdDoqIjsK
K2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZGVzY2VuZGFudDo6ZW1w
bG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwYXJlbnQ6
OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInBh
cmVudDo6dGV4dCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
cGFyZW50Ojpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICJwYXJlbnQ6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25hbWUn
KSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInBhcmVudDo6bm9k
ZSgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicGFyZW50Ojoq
IjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicGFyZW50OjpuaXN0
OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwYXJlbnQ6OmVt
cGxveWVlIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0
b3I6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0g
ImFuY2VzdG9yOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJhbmNlc3Rvcjo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbigpIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0b3I6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rp
b24oJ25hbWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImFu
Y2VzdG9yOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICJhbmNlc3Rvcjo6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0g
ImFuY2VzdG9yOjpuaXN0OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJhbmNlc3Rvcjo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICJmb2xsb3dpbmctc2libGluZzo6Y29tbWVudCgpIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nLXNpYmxpbmc6OnRleHQoKSI7Citl
eHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZy1zaWJsaW5n
Ojpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxp
c3QubGVuZ3RoXSA9ICJmb2xsb3dpbmctc2libGluZzo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbign
bmFtZScpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93
aW5nLXNpYmxpbmc6Om5vZGUoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gImZvbGxvd2luZy1zaWJsaW5nOjoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25M
aXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nLXNpYmxpbmc6Om5pc3Q6KiI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZy1zaWJsaW5nOjplbXBsb3llZSI7
CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZy1zaWJs
aW5nOjpjb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICJwcmVjZWRpbmctc2libGluZzo6dGV4dCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25M
aXN0Lmxlbmd0aF0gPSAicHJlY2VkaW5nLXNpYmxpbmc6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24o
KSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZy1z
aWJsaW5nOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwcmVjZWRpbmctc2libGluZzo6bm9kZSgpIjsKK2V4
cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicHJlY2VkaW5nLXNpYmxpbmc6
OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwcmVjZWRpbmct
c2libGluZzo6bmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0g
PSAicHJlY2VkaW5nLXNpYmxpbmc6OmVtcGxveWVlIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Np
b25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nOjpjb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJmb2xsb3dpbmc6OnRleHQoKSI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZzo6cHJvY2Vzc2luZy1pbnN0
cnVjdGlvbigpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9s
bG93aW5nOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJmb2xsb3dpbmc6Om5vZGUoKSI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZzo6KiI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZzo6bmlzdDoqIjsKK2V4cHJl
c3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nOjplbXBsb3llZSI7
CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZzo6Y29t
bWVudCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicHJlY2Vk
aW5nOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cmVjZWRpbmc6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKSI7CitleHByZXNzaW9uTGlzdFtleHBy
ZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZzo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbign
bmFtZScpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicHJlY2Vk
aW5nOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cmVjZWRpbmc6OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cmVjZWRpbmc6Om5pc3Q6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gInByZWNlZGluZzo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICJhdHRyaWJ1dGU6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNz
aW9uTGlzdC5sZW5ndGhdID0gImF0dHJpYnV0ZTo6dGV4dCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYXR0cmlidXRlOjpwcm9jZXNzaW5nLWluc3RydWN0aW9u
KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhdHRyaWJ1dGU6
OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25hbWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNz
aW9uTGlzdC5sZW5ndGhdID0gImF0dHJpYnV0ZTo6bm9kZSgpIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYXR0cmlidXRlOjoqIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYXR0cmlidXRlOjpuaXN0OioiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhdHRyaWJ1dGU6OmVtcGxveWVlIjsKK2V4cHJl
c3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAibmFtZXNwYWNlOjpjb21tZW50KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJuYW1lc3BhY2U6OnRl
eHQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIm5hbWVzcGFj
ZTo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbigpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25M
aXN0Lmxlbmd0aF0gPSAibmFtZXNwYWNlOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJyki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJuYW1lc3BhY2U6Om5v
ZGUoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIm5hbWVzcGFj
ZTo6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIm5hbWVzcGFj
ZTo6bmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAibmFt
ZXNwYWNlOjplbXBsb3llZSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gInNlbGY6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gInNlbGY6OnRleHQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gInNlbGY6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKSI7CitleHByZXNzaW9uTGlzdFtl
eHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInNlbGY6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25h
bWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInNlbGY6Om5v
ZGUoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInNlbGY6Oioi
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJzZWxmOjpuaXN0Oioi
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJzZWxmOjplbXBsb3ll
ZSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImRlc2NlbmRhbnQt
b3Itc2VsZjo6Y29tbWVudCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0
aF0gPSAiZGVzY2VuZGFudC1vci1zZWxmOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50LW9yLXNlbGY6OnByb2Nlc3NpbmctaW5zdHJ1
Y3Rpb24oKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImRlc2Nl
bmRhbnQtb3Itc2VsZjo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbignbmFtZScpIjsKK2V4cHJlc3Np
b25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZGVzY2VuZGFudC1vci1zZWxmOjpub2Rl
KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50
LW9yLXNlbGY6OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJk
ZXNjZW5kYW50LW9yLXNlbGY6Om5pc3Q6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlz
dC5sZW5ndGhdID0gImRlc2NlbmRhbnQtb3Itc2VsZjo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjpjb21tZW50KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1z
ZWxmOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJh
bmNlc3Rvci1vci1zZWxmOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjpwcm9jZXNzaW5n
LWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjoqIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0b3Itb3Itc2VsZjo6bmlzdDoqIjsKK2V4
cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0b3Itb3Itc2VsZjo6
ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJjb21t
ZW50KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJ0ZXh0KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwcm9jZXNzaW5nLWlu
c3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lv
bkxpc3QubGVuZ3RoXSA9ICJub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICIqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
bmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZW1wbG95
ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy9jb21tZW50
KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy90ZXh0KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy9wcm9jZXNzaW5n
LWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICIuLy9wcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy9ub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICIuLy8qIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0
Lmxlbmd0aF0gPSAiLi8vbmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxl
bmd0aF0gPSAiLi8vZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIuLi9jb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIuLi90ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICIuLi9wcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICIuLi9wcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLi9ub2RlKCkiOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLi8qIjsKK2V4cHJlc3Npb25M
aXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiLi4vbmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiLi4vZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJAYXR0cmlidXRlbmFtZSI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIi4vY29tbWVudCgpIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiLi90ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuL3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKSI7CitleHBy
ZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIi4vcHJvY2Vzc2luZy1pbnN0cnVj
dGlvbignbmFtZScpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
Li9ub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLyoi
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuL25pc3Q6KiI7Citl
eHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIi4vZW1wbG95ZWUiOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJjb21tZW50KCkgfCB0ZXh0KCkg
fCBwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkgfCBub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVthZGRyZXNzXSI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImVtcGxveWVlL2FkZHJlc3NbQHN0cmVldF0iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlv
bj0nQ29tcHV0ZXIgU3BlY2lhbGlzdCddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0
Lmxlbmd0aF0gPSAiZW1wbG95ZWVbcG9zaXRpb24hPSdDb21wdXRlciBTcGVjaWFsaXN0J10iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtnZW5kZXI9
J01hbGUnIG9yIGdlbmRlcj0nRmVtYWxlJ10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxp
c3QubGVuZ3RoXSA9ICJlbXBsb3llZVtnZW5kZXIhPSdNYWxlJyBhbmQgZ2VuZGVyIT0nRmVtYWxl
J10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZS9h
ZGRyZXNzW0BzdHJlZXQ9J1llcyddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxl
bmd0aF0gPSAiZW1wbG95ZWUvYWRkcmVzc1tAc3RyZWV0IT0nWWVzJ10iOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigpPTFdIjsKK2V4
cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZW1wbG95ZWVbMV0iOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigp
PWxhc3QoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBs
b3llZVtsYXN0KCldIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
ZW1wbG95ZWVbcG9zaXRpb24oKT4xIGFuZCBwb3NpdGlvbjxsYXN0KCldIjsKK2V4cHJlc3Npb25M
aXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZW1wbG95ZWVbcG9zaXRpb24oKT49MSBhbmQg
cG9zaXRpb248PWxhc3QoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJlbXBsb3llZVtjb3VudCguKT4wXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlz
dC5sZW5ndGhdID0gImVtcGxveWVlW3Bvc2l0aW9uKCkgbW9kIDI9MF0iOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigpIG1vZCAtMj0w
XSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImVtcGxveWVlW3Bv
c2l0aW9uKCkgZGl2IDI9MF0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJlbXBsb3llZVtwb3NpdGlvbigpIGRpdiAtMj0tMV0iOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigpIGRpdiAyICogMj1wb3Np
dGlvbigpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImVtcGxv
eWVlWzMgPiAyID4gMV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICJpZCgnQ0FOQURBJykiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICIqW2xvY2FsLW5hbWUoKT0nZW1wbG95ZWUnXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9u
TGlzdC5sZW5ndGhdID0gIipbbG9jYWwtbmFtZSguKT0nZW1wbG95ZWUnXSI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIipbbG9jYWwtbmFtZShlbXBsb3llZSk9J2Vt
cGxveWVlJ10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW2xv
Y2FsLW5hbWUoKT0nZW1wbG95ZWUnXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5s
ZW5ndGhdID0gIipbbmFtZXNwYWNlLXVyaSgpPSdodHRwOi8vd3d3Lm5pc3QuZ292J10iOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW25hbWUoKT0nbmlzdDplbXBs
b3llZSddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiKltzdHJp
bmcoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N0cmlu
ZygxMCBkaXYgZm9vKT0nTmFOJ10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIqW2NvbmNhdCgnYScsICdiJywgJ2MnKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N0YXJ0cy13aXRoKCdlbXBsb3llZScsICdlbXAnKV0iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW2NvbnRhaW5zKCdlbXBs
b3llZScsICdlbXAnKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICIqW3N1YnN0cmluZy1iZWZvcmUoJ2VtcGxveWVlSWQnLCAnSWQnKV0iOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N1YnN0cmluZy1hZnRlcignZW1wbG95ZWVJ
ZCcsICdlbXBsb3llZScpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gIipbc3Vic3RyaW5nKCdlbXBsb3llZUlkJywgNCldIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJl
c3Npb25MaXN0Lmxlbmd0aF0gPSAiKltzdWJzdHJpbmcoJ2VtcGxveWVlSWQnLCA0LCA1KV0iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N0cmluZy1sZW5ndGgo
KT0yXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIipbc3RyaW5n
LWxlbmd0aCguKT1zdHJpbmctbGVuZ3RoKG5vcm1hbGl6ZS1zcGFjZSguKSldIjsKK2V4cHJlc3Np
b25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiKlt0cmFuc2xhdGUoJ2JhcicsICdhYmMn
LCAnQUJDJyk9J0JBciddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0g
PSAiKltib29sZWFuKC4pXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gIipbbm90KGJvb2xlYW4oLikpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5s
ZW5ndGhdID0gIipbdHJ1ZSgpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gIipbZmFsc2UoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICIqW2xhbmcoJ2VuJyldIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0
aF0gPSAiKltudW1iZXIoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICIqW251bWJlcignNCcpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gIipbZmxvb3IoLildPjAiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIqW2NlaWxpbmcoLildPDEiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICIqW3JvdW5kKG51bWJlciguKSk9MF08MSI7Citmb3IodmFyIGluZGV4TjY2Mzg4
ID0gMDtpbmRleE42NjM4OCA8IGV4cHJlc3Npb25MaXN0Lmxlbmd0aDsgaW5kZXhONjYzODgrKykg
eworICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25MaXN0W2luZGV4TjY2Mzg4XTsKKyAgICAg
IHhwYXRoZXhwcmVzc2lvbiA9IGV2YWx1YXRvci5jcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24s
cmVzb2x2ZXIpOworICAgICAgCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICBDb25mb3JtYW5jZV9FeHByZXNzaW9ucygpOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvQXR0cmlidXRlX05vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgw
LDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6
ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAw
IFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBM
MTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdU
ZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSAxNjN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAxNjM6ICJBdHRyaWJ1dGVfTm9kZXM6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1h
bmNlX2hhc0ZlYXR1cmVfbnVsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0Nh
bnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJ
dGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29s
b3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAw
TDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUg
Nzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI1MngxOAor
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI1MjogIkNvbmZvcm1hbmNlX2hhc0Zl
YXR1cmVfbnVsbDogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X1RZUEVfRVJSLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9UWVBFX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCww
KSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUg
MTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBb
ZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEw
MC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4
dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMjI3eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
MjI3OiAiWFBhdGhSZXN1bHRfVFlQRV9FUlI6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgw
LDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6
ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAw
IFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNGRjAwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBM
MTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdU
ZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSA0NzB4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCA0NzA6ICJYUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRSIKKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4Cisg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI5NHgxOAorICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI5NDogInNhbWU6IGFzc2VydEVxdWFscyBmYWlsZWQs
IGFjdHVhbCAwLCBleHBlY3RlZCA1LiIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAw
eDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCww
LjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgNTQ3eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggNTQ3OiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorCisvKgorQ29w
eXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3Nh
Y2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNv
cnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkp
LiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0
aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhl
IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVn
YWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRl
c3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sK
K3JldHVybiBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBi
dWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhl
IHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRl
LgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5
bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3
aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhj
ZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhl
IGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQ
YWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVh
dGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLwor
ICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xv
YWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5
cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5k
b2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwg
InN0YWZmIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogCisgICAgICBDcmVhdGUgYSBVTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAg
IG1vZGlmeSB0aGUgRG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3Vs
dHMKKyAgICAgIGFyZSBub3QgaW52YWxpZGF0ZWQgWFBhdGhSZXN1bHQuaW52YWxpZEl0ZXJhdG9y
U3RhdGUgPT0gZmFsc2UuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZl
cgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
TlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVs
LTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0
ZQorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0lu
aXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9V
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBB
TllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklO
R19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0g
NjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIg
QU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9E
RV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2
YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0
ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHBy
ZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRTsKKyAgICAgIHZhciBlbXBsb3llZTsKKyAgICAgIHZhciBk
b2NFbGVtZW50OworICAgICAgdmFyIGludmFsaWRJdGVyYXRvclN0YXRlOworICAgICAgCisgICAg
ICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9j
ID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0
ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29s
dmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0
b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5y
ZXN1bHQpOworICAgICAgZG9jRWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAg
IGVtcGxveWVlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImVtcGxveWVlIik7CisgICAgICBlbXBsb3ll
ZSA9IGRvY0VsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wbG95ZWUpOworICAgICAgaW52YWxpZEl0ZXJh
dG9yU3RhdGUgPSBvdXRyZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAgIGFzc2Vy
dEZhbHNlKCJmYWxzZSIsaW52YWxpZEl0ZXJhdG9yU3RhdGUpOworCit9CisKKworCisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMiBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkg
MjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3Ig
SW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdo
dHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBT
b2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5
cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24g
bmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQ
YXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUnXTsK
K30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKwor
Ly8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3Jr
IGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhl
cmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAg
ICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisv
LyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0
ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3Qu
CisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5p
bmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQg
YnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3Jl
YXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAg
IAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAn
Y29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlh
bGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRo
ZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBp
biBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9j
dW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQg
d2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVk
LgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkg
eworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisv
KioKKyogCisgICAgQ3JlYXRlIGFuIFhQYXRoUmVzdWx0IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUgWFBhdGhSZXN1bHRUeXBlIGZvciAKKyAgICBleHByZXNzaW9uIC9zdGFmZi9lbXBsb3ll
ZS9lbXBsb3llZUlkL3RleHQoKSBjaGVja2luZyB0aGF0OgorICAgIFhQYXRoUmVzdWx0LnNuYXBz
aG90TGVuZ3RoIGlzIGNvcnJlY3QgdmFsdWUuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5Cisq
IEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAz
MDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zbmFwc2hvdC1sZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LXNuYXBzaG90SXRlbQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNv
bHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRp
YWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9
IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0g
MjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAg
IHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0g
OTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVh
dG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsK
KworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0g
Ii9zdGFmZi9lbXBsb3llZS9lbXBsb3llZUlkL3RleHQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBl
ID0gVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRTsKKyAgICAgIHZhciBzbmFwc2hvdEl0ZW07
CisgICAgICB2YXIgc25hcHNob3RMZW5ndGg7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwg
ImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3Io
ZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAg
IGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHBy
ZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBz
bmFwc2hvdExlbmd0aCA9IG91dHJlc3VsdC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgYXNzZXJ0
RXF1YWxzKCJzYW1lIiw1LHNuYXBzaG90TGVuZ3RoKTsKKyAgICAgICAKK30KKworCisKKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5fVFlQRS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQk9PTEVBTl9UWVBFLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5fVFlQRS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFp
bmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9
IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAw
XX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAu
MDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDAxeDE4CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDAxOiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9y
U3RhdGVfQk9PTEVBTl9UWVBFOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEVfbnVsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRV9udWxsLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEVfbnVsbC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKworLyoKK0NvcHlyaWdo
dCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNl
dHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVt
IAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxs
IAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFcz
Q8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIw
MDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1
bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1
cm4gWydYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RV9udWxsJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9
IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5n
IGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisv
LyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91
cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhl
IHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBp
cyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9m
IHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1
cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0
IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVp
bGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAw
OworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhp
cy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAg
ICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAlj
YXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2Ug
PSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2Fk
IHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMg
bG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBp
cyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBi
ZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9h
ZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9
Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBYUGF0aFJlc3VsdCBVTk9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFIFhQYXRoUmVzdWx0VHlwZSBmb3IgCisgICAgZXhwcmVzc2lvbiAvc3Rh
ZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCkgY2hlY2tpbmcgdGhhdDoKKyAgICBYUGF0aFJl
c3VsdC5zbmFwc2hvdEl0ZW0oeFBhdGhSZXN1bHQuc25hcHNob3RMZW5ndGgpID09IG51bGwsCisg
ICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zbmFwc2hv
dC1sZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXNuYXBzaG90SXRlbQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
WFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJl
c3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsIikgIT0g
bnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZ
UEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZ
UEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAg
ICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAg
ICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAg
ICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHRO
b2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9
IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZS9lbXBsb3ll
ZUlkL3RleHQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRTsKKyAgICAgIHZhciBzbmFwc2hvdEl0ZW07CisgICAgICB2YXIgc25hcHNob3RMZW5n
dGg7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0
aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7Cisg
ICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAg
ZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVh
dG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291
dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29s
dmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBzbmFwc2hvdExlbmd0aCA9IG91dHJlc3Vs
dC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgc25hcHNob3RJdGVtID0gb3V0cmVzdWx0LnNuYXBz
aG90SXRlbShzbmFwc2hvdExlbmd0aCk7CisgICAgICBhc3NlcnROdWxsKCJudWxsIixzbmFwc2hv
dEl0ZW0pOworICAgIAorfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhS
ZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbCgpOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQuc3ZnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2
ZXJfZG9jdW1lbnRFbGVtZW50LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnRF
bGVtZW50LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZG
IiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJ
VFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0K
KyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29t
Jz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwh
RU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlv
bjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9u
Mj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4N
CisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwh
Tk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5U
IHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4N
CisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVM
RU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3Jp
cHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAg
ICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlz
dC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNj
cmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1
YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50RWxlbWVudC5qcyIvPg0KKzxzY3JpcHQgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8v
d3d3LnVzYS5jb20iPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3Np
dGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5v
cnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxv
eWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwh
W0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVy
IDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24g
d2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5T
ZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20i
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2Vy
DQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5k
ZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3gg
MjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDpl
bXBsb3llZSB4bWxuczplbXA9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8v
d3d3LmFsdGF2aXN0YS5jb20iID4gICAgPGVtcDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBs
b3llZUlkPg0KKyAgPG5tOm5hbWU+SmVueSBPY29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3Np
dGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L2VtcDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1
LDAwMDwvZW1wOnNhbGFyeT4NCisgIDxlbXA6Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisg
IDxlbXA6YWRkcmVzcyBlbXA6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9u
ZT0iQ0FOQURBIiBlbXA6bG9jYWwxPSJUUlVFIj4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFz
IDk4NTU2PC9lbXA6YWRkcmVzcz4NCisgPC9lbXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
czplbXAyPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+
Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1s
bnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMg
OTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVf
RklSU1RfT1JERVJFRF9OT0RFX1RZUEUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVS
RURfTk9ERV9UWVBFLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURfTk9ERV9U
WVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMSBAQAorCisvKgorQ29weXJpZ2h0IMOC
wqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMg
SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitm
b3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitS
aWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LC
riBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQg
d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9j
b3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rp
b24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBb
J1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRSddOwor
fQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisv
LworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsg
YmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVy
ZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAg
ICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8v
ICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRl
bHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4K
Ky8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmlu
Zyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAg
CisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFs
aXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRl
JzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhl
IGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGlu
IHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1
bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3
aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQu
CitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7
CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8q
KgorKiAKKyAgICAgIENyZWF0ZSBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSBYUGF0aFJlc3VsdCBt
YXRjaGluZyAvc3RhZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCksCisgICAgICBjaGVja2lu
ZyB0aGF0IFhQYXRoUmVzdWx0LnNpbmdsZU5vZGVWYWx1ZSBtYXRjaGVzIHRoZSBmaXJzdCBFTVAw
MDAxLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQK
KyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIw
MDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlv
biBYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUoKSB7
CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJY
UGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUiKSAhPSBu
dWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQ
RSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQ
RSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAg
ICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAg
IHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5v
ZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0g
bnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL2VtcGxveWVl
SWQvdGV4dCgpIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBGSVJTVF9PUkRFUkVEX05PREVfVFlQ
RTsKKyAgICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIGRhdGE7CisgICAgICB2YXIgbm9kZU5h
bWU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0
aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7Cisg
ICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAg
ZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVh
dG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291
dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29s
dmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBvdXROb2RlID0gb3V0cmVzdWx0LnNpbmds
ZU5vZGVWYWx1ZTsKKworICAgICAgZGF0YSA9IG91dE5vZGUuZGF0YTsKKworICAgICAgYXNzZXJ0
RXF1YWxzKCJlcXVhbHMiLCJFTVAwMDAxIixkYXRhKTsKKyAgICAgICAKK30KKworCisKKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9P
UkRFUkVEX05PREVfVFlQRSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2V2YWx1YXRlX1RZUEVfRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJS
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAg
IEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2Fu
dmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0g
W2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEw
MC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBz
aXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMDh4
MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMDg6ICJYUGF0aEV2YWx1YXRv
cl9ldmFsdWF0ZV9UWVBFX0VSUjogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfcHJlZml4Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNS
ZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfcHJlZml4LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVz
cGFjZVVSSV9wcmVmaXguanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisKKy8qCitD
b3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFz
c2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29u
c29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0
eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0
aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9M
ZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2Ug
dGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQor
eworcmV0dXJuIFsnWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgnXTsK
K30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKwor
Ly8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3Jr
IGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhl
cmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAg
ICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisv
LyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0
ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3Qu
CisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5p
bmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQg
YnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3Jl
YXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAg
ICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9
ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0
aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBs
ZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
dGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVk
IGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBk
b2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdl
ZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0
ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisK
Ky8qKgorKiAKKyAgICAgIEl0ZXJhdGUgb3ZlciBhbGwgRWxlbWVudHMgaW4gdGhlIHRlc3QgZG9j
dW1lbnQsIGNyZWF0aW5nCisgICAgICBuc3Jlc29sdmVycyBjaGVja2luZyB0aGF0IGlmIHRoZSBF
bGVtZW50IGhhcyBhIHByZWZpeCwgdGhlbiAKKyAgICAgIGxvb2t1cE5hbWVzcGFjZVVSSSByZXR1
cm5zIHRoZSBzYW1lIHZhbHVlIGFzIEVsZW1lbnQubmFtZXNwYWNlVVJJCisgICAgCisqIEBhdXRo
b3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2
ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVy
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXItbG9va3VwTmFtZXNwYWNlVVJJCisqLworZnVu
Y3Rpb24gWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aE5T
UmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeCIpICE9IG51bGwpIHJldHVybjsKKyAg
ICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAg
ICAgIHZhciBlbGVtZW50OworICAgICAgdmFyIGVsZW1lbnRzOworICAgICAgdmFyIGxvb2t1cE5h
bWVzcGFjZVVSSTsKKyAgICAgIHZhciBuYW1lc3BhY2VVUkk7CisgICAgICB2YXIgcHJlZml4Owor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgZWxl
bWVudHMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsIioiKTsKKyAgICAgIGV2YWx1
YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Citmb3IodmFyIGluZGV4TjY1NjMxID0g
MDtpbmRleE42NTYzMSA8IGVsZW1lbnRzLmxlbmd0aDsgaW5kZXhONjU2MzErKykgeworICAgICAg
ZWxlbWVudCA9IGVsZW1lbnRzLml0ZW0oaW5kZXhONjU2MzEpOworICAgICAgcHJlZml4ID0gZWxl
bWVudC5wcmVmaXg7CisKKyAgICAgIAorCWlmKAorCQorCShwcmVmaXggIT0gbnVsbCkKKworCSkg
eworCXJlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZWxlbWVudCk7CisgICAg
ICBuYW1lc3BhY2VVUkkgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSTsKKworICAgICAgbG9va3VwTmFt
ZXNwYWNlVVJJID0gcmVzb2x2ZXIubG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCk7CisgICAgICBh
c3NlcnRFcXVhbHMoImVxdWFsIixsb29rdXBOYW1lc3BhY2VVUkksbmFtZXNwYWNlVVJJKTsKKyAg
ICAgICAKKwl9CisJCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBYUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeCgpOworfQpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X2RvY3VtZW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQuc3ZnCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX2RvY3VtZW50LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMg
IlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAg
PCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4
YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54
eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0K
KyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBu
b3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5v
dGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2Fy
ZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0K
KyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFF
TEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95
ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93
d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+
DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0
aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2Eu
Y29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJn
YXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAg
ICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUu
IERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3ll
ZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtU
aGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQy
O11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSBy
ZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5
PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMi
PiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25l
czwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmlu
ZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUg
eG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRh
dmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4N
CisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVy
c29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2Vt
cDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFk
ZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFE
QSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1Njwv
ZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVy
IFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRw
Oi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFU
RV9FUlItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWlu
ZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0g
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBd
fV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4w
MCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOTB4MTgKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTA6ICJYUGF0aFJlc3VsdF9pdGVyYXRlTmV4dF9JTlZB
TElEX1NUQVRFX0VSUjogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL0NvbmZvcm1hbmNlX0V4cHJlc3Npb25zLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9FeHByZXNzaW9ucy5zdmcJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9FeHByZXNzaW9ucy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElD
ICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAg
IDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRl
eGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cu
eHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4N
CisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEg
bm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBu
b3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2Nh
cmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4N
CisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwh
RUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxv
eWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQor
ICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBD
REFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1F
TlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1Q
TElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8v
d3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQ29u
Zm9ybWFuY2VfRXhwcmVzc2lvbnMuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywg
VGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpk
bXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEg
Q0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwh
W0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4N
CisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4x
MDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMg
OTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1w
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29t
IiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpu
YW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERp
cmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+
DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1w
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxv
Y2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJl
c3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxp
c3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5p
c3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0g
InN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQy
ICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFF
TlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRF
bGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJl
bnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50
MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3Rh
dGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBT
WVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFU
QSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+
DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFF
TEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAj
UkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2Ny
aXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4g
ICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAg
PHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1
MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRB
W1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVu
dDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBh
IHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRh
cnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVu
dDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2
ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5h
bWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2Vy
PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50
NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJv
eCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
MS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9z
aXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dl
bmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291
dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0
PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8
L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2
aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExl
bmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5zdmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZ
U1RFTSAic3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZ
IGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisg
ICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJM
SUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5z
IENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95
ZWUrKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1w
bG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9u
YW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8
c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxh
ZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUx
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFb
VGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50
MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEg
cmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFy
eTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50
MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0
OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94
IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5K
ZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9wb3Np
dGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0
aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2
ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5h
bWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZp
bmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRl
X1dST05HX0RPQ1VNRU5UX0VSUi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9D
VU1FTlRfRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VS
Ui1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisg
ICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtD
YW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElE
XSBbY29sb3I9I0ZGRkYwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAs
MTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDAp
IHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDQ3
NngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ3NjogIlRlc3RzIHdpdGgg
bXVsdGlwbGUgbG9hZHMgb2YgZGlmZmVyZW50IGRvY3VtZW50cyBhcmUgbm90IGN1cnJlbnRseSBz
dXBwb3J0ZWQiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgx
OAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzNzJ4MTgKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNzI6ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9XUk9OR19ET0NVTUVOVF9FUlIiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9FbGVtZW50X05vZGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0VsZW1lbnRfTm9kZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9FbGVtZW50X05vZGVzLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0NCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUg
V2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ks
IEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhl
bWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29y
ayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBp
biB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93
d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEy
MzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9z
ZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ0VsZW1lbnRfTm9kZXMnXTsKK30KKwor
dmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8v
ICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9y
ZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJl
IG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9j
dW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAg
ICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5Cisv
LyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLwor
ZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOwor
ICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRl
ciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29u
ZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAg
IHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2Nz
TG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAg
ICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxl
dGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRp
b25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21w
bGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRV
cFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQg
aGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2gg
YWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVu
Y3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAg
ICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyog
CisgICAgICAxLjIuMS0gRWxlbWVudCBOb2RlcyAtIEV2YWx1YXRlIC9zdGFmZi9lbXBsb3llZSwK
KyAgICAgIGNoZWNrIHRoYXQgZWFjaCBtYXRjaGluZyBOb2RlIGluIHRoZSByZXN1bHQgCisgICAg
ICBpcyBhbiBFbGVtZW50LgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
TWFwcGluZworKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMt
WFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZh
bHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1
YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVy
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1pdGVyYXRlTmV4dAorKi8KK2Z1bmN0aW9uIEVsZW1l
bnRfTm9kZXMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9u
KGJ1aWxkZXIsICJFbGVtZW50X05vZGVzIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllf
VFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19U
WVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRP
Ul9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsK
KyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5Z
X1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9U
WVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIg
ZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0g
bnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNz
aW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7
CisgICAgICB2YXIgb3V0Tm9kZTsKKyAgICAgIHZhciBub2RlVHlwZTsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVY
UGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZl
cihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9y
LmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVz
dWx0KTsKKyAgICAgIG91dE5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIAor
ICAgIHdoaWxlKAorCQorCShvdXROb2RlICE9IG51bGwpCisKKwkpIHsKKwlub2RlVHlwZSA9IG91
dE5vZGUubm9kZVR5cGU7CisKKyAgICAgIGFzc2VydEVxdWFscygiUzEuMi4xLUVsZW1lbnQtTm9k
ZXMtbm9kZVR5cGUiLDEsbm9kZVR5cGUpOworICAgICAgIG91dE5vZGUgPSBvdXRyZXN1bHQuaXRl
cmF0ZU5leHQoKTsKKyAgICAgIAorCX0KKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgRWxlbWVudF9Ob2RlcygpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAy
LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDIuc3ZnCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAyLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQor
PCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/
UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkki
ICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMg
InVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVu
dGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJM
SUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90
YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSss
IGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHht
bG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFt
ZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJ
U1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJ
UkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNS
RVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNj
cmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1l
bnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFD
RV9FUlJfMDIuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5p
c3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlk
PkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQor
ICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+
NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8
L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDov
L3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9u
IHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMg
aXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRh
YjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxh
cnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQz
Ow0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRt
c3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlv
bj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0
aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3
Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6
ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nv
bm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6
cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdl
bmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZ
ZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+
MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1w
OmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxl
cyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0
IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIx
IE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
Q29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlXzMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFz
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyMzZ4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAyMzY6ICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzM6IFN1Y2Nlc3MiCkluZGV4OiBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHBy
ZXNzaW9uX25vX05TLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUg
c3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEg
ImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElU
WSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxv
Y2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQ
SWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZp
bGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmls
ZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3Vs
ZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRp
b24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxl
Ij4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxv
eWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEg
I0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJ
TVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0K
KyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0K
KyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUg
Q0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIg
MS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlz
dD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVp
Z2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
IiBzcmM9IlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMuanMiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMi
Lz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0i
aHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFu
dDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+
MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9s
ZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNl
IG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFT
ZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9z
aXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHpl
cm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0
OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+
UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQor
IDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0i
aHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9l
bXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxl
bXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNh
bGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5k
ZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIg
ZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFz
LCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95
ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZ
ZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5n
IFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRl
RXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05fRVJSLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9J
TlZBTElEX0VYUFJFU1NJT05fRVJSLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2
ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJl
cyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkg
ZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2Nh
bDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElk
YXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxl
IiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUi
IE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQg
YmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9u
MUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+
DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3ll
ZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNG
SVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1Q
TElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisg
ICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAg
d2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisg
IDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENE
QVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEu
LS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9
Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdo
dD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
c3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9F
UlIuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
cmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51
c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGgg
RW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4g
YWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48
L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1z
dGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5
ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJo
dHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxv
eWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBh
cnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3Qu
Z292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95
ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwv
bm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRp
b24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5G
ZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0
cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291
dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxv
eWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJz
PC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRp
Yy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
dmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9OX0VSUi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9OX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9l
dmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2Fu
dmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQg
KDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6
ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0w
LjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBS
ZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0NDJ4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCA0NDI6ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJ
T05fRVJSOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhSZXN1bHRfVFlQRV9FUlIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfVFlQRV9FUlIuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MjQgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJl
c3VsdF9UWVBFX0VSUiddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1
aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUg
dGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUu
CisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3lu
Y2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndp
c2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNl
cHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUg
Ym9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBh
Z2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0
ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisg
ICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9h
ZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlw
ZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRv
YzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsK
KyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25v
dXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNo
cm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBz
dGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRl
c3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsr
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7
CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhbiBYUGF0aFJlc3VsdCBmb3Ig
dGhlIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlCisgICAgICBmb3IgZWFjaCB0eXBlIG9mIFhQ
YXRoUmVzdWx0VHlwZSwgY2hlY2tpbmcgdGhhdCBUWVBFX0VSUgorICAgICAgaXMgdGhyb3duIHdo
ZW4gaW5hcHByb3ByaWF0ZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGFyZSBhY2Nlc3NlZC4KKyAg
ICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1RZUEVfRVJSCisqIEBzZWUgaHR0
cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0
aCNYUGF0aEV4Y2VwdGlvbgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZl
cgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtcmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhS
ZXN1bHQtYm9vbGVhblZhbHVlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1udW1iZXJWYWx1ZQor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAw
MzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc2luZ2xlTm9kZVZhbHVlCisqIEBzZWUgaHR0cDovL3d3
dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0
aFJlc3VsdC1zbmFwc2hvdC1sZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXN0cmluZ1Zh
bHVlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1pdGVyYXRlTmV4dAorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhSZXN1bHQtc25hcHNob3RJdGVtCisqLworZnVuY3Rpb24gWFBhdGhSZXN1bHRfVFlQRV9FUlIo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJYUGF0aFJlc3VsdF9UWVBFX0VSUiIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBleHBy
ZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAg
ICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKwor
ICAgICAgdmFyIGluTm9kZVR5cGU7CisgICAgICB2YXIgb3V0Tm9kZVR5cGU7CisgICAgICB2YXIg
QU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJ
TkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9
IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFy
IEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05P
REVfVFlQRSA9IDk7CisgICAgICB2YXIgYm9vbGVhblZhbHVlOworICAgICAgdmFyIHNob3J0VmFs
dWU7CisgICAgICB2YXIgaW50VmFsdWU7CisgICAgICB2YXIgZG91YmxlVmFsdWU7CisgICAgICB2
YXIgbm9kZVZhbHVlOworICAgICAgdmFyIHN0cmluZ1ZhbHVlOworICAgICAgbm9kZVR5cGVMaXN0
ID0gbmV3IEFycmF5KCk7CisgICAgICBub2RlVHlwZUxpc3RbMF0gPSAwOworICAgICAgbm9kZVR5
cGVMaXN0WzFdID0gMTsKKyAgICAgIG5vZGVUeXBlTGlzdFsyXSA9IDI7CisgICAgICBub2RlVHlw
ZUxpc3RbM10gPSAzOworICAgICAgbm9kZVR5cGVMaXN0WzRdID0gNDsKKyAgICAgIG5vZGVUeXBl
TGlzdFs1XSA9IDU7CisgICAgICBub2RlVHlwZUxpc3RbNl0gPSA2OworICAgICAgbm9kZVR5cGVM
aXN0WzddID0gNzsKKyAgICAgIG5vZGVUeXBlTGlzdFs4XSA9IDg7CisgICAgICBub2RlVHlwZUxp
c3RbOV0gPSA5OworCisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYg
KHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhp
cy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVy
ID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0g
IGRvYzsKK2Zvcih2YXIgaW5kZXhONjU3NzggPSAwO2luZGV4TjY1Nzc4IDwgbm9kZVR5cGVMaXN0
Lmxlbmd0aDsgaW5kZXhONjU3NzgrKykgeworICAgICAgaW5Ob2RlVHlwZSA9IG5vZGVUeXBlTGlz
dFtpbmRleE42NTc3OF07CisgICAgICBvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhw
cmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcixpbk5vZGVUeXBlLGlucmVzdWx0KTsKKyAgICAg
IG91dE5vZGVUeXBlID0gb3V0cmVzdWx0LnJlc3VsdFR5cGU7CisKKyAgICAgIAorCWlmKAorCShv
dXROb2RlVHlwZSA9PSBOVU1CRVJfVFlQRSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nlc3MgPSBmYWxz
ZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGJvb2xlYW5WYWx1ZSA9IG91dHJlc3VsdC5ib29sZWFu
VmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3Vj
Y2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7
CisJCX0KKwkJYXNzZXJ0VHJ1ZSgibnVtYmVyX2Jvb2xlYW5WYWx1ZV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBu
b2RlVmFsdWUgPSBvdXRyZXN1bHQuc2luZ2xlTm9kZVZhbHVlOworCisgICAgICAgIH0KKwkJY2F0
Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9
ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm51bWJl
cl9zaW5nbGVOb2RlVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2Vz
cyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgaW50VmFsdWUgPSBvdXRyZXN1bHQuc25h
cHNob3RMZW5ndGg7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAg
ICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9
PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgibnVtYmVyX3NuYXBzaG90TGVuZ3RoX1RZUEVfRVJS
IixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAg
ICAgICAgIHN0cmluZ1ZhbHVlID0gb3V0cmVzdWx0LnN0cmluZ1ZhbHVlOworCisgICAgICAgIH0K
KwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNv
ZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUo
Im51bWJlcl9zdHJpbmdWYWx1ZV9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNj
ZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBub2RlVmFsdWUgPSBvdXRyZXN1bHQu
aXRlcmF0ZU5leHQoKTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAg
ICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9
PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgibnVtYmVyX2l0ZXJhdGVOZXh0X1RZUEVfRVJSIixz
dWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAg
ICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdEl0ZW0oMCk7CisgICAgICAgIH0KKwkJ
Y2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUp
ICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm51
bWJlcl9zbmFwc2hvdEl0ZW1fVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCX0KKwkKKwlpZigK
Kwkob3V0Tm9kZVR5cGUgPT0gU1RSSU5HX1RZUEUpCisJKSB7CisJCisJeworCQlzdWNjZXNzID0g
ZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBib29sZWFuVmFsdWUgPSBvdXRyZXN1bHQuYm9v
bGVhblZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAg
IHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0g
NTIpOworCQl9CisJCWFzc2VydFRydWUoInN0cmluZ19ib29sZWFuVmFsdWVfVFlQRV9FUlIiLHN1
Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAg
ICAgZG91YmxlVmFsdWUgPSBvdXRyZXN1bHQubnVtYmVyVmFsdWU7CisKKyAgICAgICAgfQorCQlj
YXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkg
IT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgic3Ry
aW5nX251bWJlclZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3Mg
PSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5zaW5n
bGVOb2RlVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAg
ICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9
PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgic3RyaW5nX3NpbmdsZU5vZGVWYWx1ZV9UWVBFX0VS
UiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAg
ICAgICAgICBpbnRWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJzdHJpbmdfc25hcHNob3RMZW5ndGhfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJ
c3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVz
dWx0Lml0ZXJhdGVOZXh0KCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAK
KyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNv
ZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoInN0cmluZ19pdGVyYXRlTmV4dF9UWVBFX0VS
UiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAg
ICAgICAgICBub2RlVmFsdWUgPSBvdXRyZXN1bHQuc25hcHNob3RJdGVtKDApOworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJzdHJpbmdfc25hcHNob3RJdGVtX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl9CisJCisJ
aWYoCisJKG91dE5vZGVUeXBlID09IEJPT0xFQU5fVFlQRSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nl
c3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gb3V0cmVzdWx0
Lm51bWJlclZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAg
ICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUg
PT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImJvb2xlYW5fbnVtYmVyVmFsdWVfVFlQRV9FUlIi
LHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAg
ICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNpbmdsZU5vZGVWYWx1ZTsKKworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJib29sZWFuX3NpbmdsZU5vZGVWYWx1ZV9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJewor
CQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBpbnRWYWx1ZSA9IG91dHJl
c3VsdC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAg
ICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBl
eC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJib29sZWFuX3NuYXBzaG90TGVuZ3Ro
X1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5
IHsKKyAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gb3V0cmVzdWx0LnN0cmluZ1ZhbHVlOworCisg
ICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlw
ZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFz
c2VydFRydWUoImJvb2xlYW5fc3RyaW5nVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKwor
CXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0g
b3V0cmVzdWx0Lml0ZXJhdGVOZXh0KCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAg
ICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYm
IGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImJvb2xlYW5faXRlcmF0ZU5leHRf
VFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkg
eworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNuYXBzaG90SXRlbSgwKTsKKyAg
ICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBl
b2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNz
ZXJ0VHJ1ZSgiYm9vbGVhbl9zbmFwc2hvdEl0ZW1fVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKwor
CX0KKwkKKwlpZigKKwkob3V0Tm9kZVR5cGUgPT0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAg
IGJvb2xlYW5WYWx1ZSA9IG91dHJlc3VsdC5ib29sZWFuVmFsdWU7CisKKyAgICAgICAgfQorCQlj
YXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkg
IT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5v
cmRlcmVkX25vZGVfaXRlcmF0b3JfYm9vbGVhblZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9
CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGRvdWJsZVZh
bHVlID0gb3V0cmVzdWx0Lm51bWJlclZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsg
ICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmlu
ZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2Rl
X2l0ZXJhdG9yX251bWJlclZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1
Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3Vs
dC5zaW5nbGVOb2RlVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAg
IAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXgu
Y29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5vcmRlcmVkX25vZGVfaXRlcmF0b3Jf
c2luZ2xlTm9kZVZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3Mg
PSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludFZhbHVlID0gb3V0cmVzdWx0LnNuYXBz
aG90TGVuZ3RoOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAg
IHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0g
NTIpOworCQl9CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3NuYXBzaG90
TGVuZ3RoX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsK
KwkJdHJ5IHsKKyAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gb3V0cmVzdWx0LnN0cmluZ1ZhbHVl
OworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3Mg
PSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9
CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3N0cmluZ1ZhbHVlX1RZUEVf
RVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAg
ICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdEl0ZW0oMCk7CisgICAgICAg
IH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4
LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRy
dWUoInVub3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3NuYXBzaG90SXRlbV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJfQorCQorCWlmKAorCShvdXROb2RlVHlwZSA9PSBPUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAg
ICAgICAgICAgIGJvb2xlYW5WYWx1ZSA9IG91dHJlc3VsdC5ib29sZWFuVmFsdWU7CisKKyAgICAg
ICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2Yo
ZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0
VHJ1ZSgib3JkZXJlZF9ub2RlX2l0ZXJhdG9yX2Jvb2xlYW5WYWx1ZV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBk
b3VibGVWYWx1ZSA9IG91dHJlc3VsdC5udW1iZXJWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNo
KGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAn
dW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVk
X25vZGVfaXRlcmF0b3JfbnVtYmVyVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsK
KwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0
cmVzdWx0LnNpbmdsZU5vZGVWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAg
ICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAm
JiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfaXRlcmF0
b3Jfc2luZ2xlTm9kZVZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nl
c3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludFZhbHVlID0gb3V0cmVzdWx0LnNu
YXBzaG90TGVuZ3RoOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAg
ICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUg
PT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm9yZGVyZWRfbm9kZV9pdGVyYXRvcl9zbmFwc2hv
dExlbmd0aF9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7
CisJCXRyeSB7CisgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IG91dHJlc3VsdC5zdHJpbmdWYWx1
ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNz
ID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJ
fQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfaXRlcmF0b3Jfc3RyaW5nVmFsdWVfVFlQRV9F
UlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAg
ICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNuYXBzaG90SXRlbSgwKTsKKyAgICAgICAg
fQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXgu
Y29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1
ZSgib3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3NuYXBzaG90SXRlbV9UWVBFX0VSUiIsc3VjY2Vzcyk7
CisJfQorCisJfQorCQorCWlmKAorCShvdXROb2RlVHlwZSA9PSBVTk9SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFKQorCSkgeworCQorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAg
ICAgICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVzdWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAg
ICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihl
eC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRU
cnVlKCJ1bm9yZGVyZWRfbm9kZV9zbmFwc2hvdF9ib29sZWFuVmFsdWVfVFlQRV9FUlIiLHN1Y2Nl
c3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAg
ZG91YmxlVmFsdWUgPSBvdXRyZXN1bHQubnVtYmVyVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRj
aChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0g
J3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5vcmRl
cmVkX25vZGVfc25hcHNob3RfbnVtYmVyVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKwor
CXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0g
b3V0cmVzdWx0LnNpbmdsZU5vZGVWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAg
ICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVk
JyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ1bm9yZGVyZWRfbm9kZV9z
bmFwc2hvdF9zaW5nbGVOb2RlVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJ
c3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBvdXRy
ZXN1bHQuc3RyaW5nVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAg
IAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXgu
Y29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5vcmRlcmVkX25vZGVfc25hcHNob3Rf
c3RyaW5nVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZh
bHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0Lml0ZXJhdGVO
ZXh0KCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nl
c3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOwor
CQl9CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2RlX3NuYXBzaG90X2l0ZXJhdGVOZXh0X1RZ
UEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl9CisJCisJaWYoCisJKG91dE5vZGVUeXBlID09IE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKQorCSkgeworCQorCXsKKwkJc3VjY2VzcyA9IGZhbHNl
OworCQl0cnkgeworICAgICAgICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVzdWx0LmJvb2xlYW5W
YWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNj
ZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsK
KwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfc25hcHNob3RfYm9vbGVhblZhbHVlX1RZ
UEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsK
KyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gb3V0cmVzdWx0Lm51bWJlclZhbHVlOworCisgICAg
ICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9m
KGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2Vy
dFRydWUoIm9yZGVyZWRfbm9kZV9zbmFwc2hvdF9udW1iZXJWYWx1ZV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBu
b2RlVmFsdWUgPSBvdXRyZXN1bHQuc2luZ2xlTm9kZVZhbHVlOworCisgICAgICAgIH0KKwkJY2F0
Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9
ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm9yZGVy
ZWRfbm9kZV9zbmFwc2hvdF9zaW5nbGVOb2RlVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0K
KworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgc3RyaW5nVmFs
dWUgPSBvdXRyZXN1bHQuc3RyaW5nVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAg
ICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5l
ZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgib3JkZXJlZF9ub2RlX3Nu
YXBzaG90X3N0cmluZ1ZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nl
c3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5p
dGVyYXRlTmV4dCgpOworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAg
ICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09
IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfc25hcHNob3RfaXRlcmF0ZU5l
eHRfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCX0KKwkKKwlpZigKKwkob3V0Tm9kZVR5cGUg
PT0gQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUpCisJKSB7CisJCisJeworCQlzdWNjZXNzID0gZmFs
c2U7CisJCXRyeSB7CisgICAgICAgICAgICBib29sZWFuVmFsdWUgPSBvdXRyZXN1bHQuYm9vbGVh
blZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1
Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIp
OworCQl9CisJCWFzc2VydFRydWUoImFueV91bm9yZGVyZWRfbm9kZV9ib29sZWFuVmFsdWVfVFlQ
RV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgewor
ICAgICAgICAgICAgZG91YmxlVmFsdWUgPSBvdXRyZXN1bHQubnVtYmVyVmFsdWU7CisKKyAgICAg
ICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2Yo
ZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0
VHJ1ZSgiYW55X3Vub3JkZXJlZF9ub2RlX251bWJlclZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsK
Kwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludFZh
bHVlID0gb3V0cmVzdWx0LnNuYXBzaG90TGVuZ3RoOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgp
IHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRl
ZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImFueV91bm9yZGVy
ZWRfbm9kZV9zbmFwc2hvdExlbmd0aF9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlz
dWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IG91dHJl
c3VsdC5zdHJpbmdWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAg
CisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5j
b2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJhbnlfdW5vcmRlcmVkX25vZGVfc3RyaW5n
VmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOwor
CQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0Lml0ZXJhdGVOZXh0KCk7
CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAo
dHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJ
CWFzc2VydFRydWUoImFueV91bm9yZGVyZWRfbm9kZV9pdGVyYXRlTmV4dF9UWVBFX0VSUiIsc3Vj
Y2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAg
ICBub2RlVmFsdWUgPSBvdXRyZXN1bHQuc25hcHNob3RJdGVtKDApOworICAgICAgICB9CisJCWNh
dGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAh
PSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJhbnlf
dW5vcmRlcmVkX25vZGVfc25hcHNob3RJdGVtX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl9
CisJCisJaWYoCisJKG91dE5vZGVUeXBlID09IEZJUlNUX09SREVSRURfTk9ERV9UWVBFKQorCSkg
eworCQorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgYm9vbGVh
blZhbHVlID0gb3V0cmVzdWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4
KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5k
ZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJmaXJzdF9vcmRl
cmVkX25vZGVfYm9vbGVhblZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1
Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gb3V0cmVz
dWx0Lm51bWJlclZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAK
KyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNv
ZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImZpcnN0X29yZGVyZWRfbm9kZV9udW1iZXJW
YWx1ZV9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJ
CXRyeSB7CisgICAgICAgICAgICBpbnRWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdExlbmd0aDsK
KworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0g
KHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQor
CQlhc3NlcnRUcnVlKCJmaXJzdF9vcmRlcmVkX25vZGVfc25hcHNob3RMZW5ndGhfVFlQRV9FUlIi
LHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAg
ICAgICAgc3RyaW5nVmFsdWUgPSBvdXRyZXN1bHQuc3RyaW5nVmFsdWU7CisKKyAgICAgICAgfQor
CQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29k
ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgi
Zmlyc3Rfb3JkZXJlZF9ub2RlX3N0cmluZ1ZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisK
Kwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9
IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAg
ICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAm
JiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJmaXJzdF9vcmRlcmVkX25vZGVf
aXRlcmF0ZU5leHRfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZh
bHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNuYXBzaG90
SXRlbSgwKTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3Vj
Y2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7
CisJCX0KKwkJYXNzZXJ0VHJ1ZSgiZmlyc3Rfb3JkZXJlZF9ub2RlX3NuYXBzaG90SXRlbV9UWVBF
X0VSUiIsc3VjY2Vzcyk7CisJfQorCisJfQorCQorCX0KKyAgIAorfQorCisKKworCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfVFlQRV9FUlIoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3Vt
ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNp
emUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEw
MCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAw
TDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZH
VGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMjg5eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggMjg5OiAiWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnQ6IFN1Y2Nlc3MiCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVO
U1Jlc29sdmVyX2RvY3VtZW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50LnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
RXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4N
Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwh
RU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4N
CisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1l
bnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+
PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVS
SSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJ
QyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMg
ZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBV
QkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJu
b3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVl
KywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAg
eG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBu
YW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRU
TElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEg
I1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qg
c2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29t
bWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1l
bnQuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
cmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51
c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGgg
RW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4g
YWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48
L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1z
dGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5
ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJo
dHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxv
eWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBh
cnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3Qu
Z292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95
ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwv
bm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRp
b24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5G
ZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0
cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291
dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxv
eWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJz
PC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRp
Yy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9FUlIuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lO
VkFMSURfU1RBVEVfRVJSLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLnN2
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9U
RVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0K
KyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBS
b2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVu
dEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJn
ZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRp
dHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkg
c2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJu
b3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9u
MkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNU
IHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1Q
VFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4N
CisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwh
LS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEw
MCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0i
WFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9FUlIuanMiLz4NCis8c2NyaXB0
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9w
b3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRo
IEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRp
dHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGph
Y2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9z
aXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVz
Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52
YWxpZEl0ZXJhdG9yU3RhdGVfQk9PTEVBTl9UWVBFLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfQk9PTEVBTl9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorCisvKgor
Q29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1h
c3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENv
bnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNp
dHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAor
dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0v
TGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3Nl
IHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkK
K3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5fVFlQ
RSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxs
OworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFt
ZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJ
ZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8v
ICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0
dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1t
ZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUg
dGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAn
cnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1
bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIg
PSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAg
ICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9j
KSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0K
KyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFn
ZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJ
bml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2Nv
bXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
b24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFy
dGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRl
ZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hh
bmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhl
Y3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhIEJPT0xFQU5fVFlQRSBYUGF0aFJlc3VsdCBtYXRj
aGluZyAvc3RhZmYvZW1wbG95ZWUsCisgICAgICBtb2RpZnkgdGhlIERvY3VtZW50LCB0aGVuIGNo
ZWNrIHRoYXQgaXRlcmF0b3IgWFBhdGhSZXN1bHRzCisgICAgICBhcmUgbm90IGludmFsaWRhdGVk
IFhQYXRoUmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlID09IGZhbHNlLgorICAgIAorKiBAYXV0
aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9y
LWV2YWx1YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwt
My1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LWludmFsaWQtaXRlcmF0b3Itc3RhdGUKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAg
ICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRl
cmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9U
WVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZ
UEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2Owor
ICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllf
VU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZ
UEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBl
dmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBu
dWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Np
b24gPSAiL3N0YWZmL2VtcGxveWVlIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBCT09MRUFOX1RZ
UEU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAgIHZh
ciBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7
CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBk
b2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9j
IiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29u
dGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Np
b24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0Vs
ZW1lbnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVh
dGVFbGVtZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVu
ZENoaWxkKGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0
LmludmFsaWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFs
aWRJdGVyYXRvclN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
WFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQk9PTEVBTl9UWVBFKCk7Cit9CkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9kb2N1bWVudEVsZW1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFs
dWF0b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExMiBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENv
bnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9w
ZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNz
LCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBk
aXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUg
Citob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMu
b3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyov
CisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RG
dW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3Vt
ZW50RWxlbWVudCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxk
ZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVz
dGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisv
LworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hy
b25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2Us
IHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRp
b24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9k
eSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VT
dGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMg
dGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAg
IGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVk
ID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsK
KyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAg
ICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgewor
ICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRV
cFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91
cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hy
b25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0
YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVz
dCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsK
KyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIFhQYXRoRXZh
bHVhdG9yIG9uIHdoaWNoIHRoZQorICAgICAgImV2YWx1YXRlKCIvIiwgZG9jdW1lbnRFbGVtZW50
LCBudWxsLCAwLCBudWxsKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aGUgZG9jdW1lbnQKKyAg
ICAgIGVsZW1lbnQuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBYUGF0aFJlc3VsdC4KKyAg
ICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFs
dWF0b3ItZXZhbHVhdGUKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1
bWVudEVsZW1lbnQoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0
aW9uKGJ1aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQiKSAh
PSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAg
ICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciByb290OworICAgICAg
dmFyIHJlc3VsdDsKKyAgICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgCisgICAg
ICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9j
ID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBj
cmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisK
KyAgICAgIHJlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRlKCIvIixyb290LG51bGxOU1Jlc29s
dmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJub3RudWxsIixyZXN1bHQp
OworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9l
dmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5cGUuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5cGUuc3Zn
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfcmVzdWx0VHlwZS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lT
VEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkg
ZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAg
IDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwv
ZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJ
QyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZ
IGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04g
bm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMg
Q0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3ll
ZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAg
IDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFU
QSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5U
IHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJ
RUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X3Jlc3VsdFR5cGUuanMiLz4NCis8c2NyaXB0
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9w
b3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRo
IEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRp
dHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGph
Y2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9z
aXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVz
Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9zdHJpbmdWYWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zdHJpbmdWYWx1ZS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmlu
Z1ZhbHVlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorCisvKgorQ29weXJpZ2h0
IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0
dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0g
Citmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwg
CitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzND
w4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxp
ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAw
Mi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVu
Y3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVy
biBbJ1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEw
MDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0
aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4
Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3Rh
cnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0
ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVu
IGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgp
IHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisg
ICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRp
b24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisK
KyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsK
KyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRv
Y1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRv
Y1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAg
fSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgp
OworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisv
LyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAg
ZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdo
ZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAg
ICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAg
Ym9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgp
IHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVz
ID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBYUGF0
aFJlc3VsdCBTVFJJTkdfVkFMVUUgWFBhdGhSZXN1bHRUeXBlIGZvciBleHByZXNzaW9uCisgICAg
L3N0YWZmL2VtcGxveWVlL3NhbGFyeVt0ZXh0KCk9JzU2LDAwMCddIGNoZWNraW5nIHRoYXQgdGhl
IAorICAgIFhQYXRoUmVzdWx0LnN0cmluZ1ZhbHVlID09ICI1NiwwMDAiCisgICAgCisqIEBhdXRo
b3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2
ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zdHJpbmdWYWx1ZQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVz
dWx0X3N0cmluZ1ZhbHVlKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFs
aXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUiKSAhPSBudWxsKSByZXR1
cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7Cisg
ICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7Cisg
ICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0g
NzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklS
U1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNv
bHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAg
ICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKwor
ICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL3NhbGFyeVt0ZXh0KCk9JzU2
LDAwMCddIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBTVFJJTkdfVFlQRTsKKyAgICAgIHZhciBz
dHJpbmdWYWx1ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7
CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIg
PSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAg
ZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5v
ZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIHN0cmluZ1ZhbHVlID0gb3V0
cmVzdWx0LnN0cmluZ1ZhbHVlOworCisgICAgICBhc3NlcnRFcXVhbHMoInNhbWUiLCI1NiwwMDAi
LHN0cmluZ1ZhbHVlKTsKKyAgICAgICAKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgIFhQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCww
KSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEw
MHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAs
MC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRl
clNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMyN3gxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDMyNzogIlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlM6IFN1Y2Nl
c3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRv
cl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9j
dW1lbnQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50LmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwOCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxk
IFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hu
b2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5k
IE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRo
aXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNl
IFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0
dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUt
MjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9u
IGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2Ny
ZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAw
MDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0
ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0
aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVk
LiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFu
ZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50
ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgewor
ICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAg
Ly8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgor
ICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAg
ICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAg
ICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVm
ID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVm
LCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0g
MSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0g
Y2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsK
KyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8g
ICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVh
Y2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVu
IGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAg
ICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJv
ZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7
CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9
ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2YWx1
YXRvciBjYW4gY3JlYXRlICJYUGF0aE5TUmVzb2x2ZXIiIHVzaW5nIHRoZSBtZXRob2QKKyAgICAg
ICJjcmVhdGVOU1Jlc29sdmVyKG5vZGVSZXNvbHZlcikiLgorICAgICAgCisgICAgICBSZXRyaWV2
ZSB0aGUgRE9NIGRvY3VtZW50IG9uIHdoaWNoIHRoZQorICAgICAgImNyZWF0ZU5TUmVzb2x2ZXIo
bm9kZVJlc29sdmVyKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aGUgZG9jdW1lbnQKKyAgICAg
IGl0c2VsZi4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcmVzb2x2ZXIuCisgICAgCisqIEBh
dXRob3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNy
ZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29s
dmVyX2RvY3VtZW50KCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXph
dGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudCIp
ICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAg
ICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1Jl
ZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSB4cEV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBh
c3NlcnROb3ROdWxsKCJub3RudWxsIixyZXNvbHZlcik7CisKK30KKworCisKKworZnVuY3Rpb24g
cnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQo
KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNv
bHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklf
eG1sLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV94bWwuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE5IEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lk
ZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9n
eSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0
aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3
b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFd
IGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDov
L3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAy
MTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhw
b3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhOU1Jlc29sdmVyX2xvb2t1
cE5hbWVzcGFjZVVSSV94bWwnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3Zh
ciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkg
dGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1
aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywg
YXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3Ro
ZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUg
ZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcg
dGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0
VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBj
cmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAv
LworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9j
c0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYg
KHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhp
cy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9j
IiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgewor
ICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2go
ZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAg
ICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5
Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5
IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUg
cGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2Yg
dGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAg
aWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21w
bGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIEl0ZXJhdGUgb3ZlciBhbGwgZWxl
bWVudHMgaW4gdGhlIHRlc3QgZG9jdW1lbnQsIGNyZWF0aW5nCisgICAgICBuc3Jlc29sdmVycyBj
aGVja2luZyB0aGF0IGxvb2tpbmcgdXAgdGhlIHhtbCBwcmVmaXggcmV0dXJucworICAgICAgaHR0
cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLgorICAgIAorKiBAYXV0aG9yIEJvYiBD
bGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVh
dG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NS
LURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhOU1Jlc29sdmVyLWxvb2t1cE5hbWVzcGFjZVVSSQorKi8KK2Z1bmN0aW9uIFhQ
YXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sKCkgeworICAgdmFyIHN1Y2Nlc3M7
CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhOU1Jlc29sdmVyX2xv
b2t1cE5hbWVzcGFjZVVSSV94bWwiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAg
ICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgZWxlbWVu
dDsKKyAgICAgIHZhciBlbGVtZW50czsKKyAgICAgIHZhciBsb29rdXBOYW1lc3BhY2VVUkk7Cisg
ICAgICB2YXIgbmFtZXNwYWNlVVJJOworICAgICAgdmFyIHByZWZpeDsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgIGVsZW1lbnRzID0gZG9jLmdl
dEVsZW1lbnRzQnlUYWdOYW1lTlMoIioiLCIqIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVY
UGF0aEV2YWx1YXRvcihkb2MpOworZm9yKHZhciBpbmRleE42NTYzMSA9IDA7aW5kZXhONjU2MzEg
PCBlbGVtZW50cy5sZW5ndGg7IGluZGV4TjY1NjMxKyspIHsKKyAgICAgIGVsZW1lbnQgPSBlbGVt
ZW50cy5pdGVtKGluZGV4TjY1NjMxKTsKKyAgICAgIHJlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0
ZU5TUmVzb2x2ZXIoZWxlbWVudCk7CisgICAgICBsb29rdXBOYW1lc3BhY2VVUkkgPSByZXNvbHZl
ci5sb29rdXBOYW1lc3BhY2VVUkkoInhtbCIpOworICAgICAgYXNzZXJ0RXF1YWxzKCJlcXVhbCIs
Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsbG9va3VwTmFtZXNwYWNlVVJJ
KTsKKyAgICAgICAKKwl9CisgICAKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
IFhQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sKCk7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0
dHJpYnV0ZV9Ob2Rlc194bWxucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0Nv
bnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHty
ZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAw
ODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAs
MTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIwOXgxOAorICAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwOTogIkF0dHJpYnV0ZV9Ob2Rlc194bWxuczog
U3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X1RZUEVfRVJSLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi5zdmcJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlM
RSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0
YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIg
TkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBi
ZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24x
RmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4N
CisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQor
ICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisg
ICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAg
IDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFU
QSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQg
Q0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFU
VExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMg
aXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVz
dWx0X1RZUEVfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+
DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxh
cnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlz
IGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11d
Pg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZl
cmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJv
Z2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9n
ZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcg
SXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkg
T2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJv
YWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5S
b2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5k
ZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBU
ZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvRWxlbWVudF9Ob2Rlcy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvRWxlbWVudF9O
b2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9FbGVtZW50X05vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0
ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4
MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAu
MDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJT
VkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAxNTl4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCAxNTk6ICJFbGVtZW50X05vZGVzOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfcmVzdWx0VHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9yZXN1bHRUeXBl
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhSZXN1bHRfcmVzdWx0VHlwZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTggQEAKKwor
LyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAK
KyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJj
aCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2
ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0
aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4
cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1l
cygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9yZXN1bHRUeXBlJ107Cit9CisKK3ZhciBkb2Nz
TG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAg
ICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25m
aWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxv
YWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNl
dCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAg
IHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9u
IHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7
CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0
aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRC
dWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9j
UmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7
CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCAr
PSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAo
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3Io
YnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBv
ZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4K
Ky8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21w
bGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0
aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxv
YWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0
VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAg
Q3JlYXRlIGFuIFhQYXRoUmVzdWx0IGZvciB0aGUgZXhwcmVzc2lvbiAvc3RhZmYvZW1wbG95ZWUK
KyAgICAgIGZvciBlYWNoIHR5cGUgb2YgWFBhdGhSZXN1bHRUeXBlLCBjaGVja2luZyB0aGF0IHRo
ZSByZXN1bHRUeXBlCisgICAgICBvZiB0aGUgWFBhdGhSZXN1bHQgbWF0Y2hlcyB0aGUgcmVxdWVz
dGVkIHR5cGUuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJl
c3VsdFR5cGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0CisqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1
YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0
ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtcmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
eGNlcHRpb24KKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9yZXN1bHRUeXBlKCkgeworICAgdmFy
IHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1
bHRfcmVzdWx0VHlwZSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFy
IHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBleHByZXNzaW9uID0g
Ii9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5y
ZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFy
IGluTm9kZVR5cGU7CisgICAgICB2YXIgb3V0Tm9kZVR5cGU7CisgICAgICB2YXIgQU5ZX1RZUEUg
PSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9
IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9S
REVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9
IDk7CisgICAgICB2YXIgaXNUeXBlRXF1YWw7CisgICAgICBub2RlVHlwZUxpc3QgPSBuZXcgQXJy
YXkoKTsKKyAgICAgIG5vZGVUeXBlTGlzdFswXSA9IDA7CisgICAgICBub2RlVHlwZUxpc3RbMV0g
PSAxOworICAgICAgbm9kZVR5cGVMaXN0WzJdID0gMjsKKyAgICAgIG5vZGVUeXBlTGlzdFszXSA9
IDM7CisgICAgICBub2RlVHlwZUxpc3RbNF0gPSA0OworICAgICAgbm9kZVR5cGVMaXN0WzVdID0g
NTsKKyAgICAgIG5vZGVUeXBlTGlzdFs2XSA9IDY7CisgICAgICBub2RlVHlwZUxpc3RbN10gPSA3
OworICAgICAgbm9kZVR5cGVMaXN0WzhdID0gODsKKyAgICAgIG5vZGVUeXBlTGlzdFs5XSA9IDk7
CisKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRo
aXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAg
ICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBl
dmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0
b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworZm9y
KHZhciBpbmRleE42NTczNyA9IDA7aW5kZXhONjU3MzcgPCBub2RlVHlwZUxpc3QubGVuZ3RoOyBp
bmRleE42NTczNysrKSB7CisgICAgICBpbk5vZGVUeXBlID0gbm9kZVR5cGVMaXN0W2luZGV4TjY1
NzM3XTsKKyAgICAgIG91dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNv
bnRleHROb2RlLHJlc29sdmVyLGluTm9kZVR5cGUsaW5yZXN1bHQpOworICAgICAgb3V0Tm9kZVR5
cGUgPSBvdXRyZXN1bHQucmVzdWx0VHlwZTsKKworICAgICAgCisJaWYoCisJKGluTm9kZVR5cGUg
PT0gQU5ZX1RZUEUpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJBTllfVFlQRV9yZXN1bHR0eXBlIixV
Tk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLG91dE5vZGVUeXBlKTsKKyAgICAgICAKKwl9CisJ
CisJaWYoCisJKGluTm9kZVR5cGUgPT0gTlVNQkVSX1RZUEUpCisJKSB7CisJYXNzZXJ0RXF1YWxz
KCJOVU1CRVJfVFlQRV9yZXN1bHR0eXBlIixOVU1CRVJfVFlQRSxvdXROb2RlVHlwZSk7CisgICAg
ICAgCisJfQorCQorCWlmKAorCShpbk5vZGVUeXBlID09IFNUUklOR19UWVBFKQorCSkgeworCWFz
c2VydEVxdWFscygiU1RSSU5HX1RZUEVfcmVzdWx0dHlwZSIsU1RSSU5HX1RZUEUsb3V0Tm9kZVR5
cGUpOworICAgICAgIAorCX0KKwkKKwlpZigKKwkoaW5Ob2RlVHlwZSA9PSBCT09MRUFOX1RZUEUp
CisJKSB7CisJYXNzZXJ0RXF1YWxzKCJCT09MRUFOX1RZUEVfcmVzdWx0dHlwZSIsQk9PTEVBTl9U
WVBFLG91dE5vZGVUeXBlKTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKGluTm9kZVR5cGUgPT0g
VU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoIlVOT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEVfcmVzdWx0dHlwZSIsVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSxvdXROb2RlVHlwZSk7CisgICAgICAgCisJfQorCQorCWlmKAorCShpbk5vZGVUeXBl
ID09IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKQorCSkgeworCWFzc2VydEVxdWFscygiT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEVfcmVzdWx0dHlwZSIsT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEUsb3V0Tm9kZVR5cGUpOworICAgICAgIAorCX0KKwkKKwlpZigKKwkoaW5Ob2RlVHlwZSA9
PSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKQorCSkgeworCWFzc2VydEVxdWFscygiVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9yZXN1bHR0eXBlIixVTk9SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFLG91dE5vZGVUeXBlKTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKGluTm9kZVR5
cGUgPT0gT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJP
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9yZXN1bHR0eXBlIixPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSxvdXROb2RlVHlwZSk7CisgICAgICAgCisJfQorCQorCWlmKAorCShpbk5vZGVUeXBl
ID09IEFOWV9VTk9SREVSRURfTk9ERV9UWVBFKQorCSkgeworCWFzc2VydEVxdWFscygiQU5ZX1VO
T1JERVJFRF9OT0RFX1RZUEVfcmVzdWx0dHlwZSIsQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUsb3V0
Tm9kZVR5cGUpOworICAgICAgIAorCX0KKwkKKwlpZigKKwkoaW5Ob2RlVHlwZSA9PSBGSVJTVF9P
UkRFUkVEX05PREVfVFlQRSkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoIkZJUlNUX09SREVSRURfTk9E
RV9UWVBFX3Jlc3VsdHR5cGUiLEZJUlNUX09SREVSRURfTk9ERV9UWVBFLG91dE5vZGVUeXBlKTsK
KyAgICAgICAKKwl9CisJCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7
CisgICBYUGF0aFJlc3VsdF9yZXN1bHRUeXBlKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9P
UkRFUkVEX05PREVfVFlQRS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVE
X05PREVfVFlQRS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9E
RV9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorCisvKgorQ29weXJpZ2h0
IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0
dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0g
Citmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwg
CitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzND
w4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxp
ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAw
Mi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVu
Y3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVy
biBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9U
WVBFJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51
bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZy
YW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAg
IElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cwor
Ly8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0
YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBp
bW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRo
ZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9
ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRv
Y3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRl
ciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOwor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOwor
ICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQ
YWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRj
aEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAn
Y29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0
YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9h
ZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBj
aGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBl
eGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVk
ID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworLyoqCisqIAorICAgICAgQ3JlYXRlIGEgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgWFBh
dGhSZXN1bHQgbWF0Y2hpbmcgL3N0YWZmL2VtcGxveWVlLAorICAgICAgbW9kaWZ5IHRoZSBEb2N1
bWVudCwgdGhlbiBjaGVjayB0aGF0IGl0ZXJhdG9yIFhQYXRoUmVzdWx0cworICAgICAgYXJlIG5v
dCBpbnZhbGlkYXRlZCBYUGF0aFJlc3VsdC5pbnZhbGlkSXRlcmF0b3JTdGF0ZSA9PSBmYWxzZS4K
KyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisq
IEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAz
MDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aFJlc3VsdC1pbnZhbGlkLWl0ZXJhdG9yLXN0YXRlCisqLworZnVuY3Rpb24g
WFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQ
RSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5V
TUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9P
TEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0g
NDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIg
VU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0g
ODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9j
OworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBj
b250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRy
ZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYvZW1wbG95ZWUi
OworICAgICAgdmFyIHhwYXRoVHlwZSA9IEZJUlNUX09SREVSRURfTk9ERV9UWVBFOworICAgICAg
dmFyIGVtcGxveWVlOworICAgICAgdmFyIGRvY0VsZW1lbnQ7CisgICAgICB2YXIgaW52YWxpZEl0
ZXJhdG9yU3RhdGU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYg
KHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhp
cy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVy
ID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0g
IGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHRO
b2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBkb2NFbGVtZW50ID0gZG9j
LmRvY3VtZW50RWxlbWVudDsKKworICAgICAgZW1wbG95ZWUgPSBkb2MuY3JlYXRlRWxlbWVudCgi
ZW1wbG95ZWUiKTsKKyAgICAgIGVtcGxveWVlID0gZG9jRWxlbWVudC5hcHBlbmRDaGlsZChlbXBs
b3llZSk7CisgICAgICBpbnZhbGlkSXRlcmF0b3JTdGF0ZSA9IG91dHJlc3VsdC5pbnZhbGlkSXRl
cmF0b3JTdGF0ZTsKKworICAgICAgYXNzZXJ0RmFsc2UoImZhbHNlIixpbnZhbGlkSXRlcmF0b3JT
dGF0ZSk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0
X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFKCk7Cit9CkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvckNhc3QwMS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhFdmFsdWF0b3JDYXN0MDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JDYXN0MDEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZh
c0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVt
IHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9
IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAu
MDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1
eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIwM3gxOAorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwMzogIlhQYXRoRXZhbHVhdG9yQ2FzdDAx
OiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhO
U1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2
ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3RfZG1zdGMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xv
b2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZh
cyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgw
LDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUg
MTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4w
MCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzQ1eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMzQ1OiAiWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rt
c3RjIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDY5eDE4CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDY5OiAiZG1zdGNlcXVhbDogYXNzZXJ0RXF1YWxzIGZh
aWxlZCwgYWN0dWFsIGh0dHA6Ly93d3cudXNhLmNvbSwgZXhwZWN0ZWQgbnVsbC4iCkluZGV4OiBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0
b3JTdGF0ZV9CT09MRUFOX1RZUEUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5f
VFlQRS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuc3ZnCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZ
TEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RFTSAic3RhZmYuZHRkIiBbDQorICAgPCFF
TlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0K
KyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVu
dCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRh
dGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUi
IE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQg
YmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9u
MUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+
DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0K
KyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQor
ICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisg
ICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0
IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFB
VFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlz
IGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQor
PHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuanMiLz4NCis8c2NyaXB0IHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3Np
dGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2
ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1h
cnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlS
ZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2Vu
dCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4N
CisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0i
WWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAz
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRp
b24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2Fs
YXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZ
ZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBl
cnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0K
KyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0
cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVz
cz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
NTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlv
bj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4x
ODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxv
eWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX05PVF9TVVBQT1JURURfRVJSLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURf
RVJSLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorCisvKgorQ29weXJpZ2h0IMOC
wqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMg
SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitm
b3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitS
aWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LC
riBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQg
d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9j
b3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rp
b24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBb
J1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUiddOworfQorCit2YXIg
ZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisv
LyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8g
Y29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVu
dCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBp
cyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAg
ICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5j
dGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0
cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBt
YXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1
cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFy
IGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVk
JykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2Fk
ZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAg
ICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRl
JzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9u
RXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
IH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxl
dGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBU
ZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhh
cyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFs
bG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0
aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqICAg
ICAgIAorICAgICAgVGVzdCBpZiBYUGF0aEV4cHJlc3Npb24uZXZhbHVhdGUgcHJvcGVybHkgdGhy
b3dzIE5PVF9TVVBQT1JURURfRVJST1IKKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6ln
YXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFeHByZXNzaW9uLWV2
YWx1YXRlCisqLworZnVuY3Rpb24gWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JU
RURfRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihi
dWlsZGVyLCAiWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSIikgIT0g
bnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7CisgICAg
ICB2YXIgcmVzdWx0OworICAgICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAg
dmFyIG51bGxSZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2
YXIgeHBhdGhFeHByZXNzaW9uOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAg
ICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1Jl
ZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworeHBhdGhFeHByZXNzaW9uID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lvbigiLy9mb28i
LG51bGxOU1Jlc29sdmVyKTsKKyAgICAgIGNvbnRleHROb2RlID0gZG9jLmNyZWF0ZUVudGl0eVJl
ZmVyZW5jZSgiZW50aXR5bmFtZSIpOworICAgICAgCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJ
CXRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSB4cGF0aEV4cHJlc3Npb24uZXZhbHVhdGUoY29u
dGV4dE5vZGUsMCxudWxsUmVzdWx0KTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAg
c3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA5
KTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ0aHJvd19OT1RfU1VQUE9SVEVEX0VSUiIsc3VjY2Vzcyk7
CisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV4cHJlc3Np
b25fZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX2VtcHR5LnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9p
c1N1cHBvcnRlZF9lbXB0eS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eS5zdmcJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQ
SURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitb
DQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFz
IFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8
ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRF
bGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAi
ZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVu
dDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50
MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3Rh
dGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBT
WVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwg
ZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyAN
CisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0K
KyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQor
ICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdo
dCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwh
QVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhp
cyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5
PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHku
anMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9
InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4
bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRp
b24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9t
ZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2Eu
Y29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0y
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5N
YXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50
aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRq
YWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25h
bWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1
NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRw
Oi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRt
ZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwv
ZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJ
ZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06
bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+
DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1h
bGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVl
dD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGgg
Um9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8
ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9u
YW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4g
Um9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2
Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFs
dWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAxLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4
cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFN
RVNQQUNFX0VSUl8wMS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjEgQEAKKworLyoKK0Nv
cHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNz
YWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25z
b3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5
KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3Ro
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xl
Z2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0
ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7
CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJf
MDEnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVs
bDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJh
bWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAg
SWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisv
LyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3Rh
dHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGlt
bWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhl
IHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0g
J3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9j
dW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVy
ID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7Cisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsK
KyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVw
UGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0
Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0g
J2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBz
dGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxv
YWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMg
Y2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUg
ZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQor
fQorCisKKy8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2YWx1YXRvciBjYW4gY3JlYXRlIGEgIlhQ
YXRoRXhwcmVzc2lvbiIgdXNpbmcgdGhlIG1ldGhvZAorICAgICAgImNyZWF0ZUV4cHJlc3Npb24o
ZXhwcmVzc2lvbiwgcmVzb2x2ZXIpIi4KKyAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIERPTSBk
b2N1bWVudCBvbiB3aGljaCB0aGUKKyAgICAgICdjcmVhdGVFeHByZXNzaW9uKCIvamZvdWZmYTpl
bXBsb3llZSIsIG51bGwpJyBtZXRob2QgaXMKKyAgICAgIGludm9rZWQgd2l0aCB0aGUgZG9jdW1l
bnQgZWxlbWVudC4gIFRoZSBtZXRob2Qgc2hvdWxkIGZhaWwgdG8gY3JlYXRlCisgICAgICBwcmUt
Y29tcGlsZWQgZXhwcmVzc2lvbiBhbmQgdGhyb3dzIERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJS
CisgICAgICBzaW5jZSB0aGUgcHJlZml4IGpmb3VmZmEgaXMgbm90IG1hcHBlZC4KKyAgICAKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3It
Y3JlYXRlRXhwcmVzc2lvbgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJl
c3Npb25fTkFNRVNQQUNFX0VSUl8wMSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNr
SW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
TkFNRVNQQUNFX0VSUl8wMSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAg
dmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAg
ICAgdmFyIGV4cDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMi
KTsKKyAgICAgIHhwRXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKKworCXsK
KwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgZXhwID0geHBFdmFsdWF0
b3IuY3JlYXRlRXhwcmVzc2lvbigiL2pmb3VmZmE6ZW1wbG95ZWUiLG51bGxOU1Jlc29sdmVyKTsK
KyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29k
ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSAxNCk7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgi
dGhyb3dfTkFNRVNQQUNFX0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKworCisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFD
RV9FUlJfMDEoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
dmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZh
bHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisg
IFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVy
IHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0
ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1d
IFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAi
XQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDQ1eDE4CisgICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMCkgd2lkdGggNDQ1OiAiWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lv
bl9OQU1FU1BBQ0VfRVJSXzAyOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFz
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzNDF4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAzNDE6ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQ6IFN1
Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZh
bHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fSU5WQUxJRF9FWFBSRVNTSU9OX0VSUi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZh
c0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVt
IHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9
IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAu
MDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1
eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDQ5N3gxOAorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ5NzogIlhQYXRoRXZhbHVhdG9yX2NyZWF0
ZUV4cHJlc3Npb25fSU5WQUxJRF9FWFBSRVNTSU9OX0VSUjogU3VjY2VzcyIKSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X251bWJlclZhbHVlLnN2Zwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9udW1iZXJWYWx1ZS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS5zdmcJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0K
KzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJl
cyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkg
ZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZ
ZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8
IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRp
b24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQi
Pg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJ
U1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVj
dCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMg
Q0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENE
QVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCBy
ZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQN
CisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJ
UkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0
IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBu
dW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJl
Y3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X251bWJlclZh
bHVlLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
c3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RB
VEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NE
QVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8g
YSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZl
bnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpv
bmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0
ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxh
cywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXll
cnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzX3htbG5zLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rlc194bWxu
cy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0
dHJpYnV0ZV9Ob2Rlc194bWxucy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzQgQEAKKwor
LyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAK
KyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJj
aCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2
ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0
aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4
cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1l
cygpCit7CityZXR1cm4gWydBdHRyaWJ1dGVfTm9kZXNfeG1sbnMnXTsKK30KKwordmFyIGRvY3NM
b2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAg
ICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZp
Z3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9h
ZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0
IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAg
cmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24g
c2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsK
KyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRo
cm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1
aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYg
KGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9y
KGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24g
b2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMu
CisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29t
cGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3Mg
dGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNl
dFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAg
IFMxLjIuMiBBdHRyaWJ1dGUgTm9kZXMgLSAKKyAgICAgIENyZWF0ZSBBTllfVFlQRSBYUGF0aFJl
c3VsdCBtYXRjaGluZyAvL0B4bWxucywKKyAgICAgIGNoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIG1h
dGNoaW5nIE5vZGVzIGJ5CisgICAgICBjaGVja2luZyBmb3IgWFBhdGhSZXN1bHQuaXRlcmF0ZU5l
eHQgPT0gbnVsbAorICAgICAgc2luY2UgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgYXJlIG5vdCByZXRy
aWV2YWJsZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI01hcHBpbmcK
KyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIw
MDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIv
MjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1j
cmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00t
TGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhSZXN1bHQtaXRlcmF0ZU5leHQKKyovCitmdW5jdGlvbiBBdHRyaWJ1dGVfTm9k
ZXNfeG1sbnMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9u
KGJ1aWxkZXIsICJBdHRyaWJ1dGVfTm9kZXNfeG1sbnMiKSAhPSBudWxsKSByZXR1cm47CisgICAg
dmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIg
U1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIg
VU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAg
IHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJF
RF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAg
ICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5y
ZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFy
IGV4cHJlc3Npb24gPSAiLy9AeG1sbnMiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEFOWV9UWVBF
OworICAgICAgdmFyIG91dE5vZGU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOwor
ICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9j
UmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIs
ICJzdGFmZk5TIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29u
dGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Np
b24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIG91dE5v
ZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIGFzc2VydE51bGwoIkF0dHJpYnV0
ZV9Ob2Rlc194bWxuc3htbG5zIixvdXROb2RlKTsKKyAgICAKK30KKworCisKKworZnVuY3Rpb24g
cnVuVGVzdCgpIHsKKyAgIEF0dHJpYnV0ZV9Ob2Rlc194bWxucygpOworfQpJbmRleDogTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lv
bl9OUy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2
YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFz
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMDN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAzMDM6ICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TOiBTdWNjZXNz
IgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2lu
Z2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5n
bGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2lu
Z2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVu
ZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2
Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2Rh
dGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisg
ICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1MTN4MTgKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCA1MTM6ICJYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VO
T1JERVJFRF9OT0RFX1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9O
T0RFX0lURVJBVE9SX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZ
U1RFTSAic3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZ
IGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisg
ICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJM
SUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5z
IENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95
ZWUrKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBN
YXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAg
ICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4
YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxl
bXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8
IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJl
ciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9u
IHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+
U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2Vu
ZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZ
ZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQg
TWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5v
Ij5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0
b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsi
PjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3Bl
Y2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJv
YWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+
DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvVGV4dF9Ob2Rlcy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
VGV4dF9Ob2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZh
cyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgw
LDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUg
MTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4w
MCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzh4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCA3ODogIlRleHRfTm9kZXMiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAo
MCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAzMzF4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMzE6ICJTMS4yLjQt
VGV4dC1Ob2Rlcy1BZGphY2VudC1OZXh0OiBhc3NlcnRUcnVlIGZhaWxlZCIKSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rlcy5zdmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJp
YnV0ZV9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJz
dGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAi
MTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5U
SVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxl
bWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50
aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEg
IlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lT
VEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEg
I0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0K
KyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlw
dCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAg
ICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEw
MCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiBzcmM9IkF0dHJpYnV0ZV9Ob2Rlcy5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxl
cyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2Fy
ZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAg
ICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dl
bmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5v
bGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBu
dW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2Vj
dGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0
aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVl
dD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRt
ZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0
PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+UGVyc29ubmVsIERp
cmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVu
dDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVy
IFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiPjE4MjEgTm9yZGlj
LiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwv
c3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X2Jvb2xlYW5WYWx1ZV90cnVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVh
blZhbHVlX3RydWUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACisKKy8qCitDb3B5
cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2Fj
aHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29y
dGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSku
IEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUg
aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdh
bC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVz
dCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQorewor
cmV0dXJuIFsnWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX3RydWUnXTsKK30KKwordmFyIGRvY3NM
b2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAg
ICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZp
Z3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9h
ZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0
IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAg
cmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24g
c2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsK
KyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRo
cm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1
aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAgICAgIGlmIChk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
ICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihi
dWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9m
IAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgor
Ly8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBs
ZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRo
ZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9h
ZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRV
cFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisgICAgICBD
cmVhdGUgQk9PTEVBTl9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwK
KyAgICAgIGNoZWNraW5nIHRoYXQgWFBhdGhSZXN1bHQuYm9vbGVhblZhbHVlID09IHRydWUKKyAg
ICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3
dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0
aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtYm9vbGVhblZhbHVlCisq
LworZnVuY3Rpb24gWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX3RydWUoKSB7CisgICB2YXIgc3Vj
Y2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9i
b29sZWFuVmFsdWVfdHJ1ZSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAw
OworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7
CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9
IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2
YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVS
RURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7
CisgICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRv
cjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisK
KyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIv
c3RhZmYvZW1wbG95ZWUiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEJPT0xFQU5fVFlQRTsKKyAg
ICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgdmFyIHBhcmVudDsK
KyAgICAgIHZhciBvd25lcjsKKyAgICAgIHZhciBvd25lclR5cGU7CisgICAgICB2YXIgYm9vbGVh
blZhbHVlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2
YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7
CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxy
ZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVz
dWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAgYXNzZXJ0VHJ1ZSgidHJ1ZSIsYm9vbGVhblZhbHVl
KTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfYm9v
bGVhblZhbHVlX3RydWUoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5zdmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZv
cm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBz
dmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAi
ZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZ
IGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9j
YWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJ
ZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5Rmls
ZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxl
IiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxk
IGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlv
bjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUi
Pg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95
ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAj
RklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQor
ICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQor
ICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBD
REFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAx
Li0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0
PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHNyYz0iQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsLmpzIi8+DQorPHNjcmlwdCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cu
dXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9u
PiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RB
VEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAm
ZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRo
IGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3Jl
dGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5G
ZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
WWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisg
Sm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJ
cnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxv
eWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cu
YWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVl
SWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAw
PC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVt
cDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJD
QU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1
NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVt
cDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21w
dXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VV
UklfeG1sLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3htbC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3htbC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJl
bmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtz
dmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgw
LDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtk
YXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQor
ICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzYweDE4CisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMzYwOiAiWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVS
SV94bWw6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9D
b25mb3JtYW5jZV9oYXNGZWF0dXJlX2VtcHR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9oYXNGZWF0dXJlX2VtcHR5LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorCisv
KgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAor
KE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNo
IENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZl
cnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1
bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRp
dW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhw
b3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVz
KCkKK3sKK3JldHVybiBbJ0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHknXTsKK30KKwordmFy
IGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQor
Ly8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5v
IGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1l
bnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAg
aXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAg
ICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVu
Y3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAg
dHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZh
ciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9h
ZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAg
ICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlv
bkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBs
ZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVw
VGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBo
YXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBh
bGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5j
dGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAg
ICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAK
KyAgICAgIDEuMyBDb25mb3JtYW5jZSAtIFRlc3QgaWYgCisgICAgICBEb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5oYXNGZWF0dXJlKCdYUGF0aCcsICIiKSByZXR1cm5zIHRydWUKKyAgICAKKyogQGF1
dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjSW50ZXJmYWNlcworKi8KK2Z1bmN0aW9uIENvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHko
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlX2VtcHR5IikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZh
ciBkb2M7CisgICAgICB2YXIgc3RhdGU7CisgICAgICB2YXIgaW1wbDsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgIGltcGwgPSBkb2MuaW1wbGVt
ZW50YXRpb247CitzdGF0ZSA9IGltcGwuaGFzRmVhdHVyZSgieHBBVEgiLCIiKTsKK2Fzc2VydFRy
dWUoImhhc0ZlYXR1cmUtWFBhdGgtZW1wdHkiLHN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9lbXB0eSgpOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1
cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlz
dF9kbXN0Yy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0Yy5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAw
NCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBv
ZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0
aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2Vy
dmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUg
TGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisK
K1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNv
ZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitm
dW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aE5TUmVz
b2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3RfZG1zdGMnXTsKK30KKwordmFyIGRvY3NMb2Fk
ZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBy
dW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3Vy
YXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGlu
ZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRv
IGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFp
c2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0
VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAg
ICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93
IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxk
ZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYg
PSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHBy
ZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRv
Y3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAg
ICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1
aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisK
KworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2Yg
CisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisv
LworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxl
dGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhl
CisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2Fk
Q29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVw
UGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIElu
dGVyYXRlIG92ZXIgYWxsIGVtcGxveWVlIGVsZW1lbnRzIHdpdGggeG1sbnM6ZG1zdGMgYXR0cmli
dXRlCisgICAgICBpbiB0aGUgdGVzdCBkb2N1bWVudCwgY3JlYXRpbmcgbnNyZXNvbHZlcnMgY2hl
Y2tpbmcgdGhhdCAKKyAgICAgIGZvciBhbGwgY2hpbGRyZW4gdGhlIHByZWZpeCAnbmlzdCcgcmVz
b2x2ZXMgdG8gCisgICAgICBodHRwOi8vd3d3Lm5pc3QuZ292IGFuZCB0aGF0IHByZWZpeCAnZG1z
dGMnIHJlc29sdmVzIHRvIHRoZSBzYW1lIAorICAgICAgdmFsdWUgYXMgZW1wbG95ZWUuZ2V0QXR0
cmlidXRlKCd4bWxuczpkbXN0YycpLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NS
LURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5T
UmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhO
U1Jlc29sdmVyLWxvb2t1cE5hbWVzcGFjZVVSSQorKi8KK2Z1bmN0aW9uIFhQYXRoTlNSZXNvbHZl
cl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0YygpIHsKKyAgIHZhciBzdWNjZXNzOworICAg
IGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoTlNSZXNvbHZlcl9sb29rdXBO
YW1lc3BhY2VVUklfbmlzdF9kbXN0YyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBsb29r
dXBOYW1lc3BhY2VVUkk7CisgICAgICB2YXIgbmFtZXNwYWNlVVJJOworICAgICAgdmFyIGNoaWxk
OworICAgICAgdmFyIGNoaWxkcmVuOworICAgICAgdmFyIGVtcGxveWVlOworICAgICAgdmFyIGVt
cGxveWVlczsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlw
ZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRv
YzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsK
KyAgICAgIGVtcGxveWVlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwiZW1wbG95
ZWUiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Citmb3Io
dmFyIGluZGV4TjY1NjMzID0gMDtpbmRleE42NTYzMyA8IGVtcGxveWVlcy5sZW5ndGg7IGluZGV4
TjY1NjMzKyspIHsKKyAgICAgIGVtcGxveWVlID0gZW1wbG95ZWVzLml0ZW0oaW5kZXhONjU2MzMp
OworICAgICAgbmFtZXNwYWNlVVJJID0gZW1wbG95ZWUuZ2V0QXR0cmlidXRlKCJ4bWxuczpkbXN0
YyIpOworICAgICAgY2hpbGRyZW4gPSBlbXBsb3llZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIq
IiwiKiIpOworICAgICAgZm9yKHZhciBpbmRleE42NTY1MCA9IDA7aW5kZXhONjU2NTAgPCBjaGls
ZHJlbi5sZW5ndGg7IGluZGV4TjY1NjUwKyspIHsKKyAgICAgIGNoaWxkID0gY2hpbGRyZW4uaXRl
bShpbmRleE42NTY1MCk7CisgICAgICByZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29s
dmVyKGNoaWxkKTsKKyAgICAgIGxvb2t1cE5hbWVzcGFjZVVSSSA9IHJlc29sdmVyLmxvb2t1cE5h
bWVzcGFjZVVSSSgiZG1zdGMiKTsKKyAgICAgIGFzc2VydEVxdWFscygiZG1zdGNlcXVhbCIsbmFt
ZXNwYWNlVVJJLGxvb2t1cE5hbWVzcGFjZVVSSSk7CisgICAgICAgbG9va3VwTmFtZXNwYWNlVVJJ
ID0gcmVzb2x2ZXIubG9va3VwTmFtZXNwYWNlVVJJKCJuaXN0Iik7CisgICAgICBhc3NlcnRFcXVh
bHMoIm5pc3RlcXVhbCIsImh0dHA6Ly93d3cubmlzdC5nb3YiLGxvb2t1cE5hbWVzcGFjZVVSSSk7
CisgICAgICAgCisJfQorICAgCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICBYUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3RfZG1zdGMoKTsK
K30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lz
U3VwcG9ydGVkX251bGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbC5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lzU3VwcG9ydGVk
X251bGwuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisKKy8qCitDb3B5cmlnaHQg
w4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0
cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAK
K2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAK
K1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PD
gsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAy
L2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5j
dGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJu
IFsnQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9
IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5p
bmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlv
biBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlz
IHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29t
cGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQg
d2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBh
Z2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAv
LworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhj
ZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigp
OworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51
bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAg
ICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xv
YWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9
CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRl
ciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisK
Ky8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8v
ICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisv
LyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQs
CisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8v
ICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21w
bGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdl
U3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgMS4zIENv
bmZvcm1hbmNlIC0gVGVzdCBpZiAKKyAgICAgIERvY3VtZW50LmlzU3VwcG9ydGVkKCdYUGF0aCcs
IG51bGwpIHJldHVybnMgdHJ1ZQorICAgIAorKiBAYXV0aG9yIFBoaWxpcHBlIExlIEjDqWdhcmV0
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNDb25mb3JtYW5jZQorKi8KK2Z1bmN0
aW9uIENvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGwoKSB7CisgICB2YXIgc3VjY2VzczsKKyAg
ICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25mb3JtYW5jZV9pc1N1cHBvcnRl
ZF9udWxsIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgc3RhdGU7
CisgICAgICB2YXIgbnVsbFZhbHVlID0gbnVsbDsKKworICAgICAgCisgICAgICB2YXIgZG9jUmVm
ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NS
ZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgc3RhdGUgPSBkb2MuaXNTdXBwb3J0ZWQoInhw
QVRIIixudWxsVmFsdWUpOworICAgICAgYXNzZXJ0VHJ1ZSgiaXNTdXBwb3J0ZWQtWFBhdGgtbnVs
bCIsc3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBDb25mb3Jt
YW5jZV9pc1N1cHBvcnRlZF9udWxsKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LnN2Zwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJl
c3Npb25fZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1
bWVudEVsZW1lbnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAi
U1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8
IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhh
cyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5
ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQor
ICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5v
dGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90
YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJk
ZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQor
ICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVM
RU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3ll
ZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAg
IDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFU
QSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5U
IHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJ
RUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3
dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4N
Cis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRo
RXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuanMiLz4NCis8c2NyaXB0IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3
dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRp
b24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZl
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0
aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxl
bXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtD
REFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAy
ICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdp
dGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2Vj
cmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0
PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0K
KyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3
IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1w
bG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3
dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95
ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRp
b24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSww
MDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8
ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9
IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5
ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNv
bXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4N
CisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5z
PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4
NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVf
T1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAg
QEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0
aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBS
ZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2Vp
byBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9D
b25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisK
Ky8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rp
b25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAw
MDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhl
IHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNl
cHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0
ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUg
YW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBl
bnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7
CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAg
ICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9u
CisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisg
ICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7Cisg
ICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NS
ZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NS
ZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0g
MSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0g
Y2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsK
KyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8g
ICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVh
Y2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVu
IGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAg
ICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJv
ZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7
CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9
ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhIE9SREVS
RURfTk9ERV9JVEVSQVRPUl9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3ll
ZSwKKyAgICAgIG1vZGlmeSB0aGUgRG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBY
UGF0aFJlc3VsdHMKKyAgICAgIGFyZSBpbnZhbGlkYXRlZCBYUGF0aFJlc3VsdC5pbnZhbGlkSXRl
cmF0b3JTdGF0ZSA9PSB0cnVlLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVz
b2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LWludmFsaWQtaXRlcmF0b3It
c3RhdGUKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRF
UkVEX05PREVfSVRFUkFUT1JfVFlQRSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNr
SW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRl
X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBB
TllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklO
R19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0g
NjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIg
QU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9E
RV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2
YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0
ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHBy
ZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9j
RWxlbWVudDsKKyAgICAgIHZhciBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVY
UGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZl
cihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9y
LmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVz
dWx0KTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0LmludmFsaWRJdGVy
YXRvclN0YXRlOworCisgICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFsaWRJdGVyYXRvclN0
YXRlKTsKK2RvY0VsZW1lbnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3ll
ZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NF
bGVtZW50LmFwcGVuZENoaWxkKGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRl
ID0gb3V0cmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRUcnVlKCJ0
cnVlIixpbnZhbGlkSXRlcmF0b3JTdGF0ZSk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgIFhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX251bGwuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1
cE5hbWVzcGFjZVVSSV9udWxsLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAw
MS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0
dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5m
b3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMg
UmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0
d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFu
dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmln
aHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFt
ZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRo
TlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbCddOworfQorCit2YXIgZG9jc0xvYWRl
ZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1
bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJh
dGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5n
IGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8g
Y29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlz
ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRV
cFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAg
ICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cg
ZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRl
cigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAg
ICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJl
bG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9j
c0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAg
ICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVp
bGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKwor
CisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAK
Ky8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8v
CisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0
ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUK
Ky8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRD
b21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQ
YWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgSXRl
cmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGUgdGVzdCBkb2N1bWVudCwgY3JlYXRpbmcKKyAg
ICAgIG5zcmVzb2x2ZXJzIGNoZWNraW5nIHRoYXQgbG9va2luZyB1cCBub24tZXhpc3RlbnQgcHJl
Zml4ZXMKKyAgICAgIGFsd2F5cyByZXR1cm5zIG51bGwuCisgICAgCisqIEBhdXRob3IgQm9iIENs
YXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0
b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aE5TUmVzb2x2ZXItbG9va3VwTmFtZXNwYWNlVVJJCisqLworZnVuY3Rpb24gWFBh
dGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsKCkgeworICAgdmFyIHN1Y2Nlc3M7
CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhOU1Jlc29sdmVyX2xv
b2t1cE5hbWVzcGFjZVVSSV9udWxsIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7Cisg
ICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGVsZW1l
bnQ7CisgICAgICB2YXIgZWxlbWVudHM7CisgICAgICB2YXIgbG9va3VwTmFtZXNwYWNlVVJJOwor
ICAgICAgdmFyIG5hbWVzcGFjZVVSSTsKKyAgICAgIHZhciBwcmVmaXg7CisgICAgICAKKyAgICAg
IHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2Mg
PSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICBlbGVtZW50cyA9IGRvYy5n
ZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwiKiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRl
WFBhdGhFdmFsdWF0b3IoZG9jKTsKK2Zvcih2YXIgaW5kZXhONjU2MzEgPSAwO2luZGV4TjY1NjMx
IDwgZWxlbWVudHMubGVuZ3RoOyBpbmRleE42NTYzMSsrKSB7CisgICAgICBlbGVtZW50ID0gZWxl
bWVudHMuaXRlbShpbmRleE42NTYzMSk7CisgICAgICByZXNvbHZlciA9IGV2YWx1YXRvci5jcmVh
dGVOU1Jlc29sdmVyKGVsZW1lbnQpOworICAgICAgbG9va3VwTmFtZXNwYWNlVVJJID0gcmVzb2x2
ZXIubG9va3VwTmFtZXNwYWNlVVJJKCJmb29iYXIiKTsKKyAgICAgIGFzc2VydE51bGwoIm5vdG51
bGwiLGxvb2t1cE5hbWVzcGFjZVVSSSk7CisgICAgCisJfQorICAgCit9CisKKworCisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX251
bGwoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQ
RS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0Nh
bnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwx
MDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkg
c2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNTA2
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTA2OiAiWFBhdGhSZXN1bHRf
aW52YWxpZEl0ZXJhdG9yU3RhdGVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEU6IFN1Y2Nlc3MiCklu
ZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFs
dWF0ZV9kb2N1bWVudEVsZW1lbnQuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudC5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4N
Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwh
RU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4N
CisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1l
bnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+
PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVS
SSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJ
QyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMg
ZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBV
QkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJu
b3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVl
KywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAg
eG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBu
YW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRU
TElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEg
I1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qg
c2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29t
bWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVu
dC5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNy
Yz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3Yi
IHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
MTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3Np
dGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpk
b21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVz
cz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVz
YS5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBF
bnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBh
ZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSww
MDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0
Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4
NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0
dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95
ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFy
dG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3llZSB4bWxuczplbXA9Imh0dHA6Ly93d3cubmlzdC5n
b3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFsdGF2aXN0YS5jb20iID4gICAgPGVtcDplbXBsb3ll
ZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlkPg0KKyAgPG5tOm5hbWU+SmVueSBPY29ubm9yPC9u
bTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L2VtcDpwb3NpdGlv
bj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwvZW1wOnNhbGFyeT4NCisgIDxlbXA6Z2VuZGVyPkZl
bWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6YWRkcmVzcyBlbXA6ZG9tZXN0aWM9IlllcyIgc3Ry
ZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FOQURBIiBlbXA6bG9jYWwxPSJUUlVFIj4yNyBTb3V0
aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2PC9lbXA6YWRkcmVzcz4NCisgPC9lbXA6ZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAyPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8
L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8
c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjE4MjEgTm9yZGlj
LiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwv
c3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4
cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9k
b2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0Nv
bnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHty
ZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAw
ODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAs
MTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI5OHgxOAorICAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI5ODogIlhQYXRoRXhwcmVzc2lvbl9ldmFsdWF0
ZV9kb2N1bWVudDogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3Jt
YW5jZV9oYXNGZWF0dXJlX251bGwuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisK
Ky8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
CisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFy
Y2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5p
dmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBl
eHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFt
ZXMoKQoreworcmV0dXJuIFsnQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsJ107Cit9CisKK3Zh
ciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAg
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUK
Ky8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBu
byBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3Vt
ZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAg
IGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8g
ICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1
bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAg
IHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIs
IG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZp
Z3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2
YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xv
YWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAg
ICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxl
dGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRp
b25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21w
bGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRV
cFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQg
aGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2gg
YWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVu
Y3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAg
ICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyog
CisgICAgICAxLjMgQ29uZm9ybWFuY2UgLSBUZXN0IGlmIAorICAgICAgRG9jdW1lbnQuaW1wbGVt
ZW50YXRpb24uaGFzRmVhdHVyZSgnWFBhdGgnLCBudWxsKSByZXR1cm5zIHRydWUKKyAgICAKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjQ29uZm9ybWFuY2UKKyovCitmdW5jdGlvbiBDb25mb3JtYW5jZV9oYXNGZWF0dXJlX251
bGwoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxk
ZXIsICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwiKSAhPSBudWxsKSByZXR1cm47CisgICAg
dmFyIGRvYzsKKyAgICAgIHZhciBzdGF0ZTsKKyAgICAgIHZhciBpbXBsOworICAgICAgdmFyIG51
bGxWYWx1ZSA9IG51bGw7CisKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0
YWZmTlMiKTsKKyAgICAgIGltcGwgPSBkb2MuaW1wbGVtZW50YXRpb247CitzdGF0ZSA9IGltcGwu
aGFzRmVhdHVyZSgieHBBVEgiLG51bGxWYWx1ZSk7Cithc3NlcnRUcnVlKCJoYXNGZWF0dXJlLVhQ
YXRoLW51bGwiLHN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
Q29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAw
MS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0
dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5m
b3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMg
UmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0
d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFu
dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmln
aHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFt
ZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ0F0dHJp
YnV0ZV9Ob2RlcyddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxk
ZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVz
dGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisv
LworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hy
b25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2Us
IHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRp
b24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9k
eSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VT
dGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMg
dGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAg
IGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVk
ID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsK
KyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAg
IHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAg
ICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQ
YWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMg
bG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9u
b3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0
dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3Qg
dG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9j
c0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7Cisg
ICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFMxLjIuMiBBdHRyaWJ1dGUgTm9kZXMgLSAKKyAg
ICAgIENyZWF0ZSBBTllfVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGluZyAgLy9AKiwKKyAgICAgIGNo
ZWNrIHRoYXQgZWFjaCBtYXRjaGluZyBOb2RlIGlzIGFuIEF0dHJpYnV0ZSBOb2RlLAorICAgICAg
dGhhdCBwYXJlbnROb2RlcyBvZiByZXR1cm5lZCBBdHRyaWJ1dGVzIGFyZSBudWxsLAorICAgICAg
YW5kIHRoYXQgb3duZXJFbGVtZW50cyBhcmUgaW4gZmFjdCBFbGVtZW50cy4KKyAgICAKKyogQGF1
dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI01hcHBpbmcKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZh
bHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1Y
UGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29s
dmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaXRl
cmF0ZU5leHQKKyovCitmdW5jdGlvbiBBdHRyaWJ1dGVfTm9kZXMoKSB7CisgICB2YXIgc3VjY2Vz
czsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJBdHRyaWJ1dGVfTm9kZXMi
KSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1C
RVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xF
QU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7
CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVO
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7
CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsK
KyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29u
dGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVz
dWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiLy9AKiI7CisgICAgICB2YXIg
eHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2YXIgb3V0Tm9kZTsKKyAgICAgIHZhciBub2Rl
VHlwZTsKKyAgICAgIHZhciBwYXJlbnQ7CisgICAgICB2YXIgb3duZXI7CisgICAgICB2YXIgb3du
ZXJUeXBlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2
YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7
CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxy
ZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgb3V0Tm9kZSA9IG91dHJlc3VsdC5p
dGVyYXRlTmV4dCgpOworICAgICAgCisgICAgd2hpbGUoCisJCisJKG91dE5vZGUgIT0gbnVsbCkK
KworCSkgeworCW5vZGVUeXBlID0gb3V0Tm9kZS5ub2RlVHlwZTsKKworICAgICAgYXNzZXJ0RXF1
YWxzKCJTMS4yLjItQXR0cmlidXRlLU5vZGVzLW5vZGVUeXBlIiwyLG5vZGVUeXBlKTsKKyAgICAg
ICBwYXJlbnQgPSBvdXROb2RlLnBhcmVudE5vZGU7CisKKyAgICAgIGFzc2VydE51bGwoIlMxLjIu
Mi1BdHRyaWJ1dGUtTm9kZXMtcGFyZW50Tm9kZSIscGFyZW50KTsKKyAgICBvd25lciA9IG91dE5v
ZGUub3duZXJFbGVtZW50OworCisgICAgICBvd25lclR5cGUgPSBvd25lci5ub2RlVHlwZTsKKwor
ICAgICAgYXNzZXJ0RXF1YWxzKCJTMS4yLjItQXR0cmlidXRlLU5vZGVzLW93bmVyLW5vZGVUeXBl
IiwxLG93bmVyVHlwZSk7CisgICAgICAgb3V0Tm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgp
OworICAgICAgCisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBBdHRy
aWJ1dGVfTm9kZXMoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L0F0dHJpYnV0ZV9Ob2Rlc194bWxucy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzX3htbG5zLnN2ZwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rlc194bWxu
cy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0
YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVu
dDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8
IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxl
bWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElU
WSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0K
KyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQor
ICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFU
SU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcg
KHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAg
PCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5U
IHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlS
RUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJF
RA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgj
UENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICAN
CitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292
Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQXR0cmlidXRlX05vZGVz
X3htbG5zLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0
LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAg
PHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRt
c3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93
d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3
aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlz
IGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7
XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5
PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsN
CisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0
Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+
RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5u
aXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVt
cGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25u
b3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBv
c2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5k
ZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3
IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDpl
bXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMi
Pg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBN
eWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisg
IDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBO
b3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sLnN2Zwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFt
ZXNwYWNlVVJJX3htbC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3htbC5zdmcJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1T
VFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRk
IiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAg
RGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBl
bnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRh
PC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBV
QkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5U
SVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJ
VFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElP
TiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0
aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNj
cmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNU
IHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1Q
VFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4N
CisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwh
LS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4
PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5h
bWVzcGFjZVVSSV94bWwuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8v
d3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25h
bWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxz
YWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMg
OTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0i
aHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFT
ZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRB
W1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0
YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisg
IDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMs
ICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHht
bG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxw
b3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8
L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRw
Oi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAg
IDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkpl
bnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9y
PC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8
ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVz
dGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0i
VFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQor
IDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0
LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bv
c2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292
Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGwuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRl
TlNSZXNvbHZlcl9hbGwuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2FsbC5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBX
b3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
ZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNz
IGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVk
LiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGlj
ZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sx
XSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3
YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5j
dGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRv
cl9jcmVhdGVOU1Jlc29sdmVyX2FsbCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAw
OwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRl
c3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRp
b25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQu
ICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5k
IHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRl
cmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7Cisg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAv
LyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisg
ICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAg
ICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBj
YXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOwor
ICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAg
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFj
aCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4g
ZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAg
IHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9k
eSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsK
KyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0g
J2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgSXRlcmF0ZSBvdmVyIGFs
bCBub2RlcyBpbiB0aGUgdGVzdCBkb2N1bWVudCwgY3JlYXRpbmcKKyAgICAgIFhQYXRoTlNSZXNv
bHZlcnMgY2hlY2tpbmcgdGhhdCBub25lIHJldHVybiBhIG51bGwgb2JqZWN0LgorICAgIAorKiBA
YXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1
YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2FsbCgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNo
ZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2
ZXJfYWxsIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgc3RhZmY7
CisgICAgICB2YXIgc3RhZmZjaGlsZHJlbjsKKyAgICAgIHZhciBzdGFmZmNoaWxkOworICAgICAg
dmFyIHN0YWZmZ3JhbmRjaGlsZHJlbjsKKyAgICAgIHZhciBzdGFmZmdyYW5kY2hpbGQ7CisgICAg
ICB2YXIgc3RhZmZncmVhdGdyYW5kY2hpbGRyZW47CisgICAgICB2YXIgc3RhZmZncmVhdGdyYW5k
Y2hpbGQ7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAg
CisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAg
ICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgZXZhbHVhdG9y
ID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0
ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGFzc2VydE5vdE51bGwoImRvY3VtZW50bm90bnVsbCIs
cmVzb2x2ZXIpOworc3RhZmYgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICByZXNvbHZl
ciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKHN0YWZmKTsKKyAgICAgIGFzc2VydE5vdE51
bGwoImRvY3VtZW50RWxlbWVudG5vdG51bGwiLHJlc29sdmVyKTsKK3N0YWZmY2hpbGRyZW4gPSBz
dGFmZi5jaGlsZE5vZGVzOworCisgICAgICBmb3IodmFyIGluZGV4TjY1NjQ0ID0gMDtpbmRleE42
NTY0NCA8IHN0YWZmY2hpbGRyZW4ubGVuZ3RoOyBpbmRleE42NTY0NCsrKSB7CisgICAgICBzdGFm
ZmNoaWxkID0gc3RhZmZjaGlsZHJlbi5pdGVtKGluZGV4TjY1NjQ0KTsKKyAgICAgIHJlc29sdmVy
ID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoc3RhZmZjaGlsZCk7CisgICAgICBhc3NlcnRO
b3ROdWxsKCJzdGFmZmNoaWxkbm90bnVsbCIscmVzb2x2ZXIpOworc3RhZmZncmFuZGNoaWxkcmVu
ID0gc3RhZmZjaGlsZC5jaGlsZE5vZGVzOworCisgICAgICBmb3IodmFyIGluZGV4TjY1NjYxID0g
MDtpbmRleE42NTY2MSA8IHN0YWZmZ3JhbmRjaGlsZHJlbi5sZW5ndGg7IGluZGV4TjY1NjYxKysp
IHsKKyAgICAgIHN0YWZmZ3JhbmRjaGlsZCA9IHN0YWZmZ3JhbmRjaGlsZHJlbi5pdGVtKGluZGV4
TjY1NjYxKTsKKyAgICAgIHJlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoc3Rh
ZmZncmFuZGNoaWxkKTsKKyAgICAgIGFzc2VydE5vdE51bGwoInN0YWZmZ3JhbmRjaGlsZG5vdG51
bGwiLHJlc29sdmVyKTsKK3N0YWZmZ3JlYXRncmFuZGNoaWxkcmVuID0gc3RhZmZncmFuZGNoaWxk
LmNoaWxkTm9kZXM7CisKKyAgICAgIGZvcih2YXIgaW5kZXhONjU2NzggPSAwO2luZGV4TjY1Njc4
IDwgc3RhZmZncmVhdGdyYW5kY2hpbGRyZW4ubGVuZ3RoOyBpbmRleE42NTY3OCsrKSB7CisgICAg
ICBzdGFmZmdyZWF0Z3JhbmRjaGlsZCA9IHN0YWZmZ3JlYXRncmFuZGNoaWxkcmVuLml0ZW0oaW5k
ZXhONjU2NzgpOworICAgICAgcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihz
dGFmZmdyZWF0Z3JhbmRjaGlsZCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJzdGFmZmdyZWF0Z3Jh
bmRjaGlsZG5vdG51bGwiLHJlc29sdmVyKTsKKworCX0KKyAgIAorCX0KKyAgIAorCX0KKyAgIAor
fQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3JfY3JlYXRl
TlNSZXNvbHZlcl9hbGwoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLnN2ZwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNl
X2hhc0ZlYXR1cmVfMy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElD
ICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAg
IDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRl
eGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cu
eHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4N
CisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEg
bm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBu
b3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2Nh
cmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4N
CisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwh
RUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxv
eWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQor
ICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBD
REFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1F
TlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1Q
TElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8v
d3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQ29u
Zm9ybWFuY2VfaGFzRmVhdHVyZV8zLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFy
dGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAg
DQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50Mjsg
RGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFz
IDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVt
cD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNv
bSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06
bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBE
aXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5
Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVt
cDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDps
b2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRy
ZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFs
aXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0
Yy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLnN2ZwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9s
b29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0Yy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9D
VFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkg
ZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwh
RU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1s
bnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFy
Z2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50
aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmki
ICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkg
c2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJu
b3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9u
MkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6
ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBD
REFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RB
VEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJl
Y3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0K
KyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlS
RUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQg
dHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51
bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxu
czpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0iWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3Rj
LmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3Jj
PSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIg
eG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAx
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRv
bWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNh
LmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVu
dGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFk
amFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9u
YW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3Rj
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1
NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0
cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0
bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8
L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0Lmdv
diIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVl
SWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25t
Om5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9u
Pg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVt
YWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRo
IFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwv
bmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxz
YWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMu
IFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9z
dmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRS5zdmcJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRS5zdmcJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURB
VEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBl
bnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFF
TlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVz
dGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4N
CisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEg
bm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNj
YXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+
DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8
IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2
ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAg
eG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBu
YW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRU
TElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEg
I1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qg
c2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29t
bWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLmpzIi8+DQorPHNjcmlw
dCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwv
cG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2Vu
ZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0
aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50
aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRq
YWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25h
bWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVz
cz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
NDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlv
bj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9z
aXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9Illl
cyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9l
bXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNU
LVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAg
IDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2Fk
Ij4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVs
ZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQg
UElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlG
aWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hv
dWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3Rh
dGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZp
bGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8
IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2
ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
Ig0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+
DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5
IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhl
aWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisg
IDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0g
VGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBh
dGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUuanMi
Lz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2
Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5B
Y2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
Ij4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rp
b24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhp
cyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAm
dGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQor
IDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1w
bG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25h
bWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxh
cnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4
NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhh
cyA5ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxh
cnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IHN0cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9UZXh0X05vZGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1RleHRfTm9kZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIwMCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUg
V2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ks
IEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhl
bWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29y
ayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBp
biB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93
d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEy
MzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9z
ZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1RleHRfTm9kZXMnXTsKK30KKwordmFy
IGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQor
Ly8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5v
IGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1l
bnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAg
aXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAg
ICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVu
Y3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAg
dHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZh
ciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9h
ZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAgICAg
IGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUn
OworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25F
cnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAg
fQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0
aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRl
c3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFz
IGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxs
b3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rp
b24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisg
ICAgICAxLjIuNCBUZXh0IE5vZGVzIC0gCisgICAgICBDcmVhdGUgQU5ZX1RZUEUgWFBhdGhSZXN1
bHQgbWF0Y2hpbmcgLy90ZXh0KCksCisgICAgICBjaGVjayB0aGF0IGVhY2ggbWF0Y2hpbmcgTm9k
ZSBpcyBhIFRleHQgTm9kZSwgYW5kCisgICAgICB0aGF0IG5vIHBhaXIgb2Ygbm9kZXMgaW4gdGhl
IHJlc3VsdCBhcmUgc2libGluZ3MuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNNYXBwaW5nCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2
ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3It
ZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhS
ZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LWl0ZXJhdGVOZXh0CisqLworZnVuY3Rpb24g
VGV4dF9Ob2RlcygpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRp
b24oYnVpbGRlciwgIlRleHRfTm9kZXMiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9U
WVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZ
UEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2Owor
ICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllf
VU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZ
UEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBl
dmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBu
dWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Np
b24gPSAiLy90ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEFOWV9UWVBFOworICAgICAg
dmFyIGN1cnJOb2RlOworICAgICAgdmFyIG5leHROb2RlOworICAgICAgdmFyIGN1cnJOb2RlTmV4
dFNpYmxpbmc7CisgICAgICB2YXIgbmV4dE5vZGVQcmV2U2libGluZzsKKyAgICAgIHZhciBub2Rl
VHlwZTsKKyAgICAgIHZhciBpc1RleHROb2RlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9y
KGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAg
ICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhw
cmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAg
Y3Vyck5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIAorICAgIHdoaWxlKAor
CQorCShjdXJyTm9kZSAhPSBudWxsKQorCisJKSB7CisJbm9kZVR5cGUgPSBjdXJyTm9kZS5ub2Rl
VHlwZTsKKworICAgICAgaXNUZXh0Tm9kZSA9ICJ0cnVlIjsKKworCWlmKAorCQorCSghKDMgPT0g
bm9kZVR5cGUpICYmICEoNCA9PSBub2RlVHlwZSkpCisKKwkpIHsKKwlpc1RleHROb2RlID0gImZh
bHNlIjsKKworCX0KKwlhc3NlcnRFcXVhbHMoIlMxLjIuNC1UZXh0LU5vZGVzLW5vZGVUeXBlIiwi
dHJ1ZSIudG9Mb3dlckNhc2UoKSxpc1RleHROb2RlLnRvTG93ZXJDYXNlKCkpOworICAgICAgIG5l
eHROb2RlID0gb3V0cmVzdWx0Lml0ZXJhdGVOZXh0KCk7CisgICAgICAKKwlpZigKKwkKKwkobmV4
dE5vZGUgIT0gbnVsbCkKKworCSkgeworCWN1cnJOb2RlTmV4dFNpYmxpbmcgPSBjdXJyTm9kZS5u
ZXh0U2libGluZzsKKworICAgICAgCisJaWYoCisJCisJc2FtZShuZXh0Tm9kZSxjdXJyTm9kZU5l
eHRTaWJsaW5nKQorCisJKSB7CisJLyogZHVtbXkgc3RhdGVtZW50ICovCisKKwl9CisJCisJCWVs
c2UgeworCQkJYXNzZXJ0VHJ1ZSgiUzEuMi40LVRleHQtTm9kZXMtQWRqYWNlbnQtTmV4dCIsZmFs
c2UpOworCisJCX0KKwluZXh0Tm9kZVByZXZTaWJsaW5nID0gbmV4dE5vZGUucHJldmlvdXNTaWJs
aW5nOworCisgICAgICAKKwlpZigKKwkKKwlzYW1lKG5leHROb2RlUHJldlNpYmxpbmcsY3Vyck5v
ZGUpCisKKwkpIHsKKwkvKiBkdW1teSBzdGF0ZW1lbnQgKi8KKworCX0KKwkKKwkJZWxzZSB7CisJ
CQlhc3NlcnRUcnVlKCJTMS4yLjQtVGV4dC1Ob2Rlcy1BZGphY2VudC1QcmV2IixmYWxzZSk7CisK
KwkJfQorCQorCX0KKwljdXJyTm9kZSA9ICBuZXh0Tm9kZTsKKworCX0KKworfQorCisKKworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgVGV4dF9Ob2RlcygpOworfQpJbmRleDogTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9ib29sZWFuVmFsdWVfZmFsc2Uuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNU
LVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAg
IDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2Fk
Ij4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVs
ZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQg
UElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlG
aWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hv
dWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3Rh
dGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZp
bGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8
IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2
ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
Ig0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+
DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5
IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhl
aWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisg
IDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0g
VGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBh
dGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJl
dCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAg
ICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywg
VGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9s
ZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51
bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0
aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRp
b24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0
PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1l
bnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9
Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGly
ZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50
MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIg
U3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdl
bmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMu
IFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9z
dmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29s
dmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBO
YW1lc3BhY2VVUklfcHJlZml4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VV
UklfcHJlZml4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBM
MTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBh
dCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAzNzN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNzM6ICJYUGF0
aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeDogU3VjY2VzcyIKSW5kZXg6IExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMuc3ZnCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMuc3Zn
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29tbWVu
dF9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFm
Zi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkw
MCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZ
IGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVu
dD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5
VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRo
aXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24x
IFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVN
ICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAg
IDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVO
VCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJ
UkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlS
RUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAo
I1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAg
DQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIg
aGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIiBzcmM9IkNvbW1lbnRfTm9kZXMuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1h
cnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAg
IA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhh
cyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwh
W0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVy
IDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24g
d2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5T
ZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Illl
cyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBN
YW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8i
PlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0K
KyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3Rv
cjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+
MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVj
aWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
Pm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9h
ZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4N
CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9l
dmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRF
RF9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIuc3ZnCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUg
UElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQor
Ww0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxh
cyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAi
PGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50
RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMg
ImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBl
bnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVu
dDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90
YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIg
U1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQs
IGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcg
DQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIN
CisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0K
KyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBD
REFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWln
aHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8
IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRo
aXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIg
eT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9T
VVBQT1JURURfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2Fs
YXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4
NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0
dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3Qt
U3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlk
Pg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2Vj
dGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtU
aGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFi
ICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8
c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxh
ZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAm
ZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
czpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9z
aXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRv
bWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDov
L3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8
ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55
IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3Rvcjwv
ZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVt
cDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRS
VUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8
L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5n
b3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJv
YmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3Np
dGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+
MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfTlVNQkVSX1RZUEUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM3IEBACisKKy8qCitD
b3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFz
c2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29u
c29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0
eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0
aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9M
ZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2Ug
dGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQor
eworcmV0dXJuIFsnWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVSX1RZUEUn
XTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsK
KworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3
b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYg
dGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAg
ICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVz
CisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVk
aWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRl
c3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1
bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1l
bnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0g
Y3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAg
ICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykg
IT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9Cisg
ICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAg
ICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2Ug
PSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5p
dGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21w
bGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9u
IHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRl
ZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQg
ZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5n
ZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1
dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0g
MSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKwor
CisvKioKKyogCisgICAgICBDcmVhdGUgYSBOVU1CRVJfVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGlu
ZyAvc3RhZmYvZW1wbG95ZWUsCisgICAgICBtb2RpZnkgdGhlIERvY3VtZW50LCB0aGVuIGNoZWNr
IHRoYXQgaXRlcmF0b3IgWFBhdGhSZXN1bHRzCisgICAgICBhcmUgbm90IGludmFsaWRhdGVkIFhQ
YXRoUmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlID09IGZhbHNlLgorICAgIAorKiBAYXV0aG9y
IEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVs
LTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
RXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2
YWx1YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1Y
UGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVz
dWx0LWludmFsaWQtaXRlcmF0b3Itc3RhdGUKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9OVU1CRVJfVFlQRSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlm
KGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRv
clN0YXRlX05VTUJFUl9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9
IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0g
MjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAg
IHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0g
OTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVh
dG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsK
KworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0g
Ii9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gTlVNQkVSX1RZUEU7Cisg
ICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAgIHZhciBpbnZh
bGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0
YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVz
b2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5v
ZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29u
dGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0VsZW1lbnQg
PSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVhdGVFbGVt
ZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVuZENoaWxk
KGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0LmludmFs
aWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFsaWRJdGVy
YXRvclN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhS
ZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVSX1RZUEUoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3Vt
ZW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1
bWVudC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIg
InN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZ
IGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisg
ICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+
RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVO
VElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24x
Pg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+
DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQor
ICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5P
VEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBz
dmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQor
ICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0
ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAg
ICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3Qu
Z292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3Jp
cHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfZG9jdW1lbnQuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywg
VGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpk
bXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEg
Q0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwh
W0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4N
CisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4x
MDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMg
OTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1w
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29t
IiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpu
YW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERp
cmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+
DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1w
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxv
Y2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJl
c3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxp
c3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5p
c3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZh
bHVhdG9yX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dS
T05HX0RPQ1VNRU5UX0VSUi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKworLyoK
K0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhN
YXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBD
b25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJz
aXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAK
K3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVt
L0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9z
ZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygp
Cit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIn
XTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsK
KworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3
b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYg
dGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAg
ICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVz
CisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVk
aWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRl
c3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1
bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1l
bnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0g
Y3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAg
ICAKKyAgICAgIHZhciBkb2MxUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2Mx
KSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2MxUmVmID0gdGhpcy5kb2MxOworICAgICAg
fQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvYzFSZWYsICJkb2MxIiwgInN0YWZmTlMi
KTsKKyAgICAgICAgCisgICAgICB2YXIgZG9jMlJlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jMikgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jMlJlZiA9IHRoaXMuZG9j
MjsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2MyUmVmLCAiZG9jMiIs
ICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAyKSB7CisgICAg
ICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkg
eworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBz
ZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJv
bm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3lu
Y2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdl
IHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUg
dGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAo
Kytkb2NzTG9hZGVkID09IDIpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRl
JzsKKyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAorICAgICAgVGVzdCBpZiBYUGF0aEV2YWx1
YXRvci5ldmFsdWF0ZSBwcm9wZXJseSB0aHJvd3MgV1JPTkdfRE9DVU1FTlRfRVJST1IKKyAgICAK
KyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVhdGUKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIoKSB7CisgICB2YXIgc3VjY2VzczsKKyAg
ICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9XUk9OR19ET0NVTUVOVF9FUlIiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzE7Cisg
ICAgICB2YXIgZG9jMjsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciByb290Owor
ICAgICAgdmFyIHJlc3VsdDsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAg
ICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgCisgICAgICB2YXIgZG9jMVJlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jMSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgZG9jMVJlZiA9IHRoaXMuZG9jMTsKKyAgICAgIH0KKyAgICAgIGRvYzEgPSBsb2FkKGRv
YzFSZWYsICJkb2MxIiwgInN0YWZmTlMiKTsKKyAgICAgIAorICAgICAgdmFyIGRvYzJSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYzIpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvYzJSZWYgPSB0aGlzLmRvYzI7CisgICAgICB9CisgICAgICBkb2MyID0gbG9hZChkb2My
UmVmLCAiZG9jMiIsICJzdGFmZiIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2
YWx1YXRvcihkb2MxKTsKK3Jvb3QgPSBkb2MyLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgCisJ
eworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSB4cEV2
YWx1YXRvci5ldmFsdWF0ZSgiLy9mb286YmFyIixyb290LG51bGxOU1Jlc29sdmVyLDAsbnVsbFJl
c3VsdCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9m
KGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNCk7CisJCX0KKwkJYXNzZXJ0
VHJ1ZSgidGhyb3dfV1JPTkdfRE9DVU1FTlRfRVJSIixzdWNjZXNzKTsKKwl9CisKK30KKworCisK
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dST05H
X0RPQ1VNRU5UX0VSUigpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0X1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfaXRlcmF0b3JOZXh0X1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
dGVyYXRvck5leHRfVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNDUgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBX
aWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9s
b2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBN
YXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlz
IHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBb
MV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRw
Oi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIw
MDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBl
eHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pdGVyYXRv
ck5leHRfVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSddOworfQorCit2YXIgZG9jc0xvYWRl
ZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1
bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJh
dGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5n
IGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8g
Y29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlz
ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRV
cFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAg
ICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cg
ZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRl
cigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAg
ICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJl
bG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NM
b2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAg
fQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxk
ZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKwor
CisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisv
LyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLwor
Ly8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVk
LAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisv
LyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29t
cGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICBDcmVhdGUg
YW4gWFBhdGhSZXN1bHQgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSBYUGF0aFJlc3VsdFR5
cGUgZm9yIAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgp
IGNoZWNraW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuaXRlcmF0b3JOZXh0IGNvbnRhaW5zIHRo
ZSBjb3JyZWN0IG51bWJlciBvZiBub2Rlcy4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMw
MzMxL3hwYXRoI1hQYXRoUmVzdWx0LWl0ZXJhdG9yTmV4dAorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1
bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0
b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4
dF9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAg
aWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0
X1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFy
IEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RS
SU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUg
PSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZh
ciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9O
T0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAg
IHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1
bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4
cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgpIjsKKyAgICAgIHZh
ciB4cGF0aFR5cGUgPSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOworICAgICAgdmFyIG91
dE5vZGU7CisgICAgICB2YXIgbm9kZVR5cGU7CisgICAgICB2YXIgcGFyZW50OworICAgICAgdmFy
IG93bmVyOworICAgICAgdmFyIG93bmVyVHlwZTsKKyAgICAgIHZhciBpbmRleDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBj
cmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNS
ZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZh
bHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBl
LGlucmVzdWx0KTsKKyAgICAgIGluZGV4ID0gMDsKK291dE5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0
ZU5leHQoKTsKKyAgICAgIAorICAgIHdoaWxlKAorCQorCShvdXROb2RlICE9IG51bGwpCisKKwkp
IHsKKwlpbmRleCArPSAxOworb3V0Tm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAg
ICAgCisJfQorYXNzZXJ0RXF1YWxzKCJjb3VudCIsNCxpbmRleCk7CisgICAgICAgCit9CisKKwor
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfVU5P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVf
My5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0Nv
bmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAK
KworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVt
LCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNl
YXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBV
bml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25z
b3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8v
IGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25O
YW1lcygpCit7CityZXR1cm4gWydDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzMnXTsKK30KKwordmFy
IGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQor
Ly8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5v
IGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1l
bnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAg
aXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAg
ICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVu
Y3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAg
dHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZh
ciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9h
ZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAg
ICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlv
bkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBs
ZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVw
VGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBo
YXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBh
bGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5j
dGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAg
ICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAK
KyAgICAgIDEuMyBDb25mb3JtYW5jZSAtIFRlc3QgaWYgCisgICAgICBEb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5oYXNGZWF0dXJlKCdYUGF0aCcsICIzLjAiKSByZXR1cm5zIHRydWUKKyAgICAKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjQ29uZm9ybWFuY2UKKyovCitmdW5jdGlvbiBDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzMo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzMiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRv
YzsKKyAgICAgIHZhciBzdGF0ZTsKKyAgICAgIHZhciBpbXBsOworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgaW1wbCA9IGRvYy5pbXBsZW1lbnRh
dGlvbjsKK3N0YXRlID0gaW1wbC5oYXNGZWF0dXJlKCJ4cEFUSCIsIjMuMCIpOworYXNzZXJ0VHJ1
ZSgiaGFzRmVhdHVyZS1YUGF0aC0zLjAiLHN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zKCk7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
MyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNv
cnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFu
IFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBL
ZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0
cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCito
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3Jn
L0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisK
KworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5j
dGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50J107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEw
MDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0
aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4
Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3Rh
cnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0
ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVu
IGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgp
IHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisg
ICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRp
b24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisK
KyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsK
KyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRv
Y1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRv
Y1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAg
fSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgp
OworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisv
LyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAg
ZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdo
ZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAg
ICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAg
Ym9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgp
IHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVz
ID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBYUGF0
aFJlc3VsdCBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIFhQYXRoUmVzdWx0VHlwZSBmb3Ig
CisgICAgZXhwcmVzc2lvbiAvc3RhZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCkgY2hlY2tp
bmcgdGhhdDoKKyAgICBYUGF0aFJlc3VsdC5zbmFwc2hvdEl0ZW0oMC4uMykgZXhpc3QuCisgICAg
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zbmFwc2hvdC1s
ZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXNuYXBzaG90SXRlbQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
WFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZl
bC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X3Nu
YXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50KCkgeworICAgdmFy
IHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1
bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfY291bnQiKSAhPSBu
dWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQ
RSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQ
RSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAg
ICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAg
IHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5v
ZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0g
bnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL2VtcGxveWVl
SWQvdGV4dCgpIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBVTk9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFOworICAgICAgdmFyIHNuYXBzaG90SXRlbTsKKyAgICAgIHZhciBzbmFwc2hvdExlbmd0
aDsKKyAgICAgIHZhciBpbmRleDsKKyAgICAgIHZhciB0ZXh0OworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRo
RXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRv
Yyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZh
bHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQp
OworICAgICAgaW5kZXggPSAwOworCisgICAgd2hpbGUoCisJCisJKGluZGV4IDwgNSkKKworCSkg
eworCXNuYXBzaG90SXRlbSA9IG91dHJlc3VsdC5zbmFwc2hvdEl0ZW0oaW5kZXgpOworICAgICAg
YXNzZXJ0Tm90TnVsbCgibm90bnVsbCIsc25hcHNob3RJdGVtKTsKK2luZGV4ICs9IDE7CisKKwl9
CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0X3NuYXBz
aG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50KCk7Cit9CkluZGV4OiBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9u
dWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9udWxsLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lz
U3VwcG9ydGVkX251bGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAs
MC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3Rl
eHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDI1OXgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI1OTog
IkNvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGw6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
eHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkg
MjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3Ig
SW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdo
dHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBT
b2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5
cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24g
bmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQ
YXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9
IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5p
bmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlv
biBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlz
IHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29t
cGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQg
d2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBh
Z2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAv
LworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhj
ZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigp
OworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51
bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAg
ICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xv
YWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9
CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRl
ciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisK
Ky8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8v
ICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisv
LyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQs
CisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8v
ICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21w
bGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdl
U3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAorICAgICAg
VGVzdCBpZiBYUGF0aEV4cHJlc3Npb24uZXZhbHVhdGUgcmV0dXJucyBub24tbnVsbCByZXN1bHQK
KyAgICAgIHVzaW5nIERvY3VtZW50IGFzIGNvbnRleHROb2RlLgorICAgIAorKiBAYXV0aG9yIFBo
aWxpcHBlIExlIEjDqWdhcmV0CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV4cHJlc3Npb24tZXZhbHVhdGUK
KyovCitmdW5jdGlvbiBYUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aEV4
cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRv
YzsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51
bGw7CisKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciB4cGF0aFJlc3VsdDsKKyAg
ICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIHhwYXRoRXhwcmVzc2lvbjsK
KyAgICAgIHZhciBleHByZXNzaW9uID0gIi8iOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1
YXRvcihkb2MpOworY29udGV4dE5vZGUgPSAgZG9jOworeHBhdGhFeHByZXNzaW9uID0geHBFdmFs
dWF0b3IuY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLG51bGxOU1Jlc29sdmVyKTsKKyAgICAg
IHhwYXRoUmVzdWx0ID0geHBhdGhFeHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHROb2RlLDAsbnVs
bFJlc3VsdCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJub3RudWxsIix4cGF0aFJlc3VsdCk7CisK
K30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXhwcmVzc2lvbl9ldmFs
dWF0ZV9kb2N1bWVudCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0
cmluZ1ZhbHVlLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0
YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIx
OTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJ
VFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVt
ZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRp
dHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAi
VGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNU
RU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAj
SU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQor
ICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0
ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAg
ICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUuanMiLz4NCis8c2NyaXB0IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlv
bj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4g
RGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRo
YSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZl
cmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBD
REFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisg
IDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+
RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMi
IHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8
L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9N
LVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXBs
b3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBlcnNv
bm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVl
dD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwv
ZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5D
b21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4xODIx
IE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkg
MjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3Ig
SW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdo
dHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBT
b2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5
cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24g
bmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVs
bDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJh
bWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAg
SWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisv
LyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3Rh
dHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGlt
bWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhl
IHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0g
J3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9j
dW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVy
ID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7Cisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7Cisg
ICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBh
Z2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNo
SW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3Rh
cnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2Fk
ZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNo
YW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4
ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisvKioKKyogCisgICAgICBDcmVhdGUgYSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
IFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUg
RG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFy
ZSBpbnZhbGlkYXRlZCBYUGF0aFJlc3VsdC5pbnZhbGlkSXRlcmF0b3JTdGF0ZSA9PSB0cnVlLgor
ICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMw
MzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXIKKyogQHNl
ZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMx
L3hwYXRoI1hQYXRoUmVzdWx0LWludmFsaWQtaXRlcmF0b3Itc3RhdGUKKyovCitmdW5jdGlvbiBY
UGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9U
WVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAg
ICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAg
ICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRP
Ul9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7Cisg
ICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9E
RV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAg
ICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAg
ICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAg
IHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYv
ZW1wbG95ZWUiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAg
IHZhciBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51
bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAg
ICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAi
ZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihk
b2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAg
Y29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJl
c3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGlu
dmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlOworCisg
ICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFsaWRJdGVyYXRvclN0YXRlKTsKK2RvY0VsZW1l
bnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVhdGVF
bGVtZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVuZENo
aWxkKGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0Lmlu
dmFsaWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRUcnVlKCJ0cnVlIixpbnZhbGlkSXRl
cmF0b3JTdGF0ZSk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUo
KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Nu
YXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuc3ZnCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25h
cHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbC5zdmcJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQ
SURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElU
WSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAg
PCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRv
bWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+
Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRB
VEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBk
aXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmls
ZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisg
ICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5U
IHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAg
ICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAg
ICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwh
QVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAj
UkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RB
VEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJ
U1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMg
Y29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanMiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQu
anMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50
YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMw
IE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0
aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBh
biBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11d
PjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4z
NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQor
ICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAw
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1
NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisg
IDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVl
dD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9kb2N1bWVudC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50LmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExMSBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdp
ZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xv
Z3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1h
dGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMg
d29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsx
XSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6
Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAw
MjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4
cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2V2YWx1
YXRlX2RvY3VtZW50J107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVp
bGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0
ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4K
Ky8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5j
aHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lz
ZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBi
b2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRl
cyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAg
ICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2Fk
ZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogICAgICAgCisgICAgICBSZXRyaWV2ZSB0aGUgWFBhdGhF
dmFsdWF0b3Igb24gd2hpY2ggdGhlCisgICAgICAiZXZhbHVhdGUoIi8iLCBkb2N1bWVudCwgbnVs
bCwgMCwgbnVsbCkiIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhlIGRvY3VtZW50CisgICAgICBl
bGVtZW50LiBUaGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gWFBhdGhSZXN1bHQuCisgICAgCisq
IEBhdXRob3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9y
LWV2YWx1YXRlCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnQo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudCIpICE9IG51bGwpIHJldHVybjsKKyAg
ICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFyIHJvb3Q7CisgICAg
ICB2YXIgcmVzdWx0OworICAgICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAg
dmFyIG51bGxSZXN1bHQgPSBudWxsOworCisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxs
OworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
ZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRv
YyIsICJzdGFmZk5TIik7CisgICAgICB4cEV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9y
KGRvYyk7Cityb290ID0gIGRvYzsKK3Jlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRlKCIvIixy
b290LG51bGxOU1Jlc29sdmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJu
b3RudWxsIixyZXN1bHQpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBY
UGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RS
SU5HX1RZUEUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBF
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52
YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRl
bSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9y
PSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEww
LjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4
NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzODF4MTgKKyAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzODE6ICJYUGF0aFJlc3VsdF9pbnZhbGlk
SXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL3N2Z3VuaXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvc3ZndW5pdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL3N2Z3VuaXQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjk1IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgV29ybGQgV2lkZSBXZWIgQ29u
c29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3Bl
YW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3Ms
IEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0MocikgU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAor
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9y
Zy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLwor
CisgIGZ1bmN0aW9uIGFzc2VydFNpemUoZGVzY3IsIGV4cGVjdGVkLCBhY3R1YWwpIHsKKyAgICB2
YXIgYWN0dWFsU2l6ZTsKKyAgICBhY3R1YWxTaXplID0gYWN0dWFsLmxlbmd0aDsKKyAgICBhc3Nl
cnRFcXVhbHMoZGVzY3IsIGV4cGVjdGVkLCBhY3R1YWxTaXplKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGFzc2VydEVxdWFsc0F1dG9DYXNlKGNvbnRleHQsIGRlc2NyLCBleHBlY3RlZCwgYWN0dWFsKSB7
CisgIAlpZiAoYnVpbGRlci5jb250ZW50VHlwZSA9PSAidGV4dC9odG1sIikgeworICAJICAgIGlm
KGNvbnRleHQgPT0gImF0dHJpYnV0ZSIpIHsKKyAgCSAgICAJYXNzZXJ0RXF1YWxzKGRlc2NyLCBl
eHBlY3RlZC50b0xvd2VyQ2FzZSgpLCBhY3R1YWwudG9Mb3dlckNhc2UoKSk7CisgIAkgICAgfSBl
bHNlIHsKKyAgCSAgICAgICAgYXNzZXJ0RXF1YWxzKGRlc2NyLCBleHBlY3RlZC50b1VwcGVyQ2Fz
ZSgpLCBhY3R1YWwpOworICAJICAgIH0KKyAgCX0gZWxzZSB7CisgIAkJYXNzZXJ0RXF1YWxzKGRl
c2NyLCBleHBlY3RlZCwgYWN0dWFsKTsgCisgIAl9CisgIH0KKyAgCisKKyAgZnVuY3Rpb24gYXNz
ZXJ0RXF1YWxzQ29sbGVjdGlvbkF1dG9DYXNlKGNvbnRleHQsIGRlc2NyLCBleHBlY3RlZCwgYWN0
dWFsKSB7CisgICAgLy8KKyAgICAvLyAgaWYgdGhleSBhcmVuJ3QgdGhlIHNhbWUgc2l6ZSwgdGhl
eSBhcmVuJ3QgZXF1YWwKKyAgICBhc3NlcnRFcXVhbHMoZGVzY3IsIGV4cGVjdGVkLmxlbmd0aCwg
YWN0dWFsLmxlbmd0aCk7CisgICAgCisgICAgLy8KKyAgICAvLyAgaWYgdGhlcmUgbGVuZ3RoIGlz
IHRoZSBzYW1lLCB0aGVuIGV2ZXJ5IGVudHJ5IGluIHRoZSBleHBlY3RlZCBsaXN0CisgICAgLy8g
ICAgIG11c3QgYXBwZWFyIG9uY2UgYW5kIG9ubHkgb25jZSBpbiB0aGUgYWN0dWFsIGxpc3QKKyAg
ICB2YXIgZXhwZWN0ZWRMZW4gPSBleHBlY3RlZC5sZW5ndGg7CisgICAgdmFyIGV4cGVjdGVkVmFs
dWU7CisgICAgdmFyIGFjdHVhbExlbiA9IGFjdHVhbC5sZW5ndGg7CisgICAgdmFyIGk7CisgICAg
dmFyIGo7CisgICAgdmFyIG1hdGNoZXM7CisgICAgZm9yKGkgPSAwOyBpIDwgZXhwZWN0ZWRMZW47
IGkrKykgeworICAgICAgICBtYXRjaGVzID0gMDsKKyAgICAgICAgZXhwZWN0ZWRWYWx1ZSA9IGV4
cGVjdGVkW2ldOworICAgICAgICBmb3IoaiA9IDA7IGogPCBhY3R1YWxMZW47IGorKykgeworICAg
ICAgICAJaWYgKGJ1aWxkZXIuY29udGVudFR5cGUgPT0gInRleHQvaHRtbCIpIHsKKyAgICAgICAg
CQlpZiAoY29udGV4dCA9PSAiYXR0cmlidXRlIikgeworICAgICAgICAJCQlpZiAoZXhwZWN0ZWRW
YWx1ZS50b0xvd2VyQ2FzZSgpID09IGFjdHVhbFtqXS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAg
IAkJCQltYXRjaGVzKys7CisgICAgICAgIAkJCX0KKyAgICAgICAgCQl9IGVsc2UgeworICAgICAg
ICAJCQlpZiAoZXhwZWN0ZWRWYWx1ZS50b1VwcGVyQ2FzZSgpID09IGFjdHVhbFtqXSkgeworICAg
ICAgICAJCQkJbWF0Y2hlcysrOworICAgICAgICAJCQl9CisgICAgICAgIAkJfQorICAgICAgICAJ
fSBlbHNlIHsKKyAgICAgICAgICAgIAlpZihleHBlY3RlZFZhbHVlID09IGFjdHVhbFtqXSkgewor
ICAgICAgICAgICAgICAgIAltYXRjaGVzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmKG1hdGNoZXMgPT0gMCkgeworICAgICAgICAgICAg
YXNzZXJ0KGRlc2NyICsgIjogTm8gbWF0Y2ggZm91bmQgZm9yICIgKyBleHBlY3RlZFZhbHVlLGZh
bHNlKTsKKyAgICAgICAgfQorICAgICAgICBpZihtYXRjaGVzID4gMSkgeworICAgICAgICAgICAg
YXNzZXJ0KGRlc2NyICsgIjogTXVsdGlwbGUgbWF0Y2hlcyBmb3VuZCBmb3IgIiArIGV4cGVjdGVk
VmFsdWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGFzc2Vy
dEVxdWFsc0NvbGxlY3Rpb24oZGVzY3IsIGV4cGVjdGVkLCBhY3R1YWwpIHsKKyAgICAvLworICAg
IC8vICBpZiB0aGV5IGFyZW4ndCB0aGUgc2FtZSBzaXplLCB0aGV5IGFyZW4ndCBlcXVhbAorICAg
IGFzc2VydEVxdWFscyhkZXNjciwgZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWwubGVuZ3RoKTsKKyAg
ICAvLworICAgIC8vICBpZiB0aGVyZSBsZW5ndGggaXMgdGhlIHNhbWUsIHRoZW4gZXZlcnkgZW50
cnkgaW4gdGhlIGV4cGVjdGVkIGxpc3QKKyAgICAvLyAgICAgbXVzdCBhcHBlYXIgb25jZSBhbmQg
b25seSBvbmNlIGluIHRoZSBhY3R1YWwgbGlzdAorICAgIHZhciBleHBlY3RlZExlbiA9IGV4cGVj
dGVkLmxlbmd0aDsKKyAgICB2YXIgZXhwZWN0ZWRWYWx1ZTsKKyAgICB2YXIgYWN0dWFsTGVuID0g
YWN0dWFsLmxlbmd0aDsKKyAgICB2YXIgaTsKKyAgICB2YXIgajsKKyAgICB2YXIgbWF0Y2hlczsK
KyAgICBmb3IoaSA9IDA7IGkgPCBleHBlY3RlZExlbjsgaSsrKSB7CisgICAgICAgIG1hdGNoZXMg
PSAwOworICAgICAgICBleHBlY3RlZFZhbHVlID0gZXhwZWN0ZWRbaV07CisgICAgICAgIGZvcihq
ID0gMDsgaiA8IGFjdHVhbExlbjsgaisrKSB7CisgICAgICAgICAgICBpZihleHBlY3RlZFZhbHVl
ID09IGFjdHVhbFtqXSkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZihtYXRjaGVzID09IDApIHsKKyAgICAgICAgICAgIGFz
c2VydChkZXNjciArICI6IE5vIG1hdGNoIGZvdW5kIGZvciAiICsgZXhwZWN0ZWRWYWx1ZSxmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYobWF0Y2hlcyA+IDEpIHsKKyAgICAgICAgICAgIGFz
c2VydChkZXNjciArICI6IE11bHRpcGxlIG1hdGNoZXMgZm91bmQgZm9yICIgKyBleHBlY3RlZFZh
bHVlLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgIH0KKworCisgIGZ1bmN0aW9uIGFzc2Vy
dEVxdWFsc0xpc3RBdXRvQ2FzZShjb250ZXh0LCBkZXNjciwgZXhwZWN0ZWQsIGFjdHVhbCkgewor
CXZhciBtaW5MZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7CisJaWYgKGFjdHVhbC5sZW5ndGggPCBt
aW5MZW5ndGgpIHsKKwkgICAgbWluTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDsKKwl9CisgICAgLy8K
KyAgICBmb3IodmFyIGkgPSAwOyBpIDwgbWluTGVuZ3RoOyBpKyspIHsKKwkJYXNzZXJ0RXF1YWxz
QXV0b0Nhc2UoY29udGV4dCwgZGVzY3IsIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pOworICAgIH0K
KyAgICAvLworICAgIC8vICBpZiB0aGV5IGFyZW4ndCB0aGUgc2FtZSBzaXplLCB0aGV5IGFyZW4n
dCBlcXVhbAorICAgIGFzc2VydEVxdWFscyhkZXNjciwgZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWwu
bGVuZ3RoKTsKKyAgfQorCisKKyAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzTGlzdChkZXNjciwgZXhw
ZWN0ZWQsIGFjdHVhbCkgeworCXZhciBtaW5MZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7CisJaWYg
KGFjdHVhbC5sZW5ndGggPCBtaW5MZW5ndGgpIHsKKwkgICAgbWluTGVuZ3RoID0gYWN0dWFsLmxl
bmd0aDsKKwl9CisgICAgLy8KKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgbWluTGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYoZXhwZWN0ZWRbaV0gIT0gYWN0dWFsW2ldKSB7CisJCQlhc3NlcnRFcXVh
bHMoZGVzY3IsIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pOworICAgICAgICB9CisgICAgfQorICAg
IC8vCisgICAgLy8gIGlmIHRoZXkgYXJlbid0IHRoZSBzYW1lIHNpemUsIHRoZXkgYXJlbid0IGVx
dWFsCisgICAgYXNzZXJ0RXF1YWxzKGRlc2NyLCBleHBlY3RlZC5sZW5ndGgsIGFjdHVhbC5sZW5n
dGgpOworICB9CisKKyAgZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VPZihkZXNjciwgdHlwZSwgb2Jq
KSB7CisgICAgaWYodHlwZSA9PSAiQXR0ciIpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGRlc2Ny
LDIsb2JqLm5vZGVUeXBlKTsKKyAgICAgICAgdmFyIHNwZWNkID0gb2JqLnNwZWNpZmllZDsKKyAg
ICB9CisgIH0KKworICBmdW5jdGlvbiBhc3NlcnRTYW1lKGRlc2NyLCBleHBlY3RlZCwgYWN0dWFs
KSB7CisgICAgaWYoZXhwZWN0ZWQgIT0gYWN0dWFsKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhk
ZXNjciwgZXhwZWN0ZWQubm9kZVR5cGUsIGFjdHVhbC5ub2RlVHlwZSk7CisgICAgICAgIGFzc2Vy
dEVxdWFscyhkZXNjciwgZXhwZWN0ZWQubm9kZVZhbHVlLCBhY3R1YWwubm9kZVZhbHVlKTsKKyAg
ICB9CisgIH0KKworICBmdW5jdGlvbiBhc3NlcnRVUklFcXVhbHMoYXNzZXJ0SUQsIHNjaGVtZSwg
cGF0aCwgaG9zdCwgZmlsZSwgbmFtZSwgcXVlcnksIGZyYWdtZW50LCBpc0Fic29sdXRlLCBhY3R1
YWwpIHsKKyAgICAvLworICAgIC8vICBVUkkgbXVzdCBiZSBub24tbnVsbAorICAgIGFzc2VydE5v
dE51bGwoYXNzZXJ0SUQsIGFjdHVhbCk7CisKKyAgICB2YXIgdXJpID0gYWN0dWFsOworCisgICAg
dmFyIGxhc3RQb3VuZCA9IGFjdHVhbC5sYXN0SW5kZXhPZigiIyIpOworICAgIHZhciBhY3R1YWxG
cmFnbWVudCA9ICIiOworICAgIGlmKGxhc3RQb3VuZCAhPSAtMSkgeworICAgICAgICAvLworICAg
ICAgICAvLyAgIHN1YnN0cmluZyBiZWZvcmUgcG91bmQKKyAgICAgICAgLy8KKyAgICAgICAgdXJp
ID0gYWN0dWFsLnN1YnN0cmluZygwLGxhc3RQb3VuZCk7CisgICAgICAgIGFjdHVhbEZyYWdtZW50
ID0gYWN0dWFsLnN1YnN0cmluZyhsYXN0UG91bmQrMSk7CisgICAgfQorICAgIGlmKGZyYWdtZW50
ICE9IG51bGwpIGFzc2VydEVxdWFscyhhc3NlcnRJRCxmcmFnbWVudCwgYWN0dWFsRnJhZ21lbnQp
OworCisgICAgdmFyIGxhc3RRdWVzdGlvbiA9IHVyaS5sYXN0SW5kZXhPZigiPyIpOworICAgIHZh
ciBhY3R1YWxRdWVyeSA9ICIiOworICAgIGlmKGxhc3RRdWVzdGlvbiAhPSAtMSkgeworICAgICAg
ICAvLworICAgICAgICAvLyAgIHN1YnN0cmluZyBiZWZvcmUgcG91bmQKKyAgICAgICAgLy8KKyAg
ICAgICAgdXJpID0gYWN0dWFsLnN1YnN0cmluZygwLGxhc3RRdWVzdGlvbik7CisgICAgICAgIGFj
dHVhbFF1ZXJ5ID0gYWN0dWFsLnN1YnN0cmluZyhsYXN0UXVlc3Rpb24rMSk7CisgICAgfQorICAg
IGlmKHF1ZXJ5ICE9IG51bGwpIGFzc2VydEVxdWFscyhhc3NlcnRJRCwgcXVlcnksIGFjdHVhbFF1
ZXJ5KTsKKworICAgIHZhciBmaXJzdENvbG9uID0gdXJpLmluZGV4T2YoIjoiKTsKKyAgICB2YXIg
Zmlyc3RTbGFzaCA9IHVyaS5pbmRleE9mKCIvIik7CisgICAgdmFyIGFjdHVhbFBhdGggPSB1cmk7
CisgICAgdmFyIGFjdHVhbFNjaGVtZSA9ICIiOworICAgIGlmKGZpcnN0Q29sb24gIT0gLTEgJiYg
Zmlyc3RDb2xvbiA8IGZpcnN0U2xhc2gpIHsKKyAgICAgICAgYWN0dWFsU2NoZW1lID0gdXJpLnN1
YnN0cmluZygwLGZpcnN0Q29sb24pOworICAgICAgICBhY3R1YWxQYXRoID0gdXJpLnN1YnN0cmlu
ZyhmaXJzdENvbG9uICsgMSk7CisgICAgfQorCisgICAgaWYoc2NoZW1lICE9IG51bGwpIHsKKyAg
ICAgICAgYXNzZXJ0RXF1YWxzKGFzc2VydElELCBzY2hlbWUsIGFjdHVhbFNjaGVtZSk7CisgICAg
fQorCisgICAgaWYocGF0aCAhPSBudWxsKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhhc3NlcnRJ
RCwgcGF0aCwgYWN0dWFsUGF0aCk7CisgICAgfQorCisgICAgaWYoaG9zdCAhPSBudWxsKSB7Cisg
ICAgICAgIHZhciBhY3R1YWxIb3N0ID0gIiI7CisgICAgICAgIGlmKGFjdHVhbFBhdGguc3Vic3Ry
aW5nKDAsMikgPT0gIi8vIikgeworICAgICAgICAgICAgdmFyIHRlcm1TbGFzaCA9IGFjdHVhbFBh
dGguc3Vic3RyaW5nKDIpLmluZGV4T2YoIi8iKSArIDI7CisgICAgICAgICAgICBhY3R1YWxIb3N0
ID0gYWN0dWFsUGF0aC5zdWJzdHJpbmcoMCx0ZXJtU2xhc2gpOworICAgICAgICB9CisgICAgICAg
IGFzc2VydEVxdWFscyhhc3NlcnRJRCwgaG9zdCwgYWN0dWFsSG9zdCk7CisgICAgfQorCisgICAg
aWYoZmlsZSAhPSBudWxsIHx8IG5hbWUgIT0gbnVsbCkgeworICAgICAgICB2YXIgYWN0dWFsRmls
ZSA9IGFjdHVhbFBhdGg7CisgICAgICAgIHZhciBmaW5hbFNsYXNoID0gYWN0dWFsUGF0aC5sYXN0
SW5kZXhPZigiLyIpOworICAgICAgICBpZihmaW5hbFNsYXNoICE9IC0xKSB7CisgICAgICAgICAg
ICBhY3R1YWxGaWxlID0gYWN0dWFsUGF0aC5zdWJzdHJpbmcoZmluYWxTbGFzaCsxKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVh
bHMoYXNzZXJ0SUQsIGZpbGUsIGFjdHVhbEZpbGUpOworICAgICAgICB9CisgICAgICAgIGlmIChu
YW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBhY3R1YWxOYW1lID0gYWN0dWFsRmlsZTsK
KyAgICAgICAgICAgIHZhciBmaW5hbERvdCA9IGFjdHVhbEZpbGUubGFzdEluZGV4T2YoIi4iKTsK
KyAgICAgICAgICAgIGlmIChmaW5hbERvdCAhPSAtMSkgeworICAgICAgICAgICAgICAgIGFjdHVh
bE5hbWUgPSBhY3R1YWxOYW1lLnN1YnN0cmluZygwLCBmaW5hbERvdCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoYXNzZXJ0SUQsIG5hbWUsIGFjdHVhbE5hbWUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYoaXNBYnNvbHV0ZSAhPSBudWxsKSB7CisgICAgICAg
IGFzc2VydEVxdWFscyhhc3NlcnRJRCwgaXNBYnNvbHV0ZSwgYWN0dWFsUGF0aC5zdWJzdHJpbmco
MCwxKSA9PSAiLyIpOworICAgIH0KKyAgfQorCisKKy8vIHNpemUoKSB1c2VkIGJ5IGFzc2VydFNp
emUgZWxlbWVudAorZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKQoreworICByZXR1cm4gY29sbGVj
dGlvbi5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIHNhbWUoZXhwZWN0ZWQsIGFjdHVhbCkKK3sKKyAg
cmV0dXJuIGV4cGVjdGVkID09PSBhY3R1YWw7Cit9CisKK2Z1bmN0aW9uIGdldFN1ZmZpeChjb250
ZW50VHlwZSkgeworICAgICAgICByZXR1cm4gIi5zdmciOworfQorCitmdW5jdGlvbiBlcXVhbHNB
dXRvQ2FzZShjb250ZXh0LCBleHBlY3RlZCwgYWN0dWFsKSB7CisJaWYgKGJ1aWxkZXIuY29udGVu
dFR5cGUgPT0gInRleHQvaHRtbCIpIHsKKwkJaWYgKGNvbnRleHQgPT0gImF0dHJpYnV0ZSIpIHsK
KwkJCXJldHVybiBleHBlY3RlZC50b0xvd2VyQ2FzZSgpID09IGFjdHVhbDsKKwkJfQorCQlyZXR1
cm4gZXhwZWN0ZWQudG9VcHBlckNhc2UoKSA9PSBhY3R1YWw7CisJfQorCXJldHVybiBleHBlY3Rl
ZCA9PSBhY3R1YWw7Cit9CisKKworZnVuY3Rpb24gY3JlYXRlVGVtcFVSSShzY2hlbWUpIHsKKyAg
IGlmIChzY2hlbWUgPT0gImh0dHAiKSB7CisgICAJICByZXR1cm4gImh0dHA6Ly9sb2NhbGhvc3Q6
ODA4MC93ZWJkYXYvdG1wIiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMCkgKyAi
LnhtbCI7CisgICB9CisgICByZXR1cm4gImZpbGU6Ly8vdG1wL2RvbXRzIiArIE1hdGguZmxvb3Io
TWF0aC5yYW5kb20oKSAqIDEwMDAwMCkgKyAiLnhtbCI7Cit9CisKKworZnVuY3Rpb24gRXZlbnRN
b25pdG9yKCkgeworICB0aGlzLmF0RXZlbnRzID0gbmV3IEFycmF5KCk7CisgIHRoaXMuYnViYmxl
ZEV2ZW50cyA9IG5ldyBBcnJheSgpOworICB0aGlzLmNhcHR1cmVkRXZlbnRzID0gbmV3IEFycmF5
KCk7CisgIHRoaXMuYWxsRXZlbnRzID0gbmV3IEFycmF5KCk7Cit9CisKK0V2ZW50TW9uaXRvci5w
cm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldnQpIHsKKyAgICBzd2l0Y2goZXZ0LmV2
ZW50UGhhc2UpIHsKKyAgICAgICBjYXNlIDE6CisgICAgICAgbW9uaXRvci5jYXB0dXJlZEV2ZW50
c1ttb25pdG9yLmNhcHR1cmVkRXZlbnRzLmxlbmd0aF0gPSBldnQ7CisgICAgICAgYnJlYWs7Cisg
ICAgICAgCisgICAgICAgY2FzZSAyOgorICAgICAgIG1vbml0b3IuYXRFdmVudHNbbW9uaXRvci5h
dEV2ZW50cy5sZW5ndGhdID0gZXZ0OworICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSAzOgor
ICAgICAgIG1vbml0b3IuYnViYmxlZEV2ZW50c1ttb25pdG9yLmJ1YmJsZWRFdmVudHMubGVuZ3Ro
XSA9IGV2dDsKKyAgICAgICBicmVhazsKKyAgICB9CisgICAgbW9uaXRvci5hbGxFdmVudHNbbW9u
aXRvci5hbGxFdmVudHMubGVuZ3RoXSA9IGV2dDsKK30KKworZnVuY3Rpb24gRE9NRXJyb3JJbXBs
KGVycikgeworICB0aGlzLnNldmVyaXR5ID0gZXJyLnNldmVyaXR5OworICB0aGlzLm1lc3NhZ2Ug
PSBlcnIubWVzc2FnZTsKKyAgdGhpcy50eXBlID0gZXJyLnR5cGU7CisgIHRoaXMucmVsYXRlZEV4
Y2VwdGlvbiA9IGVyci5yZWxhdGVkRXhjZXB0aW9uOworICB0aGlzLnJlbGF0ZWREYXRhID0gZXJy
LnJlbGF0ZWREYXRhOworICB0aGlzLmxvY2F0aW9uID0gZXJyLmxvY2F0aW9uOworfQorCisKKwor
ZnVuY3Rpb24gRE9NRXJyb3JNb25pdG9yKCkgeworICB0aGlzLmFsbEVycm9ycyA9IG5ldyBBcnJh
eSgpOworfQorCitET01FcnJvck1vbml0b3IucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rp
b24oZXJyKSB7CisgICAgZXJyb3JNb25pdG9yLmFsbEVycm9yc1tlcnJvck1vbml0b3IuYWxsRXJy
b3JzLmxlbmd0aF0gPSBuZXcgRE9NRXJyb3JJbXBsKGVycik7Cit9CisKK0RPTUVycm9yTW9uaXRv
ci5wcm90b3R5cGUuYXNzZXJ0TG93ZXJTZXZlcml0eSA9IGZ1bmN0aW9uKGlkLCBzZXZlcml0eSkg
eworICAgIHZhciBpOworICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFsbEVycm9ycy5sZW5ndGg7
IGkrKykgeworICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnNbaV0uc2V2ZXJpdHkgPj0gc2V2ZXJp
dHkpIHsKKyAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGlkLCBzZXZlcml0eSAtIDEsIHRoaXMuYWxs
RXJyb3JzW2ldLnNldmVyaXR5KTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gVXNl
ckRhdGFOb3RpZmljYXRpb24ob3BlcmF0aW9uLCBrZXksIGRhdGEsIHNyYywgZHN0KSB7CisgICAg
dGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgdGhpcy5rZXkgPSBrZXk7CisgICAgdGhp
cy5kYXRhID0gZGF0YTsKKyAgICB0aGlzLnNyYyA9IHNyYzsKKyAgICB0aGlzLmRzdCA9IGRzdDsK
K30KKworZnVuY3Rpb24gVXNlckRhdGFNb25pdG9yKCkgeworCXRoaXMuYWxsTm90aWZpY2F0aW9u
cyA9IG5ldyBBcnJheSgpOworfQorCitVc2VyRGF0YU1vbml0b3IucHJvdG90eXBlLmhhbmRsZSA9
IGZ1bmN0aW9uKG9wZXJhdGlvbiwga2V5LCBkYXRhLCBzcmMsIGRzdCkgeworICAgIHVzZXJEYXRh
TW9uaXRvci5hbGxOb3RpZmljYXRpb25zW3VzZXJEYXRhTW9uaXRvci5hbGxOb3RpZmljYXRpb25z
Lmxlbmd0aF0gPQorICAgICAgICAgbmV3IFVzZXJEYXRhTm90aWZpY2F0aW9uKG9wZXJhdGlvbiwg
a2V5LCBkYXRhLCBzcmMsIGRzdCk7Cit9CisKKworZnVuY3Rpb24gdG9Mb3dlckFycmF5KHNyYykg
eworICAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5KCk7CisgICB2YXIgaTsKKyAgIGZvciAoaSA9
IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHsKKyAgICAgIG5ld0FycmF5W2ldID0gc3JjW2ldLnRv
TG93ZXJDYXNlKCk7CisgICB9CisgICByZXR1cm4gbmV3QXJyYXk7Cit9CisKKworCitmdW5jdGlv
biBTVkdCdWlsZGVyKCkgeworICAgIHRoaXMuY29udGVudFR5cGUgPSAiaW1hZ2Uvc3ZnK3htbCI7
CisgICAgdGhpcy5zdXBwb3J0ZWRDb250ZW50VHlwZXMgPSBbICJpbWFnZS9zdmcreG1sIiBdOwor
CisgICAgdGhpcy5zdXBwb3J0c0FzeW5jQ2hhbmdlID0gZmFsc2U7CisgICAgdGhpcy5hc3luYyA9
IGZhbHNlOworICAgIHRoaXMuZml4ZWRBdHRyaWJ1dGVOYW1lcyA9IFsKKyAgICAgICAgInZhbGlk
YXRpbmciLCAgImV4cGFuZEVudGl0eVJlZmVyZW5jZXMiLCAiY29hbGVzY2luZyIsIAorICAgICAg
ICAic2lnbmVkIiwgImhhc051bGxTdHJpbmciLCAiaWdub3JpbmdFbGVtZW50Q29udGVudFdoaXRl
c3BhY2UiLCAibmFtZXNwYWNlQXdhcmUiLCAiaWdub3JpbmdDb21tZW50cyIsICJzY2hlbWFWYWxp
ZGF0aW5nIl07CisKKyAgICB0aGlzLmZpeGVkQXR0cmlidXRlVmFsdWVzID0gW2ZhbHNlLCAgdHJ1
ZSwgZmFsc2UsIHRydWUsIHRydWUgLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlIF07CisgICAg
dGhpcy5jb25maWd1cmFibGVBdHRyaWJ1dGVOYW1lcyA9IFsgXTsKKyAgICB0aGlzLmNvbmZpZ3Vy
YWJsZUF0dHJpYnV0ZVZhbHVlcyA9IFsgXTsKKyAgICB0aGlzLmluaXRpYWxpemF0aW9uRXJyb3Ig
PSBudWxsOworICAgIHRoaXMuaW5pdGlhbGl6YXRpb25GYXRhbEVycm9yID0gbnVsbDsKKyAgICB0
aGlzLnNraXBJbmNvbXBhdGlibGVUZXN0cyA9IHRydWU7CisgICAgdGhpcy5kb2N1bWVudFVSTHMg
PSBuZXcgQXJyYXkoKTsKKyAgICB0aGlzLmRvY3VtZW50VmFybmFtZXMgPSBuZXcgQXJyYXkoKTsK
K30KKworU1ZHQnVpbGRlci5wcm90b3R5cGUuaGFzRmVhdHVyZSA9IGZ1bmN0aW9uKGZlYXR1cmUs
IHZlcnNpb24pIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVy
ZShmZWF0dXJlLCB2ZXJzaW9uKTsKK30KKworU1ZHQnVpbGRlci5wcm90b3R5cGUuZ2V0SW1wbGVt
ZW50YXRpb24gPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9u
OworfQorCitTVkdCdWlsZGVyLnByb3RvdHlwZS5wcmVsb2FkID0gZnVuY3Rpb24oZnJhbWUsIHZh
cm5hbWUsIHVybCkgeworICB2YXIgaTsKKyAgdGhpcy5kb2N1bWVudFZhcm5hbWVzW3RoaXMuZG9j
dW1lbnRWYXJuYW1lcy5sZW5ndGhdID0gdmFybmFtZTsKKyAgdGhpcy5kb2N1bWVudFVSTHNbdGhp
cy5kb2N1bWVudFVSTHMubGVuZ3RoXSA9IHVybDsKKyAgaWYgKHRoaXMuZG9jdW1lbnRVUkxzLmxl
bmd0aCA+IDEpIHsKKyAgICAgLy8KKyAgICAgLy8gICBpZiBhbGwgdGhlIHVybHMgYXJlIG5vdCB0
aGUgc2FtZQorICAgICAvLworICAgICBmb3IgKGkgPSAxOyBpIDwgdGhpcy5kb2N1bWVudFVSTHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgIGlmICh0aGlzLmRvY3VtZW50VVJMc1tpXSAhPSB0aGlz
LmRvY3VtZW50VVJMc1swXSkgeworICAgICAgICAgICAgIHRocm93ICJUZXN0cyB3aXRoIG11bHRp
cGxlIGxvYWRzIG9mIGRpZmZlcmVudCBkb2N1bWVudHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9y
dGVkIjsKKyAgICAgICAgIH0KKyAgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitTVkdCdWls
ZGVyLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbihzcmNOb2RlLCBkb2MpIHsKKyAgIHZh
ciBjbG9uZSA9IG51bGw7CisgICBzd2l0Y2goc3JjTm9kZS5ub2RlVHlwZSkgeworICAgICAgLy8K
KyAgICAgIC8vICBlbGVtZW50CisgICAgICBjYXNlIDE6CisgICAgICBjbG9uZSA9IGRvYy5jcmVh
dGVFbGVtZW50TlMoc3JjTm9kZS5uYW1lc3BhY2VVUkksIHNyY05vZGUubm9kZU5hbWUpOworICAg
ICAgdmFyIGF0dHJzID0gc3JjTm9kZS5hdHRyaWJ1dGVzOworICAgICAgZm9yKHZhciBpID0gMDsg
aSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIHNyY0F0dHIgPSBhdHRycy5p
dGVtKGkpOworICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZU5TKHNyY0F0dHIubmFtZXNwYWNl
VVJJLCBzcmNBdHRyLm5vZGVOYW1lLCBzcmNBdHRyLm5vZGVWYWx1ZSk7CisgICAgICB9CisgICAg
ICB2YXIgc3JjQ2hpbGQgPSBzcmNOb2RlLmZpcnN0Q2hpbGQ7CisgICAgICB3aGlsZShzcmNDaGls
ZCAhPSBudWxsKSB7CisgICAgICAgICB2YXIgY2xvbmVDaGlsZCA9IHRoaXMuY2xvbmVOb2RlKHNy
Y0NoaWxkLCBkb2MpOworICAgICAgICAgaWYgKGNsb25lQ2hpbGQgIT0gbnVsbCkgeworICAgICAg
ICAgICAgIGNsb25lLmFwcGVuZENoaWxkKGNsb25lQ2hpbGQpOworICAgICAgICAgfQorICAgICAg
ICAgc3JjQ2hpbGQgPSBzcmNDaGlsZC5uZXh0U2libGluZzsKKyAgICAgIH0KKyAgICAgIGJyZWFr
OworICAgICAgCisgICAgICBjYXNlIDM6CisgICAgICBjbG9uZSA9IGRvYy5jcmVhdGVUZXh0Tm9k
ZShzcmNOb2RlLm5vZGVWYWx1ZSk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgICAgY2FzZSA0
OgorICAgICAgY2xvbmUgPSBkb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKHNyY05vZGUubm9kZVZhbHVl
KTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgICBjYXNlIDU6CisgICAgICBjbG9uZSA9IGRv
Yy5jcmVhdGVFbnRpdHlSZWZlcmVuY2Uoc3JjTm9kZS5ub2RlTmFtZSk7CisgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIAorICAgICAgY2FzZSA3OgorICAgICAgY2xvbmUgPSBkb2MuY3Jl
YXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHNyY05vZGUudGFyZ2V0LCBzcmNOb2RlLmRhdGEpOwor
ICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGNhc2UgODoKKyAgICAgIGNsb25lID0gZG9jLmNy
ZWF0ZUNvbW1lbnQoc3JjTm9kZS5ub2RlVmFsdWUpOworICAgICAgYnJlYWs7CisgICB9CisgICBy
ZXR1cm4gY2xvbmU7CisgICAgICAKK30KKworCitTVkdCdWlsZGVyLnByb3RvdHlwZS5sb2FkID0g
ZnVuY3Rpb24oZnJhbWUsIHZhcm5hbWUsIHVybCkgeworICBpZiAodGhpcy5kb2N1bWVudFZhcm5h
bWVzWzBdID09IHZhcm5hbWUpIHsKKyAgCXJldHVybiBkb2N1bWVudDsKKyAgfQorICAvLworICAv
LworICAvLyAgbm90IGEgcGVyZmVjdCB3YXkgdG8gZG8gdGhpcworICAvLyAgICBEb2N1bWVudC5j
bG9uZU5vZGUgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1dCBleGlzdHMgaW4gTDEKKyAg
Ly8gICAgICAgYW5kIGltcGxlbWVudGVkIGluIElFLiAgVGhlIGFsdGVybmF0aXZlIGJydXRlIGZv
cmNlIGNvcHkKKyAgLy8gICAgICAgb25seSB3b3JrcyBpbiBMMiBvciBoaWdoZXIgaW1wbGVtZW50
YXRpb25zIGFuZCBjYW4ndCBjb3B5CisgIC8vICAgICAgIGVudGl0eSBhbmQgbm90YXRpb24gZGVm
aW5pdGlvbnMsIGV0Yy4KKyAgdmFyIGNsb25lID0gbnVsbDsKKyAgdHJ5IHsKKyAgICAgIGNsb25l
ID0gZG9jdW1lbnQuY2xvbmVOb2RlKHRydWUpOworICB9IGNhdGNoKGV4KSB7CisgIH0KKyAgaWYg
KGNsb25lID09IG51bGwpIHsKKyAgICAgIGNsb25lID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24u
Y3JlYXRlRG9jdW1lbnQoCisgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVz
cGFjZVVSSSwKKyAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUsCisg
ICAgICAgICAgbnVsbCk7CisgICAgICAvLworICAgICAgLy8gICBXb3JrLWFyb3VuZCBzaW5jZQor
ICAgICAgLy8gICBTYWZhcmkgZG9lcyBub3QgY3JlYXRlIGRvY3VtZW50IGVsZW1lbnQgCisgICAg
ICAvLyAgICAgIGNyZWF0ZSBkb2N1bWVudC4gICAgICAKKyAgICAgIGlmIChjbG9uZS5kb2N1bWVu
dEVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgICAgICBjbG9uZS5hcHBlbmRDaGlsZChjbG9uZS5j
cmVhdGVFbGVtZW50TlMoCisgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5u
YW1lc3BhY2VVUkksIAorICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUpKTsKKyAgICAgIH0KKyAgICAgIHZhciBhdHRycyA9IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5hdHRyaWJ1dGVzOworICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgdmFyIHNyY0F0dHIgPSBhdHRycy5pdGVtKGkpOworICAgICAgICAg
IGNsb25lLmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygKKyAgICAgICAgICAgICBzcmNB
dHRyLm5hbWVzcGFjZVVSSSwgc3JjQXR0ci5ub2RlTmFtZSwgc3JjQXR0ci5ub2RlVmFsdWUpOwor
ICAgICAgfQorCisgICAgICB2YXIgc3JjTm9kZSA9IGRvY3VtZW50LmZpcnN0Q2hpbGQ7CisgICAg
ICB3aGlsZShzcmNOb2RlICE9IG51bGwgJiYgc3JjTm9kZS5ub2RlVHlwZSAhPSAxKSB7CisgICAg
ICAgICAgaWYgKHNyY05vZGUubm9kZVR5cGUgIT0gMTApIHsKKyAgICAgICAgICAJIHZhciBjbG9u
ZU5vZGUgPSB0aGlzLmNsb25lTm9kZShzcmNOb2RlLCBjbG9uZSk7CisgICAgICAgICAgICAgY2xv
bmUuaW5zZXJ0QmVmb3JlKGNsb25lTm9kZSwgY2xvbmUuZG9jdW1lbnRFbGVtZW50KTsKKyAgICAg
ICAgICAgfQorICAgICAgICAgICBzcmNOb2RlID0gc3JjTm9kZS5uZXh0U2libGluZzsgCisgICAg
ICB9CisgICAgICBzcmNOb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5leHRTaWJsaW5n
OworICAgICAgd2hpbGUoc3JjTm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgdmFyIGNsb25lTm9k
ZSA9IHRoaXMuY2xvbmVOb2RlKHNyY05vZGUsIGNsb25lKTsKKyAgICAgICAgICBjbG9uZS5hcHBl
bmRDaGlsZChjbG9uZU5vZGUpOworICAgICAgICAgIHNyY05vZGUgPSBzcmNOb2RlLm5leHRTaWJs
aW5nOworICAgICAgfQorICAgICAgc3JjTm9kZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5m
aXJzdENoaWxkOworICAgICAgd2hpbGUoc3JjTm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgdmFy
IGNsb25lTm9kZSA9IHRoaXMuY2xvbmVOb2RlKHNyY05vZGUsIGNsb25lKTsKKyAgICAgICAgICBp
ZiAoY2xvbmVOb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICBjbG9uZS5kb2N1bWVudEVsZW1l
bnQuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc3JjTm9k
ZSA9IHNyY05vZGUubmV4dFNpYmxpbmc7CisgICAgICB9CisgIH0KKyAgcmV0dXJuIGNsb25lOwor
fQorCitTVkdCdWlsZGVyLnByb3RvdHlwZS5nZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSA9IGZ1
bmN0aW9uKGF0dHIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZml4ZWRBdHRyaWJ1
dGVOYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAodGhpcy5maXhlZEF0dHJpYnV0ZU5h
bWVzW2ldID09IGF0dHIpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpeGVkQXR0cmlidXRl
VmFsdWVzW2ldOworICAgICAgICB9CisgICAgfQorICAgIHRocm93ICJVbnJlY29nbml6ZWQgaW1w
bGVtZW50YXRpb24gYXR0cmlidXRlOiAiICsgYXR0cjsKK30KKworCitTVkdCdWlsZGVyLnByb3Rv
dHlwZS5zZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFs
dWUpIHsKKyAgICB2YXIgc3VwcG9ydGVkID0gdGhpcy5nZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0
ZShhdHRyaWJ1dGUpOworICAgIGlmIChzdXBwb3J0ZWQgIT0gdmFsdWUpIHsKKyAgICAgICAgdGhp
cy5pbml0aWFsaXphdGlvbkVycm9yID0gIlNWRyBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCAiICsg
YXR0cmlidXRlICsgIj0iICsgdmFsdWU7CisgICAgfQorfQorCitTVkdCdWlsZGVyLnByb3RvdHlw
ZS5jYW5TZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFs
dWUpIHsKKyAgICB2YXIgc3VwcG9ydGVkID0gdGhpcy5nZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0
ZShhdHRyaWJ1dGUpOworICAgIHJldHVybiAoc3VwcG9ydGVkID09IHZhbHVlKTsKK30KKworCisK
KworZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKSB7CisgICAgcmV0dXJuIG5ldyBT
VkdCdWlsZGVyKCk7Cit9CisKK2Z1bmN0aW9uIGNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWls
ZHIsIGV4KSB7CisgICBidWlsZHIuaW5pdGlhbGl6YXRpb25FcnJvciA9IGV4OworICAgYnVpbGRy
LmluaXRpYWxpemF0aW9uRmF0YWxFcnJvciA9IGV4OworfQorCisKK2Z1bmN0aW9uIGNoZWNrRmVh
dHVyZShmZWF0dXJlLCB2ZXJzaW9uKQoreworICBpZiAoIWJ1aWxkZXIuaGFzRmVhdHVyZShmZWF0
dXJlLCB2ZXJzaW9uKSkKKyAgeworICAgIC8vCisgICAgLy8gICBkb24ndCB0aHJvdyBleGNlcHRp
b24gc28gdGhhdCB1c2VycyBjYW4gc2VsZWN0IHRvIGlnbm9yZSB0aGUgcHJlY29uZGl0aW9uCisg
ICAgLy8KKyAgICBidWlsZGVyLmluaXRpYWxpemF0aW9uRXJyb3IgPSAiYnVpbGRlciBkb2VzIG5v
dCBzdXBwb3J0IGZlYXR1cmUgIiArIGZlYXR1cmUgKyAiIHZlcnNpb24gIiArIHZlcnNpb247Cisg
IH0KK30KKworCitmdW5jdGlvbiBjaGFuZ2VDb2xvcihjb2xvcikgeworICAgZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInJlY3QiKS5pdGVtKDApLnNldEF0dHJpYnV0ZSgic3R5bGUiLCAi
ZmlsbDoiICsgY29sb3IpOworfQorCitmdW5jdGlvbiBhZGRNZXNzYWdlKHgsIHksIG1zZykgewor
ICAgdmFyIHRleHRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyIsICJ0ZXh0Iik7CisgICB0ZXh0RWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxs
LCAieCIsIHgpOworICAgdGV4dEVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgInkiLCB5KTsKKyAg
IHRleHRFbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOworICAg
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtKTsgICAKK30KKwor
ZnVuY3Rpb24gY2hlY2tJbml0aWFsaXphdGlvbihidWlsZHIsIHRlc3RuYW1lKSB7CisgICBpZiAo
YnVpbGRyLmluaXRpYWxpemF0aW9uRXJyb3IgIT0gbnVsbCkgeworICAgICAgYWRkTWVzc2FnZSgi
MCIsICIxNjAiLCBidWlsZHIuaW5pdGlhbGl6YXRpb25FcnJvcik7CisgICAgICBjaGFuZ2VDb2xv
cigieWVsbG93Iik7CisgICB9CisgICByZXR1cm4gYnVpbGRyLmluaXRpYWxpemF0aW9uRXJyb3I7
Cit9CisKK2Z1bmN0aW9uIHByZWxvYWQoZG9jUmVmLCB2YXJuYW1lLCBocmVmKSB7CisgICByZXR1
cm4gYnVpbGRlci5wcmVsb2FkKGRvY1JlZiwgdmFybmFtZSwgaHJlZik7Cit9CisKKworZnVuY3Rp
b24gbG9hZChkb2NSZWYsIHZhcm5hbWUsIGhyZWYpIHsKKyAgIHJldHVybiBidWlsZGVyLmxvYWQo
ZG9jUmVmLCB2YXJuYW1lLCBocmVmKTsKK30KKworCitmdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlv
bkF0dHJpYnV0ZShhdHRyKSB7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0SW1wbGVtZW50YXRpb25B
dHRyaWJ1dGUoYXR0cik7Cit9CisKKworZnVuY3Rpb24gc2V0SW1wbGVtZW50YXRpb25BdHRyaWJ1
dGUoYXR0cmlidXRlLCB2YWx1ZSkgeworICAgIGJ1aWxkZXIuc2V0SW1wbGVtZW50YXRpb25BdHRy
aWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVhQYXRoRXZhbHVh
dG9yKGRvYykgeworICAgIHRyeSB7CisgICAgICAgIHJldHVybiBkb2MuZ2V0RmVhdHVyZSgiWFBh
dGgiLCBudWxsKTsKKyAgICB9CisgICAgY2F0Y2goZXgpIHsKKyAgICB9CisgICAgcmV0dXJuIGRv
YzsKK30KKworCitmdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlvbigpIHsKKyAgICByZXR1cm4gYnVp
bGRlci5nZXRJbXBsZW1lbnRhdGlvbigpOworfQorCisKK2Z1bmN0aW9uIGFzc2VydEVxdWFscyhp
ZCwgZXhwZWN0ZWQsIGFjdHVhbCkgeworICAgdmFyIG15QWN0dWFsOworICAgaWYgKGV4cGVjdGVk
ICE9IGFjdHVhbCkgeworICAgICAgIG15QWN0dWFsID0gYWN0dWFsOworICAgICAgIGlmIChhY3R1
YWwgPT0gbnVsbCkgeworICAgICAgICAgIG15QWN0dWFsID0gIm51bGwiOworICAgICAgIH0KKyAg
ICAgICB0aHJvdyBpZCArICI6IGFzc2VydEVxdWFscyBmYWlsZWQsIGFjdHVhbCAiICsgYWN0dWFs
ICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIi4iOyAKKyAgIH0KK30KKworZnVuY3Rpb24g
YXNzZXJ0TnVsbChpZCwgYWN0dWFsKSB7CisgICBpZiAoYWN0dWFsICE9IG51bGwpIHsKKyAgICAg
ICB0aHJvdyBpZCArICI6IGFzc2VydE51bGwgZmFpbGVkLCBhY3R1YWwgIiArIGFjdHVhbDsKKyAg
IH0KK30KKworCitmdW5jdGlvbiBhc3NlcnRUcnVlKGlkLCBhY3R1YWwpIHsKKyAgIGlmICghYWN0
dWFsKSB7CisgICAgICAgdGhyb3cgaWQgKyAiOiBhc3NlcnRUcnVlIGZhaWxlZCI7CisgICB9Cit9
CisKK2Z1bmN0aW9uIGFzc2VydChpZCwgYWN0dWFsKSB7CisgICBpZiAoIWFjdHVhbCkgeworICAg
ICAgIHRocm93IGlkICsgIjogYXNzZXJ0IGZhaWxlZCI7CisgICB9Cit9CisKKworZnVuY3Rpb24g
YXNzZXJ0RmFsc2UoaWQsIGFjdHVhbCkgeworICAgaWYgKGFjdHVhbCkgeworICAgICAgIHRocm93
IGlkICsgIjogYXNzZXJ0RmFsc2UgZmFpbGVkIjsKKyAgIH0KK30KKworZnVuY3Rpb24gYXNzZXJ0
Tm90TnVsbChpZCwgYWN0dWFsKSB7CisgICBpZiAoYWN0dWFsID09IG51bGwpIHsKKyAgICAgICB0
aHJvdyBpZCArICI6IGFzc2VydE5vdE51bGwgZmFpbGVkIjsKKyAgIH0KK30KKworZnVuY3Rpb24g
ZmFpbChpZCkgeworICAgIHRocm93IGlkICsgIjogZmFpbCI7Cit9CisKKworZnVuY3Rpb24gZ2V0
U3VmZml4KGNvbnRlbnRUeXBlKSB7CisgICAgc3dpdGNoKGNvbnRlbnRUeXBlKSB7CisgICAgICAg
IGNhc2UgInRleHQvaHRtbCI6CisgICAgICAgIHJldHVybiAiLmh0bWwiOworCisgICAgICAgIGNh
c2UgImFwcGxpY2F0aW9uL3hodG1sK3htbCI6CisgICAgICAgIHJldHVybiAiLnhodG1sIjsKKwor
ICAgICAgICBjYXNlICJpbWFnZS9zdmcreG1sIjoKKyAgICAgICAgcmV0dXJuICIuc3ZnIjsKKwor
ICAgICAgICBjYXNlICJ0ZXh0L21hdGhtbCI6CisgICAgICAgIHJldHVybiAiLm1tbCI7CisgICAg
fQorICAgIHJldHVybiAiLnhtbCI7Cit9CisKKworZnVuY3Rpb24gZ2V0UmVzb3VyY2VVUkkobmFt
ZSwgc2NoZW1lLCBjb250ZW50VHlwZSkgeworICAgIHZhciBiYXNlID0gZG9jdW1lbnQuZG9jdW1l
bnRVUkk7CisgICAgaWYgKGJhc2UgPT0gbnVsbCkgeworICAgICAgIGJhc2UgPSAiIjsKKyAgICB9
IGVsc2UgeworCSAgIGJhc2UgPSBiYXNlLnN1YnN0cmluZygwLCBiYXNlLmxhc3RJbmRleE9mKCcv
JykgKyAxKSArICJmaWxlcy8iOworICAgIH0KKyAgICByZXR1cm4gYmFzZSArIG5hbWUgKyBnZXRT
dWZmaXgoY29udGVudFR5cGUpOworfQorCisKKy8vCisvLyAgIGludm9rZSB0ZXN0IHNldHVwCisv
Lworc2V0VXBQYWdlKCk7CisKK3RyeSB7CisJcnVuVGVzdCgpOworCWlmIChidWlsZGVyLmluaXRp
YWxpemF0aW9uRXJyb3IgPT0gbnVsbCkgeworCSAgIGNoYW5nZUNvbG9yKCJncmVlbiIpOworCSAg
IGFkZE1lc3NhZ2UoIjAiLCAiMTIwIiwgZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKVswXSArICI6
IFN1Y2Nlc3MiKTsKKwl9IGVsc2UgeworCQlhZGRNZXNzYWdlKCIwIiwgIjEyMCIsIGV4cG9zZVRl
c3RGdW5jdGlvbk5hbWVzKClbMF0pOworCX0KK30gY2F0Y2goZXgpIHsKKwlhZGRNZXNzYWdlKCIw
IiwgIjEyMCIsIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKClbMF0pOworICAgIGNoYW5nZUNvbG9y
KCJyZWQiKTsKKyAgICBhZGRNZXNzYWdlKCIwIiwgIjE0MCIsIGV4KTsgICAgCit9ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvVGV4dF9Ob2Rlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvVGV4dF9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NU
WVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisg
ICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJU
ZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxl
bWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZ
IGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQor
ICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFU
SU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBs
b3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3Jp
cHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAj
RklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQor
ICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQor
ICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBD
REFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAx
Li0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIw
IiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iVGV4dF9Ob2Rlcy5qcyIvPg0KKzxzY3JpcHQg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0K
KyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bv
c2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
MS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0
eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFj
ZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+
UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMi
PjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX2RvY3VtZW50RWxlbWVudC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2IEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAy
MDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0
aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJ
bmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0
cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNv
ZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJy
YW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHly
aWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBu
YW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBh
dGhFeHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudCddOworfQorCit2YXIgZG9jc0xv
YWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAg
IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmln
dXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2Fk
aW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQg
dG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICBy
YWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBz
ZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgewor
ICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhy
b3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVp
bGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1Jl
ZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgewor
ICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0g
cHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAo
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3Io
YnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBv
ZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4K
Ky8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21w
bGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0
aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxv
YWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0
VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAor
ICAgICAgVGVzdCBpZiBYUGF0aEV4cHJlc3Npb24uZXZhbHVhdGUgcmV0dXJucyBub24tbnVsbCBy
ZXN1bHQKKyAgICAgIHVzaW5nIERvY3VtZW50LmRvY3VtZW50RWxlbWVudCBhcyBjb250ZXh0Tm9k
ZS4KKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBD
bGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFeHByZXNzaW9uLWV2YWx1YXRlCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aEV2YWx1YXRvci1jcmVhdGVFeHByZXNzaW9uCisqLworZnVuY3Rpb24gWFBhdGhFeHByZXNz
aW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudCgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlm
KGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9k
b2N1bWVudEVsZW1lbnQiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAgICAgIHZh
ciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAg
IHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciB4cGF0aFJlc3VsdDsKKyAgICAgIHZhciBudWxs
UmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIHhwYXRoRXhwcmVzc2lvbjsKKyAgICAgIHZhciBl
eHByZXNzaW9uID0gIi8iOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAg
IGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9
IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOwor
Y29udGV4dE5vZGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICB4cGF0aEV4cHJlc3Np
b24gPSB4cEV2YWx1YXRvci5jcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sbnVsbE5TUmVzb2x2
ZXIpOworICAgICAgeHBhdGhSZXN1bHQgPSB4cGF0aEV4cHJlc3Npb24uZXZhbHVhdGUoY29udGV4
dE5vZGUsMCxudWxsUmVzdWx0KTsKKyAgICAgIGFzc2VydE5vdE51bGwoIm5vdG51bGwiLHhwYXRo
UmVzdWx0KTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFeHBy
ZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VS
Ui5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUi5zdmcJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9O
QU1FU1BBQ0VfRVJSLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMg
IlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAg
PCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4
YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54
eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0K
KyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBu
b3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5v
dGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2Fy
ZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0K
KyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFF
TEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95
ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93
d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+
DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9OQU1FU1BBQ0VfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cu
dXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9u
PiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RB
VEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAm
ZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRo
IGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3Jl
dGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5G
ZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
WWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisg
Sm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJ
cnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxv
eWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cu
YWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVl
SWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAw
PC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVt
cDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJD
QU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1
NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVt
cDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21w
dXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yQ2FzdDAxLnN2Zwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvckNh
c3QwMS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvckNhc3QwMS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBz
dmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAi
ZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZ
IGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9j
YWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJ
ZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5Rmls
ZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxl
IiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxk
IGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlv
bjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUi
Pg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95
ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAj
RklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQor
ICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQor
ICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBD
REFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAx
Li0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0
PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHNyYz0iWFBhdGhFdmFsdWF0b3JDYXN0MDEuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHht
bG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29t
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJl
dCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAg
ICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERh
bGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlz
IGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11d
Pg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZl
cmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZl
bnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxl
bXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwv
bmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywg
dGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1s
bnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlz
dGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisg
IDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29u
bmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpz
YWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJl
c3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIg
ZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1w
OmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0
cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3Qt
U3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlk
Pg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNw
ZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8v
d3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfSUQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfSUQuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9JRC5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydDb25mb3Jt
YW5jZV9JRCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIg
PSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGlu
ZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLwor
Ly8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25v
dXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRo
ZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24g
aXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBv
ZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0
dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVz
dCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1
aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0g
MDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRo
aXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAg
ICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAiaW50ZXJu
YWxkdGQiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsK
KyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25v
dXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNo
cm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBz
dGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRl
c3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsr
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7
CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIDEuMyBDb25mb3JtYW5jZSAtIENoZWNrIHRo
YXQgdGhlIGVsZW1lbnQgcmV0dXJuZWQgYnkgWFBhdGggaWQoKSBmdW5jdGlvbgorICAgICAgcmV0
dXJucyB0aGUgc2FtZSBlbGVtZW50IGFzIERvY3VtZW50LmdldEVsZW1lbnRCeUlkCisgICAgCisq
IEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNDb25mb3JtYW5jZQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
WFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2
ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0
b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZl
bC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LWl0ZXJhdGVOZXh0CisqLworZnVu
Y3Rpb24gQ29uZm9ybWFuY2VfSUQoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0lu
aXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25mb3JtYW5jZV9JRCIpICE9IG51bGwpIHJldHVybjsK
KyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAg
IHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAg
IHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3Owor
ICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9P
UkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVy
OworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZh
ciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAg
ICB2YXIgZXhwcmVzc2lvbiA9ICJpZCgnY2hpbGQxJykiOworICAgICAgdmFyIHhwYXRoVHlwZSA9
IEFOWV9UWVBFOworICAgICAgdmFyIG91dE5vZGU7CisgICAgICB2YXIgY2hpbGQxRWxlbWVudDsK
KyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMu
ZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAg
IH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgImludGVybmFsZHRkIik7CisgICAg
ICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFs
dWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOwor
b3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVz
b2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIG91dE5vZGUgPSBvdXRyZXN1bHQuaXRl
cmF0ZU5leHQoKTsKKyAgICAgIGNoaWxkMUVsZW1lbnQgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImNo
aWxkMSIpOworICAgICAgYXNzZXJ0U2FtZSgiUzEuMy1Db25mb3JtYW5jZS1JRCIsY2hpbGQxRWxl
bWVudCxvdXROb2RlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgQ29u
Zm9ybWFuY2VfSUQoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9j
cmVhdGVOU1Jlc29sdmVyX2FsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVy
X2FsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAg
S0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09M
SURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4w
MCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAs
MCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUg
MzA0eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzA0OiAiWFBhdGhFdmFs
dWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGw6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9udWxsLnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9p
c1N1cHBvcnRlZF9udWxsLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGwuc3ZnCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElE
QVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0K
KyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBS
b2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVu
dEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxl
bWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVu
dGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2
IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEg
IlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lT
VEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVt
cGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQor
ICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisg
ICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAg
IDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFU
QSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQg
Q0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFU
VExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMg
aXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0i
MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IkNvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGwuanMi
Lz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2
Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxu
czpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+
QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0
aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29t
IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0
aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5
UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNl
bnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+
DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9t
ZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwv
YWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8v
d3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50
IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2Vu
ZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3Ry
ZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4
bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5F
TVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFt
ZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQor
ICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8
L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
WSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9h
ZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0K
KyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1w
bG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFy
eT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
c3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9h
ZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4N
CisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
c3RyaW5nVmFsdWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3N0cmluZ1ZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMTYxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTYxOiAi
WFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAo
MCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAzMjJ4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMjI6ICJzYW1lOiBh
c3NlcnRFcXVhbHMgZmFpbGVkLCBhY3R1YWwgLCBleHBlY3RlZCA1NiwwMDAuIgpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1w
dHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29u
Zm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHkuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eS5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydDb25mb3Jt
YW5jZV9pc1N1cHBvcnRlZF9lbXB0eSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAw
OwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRl
c3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRp
b25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQu
ICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5k
IHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRl
cmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7Cisg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAv
LyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisg
ICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAg
ICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBj
YXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOwor
ICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAg
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFj
aCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4g
ZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAg
IHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9k
eSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsK
KyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0g
J2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgMS4zIENvbmZvcm1hbmNl
IC0gVGhlICJmZWF0dXJlIiBwYXJhbWV0ZXIgaW4gdGhlIAorICAgICAgIk5vZGUuaXNTdXBwb3J0
ZWQoZmVhdHVyZSx2ZXJzaW9uKSIKKyAgICAgIG1ldGhvZCBpcyB0aGUgbmFtZSBvZiB0aGUgZmVh
dHVyZSBhbmQgdGhlIHZlcnNpb24gaXMgdGhlIHZlcnNpb24KKyAgICAgIG51bWJlciBvZiB0aGUg
ZmVhdHVyZSB0byB0ZXN0LiAgWFBhdGggaXMgdGhlIGxlZ2FsIHZhbHVlIGZvciB0aGUKKyAgICAg
IFhQYXRoIG1vZHVsZS4gIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiAidHJ1ZSIuCisgICAgICAK
KyAgICAgIFJldHJpZXZlIHRoZSBET00gZG9jdW1lbnQgb24gd2hpY2ggdGhlCisgICAgICAiaXNT
dXBwb3J0ZWQoZmVhdHVyZSx2ZXJzaW9uKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCAiZmVhdHVy
ZSIKKyAgICAgIGVxdWFsIHRvICJYUGF0aCIgYW5kIHZlcnNpb24gdG8gdGhlIGVtcHR5IHN0cmlu
ZyAiIi4gIFRoZSBtZXRob2QgCisgICAgICBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiAidHJ1ZSIg
aWYgdGhlIGltcGxlbWVudGF0aW9uIGNsYWltcyBzdXBwb3J0IAorICAgICAgZm9yIHNvbWUgdmVy
c2lvbiBmb3IgWFBhdGguCisgICAgCisqIEBhdXRob3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyog
QGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI0NvbmZvcm1hbmNlCisqLworZnVuY3Rpb24g
Q29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHkoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBp
ZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF9l
bXB0eSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHN0YXRlOwor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgc3Rh
dGUgPSBkb2MuaXNTdXBwb3J0ZWQoInhwQVRIIiwiIik7CisgICAgICBhc3NlcnRUcnVlKCJpc1N1
cHBvcnRlZC1YUGF0aC1lbXB0eSIsc3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICBDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eSgpOworfQpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5W
QUxJRF9FWFBSRVNTSU9OX0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9O
X0VSUi5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLnN2ZwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNU
WUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQi
IA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBE
YWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVu
dDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVC
TElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJ
VFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2Ny
aXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qg
c3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBU
WT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAg
aGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0K
KyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEt
LSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9
IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9J
TlZBTElEX0VYUFJFU1NJT05fRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFy
dGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAg
DQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50Mjsg
RGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFz
IDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVt
cD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNv
bSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06
bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBE
aXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5
Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVt
cDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDps
b2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRy
ZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFs
aXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTgwIEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29y
bGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVj
aG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBh
bmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4g
VGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vu
c2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0g
aHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2Fy
ZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rp
b24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhSZXN1bHRfaXRl
cmF0b3JOZXh0X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFJ107Cit9CisKK3ZhciBkb2NzTG9h
ZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAg
cnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1
cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRp
bmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0
byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJh
aXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNl
dFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7Cisg
ICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJv
dyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWls
ZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVm
ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBw
cmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9j
c0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAg
ICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVp
bGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKwor
CisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAK
Ky8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8v
CisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0
ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUK
Ky8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRD
b21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQ
YWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0
ZSBhbiBYUGF0aFJlc3VsdCBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSBYUGF0aFJlc3VsdFR5
cGUgZm9yIAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgp
IGNoZWNraW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuaXRlcmF0b3JOZXh0IHJldHVybnMgdGhl
IG5vZGVzIGluIGRvY3VtZW50IG9yZGVyLAorICAgIGFuZCB0aGF0IHRoZSBjb3JyZWN0IG51bWJl
ciBpcyByZXR1cm5lZC4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoUmVzdWx0LWl0ZXJhdG9yTmV4dAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hw
YXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNS
ZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlh
bGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOwor
ICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7Cisg
ICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7
CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIg
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURf
Tk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7Cisg
ICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsK
KyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAg
ICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3Rh
ZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IE9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOworICAgICAgdmFyIG91dE5vZGU7CisgICAgICB2YXIg
aW5kZXg7CisgICAgICB2YXIgdGV4dDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7
CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBk
b2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9j
IiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29u
dGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Np
b24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGluZGV4
ID0gMDsKK291dE5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIAorICAgIHdo
aWxlKAorCQorCShvdXROb2RlICE9IG51bGwpCisKKwkpIHsKKwl0ZXh0ID0gb3V0Tm9kZS5kYXRh
OworCisgICAgICAKKwlpZigKKwkoMCA9PSBpbmRleCkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoImZp
cnN0IiwiRU1QMDAwMSIsdGV4dCk7CisgICAgICAgCisJfQorCQorCWlmKAorCSgxID09IGluZGV4
KQorCSkgeworCWFzc2VydEVxdWFscygic2Vjb25kIiwiRU1QMDAwMiIsdGV4dCk7CisgICAgICAg
CisJfQorCQorCWlmKAorCSgyID09IGluZGV4KQorCSkgeworCWFzc2VydEVxdWFscygidGhpcmQi
LCJFTVAwMDAzIix0ZXh0KTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKDMgPT0gaW5kZXgpCisJ
KSB7CisJYXNzZXJ0RXF1YWxzKCJmb3VydGgiLCJFTVAwMDA0Iix0ZXh0KTsKKyAgICAgICAKKwl9
CisJCisJaWYoCisJKDQgPT0gaW5kZXgpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJmaWZ0aCIsIkVN
UDAwMDUiLHRleHQpOworICAgICAgIAorCX0KKwlpbmRleCArPSAxOworb3V0Tm9kZSA9IG91dHJl
c3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgCisJfQorYXNzZXJ0RXF1YWxzKCJjb3VudCIsNSxp
bmRleCk7CisgICAgICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0
aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUoKTsKK30KSW5k
ZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFs
dWF0ZV9XUk9OR19ET0NVTUVOVF9FUlItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9XUk9O
R19ET0NVTUVOVF9FUlItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VN
RU5UX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVy
IGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAg
ICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBl
PVNPTElEXSBbY29sb3I9I0ZGRkYwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwx
MDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0
ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDQ3NngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ3NjogIlRlc3Rz
IHdpdGggbXVsdGlwbGUgbG9hZHMgb2YgZGlmZmVyZW50IGRvY3VtZW50cyBhcmUgbm90IGN1cnJl
bnRseSBzdXBwb3J0ZWQiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXpl
IDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzODF4MTgK
KyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzODE6ICJYUGF0aEV4cHJlc3Npb25f
ZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVSX1RZUEUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWlu
ZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0g
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBd
fV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4w
MCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOTJ4MTgKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTI6ICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JT
dGF0ZV9OVU1CRVJfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8w
MS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAxLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMS5zdmcJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0K
KzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFF
TlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0K
KyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVu
dDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48
P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJ
IiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElD
ICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBl
bnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVC
TElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5v
dGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUr
LCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4
bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5h
bWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRM
SVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAj
UkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBz
Y3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21t
ZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiIHNyYz0iWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BB
Q0VfRVJSXzAxLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5
PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUx
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6
Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlv
biB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlz
IGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0
YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2Fs
YXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50
MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpk
bXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAz
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRp
b24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2Fs
YXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVz
dGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1w
OmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9j
b25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1w
OnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpn
ZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0i
WWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUi
PjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2Vt
cDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3Yi
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVy
dCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgy
MSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUu
c3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuc3ZnCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1
bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5zdmcJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlM
RSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0
YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIg
TkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBi
ZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24x
RmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4N
CisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQor
ICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisg
ICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAg
IDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFU
QSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQg
Q0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFU
VExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMg
aXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVz
dWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuanMiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQu
anMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50
YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMw
IE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0
aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBh
biBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11d
PjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4z
NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQor
ICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAw
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1
NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisg
IDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVl
dD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RF
TSAic3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVu
dDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8
IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2Vu
dEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMg
ImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBl
bnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5v
dGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24y
IFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENE
QVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUr
KT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8
IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRB
ICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEg
I1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBz
Y3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVE
PiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMg
OTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtD
REFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAy
ICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdp
dGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2Vj
cmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMi
PiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFu
YWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5Q
TyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3
IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lh
bGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5t
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQs
IElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JDYXN0
MDEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JDYXN0MDEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvckNhc3QwMS5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDIgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdl
YiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBF
dXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1h
dGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsg
aXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4g
dGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3
LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMx
CisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VU
ZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvckNhc3QwMSddOwor
fQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisv
LworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsg
YmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVy
ZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAg
ICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8v
ICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRl
bHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4K
Ky8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmlu
Zyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAg
ICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0g
J2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRp
YWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxl
dGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0
aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQg
aW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRv
Y3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2Vk
IHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRl
ZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEp
IHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKwor
LyoqCisqIAorQSBkb2N1bWVudCBpcyBjcmVhdGVkIHVzaW5nIGltcGxlbWVudGF0aW9uLmNyZWF0
ZURvY3VtZW50IGFuZCAKK2Nhc3QgdG8gYSBYUGF0aEV2YWx1YXRvciBpbnRlcmZhY2UuCisKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IK
KyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvckNhc3QwMSgpIHsKKyAgIHZhciBzdWNjZXNzOwor
ICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yQ2FzdDAx
IikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7
CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlz
LmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAg
ICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICB4
cEV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Cithc3NlcnROb3ROdWxsKCJu
b3RudWxsIix4cEV2YWx1YXRvcik7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgIFhQYXRoRXZhbHVhdG9yQ2FzdDAxKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRV9jb3VudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEVfY291bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VO
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfY291bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVy
Q2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30g
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNGRjAwMDBdfV0gW2RhdGE9
Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAg
ICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1MjB4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCA1MjA6ICJYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRV9jb3VudCIKKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgw
LDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDE3OHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDE3ODogIm5vdG51bGw6
IGFzc2VydE5vdE51bGwgZmFpbGVkIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGwuc3ZnCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0
ZU5TUmVzb2x2ZXJfYWxsLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfYWxsLnN2ZwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNU
WUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQi
IA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBE
YWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVu
dDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVC
TElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJ
VFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2Ny
aXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qg
c3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBU
WT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAg
aGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0K
KyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEt
LSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9
IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jl
c29sdmVyX2FsbC5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
bmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4N
CisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFy
eT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVz
cyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1
MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRw
Oi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rp
b24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhp
cyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAm
dGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVu
dDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
MzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21l
c3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3llZSB4bWxuczplbXA9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFsdGF2aXN0YS5jb20iID4gICAgPGVt
cDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlkPg0KKyAgPG5tOm5hbWU+SmVueSBP
Y29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L2Vt
cDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwvZW1wOnNhbGFyeT4NCisgIDxlbXA6
Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6YWRkcmVzcyBlbXA6ZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FOQURBIiBlbXA6bG9jYWwxPSJUUlVF
Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2PC9lbXA6YWRkcmVzcz4NCisgPC9l
bXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAyPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2Jl
cnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjE4
MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFs
dWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9TVVBQT1JURURf
RVJSLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorCisvKgorQ29weXJpZ2h0IMOC
wqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMg
SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitm
b3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitS
aWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LC
riBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQg
d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9j
b3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rp
b24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBb
J1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSJ107Cit9CisKK3ZhciBk
b2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8v
ICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBj
b25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50
IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlz
IHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAg
ICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0
aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRy
eSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1h
eSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3Vy
ZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRl
ZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAgICAg
IGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUn
OworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25F
cnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAg
fQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0
aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRl
c3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFz
IGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxs
b3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rp
b24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogICAg
ICAgCisgICAgICBUZXN0IGlmIFhQYXRoRXZhbHVhdG9yLmV2YWx1YXRlIHByb3Blcmx5IHRocm93
cyBOT1RfU1VQUE9SVEVEX0VSUk9SCisgICAgCisqIEBhdXRob3IgUGhpbGlwcGUgTGUgSMOpZ2Fy
ZXQKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1
YXRlCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9F
UlIoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxk
ZXIsICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUiIpICE9IG51bGwp
IHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFy
IHJlc3VsdDsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciBu
dWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgCisgICAg
ICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9j
ID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBj
cmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworY29udGV4dE5vZGUgPSBkb2MuY3JlYXRlRW50aXR5
UmVmZXJlbmNlKCJlbnRpdHluYW1lIik7CisgICAgICAKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsK
KwkJdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRlKCIvL2Zv
bzpiYXIiLGNvbnRleHROb2RlLG51bGxOU1Jlc29sdmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICAg
IH0KKwkJY2F0Y2goZXgpIHsKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1
bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gOSk7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidGhyb3dfTk9U
X1NVUFBPUlRFRF9FUlIiLHN1Y2Nlc3MpOworCX0KKworfQorCisKKworCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIoKTsK
K30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29tbWVu
dF9Ob2Rlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbW1lbnRfTm9kZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisKKy8q
CitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCiso
TWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2gg
Q29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVy
c2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
Cit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1
bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBv
c2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMo
KQoreworcmV0dXJuIFsnQ29tbWVudF9Ob2RlcyddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0x
MDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcg
dGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBl
eGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0
YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxl
dGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hl
biBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2Uo
KSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLwor
ICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0
aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOwor
CisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7
CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBk
b2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChk
b2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAg
IH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4
KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLwor
Ly8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAg
IGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBX
aGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8g
ICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAg
IGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUo
KSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1
cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFMxLjIuNiBDb21t
ZW50IE5vZGVzIC0gCisgICAgICBDcmVhdGUgQU5ZX1RZUEUgWFBhdGhSZXN1bHQgbWF0Y2hpbmcg
Ly9jb21tZW50KCksCisgICAgICBjaGVjayB0aGF0IGVhY2ggbWF0Y2hpbmcgTm9kZSBpcyBhIENv
bW1lbnQgTm9kZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI01hcHBp
bmcKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRv
ci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAw
MzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIv
MjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhSZXN1bHQtaXRlcmF0ZU5leHQKKyovCitmdW5jdGlvbiBDb21tZW50X05v
ZGVzKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiQ29tbWVudF9Ob2RlcyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUg
PSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9
IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9S
REVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9
IDk7CisgICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1
YXRvcjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7
CisKKyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9
ICIvL2NvbW1lbnQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2
YXIgY3Vyck5vZGU7CisgICAgICB2YXIgbm9kZVR5cGU7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRv
Y1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFs
dWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsK
KyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0
ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7Cisg
ICAgICBjdXJyTm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgCisgICAgd2hp
bGUoCisJCisJKGN1cnJOb2RlICE9IG51bGwpCisKKwkpIHsKKwlub2RlVHlwZSA9IGN1cnJOb2Rl
Lm5vZGVUeXBlOworCisgICAgICBhc3NlcnRFcXVhbHMoIlMxLjIuNi1Db21tZW50LU5vZGVzLW5v
ZGVUeXBlIiw4LG5vZGVUeXBlKTsKKyAgICAgICBjdXJyTm9kZSA9IG91dHJlc3VsdC5pdGVyYXRl
TmV4dCgpOworICAgICAgCisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBDb21tZW50X05vZGVzKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfbnVtYmVyVmFsdWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfbnVtYmVyVmFsdWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52
YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAo
MCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXpl
IDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAu
MDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJl
bmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIzMngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDApIHdpZHRoIDIzMjogIlhQYXRoUmVzdWx0X251bWJlclZhbHVlOiBTdWNjZXNzIgpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZh
bHVlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURf
Tk9ERV9UWVBFLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0
YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIx
OTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJ
VFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVt
ZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRp
dHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAi
VGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNU
RU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAj
SU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQor
ICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0
ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAg
ICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURfTk9E
RV9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8
cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9t
ZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEg
Q0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwh
W0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMs
ICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMi
Pg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQor
IEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+
DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5n
LCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5v
cjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERh
bGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQg
TXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+
DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5
ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9V
Tk9SREVSRURfTk9ERV9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9O
T0RFX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBF
LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIg
Ww0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxh
cyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAi
PGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0
YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJl
bnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRp
dHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElD
ICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0
aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4N
CisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRM
SVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3Qg
RU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisg
ICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAg
ICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRB
KT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0K
KzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9
IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNy
Yz0iWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLmpz
Ii8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJz
dmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+
QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0
aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1Ro
aXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIg
JnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxz
YWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0K
KyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9u
YW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2Fs
YXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5
ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxv
eWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4N
CisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45
NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4
YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxl
bXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25h
bWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2Fs
YXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVz
cyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0Vf
RVJSXzAyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMjQgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRl
IFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5
LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRo
ZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdv
cmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0g
aW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8v
d3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIx
MjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBv
c2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9jcmVhdGVF
eHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDInXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAw
MDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRo
ZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhj
ZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFy
dGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRl
IGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4g
ZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkg
eworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAg
ICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlv
bgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKwor
ICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOwor
ICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9j
UmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9j
UmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAg
IH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4
KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLwor
Ly8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAg
IGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBX
aGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8g
ICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAg
IGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUo
KSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1
cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2
YWx1YXRvciBjYW4gY3JlYXRlIGEgIlhQYXRoRXhwcmVzc2lvbiIgdXNpbmcgdGhlIG1ldGhvZAor
ICAgICAgImNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIpIi4KKyAgICAgIAor
ICAgICAgUmV0cmlldmUgdGhlIERPTSBkb2N1bWVudCBvbiB3aGljaCB0aGUKKyAgICAgICdjcmVh
dGVFeHByZXNzaW9uKCIvc3RhZmYvamZvdWZmYTplbXBsb3llZSIsIHJlc29sdmVyKScgbWV0aG9k
IGlzCisgICAgICBpbnZva2VkIHdpdGggdGhlIGRvY3VtZW50IGVsZW1lbnQuIFRoZSBtZXRob2Qg
c2hvdWxkIGZhaWwgdG8gY3JlYXRlCisgICAgICBwcmUtY29tcGlsZWQgZXhwcmVzc2lvbiBhbmQg
dGhyb3dzIERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSCisgICAgICBzaW5jZSB0aGUgcHJlZml4
IGpmb3VmZmEgaXMgbm90IG1hcHBlZC4KKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6ln
YXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlRXhwcmVzc2lvbgorKi8KK2Z1
bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMigp
IHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwg
IlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMiIpICE9IG51
bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOworICAgICAg
dmFyIGV4cDsKKyAgICAgIHZhciByb290OworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgCisg
ICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1
bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAg
ZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3Ig
PSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7
CisKKyAgICAgIHJlc29sdmVyID0geHBFdmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihyb290KTsK
KyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgZXhw
ID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lvbigiL3N0YWZmL2pmb3VmZmE6ZW1wbG95ZWUi
LHJlc29sdmVyKTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAgc3VjY2VzcyA9ICh0
eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSAxNCk7CisJCX0KKwkJ
YXNzZXJ0VHJ1ZSgidGhyb3dfTkFNRVNQQUNFX0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKwor
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX05BTUVTUEFDRV9FUlJfMDIoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9OVU1CRVJfVFlQRS5zdmcJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRl
cmF0b3JTdGF0ZV9OVU1CRVJfVFlQRS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBz
dmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFF
TlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMi
Pg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQg
ZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1
IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwh
RU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9U
QVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBu
b3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUg
eG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBl
bXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVE
ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVE
Pg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAg
IHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0
aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFF
TEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEg
I0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4N
Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0i
MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRl
X05VTUJFUl9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+
DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxh
cnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlz
IGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11d
Pg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZl
cmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJv
Z2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9n
ZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcg
SXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkg
T2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJv
YWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5S
b2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5k
ZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBU
ZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVz
c2lvbl9OQU1FU1BBQ0VfRVJSXzAxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9u
X05BTUVTUEFDRV9FUlJfMDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9O
QU1FU1BBQ0VfRVJSXzAxLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBA
CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNp
emUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4
MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxs
PXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAw
LDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0
ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSA0NDV4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0NDU6
ICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDE6IFN1Y2Nl
c3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9i
b29sZWFuVmFsdWVfdHJ1ZS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX3RydWUuc3ZnCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVh
blZhbHVlX3RydWUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RFTSAi
c3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIg
IjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVO
VElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2VudEVs
ZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVu
dGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQx
ICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0
aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZ
U1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENEQVRB
ICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrKT4N
CisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVM
RU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3Jp
cHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAg
ICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfdHJ1ZS5qcyIvPg0KKzxzY3Jp
cHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIv
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8
L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdl
bmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9y
dGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2
ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5h
bWU+TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVu
dGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFk
amFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9u
YW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVz
dGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxw
b3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDQ8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRp
b24+UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZ
ZXMiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwv
ZW1wbG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTgwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjA3IEBACisyMDA2LTA1
LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBtYWMuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBET00zIHhwYXRoIHRlc3RzIGFz
IHNlbGYtY29udGFpbmVkIFNWRyBmaWxlcy4gCisgICAgICAgIAorICAgICAgICAqIGRvbS9zdmc6
IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgv
QXR0cmlidXRlX05vZGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMu
anM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rl
c194bWxucy5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1l
bnRfTm9kZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9Db21tZW50X05vZGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9Db21tZW50X05vZGVzLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvQ29uZm9ybWFuY2VfRXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9FeHByZXNzaW9ucy5qczogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfRXhwcmVzc2lv
bnMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9JRC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L0NvbmZvcm1hbmNlX0lELmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9Db25mb3JtYW5jZV9JRC5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy5qczogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVy
ZV8zLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFu
Y2VfaGFzRmVhdHVyZV9lbXB0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuanM6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1w
dHkuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9oYXNGZWF0dXJlX251bGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwuanM6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5z
dmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lz
U3VwcG9ydGVkXzMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLmpzOiBBZGRlZC4KKyAgICAgICAgKiBk
b20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLnN2ZzogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRf
ZW1wdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eS5qczogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHkuc3ZnOiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRl
ZF9udWxsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbC5qczogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbC5zdmc6IEFkZGVk
LgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0VsZW1lbnRfTm9kZXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9FbGVtZW50X05vZGVz
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9FbGVtZW50X05vZGVz
LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvUHJvY2Vzc2luZ19J
bnN0cnVjdGlvbl9Ob2Rlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcv
bGV2ZWwzL3hwYXRoL1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXMuanM6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXMu
c3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvVGV4dF9O
b2Rlcy5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvVGV4dF9Ob2Rl
cy5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yQ2FzdDAxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JDYXN0MDEuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yQ2FzdDAxLnN2ZzogQWRkZWQuCisgICAgICAgICog
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9JTlZB
TElEX0VYUFJFU1NJT05fRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9JTlZBTElEX0VY
UFJFU1NJT05fRVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIuc3Zn
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9j
cmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX05BTUVTUEFDRV9FUlJfMDEuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMS5z
dmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJl
c3Npb25fTkFNRVNQQUNFX0VSUl8wMi5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAy
LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTlMuanM6
IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2Ny
ZWF0ZUV4cHJlc3Npb25fTlMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3Jl
YXRlRXhwcmVzc2lvbl9ub19OUy5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9ub19OUy5zdmc6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVz
b2x2ZXJfYWxsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGwuanM6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2
ZXJfYWxsLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
dmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVz
b2x2ZXJfZG9jdW1lbnQuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQuc3ZnOiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29s
dmVyX2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnRF
bGVtZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2
YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50RWxlbWVudC5zdmc6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX0lOVkFM
SURfRVhQUkVTU0lPTl9FUlItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05f
RVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLnN2ZzogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNF
X0VSUi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFDRV9FUlIuanM6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFD
RV9FUlIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2
YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05P
VF9TVVBQT1JURURfRVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5zdmc6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZ
UEVfRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlIuanM6IEFkZGVkLgorICAgICAgICAq
IGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJSLnN2
ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
ZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9D
VU1FTlRfRVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIuc3ZnOiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVu
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC5zdmc6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1
YXRlX2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudC5q
czogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
ZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
eHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfTk9UX1NVUFBP
UlRFRF9FUlIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV4cHJlc3Npb25fZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5zdmc6
IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9l
dmFsdWF0ZV9kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudC5qczogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X2RvY3VtZW50LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFeHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0
ZV9kb2N1bWVudEVsZW1lbnQuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFt
ZXNwYWNlVVJJX25pc3RfZG1zdGMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3Rf
ZG1zdGMuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNS
ZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0Yy5zdmc6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VV
UklfbnVsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbC5qczogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVz
cGFjZVVSSV9udWxsLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9v
a3VwTmFtZXNwYWNlVVJJX3ByZWZpeC5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXguc3ZnOiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9v
a3VwTmFtZXNwYWNlVVJJX3htbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJf
bG9va3VwTmFtZXNwYWNlVVJJX3htbC5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X1RZUEVfRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfVFlQRV9FUlIuanM6IEFkZGVk
LgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X1RZUEVfRVJSLnN2
ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9v
bGVhblZhbHVlX2ZhbHNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFs
c2Uuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9ib29sZWFuVmFsdWVfdHJ1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVf
dHJ1ZS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9y
U3RhdGVfQU5ZX1RZUEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLnN2ZzogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9y
U3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0
ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJF
RF9OT0RFX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5f
VFlQRS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
aW52YWxpZEl0ZXJhdG9yU3RhdGVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUuanM6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRv
clN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVS
X1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9OVU1CRVJfVFlQRS5qczogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJh
dG9yU3RhdGVfTlVNQkVSX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5z
dmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52
YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuanM6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRv
clN0YXRlX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLnN2ZzogQWRkZWQuCisgICAgICAgICog
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RS
SU5HX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQRS5qczogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0
ZXJhdG9yU3RhdGVfU1RSSU5HX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRS5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLnN2ZzogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0ZU5l
eHRfSU5WQUxJRF9TVEFURV9FUlItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRlTmV4dF9JTlZBTElEX1NUQVRFX0VS
Ui5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
aXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9FUlIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5zdmc6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9VTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X251bWJlclZhbHVlLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1i
ZXJWYWx1ZS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3Jlc3VsdFR5cGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9yZXN1bHRUeXBlLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9yZXN1bHRUeXBlLnN2ZzogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZh
bHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9V
Tk9SREVSRURfTk9ERV9UWVBFLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUu
c3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9z
aW5nbGVOb2RlVmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2Rl
VmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVE
X05PREVfVFlQRS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X3NuYXBzaG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanM6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90
SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLnN2ZzogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFX29yZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEVfb3JkZXIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50Lmpz
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFw
c2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5zdmc6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9V
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVf
U05BUFNIT1RfVFlQRV9udWxsLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qczog
QWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNo
b3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3N0cmluZ1ZhbHVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUuanM6IEFkZGVkLgorICAgICAgICAqIGRv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlLnN2ZzogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvc3ZndW5pdC5qczogQWRkZWQuCisKIDIwMDYt
MDUtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEp1c3Rpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQxNzkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0
IEBAIEtYQ0xvZ0NoYW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5u
ZWwgTG9nRXZlbnRzID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwi
LCBLWENMb2dDaGFubmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAg
ICAgeyAweDAwMDAwMTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9Owog
S1hDTG9nQ2hhbm5lbCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNv
cmVMb2dMZXZlbCIsIEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGgg
PSAgICAgICAgICAgICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL0xvZ2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRl
cm4gS1hDTG9nQ2hhbm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwg
TG9nRXZlbnRzOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENM
b2dDaGFubmVsIExvZ1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBh
dGg7CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3Vi
IEFkZEluY2x1ZGVzRm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlw
ZSBlcSAiTm9kZUxpc3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0
eXBlIGVxICJUZXh0IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBl
cSAiWFBhdGhFdmFsdWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBv
cgorICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJY
UGF0aFJlc3VsdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0g
ZWxzaWYgKCR0eXBlIGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUw
MSw3ICs1MDUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xh
c3NOYW1lID0gIiR7cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgY29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAk
aW50ZXJmYWNlTmFtZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigk
Y2xhc3NOYW1lLCAkcHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAt
IEFkZCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBA
IC04MjQsNyArODI4LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEg
IkVsZW1lbnQiIG9yCiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAk
dHlwZSBlcSAiRG9jdW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7
CisgICAgICAgICAgICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQ
YXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0Iikgewog
ICAgIHJldHVybiAiJHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIp
IHsKICAgICAgIHJldHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NzYsNiArODgyLDEy
IEBAIHN1YiBUeXBlQ2FuRmFpbENvbnZlcnNpb24KICAgICAgIHJldHVybiAwOwogICB9IGVsc2lm
ICgkdHlwZSBlcSAiRE9NV2luZG93IikgewogICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0
eXBlIGVxICJYUGF0aEV2YWx1YXRvciIpIHsKKyAgICAgIHJldHVybiAwOworICB9IGVsc2lmICgk
dHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgeworICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYg
KCR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAgIHJldHVybiAwOwogICB9IGVsc2Ugewog
ICAgIGRpZSAiRG9uJ3Qga25vdyB3aGV0aGVyIGEgSlMgdmFsdWUgY2FuIGZhaWwgY29udmVyc2lv
biB0byB0eXBlICR0eXBlLiIKICAgfQpAQCAtOTM2LDcgKzk0OCwxMSBAQCBzdWIgSlNWYWx1ZVRv
TmF0aXZlCiAgICAgcmV0dXJuICJ0b05vZGVGaWx0ZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0
eXBlIGVxICJET01XaW5kb3ciKSB7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0g
PSAxOwotICAgIHJldHVybiAidG9ET01XaW5kb3coJHZhbHVlKSI7CisgICAgcmV0dXJuICJ0b0RP
TVdpbmRvdygkdmFsdWUpIjsgCisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIi
IG9yCisgICAgICAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1
ZGVzeyJKUyR0eXBlLmgifSA9IDE7CisgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwogICB9
IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9m
IHR5cGUgJHR5cGUuIgogICB9CkBAIC05NTUsNyArOTcxLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1
ZQogICAgICAgICAgICAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgCiAgICAgICAgICAgICR0
eXBlIGVxICJzaG9ydCIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIg
b3IKLSAgICAgICAgICAgJHR5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAkdHlwZSBlcSAi
ZmxvYXQiIG9yIAorICAgICAgICAgICAkdHlwZSBlcSAiZG91YmxlIikgewogICAgIHJldHVybiAi
anNOdW1iZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAg
ICAgbXkgJGNvbnYgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51
bGxTdHJpbmdUbyJ9OwpAQCAtMTA0Miw2ICsxMDU5LDExIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
ICAgfSBlbHNpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMo
ZXhlYywgJHZhbHVlKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iIG9y
CisgICAgICAgICAgICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAgICAgICR0
eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9
IDE7CisgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRp
ZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBK
UyBWYWx1ZSI7CiAgIH0KQEAgLTEyNDksNiArMTI3MSw3IEBAIHN1YiBjb25zdHJ1Y3RvckZvcgog
ICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAkcHJvdG9DbGFzc05hbWUgPSBzaGlm
dDsKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjYW5Db25zdHJ1Y3Qg
PSBzaGlmdDsKICAgICAKIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3MgJHtjbGFz
c05hbWV9Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNjEsNyArMTI4NCwx
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSogZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOworRU9GCisKKyAgICBpZiAoJGNhbkNvbnN0cnVjdCkgeworJGltcGxDb250ZW50
IC49IDw8ICJFT0YiOworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2Jq
ZWN0ICo+KHRvSlMoZXhlYywgbmV3ICRpbnRlcmZhY2VOYW1lKSk7IH0KK0VPRgorICAgIH0KKwor
JGltcGxDb250ZW50IC49IDw8ICJFT0YiOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yOjppbmZvID0geyAiJHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yIiwg
MCwgJiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yVGFibGUsIDAgfTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2JpbmRpbmcuY3BwCShyZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2JpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgImRv
bTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAi
a2pzX2RvbS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlIDxranMvY29sbGVj
dG9yLmg+CkBAIC0yOTgsNiArMjk5LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZl
bnRFeGNlcHRpb24KICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9OwogCitzdGF0
aWMgY29uc3QgY2hhciAqIGNvbnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiSU5W
QUxJRF9FWFBSRVNTSU9OX0VSUiIsCisgICAgIlRZUEVfRVJSIgorfTsKKwogdm9pZCBzZXRET01F
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjKQogewogICBpZiAoZWMg
PT0gMCB8fCBleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTMwNyw2ICszMTMsOCBAQCB2b2lkIHNl
dERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAg
Y29uc3QgY2hhciAqIGNvbnN0ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsK
KyAgCiAgIGludCBuYW1lVGFibGVTaXplOwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9m
ZnNldCAmJiBjb2RlIDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFu
Z2UiOwpAQCAtMzE4LDEyICszMjYsMjIgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBFeAogICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAgICAgbmFtZVRh
YmxlID0gZXZlbnRFeGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKGV2
ZW50RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXNbMF0pOworICB9
IGVsc2UgaWYgKGNvZGUgPj0gWFBhdGhFeGNlcHRpb25PZmZzZXQgJiYgY29kZSA8PSBYUGF0aEV4
Y2VwdGlvbk1heCkgeworICAgICAgLy8gWFBhdGggZXhjZXB0aW9uIGNvZGVzIHN0YXJ0IHdpdGgg
NTEgYW5kIHdlIGRvbid0IHdhbnQgNTEgZW1wdHkgZWxlbWVudHMgaW4gdGhlIG5hbWUgYXJyYXkK
KyAgICBpbnQgbmFtZUluZGV4ID0gY29kZSAtIElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAg
dHlwZSA9ICJET00gWFBhdGgiOworICAgIGNvZGUgLT0gWFBhdGhFeGNlcHRpb25PZmZzZXQ7Cisg
ICAgbmFtZVRhYmxlID0geHBhdGhFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0g
c2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXNb
MF0pOworCisgICAgbmFtZSA9IG5hbWVJbmRleCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVb
bmFtZUluZGV4XSA6IDA7CiAgIH0gZWxzZSB7CiAgICAgbmFtZVRhYmxlID0gZXhjZXB0aW9uTmFt
ZXM7CiAgICAgbmFtZVRhYmxlU2l6ZSA9IHNpemVvZihleGNlcHRpb25OYW1lcykgLyBzaXplb2Yo
ZXhjZXB0aW9uTmFtZXNbMF0pOwogICB9CiAKLSAgY29uc3QgY2hhciogbmFtZSA9IGNvZGUgPCBu
YW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKKyAgaWYgKCFuYW1lKQorICAgICAg
bmFtZSA9IGNvZGUgPCBuYW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKIAogICAv
LyAxMDAgY2hhcmFjdGVycyBpcyBhIGJpZyBlbm91Z2ggYnVmZmVyLCBiZWNhdXNlIHRoZXJlIGFy
ZToKICAgLy8gICAxMyBjaGFyYWN0ZXJzIGluIHRoZSBtZXNzYWdlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T00ubW0JKHJldmlzaW9uIDE0MTc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjM5LDYgKzYzOSw5IEBAIHN0YXRpYyBMaXN0ZW5lck1hcCAqbGlz
dGVuZXJNYXA7CiAgICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01Ob3RhdGlvbiBjbGFzc107CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBDcmVhdGUgYW4gWFBhdGggb2JqZWN0aXZlIEMgd3JhcHBlcgorICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxvY10gX2lu
aXRXaXRoTm9kZTppbXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShy
ZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAg
ICAgJChXZWJDb3JlKS9odG1sIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorCSQoV2ViQ29yZSkv
eHBhdGgKICMKIAogLlBIT05ZIDogYWxsCkBAIC03Miw2ICs3MywxMCBAQCBhbGwgOiBcCiAgICAg
SlNSYW5nZS5oIFwKICAgICBKU1RleHQuaCBcCiAgICAgSlNVSUV2ZW50LmggXAorCUpTWFBhdGhF
dmFsdWF0b3IuaCBcCisJSlNYUGF0aEV4cHJlc3Npb24uaCBcCisJSlNYUGF0aE5TUmVzb2x2ZXIu
aCBcCisJSlNYUGF0aFJlc3VsdC5oIFwKICAgICBKU1doZWVsRXZlbnQuaCBcCiAgICAgSlNYTUxI
dHRwUmVxdWVzdC5sdXQuaCBcCiAgICAgSlNYTUxTZXJpYWxpemVyLmx1dC5oIFwKQEAgLTc5LDYg
Kzg0LDcgQEAgYWxsIDogXAogICAgIFNWR05hbWVzLmNwcCBcCiAgICAgVXNlckFnZW50U3R5bGVT
aGVldHMuaCBcCiAgICAgWExpbmtOYW1lcy5jcHAgXAorCVhQYXRoR3JhbW1hci5jcHAgXAogICAg
IGtqc19jc3MubHV0LmggXAogICAgIGtqc19kb20ubHV0LmggXAogICAgIGtqc19ldmVudHMubHV0
LmggXApAQCAtMTMwLDYgKzEzNiwxNSBAQCBDU1NHcmFtbWFyLmNwcCA6IGNzcy9DU1NHcmFtbWFy
LnkKIAljYXQgQ1NTR3JhbW1hci5jcHAuaCBDU1NHcmFtbWFyLmhwcCA+IENTU0dyYW1tYXIuaAog
CXJtIC1mIENTU0dyYW1tYXIuY3BwLmggQ1NTR3JhbW1hci5ocHAKIAorIyBYUGF0aCBncmFtbWFy
CisKK1hQYXRoR3JhbW1hci5jcHAgOiB4cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55CisJYmlzb24g
LWQgLXAgeHBhdGh5eSAkPCAtbyAkQAorCXRvdWNoIFhQYXRoR3JhbW1hci5jcHAuaAorCXRvdWNo
IFhQYXRoR3JhbW1hci5ocHAKKwljYXQgWFBhdGhHcmFtbWFyLmNwcC5oIFhQYXRoR3JhbW1hci5o
cHAgPiBYUGF0aEdyYW1tYXIuaAorCXJtIC1mIFhQYXRoR3JhbW1hci5jcHAuaCBYUGF0aEdyYW1t
YXIuaHBwCisKICMgdXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAogVVNFUl9BR0VOVF9TVFlMRV9T
SEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNz
cyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIApAQCAtMTgzLDQgKzE5OCw0IEBAIEpTX0JJTkRJTkdT
X1NDUklQVFMgPSBcCiAjCiAKIEpTJS5oIDogJS5pZGwgJChKU19CSU5ESU5HU19TQ1JJUFRTKQot
CXBlcmwgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5kaW5ncy9z
Y3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVkZSBkb20g
LS1pbmNsdWRlIGh0bWwgLS1vdXRwdXRkaXIgLiAkPAorCXBlcmwgLUkkKFdlYkNvcmUpL2JpbmRp
bmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdz
LnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVkZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1pbmNsdWRl
IHhwYXRoIC0tb3V0cHV0ZGlyICAuICQ8CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAxNDE3OSkK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzEx
NCwyMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIE5vZGUgYWRvcHROb2RlKGluIE5vZGUgc291
cmNlKQogICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIC8vIERP
TSBMZXZlbCAzIFhQYXRoIChYUGF0aEV2YWx1YXRvciBpbnRlcmZhY2UpCisgICAgICAgIFhQYXRo
RXhwcmVzc2lvbiBjcmVhdGVFeHByZXNzaW9uKGluIERPTVN0cmluZyBleHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aE5TUmVzb2x2ZXIg
cmVzb2x2ZXIpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICBY
UGF0aE5TUmVzb2x2ZXIgY3JlYXRlTlNSZXNvbHZlcihpbiBOb2RlIG5vZGVSZXNvbHZlcik7Cisg
ICAgICAgIAorICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShpbiBET01TdHJpbmcgZXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTm9kZSBjb250ZXh0Tm9kZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoTlNSZXNvbHZlciByZXNvbHZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQgc2hvcnQgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5SZXN1bHQpCisg
ICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAgICAvLyBDb21tb24gZXh0
ZW5zaW9ucwogCiAgICAgICAgIGJvb2xlYW4gZXhlY0NvbW1hbmQoaW4gRE9NU3RyaW5nIGNvbW1h
bmQsIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBACiAjaW5jbHVkZSAieG1s
X3Rva2VuaXplci5oIgogI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVn
dWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1ZGUg
IlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1
ZGUgIlhQYXRoUmVzdWx0LmgiCiAKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAiWFNMVFBy
b2Nlc3Nvci5oIgpAQCAtNTA5LDYgKzUxMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6
OmltcG9ydE5vZGUoTm8KICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFX05PREU6CiAgICAgICAg
IGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBOT1RBVElPTl9OT0RF
OgorICAgICAgICBjYXNlIFhQQVRIX05BTUVTUEFDRV9OT0RFOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0zMTExLDQgKzMxMTYsMzUgQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQ
YXJzaW5nKCkKICAgICAgICAgZi0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKK1Bhc3NSZWZQdHI8
WFBhdGhFeHByZXNzaW9uPiBEb2N1bWVudDo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3Ig
PSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3It
PmNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVjKTsKK30KKworUGFzc1Jl
ZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IERvY3VtZW50OjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5v
ZGVSZXNvbHZlcikKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBh
dGhFdmFsdWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBh
dGhFdmFsdWF0b3ItPmNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKTsKK30KKworUGFzc1Jl
ZlB0cjxYUGF0aFJlc3VsdD4gRG9jdW1lbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBj
b250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
UGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBp
ZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3IgPSBuZXcgWFBh
dGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3ItPmV2YWx1YXRl
KGV4cHJlc3Npb24sIGNvbnRleHROb2RlLCByZXNvbHZlciwgdHlwZSwgcmVzdWx0LCBlYyk7Cit9
CisKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDE0MTc5KQor
KysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw5IEBAIGJvb2wgRE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUgKGNvbnMKICAg
ICAgICAgICAgIHx8IGxvd2VyID09ICJ1aWV2ZW50cyIKICAgICAgICAgICAgIHx8IGxvd2VyID09
ICJ2aWV3cyIpCiAgICAgICAgIHJldHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJzaW9uID09
ICIyLjAiOworICAgIGlmIChsb3dlciA9PSAieHBhdGgiKQorICAgICAgICByZXR1cm4gdmVyc2lv
bi5pc0VtcHR5KCkgfHwgdmVyc2lvbiA9PSAiMy4wIjsKKyAgICAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgVGV4dDsKICAgICBjbGFzcyBUb2tlbml6ZXI7CiAgICAgY2xhc3MgVHJlZVdh
bGtlcjsKKyAgICBjbGFzcyBYUGF0aEV2YWx1YXRvcjsKKyAgICBjbGFzcyBYUGF0aEV4cHJlc3Np
b247CisgICAgY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworICAgIGNsYXNzIFhQYXRoUmVzdWx0Owog
CiAjaWYgX19BUFBMRV9fCiAgICAgc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlOwpAQCAtNTQx
LDYgKzU0NSwxOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwogCisg
ICAgLy8gWFBhdGhFdmFsdWF0b3IgbWV0aG9kcworICAgIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNz
aW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIq
IHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBQYXNzUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4g
Y3JlYXRlTlNSZXNvbHZlcihOb2RlICpub2RlUmVzb2x2ZXIpOworICAgIFBhc3NSZWZQdHI8WFBh
dGhSZXN1bHQ+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiBwcm90ZWN0ZWQ6CiAgICAg
Q1NTU3R5bGVTZWxlY3RvciAqbV9zdHlsZVNlbGVjdG9yOwogICAgIEZyYW1lVmlldyAqbV92aWV3
OwpAQCAtNzM4LDYgKzc1NCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPEhUTUxG
b3JtRWxlbWVudCosIE5hbWVUb0lucHV0TWFwKj4gRm9ybVRvR3JvdXBNYXA7CiAgICAgRm9ybVRv
R3JvdXBNYXAgbV9zZWxlY3RlZFJhZGlvQnV0dG9uczsKICAgICAKKyAgICBSZWZQdHI8WFBhdGhF
dmFsdWF0b3I+IG1feHBhdGhFdmFsdWF0b3I7CisgICAgCiAjaWYgU1ZHX1NVUFBPUlQKICAgICBT
VkdEb2N1bWVudEV4dGVuc2lvbnMqIG1fc3ZnRXh0ZW5zaW9uczsKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDggQEAgcHVibGljOgogICAgICAgICBET0NVTUVOVF9OT0RFID0gOSwKICAgICAgICAgRE9D
VU1FTlRfVFlQRV9OT0RFID0gMTAsCiAgICAgICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAx
MSwKLSAgICAgICAgTk9UQVRJT05fTk9ERSA9IDEyCisgICAgICAgIE5PVEFUSU9OX05PREUgPSAx
MiwKKyAgICAgICAgWFBBVEhfTkFNRVNQQUNFX05PREUgPSAxMwogICAgIH07CiAKICAgICBOb2Rl
KERvY3VtZW50Kik7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNDQgQEAKIAkJMTRFODM3OEUw
OUY4NUQ0RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2ZW50Lmgg
Ki87IH07CiAJCTE0RUMyNjdGMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUMyNjdEMDlD
QTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLzsgfTsKIAkJMTRFQzI2ODAwOUNB
MDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVDMjY3RTA5Q0EwN0UwMDBFMUVFRUMgLyogRXZl
bnRUYXJnZXROb2RlLmNwcCAqLzsgfTsKKwkJMUE3NjI5ODMwQTA3NDBBMDAwOTg5RjVCIC8qIGV4
cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE3NjI5NTkwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwICovOyB9OworCQkx
QTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8q
IGV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMUE3NjI5OEEwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0
aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJMUE3NjI5
OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0
aW9ucy5oICovOyB9OworCQkxQTc2Mjk4QzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
NzYyOTYzMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuY3BwICovOyB9OworCQkx
QTc2Mjk4RDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2NDBBMDc0MEEwMDA5ODlG
NUIgLyogcGFyc2Vkc3RhdGVtZW50LmggKi87IH07CisJCTFBNzYyOThFMEEwNzQwQTAwMDk4OUY1
QiAvKiBwYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLzsgfTsKKwkJMUE3NjI5
OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY2MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmggKi87
IH07CisJCTFBNzYyOTkwMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjcwQTA3NDBBMDAw
OTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi87IH07CisJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1
QiAvKiBwcmVkaWNhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCAqLzsgfTsKKwkJ
MUE3NjI5OTIwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjkwQTA3NDBBMDAwOTg5RjVCIC8qIHN0
ZXAuY3BwICovOyB9OworCQkxQTc2Mjk5MzBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkEwQTA3NDBB
MDAwOTg5RjVCIC8qIHN0ZXAuaCAqLzsgfTsKKwkJMUE3NjI5OTUwQTA3NDBBMDAwOTg5RjVCIC8q
IHRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTc2Mjk2QzBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJ
MUE3NjI5OTYwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkQwQTA3NDBBMDAwOTg5RjVCIC8q
IHRva2VuaXplci5oICovOyB9OworCQkxQTc2Mjk5NzBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2
RTBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5jcHAgKi87IH07CisJCTFBNzYyOTk4MEEwNzQwQTAw
MDk4OUY1QiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oICovOyB9OworCQkxQTc2
Mjk5OTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzAwQTA3NDBBMDAwOTg5
RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OUEwQTA3NDBBMDAw
OTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVy
ZWZlcmVuY2UuaCAqLzsgfTsKKwkJMUE3NjI5OUQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZh
bHVhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi87IH07CisJ
CTFBNzYyOTlFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzYwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi87IH07CisJCTFBNzYyOUEwMEEwNzQwQTAwMDk4OUY1
QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3NjI5NzgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lv
bi5jcHAgKi87IH07CisJCTFBNzYyOUExMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Np
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYy
OTc5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMUE3NjI5
QTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdCMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aE5hbWVzcGFjZS5jcHAgKi87IH07CisJCTFBNzYyOUE0MEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmggKi87
IH07CisJCTFBNzYyOUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5N0QwQTA3
NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi87IH07CisJCTFBNzYyOUE2MEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aE5TUmVzb2x2ZXIuaCAqLzsgfTsKKwkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNzYyOTgwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgKi87IH07CisJCTFB
NzYyOUE5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5ODEwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoUmVzdWx0LmggKi87IH07CisJCTFBNzYyOUQ1MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0
aEdyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE3NjI5RDMwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgKi87IH07CisJ
CTFBNzYyOUQ2MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1
QiAvKiBYUGF0aEdyYW1tYXIuaCAqLzsgfTsKKwkJMUE3NjJDNzMwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE3NjJDNkIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3Iu
Y3BwICovOyB9OworCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJD
NkMwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCAqLzsgfTsKKwkJMUE3NjJD
NzUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1
QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyQzc2MEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHBy
ZXNzaW9uLmggKi87IH07CisJCTFBNzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNS
ZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTc2MkM2RjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuY3BwICovOyB9
OworCQkxQTc2MkM3ODBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzcwMEEwNzRG
MjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oICovOyB9OworCQkxQTc2MkM3OTBBMDc0
RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0
aFJlc3VsdC5jcHAgKi87IH07CisJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRo
UmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovOyB9OwogCQk1NTBB
MEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYg
LyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAv
KiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyB9
OwogCQk1NTBBMEJDRDA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkNCMDg1RjYwNEQwMDcz
NTNENiAvKiBIVE1MTmFtZXMuY3BwICovOyB9OwpAQCAtMTI1Niw2ICsxMjk0LDQ5IEBACiAJCTE0
RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
RUMyNjdEMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRUYXJnZXROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0RUMyNjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJnZXROb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NTkwQTA3NDBBMDAwOTg5
RjVCIC8qIGV4cHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IGV4cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk1
QTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gZXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2Vkc3RhdGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjQwQTA3NDBBMDAw
OTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcGFyc2Vkc3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
NzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBwYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5NjYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gcHJlZGljYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NjgwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHJlZGljYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyOTY5MEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBzdGVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN0ZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NkMwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkQwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5pemVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkYwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVm
ZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB2YXJpYWJs
ZXJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTcxMEEw
NzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdmFyaWFibGVyZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUE3NjI5NzIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci55ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IFhQYXRoR3JhbW1hci55OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3NTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFs
dWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoRXZh
bHVhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzYwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBYUGF0aEV2YWx1YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2Mjk3NzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBYUGF0aEV2YWx1YXRvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFBNzYyOTc4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTc5MEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQ
YXRoRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3QTBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gWFBhdGhFeHByZXNzaW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aE5hbWVzcGFjZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdDMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5h
bWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhOYW1lc3Bh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5N0QwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE3NjI5N0UwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVz
b2x2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aE5TUmVzb2x2ZXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk4MDBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQ
YXRoUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5ODEwQTA3
NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBYUGF0aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2
Mjk4MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBYUGF0aFJlc3VsdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
NzYyOUQzMEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoR3JhbW1hci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoR3JhbW1hci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2QjBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aEV2YWx1YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNYUGF0aEV2YWx1YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYy
QzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoRXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aEV4cHJl
c3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2RTBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTWFBhdGhFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyQzZGMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM3MDBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYy
QzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhSZXN1bHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFBIC8qIENs
aXBib2FyZE1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDbGlwYm9hcmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlw
Ym9hcmRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDbGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk0NzU4QzQ0MzA4QzVGMjE3MDA5QkFGMDUg
LyogS0NhbnZhc1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMjYxOSw2ICsyNzAwLDcgQEAKIAkJ
CQlGNTIzRDJGMzAyREU0NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovLAogCQkJCUE4QzBGNkRD
MDg5NzAxRjEwMEJBNTExNCAvKiBXZWJDb3JlK1NWRyAqLywKIAkJCQlFMUYwNDI0MzA5ODM5Mzg5
MDA2Njk0RUEgLyogeG1sICovLAorCQkJCTFBNzYyOTU3MEEwNzQwQTAwMDk4OUY1QiAvKiB4cGF0
aCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICov
LAogCQkJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJMDg2
N0Q2OUFGRTg0MDI4RkMwMkFBQzA3IC8qIEZyYW1ld29ya3MgKi8sCkBAIC0yNjYyLDYgKzI3NDQs
NTQgQEAKIAkJCXBhdGggPSBSZXNvdXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OworCQkxQTc2Mjk1NzBBMDc0MEEwMDA5ODlGNUIgLyogeHBhdGggKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBNzYyOTU4MEEwNzQwQTAwMDk4OUY1
QiAvKiBpbXBsICovLAorCQkJCTFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1
YXRvci5jcHAgKi8sCisJCQkJMUE3NjI5NzYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVh
dG9yLmggKi8sCisJCQkJMUE3NjI5NzcwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9y
LmlkbCAqLywKKwkJCQkxQTc2Mjk3ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9u
LmNwcCAqLywKKwkJCQkxQTc2Mjk3OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9u
LmggKi8sCisJCQkJMUE3NjI5N0EwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5p
ZGwgKi8sCisJCQkJMUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNw
cCAqLywKKwkJCQkxQTc2Mjk3QzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCAq
LywKKwkJCQkxQTc2Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmNwcCAq
LywKKwkJCQkxQTc2Mjk3RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggKi8s
CisJCQkJMUE3NjI5N0YwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5pZGwgKi8s
CisJCQkJMUE3NjI5ODAwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCAqLywKKwkJ
CQkxQTc2Mjk4MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCAqLywKKwkJCQkxQTc2
Mjk4MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovLAorCQkJKTsKKwkJCXBh
dGggPSB4cGF0aDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFBNzYyOTU4
MEEwNzQwQTAwMDk4OUY1QiAvKiBpbXBsICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkxQTc2Mjk1OTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5j
cHAgKi8sCisJCQkJMUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uaCAqLywK
KwkJCQkxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLywKKwkJCQkx
QTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi8sCisJCQkJMUE3NjI5NjMw
QTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgKi8sCisJCQkJMUE3NjI5NjQw
QTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovLAorCQkJCTFBNzYyOTY1MEEw
NzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLywKKwkJCQkxQTc2Mjk2NjBBMDc0MEEwMDA5ODlG
NUIgLyogcGF0aC5oICovLAorCQkJCTFBNzYyOTY3MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNh
dGUuY3BwICovLAorCQkJCTFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCAq
LywKKwkJCQkxQTc2Mjk2OTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5jcHAgKi8sCisJCQkJMUE3
NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLywKKwkJCQkxQTc2Mjk2QzBBMDc0MEEw
MDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLywKKwkJCQkxQTc2Mjk2RDBBMDc0MEEwMDA5ODlG
NUIgLyogdG9rZW5pemVyLmggKi8sCisJCQkJMUE3NjI5NkUwQTA3NDBBMDAwOTg5RjVCIC8qIHV0
aWwuY3BwICovLAorCQkJCTFBNzYyOTZGMEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmggKi8sCisJ
CQkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCAqLywK
KwkJCQkxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuaCAqLywK
KwkJCQkxQTc2Mjk3MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLnkgKi8sCisJCQkp
OworCQkJcGF0aCA9IGltcGw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1
NTk5OEE1NzA1MkI1OThGMDAxN0E2QzEgLyogQWNjZXNzaWJpbGl0eSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNzQ3LDYgKzI4NzcsMTQgQEAKIAkJCQk2
NURGMzFGMDA5RDFDQzYwMDAwQkUzMjUgLyogSlNUZXh0LmggKi8sCiAJCQkJQTg2NjI5Q0EwOURB
MkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgKi8sCiAJCQkJQTg2NjI5QzkwOURBMkI0NzAw
OTYzM0E1IC8qIEpTVUlFdmVudC5oICovLAorCQkJCTFBNzYyQzZCMEEwNzRGMjYwMDk4OUY1QiAv
KiBKU1hQYXRoRXZhbHVhdG9yLmNwcCAqLywKKwkJCQkxQTc2MkM2QzBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aEV2YWx1YXRvci5oICovLAorCQkJCTFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAv
KiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi8sCisJCQkJMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVC
IC8qIEpTWFBhdGhFeHByZXNzaW9uLmggKi8sCisJCQkJMUE3NjJDNkYwQTA3NEYyNjAwOTg5RjVC
IC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCAqLywKKwkJCQkxQTc2MkM3MDBBMDc0RjI2MDA5ODlG
NUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLywKKwkJCQkxQTc2MkM3MTBBMDc0RjI2MDA5ODlG
NUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgKi8sCisJCQkJMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVC
IC8qIEpTWFBhdGhSZXN1bHQuaCAqLywKIAkJCQk2NURGMzFGMTA5RDFDQzYwMDAwQkUzMjUgLyog
SlNXaGVlbEV2ZW50LmNwcCAqLywKIAkJCQk2NURGMzFGMjA5RDFDQzYwMDAwQkUzMjUgLyogSlNX
aGVlbEV2ZW50LmggKi8sCiAJCQkJNjU2NTgxRDcwOUQxNTA4RDAwMEU2MUQ3IC8qIEpTWE1MSHR0
cFJlcXVlc3QubHV0LmggKi8sCkBAIC0yNzc2LDYgKzI5MTQsOCBAQAogCQkJCTY1NjU4MUFGMDlE
MTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovLAogCQkJCTY1
NjU4MUVBMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmNwcCAqLywKIAkJCQk2NTY1ODFF
QjA5RDE1MDhEMDAwRTYxRDcgLyogWExpbmtOYW1lcy5oICovLAorCQkJCTFBNzYyOUQzMEEwNzQy
NTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovLAorCQkJCTFBNzYyOUQ0MEEwNzQyNTEw
MDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCAqLywKIAkJCQkxNDIwMTFCNTBBMDAzMTMzMDA4MzAz
RjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJEZXJp
dmVkIFNvdXJjZXMiOwpAQCAtNDg0OCw2ICs0OTg4LDI1IEBACiAJCQkJMTREQzBEMzgwOUZFRDA3
MzAwN0IwMjM1IC8qIEpTTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMEM4MjUwOUZGMEVG
NTAwNkIzNkQ5IC8qIGtqc19kb21ub2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDIwMTFCNzBB
MDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUE3NjI5OEQwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCBp
biBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkzMEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5NjBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5ODBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxl
cmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5RTBBMDc0MEEwMDA5ODlGNUIg
LyogWFBhdGhFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUExMEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUE0
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MUE3NjI5QTYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMUE3NjI5QTkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkxQTc2MjlENjBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2
YWx1YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjJDNzYwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3ODBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYy
QzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTU1NjUsNiArNTcyNCwyNSBAQAogCQkJCUJDRkU4RTMyMEEwMkExRDMwMDA5RTYxRCAvKiBXZWJD
b3JlVGV4dFJlbmRlcmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREQzBEMzcwOUZFRDA3MzAw
N0IwMjM1IC8qIEpTTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIwMTFCNjBBMDAzMTMz
MDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFBNzYyOTgzMEEwNzQwQTAwMDk4OUY1QiAvKiBleHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyOThBMEEwNzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUE3NjI5OEMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk4RTBBMDc0MEEwMDA5ODlGNUIgLyogcGF0aC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5MDBBMDc0MEEwMDA5ODlGNUIgLyogcHJlZGlj
YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTkyMEEwNzQwQTAwMDk4OUY1QiAvKiBz
dGVwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTk1MEEwNzQwQTAwMDk4OUY1QiAvKiB0
b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTcwQTA3NDBBMDAwOTg5RjVC
IC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTkwQTA3NDBBMDAwOTg5RjVC
IC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTlEMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkx
QTc2MjlBMDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTFBNzYyOUEzMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlBNTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jl
c29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUE4MEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlENTBBMDc0MjUxMDA5
ODlGNUIgLyogWFBhdGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyQzczMEEw
NzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFBNzYyQzc1MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxQTc2MkM3NzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJDNzkwQTA3NEYyNjAwOTg5RjVCIC8qIEpT
WFBhdGhSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM2QkREMUQwQTAzMUFFQjAwNERG
NEFCIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHJldmlzaW9uIDE0MTc5KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0MCw2ICsyNDAsNyBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdGFydE1h
cmt1cChjb25zCiAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CiAgICAgICAgIGNhc2Ug
Tm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9O
X05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuICIiOwpJbmRleDogV2ViQ29yZS94cGF0aC9Y
UGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVz
cGFjZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIFhQYXRoTmFtZXNwYWNlLmNw
cCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFT
IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiWFBhdGhO
YW1lc3BhY2UuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1hQYXRoTmFtZXNwYWNlOjpYUGF0aE5hbWVzcGFjZSggRG9jdW1lbnQgKnB0ciwgU3RyaW5n
SW1wbCAqcHJlZml4LCBTdHJpbmdJbXBsICp1cmkgKQorCTogTm9kZSggcHRyICksCisJbV9vd25l
ckRvY3VtZW50KCBwdHIgKSwKKwltX3ByZWZpeCggcHJlZml4ICksCisJbV91cmkoIHVyaSApCit7
Cit9CisKK1hQYXRoTmFtZXNwYWNlOjp+WFBhdGhOYW1lc3BhY2UoKQoreworfQorCitEb2N1bWVu
dCAqWFBhdGhOYW1lc3BhY2U6Om93bmVyRG9jdW1lbnQoKSBjb25zdAoreworCXJldHVybiBtX293
bmVyRG9jdW1lbnQ7Cit9CisKK0VsZW1lbnQgKlhQYXRoTmFtZXNwYWNlOjpvd25lckVsZW1lbnQo
KSBjb25zdAoreworCS8vIFhYWAorCXJldHVybiAwOworfQorCitjb25zdCBBdG9taWNTdHJpbmcg
JlhQYXRoTmFtZXNwYWNlOjpwcmVmaXgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWZpeDsK
K30KKworU3RyaW5nIFhQYXRoTmFtZXNwYWNlOjpub2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJlZml4OworfQorCitjb25zdCBBdG9taWNTdHJpbmcgJlhQYXRoTmFtZXNwYWNlOjpu
YW1lc3BhY2VVUkkoKSBjb25zdAoreworICAgIHJldHVybiBtX3VyaTsKK30KKworV2ViQ29yZTo6
Tm9kZTo6Tm9kZVR5cGUgWFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBlKCkgY29uc3QKK3sKKwlyZXR1
cm4gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS94
cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBh
dGhFeHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFeHBy
ZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIFhQYXRoRXhw
cmVzc2lvbkltcGwuY3BwIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor
ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlhQYXRo
UmVzdWx0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCisjaW5jbHVkZSAiaW1wbC9l
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiaW1wbC91dGlsLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFhQYXRoOworICAgIAorUGFzc1JlZlB0cjxYUGF0aEV4cHJl
c3Npb24+IFhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsIGludCYgZWMpCit7CisgICAgWFBh
dGhFeHByZXNzaW9uICpleHByID0gbmV3IFhQYXRoRXhwcmVzc2lvbjsKKyAgICAKKwlFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnJlc29sdmVyID0gcmVzb2x2ZXI7CisgICAgaWYgKCFl
eHByLT5tX3N0YXRlbWVudC5wYXJzZShleHByZXNzaW9uLmRlcHJlY2F0ZWRTdHJpbmcoKSwgZWMp
KSB7CisgICAgICAgIGRlbGV0ZSBleHByOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGV4cHI7Cit9CisKK1Bhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IFhQYXRoRXhw
cmVzc2lvbjo6ZXZhbHVhdGUoTm9kZSAqY29udGV4dE5vZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0
ICpyZXN1bHRfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKwlpZiAoIWlzVmFsaWRDb250ZXh0Tm9kZShjb250
ZXh0Tm9kZSkpIHsKKwkJZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKwkJcmV0dXJuIDA7CisJfQor
ICAgIAorICAgIE5vZGUgKmV2ZW50VGFyZ2V0ID0gY29udGV4dE5vZGUtPm93bmVyRG9jdW1lbnQo
KSA/IAorICAgICAgICBjb250ZXh0Tm9kZS0+b3duZXJEb2N1bWVudCgpIDogY29udGV4dE5vZGU7
CisgICAgCisJWFBhdGhSZXN1bHQqIHJlc3VsdCA9IG5ldyBYUGF0aFJlc3VsdChzdGF0aWNfY2Fz
dDxFdmVudFRhcmdldE5vZGUqPihldmVudFRhcmdldCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlbWVudC5ldmFsdWF0ZShjb250ZXh0Tm9kZSkpOwor
ICAgIAorCWlmICh0eXBlICE9IFhQYXRoUmVzdWx0OjpBTllfVFlQRSkgeworCQlyZXN1bHQtPmNv
bnZlcnRUbyh0eXBlLCBlYyk7CisKKwkJaWYgKGVjKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0
dXJuIHJlc3VsdDsKK30KKworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIFhQYXRoTmFtZXNwYWNlLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVy
aWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBP
UgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAq
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5k
ZWYgWFBBVEhOYW1lc3BhY2VfSAorI2RlZmluZSBYUEFUSE5hbWVzcGFjZV9ICisKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
Cit7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgU3RyaW5nSW1wbDsKKworY2xhc3MgWFBhdGhO
YW1lc3BhY2UgOiBwdWJsaWMgV2ViQ29yZTo6Tm9kZQoreworCXB1YmxpYzoKKwkJWFBhdGhOYW1l
c3BhY2UoIERvY3VtZW50ICpwdHIsCisJCSAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCAq
cHJlZml4LCBTdHJpbmdJbXBsICp1cmkgKTsKKwkJdmlydHVhbCB+WFBhdGhOYW1lc3BhY2UoKTsK
KworCQl2aXJ0dWFsIERvY3VtZW50ICpvd25lckRvY3VtZW50KCkgY29uc3Q7CisJCXZpcnR1YWwg
RWxlbWVudCAqb3duZXJFbGVtZW50KCkgY29uc3Q7CisKKwkJdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcgJnByZWZpeCgpIGNvbnN0OworCQl2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0
OworCQl2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyAmbmFtZXNwYWNlVVJJKCkgY29uc3Q7CisK
KwkJdmlydHVhbCBXZWJDb3JlOjpOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OworCisJ
cHJpdmF0ZToKKwkJRG9jdW1lbnQgKm1fb3duZXJEb2N1bWVudDsKKyAgICAgICAgICAgICAgICBB
dG9taWNTdHJpbmcgbV9wcmVmaXg7CisgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIG1fdXJp
OworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhOYW1lc3BhY2VfSAorCkluZGV4OiBXZWJDb3Jl
L3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFs
dWF0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgorICogWFBhdGhFdmFs
dWF0b3JJbXBsLmNwcCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5v
cmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNpbmNsdWRlICJpbXBsL3V0aWwuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgWFBhdGg7CisgICAgCitQYXNz
UmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gWFBhdGhFdmFsdWF0b3I6OmNyZWF0ZUV4cHJlc3Npb24o
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9uY29kZSkKK3sKKyAgICBSZWZQdHI8WFBhdGhF
eHByZXNzaW9uPiBleHByID0gWFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNzaW9uKGV4cHJl
c3Npb24sIHJlc29sdmVyLCBleGNlcHRpb25jb2RlKTsKKyAgICAKKyAgICByZXR1cm4gZXhwcjsK
K30KKworUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IFhQYXRoRXZhbHVhdG9yOjpjcmVhdGVO
U1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcikKK3sKKwlyZXR1cm4gbmV3IFhQYXRoTlNSZXNv
bHZlcihub2RlUmVzb2x2ZXIpOworfQorCitQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBYUGF0aEV2
YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNS
ZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZXhjZXB0aW9uY29k
ZSkKK3sKKwlpZiAoIWlzVmFsaWRDb250ZXh0Tm9kZShjb250ZXh0Tm9kZSkpIHsKKwkJZXhjZXB0
aW9uY29kZSA9IE5PVF9TVVBQT1JURURfRVJSOworCQlyZXR1cm4gMDsKKwl9CisKKwlSZWZQdHI8
WFBhdGhFeHByZXNzaW9uPiBleHByID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNv
bHZlciwgZXhjZXB0aW9uY29kZSk7CisJaWYoZXhjZXB0aW9uY29kZSkKKwkJcmV0dXJuIDA7Cisg
ICAgCisJcmV0dXJuIGV4cHItPmV2YWx1YXRlKGNvbnRleHROb2RlLCB0eXBlLCByZXN1bHQsIGV4
Y2VwdGlvbmNvZGUpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29s
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBYUGF0aE5TUmVzb2x2ZXJJbXBsLmNwcCAt
IENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aE5T
UmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
WFBhdGhOU1Jlc29sdmVyOjpYUGF0aE5TUmVzb2x2ZXIoIE5vZGUgKm5vZGUgKQorCTogbV9ub2Rl
KCBub2RlICkKK3sKK30KKworU3RyaW5nIFhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNl
VVJJKGNvbnN0IFN0cmluZyYgcHJlZml4KQoreworCS8vIEFwcGFyZW50bHkgTm9kZTo6bG9va3Vw
TmFtZXNwYWNlVVJJIGRvZXNuJ3QgZG8gdGhpcy4KKwlpZiAocHJlZml4ID09ICJ4bWwiKSB7CisJ
CXJldHVybiAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKKwl9CisKKwly
ZXR1cm4gbV9ub2RlID8gbV9ub2RlLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KSA6IFN0cmlu
ZygpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBYUGF0aEV4cHJlc3Npb25JbXBsLmggLSBDb3B5cmlnaHQgMjAwNSBG
cmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBS
RVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2lmbmRlZiBYUEFUSEVYUFJFU1NJT05JTVBMX0gKKyNkZWZpbmUgWFBBVEhFWFBSRVNTSU9OSU1Q
TF9ICisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
CisjaW5jbHVkZSAiaW1wbC9wYXJzZWRzdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CitjbGFzcyBOb2RlOworY2xhc3MgU3RyaW5n
SW1wbDsKKworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworY2xhc3MgWFBhdGhSZXN1bHQ7CisKK2Ns
YXNzIFhQYXRoRXhwcmVzc2lvbiA6IHB1YmxpYyBTaGFyZWQ8WFBhdGhFeHByZXNzaW9uPgorewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gY3JlYXRlRXhw
cmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworCVBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IGV2YWx1
YXRlKE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWFBhdGhSZXN1bHQgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlJiBlYyk7CisJCQorcHJpdmF0ZToKKyAgICBYUGF0aDo6UGFy
c2VkU3RhdGVtZW50IG1fc3RhdGVtZW50OworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhFWFBS
RVNTSU9OSU1QTF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBh
dGggeworCisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yXSBYUGF0aFJlc3VsdCB7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFOWV9UWVBFICAgICAgICAgICAgICAgICAg
ICAgICA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5VTUJFUl9UWVBFICAgICAg
ICAgICAgICAgICAgICA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUUklOR19U
WVBFICAgICAgICAgICAgICAgICAgICA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IEJPT0xFQU5fVFlQRSAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgICA9IDQ7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICAgICA9IDU7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUg
ICA9IDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFICAgICA9IDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFOWV9VTk9SREVS
RURfTk9ERV9UWVBFICAgICAgICA9IDg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZJ
UlNUX09SREVSRURfTk9ERV9UWVBFICAgICAgICA9IDk7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0ICByZXN1bHRUeXBlOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgZG91YmxlICAgICAgICAgIG51bWJlclZhbHVlCisgICAgICAgICAgICBnZXR0ZXIgcmFp
c2VzIChET01FeGNlcHRpb24pOworICAgICAgICAgICAgCisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgc3RyaW5nVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4g
ICAgICAgICBib29sZWFuVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2Vw
dGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgICAgICAgICAgICBzaW5n
bGVOb2RlVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBpbnZhbGlkSXRlcmF0
b3JTdGF0ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgICBzbmFw
c2hvdExlbmd0aAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICBOb2RlIGl0ZXJhdGVOZXh0KCkKKyAgICAgICAgICAgIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgTm9kZSBzbmFwc2hvdEl0ZW0oaW4gdW5zaWduZWQg
bG9uZyBpbmRleCkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICB9Owor
fQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBh
dGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IFhQYXRoRXZhbHVhdG9ySW1wbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFh
YmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBBVEhFVkFM
VUFUT1JfSAorI2RlZmluZSBYUEFUSEVWQUxVQVRPUl9ICisKKyNpbmNsdWRlICJTaGFyZWQuaCIK
KworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7Citj
bGFzcyBOb2RlOworCitjbGFzcyBYUGF0aEV4cHJlc3Npb247CitjbGFzcyBYUGF0aE5TUmVzb2x2
ZXI7CitjbGFzcyBYUGF0aFJlc3VsdDsKKworY29uc3QgaW50IFhQYXRoRXhjZXB0aW9uT2Zmc2V0
ID0gNDAwOworY29uc3QgaW50IFhQYXRoRXhjZXB0aW9uTWF4ID0gNDk5OyAgIAorCitlbnVtIFhQ
YXRoRXhjZXB0aW9uQ29kZSB7IElOVkFMSURfRVhQUkVTU0lPTl9FUlIgPSBYUGF0aEV4Y2VwdGlv
bk9mZnNldCArIDUxLCBUWVBFX0VSUiB9OworCitjbGFzcyBYUGF0aEV2YWx1YXRvciA6IHB1Ymxp
YyBTaGFyZWQ8WFBhdGhFdmFsdWF0b3I+Cit7CitwdWJsaWM6CisgICAgUGFzc1JlZlB0cjxYUGF0
aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5T
UmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIGV4Y2VwdGlvbmNvZGUpOworICAgIFBhc3NSZWZQdHI8WFBhdGhO
U1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcik7CisJUGFzc1Jl
ZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3VsdCAq
cmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZXhjZXB0
aW9uY29kZSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBYUEFUSEVWQUxVQVRPUklNUExfSAorCklu
ZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRo
L1hQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
WFBhdGhOU1Jlc29sdmVySW1wbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFh
YmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBBVEhOU1JF
U09MVkVSSU1QTF9ICisjZGVmaW5lIFhQQVRITlNSRVNPTFZFUklNUExfSAorCisjaW5jbHVkZSAi
U2hhcmVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUKK3sKKworY2xhc3MgTm9kZTsKKworY2xhc3MgWFBhdGhOU1Jlc29sdmVyIDogcHVibGljIFNo
YXJlZDxYUGF0aE5TUmVzb2x2ZXI+Cit7CisJcHVibGljOgorCQlYUGF0aE5TUmVzb2x2ZXIoTm9k
ZSAqbm9kZSk7CisKKwkJU3RyaW5nIGxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcmIHBy
ZWZpeCk7CisKKwlwcml2YXRlOgorCQlOb2RlICptX25vZGU7Cit9OworCit9CisKKyNlbmRpZiAv
LyBYUEFUSE5TUkVTT0xWRVJJTVBMX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJl
c3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9leHByZXNzaW9uLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9leHByZXNzaW9uLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBleHByZXNzaW9uLmNjIC0gQ29weXJp
Z2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4K
KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJleHByZXNzaW9uLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCisjaW5jbHVkZSA8Y21h
dGg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBYUGF0aCB7CisgICAgCitWYWx1ZTo6VmFsdWUoKQoreworfQorCitWYWx1ZTo6VmFsdWUo
Tm9kZSAqdmFsdWUpCisJOiBtX3R5cGUoTm9kZXNldCkKK3sKKyAgICBtX25vZGVzZXQuYXBwZW5k
KHZhbHVlKTsKK30KKworVmFsdWU6OlZhbHVlKGNvbnN0IE5vZGVTZXQmIHZhbHVlKQorICAgIDog
bV90eXBlKE5vZGVzZXQpCisgICAgLCBtX25vZGVzZXQodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpW
YWx1ZSggYm9vbCB2YWx1ZSApCisJOiBtX3R5cGUoIEJvb2xlYW4gKSwKKwltX2Jvb2woIHZhbHVl
ICkKK3sKK30KKworVmFsdWU6OlZhbHVlKCBkb3VibGUgdmFsdWUgKQorCTogbV90eXBlKCBOdW1i
ZXIgKSwKKwltX251bWJlciggdmFsdWUgKQoreworfQorCitWYWx1ZTo6VmFsdWUoIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnZhbHVlICkKKwk6IG1fdHlwZSggU3RyaW5nICksCisJbV9zdHJpbmco
IHZhbHVlICkKK3sKK30KKworVmFsdWU6OlR5cGUgVmFsdWU6OnR5cGUoKSBjb25zdAoreworCXJl
dHVybiBtX3R5cGU7Cit9CisKK2Jvb2wgVmFsdWU6OmlzTm9kZXNldCgpIGNvbnN0Cit7CisJcmV0
dXJuIG1fdHlwZSA9PSBOb2Rlc2V0OworfQorCitib29sIFZhbHVlOjppc0Jvb2xlYW4oKSBjb25z
dAoreworCXJldHVybiBtX3R5cGUgPT0gQm9vbGVhbjsKK30KKworYm9vbCBWYWx1ZTo6aXNOdW1i
ZXIoKSBjb25zdAoreworCXJldHVybiBtX3R5cGUgPT0gTnVtYmVyOworfQorCitib29sIFZhbHVl
Ojppc1N0cmluZygpIGNvbnN0Cit7CisJcmV0dXJuIG1fdHlwZSA9PSBTdHJpbmc7Cit9CisKK05v
ZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKQoreworCWlmIChtX3R5cGUgIT0gTm9kZXNldCkgewor
ICAgICAgICBMT0coWFBhdGgsICJDYW5ub3QgY29udmVydCBhbnl0aGluZyB0byBhIG5vZGVzZXQu
Iik7CisgICAgfQorCXJldHVybiBtX25vZGVzZXQ7Cit9CisKK2NvbnN0IE5vZGVTZXQmIFZhbHVl
Ojp0b05vZGVTZXQoKSBjb25zdAoreworCWlmIChtX3R5cGUgIT0gTm9kZXNldCkgeworICAgICAg
ICBMT0coWFBhdGgsICJDYW5ub3QgY29udmVydCBhbnl0aGluZyB0byBhIG5vZGVzZXQuIik7Cisg
ICAgfQorICAgIAorCXJldHVybiBtX25vZGVzZXQ7ICAgIAorfSAgICAKKworYm9vbCBWYWx1ZTo6
dG9Cb29sZWFuKCkgY29uc3QKK3sKKwlzd2l0Y2ggKCBtX3R5cGUgKSB7CisJCWNhc2UgTm9kZXNl
dDoKKwkJCXJldHVybiAhbV9ub2Rlc2V0LmlzRW1wdHkoKTsKKwkJY2FzZSBCb29sZWFuOgorCQkJ
cmV0dXJuIG1fYm9vbDsKKwkJY2FzZSBOdW1iZXI6CisJCQlyZXR1cm4gbV9udW1iZXIgIT0gMDsK
KwkJY2FzZSBTdHJpbmc6CisJCQlyZXR1cm4gIW1fc3RyaW5nLmlzRW1wdHkoKTsKKwl9CisJcmV0
dXJuIGJvb2woKTsKK30KKworZG91YmxlIFZhbHVlOjp0b051bWJlcigpIGNvbnN0Cit7CisJc3dp
dGNoICggbV90eXBlICkgeworCQljYXNlIE5vZGVzZXQ6CisJCQlyZXR1cm4gVmFsdWUoIHRvU3Ry
aW5nKCkgKS50b051bWJlcigpOworCQljYXNlIE51bWJlcjoKKwkJCXJldHVybiBtX251bWJlcjsK
KwkJY2FzZSBTdHJpbmc6IHsKKwkJCWJvb2wgY2FuQ29udmVydDsKKwkJCURlcHJlY2F0ZWRTdHJp
bmcgcyA9IG1fc3RyaW5nLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworCisJCQlkb3VibGUgdmFsdWUg
PSBzLnRvRG91YmxlKCAmY2FuQ29udmVydCApOworCQkJaWYgKCBjYW5Db252ZXJ0ICkgeworCQkJ
CXJldHVybiB2YWx1ZTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIE5BTjsKKwkJCX0KKwkJfQor
CQljYXNlIEJvb2xlYW46CisJCQlyZXR1cm4gbV9ib29sID8gMSA6IDA7CisJfQorCXJldHVybiBk
b3VibGUoKTsKK30KKworRGVwcmVjYXRlZFN0cmluZyBWYWx1ZTo6dG9TdHJpbmcoKSBjb25zdAor
eworCXN3aXRjaCAoIG1fdHlwZSApIHsKKwkJY2FzZSBOb2Rlc2V0OgorCQkJaWYgKG1fbm9kZXNl
dC5pc0VtcHR5KCkgKSB7CisJCQkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICIiICk7CisJCQl9
CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUobV9ub2Rlc2V0WzBdLmdldCgpKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CisJCWNhc2UgU3RyaW5nOgorCQkJcmV0dXJuIG1fc3RyaW5nOworCQlj
YXNlIE51bWJlcjoKKwkJCWlmICggaXNuYW4oIG1fbnVtYmVyICkgKSB7CisJCQkJcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmcoICJOYU4iICk7CisJCQl9IGVsc2UgaWYgKCBtX251bWJlciA9PSAwICkg
eworCQkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiMCIgKTsKKwkJCX0gZWxzZSBpZiAoIGlz
aW5mKCBtX251bWJlciApICkgeworCQkJCWlmICggc2lnbmJpdCggbV9udW1iZXIgKSA9PSAwICkg
eworCQkJCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggIkluZmluaXR5IiApOworCQkJCX0gZWxz
ZSB7CisJCQkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiLUluZmluaXR5IiApOworCQkJCX0K
KwkJCX0KKwkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoIG1fbnVtYmVyICk7CisJ
CWNhc2UgQm9vbGVhbjoKKwkJCXJldHVybiBtX2Jvb2wgPyBEZXByZWNhdGVkU3RyaW5nKCAidHJ1
ZSIgKQorCQkJICAgICAgICAgICAgICA6IERlcHJlY2F0ZWRTdHJpbmcoICJmYWxzZSIgKTsKKwl9
CisJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKK30KKworRXZhbHVhdGlvbkNvbnRleHQgJkV4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkKK3sKKwlzdGF0aWMgRXZhbHVhdGlvbkNvbnRl
eHQgZXZhbHVhdGlvbkNvbnRleHQ7CisJcmV0dXJuIGV2YWx1YXRpb25Db250ZXh0OworfQorCitF
eHByZXNzaW9uOjpFeHByZXNzaW9uKCkKKwk6IG1fY29uc3RhbnRWYWx1ZSggMCApCit7Cit9CisK
K0V4cHJlc3Npb246On5FeHByZXNzaW9uKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zdWJF
eHByZXNzaW9ucyk7CisgICAgCisJZGVsZXRlIG1fY29uc3RhbnRWYWx1ZTsKK30KKworVmFsdWUg
RXhwcmVzc2lvbjo6ZXZhbHVhdGUoKSBjb25zdAoreworCWlmICggbV9jb25zdGFudFZhbHVlICkg
eworCQlyZXR1cm4gKm1fY29uc3RhbnRWYWx1ZTsKKwl9CisJcmV0dXJuIGRvRXZhbHVhdGUoKTsK
K30KKwordm9pZCBFeHByZXNzaW9uOjphZGRTdWJFeHByZXNzaW9uKEV4cHJlc3Npb24gKmV4cHIp
Cit7CisJbV9zdWJFeHByZXNzaW9ucy5hcHBlbmQoZXhwcik7Cit9CisKK3ZvaWQgRXhwcmVzc2lv
bjo6b3B0aW1pemUoKQoreworCWJvb2wgYWxsU3ViRXhwcmVzc2lvbnNDb25zdGFudCA9IHRydWU7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3ViRXhwcmVzc2lvbnMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc3ViRXhwcmVzc2lvbnNbaV0tPmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgICAgIG1fc3ViRXhwcmVzc2lvbnNbaV0tPm9wdGltaXplKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFsbFN1YkV4cHJlc3Npb25zQ29uc3RhbnQgPSBmYWxzZTsKKyAg
ICB9CisKKwlpZiAoYWxsU3ViRXhwcmVzc2lvbnNDb25zdGFudCkgeworCQltX2NvbnN0YW50VmFs
dWUgPSBuZXcgVmFsdWUoZG9FdmFsdWF0ZSgpKTsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1f
c3ViRXhwcmVzc2lvbnMpOworCQltX3N1YkV4cHJlc3Npb25zLmNsZWFyKCk7CisJfQorfQorCit1
bnNpZ25lZCBpbnQgRXhwcmVzc2lvbjo6c3ViRXhwckNvdW50KCkgY29uc3QKK3sKKwlyZXR1cm4g
bV9zdWJFeHByZXNzaW9ucy5zaXplKCk7Cit9CisKK0V4cHJlc3Npb24qIEV4cHJlc3Npb246OnN1
YkV4cHIodW5zaWduZWQgaSkKK3sKKwlBU1NFUlQoIGkgPCBzdWJFeHByQ291bnQoKSApOworCisJ
cmV0dXJuIG1fc3ViRXhwcmVzc2lvbnNbaV07Cit9CisKK2NvbnN0IEV4cHJlc3Npb24gKkV4cHJl
c3Npb246OnN1YkV4cHIodW5zaWduZWQgaSkgY29uc3QKK3sKKwlBU1NFUlQoaSA8IHN1YkV4cHJD
b3VudCgpKTsKKyAgICAKKyAgICByZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKK30KKworYm9v
bCBFeHByZXNzaW9uOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zdWJFeHByZXNzaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1f
c3ViRXhwcmVzc2lvbnNbaV0tPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzAxIEBACisvKgorICogcHJlZGljYXRlLmNjIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICog
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgInByZWRpY2F0ZS5oIgorI2luY2x1ZGUgImZ1bmN0aW9ucy5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIK
KworI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitOdW1iZXI6Ok51bWJlciggZG91
YmxlIHZhbHVlICkKKwk6IG1fdmFsdWUoIHZhbHVlICkKK3sKK30KKworYm9vbCBOdW1iZXI6Omlz
Q29uc3RhbnQoKSBjb25zdAoreworCXJldHVybiB0cnVlOworfQorCitWYWx1ZSBOdW1iZXI6OmRv
RXZhbHVhdGUoKSBjb25zdAoreworCXJldHVybiBWYWx1ZSggbV92YWx1ZSApOworfQorCitTdHJp
bmdFeHByZXNzaW9uOjpTdHJpbmdFeHByZXNzaW9uKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2
YWx1ZSApCisJOiBtX3ZhbHVlKCB2YWx1ZSApCit7Cit9CisKK2Jvb2wgU3RyaW5nRXhwcmVzc2lv
bjo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVlIFN0cmlu
Z0V4cHJlc3Npb246OmRvRXZhbHVhdGUoKSBjb25zdAoreworCXJldHVybiBWYWx1ZSggbV92YWx1
ZSApOworfQorCitWYWx1ZSBOZWdhdGl2ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJVmFsdWUg
cChzdWJFeHByKDApLT5ldmFsdWF0ZSgpKTsKKwlpZiAoIXAuaXNOdW1iZXIoKSkgeworCQlMT0co
WFBhdGgsICJVbmFyeSBtaW51cyBpcyB1bmRlZmluZWQgZm9yIG5vbi1udW1lcmljIHR5cGVzLiIg
KTsKKwkJcmV0dXJuIFZhbHVlKCk7CisJfQorCXJldHVybiBWYWx1ZSgtcC50b051bWJlcigpKTsK
K30KKworTnVtZXJpY09wOjpOdW1lcmljT3AoIGludCBfb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMs
IEV4cHJlc3Npb24qIHJocyApIDoKKwlvcENvZGUoIF9vcENvZGUgKQoreworCWFkZFN1YkV4cHJl
c3Npb24oIGxocyApOworCWFkZFN1YkV4cHJlc3Npb24oIHJocyApOworfQorCitWYWx1ZSBOdW1l
cmljT3A6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCVZhbHVlIGxocyggc3ViRXhwciggMCApLT5l
dmFsdWF0ZSgpKTsKKwlWYWx1ZSByaHMoIHN1YkV4cHIoIDEgKS0+ZXZhbHVhdGUoKSk7CisgICAg
CisJaWYgKCFsaHMuaXNOdW1iZXIoKSB8fCAhcmhzLmlzTnVtYmVyKCkpIHsKKwkJTE9HKFhQYXRo
LCAiQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIG5vbi1udW1lcmljIHR5cGVzLiIpOworCQly
ZXR1cm4gVmFsdWUoKTsKKwl9CisKKwlkb3VibGUgbGVmdFZhbCA9IGxocy50b051bWJlcigpLCBy
aWdodFZhbCA9IHJocy50b051bWJlcigpOworCisJc3dpdGNoIChvcENvZGUpIHsKKwkJY2FzZSBP
UF9BZGQ6CisJCQlyZXR1cm4gVmFsdWUoIGxlZnRWYWwgKyByaWdodFZhbCApOworCQljYXNlIE9Q
X1N1YjoKKwkJCXJldHVybiBWYWx1ZSggbGVmdFZhbCAtIHJpZ2h0VmFsICk7CisJCWNhc2UgT1Bf
TXVsOgorCQkJcmV0dXJuIFZhbHVlKCBsZWZ0VmFsICogcmlnaHRWYWwgKTsKKwkJY2FzZSBPUF9E
aXY6CisJCQlpZiAoIHJpZ2h0VmFsID09IDAuMCB8fCByaWdodFZhbCA9PSAtMC4wICkKKwkJCQly
ZXR1cm4gVmFsdWUoKTsgLy9EaXZpZGUgYnkgMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gVmFsdWUo
IGxlZnRWYWwgLyByaWdodFZhbCApOworCQljYXNlIE9QX01vZDoKKwkJCWlmICggcmlnaHRWYWwg
PT0gMC4wIHx8IHJpZ2h0VmFsID09IC0wLjAgKQorCQkJCXJldHVybiBWYWx1ZSgpOyAvL0Rpdmlk
ZSBieSAwOworCQkJZWxzZQorCQkJCXJldHVybiBWYWx1ZSggcmVtYWluZGVyKCBsZWZ0VmFsLCBy
aWdodFZhbCApICk7CisJCWNhc2UgT1BfR1Q6CisJCQlyZXR1cm4gVmFsdWUgKCBsZWZ0VmFsID4g
cmlnaHRWYWwgKTsKKwkJY2FzZSBPUF9HRToKKwkJCXJldHVybiBWYWx1ZSAoIGxlZnRWYWwgPj0g
cmlnaHRWYWwgKTsKKwkJY2FzZSBPUF9MVDoKKwkJCXJldHVybiBWYWx1ZSAoIGxlZnRWYWwgPCBy
aWdodFZhbCApOworCQljYXNlIE9QX0xFOgorCQkJcmV0dXJuIFZhbHVlICggbGVmdFZhbCA8PSBy
aWdodFZhbCApOworCQlkZWZhdWx0OgorCQkJYXNzZXJ0KDApOworCQlyZXR1cm4gVmFsdWUoKTsK
Kwl9Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgTnVtZXJpY09wOjpvcE5hbWUoKSBjb25zdAorewor
CXN3aXRjaCAob3BDb2RlKSB7CisJCWNhc2UgT1BfQWRkOgorCQkJcmV0dXJuIERlcHJlY2F0ZWRT
dHJpbmcoICJhZGRpdGlvbiIgKTsKKwkJY2FzZSBPUF9TdWI6CisJCQlyZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZyggInN1YnRyYWN0aW9uIiApOworCQljYXNlIE9QX011bDoKKwkJCXJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCAibXVsdGlwbGljYXRpb24iICk7CisJCWNhc2UgT1BfRGl2OgorCQkJcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJkaXZpc2lvbiIgKTsKKwkJY2FzZSBPUF9Nb2Q6CisJCQly
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggIm1vZHVsbyIgKTsKKwkJY2FzZSBPUF9HVDoKKwkJCXJl
dHVybiBEZXByZWNhdGVkU3RyaW5nKCAicmVsYXRpb25HVCIgKTsKKwkJY2FzZSBPUF9HRToKKwkJ
CXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAicmVsYXRpb25HRSIgKTsKKwkJY2FzZSBPUF9MVDoK
KwkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAicmVsYXRpb25MVCIgKTsKKwkJY2FzZSBPUF9M
RToKKwkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAicmVsYXRpb25MRSIgKTsKKwkJZGVmYXVs
dDoKKwkJCWFzc2VydCgwKTsKKwkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisJfQorfQor
CitFcVRlc3RPcDo6RXFUZXN0T3AoIGludCBfb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJl
c3Npb24qIHJocyApIDoKKwlvcENvZGUoX29wQ29kZSkKK3sKKwlhZGRTdWJFeHByZXNzaW9uKCBs
aHMgKTsKKwlhZGRTdWJFeHByZXNzaW9uKCByaHMgKTsKK30KKworVmFsdWUgRXFUZXN0T3A6OmRv
RXZhbHVhdGUoKSBjb25zdAoreworCVZhbHVlIGxocyggc3ViRXhwciggMCApLT5ldmFsdWF0ZSgp
ICk7CisJVmFsdWUgcmhzKCBzdWJFeHByKCAxICktPmV2YWx1YXRlKCkgKTsKKworCWJvb2wgZXF1
YWw7CisJaWYgKCBsaHMuaXNCb29sZWFuKCkgfHwgcmhzLmlzQm9vbGVhbigpICkgeworCQllcXVh
bCA9ICggbGhzLnRvQm9vbGVhbigpID09IHJocy50b0Jvb2xlYW4oKSApOworCX0gZWxzZSBpZiAo
IGxocy5pc051bWJlcigpIHx8IHJocy5pc051bWJlcigpICkgeworCQllcXVhbCA9ICggbGhzLnRv
TnVtYmVyKCkgPT0gcmhzLnRvTnVtYmVyKCkgKTsKKwl9IGVsc2UgeworCQllcXVhbCA9ICggbGhz
LnRvU3RyaW5nKCkgPT0gcmhzLnRvU3RyaW5nKCkgKTsKKwl9CisKKwlpZiAoIG9wQ29kZSA9PSBP
UF9FUSApCisJCXJldHVybiBWYWx1ZSggZXF1YWwgKTsKKwllbHNlCisJCXJldHVybiBWYWx1ZSgg
IWVxdWFsICk7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgRXFUZXN0T3A6Om9wTmFtZSgpIGNvbnN0
Cit7CisJaWYgKCBvcENvZGUgPT0gT1BfRVEgKQorCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZygg
InJlbGF0aW9uRVEiICk7CisJZWxzZQorCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggInJlbGF0
aW9uTkUiICk7Cit9CisKK0xvZ2ljYWxPcDo6TG9naWNhbE9wKCBpbnQgX29wQ29kZSwgRXhwcmVz
c2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMgKSA6CisJb3BDb2RlKCBfb3BDb2RlICkKK3sKKwlh
ZGRTdWJFeHByZXNzaW9uKCBsaHMgKTsKKwlhZGRTdWJFeHByZXNzaW9uKCByaHMgKTsKK30KKwor
Ym9vbCBMb2dpY2FsT3A6OnNob3J0Q2lyY3VpdE9uKCkgY29uc3QKK3sKKwlpZiAob3BDb2RlID09
IE9QX0FuZCkKKwkJcmV0dXJuIGZhbHNlOyAvL2ZhbHNlIGFuZCBmb28KKwllbHNlCisJCXJldHVy
biB0cnVlOyAgLy90cnVlIG9yIGJhcgorfQorCitib29sIExvZ2ljYWxPcDo6aXNDb25zdGFudCgp
IGNvbnN0Cit7CisJcmV0dXJuIHN1YkV4cHIoIDAgKS0+aXNDb25zdGFudCgpICYmCisJICAgICAg
IHN1YkV4cHIoIDAgKS0+ZXZhbHVhdGUoKS50b0Jvb2xlYW4oKSA9PSBzaG9ydENpcmN1aXRPbigp
OworfQorCitEZXByZWNhdGVkU3RyaW5nIExvZ2ljYWxPcDo6b3BOYW1lKCkgY29uc3QKK3sKKwlp
ZiAoIG9wQ29kZSA9PSBPUF9BbmQgKQorCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggImNvbmp1
bmN0aW9uIiApOworCWVsc2UKKwkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJkaXNqdW5jdGlv
biIgKTsKK30KKworVmFsdWUgTG9naWNhbE9wOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlWYWx1
ZSBsaHMoIHN1YkV4cHIoIDAgKS0+ZXZhbHVhdGUoKSApOworCisJLy8gVGhpcyBpcyBub3Qgb25s
eSBhbiBvcHRpbWl6YXRpb24sIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoCisJLy8gZGljdGF0
ZXMgdGhhdCB3ZSBtdXN0IGRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbgorCWJvb2wgbGhzQm9v
bCA9IGxocy50b0Jvb2xlYW4oKTsKKwlpZiAoIGxoc0Jvb2wgPT0gc2hvcnRDaXJjdWl0T24oKSAp
IHsKKwkJcmV0dXJuIFZhbHVlKCBsaHNCb29sICk7CisJfQorCisJcmV0dXJuIFZhbHVlKCBzdWJF
eHByKCAxICktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkgKTsKK30KKworRGVwcmVjYXRlZFN0cmlu
ZyBVbmlvbjo6b3BOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZygidW5p
b24iKTsKK30KKworVmFsdWUgVW5pb246OmRvRXZhbHVhdGUoKSBjb25zdAoreworCVZhbHVlIGxo
cyA9IHN1YkV4cHIoIDAgKS0+ZXZhbHVhdGUoKTsKKwlWYWx1ZSByaHMgPSBzdWJFeHByKCAxICkt
PmV2YWx1YXRlKCk7CisJaWYgKCAhbGhzLmlzTm9kZXNldCgpIHx8ICFyaHMuaXNOb2Rlc2V0KCkg
KSB7CisJCUxPRyhYUGF0aCwgIlVuaW9uIG9wZXJhdG9yICd8JyB3b3JrcyBvbmx5IHdpdGggbm9k
ZXNldHMuIiApOworCQlyZXR1cm4gVmFsdWUoTm9kZVNldCgpKTsKKwl9CisgICAgCisgICAgTm9k
ZVNldCBsaHNOb2RlcyA9IGxocy50b05vZGVTZXQoKTsKKyAgICBOb2RlU2V0IHJoc05vZGVzID0g
cmhzLnRvTm9kZVNldCgpOworICAgIE5vZGVTZXQgcmVzdWx0ID0gbGhzTm9kZXM7CisgICAgCisg
ICAgSGFzaFNldDxOb2RlICo+IG5vZGVzOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByaHNOb2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICBOb2RlICpub2RlID0gcmhzTm9k
ZXNbaV0uZ2V0KCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVzLmNvbnRhaW5zKG5vZGUp
KSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgbm9kZXMu
YWRkKG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBWYWx1ZShyZXN1
bHQpOworfQorCitQcmVkaWNhdGU6OlByZWRpY2F0ZSggRXhwcmVzc2lvbiAqZXhwciApCisJOiBt
X2V4cHIoIGV4cHIgKQoreworfQorCitQcmVkaWNhdGU6On5QcmVkaWNhdGUoKQoreworCWRlbGV0
ZSBtX2V4cHI7Cit9CisKK2Jvb2wgUHJlZGljYXRlOjpldmFsdWF0ZSgpIGNvbnN0Cit7CisJQVNT
RVJUKG1fZXhwciAhPSAwKTsKKworCVZhbHVlIHJlc3VsdCggbV9leHByLT5ldmFsdWF0ZSgpICk7
CisKKwkvLyBmb29bM10gcmVhbGx5IG1lYW5zIGZvb1twb3NpdGlvbigpPTNdCisJaWYgKCByZXN1
bHQuaXNOdW1iZXIoKSApIHsKKwkJRXhwcmVzc2lvbiAqcmVhbEV4cHIgPSBuZXcgRXFUZXN0T3Ao
RXFUZXN0T3A6Ok9QX0VRLAorCQkgICAgICAgICAgICAgICAgRnVuY3Rpb25MaWJyYXJ5OjpzZWxm
KCkuZ2V0RnVuY3Rpb24oICJwb3NpdGlvbiIgKSwKKwkJICAgICAgICAgICAgICAgIG5ldyBOdW1i
ZXIoIHJlc3VsdC50b051bWJlcigpICkgKTsKKwkJcmVzdWx0ID0gcmVhbEV4cHItPmV2YWx1YXRl
KCk7CisJCWRlbGV0ZSByZWFsRXhwcjsKKwl9CisKKwlyZXR1cm4gcmVzdWx0LnRvQm9vbGVhbigp
OworfQorCit2b2lkIFByZWRpY2F0ZTo6b3B0aW1pemUoKQoreworCW1fZXhwci0+b3B0aW1pemUo
KTsKK30KKworfQorfQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvcGF0aC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94
cGF0aC9pbXBsL3BhdGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIHBh
dGguaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFBBVEhfSAorI2RlZmluZSBQQVRIX0gKKwor
I2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJzdGVwLmgiCisKKyNpbmNsdWRlIDxr
eG1sY29yZS9WZWN0b3IuaD4KKworZXh0ZXJuIGludCB4cGF0aHl5cGFyc2UoKTsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitjbGFzcyBGaWx0ZXIg
OiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgorCUZpbHRlcihFeHByZXNzaW9uKiBleHBy
LCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRl
Kj4oKSk7CisJdmlydHVhbCB+RmlsdGVyKCk7CisKK3ByaXZhdGU6CisJdmlydHVhbCBWYWx1ZSBk
b0V2YWx1YXRlKCkgY29uc3Q7CisKKwlFeHByZXNzaW9uICptX2V4cHI7CisgICAgVmVjdG9yPFBy
ZWRpY2F0ZSAqPiBtX3ByZWRpY2F0ZXM7Cit9OworCitjbGFzcyBMb2NhdGlvblBhdGggOiBwdWJs
aWMgRXhwcmVzc2lvbgoreworZnJpZW5kIGludCA6OnhwYXRoeXlwYXJzZSgpOworcHVibGljOgor
CUxvY2F0aW9uUGF0aCgpOworCXZpcnR1YWwgfkxvY2F0aW9uUGF0aCgpOworCisJdm9pZCBvcHRp
bWl6ZSgpOworCitwcml2YXRlOgorCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
CisgICAgVmVjdG9yPFN0ZXAgKj4gbV9zdGVwczsKKwlib29sIG1fYWJzb2x1dGU7Cit9OworCitj
bGFzcyBQYXRoIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKwlQYXRoKCBGaWx0ZXIg
KmZpbHRlciwgTG9jYXRpb25QYXRoICpwYXRoICk7CisJdmlydHVhbCB+UGF0aCgpOworCitwcml2
YXRlOgorCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisJRmlsdGVyICptX2Zp
bHRlcjsKKwlMb2NhdGlvblBhdGggKm1fcGF0aDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFBB
VEhfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogcGFyc2Vkc3RhdGVtZW50LmNjIC0gQ29weXJp
Z2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4K
KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInBhcnNlZHN0YXRlbWVu
dC5oIgorI2luY2x1ZGUgInBhdGguaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7
CisKK2V4dGVybiBFeHByZXNzaW9uICpwYXJzZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRl
bWVudCwgaW50JiBlYyk7CisKK1BhcnNlZFN0YXRlbWVudDo6UGFyc2VkU3RhdGVtZW50KCkKKwk6
IG1fZXhwciggMCApCit7Cit9CisKK1BhcnNlZFN0YXRlbWVudDo6flBhcnNlZFN0YXRlbWVudCgp
Cit7CisJZGVsZXRlIG1fZXhwcjsKK30KKworYm9vbCBQYXJzZWRTdGF0ZW1lbnQ6OnBhcnNlKGNv
bnN0IFN0cmluZyYgc3RhdGVtZW50LCBpbnQmIGVjKQoreworCWRlbGV0ZSBtX2V4cHI7CisgICAg
CisJbV9leHByID0gcGFyc2VTdGF0ZW1lbnQoc3RhdGVtZW50LCBlYyk7CisgICAgCisgICAgcmV0
dXJuIChtX2V4cHIgIT0gMCk7Cit9CisKK3ZvaWQgUGFyc2VkU3RhdGVtZW50OjpvcHRpbWl6ZSgp
Cit7CisJaWYgKCFtX2V4cHIpCisJCXJldHVybjsKKworCW1fZXhwci0+b3B0aW1pemUoKTsKK30K
KworVmFsdWUgUGFyc2VkU3RhdGVtZW50OjpldmFsdWF0ZShOb2RlICpjb250ZXh0KSBjb25zdAor
eworCUV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IGNvbnRleHQ7CisJcmV0
dXJuIG1fZXhwci0+ZXZhbHVhdGUoKTsKK30KKworfQorfQpJbmRleDogV2ViQ29yZS94cGF0aC9p
bXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2lt
cGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9p
bXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIHZhcmlhYmxlcmVmZXJlbmNlLmNjIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICog
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgInZhcmlhYmxlcmVmZXJlbmNlLmgiCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGgg
eworICAgIAorVmFyaWFibGVSZWZlcmVuY2U6OlZhcmlhYmxlUmVmZXJlbmNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKKwk6IG1fbmFtZShuYW1lKQoreworfQorCitib29sIFZhcmlhYmxlUmVmZXJlbmNl
Ojppc0NvbnN0YW50KCkgY29uc3QKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIFZhcmlh
YmxlUmVmZXJlbmNlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiogYmluZGluZ3MgPSAmZXZhbHVhdGlvbkNvbnRleHQoKS52YXJpYWJsZUJpbmRpbmdzOwor
CWlmICghYmluZGluZ3MtPmNvbnRhaW5zKG1fbmFtZSkpIHsKKwkJLy8gWFhYIFdoYXQgdG8gZG8g
aWYgYW4gdW5rbm93biB2YXJpYWJsZSBpcyByZWZlcmVuY2VkPworCQlyZXR1cm4gVmFsdWUoICIi
ICk7CisJfQorCXJldHVybiBWYWx1ZShiaW5kaW5ncy0+Z2V0KG1fbmFtZSkuZGVwcmVjYXRlZFN0
cmluZygpKTsKK30KKworfQorfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvZXhwcmVzc2lv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9leHByZXNzaW9uLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvZXhwcmVzc2lvbi5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGV4cHJlc3Npb24uaCAtIENvcHlyaWdodCAyMDA1IEZy
ZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
CisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aWZuZGVmIEVYUFJFU1NJT05fSAorI2RlZmluZSBFWFBSRVNTSU9OX0gKKworI2luY2x1ZGUgInV0
aWwuaCIKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CisKKyNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7CitjbGFzcyBY
UGF0aE5TUmVzb2x2ZXI7CisKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorc3RydWN0IEV2
YWx1YXRpb25Db250ZXh0Cit7CisJRXZhbHVhdGlvbkNvbnRleHQoKSA6IG5vZGUoIDAgKSwgc2l6
ZSggMCApLCBwb3NpdGlvbiggMCApLCByZXNvbHZlciggMCApIHsgfQorCisJV2ViQ29yZTo6Tm9k
ZSAqbm9kZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBwb3NpdGlvbjsK
KyAgICBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgV2ViQ29yZTo6U3RyaW5nPiB2YXJpYWJsZUJp
bmRpbmdzOworCisJLyogVGhlIGZ1bmN0aW9uIGxpYnJhcnkgaXMgZ2xvYmFsbHkgYWNjZXNzaWJs
ZSB0aHJvdWdoCisJICogRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkKKwkgKi8KKwlXZWJDb3JlOjpY
UGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyOworfTsKKworY2xhc3MgVmFsdWUKK3sKK3B1YmxpYzoK
KwllbnVtIFR5cGUgeworCQlOb2Rlc2V0LCBCb29sZWFuLCBOdW1iZXIsIFN0cmluZworCX07CisK
KwlWYWx1ZSgpOworCWV4cGxpY2l0IFZhbHVlKFdlYkNvcmU6Ok5vZGUgKnZhbHVlKTsKKyAgICBl
eHBsaWNpdCBWYWx1ZShjb25zdCBOb2RlU2V0JiB2YWx1ZSk7CisJZXhwbGljaXQgVmFsdWUoYm9v
bCB2YWx1ZSk7CisJZXhwbGljaXQgVmFsdWUoZG91YmxlIHZhbHVlKTsKKwlleHBsaWNpdCBWYWx1
ZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1ZSk7CisKKwlUeXBlIHR5cGUoKSBjb25zdDsK
Kwlib29sIGlzTm9kZXNldCgpIGNvbnN0OworCWJvb2wgaXNCb29sZWFuKCkgY29uc3Q7CisJYm9v
bCBpc051bWJlcigpIGNvbnN0OworCWJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKworICAgIE5vZGVT
ZXQmIHRvTm9kZVNldCgpOworICAgIGNvbnN0IE5vZGVTZXQmIHRvTm9kZVNldCgpIGNvbnN0Owor
ICAgIAorCWJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CisJZG91YmxlIHRvTnVtYmVyKCkgY29uc3Q7
CisJRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorCVR5cGUg
bV90eXBlOworICAgIE5vZGVTZXQgbV9ub2Rlc2V0OworCWJvb2wgbV9ib29sOworCWRvdWJsZSBt
X251bWJlcjsKKwlEZXByZWNhdGVkU3RyaW5nIG1fc3RyaW5nOworfTsKKworY2xhc3MgRXhwcmVz
c2lvbgoreworcHVibGljOgorICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29udGV4dCAmZXZhbHVhdGlv
bkNvbnRleHQoKTsKKworICAgIEV4cHJlc3Npb24oKTsKKyAgICB2aXJ0dWFsIH5FeHByZXNzaW9u
KCk7CisgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0OworCisgICAgdm9pZCBhZGRT
dWJFeHByZXNzaW9uKEV4cHJlc3Npb24gKmV4cHIpOworICAgIHZvaWQgb3B0aW1pemUoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdW5z
aWduZWQgaW50IHN1YkV4cHJDb3VudCgpIGNvbnN0OworICAgIEV4cHJlc3Npb24gKnN1YkV4cHIo
dW5zaWduZWQgaSk7CisgICAgY29uc3QgRXhwcmVzc2lvbiAqc3ViRXhwcih1bnNpZ25lZCBpKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdCA9
IDA7CisKKyAgICBWZWN0b3I8RXhwcmVzc2lvbiAqPiBtX3N1YkV4cHJlc3Npb25zOworICAgIFZh
bHVlICptX2NvbnN0YW50VmFsdWU7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBFWFBSRVNTSU9O
X0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
eHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTYgQEAKKy8q
CisgKiBwcmVkaWNhdGUuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtk
ZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFBSRURJQ0FURV9ICisj
ZGVmaW5lIFBSRURJQ0FURV9ICisKKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorY2xhc3MgTnVtYmVyIDog
cHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKwlOdW1iZXIoZG91YmxlIHZhbHVlKTsKKwor
CWJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorCXZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworCisJZG91YmxlIG1fdmFsdWU7Cit9OworCitjbGFzcyBTdHJpbmdF
eHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKwlTdHJpbmdFeHByZXNz
aW9uKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlKTsKKworCWJvb2wgaXNDb25zdGFudCgp
IGNvbnN0OworCitwcml2YXRlOgorCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
CisJRGVwcmVjYXRlZFN0cmluZyBtX3ZhbHVlOworfTsKKworY2xhc3MgTmVnYXRpdmUgOiBwdWJs
aWMgRXhwcmVzc2lvbgoreworcHJpdmF0ZToKKwl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKK307CisKK2NsYXNzIEJpbmFyeUV4cHJCYXNlIDogcHVibGljIEV4cHJlc3Npb24KK3sK
K3Byb3RlY3RlZDoKKwl2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3QgPSAw
OworfTsKKworY2xhc3MgTnVtZXJpY09wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7CitwdWJs
aWM6CisJZW51bSB7CisJCU9QX0FkZCA9IDEsCisJCU9QX1N1YiwKKwkJT1BfTXVsLAorCQlPUF9E
aXYsCisJCU9QX01vZCwKKwkJT1BfR1QsCisJCU9QX0xULAorCQlPUF9HRSwKKwkJT1BfTEUKKwl9
OworCisJTnVtZXJpY09wKGludCBvcENvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiog
cmhzICk7CisKK3ByaXZhdGU6CisJdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIG9wTmFtZSgpIGNv
bnN0OworCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCWludCBvcENvZGU7Cit9
OworCitjbGFzcyBFcVRlc3RPcCA6IHB1YmxpYyBCaW5hcnlFeHByQmFzZQoreworcHVibGljOgor
CWVudW0geworCQlPUF9FUSA9IDEsCisJCU9QX05FCisJfTsKKworCUVxVGVzdE9wKGludCBvcENv
ZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhzKTsKKworcHJpdmF0ZToKKwl2aXJ0
dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3Q7CisJdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7CisJaW50IG9wQ29kZTsKK307CisKK2NsYXNzIExvZ2ljYWxPcCA6IHB1
YmxpYyBCaW5hcnlFeHByQmFzZQoreworcHVibGljOgorCWVudW0geworCQlPUF9BbmQgPSAxLAor
CQlPUF9PcgorCX07CisKKwlMb2dpY2FsT3AoIGludCBvcENvZGUsIEV4cHJlc3Npb24qIGxocywg
RXhwcmVzc2lvbiogcmhzICk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0
OworCitwcml2YXRlOgorCWJvb2wgc2hvcnRDaXJjdWl0T24oKSBjb25zdDsKKwl2aXJ0dWFsIERl
cHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3Q7CisJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3Q7CisJaW50IG9wQ29kZTsKK307CisKK2NsYXNzIFVuaW9uIDogcHVibGljIEJpbmFy
eUV4cHJCYXNlCit7Citwcml2YXRlOgorCXZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBvcE5hbWUo
KSBjb25zdDsKKwl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNz
IFByZWRpY2F0ZQoreworcHVibGljOgorCVByZWRpY2F0ZSggRXhwcmVzc2lvbiAqZXhwciApOwor
CX5QcmVkaWNhdGUoKTsKKworCWJvb2wgZXZhbHVhdGUoKSBjb25zdDsKKworCXZvaWQgb3B0aW1p
emUoKTsKKworcHJpdmF0ZToKKwlQcmVkaWNhdGUoIGNvbnN0IFByZWRpY2F0ZSAmcmhzICk7CisJ
UHJlZGljYXRlICZvcGVyYXRvcj0oIGNvbnN0IFByZWRpY2F0ZSAmcmhzICk7CisKKwlFeHByZXNz
aW9uICptX2V4cHI7Cit9OworCit9Cit9CisjZW5kaWYgLy8gUFJFRElDQVRFX0gKKwpJbmRleDog
V2ViQ29yZS94cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2lt
cGwvZnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MTQgQEAKKy8qCisgKiBm
dW5jdGlvbnMuY2MgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3Jn
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
CisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiZnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmFt
ZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIK
KworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQ
YXRoIHsKKyAgICAgICAgCisjZGVmaW5lIERFRklORV9GVU5DVElPTl9DUkVBVE9SKENsYXNzKSBc
CitzdGF0aWMgRnVuY3Rpb24gKmNyZWF0ZSMjQ2xhc3MoKSB7IHJldHVybiBuZXcgQ2xhc3M7IH0K
KworY2xhc3MgSW50ZXJ2YWwKK3sKKwlwdWJsaWM6CisJCXN0YXRpYyBjb25zdCBpbnQgSW5mID0t
MTsKKworCQlJbnRlcnZhbCgpOworCQlJbnRlcnZhbCggaW50IHZhbHVlICk7CisJCUludGVydmFs
KCBpbnQgbWluLCBpbnQgbWF4ICk7CisKKwkJYm9vbCBjb250YWlucyggaW50IHZhbHVlICkgY29u
c3Q7CisKKwkJRGVwcmVjYXRlZFN0cmluZyBhc1N0cmluZygpIGNvbnN0OworCisJcHJpdmF0ZToK
KwkJaW50IG1fbWluOworCQlpbnQgbV9tYXg7Cit9OworCitjbGFzcyBGdW5MYXN0IDogcHVibGlj
IEZ1bmN0aW9uCit7CisJcHVibGljOgorCQl2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0
OworCisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitjbGFzcyBGdW5Qb3NpdGlvbiA6IHB1YmxpYyBGdW5jdGlvbgoreworCXB1YmxpYzoKKwkJdmly
dHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFs
dWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQ291bnQgOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKwlwdWJsaWM6CisJCXZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisK
Kwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2Ns
YXNzIEZ1bkxvY2FsTmFtZSA6IHB1YmxpYyBGdW5jdGlvbgoreworCXB1YmxpYzoKKwkJdmlydHVh
bCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTmFtZXNwYWNlVVJJIDogcHVibGlj
IEZ1bmN0aW9uCit7CisJcHVibGljOgorCQl2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0
OworCisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitjbGFzcyBGdW5OYW1lIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHVibGljOgorCQl2aXJ0dWFs
IGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBk
b0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdHJpbmcgOiBwdWJsaWMgRnVuY3Rp
b24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307
CisKK2NsYXNzIEZ1bkNvbmNhdCA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3RhcnRzV2l0
aCA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFs
dWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQ29udGFpbnMgOiBwdWJsaWMgRnVuY3Rpb24K
K3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1blN1YnN0cmluZ0JlZm9yZSA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6
CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3Vi
c3RyaW5nQWZ0ZXIgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZh
bHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blN1YnN0cmluZyA6IHB1Ymxp
YyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OworfTsKKworY2xhc3MgRnVuU3RyaW5nTGVuZ3RoIDogcHVibGljIEZ1bmN0aW9uCit7CisJ
cHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFz
cyBGdW5Ob3JtYWxpemVTcGFjZSA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuVHJhbnNsYXRl
IDogcHVibGljIEZ1bmN0aW9uCit7CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1
YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Cb29sZWFuIDogcHVibGljIEZ1bmN0aW9uCit7
CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitj
bGFzcyBGdW5Ob3QgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZh
bHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blRydWUgOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKwlwdWJsaWM6CisJCXZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisK
Kwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2Ns
YXNzIEZ1bkZhbHNlIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHVibGljOgorCQl2aXJ0dWFsIGJv
b2wgaXNDb25zdGFudCgpIGNvbnN0OworCisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5MYW5nIDogcHVibGljIEZ1bmN0aW9uCit7
CisJcHVibGljOgorCQl2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisJcHJpdmF0
ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5O
dW1iZXIgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blN1bSA6IHB1YmxpYyBGdW5jdGlvbgor
eworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKwor
Y2xhc3MgRnVuRmxvb3IgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkNlaWxpbmcgOiBwdWJs
aWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKK307CisKK2NsYXNzIEZ1blJvdW5kIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHJpdmF0
ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitERUZJTkVfRlVO
Q1RJT05fQ1JFQVRPUiggRnVuTGFzdCApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuUG9z
aXRpb24gKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkNvdW50ICkKK0RFRklORV9GVU5D
VElPTl9DUkVBVE9SKCBGdW5Mb2NhbE5hbWUgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1
bk5hbWVzcGFjZVVSSSApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuTmFtZSApCisKK0RF
RklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5TdHJpbmcgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFU
T1IoIEZ1bkNvbmNhdCApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuU3RhcnRzV2l0aCAp
CitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuQ29udGFpbnMgKQorREVGSU5FX0ZVTkNUSU9O
X0NSRUFUT1IoIEZ1blN1YnN0cmluZ0JlZm9yZSApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUigg
RnVuU3Vic3RyaW5nQWZ0ZXIgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blN1YnN0cmlu
ZyApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuU3RyaW5nTGVuZ3RoICkKK0RFRklORV9G
VU5DVElPTl9DUkVBVE9SKCBGdW5Ob3JtYWxpemVTcGFjZSApCitERUZJTkVfRlVOQ1RJT05fQ1JF
QVRPUiggRnVuVHJhbnNsYXRlICkKKworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkJvb2xl
YW4gKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bk5vdCApCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUiggRnVuVHJ1ZSApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuRmFsc2UgKQor
REVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkxhbmcgKQorCitERUZJTkVfRlVOQ1RJT05fQ1JF
QVRPUiggRnVuTnVtYmVyICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5TdW0gKQorREVG
SU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkZsb29yICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KCBGdW5DZWlsaW5nICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5Sb3VuZCApCisKKyN1
bmRlZiBERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUgorCitJbnRlcnZhbDo6SW50ZXJ2YWwoKQorCTog
bV9taW4oIEluZiApLAorCW1fbWF4KCBJbmYgKQoreworfQorCitJbnRlcnZhbDo6SW50ZXJ2YWwo
IGludCB2YWx1ZSApCisJOiBtX21pbiggdmFsdWUgKSwKKwltX21heCggdmFsdWUgKQoreworfQor
CitJbnRlcnZhbDo6SW50ZXJ2YWwoIGludCBtaW4sIGludCBtYXggKQorCTogbV9taW4oIG1pbiAp
LAorCW1fbWF4KCBtYXggKQoreworfQorCitib29sIEludGVydmFsOjpjb250YWlucyggaW50IHZh
bHVlICkgY29uc3QKK3sKKwlpZiAoIG1fbWluID09IEluZiAmJiBtX21heCA9PSBJbmYgKSB7CisJ
CXJldHVybiB0cnVlOworCX0KKworCWlmICggbV9taW4gPT0gSW5mICkgeworCQlyZXR1cm4gdmFs
dWUgPD0gbV9tYXg7CisJfQorCisJaWYgKCBtX21heCA9PSBJbmYgKSB7CisJCXJldHVybiB2YWx1
ZSA+PSBtX21pbjsKKwl9CisKKwlyZXR1cm4gdmFsdWUgPj0gbV9taW4gJiYgdmFsdWUgPD0gbV9t
YXg7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgSW50ZXJ2YWw6OmFzU3RyaW5nKCkgY29uc3QKK3sK
KwlEZXByZWNhdGVkU3RyaW5nIHMgPSAiWyI7CisKKwlpZiAoIG1fbWluID09IEluZiApIHsKKwkJ
cyArPSAiLUluZmluaXR5IjsKKwl9IGVsc2UgeworCQlzICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlciggbV9taW4gKTsKKwl9CisKKwlzICs9ICIuLiI7CisKKwlpZiAoIG1fbWF4ID09IEluZiAp
IHsKKwkJcyArPSAiSW5maW5pdHkiOworCX0gZWxzZSB7CisJCXMgKz0gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKCBtX21heCApOworCX0KKworCXMgKz0gIl0iOworCisJcmV0dXJuIHM7Cit9CisK
K3ZvaWQgRnVuY3Rpb246OnNldEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+ICZh
cmdzKQoreworICAgIFZlY3RvcjxFeHByZXNzaW9uKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFy
Z3MuZW5kKCk7CisKKyAgICBmb3IgKFZlY3RvcjxFeHByZXNzaW9uKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7IGl0KyspCisgICAgICAgIGFkZFN1YkV4cHJl
c3Npb24oKml0KTsKK30KKwordm9pZCBGdW5jdGlvbjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisJbV9uYW1lID0gbmFtZTsKK30KKworRXhwcmVzc2lvbiAqRnVuY3Rpb246OmFyZyhp
bnQgaSkKK3sKKwlyZXR1cm4gc3ViRXhwcihpKTsKK30KKworY29uc3QgRXhwcmVzc2lvbiAqRnVu
Y3Rpb246OmFyZyhpbnQgaSkgY29uc3QKK3sKKwlyZXR1cm4gc3ViRXhwcihpKTsKK30KKwordW5z
aWduZWQgaW50IEZ1bmN0aW9uOjphcmdDb3VudCgpIGNvbnN0Cit7CisJcmV0dXJuIHN1YkV4cHJD
b3VudCgpOworfQorCitTdHJpbmcgRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworCXJldHVybiBt
X25hbWU7Cit9CisKK1ZhbHVlIEZ1bkxhc3Q6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCXJldHVy
biBWYWx1ZShkb3VibGUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5zaXplKSk7Cit9
CisKK2Jvb2wgRnVuTGFzdDo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIGZhbHNlOwor
fQorCitWYWx1ZSBGdW5Qb3NpdGlvbjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJcmV0dXJuIFZh
bHVlKGRvdWJsZShFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uKSk7Cit9
CisKK2Jvb2wgRnVuUG9zaXRpb246OmlzQ29uc3RhbnQoKSBjb25zdAoreworCXJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBGdW5Mb2NhbE5hbWU6OmlzQ29uc3RhbnQoKSBjb25zdAoreworCXJldHVy
biBmYWxzZTsKK30KKworVmFsdWUgRnVuTG9jYWxOYW1lOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sK
KwlOb2RlICpub2RlID0gMDsKKwlpZiAoIGFyZ0NvdW50KCkgPiAwICkgeworCQlWYWx1ZSBhID0g
YXJnKCAwICktPmV2YWx1YXRlKCk7CisJCWlmICggYS5pc05vZGVzZXQoKSApIHsKKwkJCW5vZGUg
PSBhLnRvTm9kZVNldCgpWzBdLmdldCgpOworCQl9CisJfQorCisJaWYgKCFub2RlKQorCQlub2Rl
ID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworCisJcmV0dXJuIFZhbHVlKG5vZGUtPmxvY2Fs
TmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisKK2Jvb2wgRnVuTmFtZXNwYWNlVVJJOjpp
c0NvbnN0YW50KCkgY29uc3QKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1bk5hbWVz
cGFjZVVSSTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJTm9kZSAqbm9kZSA9IDA7CisJaWYgKCBh
cmdDb3VudCgpID4gMCApIHsKKwkJVmFsdWUgYSA9IGFyZyggMCApLT5ldmFsdWF0ZSgpOworCQlp
ZiAoIGEuaXNOb2Rlc2V0KCkgKSB7CisJCQlub2RlID0gYS50b05vZGVTZXQoKVswXS5nZXQoKTsK
KwkJfQorCX0KKworCWlmICggIW5vZGUgKSB7CisJCW5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgp
Lm5vZGU7CisJfQorCisJcmV0dXJuIFZhbHVlKCBub2RlLT5uYW1lc3BhY2VVUkkoKS5kZXByZWNh
dGVkU3RyaW5nKCkgKTsKK30KKworYm9vbCBGdW5OYW1lOjppc0NvbnN0YW50KCkgY29uc3QKK3sK
KwlyZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1bk5hbWU6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworCU5vZGUgKm5vZGUgPSAwOworCWlmICggYXJnQ291bnQoKSA+IDAgKSB7CisJCVZhbHVlIGEg
PSBhcmcoIDAgKS0+ZXZhbHVhdGUoKTsKKwkJaWYgKCBhLmlzTm9kZXNldCgpICkgeworCQkJbm9k
ZSA9IGEudG9Ob2RlU2V0KClbMF0uZ2V0KCk7CisJCX0KKwl9CisKKwlpZiAoICFub2RlICkgewor
CQlub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworCX0KKworCURlcHJlY2F0ZWRTdHJp
bmcgcyA9IG5vZGUtPm5hbWVzcGFjZVVSSSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKwlzICs9ICI6
IjsKKwlzICs9IG5vZGUtPmxvY2FsTmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKworCXJldHVy
biBWYWx1ZSggcyApOworfQorCitWYWx1ZSBGdW5Db3VudDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisJVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAgICAKKwlpZiAoIWEuaXNOb2Rlc2V0
KCkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiY291bnQoKSBleHBlY3RzIDxub2Rlc2V0PlxuIik7
CisKKwkJcmV0dXJuIFZhbHVlKCAwLjAgKTsKKwl9CisgICAgCisJcmV0dXJuIFZhbHVlKGRvdWJs
ZShhLnRvTm9kZVNldCgpLnNpemUoKSkpOworfQorCitib29sIEZ1bkNvdW50Ojppc0NvbnN0YW50
KCkgY29uc3QKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1blN0cmluZzo6ZG9FdmFs
dWF0ZSgpIGNvbnN0Cit7CisJaWYgKCBhcmdDb3VudCgpID09IDAgKSB7CisJCURlcHJlY2F0ZWRT
dHJpbmcgcyA9IFZhbHVlKCBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgKS50
b1N0cmluZygpOworCQlyZXR1cm4gVmFsdWUoIHMgKTsKKwl9CisJcmV0dXJuIFZhbHVlKCBhcmco
IDAgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpICk7Cit9CisKK1ZhbHVlIEZ1bkNvbmNhdDo6ZG9F
dmFsdWF0ZSgpIGNvbnN0Cit7CisJRGVwcmVjYXRlZFN0cmluZyBzdHI7CisJZm9yICggdW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpICkgeworCQlzdHIuYXBwZW5kKCBhcmco
IGkgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpICk7CisJfQorCXJldHVybiBWYWx1ZSggRGVwcmVj
YXRlZFN0cmluZyggc3RyICkgKTsKK30KKworVmFsdWUgRnVuU3RhcnRzV2l0aDo6ZG9FdmFsdWF0
ZSgpIGNvbnN0Cit7CisJRGVwcmVjYXRlZFN0cmluZyBzMSA9IGFyZyggMCApLT5ldmFsdWF0ZSgp
LnRvU3RyaW5nKCk7CisJRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZyggMSApLT5ldmFsdWF0ZSgp
LnRvU3RyaW5nKCk7CisKKwlpZiAoIHMyLmlzRW1wdHkoKSApIHsKKwkJcmV0dXJuIFZhbHVlKCB0
cnVlICk7CisJfQorCisJcmV0dXJuIFZhbHVlKCBzMS5zdGFydHNXaXRoKCBzMiApICk7Cit9CisK
K1ZhbHVlIEZ1bkNvbnRhaW5zOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlEZXByZWNhdGVkU3Ry
aW5nIHMxID0gYXJnKCAwICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKwlEZXByZWNhdGVkU3Ry
aW5nIHMyID0gYXJnKCAxICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworCWlmICggczIuaXNF
bXB0eSgpICkgeworCQlyZXR1cm4gVmFsdWUoIHRydWUgKTsKKwl9CisKKwlyZXR1cm4gVmFsdWUo
IHMxLmNvbnRhaW5zKCBzMiApICE9IDApOworfQorCitWYWx1ZSBGdW5TdWJzdHJpbmdCZWZvcmU6
OmRvRXZhbHVhdGUoKSBjb25zdAoreworCURlcHJlY2F0ZWRTdHJpbmcgczEgPSBhcmcoIDAgKS0+
ZXZhbHVhdGUoKS50b1N0cmluZygpOworCURlcHJlY2F0ZWRTdHJpbmcgczIgPSBhcmcoIDEgKS0+
ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisJaWYgKCBzMi5pc0VtcHR5KCkgKSB7CisJCXJldHVy
biBWYWx1ZSggIiIgKTsKKwl9CisJaW50IGkgPSBzMS5maW5kKCBzMiApOworCisJaWYgKCBpID09
IC0xICkgeworCQlyZXR1cm4gVmFsdWUoICIiICk7CisJfQorCisJcmV0dXJuIFZhbHVlKCBEZXBy
ZWNhdGVkU3RyaW5nKCBzMS5sZWZ0KCBpICkgKSApOworfQorCitWYWx1ZSBGdW5TdWJzdHJpbmdB
ZnRlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJRGVwcmVjYXRlZFN0cmluZyBzMSA9IGFyZygg
MCApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisJRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygg
MSApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisKKwlpZiAoIHMyLmlzRW1wdHkoKSApIHsKKwkJ
cmV0dXJuIFZhbHVlKCBzMiApOworCX0KKworCWludCBpID0gczEuZmluZCggczIgKTsKKwlpZiAo
IGkgPT0gLTEgKSB7CisJCXJldHVybiBWYWx1ZSggIiIgKTsKKwl9CisKKwlyZXR1cm4gVmFsdWUo
IERlcHJlY2F0ZWRTdHJpbmcoIHMxLm1pZCggaSArIDEgKSApICk7Cit9CisKK1ZhbHVlIEZ1blN1
YnN0cmluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJRGVwcmVjYXRlZFN0cmluZyBzID0gYXJn
KCAwICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKwlsb25nIHBvcyA9IGxvbmcocm91bmQoYXJn
KCAxICktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpOworCWJvb2wgaGF2ZUxlbmd0aCA9IGFyZ0Nv
dW50KCkgPT0gMzsKKwlsb25nIGxlbiA9IC0xOworCWlmIChoYXZlTGVuZ3RoKQorCQlsZW4gPSBs
b25nKHJvdW5kKGFyZyggMiApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpKTsKKworCWlmIChwb3Mg
PiBsb25nKHMubGVuZ3RoKCkpKSAKKwkJcmV0dXJuIFZhbHVlKCAiIiApOworCisJaWYgKGhhdmVM
ZW5ndGggJiYgcG9zIDwgMSkgeworCQlsZW4gLT0gMSAtIHBvczsKKwkJcG9zID0gMTsKKwkJaWYg
KCBsZW4gPCAxICkgeworCQkJcmV0dXJuIFZhbHVlKCAiIiApOworCQl9CisJfQorCisJcmV0dXJu
IFZhbHVlKERlcHJlY2F0ZWRTdHJpbmcocy5taWQocG9zIC0gMSwgbGVuKSkpOworfQorCitWYWx1
ZSBGdW5TdHJpbmdMZW5ndGg6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCWlmICggYXJnQ291bnQo
KSA9PSAwICkgeworCQlEZXByZWNhdGVkU3RyaW5nIHMgPSBWYWx1ZSggRXhwcmVzc2lvbjo6ZXZh
bHVhdGlvbkNvbnRleHQoKS5ub2RlICkudG9TdHJpbmcoKTsKKwkJcmV0dXJuIFZhbHVlKCBkb3Vi
bGUoIHMubGVuZ3RoKCkgKSApOworCX0KKworCXJldHVybiBWYWx1ZSggZG91YmxlKCBhcmcoIDAg
KS0+ZXZhbHVhdGUoKS50b1N0cmluZygpLmxlbmd0aCgpICkgKTsKK30KKworVmFsdWUgRnVuTm9y
bWFsaXplU3BhY2U6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCWlmICggYXJnQ291bnQoKSA9PSAw
ICkgeworCQlEZXByZWNhdGVkU3RyaW5nIHMgPSBWYWx1ZSggRXhwcmVzc2lvbjo6ZXZhbHVhdGlv
bkNvbnRleHQoKS5ub2RlICkudG9TdHJpbmcoKTsKKwkJcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRT
dHJpbmcocy5zaW1wbGlmeVdoaXRlU3BhY2UoKSkpOworCX0KKworCURlcHJlY2F0ZWRTdHJpbmcg
cyA9IGFyZyggMCApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisJcyA9IHMuc2ltcGxpZnlXaGl0
ZVNwYWNlKCk7CisJcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRTdHJpbmcocykpOworfQorCitWYWx1
ZSBGdW5UcmFuc2xhdGU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCURlcHJlY2F0ZWRTdHJpbmcg
czEgPSBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCURlcHJlY2F0ZWRTdHJpbmcg
czIgPSBhcmcoIDEgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCURlcHJlY2F0ZWRTdHJpbmcg
czMgPSBhcmcoIDIgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCURlcHJlY2F0ZWRTdHJpbmcg
bmV3U3RyaW5nOworCisJZm9yICh1bnNpZ25lZCBpMSA9IDA7IGkxIDwgczEubGVuZ3RoKCk7ICsr
aTEpIHsKKwkJUUNoYXIgY2ggPSBzMVtpMV07CisJCWludCBpMiA9IHMyLmZpbmQoY2gpOworICAg
ICAgICAKKwkJaWYgKGkyID09IC0xKSAKKwkJCW5ld1N0cmluZyArPSBjaDsKKwkJZWxzZSBpZiAo
KHVuc2lnbmVkKWkyIDwgczMubGVuZ3RoKCkpCisJCQluZXdTdHJpbmcgKz0gczNbIGkyIF07CisJ
fQorCisJcmV0dXJuIFZhbHVlKCBEZXByZWNhdGVkU3RyaW5nKCBuZXdTdHJpbmcgKSApOworfQor
CitWYWx1ZSBGdW5Cb29sZWFuOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlyZXR1cm4gVmFsdWUo
IGFyZyggMCApLT5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpICk7Cit9CisKK1ZhbHVlIEZ1bk5vdDo6
ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJcmV0dXJuIFZhbHVlKCAhYXJnKCAwICktPmV2YWx1YXRl
KCkudG9Cb29sZWFuKCkgKTsKK30KKworVmFsdWUgRnVuVHJ1ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0
Cit7CisJcmV0dXJuIFZhbHVlKCB0cnVlICk7Cit9CisKK2Jvb2wgRnVuVHJ1ZTo6aXNDb25zdGFu
dCgpIGNvbnN0Cit7CisJcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVlIEZ1bkxhbmc6OmRvRXZhbHVh
dGUoKSBjb25zdAoreworCURlcHJlY2F0ZWRTdHJpbmcgbGFuZyA9IGFyZyggMCApLT5ldmFsdWF0
ZSgpLnRvU3RyaW5nKCk7CisKKwlSZWZQdHI8Tm9kZT4gbGFuZ05vZGUgPSAwOworCU5vZGUgKm5v
ZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisKKwlTdHJpbmcgeG1zKCAieG1zIiApOwor
CVN0cmluZyB4bXNuc1VSSSA9IG5vZGUtPmxvb2t1cE5hbWVzcGFjZVVSSSh4bXMpOworCisJd2hp
bGUgKCBub2RlICkgeworCQlOYW1lZEF0dHJNYXAgKmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygp
OworCQlTdHJpbmcgbCggImxhbmciICk7CisJCWxhbmdOb2RlID0gYXR0cnMtPmdldE5hbWVkSXRl
bU5TKHhtc25zVVJJLCBsKTsKKwkJaWYgKCBsYW5nTm9kZSApIHsKKwkJCWJyZWFrOworCQl9CisJ
CW5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisJfQorCisJaWYgKCAhbGFuZ05vZGUgKSB7CisJ
CXJldHVybiBWYWx1ZSggZmFsc2UgKTsKKwl9CisKKwlEZXByZWNhdGVkU3RyaW5nIGxhbmdOb2Rl
VmFsdWUgPSBsYW5nTm9kZS0+bm9kZVZhbHVlKCkuZGVwcmVjYXRlZFN0cmluZygpOworCisJLy8g
ZXh0cmFjdCAnZW4nIG91dCBvZiAnZW4tdXMnCisJbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlVmFs
dWUubGVmdChsYW5nTm9kZVZhbHVlLmZpbmQoJy0nKSk7CisKKwlyZXR1cm4gVmFsdWUobGFuZ05v
ZGVWYWx1ZS5sb3dlcigpID09IGxhbmcubG93ZXIoKSk7Cit9CisKK2Jvb2wgRnVuTGFuZzo6aXND
b25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIGZhbHNlOworfQorCitWYWx1ZSBGdW5GYWxzZTo6
ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJcmV0dXJuIFZhbHVlKCBmYWxzZSApOworfQorCitib29s
IEZ1bkZhbHNlOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworVmFs
dWUgRnVuTnVtYmVyOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlyZXR1cm4gVmFsdWUoIGFyZygg
MCApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkgKTsKK30KKworVmFsdWUgRnVuU3VtOjpkb0V2YWx1
YXRlKCkgY29uc3QKK3sKKwlWYWx1ZSBhID0gYXJnKCAwICktPmV2YWx1YXRlKCk7CisJaWYgKCAh
YS5pc05vZGVzZXQoKSApIHsKKyAgICAgICAgTE9HKFhQYXRoLCAic3VtKCkgZXhwZWN0cyA8bm9k
ZXNldD5cbiIpOworCQlyZXR1cm4gVmFsdWUoIDAuMCApOworCX0KKworCWRvdWJsZSBzdW0gPSAw
LjA7CisgICAgY29uc3QgTm9kZVNldCBub2RlcyA9IGEudG9Ob2RlU2V0KCk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKQorICAgICAgICBzdW0g
Kz0gVmFsdWUoc3RyaW5nVmFsdWUobm9kZXNbaV0uZ2V0KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSku
dG9OdW1iZXIoKTsKKyAgICAKKwlyZXR1cm4gVmFsdWUoIHN1bSApOworfQorCitWYWx1ZSBGdW5G
bG9vcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJY29uc3QgZG91YmxlIG51bSA9IGFyZyggMCAp
LT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCk7CisKKwlpZiAoIGlzbmFuKCBudW0gKSB8fCBpc2luZigg
bnVtICkgKSB7CisJCXJldHVybiBWYWx1ZSggbnVtICk7CisJfQorCisJcmV0dXJuIFZhbHVlKCBm
bG9vciggbnVtICkgKTsKK30KKworVmFsdWUgRnVuQ2VpbGluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0
Cit7CisJY29uc3QgZG91YmxlIG51bSA9IGFyZyggMCApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCk7
CisKKwlpZiAoaXNuYW4obnVtKSB8fCBpc2luZihudW0pKSAKKwkJcmV0dXJuIFZhbHVlKG51bSk7
CisKKwlyZXR1cm4gVmFsdWUoY2VpbChudW0pKTsKK30KKworVmFsdWUgRnVuUm91bmQ6OmRvRXZh
bHVhdGUoKSBjb25zdAoreworCXJldHVybiBWYWx1ZShkb3VibGUocm91bmQoYXJnKDApLT5ldmFs
dWF0ZSgpLnRvTnVtYmVyKCkpKSk7Cit9CisKK3N0cnVjdCBGdW5jdGlvbkxpYnJhcnk6OkZ1bmN0
aW9uUmVjCit7CisJdHlwZWRlZiBGdW5jdGlvbiAqKCpGYWN0b3J5Rm4gKSgpOworCisJRmFjdG9y
eUZuIGZhY3RvcnlGbjsKKwlJbnRlcnZhbCBhcmdzOworfTsKKworc3RydWN0IEZ1bmN0aW9uTWFw
cGluZworeworCWNvbnN0IGNoYXIgKm5hbWU7CisJRnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvblJl
YyBmdW5jdGlvbjsKK307CisKK0Z1bmN0aW9uTGlicmFyeSAmRnVuY3Rpb25MaWJyYXJ5OjpzZWxm
KCkKK3sKKwlzdGF0aWMgRnVuY3Rpb25MaWJyYXJ5IGluc3RhbmNlOworCXJldHVybiBpbnN0YW5j
ZTsKK30KKworRnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvbkxpYnJhcnkoKQoreworICAgIHN0YXRp
YyBGdW5jdGlvbk1hcHBpbmcgZnVuY3Rpb25zW10gPSB7CisJeyAibGFzdCIsIHsgJmNyZWF0ZUZ1
bkxhc3QsIDAgfSB9LAorCXsgImxhc3QiLCB7ICZjcmVhdGVGdW5MYXN0LCAwIH0gfSwKKwl7ICJw
b3NpdGlvbiIsIHsgJmNyZWF0ZUZ1blBvc2l0aW9uLCAwIH0gfSwKKwl7ICJjb3VudCIsIHsgJmNy
ZWF0ZUZ1bkNvdW50LCAxIH0gfSwKKwl7ICJzdW0iLCB7ICZjcmVhdGVGdW5TdW0sIDEgfSB9LAor
CXsgImxvY2FsLW5hbWUiLCB7ICZjcmVhdGVGdW5Mb2NhbE5hbWUsIEludGVydmFsKCAwLCAxICkg
fSB9LAorCXsgIm5hbWVzcGFjZS11cmkiLCB7ICZjcmVhdGVGdW5OYW1lc3BhY2VVUkksIEludGVy
dmFsKCAwLCAxICkgfSB9LAorCXsgIm5hbWUiLCB7ICZjcmVhdGVGdW5OYW1lLCBJbnRlcnZhbCgg
MCwgMSApIH0gfSwKKwl7ICJzdHJpbmciLCB7ICZjcmVhdGVGdW5TdHJpbmcsIEludGVydmFsKCAw
LCAxICkgfSB9LAorCXsgImNvbmNhdCIsIHsgJmNyZWF0ZUZ1bkNvbmNhdCwgSW50ZXJ2YWwoIDIs
IEludGVydmFsOjpJbmYgKSB9IH0sCisJeyAic3RhcnRzLXdpdGgiLCB7ICZjcmVhdGVGdW5TdGFy
dHNXaXRoLCAyIH0gfSwKKwl7ICJjb250YWlucyIsIHsgJmNyZWF0ZUZ1bkNvbnRhaW5zLCAyIH0g
fSwKKwl7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nQmVmb3JlLCAy
IH0gfSwKKwl7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmdBZnRlciwg
MiB9IH0sCisJeyAic3Vic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nLCBJbnRlcnZhbCgg
MiwgMyApIH0gfSwKKwl7ICJzdHJpbmctbGVuZ3RoIiwgeyAmY3JlYXRlRnVuU3RyaW5nTGVuZ3Ro
LCAxIH0gfSwKKwl7ICJub3JtYWxpemUtc3BhY2UiLCB7ICZjcmVhdGVGdW5Ob3JtYWxpemVTcGFj
ZSwgMSB9IH0sCisJeyAidHJhbnNsYXRlIiwgeyAmY3JlYXRlRnVuVHJhbnNsYXRlLCAzIH0gfSwK
KyAgICAgICAgCisJeyAiYm9vbGVhbiIsIHsgJmNyZWF0ZUZ1bkJvb2xlYW4sIDEgfSB9LAorCXsg
Im5vdCIsIHsgJmNyZWF0ZUZ1bk5vdCwgMSB9IH0sCisJeyAidHJ1ZSIsIHsgJmNyZWF0ZUZ1blRy
dWUsIDAgfSB9LAorCXsgImZhbHNlIiwgeyAmY3JlYXRlRnVuRmFsc2UsIDAgfSB9LAorCXsgImxh
bmciLCB7ICZjcmVhdGVGdW5MYW5nLCAxIH0gfSwKKyAgICAgICAgCisJeyAibnVtYmVyIiwgeyAm
Y3JlYXRlRnVuTnVtYmVyLCAxIH0gfSwKKwl7ICJmbG9vciIsIHsgJmNyZWF0ZUZ1bkZsb29yLCAx
IH0gfSwKKwl7ICJjZWlsaW5nIiwgeyAmY3JlYXRlRnVuQ2VpbGluZywgMSB9IH0sCisJeyAicm91
bmQiLCB7ICZjcmVhdGVGdW5Sb3VuZCwgMSB9IH0KKyAgICB9OworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbnQgbnVtRnVuY3Rpb25zID0gc2l6ZW9mKCBmdW5jdGlvbnMgKSAvIHNpemVvZigg
ZnVuY3Rpb25zWyAwIF0gKTsKKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUZ1bmN0aW9uczsgKytpICkgeworICAgICAgICBtX2Z1bmN0aW9uRGljdC5zZXQoZnVuY3Rp
b25zW2ldLm5hbWUsIGZ1bmN0aW9uc1tpXS5mdW5jdGlvbik7CisJfQorfQorCitGdW5jdGlvbiAq
RnVuY3Rpb25MaWJyYXJ5OjpnZXRGdW5jdGlvbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvbio+ICZhcmdzKSBjb25zdAoreworCWlmICghbV9mdW5jdGlvbkRpY3QuY29u
dGFpbnMobmFtZSkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiRnVuY3Rpb24gJyVzJyBub3Qgc3Vw
cG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uXG4iLCBuYW1lKTsKKyAgICAgICAgCisJCS8v
IFJldHVybiBhIGR1bW15IGZ1bmN0aW9uIGluc3RlYWQgb2YgMC4KKwkJRnVuY3Rpb24gKmZ1bmNU
cnVlID0gbV9mdW5jdGlvbkRpY3QuZ2V0KCJ0cnVlIikuZmFjdG9yeUZuKCk7CisJCWZ1bmNUcnVl
LT5zZXROYW1lKCJ0cnVlIik7CisJCXJldHVybiBmdW5jVHJ1ZTsKKwl9CisKKwlGdW5jdGlvblJl
YyBmdW5jdGlvblJlYyA9IG1fZnVuY3Rpb25EaWN0LmdldChuYW1lKTsKKwlpZiAoIWZ1bmN0aW9u
UmVjLmFyZ3MuY29udGFpbnMoYXJncy5zaXplKCkpKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkZ1
bmN0aW9uICclcycgcmVxdWlyZXMgJWQgYXJndW1lbnRzLCBidXQgJWQgZ2l2ZW4uXG4iLCBuYW1l
LCBmdW5jdGlvblJlYy5hcmdzLmFzU3RyaW5nKCkuYXNjaWkoKSwgYXJncy5zaXplKCkpOworCQly
ZXR1cm4gMDsKKwl9CisKKwlGdW5jdGlvbiAqZnVuY3Rpb24gPSBmdW5jdGlvblJlYy5mYWN0b3J5
Rm4oKTsKKwlmdW5jdGlvbi0+c2V0QXJndW1lbnRzKGFyZ3MpOworCWZ1bmN0aW9uLT5zZXROYW1l
KCBuYW1lICk7CisgICAgCisJcmV0dXJuIGZ1bmN0aW9uOworfQorCit9Cit9CkluZGV4OiBXZWJD
b3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0
aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogcGFyc2Vkc3RhdGVtZW50LmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxy
YWFiZUBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBQQVJTRURT
VEFURU1FTlRfSAorI2RlZmluZSBQQVJTRURTVEFURU1FTlRfSAorCisjaW5jbHVkZSAidXRpbC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgTm9kZTsKKyAgICAKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorY2xhc3MgRXhwcmVz
c2lvbjsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQYXJzZWRTdGF0ZW1lbnQKK3sKK3B1YmxpYzoK
KwlQYXJzZWRTdGF0ZW1lbnQoKTsKKwl+UGFyc2VkU3RhdGVtZW50KCk7CisKKwlib29sIHBhcnNl
KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKwl2b2lkIG9w
dGltaXplKCk7CisKKwlWYWx1ZSBldmFsdWF0ZShOb2RlICpjb250ZXh0KSBjb25zdDsKKworcHJp
dmF0ZToKKwlFeHByZXNzaW9uICptX2V4cHI7Cit9OworCit9Cit9CisjZW5kaWYgLy8gUEFSU0VE
U1RBVEVNRU5UX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJlbmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIHZhcmlhYmxlcmVmZXJlbmNlLmgg
LSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFT
IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBWQVJJQUJMRVJFRkVSRU5DRV9ICisjZGVmaW5lIFZB
UklBQkxFUkVGRVJFTkNFX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAKK2NsYXNzIFZhcmlhYmxlUmVmZXJl
bmNlIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKwlWYXJpYWJsZVJlZmVyZW5jZShj
b25zdCBTdHJpbmcmIG5hbWUpOworCisJdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsK
KworcHJpdmF0ZToKKwl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKworCVN0cmlu
ZyBtX25hbWU7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBWQVJJQUJMRVJFRkVSRU5DRV9ICisK
SW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94
cGF0aC9pbXBsL3Rva2VuaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTA0IEBACisv
KgorICogdG9rZW5pemVyLmNjIC0gQ29weXJpZ2h0IDIwMDUgTWFrc2ltIE9ybG92aWNoIDxtYWtz
aW1Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgInRva2VuaXplci5oIgorCisjaW5jbHVkZSAiWFBhdGhHcmFtbWFyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisKK3N0cnVjdCBUb2tl
bgoreworCWludCAgICAgdHlwZTsKKwlEZXByZWNhdGVkU3RyaW5nIHZhbHVlOworCWludCAgICAg
aW50VmFsdWU7IC8vMCBpZiBub3Qgc2V0CisgICAgCisJVG9rZW4oaW50IF90eXBlKTogdHlwZShf
dHlwZSksIGludFZhbHVlKDApIHt9CisJVG9rZW4oRGVwcmVjYXRlZFN0cmluZyBfdmFsdWUpOiB0
eXBlKEVSUk9SKzEpLCB2YWx1ZShfdmFsdWUpLGludFZhbHVlKDApIHt9CisJVG9rZW4oaW50IF90
eXBlLCBEZXByZWNhdGVkU3RyaW5nIF92YWx1ZSk6IHR5cGUoX3R5cGUpLCB2YWx1ZShfdmFsdWUp
IHt9CisJVG9rZW4oaW50IF90eXBlLCBpbnQgICAgIF92YWx1ZSk6IHR5cGUoX3R5cGUpLCBpbnRW
YWx1ZShfdmFsdWUpIHt9Cit9OworCitjbGFzcyBUb2tlbml6ZXIKK3sKK3ByaXZhdGU6CisJdW5z
aWduZWQgbV9uZXh0UG9zOworCVN0cmluZyBtX2RhdGE7CisJaW50IG1fbGFzdFRva2VuVHlwZTsK
KyAgICAKKwlzdGF0aWMgSGFzaE1hcDxXZWJDb3JlOjpTdHJpbmcsIFN0ZXA6OkF4aXNUeXBlPiog
c19heGlzTmFtZXNEaWN0OworCXN0YXRpYyBIYXNoU2V0PFdlYkNvcmU6OlN0cmluZz4qIHNfbm9k
ZVR5cGVOYW1lc0RpY3Q7CisgICAgCisJZW51bSBYTUxDYXQgeworCQlOYW1lU3RhcnQsCisJCU5h
bWVDb250LAorCQlOb3RQYXJ0T2ZOYW1lCisJfTsKKyAgICAKKwlYTUxDYXQgY2hhckNhdChRQ2hh
ciBhQ2hhcik7CisJCisJYm9vbCBpc0F4aXNOYW1lKERlcHJlY2F0ZWRTdHJpbmcgbmFtZSwgU3Rl
cDo6QXhpc1R5cGUgJnR5cGUpOworCWJvb2wgaXNOb2RlVHlwZU5hbWUoRGVwcmVjYXRlZFN0cmlu
ZyBuYW1lKTsKKwlib29sIGlzT3BlcmF0b3JDb250ZXh0KCk7CisgICAgCisJdm9pZCAgc2tpcFdT
KCk7CisJVG9rZW4gbWFrZVRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50IGFkdmFuY2UgPSAx
KTsKKwlUb2tlbiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgdmFsLCBpbnQg
YWR2YW5jZSA9IDEpOworCWNoYXIgIHBlZWtBaGVhZEhlbHBlcigpOworCWNoYXIgIHBlZWtDdXJI
ZWxwZXIoKTsKKwkKKwlUb2tlbiBsZXhTdHJpbmcoKTsKKwlUb2tlbiBsZXhOdW1iZXIoKTsKKwlU
b2tlbiBsZXhOQ05hbWUoKTsKKwlUb2tlbiBsZXhRTmFtZSgpOworCQorCVRva2VuIG5leHRUb2tl
bkludGVybmFsKCk7CisJVG9rZW5pemVyKCk7CisJVG9rZW5pemVyKGNvbnN0IFRva2VuaXplciAm
cmhzKTsgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZAorCVRva2VuaXplciAmb3BlcmF0b3I9
KGNvbnN0IFRva2VuaXplciAmcmhzKTsgICAgICAgLy8gZGlzYWJsZWQKKwl+VG9rZW5pemVyKCk7
CitwdWJsaWM6CisgICAgc3RhdGljIFRva2VuaXplciAmc2VsZigpOworICAgIAorCXZvaWQgcmVz
ZXQoY29uc3QgU3RyaW5nJik7CisJVG9rZW4gbmV4dFRva2VuKCk7Cit9OworCitzdHJ1Y3QgQXhp
c05hbWVNYXBwaW5nCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlTdGVwOjpBeGlzVHlwZSB0eXBl
OworfTsKKworc3RhdGljIEF4aXNOYW1lTWFwcGluZyBheGlzTmFtZXNbXSA9IHsKKwl7ICJhbmNl
c3RvciIsIFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAorCXsgImFuY2VzdG9yLW9yLXNlbGYiLCBTdGVw
OjpBbmNlc3Rvck9yU2VsZkF4aXMgfSwKKwl7ICJhdHRyaWJ1dGUiLCBTdGVwOjpBdHRyaWJ1dGVB
eGlzIH0sCisJeyAiY2hpbGQiLCBTdGVwOjpDaGlsZEF4aXMgfSwKKwl7ICJkZXNjZW5kYW50Iiwg
U3RlcDo6RGVzY2VuZGFudEF4aXMgfSwKKwl7ICJkZXNjZW5kYW50LW9yLXNlbGYiLCBTdGVwOjpE
ZXNjZW5kYW50T3JTZWxmQXhpcyB9LAorCXsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4
aXMgfSwKKwl7ICJmb2xsb3dpbmctc2libGluZyIsIFN0ZXA6OkZvbGxvd2luZ1NpYmxpbmdBeGlz
IH0sCisJeyAibmFtZXNwYWNlIiwgU3RlcDo6TmFtZXNwYWNlQXhpcyB9LAorCXsgInBhcmVudCIs
IFN0ZXA6OlBhcmVudEF4aXMgfSwKKwl7ICJwcmVjZWRpbmciLCBTdGVwOjpQcmVjZWRpbmdBeGlz
IH0sCisJeyAicHJlY2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJsaW5nQXhpcyB9
LAorCXsgInNlbGYiLCBTdGVwOjpTZWxmQXhpcyB9Cit9Oworc3RhdGljIHVuc2lnbmVkIGludCBh
eGlzTmFtZXNDb3VudCA9IHNpemVvZihheGlzTmFtZXMpIC8gc2l6ZW9mKGF4aXNOYW1lc1swXSk7
CitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgbm9kZVR5cGVOYW1lc1tdID0geworCSJjb21tZW50
IiwKKwkidGV4dCIsCisJInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iLAorCSJub2RlIiwKKwkwCit9
OworCitIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+KiBUb2tlbml6ZXI6OnNfYXhpc05h
bWVzRGljdCA9IDA7CitIYXNoU2V0PFN0cmluZz4qIFRva2VuaXplcjo6c19ub2RlVHlwZU5hbWVz
RGljdCA9IDA7CisKK1Rva2VuaXplciAmVG9rZW5pemVyOjpzZWxmKCkKK3sKKwlzdGF0aWMgVG9r
ZW5pemVyIGluc3RhbmNlOworCXJldHVybiBpbnN0YW5jZTsKK30KKworVG9rZW5pemVyOjpYTUxD
YXQgVG9rZW5pemVyOjpjaGFyQ2F0KFFDaGFyIGFDaGFyKQoreworCS8vIyMjIG1pZ2h0IG5lZWQg
dG8gYWRkIHNvbWUgc3BlY2lhbCBjYXNlcyBmcm9tIHRoZSBYTUwgc3BlYy4KKworCWlmIChhQ2hh
ci51bmljb2RlKCkgPT0gJ18nKQorCQlyZXR1cm4gTmFtZVN0YXJ0OworCisJaWYgKGFDaGFyLnVu
aWNvZGUoKSA9PSAnLicgfHwgYUNoYXIudW5pY29kZSgpID09ICctJykKKwkJcmV0dXJuIE5hbWVD
b250OworICAgIHN3aXRjaCAodV9jaGFyVHlwZShhQ2hhci51bmljb2RlKCkpKSB7CisgICAgICAg
IGNhc2UgVV9MT1dFUkNBU0VfTEVUVEVSOiAvL0xsCisgICAgICAgIGNhc2UgVV9VUFBFUkNBU0Vf
TEVUVEVSOiAvL0x1CisgICAgICAgIGNhc2UgVV9PVEhFUl9MRVRURVI6ICAgICAvL0xvCisgICAg
ICAgIGNhc2UgVV9USVRMRUNBU0VfTEVUVEVSOiAvL0x0CisgICAgICAgIGNhc2UgVV9MRVRURVJf
TlVNQkVSOiAgICAvL05sCisgICAgICAgICAgICByZXR1cm4gTmFtZVN0YXJ0OworICAgICAgICBj
YXNlIFVfQ09NQklOSU5HX1NQQUNJTkdfTUFSSzogLy9NYworICAgICAgICBjYXNlIFVfRU5DTE9T
SU5HX01BUks6ICAgICAgICAgLy9NZQorICAgICAgICBjYXNlIFVfTk9OX1NQQUNJTkdfTUFSSzog
ICAgICAgLy9NbgorICAgICAgICBjYXNlIFVfTU9ESUZJRVJfTEVUVEVSOiAgICAgICAgLy9MbQor
ICAgICAgICBjYXNlIFVfREVDSU1BTF9ESUdJVF9OVU1CRVI6ICAgLy9OZAorICAgICAgICAgICAg
cmV0dXJuIE5hbWVDb250OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5v
dFBhcnRPZk5hbWU7CisgICAgfQorfQorCitib29sIFRva2VuaXplcjo6aXNBeGlzTmFtZShEZXBy
ZWNhdGVkU3RyaW5nIG5hbWUsIFN0ZXA6OkF4aXNUeXBlJiB0eXBlKQoreworCWlmICghc19heGlz
TmFtZXNEaWN0KSB7CisJCXNfYXhpc05hbWVzRGljdCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3Rl
cDo6QXhpc1R5cGU+OworCQlmb3IgKHVuc2lnbmVkIGludCBwID0gMDsgcCA8IGF4aXNOYW1lc0Nv
dW50OyArK3ApCisJCQlzX2F4aXNOYW1lc0RpY3QtPnNldChheGlzTmFtZXNbcF0ubmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXNOYW1lc1twXS50eXBlKTsKKwl9CisK
KwlIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+OjppdGVyYXRvciBpdCA9IHNfYXhpc05h
bWVzRGljdC0+ZmluZChuYW1lKTsKKyAgICAKKwlpZiAoaXQgIT0gc19heGlzTmFtZXNEaWN0LT5l
bmQoKSkgeworCQl0eXBlID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisJfSBl
bHNlICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppc05v
ZGVUeXBlTmFtZShEZXByZWNhdGVkU3RyaW5nIG5hbWUpCit7CisJaWYgKCFzX25vZGVUeXBlTmFt
ZXNEaWN0KSB7CisJCXNfbm9kZVR5cGVOYW1lc0RpY3QgPSBuZXcgSGFzaFNldDxTdHJpbmc+Owor
CQlmb3IgKGludCBwID0gMDsgbm9kZVR5cGVOYW1lc1twXTsgKytwKQorCQkJc19ub2RlVHlwZU5h
bWVzRGljdC0+YWRkKG5vZGVUeXBlTmFtZXNbcF0pOworCX0KKwlyZXR1cm4gc19ub2RlVHlwZU5h
bWVzRGljdC0+Y29udGFpbnMoU3RyaW5nKG5hbWUpKTsKK30KKworLyogUmV0dXJucyB3aGV0aGVy
IHRoZSBsYXN0IHBhcnNlZCB0b2tlbiBtYXRjaGVzIHRoZSBbMzJdIE9wZXJhdG9yIHJ1bGUKKyAq
IChjaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCNleHBybGV4KS4gTmVjZXNzYXJ5IHRv
IGRpc2FtYmlndWF0ZQorICogdGhlIHRva2Vucy4KKyAqLworYm9vbCBUb2tlbml6ZXI6OmlzT3Bl
cmF0b3JDb250ZXh0KCkKK3sKKwlpZiAoIG1fbmV4dFBvcyA9PSAwICkgeworCQlyZXR1cm4gZmFs
c2U7CisJfQorCisJc3dpdGNoICggbV9sYXN0VG9rZW5UeXBlICkgeworCQljYXNlIEFORDogY2Fz
ZSBPUjogY2FzZSBNVUxPUDoKKwkJY2FzZSAnLyc6IGNhc2UgU0xBU0hTTEFTSDogY2FzZSAnfCc6
IGNhc2UgUExVUzogY2FzZSBNSU5VUzoKKwkJY2FzZSBFUU9QOiBjYXNlIFJFTE9QOgorCQljYXNl
ICdAJzogY2FzZSBBWElTTkFNRTogICBjYXNlICcoJzogY2FzZSAnWyc6CisJCQlyZXR1cm4gZmFs
c2U7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKK3ZvaWQgVG9rZW5pemVy
Ojpza2lwV1MoKQoreworCXdoaWxlIChtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYgbV9k
YXRhW21fbmV4dFBvc10uaXNTcGFjZSgpKQorCQkrK21fbmV4dFBvczsKK30KKworVG9rZW4gVG9r
ZW5pemVyOjptYWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgYWR2YW5jZSkKK3sKKwlt
X25leHRQb3MgKz0gYWR2YW5jZTsKKwlyZXR1cm4gVG9rZW4oY29kZSk7Cit9CisKK1Rva2VuIFRv
a2VuaXplcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50IHZhbCwgaW50IGFk
dmFuY2UpCit7CisJbV9uZXh0UG9zICs9IGFkdmFuY2U7CisJcmV0dXJuIFRva2VuKGNvZGUsIHZh
bCk7Cit9CisKKy8vUmV0dXJucyBuZXh0IGNoYXIgaWYgaXQncyB0aGVyZSBhbmQgaW50ZXJlc3Rp
bmcsIDAgb3RoZXJ3aXNlCitjaGFyIFRva2VuaXplcjo6cGVla0FoZWFkSGVscGVyKCkKK3sKKwlp
ZiAobV9uZXh0UG9zICsgMSA+PSBtX2RhdGEubGVuZ3RoKCkpCisJCXJldHVybiAwOworCVFDaGFy
IG5leHQgPSBtX2RhdGFbbV9uZXh0UG9zICsgMV07CisJaWYgKG5leHQucm93KCkgIT0gMCkKKwkJ
cmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gbmV4dC5jZWxsKCk7Cit9CisKK2NoYXIgVG9rZW5p
emVyOjpwZWVrQ3VySGVscGVyKCkKK3sKKwlpZiAobV9uZXh0UG9zID49IG1fZGF0YS5sZW5ndGgo
KSkKKwkJcmV0dXJuIDA7CisJUUNoYXIgbmV4dCA9IG1fZGF0YVttX25leHRQb3NdOworCWlmIChu
ZXh0LnJvdygpICE9IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIG5leHQuY2VsbCgp
OworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleFN0cmluZygpCit7CisJUUNoYXIgZGVsaW1pdGVy
ID0gbV9kYXRhW21fbmV4dFBvc107CisJaW50ICAgc3RhcnRQb3MgID0gbV9uZXh0UG9zICsgMTsK
KworCWZvciAobV9uZXh0UG9zID0gc3RhcnRQb3M7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgo
KTsgKyttX25leHRQb3MpIHsKKwkJaWYgKG1fZGF0YVttX25leHRQb3NdID09IGRlbGltaXRlcikg
eworCQkJRGVwcmVjYXRlZFN0cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3RyaW5nKCku
bWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBvcyk7CisJCQkrK21fbmV4dFBvczsgLy9D
b25zdW1lIHRoZSBjaGFyOworCQkJcmV0dXJuIFRva2VuKExJVEVSQUwsIHZhbHVlKTsKKwkJfQor
CX0KKworCS8vT3VjaCwgd2VudCBvZmYgdGhlIGVuZCAtLSByZXBvcnQgZXJyb3IKKwlyZXR1cm4g
VG9rZW4oRVJST1IpOworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleE51bWJlcigpCit7CisJaW50
IHN0YXJ0UG9zID0gbV9uZXh0UG9zOworCWJvb2wgc2VlbkRvdCA9IGZhbHNlOworCisJLy9HbyB1
bnRpbCBlbmQgb3IgYSBub24tZGlnaXRzIGNoYXJhY3RlcgorCWZvciAoOyBtX25leHRQb3MgPCBt
X2RhdGEubGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CisJCVFDaGFyIGFDaGFyID0gbV9kYXRhW21f
bmV4dFBvc107CisJCWlmIChhQ2hhci5yb3coKSAhPSAwKSBicmVhazsKKworCQlpZiAoYUNoYXIu
Y2VsbCgpIDwgJzAnIHx8IGFDaGFyLmNlbGwoKSA+ICc5JykgeworCQkJaWYgKGFDaGFyLmNlbGwo
KSA9PSAnLicgJiYgIXNlZW5Eb3QpCisJCQkJc2VlbkRvdCA9IHRydWU7CisJCQllbHNlCisJCQkJ
YnJlYWs7CisJCX0KKwl9CisKKwlEZXByZWNhdGVkU3RyaW5nIHZhbHVlID0gbV9kYXRhLmRlcHJl
Y2F0ZWRTdHJpbmcoKS5taWQoc3RhcnRQb3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9zKTsKKwlyZXR1
cm4gVG9rZW4oTlVNQkVSLCB2YWx1ZSk7Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bGV4TkNOYW1l
KCkKK3sKKwlpbnQgc3RhcnRQb3MgPSBtX25leHRQb3M7CisJaWYgKG1fbmV4dFBvcyA8IG1fZGF0
YS5sZW5ndGgoKSAmJiBjaGFyQ2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOYW1lU3RhcnQpCisJ
eworCQkvL0tlZXAgZ29pbmcgdW50aWwgd2UgZ2V0IGEgY2hhcmFjdGVyIHRoYXQncyBub3QgZ29v
ZCBmb3IgbmFtZXMuCisJCWZvciAoOyBtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCk7ICsrbV9u
ZXh0UG9zKSB7CisJCQlpZiAoY2hhckNhdChtX2RhdGFbbV9uZXh0UG9zXSkgPT0gTm90UGFydE9m
TmFtZSkKKwkJCQlicmVhazsKKwkJfQorCQkKKwkJRGVwcmVjYXRlZFN0cmluZyB2YWx1ZSA9IG1f
ZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBv
cyk7CisJCXJldHVybiBUb2tlbih2YWx1ZSk7CisJfQorCWVsc2UKKwkJcmV0dXJuIG1ha2VUb2tl
bkFuZEFkdmFuY2UoRVJST1IpOworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleFFOYW1lKCkKK3sK
KwlUb2tlbiB0MSA9IGxleE5DTmFtZSgpOworCWlmICh0MS50eXBlID09IEVSUk9SKSByZXR1cm4g
dDE7CisJc2tpcFdTKCk7CisJLy9JZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgOiwgd2hhdCB3ZSBq
dXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCisJLy9pdCdzIHRoZSB3aG9sZSB0aGluZwor
CWlmIChwZWVrQWhlYWRIZWxwZXIoKSAhPSAnOicpCisJCXJldHVybiB0MTsKKworCVRva2VuIHQy
ID0gbGV4TkNOYW1lKCk7CisJaWYgKHQyLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MjsKKworCXJl
dHVybiBUb2tlbih0MS52YWx1ZSArICI6IiArIHQyLnZhbHVlKTsKK30KKworVG9rZW4gVG9rZW5p
emVyOjpuZXh0VG9rZW5JbnRlcm5hbCgpCit7CisJc2tpcFdTKCk7CisKKwlpZiAobV9uZXh0UG9z
ID49IG1fZGF0YS5sZW5ndGgoKSkgeworCQlyZXR1cm4gVG9rZW4oMCk7CisJfQorCisJY2hhciBj
b2RlID0gcGVla0N1ckhlbHBlcigpOworCXN3aXRjaCAoY29kZSkgeworCQljYXNlICcoJzogY2Fz
ZSAnKSc6IGNhc2UgJ1snOiBjYXNlICddJzoKKwkJY2FzZSAnQCc6IGNhc2UgJywnOiBjYXNlICd8
JzoKKwkJCXJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKGNvZGUpOworCQljYXNlICdcJyc6CisJ
CWNhc2UgJ1wiJzoKKwkJCXJldHVybiBsZXhTdHJpbmcoKTsKKwkJY2FzZSAnMCc6IGNhc2UgJzEn
OiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQljYXNlICc1JzogY2FzZSAnNic6IGNh
c2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQlyZXR1cm4gbGV4TnVtYmVyKCk7CisJCWNh
c2UgJy4nOiB7CisJCQljaGFyIG5leHQgPSBwZWVrQWhlYWRIZWxwZXIoKTsKKwkJCWlmIChuZXh0
ID09ICcuJykKKwkJCQlyZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShET1RET1QsIDIpOworCQkJ
ZWxzZSBpZiAobmV4dCA+PSAnMCcgJiYgbmV4dCA8PSAnOScpCisJCQkJcmV0dXJuIGxleE51bWJl
cigpOworCQkJZWxzZQorCQkJCXJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcuJyk7CisJCX0K
KwkJY2FzZSAnLyc6CisJCQlpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJy8nKQorCQkJCXJldHVy
biBtYWtlVG9rZW5BbmRBZHZhbmNlKFNMQVNIU0xBU0gsIDIpOworCQkJZWxzZQorCQkJCXJldHVy
biBtYWtlVG9rZW5BbmRBZHZhbmNlKCcvJyk7CisJCWNhc2UgJysnOgorCQkJcmV0dXJuIG1ha2VU
b2tlbkFuZEFkdmFuY2UoUExVUyk7CisJCWNhc2UgJy0nOgorCQkJcmV0dXJuIG1ha2VUb2tlbkFu
ZEFkdmFuY2UoTUlOVVMpOworCQljYXNlICc9JzoKKwkJCXJldHVybiBtYWtlSW50VG9rZW5BbmRB
ZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9FUSk7CisJCWNhc2UgJyEnOgorCQkJaWYgKHBlZWtB
aGVhZEhlbHBlcigpID09ICc9JykKKwkJCQlyZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShF
UU9QLCBFcVRlc3RPcDo6T1BfTkUsIDIpOworCQkJZWxzZSB7CisJCQkJcmV0dXJuIFRva2VuKEVS
Uk9SKTsKKwkJCX0KKwkJY2FzZSAnPCc6CisJCQlpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0n
KQorCQkJCXJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9Q
X0xFLCAyKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxP
UCwgTnVtZXJpY09wOjpPUF9MVCk7CisJCWNhc2UgJz4nOgorCQkJaWYgKHBlZWtBaGVhZEhlbHBl
cigpID09ICc9JykKKwkJCQlyZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVt
ZXJpY09wOjpPUF9HRSwgMik7CisJCQllbHNlCisJCQkJcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFk
dmFuY2UoUkVMT1AsIE51bWVyaWNPcDo6T1BfR1QpOworCQljYXNlICcqJzoKKwkJCWlmIChpc09w
ZXJhdG9yQ29udGV4dCgpKQorCQkJCXJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKE1VTE9Q
LCBOdW1lcmljT3A6Ok9QX011bCk7CisJCQllbHNlIHsKKwkJCQkrK21fbmV4dFBvczsKKwkJCQly
ZXR1cm4gVG9rZW4oTkFNRVRFU1QsICIqIik7CisJCQl9CisJCWNhc2UgJyQnOiB7Ly8kIFFOYW1l
CisJCQltX25leHRQb3MrKzsKKwkJCVRva2VuIHBhciA9IGxleFFOYW1lKCk7CisJCQlpZiAocGFy
LnR5cGUgPT0gRVJST1IpCisJCQkJcmV0dXJuIHBhcjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gVG9r
ZW4oVkFSSUFCTEVSRUZFUkVOQ0UsIHBhci52YWx1ZSk7CisJCX0KKwl9CisKKwlUb2tlbiB0MSA9
IGxleE5DTmFtZSgpOworCWlmICh0MS50eXBlID09IEVSUk9SKSByZXR1cm4gdDE7CisKKwlza2lw
V1MoKTsKKwkvL0lmIHdlJ3JlIGluIGFuIG9wZXJhdG9yIGNvbnRleHQsIGNoZWNrIGZvciBhbnkg
b3BlcmF0b3IgbmFtZXMKKwlpZiAoaXNPcGVyYXRvckNvbnRleHQoKSkgeworCQlpZiAodDEudmFs
dWUgPT0gImFuZCIpIC8vIyMjIGhhc2g/CisJCQlyZXR1cm4gVG9rZW4oQU5EKTsKKwkJaWYgKHQx
LnZhbHVlID09ICJvciIpCisJCQlyZXR1cm4gVG9rZW4oT1IpOworCQlpZiAodDEudmFsdWUgPT0g
Im1vZCIpCisJCQlyZXR1cm4gVG9rZW4oTVVMT1AsIE51bWVyaWNPcDo6T1BfTW9kKTsKKwkJaWYg
KHQxLnZhbHVlID09ICJkaXYiKQorCQkJcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1lcmljT3A6Ok9Q
X0Rpdik7CisJfQorCisJLy9TZWUgd2hldGhlciB3ZSBhcmUgYXQgYSA6CisJaWYgKHBlZWtDdXJI
ZWxwZXIoKSA9PSAnOicpIHsKKwkJbV9uZXh0UG9zKys7CisJCS8vQW55IGNoYW5jZSBpdCdzIGFu
IGF4aXMgbmFtZT8KKwkJaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnOicpIHsKKwkJCW1fbmV4dFBv
cysrOworCQkJCisJCQkvL0l0IG1pZ2h0IGJlIGFuIGF4aXMgbmFtZS4KKwkJCVN0ZXA6OkF4aXNU
eXBlIGF4aXNUeXBlOworCQkJaWYgKGlzQXhpc05hbWUodDEudmFsdWUsIGF4aXNUeXBlKSkKKwkJ
CQlyZXR1cm4gVG9rZW4oQVhJU05BTUUsIGF4aXNUeXBlKTsKKwkJCS8vVWdoLCA6OiBpcyBvbmx5
IHZhbGlkIGluIGF4aXMgbmFtZXMgLT4gZXJyb3IKKwkJCXJldHVybiBUb2tlbihFUlJPUik7CisJ
CX0KKworCQkvL1NlZW1zIGxpa2UgdGhpcyBpcyBhIGZ1bGx5IHF1YWxpZmllZCBxbmFtZSwgb3Ig
cGVyaGFwcyB0aGUgKiBtb2RpZmllZCBvbmUgZnJvbSBOYW1lVGVzdAorCQlza2lwV1MoKTsKKwkJ
aWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnKicpIHsKKwkJCW1fbmV4dFBvcysrOworCQkJcmV0dXJu
IFRva2VuKE5BTUVURVNULCB0MS52YWx1ZSArICI6KiIpOworCQl9CisJCQorCQkvL01ha2UgYSBm
dWxsIHFuYW1lLi4KKwkJVG9rZW4gdDIgPSBsZXhOQ05hbWUoKTsKKwkJaWYgKHQyLnR5cGUgPT0g
RVJST1IpIHJldHVybiB0MjsKKwkJCisJCXQxLnZhbHVlID0gdDEudmFsdWUgKyAnOicgKyB0Mi52
YWx1ZTsKKwl9CisKKwlza2lwV1MoKTsKKwlpZiAocGVla0N1ckhlbHBlcigpID09ICcoJykgewor
CQkvL25vdGU6IHdlIGRvbid0IHN3YWxsb3cgdGhlICggaGVyZSEKKwkJCisJCS8vZWl0aGVyIG5v
ZGUgdHlwZSBvZiBmdW5jdGlvbiBuYW1lCisJCWlmIChpc05vZGVUeXBlTmFtZSh0MS52YWx1ZSkp
IHsKKwkJCWlmICh0MS52YWx1ZSA9PSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIpCisJCQkJcmV0
dXJuIFRva2VuKFBJLCB0MS52YWx1ZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIFRva2VuKE5PREVU
WVBFLCB0MS52YWx1ZSk7CisJCX0KKwkJLy9tdXN0IGJlIGEgZnVuY3Rpb24gbmFtZS4KKwkJcmV0
dXJuIFRva2VuKEZVTkNUSU9OTkFNRSwgdDEudmFsdWUpOworCX0KKworCS8vQXQgdGhpcyBwb2lu
dCwgaXQgbXVzdCBiZSBOQU1FVEVTVAorCXJldHVybiBUb2tlbihOQU1FVEVTVCwgdDEudmFsdWUp
OworfQorCitUb2tlbiBUb2tlbml6ZXI6Om5leHRUb2tlbigpCit7CisJVG9rZW4gdG9SZXQgPSBu
ZXh0VG9rZW5JbnRlcm5hbCgpOworCW1fbGFzdFRva2VuVHlwZSA9IHRvUmV0LnR5cGU7CisJcmV0
dXJuIHRvUmV0OworfQorCitUb2tlbml6ZXI6OlRva2VuaXplcigpCit7CisJcmVzZXQoU3RyaW5n
KCkpOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworfQorCit2b2lkIFRva2VuaXpl
cjo6cmVzZXQoY29uc3QgU3RyaW5nJiBkYXRhKQoreworCW1fbmV4dFBvcyA9IDA7CisJbV9kYXRh
ID0gZGF0YTsKKwltX2xhc3RUb2tlblR5cGUgPSAwOworfQorCit9Cit9CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOjpYUGF0aDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitpbnQgeHBh
dGh5eWxleCgpCit7CisJVG9rZW4gdG9rID0gVG9rZW5pemVyOjpzZWxmKCkubmV4dFRva2VuKCk7
CisgICAgaWYgKCF0b2sudmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHhwYXRoeXlsdmFsLnN0
ciA9IG5ldyBEZXByZWNhdGVkU3RyaW5nKHRvay52YWx1ZSk7CisJfSBlbHNlIGlmICh0b2suaW50
VmFsdWUpIHsKKwkJeHBhdGh5eWx2YWwubnVtID0gdG9rLmludFZhbHVlOworCX0KKwlyZXR1cm4g
dG9rLnR5cGU7Cit9CisKK3ZvaWQgaW5pdFRva2VuaXplcihjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKwlUb2tlbml6ZXI6OnNlbGYoKS5yZXNldChzdHJpbmcpOworfQorCit2b2lkIHhwYXRoeXll
cnJvcihjb25zdCBjaGFyICpzdHIpCit7CisJLy8gWFhYIENsZWFuIHhwYXRoeXlsdmFsLnN0ciB1
cCB0byBhdm9pZCBsZWFraW5nIGl0LgorfQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NTUgQEAKKy8qCisgKiBzdGVwLmNjIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8
cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgInN0ZXAuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJOYW1l
ZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1
ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
WFBhdGggeworCisvKiBGSVhNRTogSSBjYW4ndCBmaW5kIGFueXdoZXJlIGluIHRoZSB4cGF0aCBz
cGVjIHdoZXJlIHRoaXMgc2hvdWxkIGJlIHVzZWQKK3N0YXRpYyBib29sIGFyZUFkamFjZW50VGV4
dE5vZGVzKCBOb2RlICpuLCBOb2RlICptICkKK3sKKwlpZiAoICFuIHx8ICFtICkgeworCQlyZXR1
cm4gZmFsc2U7CisJfQorCisJaWYgKCBuLT5ub2RlVHlwZSgpICE9IE5vZGU6OlRFWFRfTk9ERSAm
JiBuLT5ub2RlVHlwZSgpICE9IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSApIHsKKwkJcmV0dXJu
IGZhbHNlOworCX0KKwlpZiAoIG0tPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVYVF9OT0RFICYmIG0t
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFICkgeworCQlyZXR1cm4gZmFs
c2U7CisJfQorCisJcmV0dXJuICggbi0+bmV4dFNpYmxpbmcoKSAmJiBuLT5uZXh0U2libGluZygp
LT5pc1NhbWVOb2RlKCBtICkgKSB8fAorCSAgICAgICAoIG0tPm5leHRTaWJsaW5nKCkgJiYgbS0+
bmV4dFNpYmxpbmcoKS0+aXNTYW1lTm9kZSggbiApICk7Cit9CisKK3N0YXRpYyBEb21Ob2RlTGlz
dCBjb21wcmVzc1RleHROb2RlcyggY29uc3QgRG9tTm9kZUxpc3QgJm5vZGVzICkKK3sKKwlEb21O
b2RlTGlzdCBvdXROb2RlczsKKwlEb21Ob2RlTGlzdDo6Q29uc3RJdGVyYXRvciBpdCA9IG5vZGVz
LmJlZ2luKCk7CisJRG9tTm9kZUxpc3Q6OkNvbnN0SXRlcmF0b3IgZW5kID0gbm9kZXMuZW5kKCk7
CisJd2hpbGUgKCBpdCAhPSBlbmQgKSB7CisJCURvbU5vZGVMaXN0OjpDb25zdEl0ZXJhdG9yIG5l
eHRJdCA9IGl0OworCQkrK25leHRJdDsKKwkJaWYgKCBuZXh0SXQgPT0gZW5kIHx8ICFhcmVBZGph
Y2VudFRleHROb2RlcyggKml0LCAqbmV4dEl0ICkgKSB7CisJCQlvdXROb2Rlcy5hcHBlbmQoICpp
dCApOworCQl9IGVsc2UgaWYgKCBhcmVBZGphY2VudFRleHROb2RlcyggKml0LCAqbmV4dEl0ICkg
KSB7CisjaWZkZWYgWFBBVEhfQ09OVkVSU0lPTl9DT01QTEVURQorCQkJRGVwcmVjYXRlZFN0cmlu
ZyBzID0gKCAqaXQgKS0+bm9kZVZhbHVlKCktPnN0cmluZygpOworCQkJaXQgPSBuZXh0SXQrKzsK
KwkJCXdoaWxlICggbmV4dEl0ICE9IGVuZCAmJiBhcmVBZGphY2VudFRleHROb2RlcyggKml0LCAq
bmV4dEl0ICkgKSB7CisJCQkJcyArPSAoICppdCApLT5ub2RlVmFsdWUoKS0+c3RyaW5nKCk7CisJ
CQl9CisJCQlvdXROb2Rlcy5hcHBlbmQoICggKml0ICktPm93bmVyRG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUoIG5ldyBET01TdHJpbmdJbXBsKCBzICkgKSApOworI2VuZGlmICAgICAgICAgICAg
CisJCX0KKwkJaXQgPSBuZXh0SXQ7CisJCQorCX0KKwlyZXR1cm4gb3V0Tm9kZXM7Cit9CisqLwor
CitEZXByZWNhdGVkU3RyaW5nIFN0ZXA6OmF4aXNBc1N0cmluZyggQXhpc1R5cGUgYXhpcyApCit7
CisJc3dpdGNoICggYXhpcyApIHsKKwkJY2FzZSBBbmNlc3RvckF4aXM6IHJldHVybiAiYW5jZXN0
b3IiOworCQljYXNlIEFuY2VzdG9yT3JTZWxmQXhpczogcmV0dXJuICJhbmNlc3Rvci1vci1zZWxm
IjsKKwkJY2FzZSBBdHRyaWJ1dGVBeGlzOiByZXR1cm4gImF0dHJpYnV0ZSI7CisJCWNhc2UgQ2hp
bGRBeGlzOiByZXR1cm4gImNoaWxkIjsKKwkJY2FzZSBEZXNjZW5kYW50QXhpczogcmV0dXJuICJk
ZXNjZW5kYW50IjsKKwkJY2FzZSBEZXNjZW5kYW50T3JTZWxmQXhpczogcmV0dXJuICJkZXNjZW5k
YW50LW9yLXNlbGYiOworCQljYXNlIEZvbGxvd2luZ0F4aXM6IHJldHVybiAiZm9sbG93aW5nIjsK
KwkJY2FzZSBGb2xsb3dpbmdTaWJsaW5nQXhpczogcmV0dXJuICJmb2xsb3dpbmctc2libGluZyI7
CisJCWNhc2UgTmFtZXNwYWNlQXhpczogcmV0dXJuICJuYW1lc3BhY2UiOworCQljYXNlIFBhcmVu
dEF4aXM6IHJldHVybiAicGFyZW50IjsKKwkJY2FzZSBQcmVjZWRpbmdBeGlzOiByZXR1cm4gInBy
ZWNlZGluZyI7CisJCWNhc2UgUHJlY2VkaW5nU2libGluZ0F4aXM6IHJldHVybiAicHJlY2VkaW5n
LXNpYmxpbmciOworCQljYXNlIFNlbGZBeGlzOiByZXR1cm4gInNlbGYiOworCX0KKwlyZXR1cm4g
RGVwcmVjYXRlZFN0cmluZygpOworfQorCitTdGVwOjpTdGVwKCkKK3sKK30KKworU3RlcDo6U3Rl
cChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJpbmcmIG5vZGVUZXN0LCBjb25zdCBWZWN0b3I8UHJl
ZGljYXRlKj4mIHByZWRpY2F0ZXMpCisJOiBtX2F4aXMoYXhpcyksCisJbV9ub2RlVGVzdChub2Rl
VGVzdCksCisJbV9wcmVkaWNhdGVzKHByZWRpY2F0ZXMpCit7Cit9CisKK1N0ZXA6On5TdGVwKCkK
K3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9wcmVkaWNhdGVzKTsKK30KKworTm9kZVNldCBTdGVw
OjpldmFsdWF0ZShOb2RlICpjb250ZXh0KSBjb25zdAoreworICAgIExPRyhYUGF0aCwgIkV2YWx1
YXRpbmcgc3RlcCwgYXhpcz0nJXMnLCBub2RldGVzdD0nJXMnLCAldSBwcmVkaWNhdGVzXG4iLAor
ICAgICAgICAgICAgYXhpc0FzU3RyaW5nKG1fYXhpcykuYXNjaWkoKSwgbV9ub2RlVGVzdC5hc2Np
aSgpLCBtX3ByZWRpY2F0ZXMuc2l6ZSgpKTsKKwlpZiAoIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RUxFTUVOVF9OT0RFICkgeworCQlMT0coWFBhdGgsICJDb250ZXh0IG5vZGUgaXMgYW4g
ZWxlbWVudCBjYWxsZWQgJXNcbiIsIGNvbnRleHQtPm5vZGVOYW1lKCkuYXNjaWkoKSk7CisJfSBl
bHNlIGlmICggY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSApIHsK
KyAgICAgICAgTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIGFuIGF0dHJpYnV0ZSBjYWxsZWQg
JXMgd2l0aCB2YWx1ZSAlc1xuIiwgCisgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlTmFtZSgp
LmFzY2lpKCksIAorICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZVZhbHVlKCkuYXNjaWkoKSk7
CisJfSBlbHNlIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIG9mIHVua25v
d24gdHlwZSAlZFxuIiwgY29udGV4dC0+bm9kZVR5cGUoKSk7CisJfQorCisJTm9kZVNldCBpbk5v
ZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCksIG91dE5vZGVzOworICAgIExPRyhYUGF0aCwgIkF4
aXMgJXMgbWF0Y2hlcyAlZCBub2Rlcy5cbiIsIGF4aXNBc1N0cmluZyhtX2F4aXMpLmFzY2lpKCks
IGluTm9kZXMuc2l6ZSgpKTsKKworCWluTm9kZXMgPSBub2RlVGVzdE1hdGNoZXMoaW5Ob2Rlcyk7
CisgICAgTE9HKFhQYXRoLCAiTm9kZXRlc3QgJXMgdHJpbXMgdGhpcyBudW1iZXIgdG8gJWRcbiIs
IG1fbm9kZVRlc3QuYXNjaWkoKSwgaW5Ob2Rlcy5zaXplKCkpOworCQorICAgIG91dE5vZGVzID0g
aW5Ob2RlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVkaWNhdGVzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIFByZWRpY2F0ZSogcHJlZGljYXRlID0gbV9wcmVkaWNhdGVzW2ld
OworCisJCW91dE5vZGVzLmNsZWFyKCk7CisJCUV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0
KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOworCQlFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4
dCgpLnBvc2l0aW9uID0gMTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluTm9k
ZXMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpbk5vZGVzW2pdLmdl
dCgpOworCisJCQlFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgPSBub2RlOwor
CQkJRXZhbHVhdGlvbkNvbnRleHQgYmFja3VwQ3R4ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNv
bnRleHQoKTsKKwkJCWlmICggcHJlZGljYXRlLT5ldmFsdWF0ZSgpICkgeworCQkJCW91dE5vZGVz
LmFwcGVuZCggbm9kZSApOworCQkJfQorCQkJRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQo
KSA9IGJhY2t1cEN0eDsKKwkJCSsrRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3Np
dGlvbjsKKwkJfQorCisJCUxPRyhYUGF0aCwgIlx0UHJlZGljYXRlIHRyaW1zIHRoaXMgbnVtYmVy
IHRvICVkIiwgb3V0Tm9kZXMuc2l6ZSgpKTsKKworCQlpbk5vZGVzID0gb3V0Tm9kZXM7CisJfQor
CXJldHVybiBvdXROb2RlczsKK30KKworTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyggTm9kZSAq
Y29udGV4dCApIGNvbnN0Cit7CisJTm9kZVNldCBub2RlczsKKwlzd2l0Y2ggKCBtX2F4aXMgKSB7
CisJCWNhc2UgQ2hpbGRBeGlzOiB7CisJCQlOb2RlICpuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgp
OworCQkJd2hpbGUgKCBuICkgeworCQkJCW5vZGVzLmFwcGVuZCggbiApOworCQkJCW4gPSBuLT5u
ZXh0U2libGluZygpOworCQkJfQorCQkJcmV0dXJuIG5vZGVzOworCQl9CisJCWNhc2UgRGVzY2Vu
ZGFudEF4aXM6IAorCQkJcmV0dXJuIGdldENoaWxkcmVuUmVjdXJzaXZlbHkoY29udGV4dCk7CisJ
CWNhc2UgUGFyZW50QXhpczoKKwkJCW5vZGVzLmFwcGVuZChjb250ZXh0LT5wYXJlbnROb2RlKCkp
OworCQkJcmV0dXJuIG5vZGVzOworCQljYXNlIEFuY2VzdG9yQXhpczogeworCQkJTm9kZSAqbiA9
IGNvbnRleHQtPnBhcmVudE5vZGUoKTsKKwkJCXdoaWxlICggbiApIHsKKwkJCQlub2Rlcy5hcHBl
bmQoIG4gKTsKKwkJCQluID0gbi0+cGFyZW50Tm9kZSgpOworCQkJfQorCQkJcmV0dXJuIG5vZGVz
OworCQl9CisJCWNhc2UgRm9sbG93aW5nU2libGluZ0F4aXM6IHsKKwkJCWlmIChjb250ZXh0LT5u
b2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CisJCQkgICAgIGNvbnRleHQtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpIAorCQkJCXJldHVybiBOb2Rl
U2V0KCk7CisKKwkJCU5vZGUgKm4gPSBjb250ZXh0LT5uZXh0U2libGluZygpOworCQkJd2hpbGUg
KCBuICkgeworCQkJCW5vZGVzLmFwcGVuZCggbiApOworCQkJCW4gPSBuLT5uZXh0U2libGluZygp
OworCQkJfQorCQkJcmV0dXJuIG5vZGVzOworCQl9CisJCWNhc2UgUHJlY2VkaW5nU2libGluZ0F4
aXM6IHsKKwkJCWlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RF
IHx8CisJCQkgICAgIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNF
X05PREUpCisJCQkJcmV0dXJuIE5vZGVTZXQoKTsKKworCQkJTm9kZSAqbiA9IGNvbnRleHQtPnBy
ZXZpb3VzU2libGluZygpOworCQkJd2hpbGUgKCBuICkgeworCQkJCW5vZGVzLmFwcGVuZCggbiAp
OworCQkJCW4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKwkJCX0KKwkJCXJldHVybiBub2RlczsK
KwkJfQorCQljYXNlIEZvbGxvd2luZ0F4aXM6IHsKKwkJCU5vZGUgKnAgPSBjb250ZXh0OworCQkJ
d2hpbGUgKCAhaXNSb290RG9tTm9kZSggcCApICkgeworCQkJCU5vZGUgKm4gPSBwLT5uZXh0U2li
bGluZygpOworCQkJCXdoaWxlICggbiApIHsKKwkJCQkJbm9kZXMuYXBwZW5kKCBuICk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG4pKTsK
KworCQkJCQluID0gbi0+bmV4dFNpYmxpbmcoKTsKKwkJCQl9CisJCQkJcCA9IHAtPnBhcmVudE5v
ZGUoKTsKKwkJCX0KKwkJCXJldHVybiBub2RlczsKKwkJfQorCQljYXNlIFByZWNlZGluZ0F4aXM6
IHsKKwkJCU5vZGUgKnAgPSBjb250ZXh0OworCQkJd2hpbGUgKCAhaXNSb290RG9tTm9kZSggcCAp
ICkgeworCQkJCU5vZGUgKm4gPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKKwkJCQl3aGlsZSAoIG4g
KSB7CisJCQkJCW5vZGVzLmFwcGVuZCggbiApOworICAgICAgICAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQoZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShuKSk7CisJCQkJCW4gPSBuLT5wcmV2aW91c1Np
YmxpbmcoKTsKKwkJCQl9CisJCQkJcCA9IHAtPnBhcmVudE5vZGUoKTsKKwkJCX0KKwkJCXJldHVy
biBub2RlczsKKwkJfQorCQljYXNlIEF0dHJpYnV0ZUF4aXM6IHsKKwkJCWlmICggY29udGV4dC0+
bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCisJCQkJcmV0dXJuIE5vZGVTZXQoKTsK
KworCQkJTmFtZWRBdHRyTWFwICphdHRycyA9IGNvbnRleHQtPmF0dHJpYnV0ZXMoKTsKKwkJCWlm
ICghYXR0cnMpIHsKKyAgICAgICAgICAgICAgICBMT0coWFBhdGgsICJOb2RlOjphdHRyaWJ1dGVz
KCkgcmV0dXJuZWQgTlVMTCEiKTsKKwkJCQlyZXR1cm4gbm9kZXM7CisJCQl9CisKKwkJCWZvciAo
dW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgKytpKSAKKwkJCQlub2Rl
cy5hcHBlbmQgKGF0dHJzLT5pdGVtKGkpKTsKKworCQkJcmV0dXJuIG5vZGVzOworCQl9CisJCWNh
c2UgTmFtZXNwYWNlQXhpczogeworCQkJaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
RUxFTUVOVF9OT0RFKQorCQkJCXJldHVybiBOb2RlU2V0KCk7CisKKwkJCWJvb2wgZm91bmRYbWxO
c05vZGUgPSBmYWxzZTsKKwkJCU5vZGUgKm5vZGUgPSBjb250ZXh0OworCQkJd2hpbGUgKCBub2Rl
ICkgeworCQkJCU5hbWVkQXR0ck1hcCAqYXR0cnMgPSBub2RlLT5hdHRyaWJ1dGVzKCk7CisJCQkJ
aWYgKCAhYXR0cnMgKSB7CisJCQkJCUxPRyhYUGF0aCwgIk5vZGU6OmF0dHJpYnV0ZXMoKSByZXR1
cm5lZCBOVUxMISIpOworCisJCQkJCW5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisJCQkJCWNv
bnRpbnVlOworCQkJCX0KKworCQkJCWZvciAoIHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBhdHRy
cy0+bGVuZ3RoKCk7ICsraSApIHsKKwkJCQkJTm9kZSAqbiA9IGF0dHJzLT5pdGVtKGkpLmdldCgp
OworCQkJCQlpZiAoIG4tPm5vZGVOYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgo
ICJ4bWxuczoiICkgKSB7CisJCQkJCQlub2Rlcy5hcHBlbmQoIG4gKTsKKwkJCQkJfSBlbHNlIGlm
IChuLT5ub2RlTmFtZSgpID09ICJ4bWxucyIgJiYKKwkJCQkJICAgICAgICAgICAhZm91bmRYbWxO
c05vZGUpIHsKKwkJCQkJCWZvdW5kWG1sTnNOb2RlID0gdHJ1ZTsKKwkJCQkJCWlmICggIW4tPm5v
ZGVWYWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5pc0VtcHR5KCkgKSB7CisJCQkJCQkJbm9kZXMu
YXBwZW5kKCBuICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKKwkJCX0KKwkJCXJldHVybiBub2RlczsKKwkJfQorCQljYXNlIFNlbGZBeGlz
OgorCQkJbm9kZXMuYXBwZW5kKCBjb250ZXh0ICk7CisJCQlyZXR1cm4gbm9kZXM7CisJCWNhc2Ug
RGVzY2VuZGFudE9yU2VsZkF4aXM6CisJCQlub2Rlcy5hcHBlbmQoY29udGV4dCk7CisgICAgICAg
ICAgICBub2Rlcy5hcHBlbmQoZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShjb250ZXh0KSk7CisJCQly
ZXR1cm4gbm9kZXM7CisJCWNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOiB7CisJCQlub2Rlcy5hcHBl
bmQoY29udGV4dCk7CisJCQlOb2RlICpuID0gY29udGV4dC0+cGFyZW50Tm9kZSgpOworCQkJd2hp
bGUgKCBuICkgeworCQkJCW5vZGVzLmFwcGVuZCggbiApOworCQkJCW4gPSBuLT5wYXJlbnROb2Rl
KCk7CisJCQl9CisJCQlyZXR1cm4gbm9kZXM7CisJCX0KKwkJZGVmYXVsdDoKKyAgICAgICAgICAg
IExPRyhYUGF0aCwgIlVua25vd24gYXhpcyAlcyBwYXNzZWQgdG8gU3RlcDo6bm9kZXNJbkF4aXMi
LCBheGlzQXNTdHJpbmcobV9heGlzKS5hc2NpaSgpKTsKKwl9CisKKwlyZXR1cm4gTm9kZVNldCgp
OworfQorCisKK05vZGVTZXQgU3RlcDo6bm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVTZXQmIG5v
ZGVzKSBjb25zdAoreworCVN0cmluZyBucyA9IG5hbWVzcGFjZUZyb21Ob2RldGVzdCggbV9ub2Rl
VGVzdCApOworCU5vZGVTZXQgbWF0Y2hlczsKKwlpZiAoIG1fbm9kZVRlc3QgPT0gIioiICkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKwkJCWlmIChub2RlLT5ub2Rl
VHlwZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMpKSB7CisJCQkJaWYgKCBucy5pc0VtcHR5
KCkgfHwKKwkJCQkgICAgIG5vZGUtPm5hbWVzcGFjZVVSSSgpID09IG5zICkgeworCQkJCQltYXRj
aGVzLmFwcGVuZChub2RlKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIG5vZGVzOworCX0g
ZWxzZSBpZiAoIG1fbm9kZVRlc3QgPT0gInRleHQoKSIgKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgTm9kZSAqbm9k
ZSA9IG5vZGVzW2ldLmdldCgpOworCQkJaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVY
VF9OT0RFIHx8CisgICAgICAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUgKSAKKwkJCQltYXRjaGVzLmFwcGVuZChub2RlKTsKKwkJfQorCQlyZXR1
cm4gbWF0Y2hlczsKKwl9IGVsc2UgaWYgKCBtX25vZGVUZXN0ID09ICJjb21tZW50KCkiICkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkKKyAgICAgICAgICAgICAgICBt
YXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorCQlyZXR1cm4gbWF0Y2hlczsKKwl9IGVs
c2UgaWYgKCBtX25vZGVUZXN0LnN0YXJ0c1dpdGgoICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIiAp
ICkgeworCQlEZXByZWNhdGVkU3RyaW5nIHBhcmFtOworCisJCWNvbnN0IGludCBzcGFjZSA9IG1f
bm9kZVRlc3QuZmluZCggJyAnICk7CisJCWlmICggc3BhY2UgPiAtMSApIHsKKwkJCXBhcmFtID0g
bV9ub2RlVGVzdC5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHNwYWNlICsgMSk7CisJCX0KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
ICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisKKwkJCWlmIChub2RlLT5ub2RlVHlw
ZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSAmJgorICAgICAgICAgICAg
ICAgIChwYXJhbS5pc0VtcHR5KCkgfHwgbm9kZS0+bm9kZU5hbWUoKSA9PSBwYXJhbSkpCisgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAgICB9ICAgIAorCQly
ZXR1cm4gbWF0Y2hlczsKKwl9IGVsc2UgaWYgKCBtX25vZGVUZXN0ID09ICJub2RlKCkiICkgewor
CQlyZXR1cm4gbm9kZXM7CisJfSBlbHNlIHsKKwkJU3RyaW5nIHByZWZpeCwgbG9jYWxOYW1lOwor
CisJCWNvbnN0IGludCBjb2xvbiA9IG1fbm9kZVRlc3QuZmluZCggJzonICk7CisJCWlmIChjb2xv
biA+IC0xKSB7CisJCQlwcmVmaXggPSBtX25vZGVUZXN0LmxlZnQoIGNvbG9uICk7CisJCQlsb2Nh
bE5hbWUgPSBtX25vZGVUZXN0LmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoY29sb24gKyAxKTsKKwkJ
fSBlbHNlIHsKKwkJCWxvY2FsTmFtZSA9IG1fbm9kZVRlc3Q7CisJCX0KKworCQlpZiAoICFwcmVm
aXguaXNFbXB0eSgpICkgeworI2lmZGVmIFhQQVRIX0NPTlZFUlNJT05fQ09NUExFVEUKKwkJCURP
TVN0cmluZ0ltcGwgcyggcHJlZml4ICk7CisJCQlpZiAoICFFeHByZXNzaW9uOjpldmFsdWF0aW9u
Q29udGV4dCgpLnJlc29sdmVyLT5sb29rdXBOYW1lc3BhY2VVUkkoICZzICkgKSB7CisJCQkJdGhy
b3cgbmV3IFhQYXRoRXhjZXB0aW9uSW1wbCggTkFNRVNQQUNFX0VSUiApOworCQkJfQorI2VuZGlm
CisJCX0KKworCQlpZiAoIG1fYXhpcyA9PSBBdHRyaWJ1dGVBeGlzICkgeworCQkJLy8gSW4gWFBh
dGggbGFuZCwgbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgYWNjZXNzaWJsZQorCQkJLy8gb24gdGhl
IGF0dHJpYnV0ZSBheGlzLgorCQkJaWYgKCBsb2NhbE5hbWUgPT0gInhtbG5zIiApIHsKKwkJCQly
ZXR1cm4gbWF0Y2hlczsKKwkJCX0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgTm9kZSAqbm9kZSA9IG5v
ZGVzW2ldLmdldCgpOworICAgICAgICAgICAgICAgIAorCQkJCWlmICggbm9kZS0+bm9kZU5hbWUo
KSA9PSBsb2NhbE5hbWUgKSB7CisJCQkJCW1hdGNoZXMuYXBwZW5kKCBub2RlICk7CisJCQkJCWJy
ZWFrOyAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUuCisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4g
bWF0Y2hlczsKKwkJfSBlbHNlIGlmICggbV9heGlzID09IE5hbWVzcGFjZUF4aXMgKSB7CisgICAg
ICAgICAgICBMT0coWFBhdGgsICJOb2RlIHRlc3QgJXMgb24gYXhpcyAlcyBpcyBub3QgaW1wbGVt
ZW50ZWQgeWV0LiIsCisgICAgICAgICAgICAgICAgbV9ub2RlVGVzdC5hc2NpaSgpLCBheGlzQXNT
dHJpbmcobV9heGlzKS5hc2NpaSgpKTsKKwkJfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIE5v
ZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAKKyAgICAgICAgICAgICAgICAvLyBXZSB1c2Ug
dGFnUU5hbWUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGVsZW1lbnQgbmFtZSBpbiB1
cHBlcmNhc2UgCisgICAgICAgICAgICAgICAgLy8gbGlrZSB3ZSBnZXQgd2l0aCBIVE1MIGVsZW1l
bnRzLgorCQkJCWlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSAmJgor
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KG5vZGUpLT50YWdRTmFt
ZSgpLnRvU3RyaW5nKCkgPT0gbG9jYWxOYW1lKSB7CisJCQkJCW1hdGNoZXMuYXBwZW5kKG5vZGUp
OworCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoZXM7CisJCX0KKwl9CisgICAgCisgICAg
TE9HKFhQYXRoLCAiTm9kZSB0ZXN0ICVzIG9uIGF4aXMgJXMgaXMgbm90IGltcGxlbWVudGVkIHll
dC4iLAorICAgICAgICBtX25vZGVUZXN0LmFzY2lpKCksIGF4aXNBc1N0cmluZyhtX2F4aXMpLmFz
Y2lpKCkpOworCisJcmV0dXJuIG1hdGNoZXM7Cit9CisKK3ZvaWQgU3RlcDo6b3B0aW1pemUoKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6ZSgpOyBpKysp
CisJCW1fcHJlZGljYXRlc1tpXS0+b3B0aW1pemUoKTsKK30KKworU3RyaW5nIFN0ZXA6Om5hbWVz
cGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdAoreworCWludCBp
ID0gbm9kZVRlc3QuZmluZCggJzonICk7CisJaWYgKCBpID09IC0xICkgeworCQlyZXR1cm4gRGVw
cmVjYXRlZFN0cmluZygpOworCX0KKworCVN0cmluZyBwcmVmaXgobm9kZVRlc3QubGVmdChpKSk7
CisgICAgCisJTm9kZSAqY3R4Tm9kZSA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCku
bm9kZTsKKwlyZXR1cm4gY3R4Tm9kZS0+bG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCk7Cit9CisK
K05vZGU6Ok5vZGVUeXBlIFN0ZXA6OnByaW1hcnlOb2RlVHlwZShBeGlzVHlwZSBheGlzKSBjb25z
dAoreworCXN3aXRjaCAoIGF4aXMgKSB7CisJCWNhc2UgQXR0cmlidXRlQXhpczoKKwkJCXJldHVy
biBOb2RlOjpBVFRSSUJVVEVfTk9ERTsKKwkJY2FzZSBOYW1lc3BhY2VBeGlzOgorCQkJcmV0dXJu
IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE5vZGU6
OkVMRU1FTlRfTk9ERTsKKwl9Cit9CisKK30KK30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBs
L3V0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIHV0aWwuY2MgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitib29sIGlzUm9v
dERvbU5vZGUoTm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gbm9kZSAmJiAhbm9kZS0+cGFyZW50Tm9k
ZSgpOworfQorCitTdHJpbmcgc3RyaW5nVmFsdWUoIE5vZGUgKm5vZGUgKQoreworCXN3aXRjaCAo
IG5vZGUtPm5vZGVUeXBlKCkgKSB7CisJCWNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisJCWNh
c2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorCQljYXNlIE5vZGU6OkNPTU1F
TlRfTk9ERToKKwkJY2FzZSBOb2RlOjpURVhUX05PREU6CisJCQlyZXR1cm4gbm9kZS0+bm9kZVZh
bHVlKCk7CisJCWRlZmF1bHQ6CisJCQlpZiAoIGlzUm9vdERvbU5vZGUoIG5vZGUgKQorCQkJICAg
ICB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSApIHsKKwkJCQlTdHJp
bmcgc3RyOworICAgICAgICAgICAgICAgIE5vZGVTZXQgbm9kZXMgPSBnZXRDaGlsZHJlblJlY3Vy
c2l2ZWx5KG5vZGUpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9k
ZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gc3RyaW5nVmFsdWUobm9kZSk7CisJCQkJfQorCisJCQkJcmV0dXJuIHN0cjsKKwkJCX0K
Kwl9CisgICAgCisJcmV0dXJuIFN0cmluZygpOworfQorCitOb2RlU2V0IGdldENoaWxkcmVuUmVj
dXJzaXZlbHkoIE5vZGUgKm5vZGUgKQoreworCU5vZGVTZXQgbm9kZXM7CisJTm9kZSAqbiA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKwl3aGlsZSAobikgeworCQlub2Rlcy5hcHBlbmQobik7CisgICAg
ICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG4pKTsKKwkJbiA9IG4tPm5l
eHRTaWJsaW5nKCk7CisJfQorCXJldHVybiBub2RlczsKK30KKworYm9vbCBpc1ZhbGlkQ29udGV4
dE5vZGUoIE5vZGUgKm5vZGUgKQoreworCXJldHVybiBub2RlICYmICggCisgICAgICAgICAgIG5v
ZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFIHx8CisJICAgICAgIG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8CisJICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpOworfQorCit9Cit9CisKSW5kZXg6IFdlYkNvcmUveHBh
dGgvaW1wbC9mdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBmdW5jdGlvbnMuaCAtIENvcHly
aWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
CisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIEZVTkNUSU9OU19ICisjZGVmaW5lIEZVTkNUSU9OU19ICisKKyNp
bmNsdWRlICJleHByZXNzaW9uLmgiCisKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
WFBhdGggeworICAgIAorY2xhc3MgRnVuY3Rpb24gOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVi
bGljOgorICAgIHZvaWQgc2V0QXJndW1lbnRzKGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4gJmFy
Z3MpOworICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcgJm5hbWUpOworCitwcm90ZWN0ZWQ6
CisgICAgRXhwcmVzc2lvbiAqYXJnKGludCBwb3MpOworICAgIGNvbnN0IEV4cHJlc3Npb24gKmFy
ZyhpbnQgcG9zKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgYXJnQ291bnQoKSBjb25zdDsKKyAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX25hbWU7Cit9
OworCitjbGFzcyBGdW5jdGlvbkxpYnJhcnkKK3sKKwlmcmllbmQgc3RydWN0IEZ1bmN0aW9uTWFw
cGluZzsKK3B1YmxpYzoKKwlzdGF0aWMgRnVuY3Rpb25MaWJyYXJ5ICZzZWxmKCk7CisKKwlGdW5j
dGlvbiAqZ2V0RnVuY3Rpb24oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Np
b24gKj4gJmFyZ3MgPSBWZWN0b3I8RXhwcmVzc2lvbio+KCkpIGNvbnN0OworCitwcml2YXRlOgor
CXN0cnVjdCBGdW5jdGlvblJlYzsKKworCUZ1bmN0aW9uTGlicmFyeSgpOworCUZ1bmN0aW9uTGli
cmFyeSggY29uc3QgRnVuY3Rpb25MaWJyYXJ5ICZyaHMgKTsKKwlGdW5jdGlvbkxpYnJhcnkgJm9w
ZXJhdG9yPSggY29uc3QgRnVuY3Rpb25MaWJyYXJ5ICZyaHMgKTsKKworICAgIEhhc2hNYXA8V2Vi
Q29yZTo6U3RyaW5nLCBGdW5jdGlvblJlYz4gbV9mdW5jdGlvbkRpY3Q7Cit9OworCit9Cit9Cisj
ZW5kaWYgLy8gRlVOQ1RJT05TX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXpl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIHRva2VuaXplci5oIC0gQ29weXJpZ2h0IDIwMDUgTWFrc2lt
IE9ybG92aWNoIDxtYWtzaW1Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
Zm5kZWYgVE9LRU5JWkVSX0gKKyNkZWZpbmUgVE9LRU5JWkVSX0gKKworI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAic3RlcC5o
IgorI2luY2x1ZGUgInBhdGguaCIKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJl
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCisvLyBJbnRlcmZhY2UgdG8gdGhlIHBh
cnNlcgoraW50IHhwYXRoeXlsZXgoKTsKK3ZvaWQgeHBhdGh5eWVycm9yKGNvbnN0IGNoYXIgKnN0
cik7Cit2b2lkIGluaXRUb2tlbml6ZXIoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzdHJpbmcpOwor
CisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL3hwYXRo
L2ltcGwvc3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcyIEBACisvKgorICogc3RlcC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICog
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU1RF
UF9ICisjZGVmaW5lIFNURVBfSAorCisjaW5jbHVkZSAicHJlZGljYXRlLmgiCisjaW5jbHVkZSAi
dXRpbC5oIgorCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgWFBhdGggeworICAgICAgICAKK2NsYXNzIFN0ZXAKK3sKK3B1YmxpYzoKKwllbnVtIEF4
aXNUeXBlIHsKKwkJQW5jZXN0b3JBeGlzPTEsIEFuY2VzdG9yT3JTZWxmQXhpcywgQXR0cmlidXRl
QXhpcywKKwkJQ2hpbGRBeGlzLCBEZXNjZW5kYW50QXhpcywgRGVzY2VuZGFudE9yU2VsZkF4aXMs
CisJCUZvbGxvd2luZ0F4aXMsIEZvbGxvd2luZ1NpYmxpbmdBeGlzLCBOYW1lc3BhY2VBeGlzLAor
CQlQYXJlbnRBeGlzLCBQcmVjZWRpbmdBeGlzLCBQcmVjZWRpbmdTaWJsaW5nQXhpcywKKwkJU2Vs
ZkF4aXMKKwl9OworCisJc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgYXhpc0FzU3RyaW5nKCBBeGlz
VHlwZSBheGlzICk7CisKKwlTdGVwKCk7CisJU3RlcChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJp
bmcgJm5vZGVUZXN0LCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4gJnByZWRpY2F0ZXMgPSBWZWN0
b3I8UHJlZGljYXRlKj4oKSk7CisJflN0ZXAoKTsKKworCU5vZGVTZXQgZXZhbHVhdGUoTm9kZSAq
Y29udGV4dCkgY29uc3Q7CisKKwl2b2lkIG9wdGltaXplKCk7CisKK3ByaXZhdGU6CisJTm9kZVNl
dCBub2Rlc0luQXhpcyhOb2RlICpjb250ZXh0KSBjb25zdDsKKwlOb2RlU2V0IG5vZGVUZXN0TWF0
Y2hlcyhjb25zdCBOb2RlU2V0JiBub2RlcykgY29uc3Q7CisJU3RyaW5nIG5hbWVzcGFjZUZyb21O
b2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdDsKKyAgICBOb2RlOjpOb2RlVHlw
ZSBwcmltYXJ5Tm9kZVR5cGUoIEF4aXNUeXBlIGF4aXMgKSBjb25zdDsKKworCUF4aXNUeXBlIG1f
YXhpczsKKwlTdHJpbmcgbV9ub2RlVGVzdDsKKwlWZWN0b3I8UHJlZGljYXRlKj4gbV9wcmVkaWNh
dGVzOworfTsKKworfQorfQorCisjZW5kaWYgLy8gU1RFUF9ICisKSW5kZXg6IFdlYkNvcmUveHBh
dGgvaW1wbC9YUGF0aEdyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwv
WFBhdGhHcmFtbWFyLnkJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhH
cmFtbWFyLnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ4IEBACisleworI2luY2x1ZGUgImNv
bmZpZy5oIgorICAgIAorI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgInhwYXRoL2lt
cGwvcGF0aC5oIgorI2luY2x1ZGUgInN0ZXAuaCIKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNp
bmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidmFyaWFibGVyZWZlcmVuY2UuaCIKKyAgICAKKyNp
bmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2RlZmluZSBZWURFQlVHIDEKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6WFBhdGg7CisgICAg
CitFeHByZXNzaW9uICpwYXJzZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhj
ZXB0aW9uQ29kZSYgY29kZSk7CisgICAgCitleHRlcm4gaW50IHhwYXRoeXlsZXgoKTsKK2V4dGVy
biB2b2lkIHhwYXRoeXllcnJvcihjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgaW5pdFRv
a2VuaXplcihjb25zdCBTdHJpbmcmIHN0cmluZyk7CisKK3N0YXRpYyBFeHByZXNzaW9uICpfdG9w
RXhwcjsKK3N0YXRpYyBib29sIGdvdE5hbWVzcGFjZUVycm9yOworCislfQorCisldW5pb24KK3sK
KyAgICBXZWJDb3JlOjpYUGF0aDo6U3RlcDo6QXhpc1R5cGUgYXhpc1R5cGU7CisJaW50ICAgICAg
ICBudW07CisJRGVwcmVjYXRlZFN0cmluZyAqc3RyOworCVdlYkNvcmU6OlhQYXRoOjpFeHByZXNz
aW9uICpleHByOworCVZlY3RvcjxXZWJDb3JlOjpYUGF0aDo6UHJlZGljYXRlKj4gKnByZWRMaXN0
OworCVZlY3RvcjxXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbio+ICphcmdMaXN0OworCVdlYkNv
cmU6OlhQYXRoOjpTdGVwICpzdGVwOworCVdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGggKmxv
Y2F0aW9uUGF0aDsKK30KKworJWxlZnQgPG51bT4gTVVMT1AgUkVMT1AgRVFPUAorJWxlZnQgPHN0
cj4gUExVUyBNSU5VUworJWxlZnQgPHN0cj4gT1IgQU5ECisldG9rZW4gPGF4aXNUeXBlPiBBWElT
TkFNRQorJXRva2VuIDxzdHI+IE5PREVUWVBFIFBJIEZVTkNUSU9OTkFNRSBMSVRFUkFMCisldG9r
ZW4gPHN0cj4gVkFSSUFCTEVSRUZFUkVOQ0UgTlVNQkVSCisldG9rZW4gPHN0cj4gRE9URE9UIFNM
QVNIU0xBU0ggTkFNRVRFU1QKKyV0b2tlbiBFUlJPUgorCisldHlwZSA8bG9jYXRpb25QYXRoPiBM
b2NhdGlvblBhdGgKKyV0eXBlIDxsb2NhdGlvblBhdGg+IEFic29sdXRlTG9jYXRpb25QYXRoCisl
dHlwZSA8bG9jYXRpb25QYXRoPiBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorJXR5cGUgPHN0ZXA+IFN0
ZXAKKyV0eXBlIDxheGlzVHlwZT4gQXhpc1NwZWNpZmllcgorJXR5cGUgPHN0ZXA+IERlc2NlbmRh
bnRPclNlbGYKKyV0eXBlIDxzdHI+IE5vZGVUZXN0CisldHlwZSA8ZXhwcj4gUHJlZGljYXRlCisl
dHlwZSA8cHJlZExpc3Q+IFByZWRpY2F0ZUxpc3QKKyV0eXBlIDxzdGVwPiBBYmJyZXZpYXRlZFN0
ZXAKKyV0eXBlIDxleHByPiBFeHByCisldHlwZSA8ZXhwcj4gUHJpbWFyeUV4cHIKKyV0eXBlIDxl
eHByPiBGdW5jdGlvbkNhbGwKKyV0eXBlIDxhcmdMaXN0PiBBcmd1bWVudExpc3QKKyV0eXBlIDxl
eHByPiBBcmd1bWVudAorJXR5cGUgPGV4cHI+IFVuaW9uRXhwcgorJXR5cGUgPGV4cHI+IFBhdGhF
eHByCisldHlwZSA8ZXhwcj4gRmlsdGVyRXhwcgorJXR5cGUgPGV4cHI+IE9yRXhwcgorJXR5cGUg
PGV4cHI+IEFuZEV4cHIKKyV0eXBlIDxleHByPiBFcXVhbGl0eUV4cHIKKyV0eXBlIDxleHByPiBS
ZWxhdGlvbmFsRXhwcgorJXR5cGUgPGV4cHI+IEFkZGl0aXZlRXhwcgorJXR5cGUgPGV4cHI+IE11
bHRpcGxpY2F0aXZlRXhwcgorJXR5cGUgPGV4cHI+IFVuYXJ5RXhwcgorCislJQorCitFeHByOgor
CU9yRXhwcgorCXsKKwkJX3RvcEV4cHIgPSAkMTsKKwl9CisJOworCitMb2NhdGlvblBhdGg6CisJ
UmVsYXRpdmVMb2NhdGlvblBhdGgKKwl7CisJCSQkLT5tX2Fic29sdXRlID0gZmFsc2U7CisJfQor
CXwKKwlBYnNvbHV0ZUxvY2F0aW9uUGF0aAorCXsKKwkJJCQtPm1fYWJzb2x1dGUgPSB0cnVlOwor
CX0KKwk7CisKK0Fic29sdXRlTG9jYXRpb25QYXRoOgorCScvJworCXsKKwkJJCQgPSBuZXcgTG9j
YXRpb25QYXRoOworCX0KKwl8CisJJy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoCisJeworCQkkJCA9
ICQyOworCX0KKwl8CisJRGVzY2VuZGFudE9yU2VsZiBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorCXsK
KwkJJCQgPSAkMjsKKwkJJCQtPm1fc3RlcHMuaW5zZXJ0KDAsICQxKTsKKwl9CisJOworCitSZWxh
dGl2ZUxvY2F0aW9uUGF0aDoKKwlTdGVwCisJeworCQkkJCA9IG5ldyBMb2NhdGlvblBhdGg7CisJ
CSQkLT5tX3N0ZXBzLmFwcGVuZCggJDEgKTsKKwl9CisJfAorCVJlbGF0aXZlTG9jYXRpb25QYXRo
ICcvJyBTdGVwCisJeworCQkkJC0+bV9zdGVwcy5hcHBlbmQoICQzICk7CisJfQorCXwKKwlSZWxh
dGl2ZUxvY2F0aW9uUGF0aCBEZXNjZW5kYW50T3JTZWxmIFN0ZXAKKwl7CisJCSQkLT5tX3N0ZXBz
LmFwcGVuZCggJDIgKTsKKwkJJCQtPm1fc3RlcHMuYXBwZW5kKCAkMyApOworCX0KKwk7CisKK1N0
ZXA6CisJTm9kZVRlc3QKKwl7CisJCSQkID0gbmV3IFN0ZXAoIFN0ZXA6OkNoaWxkQXhpcywgKiQx
ICk7CisJCWRlbGV0ZSAkMTsKKwl9CisJfAorCU5vZGVUZXN0IFByZWRpY2F0ZUxpc3QKKwl7CisJ
CSQkID0gbmV3IFN0ZXAoU3RlcDo6Q2hpbGRBeGlzLCAqJDEsICokMiApOworCQlkZWxldGUgJDE7
CisJCWRlbGV0ZSAkMjsKKwl9CisJfAorCUF4aXNTcGVjaWZpZXIgTm9kZVRlc3QKKwl7CisJCSQk
ID0gbmV3IFN0ZXAoICQxLCAqJDIgKTsKKwkJZGVsZXRlICQyOworCX0KKwl8CisJQXhpc1NwZWNp
ZmllciBOb2RlVGVzdCBQcmVkaWNhdGVMaXN0CisJeworCQkkJCA9IG5ldyBTdGVwKCAkMSwgKiQy
LCAgKiQzICk7CisJCWRlbGV0ZSAkMjsKKwkJZGVsZXRlICQzOworCX0KKwl8CisJQWJicmV2aWF0
ZWRTdGVwCisJOworCitBeGlzU3BlY2lmaWVyOgorCUFYSVNOQU1FCisJfAorCSdAJworCXsKKwkJ
JCQgPSBTdGVwOjpBdHRyaWJ1dGVBeGlzOworCX0KKwk7CisKK05vZGVUZXN0OgorCU5BTUVURVNU
CisJeworCQljb25zdCBpbnQgY29sb24gPSAkMS0+ZmluZCgnOicpOworCQlpZiAoY29sb24gPiAt
MSkgeworCQkJU3RyaW5nIHByZWZpeCgkMS0+bGVmdChjb2xvbikpOworCQkJWFBhdGhOU1Jlc29s
dmVyICpyZXNvbHZlciA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucmVzb2x2ZXI7
CisJCQlpZiAoIXJlc29sdmVyIHx8IHJlc29sdmVyLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4
KS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIGdvdE5hbWVzcGFjZUVycm9yID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBZWUFCT1JUOworCQkJfQorCQl9CisJfQorCXwKKwlOT0RFVFlQRSAn
KCcgJyknCisJeworCQkkJCA9IG5ldyBEZXByZWNhdGVkU3RyaW5nKCAqJDEgKyAiKCkiICk7CisJ
fQorCXwKKwlQSSAnKCcgJyknCisJfAorCVBJICcoJyBMSVRFUkFMICcpJworCXsKKwkJRGVwcmVj
YXRlZFN0cmluZyBzID0gKiQxICsgIiAiICsgKiQzOworICAgICAgICBzID0gcy5zdHJpcFdoaXRl
U3BhY2UoKTsKKwkJJCQgPSBuZXcgRGVwcmVjYXRlZFN0cmluZyggcyApOworCQlkZWxldGUgJDE7
CisJCWRlbGV0ZSAkMzsKKwl9CisJOworCitQcmVkaWNhdGVMaXN0OgorCVByZWRpY2F0ZQorCXsK
KwkJJCQgPSBuZXcgVmVjdG9yPFByZWRpY2F0ZSo+OworCQkkJC0+YXBwZW5kKCBuZXcgUHJlZGlj
YXRlKCAkMSApICk7CisJfQorCXwKKwlQcmVkaWNhdGVMaXN0IFByZWRpY2F0ZQorCXsKKwkJJCQt
PmFwcGVuZCggbmV3IFByZWRpY2F0ZSggJDIgKSApOworCX0KKwk7CisKK1ByZWRpY2F0ZToKKwkn
WycgRXhwciAnXScKKwl7CisJCSQkID0gJDI7CisJfQorCTsKKworRGVzY2VuZGFudE9yU2VsZjoK
KwlTTEFTSFNMQVNICisJeworCQkkJCA9IG5ldyBTdGVwKCBTdGVwOjpEZXNjZW5kYW50T3JTZWxm
QXhpcywgIm5vZGUoKSIgKTsKKwl9CisJOworCitBYmJyZXZpYXRlZFN0ZXA6CisJJy4nCisJewor
CQkkJCA9IG5ldyBTdGVwKCBTdGVwOjpTZWxmQXhpcywgIm5vZGUoKSIgKTsKKwl9CisJfAorCURP
VERPVAorCXsKKwkJJCQgPSBuZXcgU3RlcCggU3RlcDo6UGFyZW50QXhpcywgIm5vZGUoKSIgKTsK
Kwl9CisJOworCitQcmltYXJ5RXhwcjoKKwlWQVJJQUJMRVJFRkVSRU5DRQorCXsKKwkJJCQgPSBu
ZXcgVmFyaWFibGVSZWZlcmVuY2UoICokMSApOworCQlkZWxldGUgJDE7CisJfQorCXwKKwknKCcg
RXhwciAnKScKKwl7CisJCSQkID0gJDI7CisJfQorCXwKKwlMSVRFUkFMCisJeworCQkkJCA9IG5l
dyBTdHJpbmdFeHByZXNzaW9uKCAqJDEgKTsKKwkJZGVsZXRlICQxOworCX0KKwl8CisJTlVNQkVS
CisJeworCQkkJCA9IG5ldyBOdW1iZXIoICQxLT50b0RvdWJsZSgpICk7CisJCWRlbGV0ZSAkMTsK
Kwl9CisJfAorCUZ1bmN0aW9uQ2FsbAorCTsKKworRnVuY3Rpb25DYWxsOgorCUZVTkNUSU9OTkFN
RSAnKCcgJyknCisJeworCQkkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0aW9u
KCAkMS0+bGF0aW4xKCkgKTsKKwkJZGVsZXRlICQxOworCX0KKwl8CisJRlVOQ1RJT05OQU1FICco
JyBBcmd1bWVudExpc3QgJyknCisJeworCQkkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdl
dEZ1bmN0aW9uKCAkMS0+bGF0aW4xKCksICokMyApOworCQlkZWxldGUgJDE7CisJCWRlbGV0ZSAk
MzsKKwl9CisJOworCitBcmd1bWVudExpc3Q6CisJQXJndW1lbnQKKwl7CisJCSQkID0gbmV3IFZl
Y3RvcjxFeHByZXNzaW9uKj47CisJCSQkLT5hcHBlbmQoJDEpOworCX0KKwl8CisJQXJndW1lbnRM
aXN0ICcsJyBBcmd1bWVudAorCXsKKwkJJCQtPmFwcGVuZCgkMyk7CisJfQorCTsKKworQXJndW1l
bnQ6CisJRXhwcgorCTsKKworCitVbmlvbkV4cHI6CisJUGF0aEV4cHIKKwl8CisJVW5pb25FeHBy
ICd8JyBQYXRoRXhwcgorCXsKKwkJJCQgPSBuZXcgVW5pb247CisJCSQkLT5hZGRTdWJFeHByZXNz
aW9uKCAkMSApOworCQkkJC0+YWRkU3ViRXhwcmVzc2lvbiggJDMgKTsKKwl9CisJOworCitQYXRo
RXhwcjoKKwlMb2NhdGlvblBhdGgKKwl7CisJCSQkID0gJDE7CisJfQorCXwKKwlGaWx0ZXJFeHBy
CisJeworCQkkJCA9ICQxOworCX0KKwl8CisJRmlsdGVyRXhwciAnLycgUmVsYXRpdmVMb2NhdGlv
blBhdGgKKwl7CisJCSQzLT5tX2Fic29sdXRlID0gdHJ1ZTsKKwkJJCQgPSBuZXcgUGF0aCggc3Rh
dGljX2Nhc3Q8RmlsdGVyICo+KCAkMSApLCAkMyApOworCX0KKwl8CisJRmlsdGVyRXhwciBEZXNj
ZW5kYW50T3JTZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRoCisJeworCQkkMy0+bV9zdGVwcy5pbnNl
cnQoMCwgJDIpOworCQkkMy0+bV9hYnNvbHV0ZSA9IHRydWU7CisJCSQkID0gbmV3IFBhdGgoIHN0
YXRpY19jYXN0PEZpbHRlciAqPiggJDEgKSwgJDMgKTsKKwl9CisJOworCitGaWx0ZXJFeHByOgor
CVByaW1hcnlFeHByCisJeworCQkkJCA9ICQxOworCX0KKwl8CisJUHJpbWFyeUV4cHIgUHJlZGlj
YXRlTGlzdAorCXsKKwkJJCQgPSBuZXcgRmlsdGVyKCAkMSwgKiQyICk7CisJfQorCTsKKworT3JF
eHByOgorCUFuZEV4cHIKKwl8CisJT3JFeHByIE9SIEFuZEV4cHIKKwl7CisJCSQkID0gbmV3IExv
Z2ljYWxPcCggTG9naWNhbE9wOjpPUF9PciwgJDEsICQzICk7CisJfQorCTsKKworQW5kRXhwcjoK
KwlFcXVhbGl0eUV4cHIKKwl8CisJQW5kRXhwciBBTkQgRXF1YWxpdHlFeHByCisJeworCQkkJCA9
IG5ldyBMb2dpY2FsT3AoIExvZ2ljYWxPcDo6T1BfQW5kLCAkMSwgJDMgKTsKKwl9CisJOworCitF
cXVhbGl0eUV4cHI6CisJUmVsYXRpb25hbEV4cHIKKwl8CisJRXF1YWxpdHlFeHByIEVRT1AgUmVs
YXRpb25hbEV4cHIKKwl7CisJCSQkID0gbmV3IEVxVGVzdE9wKCAkMiwgJDEsICQzICk7CisJfQor
CTsKKworUmVsYXRpb25hbEV4cHI6CisJQWRkaXRpdmVFeHByCisJfAorCVJlbGF0aW9uYWxFeHBy
IFJFTE9QIEFkZGl0aXZlRXhwcgorCXsKKwkJJCQgPSBuZXcgTnVtZXJpY09wKCAkMiwgJDEsICQz
ICk7CisJfQorCTsKKworQWRkaXRpdmVFeHByOgorCU11bHRpcGxpY2F0aXZlRXhwcgorCXwKKwlB
ZGRpdGl2ZUV4cHIgUExVUyBNdWx0aXBsaWNhdGl2ZUV4cHIKKwl7CisJCSQkID0gbmV3IE51bWVy
aWNPcCggTnVtZXJpY09wOjpPUF9BZGQsICQxLCAkMyApOworCX0KKwl8CisJQWRkaXRpdmVFeHBy
IE1JTlVTIE11bHRpcGxpY2F0aXZlRXhwcgorCXsKKwkJJCQgPSBuZXcgTnVtZXJpY09wKCBOdW1l
cmljT3A6Ok9QX1N1YiwgJDEsICQzICk7CisJfQorCTsKKworTXVsdGlwbGljYXRpdmVFeHByOgor
CVVuYXJ5RXhwcgorCXwKKwlNdWx0aXBsaWNhdGl2ZUV4cHIgTVVMT1AgVW5hcnlFeHByCisJewor
CQkkJCA9IG5ldyBOdW1lcmljT3AoICQyLCAkMSwgJDMgKTsKKwl9CisJOworCitVbmFyeUV4cHI6
CisJVW5pb25FeHByCisJfAorCU1JTlVTIFVuYXJ5RXhwcgorCXsKKwkJJCQgPSBuZXcgTmVnYXRp
dmU7CisJCSQkLT5hZGRTdWJFeHByZXNzaW9uKCAkMiApOworCX0KKwk7CisKKyUlCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitFeHByZXNzaW9uKiBwYXJz
ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0aW9uQ29kZSYgY29kZSkK
K3sKKyAgICBnb3ROYW1lc3BhY2VFcnJvciA9IGZhbHNlOworCisJaW5pdFRva2VuaXplcihzdGF0
ZW1lbnQpOworICAgIAorCWludCBwYXJzZUVycm9yID0geXlwYXJzZSgpOworICAgIAorICAgIGlm
IChwYXJzZUVycm9yKSB7CisgICAgICAgIGlmIChnb3ROYW1lc3BhY2VFcnJvcikKKyAgICAgICAg
ICAgIGNvZGUgPSBOQU1FU1BBQ0VfRVJSOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2Rl
ID0gSU5WQUxJRF9FWFBSRVNTSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IAorCXJldHVybiBfdG9wRXhwcjsKK30KKworfQorfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2lt
cGwvdXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYxIEBACisvKgorICogdXRpbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8
cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgVVRJTF9I
CisjZGVmaW5lIFVUSUxfSAorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCisjaW5jbHVkZSA8a3ht
bGNvcmUvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFhQYXRo
IHsKKwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gTm9kZVNldDsKKyAgICAKKy8qIEBy
ZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBpcyB0aGUgcm9vdCBub2RlLgorICovCitib29s
IGlzUm9vdERvbU5vZGUoTm9kZSAqbm9kZSk7CisKKy8qIEByZXR1cm4gdGhlICdzdHJpbmctdmFs
dWUnIG9mIHRoZSBnaXZlbiBub2RlIGFzIHNwZWNpZmllZCBieQorICAgaHR0cDovL3d3dy53My5v
cmcvVFIveHBhdGgKKyAqLworU3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUgKm5vZGUpOworCisvKiBA
cmV0dXJuIGFsbCBhbmNlc3RvciBub2RlcyBvZiB0aGUgZ2l2ZW4gbm9kZSwgaW4gZG9jdW1lbnQg
b3JkZXIuCisgKi8KK05vZGVTZXQgZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShOb2RlICpub2RlKTsK
KworLyogQHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGlzIGEgdmFsaWQgY29udGV4dCBu
b2RlCisgKi8KK2Jvb2wgaXNWYWxpZENvbnRleHROb2RlKCBXZWJDb3JlOjpOb2RlICpub2RlICk7
CisKK30KK30KKworI2VuZGlmIC8vIFVUSUxfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
cGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1MCBAQAorLyoKKyAqIHBhdGguY2MgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjaW5jbHVkZSAicGF0aC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorRmlsdGVyOjpGaWx0ZXIoRXhw
cmVzc2lvbiAqZXhwciwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzKQorCTog
bV9leHByKGV4cHIpLAorCW1fcHJlZGljYXRlcyhwcmVkaWNhdGVzKQoreworfQorCitGaWx0ZXI6
On5GaWx0ZXIoKQoreworCWRlbGV0ZSBtX2V4cHI7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcHJl
ZGljYXRlcyk7Cit9CisKK1ZhbHVlIEZpbHRlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJVmFs
dWUgdiA9IG1fZXhwci0+ZXZhbHVhdGUoKTsKKyAgICAKKwlpZiAoIXYuaXNOb2Rlc2V0KCkpIHsK
KyAgICAgICAgaWYgKCFtX3ByZWRpY2F0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgTE9HKFhQ
YXRoLCAiSWdub3JpbmcgcHJlZGljYXRlcyBmb3IgZmlsdGVyIHNpbmNlIGV4cHJlc3Npb24gZG9l
cyBub3QgZXZhbHVhdGUgdG8gYSBub2Rlc2V0ISIpOworCisJCXJldHVybiB2OworCX0KKworICAg
IE5vZGVTZXQgaW5Ob2RlcyA9IHYudG9Ob2RlU2V0KCksIG91dE5vZGVzOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgb3V0
Tm9kZXMuY2xlYXIoKTsKKwkJRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5zaXplID0g
aW5Ob2Rlcy5zaXplKCk7CisJCUV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRp
b24gPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluTm9k
ZXMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBpbk5vZGVzW2pdLmdl
dCgpOworICAgICAgICAgICAgCisJCQlFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5v
ZGUgPSBub2RlOworCQkJKytFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9u
OworICAgICAgICAgICAgCisJCQlpZiAobV9wcmVkaWNhdGVzW2ldLT5ldmFsdWF0ZSgpKQorCQkJ
CW91dE5vZGVzLmFwcGVuZChub2RlKTsKKwkJfQorCQlpbk5vZGVzID0gb3V0Tm9kZXM7CisgICAg
fQorCisgICAgcmV0dXJuIFZhbHVlKG91dE5vZGVzKTsKK30KKworTG9jYXRpb25QYXRoOjpMb2Nh
dGlvblBhdGgoKQorCTogbV9hYnNvbHV0ZSggZmFsc2UgKQoreworfQorCitMb2NhdGlvblBhdGg6
On5Mb2NhdGlvblBhdGgoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3N0ZXBzKTsKK30KKwor
dm9pZCBMb2NhdGlvblBhdGg6Om9wdGltaXplKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zdGVwcy5zaXplKCk7IGkrKykKKyAgICAgICAgbV9zdGVwc1tpXS0+b3B0aW1pemUo
KTsKK30KKworVmFsdWUgTG9jYXRpb25QYXRoOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlpZiAo
bV9hYnNvbHV0ZSkgeworICAgICAgICBMT0coWFBhdGgsICJFdmFsdWF0aW5nIGFic29sdXRlIHBh
dGggZXhwcmVzc2lvbiB3aXRoICVpIGxvY2F0aW9uIHN0ZXBzLlxuIiwgbV9zdGVwcy5zaXplKCkp
OworCX0gZWxzZSB7CisJCUxPRyhYUGF0aCwgIkV2YWx1YXRpbmcgcmVsYXRpdmUgcGF0aCBleHBy
ZXNzaW9uIHdpdGggJWkgbG9jYXRpb24gc3RlcHMuXG4iLCBtX3N0ZXBzLnNpemUoKSk7CisJfQor
CisJTm9kZVNldCBpbkRvbU5vZGVzLCBvdXREb21Ob2RlczsKKworCS8qIEZvciBhYnNvbHV0ZSBs
b2NhdGlvbiBwYXRocywgdGhlIGNvbnRleHQgbm9kZSBpcyBpZ25vcmVkIC0gdGhlCisJICogZG9j
dW1lbnQncyByb290IG5vZGUgaXMgdXNlZCBpbnN0ZWFkLgorCSAqLworCU5vZGUgKmNvbnRleHQg
PSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisJaWYgKG1fYWJzb2x1dGUg
JiYgY29udGV4dC0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFKSAKKyAgICAgICAg
Y29udGV4dCA9IGNvbnRleHQtPm93bmVyRG9jdW1lbnQoKTsKKworCWluRG9tTm9kZXMuYXBwZW5k
KGNvbnRleHQpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0ZXBzLnNp
emUoKTsgaSsrKSB7CisJCVN0ZXAgKnN0ZXAgPSBtX3N0ZXBzW2ldOworCisJCWZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCBpbkRvbU5vZGVzLnNpemUoKTsgaisrKSB7CisJCQlOb2RlU2V0IG1hdGNo
ZXMgPSBzdGVwLT5ldmFsdWF0ZShpbkRvbU5vZGVzW2pdLmdldCgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgb3V0RG9tTm9kZXMuYXBwZW5kKG1hdGNoZXMpOworCQl9CisgICAgICAgIAor
CQlpbkRvbU5vZGVzID0gb3V0RG9tTm9kZXM7CisJCW91dERvbU5vZGVzLmNsZWFyKCk7CisJfQor
CisgICAgcmV0dXJuIFZhbHVlKGluRG9tTm9kZXMpOworfQorCitQYXRoOjpQYXRoKCBGaWx0ZXIg
KmZpbHRlciwgTG9jYXRpb25QYXRoICpwYXRoICkKKwk6IG1fZmlsdGVyKCBmaWx0ZXIgKSwKKwlt
X3BhdGgoIHBhdGggKQoreworfQorCitQYXRoOjp+UGF0aCgpCit7CisJZGVsZXRlIG1fZmlsdGVy
OworCWRlbGV0ZSBtX3BhdGg7Cit9CisKK1ZhbHVlIFBhdGg6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworCXJldHVybiBWYWx1ZSgpOworfQorCit9Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRo
UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIFhQYXRoUmVzdWx0LmNwcCAtIENvcHlyaWdodCAy
MDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5Z
IEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aFJlc3VsdC5oIgorI2lu
Y2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFhQYXRoOworCitjbGFz
cyBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVi
bGljOgorICAgIEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlICpub2Rl
LCBYUGF0aFJlc3VsdCAqcmVzdWx0KSAKKyAgICAgICAgOiBtX25vZGUobm9kZSksIG1fcmVzdWx0
KHJlc3VsdCkgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kiwg
Ym9vbCkgeyBtX3Jlc3VsdC0+aW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUoKTsgfQorcHJpdmF0ZToK
KyAgICBFdmVudFRhcmdldE5vZGUgKm1fbm9kZTsKKyAgICBYUGF0aFJlc3VsdCAqbV9yZXN1bHQ7
Cit9OworCitYUGF0aFJlc3VsdDo6WFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2RlKiBldmVudFRh
cmdldCwgY29uc3QgVmFsdWUgJnZhbHVlKQorCTogbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fZXZl
bnRUYXJnZXQoZXZlbnRUYXJnZXQpCit7CisgICAgbV9ldmVudExpc3RlbmVyID0gbmV3IEludmFs
aWRhdGluZ0V2ZW50TGlzdGVuZXIobV9ldmVudFRhcmdldC5nZXQoKSwgdGhpcyk7CisgICAgbV9l
dmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZp
ZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIAorCXN3aXRjaCAobV92
YWx1ZS50eXBlKCkpIHsKKwkJY2FzZSBWYWx1ZTo6Qm9vbGVhbjoKKwkJCW1fcmVzdWx0VHlwZSA9
IEJPT0xFQU5fVFlQRTsKKwkJCWJyZWFrOworCQljYXNlIFZhbHVlOjpOdW1iZXI6CisJCQltX3Jl
c3VsdFR5cGUgPSBOVU1CRVJfVFlQRTsKKwkJCWJyZWFrOworCQljYXNlIFZhbHVlOjpTdHJpbmc6
CisJCQltX3Jlc3VsdFR5cGUgPSBTVFJJTkdfVFlQRTsKKwkJCWJyZWFrOworCQljYXNlIFZhbHVl
OjpOb2Rlc2V0OgorCQkJbV9yZXN1bHRUeXBlID0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RTsKKyAgICAgICAgICAgIG1fbm9kZVNldFBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIG1fbm9k
ZVNldCA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7CisgICAgICAgICAgICBtX2ludmFsaWRJdGVyYXRv
clN0YXRlID0gZmFsc2U7CisJfQorfQorCitYUGF0aFJlc3VsdDo6flhQYXRoUmVzdWx0KCkKK3sK
KyAgICBpZiAobV9ldmVudFRhcmdldCkKKyAgICAgICAgbV9ldmVudFRhcmdldC0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExp
c3RlbmVyLmdldCgpLCBmYWxzZSk7Cit9CisKK3ZvaWQgWFBhdGhSZXN1bHQ6OmNvbnZlcnRUbygg
dW5zaWduZWQgc2hvcnQgdHlwZSwgaW50ICZleGNlcHRpb25jb2RlICkKK3sKKwlzd2l0Y2ggKCB0
eXBlICkgeworCQljYXNlIEFOWV9UWVBFOgorCQkJYnJlYWs7CisJCWNhc2UgTlVNQkVSX1RZUEU6
CisJCQltX3Jlc3VsdFR5cGUgPSB0eXBlOworCQkJbV92YWx1ZSA9IFZhbHVlKCBtX3ZhbHVlLnRv
TnVtYmVyKCkgKTsKKwkJCWJyZWFrOworCQljYXNlIFNUUklOR19UWVBFOgorCQkJbV9yZXN1bHRU
eXBlID0gdHlwZTsKKwkJCW1fdmFsdWUgPSBWYWx1ZSggbV92YWx1ZS50b1N0cmluZygpICk7CisJ
CQlicmVhazsKKwkJY2FzZSBCT09MRUFOX1RZUEU6CisJCQltX3Jlc3VsdFR5cGUgPSB0eXBlOwor
CQkJbV92YWx1ZSA9IFZhbHVlKG1fdmFsdWUudG9Cb29sZWFuKCkpOworCQkJYnJlYWs7CisJCWNh
c2UgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRToKKwkJY2FzZSBPUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRToKKwkJY2FzZSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFOgorCQljYXNl
IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFOgorCQljYXNlIEFOWV9VTk9SREVSRURfTk9ERV9U
WVBFOgorCQljYXNlIEZJUlNUX09SREVSRURfTk9ERV9UWVBFOgorCQkJaWYgKCFtX3ZhbHVlLmlz
Tm9kZXNldCgpKSB7CisJCQkJZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworCQkJCXJldHVybjsK
KwkJCX0KKwkJCW1fcmVzdWx0VHlwZSA9IHR5cGU7CisJCWRlZmF1bHQ6CisgICAgICAgICAgICBM
T0coWFBhdGgsICJDYW5ub3QgY29udmVydCBYUGF0aFJlc3VsdCB0byB1bmtub3duIHR5cGUgJyV1
JyEiLCB0eXBlKTsKKwl9Cit9CisKK3Vuc2lnbmVkIHNob3J0IFhQYXRoUmVzdWx0OjpyZXN1bHRU
eXBlKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9yZXN1bHRUeXBlOworfQorCitkb3VibGUgWFBhdGhS
ZXN1bHQ6Om51bWJlclZhbHVlKGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sKKwlpZiAocmVz
dWx0VHlwZSgpICE9IE5VTUJFUl9UWVBFKSB7CisJCWV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsK
KwkJcmV0dXJuIDAuMDsKKwl9CisJcmV0dXJuIG1fdmFsdWUudG9OdW1iZXIoKTsKK30KKworU3Ry
aW5nIFhQYXRoUmVzdWx0OjpzdHJpbmdWYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0Cit7
CisJaWYgKCByZXN1bHRUeXBlKCkgIT0gU1RSSU5HX1RZUEUgKSB7CisJCWV4Y2VwdGlvbmNvZGUg
PSBUWVBFX0VSUjsKKwkJcmV0dXJuIFN0cmluZygpOworCX0KKwlyZXR1cm4gbV92YWx1ZS50b1N0
cmluZygpOworfQorCitib29sIFhQYXRoUmVzdWx0Ojpib29sZWFuVmFsdWUoaW50ICZleGNlcHRp
b25jb2RlKSBjb25zdAoreworCWlmICggcmVzdWx0VHlwZSgpICE9IEJPT0xFQU5fVFlQRSApIHsK
KwkJZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVy
biBtX3ZhbHVlLnRvQm9vbGVhbigpOworfQorCitOb2RlICpYUGF0aFJlc3VsdDo6c2luZ2xlTm9k
ZVZhbHVlKGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sKKwlpZiAoIHJlc3VsdFR5cGUoKSAh
PSBBTllfVU5PUkRFUkVEX05PREVfVFlQRSAmJgorCSAgICAgcmVzdWx0VHlwZSgpICE9IEZJUlNU
X09SREVSRURfTk9ERV9UWVBFICkgeworCQlleGNlcHRpb25jb2RlID0gVFlQRV9FUlI7CisJCXJl
dHVybiAwOworCX0KKyAgCisgICAgTm9kZVNldCBub2RlcyA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7
CisgICAgaWYgKG5vZGVzLnNpemUgKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gbm9kZXNbMF0uZ2V0KCk7Cit9CisKK3ZvaWQgWFBhdGhSZXN1bHQ6
OmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCkKK3sgCisgICAgbV9pbnZhbGlkSXRlcmF0b3JTdGF0
ZSA9IHRydWU7CisgICAgCisgICAgQVNTRVJUKG1fZXZlbnRUYXJnZXQpOworICAgIEFTU0VSVCht
X2V2ZW50TGlzdGVuZXIpOworICAgIAorICAgIG1fZXZlbnRUYXJnZXQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5l
ci5nZXQoKSwgZmFsc2UpOworICAgIAorICAgIG1fZXZlbnRUYXJnZXQgPSAwOworfQorCitib29s
IFhQYXRoUmVzdWx0OjppbnZhbGlkSXRlcmF0b3JTdGF0ZSgpIGNvbnN0Cit7CisJaWYgKHJlc3Vs
dFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICYmCisgICAgICAgIHJlc3Vs
dFR5cGUoKSAhPSBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSkKKwkJcmV0dXJuIGZhbHNlOwor
ICAgIAorCXJldHVybiBtX2ludmFsaWRJdGVyYXRvclN0YXRlOworfQorCit1bnNpZ25lZCBsb25n
IFhQYXRoUmVzdWx0OjpzbmFwc2hvdExlbmd0aChpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0Cit7
CisJaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICYmCisg
ICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSkgeworCQll
eGNlcHRpb25jb2RlID0gVFlQRV9FUlI7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBtX3Zh
bHVlLnRvTm9kZVNldCgpLnNpemUoKTsKK30KKworTm9kZSAqWFBhdGhSZXN1bHQ6Oml0ZXJhdGVO
ZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKQoreworCWlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSAmJgorCSAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUpIHsKKwkJZWMgPSBUWVBFX0VSUjsKKwkJcmV0dXJuIDA7CisJfQorICAg
IAorICAgIGlmIChtX2ludmFsaWRJdGVyYXRvclN0YXRlKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9u
b2RlU2V0UG9zaXRpb24gKyAxID49IG1fbm9kZVNldC5zaXplKCkpCisJCXJldHVybiAwOworCisg
ICAgTm9kZSAqbm9kZSA9IG1fbm9kZVNldFttX25vZGVTZXRQb3NpdGlvbl0uZ2V0KCk7CisgICAg
CisgICAgbV9ub2RlU2V0UG9zaXRpb24rKzsKKworICAgIHJldHVybiBub2RlOworfQorCitOb2Rl
ICpYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKCB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQoreworCWlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRSAmJgorCSAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFKSB7CisJCWV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsKKwkJcmV0dXJuIDA7CisJfQor
ICAgIAorICAgIE5vZGVTZXQgbm9kZXMgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOworICAgIGlmIChp
bmRleCA+PSBub2Rlcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biBub2Rlc1tpbmRleF0uZ2V0KCk7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0
aFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4NiBAQAorLyoKKyAqIFhQYXRoUmVzdWx0LmggLSBDb3B5cmlnaHQgMjAwNSBGcmVy
aWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT
IE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAor
ICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lm
bmRlZiBYUGF0aFJlc3VsdF9ICisjZGVmaW5lIFhQYXRoUmVzdWx0X0gKKworI2luY2x1ZGUgIlNo
YXJlZC5oIgorCisjaW5jbHVkZSAiaW1wbC9leHByZXNzaW9uLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBOb2RlOworY2xhc3Mg
RXZlbnRUYXJnZXROb2RlOworY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKworY2xhc3MgWFBhdGhSZXN1
bHQgOiBwdWJsaWMgU2hhcmVkPFhQYXRoUmVzdWx0PgoreworcHVibGljOgorICAgIGVudW0gWFBh
dGhSZXN1bHRUeXBlIHsKKwkJQU5ZX1RZUEUgPSAwLAorCQlOVU1CRVJfVFlQRSA9IDEsCisJCVNU
UklOR19UWVBFID0gMiwKKwkJQk9PTEVBTl9UWVBFID0gMywKKwkJVU5PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSA9IDQsCisJCU9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNSwKKwkJVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDYsCisJCU9SREVSRURfTk9ERV9TTkFQU0hPVF9U
WVBFID0gNywKKwkJQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4LAorCQlGSVJTVF9PUkRFUkVE
X05PREVfVFlQRSA9IDkKKwl9OworCQorCVhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSAqZXZl
bnRUYXJnZXQsIGNvbnN0IFhQYXRoOjpWYWx1ZSAmdmFsdWUpOworICAgIH5YUGF0aFJlc3VsdCgp
OworICAgIAorCXZvaWQgY29udmVydFRvKHVuc2lnbmVkIHNob3J0IHR5cGUsIGludCAmZXhjZXB0
aW9uY29kZSk7CisKKwl1bnNpZ25lZCBzaG9ydCByZXN1bHRUeXBlKCkgY29uc3Q7CisKKwlkb3Vi
bGUgbnVtYmVyVmFsdWUoIGludCAmZXhjZXB0aW9uY29kZSApIGNvbnN0OworCVN0cmluZyBzdHJp
bmdWYWx1ZSggaW50ICZleGNlcHRpb25jb2RlICkgY29uc3Q7CisJYm9vbCBib29sZWFuVmFsdWUo
IGludCAmZXhjZXB0aW9uY29kZSApIGNvbnN0OworCU5vZGUgKnNpbmdsZU5vZGVWYWx1ZSggaW50
ICZleGNlcHRpb25jb2RlICkgY29uc3Q7CisKKwlib29sIGludmFsaWRJdGVyYXRvclN0YXRlKCkg
Y29uc3Q7CisJdW5zaWduZWQgbG9uZyBzbmFwc2hvdExlbmd0aChpbnQgJmV4Y2VwdGlvbmNvZGUp
IGNvbnN0OworCU5vZGUgKml0ZXJhdGVOZXh0KGludCAmZXhjZXB0aW9uY29kZSk7CisJTm9kZSAq
c25hcHNob3RJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisK
KyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7Citwcml2YXRlOgorICAgIFhQYXRo
OjpWYWx1ZSBtX3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbm9kZVNldFBvc2l0aW9uOworICAgIFhQ
YXRoOjpOb2RlU2V0IG1fbm9kZVNldDsKKwl1bnNpZ25lZCBzaG9ydCBtX3Jlc3VsdFR5cGU7Cisg
ICAgYm9vbCBtX2ludmFsaWRJdGVyYXRvclN0YXRlOworICAgIFJlZlB0cjxFdmVudFRhcmdldE5v
ZGU+IG1fZXZlbnRUYXJnZXQ7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0
ZW5lcjsKK307CisKK30KKworI2VuZGlmIC8vIFhQYXRoUmVzdWx0X0gKKwpJbmRleDogV2ViQ29y
ZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgv
WFBhdGhFeHByZXNzaW9uLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhF
eHByZXNzaW9uLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4cGF0aCB7CisKKyAgICBpbnRl
cmZhY2UgWFBhdGhFeHByZXNzaW9uIHsKKyAgICAgICAgWFBhdGhSZXN1bHQgZXZhbHVhdGUoaW4g
Tm9kZSBjb250ZXh0Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVuc2ln
bmVkIHNob3J0IHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aFJl
c3VsdCBpblJlc3VsdCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgIH07
Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIHhwYXRo
IHsKKworICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3RvciwgQ2FuQmVDb25zdHJ1Y3Rl
ZF0gWFBhdGhFdmFsdWF0b3IgeworICAgICAgICBYUGF0aEV4cHJlc3Npb24gY3JlYXRlRXhwcmVz
c2lvbihpbiBET01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gWFBhdGhOU1Jlc29sdmVyIHJlc29sdmVyKQorICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgWFBhdGhOU1Jlc29sdmVyIGNyZWF0ZU5T
UmVzb2x2ZXIoaW4gTm9kZSBub2RlUmVzb2x2ZXIpOworCisgICAgICAgIFhQYXRoUmVzdWx0IGV2
YWx1YXRlKGluIERPTVN0cmluZyBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBOb2RlIGNvbnRleHROb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gWFBhdGhOU1Jlc29sdmVyIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBYUGF0aFJlc3VsdCBpblJlc3VsdCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKwor
bW9kdWxlIHhwYXRoIHsKKworICAgIGludGVyZmFjZSBYUGF0aE5TUmVzb2x2ZXIgeworICAgICAg
ICBET01TdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKGluIERPTVN0cmluZyBwcmVmaXgpOworICAg
IH07Cit9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTQxODIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI4OCBAQAorMjAwNi0wNS0wNCAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAbWFjLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MzgKKyAgICAgICAgU3VwcG9ydCBNb3ppbGxhJ3MgWFBhdGhFdmFsdWF0b3Igb2JqZWN0LgorICAg
ICAgICAKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICBHZW5lcmF0ZSBY
UGF0aCBncmFtbWFyLCBhbmQgSmF2YVNjcmlwdCB3cmFwcGVycy4KKyAgICAgICAgCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZp
bGVzIHRvIHByb2plY3QKKyAgICAgICAgCisgICAgICAgICogYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwOgorICAgICAgICAoS0pTOjopOgorICAgICAgICAoS0pTOjpzZXRET01FeGNlcHRpb24p
OgorICAgICAgICBIYW5kbGUgc2V0dGluZyBYUGF0aCBleGNlcHRpb25zLgorICAgICAgICAKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgSnVzdCByZXR1cm4gbmlsIGZv
ciBub3cgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgd3JhcHBlciBmb3IgCisgICAgICAgIFhQYXRo
IG5hbWVzcGFjZSBub2Rlcy4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtOgorICAgICAgICBBZGQgWFBhdGggdHlwZXMuIEFsc28gYWRkIGEgIkNhbkJlQ29u
c3RydWN0ZWQiIGV4dGVuZGVkIGF0dHJpYnV0ZQorICAgICAgICBmb3IgaW50ZXJmYWNlcyB0aGF0
IGNhbiBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS4KKyAgICAgICAgCisgICAgICAgICogYnJpZGdl
L21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbToKKyAgICAgICAgKGluaXRpYWxpemVMb2dnaW5nQ2hh
bm5lbHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIEluaXRpYWxpemUgTG9nWFBhdGggY2hhbm5lbC4K
KyAgICAgICAgCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpoYXNGZWF0dXJlKToKKyAgICAgICAgU3VwcG9y
dCAieHBhdGgiIHZlcnNpb24gIjMuMCIuCisgICAgICAgIAorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBvcnROb2RlKToKKyAgICAgICAgSWdub3Jl
IFhQYXRoIG5hbWVzcGFjZSBub2Rlcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6Y3JlYXRlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3Jl
YXRlTlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZXZhbHVhdGUpOgor
ICAgICAgICBOZXcgZnVuY3Rpb25zIHdoaWNoIGNhbGwgZG93biB0byBhIGxhemlseSBjcmVhdGVk
IFhQYXRoRXZhbHVhdG9yLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIEFk
ZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5pZGw6CisgICAgICAgIEFkZCBYUGF0aCBtZXRob2RzLgorICAgICAgICAKKyAgICAgICAgKiBk
b20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6KToKKyAgICAgICAgQWRkIFhQQVRI
X05BTUVTUEFDRV9OT0RFIHR5cGUuCisgICAgICAgIAorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0TWFya3VwKToKKyAgICAgICAgSWdub3JlIFhQ
YXRoIG5hbWVzcGFjZSBub2Rlcy4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9ET01XaW5kb3cu
aWRsOgorICAgICAgICBBZGQgY29uc3RydWN0b3JzIGZvciBYUGF0aEV2YWx1YXRvciBhbmQgWFBh
dGhSZXN1bHQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFhQYXRoIGxvZyBjaGFubmVs
CisgICAgICAgIAorICAgICAgICAqIHhwYXRoOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0
aEV2YWx1YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6
OmNyZWF0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmNy
ZWF0ZU5TUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmV2YWx1
YXRlKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV2YWx1YXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aEV4cHJlc3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4
cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmlkbDog
QWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZlcik6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAg
ICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRo
TlNSZXNvbHZlci5pZGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTmFtZXNwYWNlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6WFBhdGhOYW1lc3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6On5YUGF0aE5hbWVzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpwcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhO
YW1lc3BhY2U6Om5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpu
YW1lc3BhY2VVUkkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBl
KToKKyAgICAgICAgKiB4cGF0aC9YUGF0aE5hbWVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiB4
cGF0aC9YUGF0aFJlc3VsdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW52YWxpZGF0
aW5nRXZlbnRMaXN0ZW5lcjo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6WFBhdGhSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGhSZXN1bHQ6On5YUGF0aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3Vs
dDo6Y29udmVydFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpyZXN1bHRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpudW1iZXJWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGhSZXN1bHQ6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3Vs
dDo6c2luZ2xlTm9kZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppbnZh
bGlkYXRlSXRlcmF0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aW52
YWxpZEl0ZXJhdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBz
aG90TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKToKKyAgICAgICAg
KiB4cGF0aC9YUGF0aFJlc3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVz
dWx0OjopOgorICAgICAgICAqIHhwYXRoL1hQYXRoUmVzdWx0LmlkbDogQWRkZWQuCisgICAgICAg
ICogeHBhdGgvaW1wbDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIu
eTogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9leHByZXNzaW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6Omlz
Tm9kZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzQm9vbGVhbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZh
bHVlOjp0b05vZGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b0Jvb2xl
YW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b051bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RXhwcmVzc2lvbjo6RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RXhwcmVzc2lvbjo6fkV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJl
c3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjph
ZGRTdWJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpv
cHRpbWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6c3ViRXhwckNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpzdWJFeHByKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjppc0NvbnN0YW50KToKKyAgICAgICAg
KiB4cGF0aC9pbXBsL2V4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RXZhbHVhdGlvbkNvbnRleHQ6OkV2YWx1YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYWx1ZTo6KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkludGVydmFsOjpJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6SW50ZXJ2YWw6OmNvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpJbnRlcnZhbDo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1bmN0aW9uOjpzZXRBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
bmN0aW9uOjpzZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJn
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJnQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5MYXN0Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5M
YXN0Ojppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Qb3NpdGlvbjo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuUG9zaXRpb246OmlzQ29u
c3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxvY2FsTmFtZTo6aXNDb25zdGFu
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTG9jYWxOYW1lOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lc3BhY2VVUkk6OmlzQ29uc3RhbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWVzcGFjZVVSSTo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZTo6aXNDb25zdGFudCk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuTmFtZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RnVuQ291bnQ6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
bkNvdW50Ojppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdHJpbmc6
OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbmNhdDo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3RhcnRzV2l0aDo6ZG9FdmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ29udGFpbnM6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0JlZm9yZTo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nQWZ0ZXI6OmRvRXZhbHVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZzo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3RyaW5nTGVuZ3RoOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Ob3JtYWxpemVTcGFjZTo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuVHJhbnNsYXRlOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Cb29sZWFuOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpGdW5Ob3Q6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1blRydWU6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blRy
dWU6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmRvRXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmlzQ29uc3RhbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkZhbHNlOjpkb0V2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5GYWxzZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuTnVtYmVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpGdW5TdW06OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkZsb29y
Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5DZWlsaW5nOjpkb0V2
YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Sb3VuZDo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpzZWxmKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbkxpYnJhcnk6OkZ1bmN0aW9uTGlicmFyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpnZXRGdW5jdGlvbik6Cisg
ICAgICAgICogeHBhdGgvaW1wbC9mdW5jdGlvbnMuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgv
aW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXJzZWRTdGF0ZW1lbnQ6OlBhcnNlZFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6UGFyc2VkU3RhdGVtZW50Ojp+UGFyc2VkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpQYXJzZWRTdGF0ZW1lbnQ6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpQYXJzZWRTdGF0ZW1lbnQ6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXJzZWRTdGF0ZW1lbnQ6OmV2YWx1YXRlKToKKyAgICAgICAgICogeHBhdGgvaW1wbC9wYXJz
ZWRzdGF0ZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9wYXRoLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZpbHRlcjo6fkZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RmlsdGVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlv
blBhdGg6OkxvY2F0aW9uUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25Q
YXRoOjp+TG9jYXRpb25QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBh
dGg6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6OmRv
RXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6OlBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXRoOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3BhdGguaDogQWRkZWQu
CisgICAgICAgICogeHBhdGgvaW1wbC9wcmVkaWNhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpOdW1iZXI6Ok51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
TnVtYmVyOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1iZXI6OmRv
RXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Npb246OlN0
cmluZ0V4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Np
b246OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Np
b246OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5lZ2F0aXZlOjpkb0V2
YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Ok51bWVyaWNPcCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RXFUZXN0T3A6OkVxVGVzdE9wKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpF
cVRlc3RPcDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6
Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjpMb2dpY2FsT3Ap
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6c2hvcnRDaXJjdWl0T24pOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6aXNDb25zdGFudCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjpvcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OkxvZ2ljYWxPcDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
VW5pb246Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VW5pb246OmRvRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6UHJlZGljYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6On5QcmVkaWNhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlByZWRpY2F0ZTo6b3B0aW1pemUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvcHJlZGlj
YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFcVRlc3RPcDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpMb2dpY2FsT3A6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC9zdGVwLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6YXhpc0FzU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpT
dGVwOjp+U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6ZXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpTdGVwOjpub2RlVGVzdE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlN0ZXA6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpu
YW1lc3BhY2VGcm9tTm9kZXRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OnBy
aW1hcnlOb2RlVHlwZSk6CisgICAgICAgICogeHBhdGgvaW1wbC9zdGVwLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC90b2tl
bml6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbjo6VG9rZW4p
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6c2VsZik6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpjaGFyQ2F0KToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmlzQXhpc05hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlRva2VuaXplcjo6aXNOb2RlVHlwZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlRva2VuaXplcjo6aXNPcGVyYXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlRva2VuaXplcjo6c2tpcFdTKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tl
bml6ZXI6Om1ha2VUb2tlbkFuZEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRv
a2VuaXplcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VG9rZW5pemVyOjpwZWVrQWhlYWRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlRva2VuaXplcjo6cGVla0N1ckhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9r
ZW5pemVyOjpsZXhTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6
bGV4TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmxleE5DTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpsZXhRTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpuZXh0VG9rZW5JbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlRva2VuaXplcjo6VG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpUb2tlbml6ZXI6On5Ub2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRv
a2VuaXplcjo6cmVzZXQpOgorICAgICAgICAoeHBhdGh5eWxleCk6CisgICAgICAgIChpbml0VG9r
ZW5pemVyKToKKyAgICAgICAgKHhwYXRoeXllcnJvcik6CisgICAgICAgICogeHBhdGgvaW1wbC90
b2tlbml6ZXIuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC91dGlsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6aXNSb290RG9tTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmdldENo
aWxkcmVuUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzVmFsaWRDb250
ZXh0Tm9kZSk6CisgICAgICAgICogeHBhdGgvaW1wbC91dGlsLmg6IEFkZGVkLgorICAgICAgICAq
IHhwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6VmFyaWFibGVSZWZlcmVuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlZhcmlhYmxlUmVmZXJlbmNlOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSk6CisgICAg
ICAgICogeHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5oOiBBZGRlZC4KKwogMjAwNi0wNS0w
NCAgRXJpYyBTZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSB0aW1vLgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkocmV2
aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0J
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxv
Z2dpbmdDaGFubmVsc0lmTgogICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ0V2ZW50cyk7CiAg
ICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nRWRpdGluZyk7CiAgICAgaW5pdGlhbGl6ZUxvZ0No
YW5uZWwoTG9nVGV4dENvbnZlcnNpb24pOworICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ1hQ
YXRoKTsKIH0KIAogLSAoaWQpaW5pdApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDE0MTc5
KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBOb2RlQ29uc3RydWN0
b3IgTm9kZTsKICAgICAgICAgYXR0cmlidXRlIE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciBOb2RlRmls
dGVyOwogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKKyAgICAgICAg
YXR0cmlidXRlIFhQYXRoRXZhbHVhdG9yQ29uc3RydWN0b3IgWFBhdGhFdmFsdWF0b3I7CisgICAg
ICAgIGF0dHJpYnV0ZSBYUGF0aFJlc3VsdENvbnN0cnVjdG9yIFhQYXRoUmVzdWx0OwogICAgIH07
CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8111</attachid>
            <date>2006-05-04 13:25:18 -0700</date>
            <delta_ts>2006-05-08 13:35:23 -0700</delta_ts>
            <desc>Just the test cases</desc>
            <filename>xpath-tests.txt</filename>
            <type>text/plain</type>
            <size>620571</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBz
aG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9vcmRlci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0
ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1f
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTcyIEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIg
Q29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVy
b3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRp
Y3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlz
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRo
ZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53
My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQor
Ki8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVz
dEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0g
LTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmlu
ZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9u
IGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMg
c3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21w
bGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3
aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFn
ZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8v
CisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNl
cHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7
CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVs
bDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2Fk
KGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9Cisg
ICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwg
ZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8v
CisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAg
ICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAg
IFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisv
LyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAg
ICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0
ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3Rh
dHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBY
UGF0aFJlc3VsdCBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSBYUGF0aFJlc3VsdFR5cGUgZm9y
IAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgpIGNoZWNr
aW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuc25hcHNob3RJdGVtKDAuLjMpIGFyZSBpbiBkb2N1
bWVudCBvcmRlci4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LXNuYXBzaG90LWxlbmd0aAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc25hcHNob3RJ
dGVtCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHRUeXBl
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqLworZnVuY3Rp
b24gWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29y
ZGVyKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
X29yZGVyIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7CisgICAgICB2
YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsKKyAgICAgIHZh
ciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTsKKyAgICAg
IHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZhciBPUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsKKyAgICAgIHZh
ciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAg
dmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFy
IG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0gIi9zdGFmZi9lbXBs
b3llZS9lbXBsb3llZUlkL3RleHQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEU7CisgICAgICB2YXIgc25hcHNob3RJdGVtOworICAgICAgdmFyIHNu
YXBzaG90TGVuZ3RoOworICAgICAgdmFyIGluZGV4OworICAgICAgdmFyIHRleHQ7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0g
Y3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5T
UmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2
YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlw
ZSxpbnJlc3VsdCk7CisgICAgICBpbmRleCA9IDA7CisKKyAgICB3aGlsZSgKKwkKKwkoaW5kZXgg
PCA0KQorCisJKSB7CisJc25hcHNob3RJdGVtID0gb3V0cmVzdWx0LnNuYXBzaG90SXRlbShpbmRl
eCk7CisgICAgICB0ZXh0ID0gc25hcHNob3RJdGVtLmRhdGE7CisKKyAgICAgIAorCWlmKAorCSgw
ID09IGluZGV4KQorCSkgeworCWFzc2VydEVxdWFscygiZmlyc3QiLCJFTVAwMDAxIix0ZXh0KTsK
KyAgICAgICAKKwl9CisJCisJaWYoCisJKDEgPT0gaW5kZXgpCisJKSB7CisJYXNzZXJ0RXF1YWxz
KCJzZWNvbmQiLCJFTVAwMDAyIix0ZXh0KTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKDIgPT0g
aW5kZXgpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJ0aGlyZCIsIkVNUDAwMDMiLHRleHQpOworICAg
ICAgIAorCX0KKwkKKwlpZigKKwkoMyA9PSBpbmRleCkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoImZv
dXJ0aCIsIkVNUDAwMDQiLHRleHQpOworICAgICAgIAorCX0KKwlpbmRleCArPSAxOworCisJfQor
Cit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9zbmFwc2hv
dEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVf
RVJSLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJSLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9F
UlIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisKKy8qCitDb3B5cmlnaHQgw4LC
qSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJ
bnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2Zv
ciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1Jp
Z2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKu
IFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3
YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2Nv
cHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlv
biBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsn
WFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlInXTsKK30KKwordmFyIGRvY3NMb2FkZWQg
PSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5u
aW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRp
b24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBp
cyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNv
bXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2Vk
IHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQ
YWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAg
Ly8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4
Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIo
KTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxv
YWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NM
b2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAg
fQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxk
ZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKwor
CisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisv
LyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLwor
Ly8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVk
LAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisv
LyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29t
cGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAgICAgICAKK0V2YWx1
YXRlICJzdHJpbmcoLykiIGFuZCByZXF1ZXN0IHRoYXQgdGhlIHJlc3VsdCBiZSBhIEZJUlNUX09S
REVSRURfTk9ERV9UWVBFLCBzaG91bGQKK3Jlc3VsdCBpbiBhIFRZUEVfRVJSLgorICAgIAorKiBA
YXV0aG9yIEN1cnQgQXJub2xkCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD01MDgK
KyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9UWVBFX0VSUigpIHsKKyAgIHZh
ciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZh
bHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJSIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7
CisgICAgICB2YXIgeHBFdmFsdWF0b3I7CisgICAgICB2YXIgcmVzdWx0OworICAgICAgdmFyIG51
bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAgdmFyIG51bGxSZXN1bHQgPSBudWxsOworCisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICB4cEV2
YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CisKKwl7CisJCXN1Y2Nlc3MgPSBm
YWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRl
KCJzdHJpbmcoLykiLGRvYyxudWxsTlNSZXNvbHZlciw5LG51bGxSZXN1bHQpOworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJ0aHJvd19UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9UWVBFX0VSUigpOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJ
dGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBz
aG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250
YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVj
dH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgw
MDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEw
MC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1NDN4MTgKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NDM6ICJYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1f
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbDogU3VjY2VzcyIKSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
SU5WQUxJRF9FWFBSRVNTSU9OX0VSUi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURf
RVhQUkVTU0lPTl9FUlIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVT
U0lPTl9FUlIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACisKKy8qCitDb3B5cmln
aHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVz
ZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1
bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFs
bCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBX
M0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1w
bGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8y
MDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBm
dW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0
dXJuIFsnWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05f
RVJSJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51
bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZy
YW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAg
IElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cwor
Ly8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0
YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBp
bW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRo
ZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9
ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRv
Y3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRl
ciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOwor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7
CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRV
cFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNh
dGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9
ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQg
c3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBs
b2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlz
IGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJl
IGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2Fk
ZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0K
K30KKworCisvKioKKyogCisgICAgICBUaGUgWFBhdGhFdmFsdWF0b3IgY2FuIGNyZWF0ZSBhICJY
UGF0aEV4cHJlc3Npb24iIHVzaW5nIHRoZSBtZXRob2QKKyAgICAgICJjcmVhdGVFeHByZXNzaW9u
KGV4cHJlc3Npb24sIHJlc29sdmVyKSIuCisgICAgICAKKyAgICAgIFJldHJpZXZlIHRoZSBET00g
ZG9jdW1lbnQgb24gd2hpY2ggdGhlCisgICAgICAnY3JlYXRlRXhwcmVzc2lvbigiMTJhIiwgbnVs
bCknIG1ldGhvZCBpcworICAgICAgaW52b2tlZCB3aXRoIHRoZSBkb2N1bWVudCBlbGVtZW50LiAg
VGhlIG1ldGhvZCBzaG91bGQgZmFpbCB0byBjcmVhdGUKKyAgICAgIHByZS1jb21waWxlZCBleHBy
ZXNzaW9uIGFuZCB0aHJvd3MKKyAgICAgIFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lP
Tl9FUlIKKyAgICAgIHNpbmNlICIxMmEiIGlzIG5vdCBhbiBYUGF0aCBleHByZXNzaW9uLgorICAg
IAorKiBAYXV0aG9yIFBoaWxpcHBlIExlIEjDqWdhcmV0CisqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1
YXRvci1jcmVhdGVFeHByZXNzaW9uCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfY3JlYXRl
RXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05fRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7Cisg
ICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3JfY3JlYXRl
RXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05fRVJSIikgIT0gbnVsbCkgcmV0dXJuOworICAg
IHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIg
eHBFdmFsdWF0b3I7CisgICAgICB2YXIgZXhwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1
YXRvcihkb2MpOworCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAg
ICBleHAgPSB4cEV2YWx1YXRvci5jcmVhdGVFeHByZXNzaW9uKCIxMmEiLG51bGxOU1Jlc29sdmVy
KTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9
ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1MSk7CisJCX0K
KwkJYXNzZXJ0VHJ1ZSgidGhyb3dfSU5WQUxJRF9FWFBSRVNTSU9OX0VSUiIsc3VjY2Vzcyk7CisJ
fQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9j
cmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9VTk9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9D
VFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQor
ICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAi
VGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVs
ZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElU
WSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0K
KyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAg
IDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RB
VElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1w
bG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2Ny
aXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEg
I0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJ
TVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0K
KyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0K
KyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUg
Q0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIg
MS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0i
MCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9V
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50LmpzIi8+DQorPHNjcmlwdCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5N
YXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+
ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERh
bGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEg
UmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJl
bmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RB
VEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8
cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRl
cGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4N
CisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBz
dHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9l
bXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95
ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25u
ZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9
IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29t
cHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0K
KyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBO
b3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVs
bC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRV9udWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBM
MTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBh
dCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSA1Njd4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1Njc6ICJYUGF0
aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsOiBT
dWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHBy
ZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfTk9U
X1NVUFBPUlRFRF9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLnN2
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9U
RVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZO
Uy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAi
MTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5U
SVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50
IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVu
dDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAg
PCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8
IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5P
VEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04g
bm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVj
dCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFU
VExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVj
dCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0K
KyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQor
ICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RB
VEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+
DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxy
ZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV4cHJlc3Npb25fZXZh
bHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBN
YXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAg
ICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxh
cywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
czpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlz
IGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0K
KzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVu
Y2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3Np
dGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQy
OyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFy
eT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4
YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6
ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEu
Y29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxu
bTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVs
IERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxh
cnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3Mg
ZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1w
OmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFk
ZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDov
L3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNp
YWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3
Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURf
Tk9ERV9UWVBFLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBX
b3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
ZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNz
IGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVk
LiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGlj
ZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sx
XSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3
YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5j
dGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9z
aW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUnXTsKK30KKwordmFyIGRvY3NM
b2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAg
ICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZp
Z3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9h
ZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0
IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAg
cmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24g
c2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsK
KyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRo
cm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1
aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAgICAgIGlmIChk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
ICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihi
dWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9m
IAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgor
Ly8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBs
ZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRo
ZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9h
ZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRV
cFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisgICAgICBD
cmVhdGUgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgWFBhdGhSZXN1bHQgbWF0Y2hpbmcgL3N0YWZm
L2VtcGxveWVlL2VtcGxveWVlSWQsCisgICAgICBjaGVja2luZyB0aGF0IFhQYXRoUmVzdWx0LnNp
bmdsZU5vZGVWYWx1ZSBtYXRjaGVzLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVz
b2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxp
emF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJF
RF9OT0RFX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAg
ICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAg
ICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1Owor
ICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05P
REVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAg
ICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7Cisg
ICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAg
ICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N2Zy9l
bXBsb3llZS9lbXBsb3llZUlkIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBBTllfVU5PUkRFUkVE
X05PREVfVFlQRTsKKyAgICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIGVtcGxveWVlSWQ7Cisg
ICAgICB2YXIgbG9jYWxOYW1lOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAg
ICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1Jl
ZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7City
ZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0
Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixj
b250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgb3V0Tm9kZSA9
IG91dHJlc3VsdC5zaW5nbGVOb2RlVmFsdWU7CisgICAgICBsb2NhbE5hbWUgPSBvdXROb2RlLmxv
Y2FsTmFtZTsKKworICAgICAgYXNzZXJ0RXF1YWxzKCJlcXVhbHMiLCJlbXBsb3llZUlkIixsb2Nh
bE5hbWUpOworICAgICAgIAorfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBh
dGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFKCk7Cit9Cklu
ZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBv
cnRlZF9lbXB0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9y
bWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4w
MEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNW
R1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDI3NHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDI3NDogIkNvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX2VtcHR5OiBTdWNjZXNzIgpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X1dST05HX0RPQ1VNRU5UX0VSUi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJS
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMzUgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBX
aWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9s
b2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBN
YXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlz
IHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBb
MV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRw
Oi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIw
MDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBl
eHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV4cHJlc3Npb25fZXZh
bHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAw
MDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUg
dGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2Vw
dGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRl
ZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBh
bmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVu
dGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsK
KyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAg
IC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24K
KyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAg
ICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jMVJlZiA9IG51bGw7Cisg
ICAgICBpZiAodHlwZW9mKHRoaXMuZG9jMSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9j
MVJlZiA9IHRoaXMuZG9jMTsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChk
b2MxUmVmLCAiZG9jMSIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAgICAgdmFyIGRvYzJSZWYg
PSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYzIpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvYzJSZWYgPSB0aGlzLmRvYzI7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jMlJlZiwgImRvYzIiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYg
KGRvY3NMb2FkZWQgPT0gMikgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9y
KGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24g
b2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMu
CisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29t
cGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3Mg
dGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAyKSB7CisgICAgICAgIHNl
dFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAgICAgICAK
KyAgICAgIFRlc3QgaWYgWFBhdGhFeHByZXNzaW9uLmV2YWx1YXRlIHByb3Blcmx5IHRocm93cyBX
Uk9OR19ET0NVTUVOVF9FUlJPUgorICAgIAorKiBAYXV0aG9yIFBoaWxpcHBlIExlIEjDqWdhcmV0
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV4cHJlc3Npb24tZXZhbHVh
dGUKKyovCitmdW5jdGlvbiBYUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRf
RVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUiIpICE9IG51
bGwpIHJldHVybjsKKyAgICB2YXIgZG9jMTsKKyAgICAgIHZhciBkb2MyOworICAgICAgdmFyIHhw
RXZhbHVhdG9yOworICAgICAgdmFyIHJvb3Q7CisgICAgICB2YXIgcmVzdWx0OworICAgICAgdmFy
IG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAgdmFyIG51bGxSZXN1bHQgPSBudWxsOwor
CisgICAgICB2YXIgeHBhdGhFeHByZXNzaW9uOworICAgICAgCisgICAgICB2YXIgZG9jMVJlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jMSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgZG9jMVJlZiA9IHRoaXMuZG9jMTsKKyAgICAgIH0KKyAgICAgIGRvYzEgPSBsb2FkKGRv
YzFSZWYsICJkb2MxIiwgInN0YWZmTlMiKTsKKyAgICAgIAorICAgICAgdmFyIGRvYzJSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYzIpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvYzJSZWYgPSB0aGlzLmRvYzI7CisgICAgICB9CisgICAgICBkb2MyID0gbG9hZChkb2My
UmVmLCAiZG9jMiIsICJzdGFmZiIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2
YWx1YXRvcihkb2MxKTsKK3hwYXRoRXhwcmVzc2lvbiA9IHhwRXZhbHVhdG9yLmNyZWF0ZUV4cHJl
c3Npb24oIi8vZm9vIixudWxsTlNSZXNvbHZlcik7CisgICAgICByb290ID0gZG9jMi5kb2N1bWVu
dEVsZW1lbnQ7CisKKyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAg
ICAgICAgICAgcmVzdWx0ID0geHBhdGhFeHByZXNzaW9uLmV2YWx1YXRlKHJvb3QsMCxudWxsUmVz
dWx0KTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAgc3VjY2VzcyA9ICh0eXBlb2Yo
ZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA0KTsKKwkJfQorCQlhc3NlcnRU
cnVlKCJ0aHJvd19XUk9OR19ET0NVTUVOVF9FUlIiLHN1Y2Nlc3MpOworCX0KKworfQorCisKKwor
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05H
X0RPQ1VNRU5UX0VSUigpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2Vf
aXNTdXBwb3J0ZWRfMy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKworLyoKK0Nv
cHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNz
YWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25z
b3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5
KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3Ro
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xl
Z2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0
ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7
CityZXR1cm4gWydDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zJ107Cit9CisKK3ZhciBkb2NzTG9h
ZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAg
cnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1
cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRp
bmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0
byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJh
aXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNl
dFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7Cisg
ICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJv
dyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWls
ZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVm
ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBw
cmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
ICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihi
dWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9m
IAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgor
Ly8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBs
ZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRo
ZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9h
ZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRV
cFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisgICAgICAx
LjMgQ29uZm9ybWFuY2UgLSBUaGUgImZlYXR1cmUiIHBhcmFtZXRlciBpbiB0aGUgCisgICAgICAi
Tm9kZS5pc1N1cHBvcnRlZChmZWF0dXJlLHZlcnNpb24pIgorICAgICAgbWV0aG9kIGlzIHRoZSBu
YW1lIG9mIHRoZSBmZWF0dXJlIGFuZCB0aGUgdmVyc2lvbiBpcyB0aGUgdmVyc2lvbgorICAgICAg
bnVtYmVyIG9mIHRoZSBmZWF0dXJlIHRvIHRlc3QuICBYUGF0aCBpcyB0aGUgbGVnYWwgdmFsdWUg
Zm9yIHRoZQorICAgICAgWFBhdGggbW9kdWxlLiAgVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuICJ0
cnVlIi4KKyAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIERPTSBkb2N1bWVudCBvbiB3aGljaCB0
aGUKKyAgICAgICJpc1N1cHBvcnRlZChmZWF0dXJlLHZlcnNpb24pIiBtZXRob2QgaXMgaW52b2tl
ZCB3aXRoICJmZWF0dXJlIgorICAgICAgZXF1YWwgdG8gIlhQYXRoIiBhbmQgdmVyc2lvbiB0byAi
My4wIi4gIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhCisgICAgICBib29sZWFuICJ0cnVlIi4K
KyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjQ29uZm9y
bWFuY2UKKyovCitmdW5jdGlvbiBDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zKCkgeworICAgdmFy
IHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiQ29uZm9ybWFu
Y2VfaXNTdXBwb3J0ZWRfMyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAg
dmFyIHN0YXRlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0
eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMu
ZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIp
OworICAgICAgc3RhdGUgPSBkb2MuaXNTdXBwb3J0ZWQoInhwQVRIIiwiMy4wIik7CisgICAgICBh
c3NlcnRUcnVlKCJpc1N1cHBvcnRlZC1YUGF0aC0zLjAiLHN0YXRlKTsKKworfQorCisKKworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMygpOworfQpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxp
ZEl0ZXJhdG9yU3RhdGVfQU5ZX1RZUEUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0
YXRlX0FOWV9UWVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9U
WVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAor
ICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBL
Q2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJ
RF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAw
LDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCww
KSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAz
NTh4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNTg6ICJYUGF0aFJlc3Vs
dF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfdHJ1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFu
VmFsdWVfdHJ1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAK
KyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0
eXBlPVNPTElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4w
MEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9
IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCww
KSBzaXplIDIwOHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwODogIlhQ
YXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0g
YXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDAp
IHNpemUgMTM2eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTM2OiAidHJ1
ZTogYXNzZXJ0VHJ1ZSBmYWlsZWQiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X251
bWJlclZhbHVlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorCisvKgorQ29weXJp
Z2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1
c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRp
dW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBB
bGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUg
VzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGlt
cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwv
MjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3Qg
ZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3Jl
dHVybiBbJ1hQYXRoUmVzdWx0X251bWJlclZhbHVlJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0g
LTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmlu
ZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9u
IGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMg
c3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21w
bGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3
aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFn
ZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8v
CisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNl
cHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7
CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVs
bDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2Fk
KGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9Cisg
ICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwg
ZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8v
CisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAg
ICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAg
IFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisv
LyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAg
ICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0
ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3Rh
dHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBY
UGF0aFJlc3VsdCBOVU1CRVJfVkFMVUUgWFBhdGhSZXN1bHRUeXBlIGZvciBleHByZXNzaW9uCisg
ICAgL3N0YWZmL2VtcGxveWVlL3NhbGFyeVt0ZXh0KCkgPSAnNTYsMDAwJ10gY2hlY2tpbmcgdGhh
dCB0aGUgCisgICAgWFBhdGhSZXN1bHQubnVtYmVyVmFsdWUgPT0gNTYuMAorICAgIAorKiBAYXV0
aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtbnVtYmVyVmFsdWUKKyogQHNl
ZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMx
L3hwYXRoI1hQYXRoUmVzdWx0CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdFR5cGUKKyogQHNlZSBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hw
YXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aFJl
c3VsdF9udW1iZXJWYWx1ZSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlh
bGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X251bWJlclZhbHVlIikgIT0gbnVsbCkgcmV0
dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOwor
ICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOwor
ICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9
IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJ
UlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVz
b2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAg
ICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisK
KyAgICAgIHZhciBleHByZXNzaW9uID0gInN1YnN0cmluZy1iZWZvcmUoL3N2Zy9lbXBsb3llZS9z
YWxhcnlbdGV4dCgpID0gJzU2LDAwMCddLCAnLCcpIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBO
VU1CRVJfVFlQRTsKKyAgICAgIHZhciBudW1iZXJWYWx1ZTsKKyAgICAgIAorICAgICAgdmFyIGRv
Y1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykg
eworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQo
ZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2
YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2Mp
OworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1
YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsK
KyAgICAgIG51bWJlclZhbHVlID0gb3V0cmVzdWx0Lm51bWJlclZhbHVlOworCisgICAgICBhc3Nl
cnRFcXVhbHMoInNhbWUiLDU2LjAsbnVtYmVyVmFsdWUpOworICAgICAgIAorfQorCisKKworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfbnVtYmVyVmFsdWUoKTsKK30KSW5k
ZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5W
YWx1ZV9mYWxzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFsc2UuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVf
ZmFsc2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACisKKy8qCitDb3B5cmlnaHQg
w4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0
cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAK
K2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAK
K1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PD
gsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAy
L2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5j
dGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJu
IFsnWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlJ107Cit9CisKK3ZhciBkb2NzTG9hZGVk
ID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVu
bmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0
aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcg
aXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBj
b21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNl
ZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVw
UGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAg
IC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBl
eGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVy
KCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVs
b2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xv
YWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9
CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRl
ciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisK
Ky8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8v
ICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisv
LyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQs
CisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8v
ICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21w
bGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdl
U3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgQ3JlYXRl
IEJPT0xFQU5fVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGluZyAvc3RhZmYvd29ya2VyYmVlLAorICAg
ICAgY2hlY2tpbmcgdGhhdCBYUGF0aFJlc3VsdC5ib29sZWFuVmFsdWUgPT0gZmFsc2UKKyAgICAK
KyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NS
LURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2
YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0
cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0
aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtYm9vbGVhblZhbHVlCisqLwor
ZnVuY3Rpb24gWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlKCkgeworICAgdmFyIHN1Y2Nl
c3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfYm9v
bGVhblZhbHVlX2ZhbHNlIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7
CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsK
KyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0g
NTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZh
ciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJF
RF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsK
KyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9y
OworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKwor
ICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0gIi9z
dGFmZi93b3JrZXJiZWUiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEJPT0xFQU5fVFlQRTsKKyAg
ICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgdmFyIHBhcmVudDsK
KyAgICAgIHZhciBvd25lcjsKKyAgICAgIHZhciBvd25lclR5cGU7CisgICAgICB2YXIgYm9vbGVh
blZhbHVlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2
YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7
CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxy
ZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVz
dWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAgYXNzZXJ0RmFsc2UoImZhbHNlIixib29sZWFuVmFs
dWUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9i
b29sZWFuVmFsdWVfZmFsc2UoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9E
RV9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5PUkRFUkVE
X05PREVfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5P
UkRFUkVEX05PREVfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAw
eDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmls
bD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4w
MCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7
dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgNTIyeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTIy
OiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1
YXRlX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VY
UFJFU1NJT05fRVJSLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorCisvKgorQ29w
eXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3Nh
Y2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNv
cnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkp
LiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0
aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhl
IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVn
YWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRl
c3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sK
K3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIn
XTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsK
KworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3
b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYg
dGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAg
ICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVz
CisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVk
aWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRl
c3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1
bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1l
bnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0g
Y3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAg
ICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykg
IT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9Cisg
ICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAg
ICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFn
ZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJ
bml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2Nv
bXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
b24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFy
dGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRl
ZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hh
bmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhl
Y3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKy8qKgorKiAgICAgICAKKyAgICBUZXN0IGlmIFhQYXRoRXZhbHVhdG9yLmV2YWx1YXRlIHBy
b3Blcmx5IHRocm93cyBJTlZBTElEX0VYUFJFU1NJT05fRVJST1IKKyAgICAKKyogQGF1dGhvciBQ
aGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItZXZhbHVhdGUKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hl
Y2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJ
RF9FWFBSRVNTSU9OX0VSUiIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAg
dmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFyIHJvb3Q7CisgICAgICB2YXIgcmVzdWx0OworICAg
ICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAgdmFyIG51bGxSZXN1bHQgPSBu
dWxsOworCisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVv
Zih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7
CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7Cisg
ICAgICB4cEV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Cityb290ID0gZG9j
LmRvY3VtZW50RWxlbWVudDsKKworICAgICAgCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRy
eSB7CisgICAgICAgICAgICByZXN1bHQgPSB4cEV2YWx1YXRvci5ldmFsdWF0ZSgiMTJhIixyb290
LG51bGxOU1Jlc29sdmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsg
ICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmlu
ZWQnICYmIGV4LmNvZGUgPT0gNTEpOworCQl9CisJCWFzc2VydFRydWUoInRocm93X0lOVkFMSURf
RVhQUkVTU0lPTl9FUlIiLHN1Y2Nlc3MpOworCX0KKworfQorCisKKworCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9OX0VS
UigpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFs
dWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFE
T0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElU
WSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAg
PCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4
bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0
YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJl
bnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVy
aSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0
eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMg
Im5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRp
b24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVt
cDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5z
IENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBD
REFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1Qg
cmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVE
DQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFV
SVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlw
dCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQg
bnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht
bG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TLmpzIi8+DQor
PHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0
LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1z
dGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291
bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0K
KyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZ
ZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJh
eW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVy
ZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENE
QVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAg
PHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5u
ZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5h
Z2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4m
ZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
Tm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6
bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAw
NDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQor
ICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVt
cDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6
Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50
MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERh
bGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisg
IDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVl
dD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIEly
dmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0K
SW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9l
dmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9XUk9OR19ET0NV
TUVOVF9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5zdmcJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1T
VFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRk
IiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAg
RGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBl
bnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRh
PC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBV
QkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5U
SVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJ
VFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElP
TiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0
aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNj
cmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNU
IHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1Q
VFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4N
CisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwh
LS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4
PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X1dST05HX0RPQ1VNRU5UX0VSUi5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0
dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRp
bjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0K
KyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBU
ZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRt
c3RjPSJodHRwOi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRBW1RoaXMgaXMgYSBD
REFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFb
Q0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0
byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERh
bGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95
ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEw
MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
bXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5
ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3llZSB4bWxuczplbXA9
Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFsdGF2aXN0YS5jb20i
ID4gICAgPGVtcDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlkPg0KKyAgPG5tOm5h
bWU+SmVueSBPY29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5QZXJzb25uZWwgRGly
ZWN0b3I8L2VtcDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwvZW1wOnNhbGFyeT4N
CisgIDxlbXA6Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6YWRkcmVzcyBlbXA6
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FOQURBIiBlbXA6bG9j
YWwxPSJUUlVFIj4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2PC9lbXA6YWRkcmVz
cz4NCisgPC9lbXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAyPSJodHRwOi8vd3d3
Lm5pc3QuZ292IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9M
ZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8
bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlz
dDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0dHA6Ly93d3cubmlz
dC5nb3YiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX2VtcHR5LnN2Zwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJl
X2VtcHR5LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8
IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5U
SVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisg
ICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQx
IHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9Q
SXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIg
ImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAi
dXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50
aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJ
QyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3Rh
dGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywg
ZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1s
bnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1l
IENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElT
VCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlS
RUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JF
UVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2Ny
aXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVu
dCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
eG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIiBzcmM9IkNvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuanMiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMi
Lz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0i
aHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFu
dDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+
MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9s
ZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNl
IG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFT
ZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9z
aXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHpl
cm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0
OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+
UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQor
IDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0i
aHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9l
bXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxl
bXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNh
bGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5k
ZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIg
ZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFz
LCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95
ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZ
ZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5n
IFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJ
dGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMg
QEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0
aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBS
ZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2Vp
byBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9D
b25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisK
Ky8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rp
b25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEVfbnVsbCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAw
OwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRl
c3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRp
b25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQu
ICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5k
IHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRl
cmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7Cisg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAv
LyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisg
ICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAg
ICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkg
eworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0
Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAg
ICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2gg
YXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2
ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0
aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkg
b2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7Cisg
ICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdj
b21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICBDcmVhdGUgYW4gWFBhdGhSZXN1
bHQgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgWFBhdGhSZXN1bHRUeXBlIGZvciAKKyAgICBl
eHByZXNzaW9uIC9zdGFmZi9lbXBsb3llZS9lbXBsb3llZUlkL3RleHQoKSBjaGVja2luZyB0aGF0
OgorICAgIFhQYXRoUmVzdWx0LnNuYXBzaG90SXRlbSh4UGF0aFJlc3VsdC5zbmFwc2hvdExlbmd0
aCkgPT0gbnVsbCwKKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LXNuYXBzaG90LWxlbmd0aAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc25hcHNob3RJ
dGVtCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHRUeXBl
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqLworZnVuY3Rp
b24gWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251
bGwoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxk
ZXIsICJYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVf
bnVsbCIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFy
IE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIg
Qk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2
YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBF
ID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIg
ZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZh
ciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBv
dXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYvZW1wbG95
ZWUvZW1wbG95ZWVJZC90ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IE9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFOworICAgICAgdmFyIHNuYXBzaG90SXRlbTsKKyAgICAgIHZhciBzbmFw
c2hvdExlbmd0aDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7
CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIg
PSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAg
ZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5v
ZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIHNuYXBzaG90TGVuZ3RoID0g
b3V0cmVzdWx0LnNuYXBzaG90TGVuZ3RoOworCisgICAgICBzbmFwc2hvdEl0ZW0gPSBvdXRyZXN1
bHQuc25hcHNob3RJdGVtKHNuYXBzaG90TGVuZ3RoKTsKKyAgICAgIGFzc2VydE51bGwoIm51bGwi
LHNuYXBzaG90SXRlbSk7CisgICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVs
bCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvRWxlbWVudF9O
b2Rlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
RWxlbWVudF9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9FbGVtZW50X05vZGVzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBF
IHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8
IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhh
cyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVu
dCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVu
dDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAg
PCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFO
T1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3ll
ZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQs
IGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklY
RUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJ
RUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAg
ICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdp
ZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8
IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFU
QSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0t
Pg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5
PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iRWxlbWVudF9Ob2Rlcy5qcyIvPg0KKzxzY3JpcHQg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0K
KyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bv
c2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
MS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0
eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFj
ZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+
UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMi
PjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvUHJvY2Vzc2luZ19JbnN0cnVjdGlvbl9Ob2Rlcy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3Np
bmdfSW5zdHJ1Y3Rpb25fTm9kZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisK
Ky8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
CisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFy
Y2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5p
dmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBl
eHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFt
ZXMoKQoreworcmV0dXJuIFsnUHJvY2Vzc2luZ19JbnN0cnVjdGlvbl9Ob2RlcyddOworfQorCit2
YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8g
ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3Jl
CisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUg
bm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1
bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAg
ICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8v
ICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitm
dW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7Cisg
ICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVy
LCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25m
aWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NM
b2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAg
ICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlv
bkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBs
ZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVw
VGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBo
YXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBh
bGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5j
dGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAg
ICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAK
KyAgICAgIFMxLjIuNyBQcm9jZXNzaW5nIEluc3RydWN0aW9uIE5vZGVzIC0gCisgICAgICBDcmVh
dGUgQU5ZX1RZUEUgWFBhdGhSZXN1bHQgbWF0Y2hpbmcgLy9wcm9jZXNzaW5nLWluc3RydWN0aW9u
KCksCisgICAgICBjaGVjayB0aGF0IGVhY2ggbWF0Y2hpbmcgTm9kZSBpcyBhIFByb2Nlc3Npbmcg
SW5zdHJ1Y3Rpb24gTm9kZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I01hcHBpbmcKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2
YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFs
dWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3Vs
dAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaXRlcmF0ZU5leHQKKyovCitmdW5jdGlvbiBQcm9j
ZXNzaW5nX0luc3RydWN0aW9uX05vZGVzKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hl
Y2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiUHJvY2Vzc2luZ19JbnN0cnVjdGlvbl9Ob2RlcyIp
ICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJF
Ul9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVB
Tl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsK
KyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsK
KyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9jOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBjb250
ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRyZXN1
bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvL3Byb2Nlc3NpbmctaW5zdHJ1
Y3Rpb24oKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2YXIgY3Vy
ck5vZGU7CisgICAgICB2YXIgbm9kZVR5cGU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwg
ImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3Io
ZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAg
IGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHBy
ZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBj
dXJyTm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgCisgICAgd2hpbGUoCisJ
CisJKGN1cnJOb2RlICE9IG51bGwpCisKKwkpIHsKKwlub2RlVHlwZSA9IGN1cnJOb2RlLm5vZGVU
eXBlOworCisgICAgICBhc3NlcnRFcXVhbHMoIlMxLjIuNy1Qcm9jZXNzaW5nLUluc3RydWN0aW9u
LU5vZGVzLW5vZGV0eXBlIiw3LG5vZGVUeXBlKTsKKyAgICAgICBjdXJyTm9kZSA9IG91dHJlc3Vs
dC5pdGVyYXRlTmV4dCgpOworICAgICAgCisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICBQcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzKCk7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX25vX05TLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVh
dGVFeHByZXNzaW9uX25vX05TLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorCisv
KgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAor
KE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNo
IENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZl
cnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1
bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRp
dW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhw
b3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVz
KCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMnXTsK
K30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKwor
Ly8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3Jr
IGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhl
cmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAg
ICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisv
LyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0
ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3Qu
CisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5p
bmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQg
YnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3Jl
YXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAg
ICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9
ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0
aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBs
ZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
dGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVk
IGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBk
b2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdl
ZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0
ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisK
Ky8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2YWx1YXRvciBjYW4gY3JlYXRlIGEgIlhQYXRoRXhw
cmVzc2lvbiIgdXNpbmcgdGhlIG1ldGhvZAorICAgICAgImNyZWF0ZUV4cHJlc3Npb24oZXhwcmVz
c2lvbiwgcmVzb2x2ZXIpIi4KKyAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIERPTSBkb2N1bWVu
dCBvbiB3aGljaCB0aGUKKyAgICAgICJjcmVhdGVFeHByZXNzaW9uKCIvIiwgbnVsbCkiIG1ldGhv
ZCBpcyBpbnZva2VkIHdpdGggdGhlIGRvY3VtZW50CisgICAgICBlbGVtZW50LiBUaGUgbWV0aG9k
IHNob3VsZCByZXR1cm4gYSBwcmUtY29tcGlsZWQgZXhwcmVzc2lvbi4KKyAgICAKKyogQGF1dGhv
ciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRl
RXhwcmVzc2lvbgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
bm9fTlMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1
aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TIikgIT0gbnVsbCkg
cmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7CisgICAgICB2YXIg
bnVsbE5TUmVzb2x2ZXIgPSBudWxsOworCisgICAgICB2YXIgZXhwOworICAgICAgCisgICAgICB2
YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0g
bG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVh
dGVYUGF0aEV2YWx1YXRvcihkb2MpOworZXhwID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lv
bigiLyIsbnVsbE5TUmVzb2x2ZXIpOworICAgICAgYXNzZXJ0Tm90TnVsbCgibm90bnVsbCIsZXhw
KTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlRXhwcmVzc2lvbl9ub19OUygpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFX29yZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEVfb3JkZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAw
eDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4wMCww
LjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgNDk0eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggNDk0OiAiWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFX29yZGVyIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3
ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMTQweDE4Cisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTQwOiAiVHlwZUVycm9yOiBOdWxsIHZh
bHVlIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
aW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxF
IFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5U
SVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisg
ICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQg
ZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRh
Pz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBO
REFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJl
IGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFG
aWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0K
KyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1F
TlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisg
ICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAg
ICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAg
PCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRB
ICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBD
REFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRU
TElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBp
cyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxz
Y3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhSZXN1
bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMiLz4N
Cis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3Vu
aXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95
ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2Nv
dW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4N
CisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4x
MjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24g
d2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBp
cyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFi
O11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFy
eT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVz
cyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4
NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUz
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAg
PHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVz
dGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5
ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxv
eWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4N
CisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0
cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX251bGwuc3ZnCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNv
bHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNl
VVJJX251bGwuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RB
RkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVO
VElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+
DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5j
b20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAg
PCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0
aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRp
b24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQi
Pg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1F
TlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSop
Pg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwh
RUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEg
I1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAj
UkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNj
cmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+
ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoTlNS
ZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbC5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95
ZWUgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVz
YS5jb20iPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1h
cmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4g
ICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2
ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+
RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRB
W1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVu
dDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBh
IHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRh
cnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Illl
cyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpv
bmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2
aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3ll
ZSB4bWxuczplbXA9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFs
dGF2aXN0YS5jb20iID4gICAgPGVtcDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlk
Pg0KKyAgPG5tOm5hbWU+SmVueSBPY29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5Q
ZXJzb25uZWwgRGlyZWN0b3I8L2VtcDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwv
ZW1wOnNhbGFyeT4NCisgIDxlbXA6Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6
YWRkcmVzcyBlbXA6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FO
QURBIiBlbXA6bG9jYWwxPSJUUlVFIj4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2
PC9lbXA6YWRkcmVzcz4NCisgPC9lbXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAy
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxv
eWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0
ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0
dHA6Ly93d3cubmlzdC5nb3YiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8
L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9B
TllfVFlQRS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVFlQRS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFs
aWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNSBA
QAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRp
dW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJl
c2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlv
IFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0Nv
bnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKwor
Ly8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlv
bk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FO
WV9UWVBFJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9
IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5n
IGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisv
LyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91
cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhl
IHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBp
cyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9m
IHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1
cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0
IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVp
bGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAw
OworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhp
cy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAg
ICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAlj
YXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2Ug
PSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2Fk
IHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMg
bG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBp
cyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBi
ZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9h
ZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9
Cit9CisKKworLyoqCisqIAorICAgICAgQ3JlYXRlIGEgQU5ZX1RZUEUgWFBhdGhSZXN1bHQgbWF0
Y2hpbmcgL3N0YWZmL2VtcGxveWVlLAorICAgICAgbW9kaWZ5IHRoZSBEb2N1bWVudCwgdGhlbiBj
aGVjayB0aGF0IGl0ZXJhdG9yIFhQYXRoUmVzdWx0cworICAgICAgYXJlIGludmFsaWRhdGVkIFhQ
YXRoUmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlID09IHRydWUuCisgICAgCisqIEBhdXRob3Ig
Qm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwt
My1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
dmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZh
bHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1
bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2ludmFs
aWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hl
Y2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfQU5ZX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAg
ICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAg
ICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1Owor
ICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05P
REVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAg
ICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7Cisg
ICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAg
ICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N2Zy9l
bXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2YXIgZW1w
bG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAgIHZhciBpbnZhbGlkSXRlcmF0b3JT
dGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsK
KyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAg
ICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFs
dWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOwor
b3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVz
b2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0VsZW1lbnQgPSBkb2MuZG9jdW1l
bnRFbGVtZW50OworICAgICAgZW1wbG95ZWUgPSBkb2MuY3JlYXRlRWxlbWVudCgiZW1wbG95ZWUi
KTsKKyAgICAgIGVtcGxveWVlID0gZG9jRWxlbWVudC5hcHBlbmRDaGlsZChlbXBsb3llZSk7Cisg
ICAgICBpbnZhbGlkSXRlcmF0b3JTdGF0ZSA9IG91dHJlc3VsdC5pbnZhbGlkSXRlcmF0b3JTdGF0
ZTsKKyAgICAgIGFzc2VydFRydWUoInRydWUiLGludmFsaWRJdGVyYXRvclN0YXRlKTsKKworfQor
CisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJh
dG9yU3RhdGVfQU5ZX1RZUEUoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
RXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAw
eDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCww
LjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMzUxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggMzUxOiAiWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudDogU3Vj
Y2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JT
dGF0ZV9TVFJJTkdfVFlQRS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQ
RS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQi
IFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxs
YXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQg
IjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJ
dGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAi
ZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50
aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJ
QyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3Rh
dGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+
DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRU
TElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0
IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQor
ICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisg
ICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFU
QSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4N
Cis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
cmM9IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFLmpzIi8+DQor
PHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0
LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3Vu
dGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIz
MCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdp
dGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMg
YW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtd
XT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1
NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEw
MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1Mzwv
YWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+
RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxw
b3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1
NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQor
ICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjkw
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJl
ZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBw
b3J0ZWRfMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIg
e3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQg
KDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0g
W2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJd
CisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyNDN4MTgKKyAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCAyNDM6ICJDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zOiBTdWNj
ZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OQU1FU1BBQ0VfRVJS
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUi5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMjAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdl
YiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBF
dXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1h
dGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsg
aXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4g
dGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3
LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMx
CisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VU
ZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9O
QU1FU1BBQ0VfRVJSJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVp
bGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0
ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4K
Ky8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5j
aHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lz
ZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBi
b2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRl
cyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAg
ICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2Fk
ZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogICAgICAgCisgICAgVGVzdCBpZiBYUGF0aEV2YWx1YXRv
ci5ldmFsdWF0ZSBwcm9wZXJseSB0aHJvd3MgTkFNRVNQQUNFX0VSUk9SCisgICAgCisqIEBhdXRo
b3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I1hQYXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfZXZh
bHVhdGVfTkFNRVNQQUNFX0VSUigpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5p
dGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFDRV9F
UlIiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAgICAgIHZhciB4cEV2YWx1YXRv
cjsKKyAgICAgIHZhciByb290OworICAgICAgdmFyIHJlc3VsdDsKKyAgICAgIHZhciBudWxsTlNS
ZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAg
CisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAg
ICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0
b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1l
bnQ7CisKKyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAg
ICAgcmVzdWx0ID0geHBFdmFsdWF0b3IuZXZhbHVhdGUoIi8vZm9vOmJhciIscm9vdCxudWxsTlNS
ZXNvbHZlciwwLG51bGxSZXN1bHQpOworICAgICAgICB9CisJCWNhdGNoKGV4KSB7CisgICAgICBz
dWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDE0
KTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ0aHJvd19OQU1FU1BBQ0VfRVJSIixzdWNjZXNzKTsKKwl9
CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9yX2V2
YWx1YXRlX05BTUVTUEFDRV9FUlIoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5
cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfcmVzdWx0VHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNh
bnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0
ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNp
emUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJN
MC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAg
UmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjEzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggMjEzOiAiWFBhdGhSZXN1bHRfcmVzdWx0VHlwZTogU3VjY2VzcyIKSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5T
UmVzb2x2ZXJfZG9jdW1lbnRFbGVtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1l
bnRFbGVtZW50LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTExIEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAx
LTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1
dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZv
cm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBS
ZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3
YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50
eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
IAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdo
dC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1l
cworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhF
dmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQnXTsKK30KKwordmFyIGRv
Y3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8g
ICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNv
bmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQg
bG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMg
c2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAg
ICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rp
b24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5
IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5
IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJl
ZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBk
b2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVk
ICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAg
aWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7
CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVy
cm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9
Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRp
b24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVz
dHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMg
Y29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxv
d3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlv
biBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAg
IHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAg
ICAgIFRoZSBYUGF0aEV2YWx1YXRvciBjYW4gY3JlYXRlICJYUGF0aE5TUmVzb2x2ZXIiIHVzaW5n
IHRoZSBtZXRob2QKKyAgICAgICJjcmVhdGVOU1Jlc29sdmVyKG5vZGVSZXNvbHZlcikiLgorICAg
ICAgCisgICAgICBSZXRyaWV2ZSB0aGUgRE9NIGRvY3VtZW50IG9uIHdoaWNoIHRoZQorICAgICAg
ImNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0
aGUgZG9jdW1lbnQKKyAgICAgIGVsZW1lbnQuICBUaGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBy
ZXNvbHZlci4KKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZh
bHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnRFbGVtZW50KCkgeworICAgdmFyIHN1Y2Nl
c3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQiKSAhPSBudWxsKSByZXR1cm47CisgICAg
dmFyIGRvYzsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAg
ICAgIHZhciByb290OworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlm
ICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRo
aXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZO
UyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9v
dCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgIHJlc29sdmVyID0geHBFdmFsdWF0b3Iu
Y3JlYXRlTlNSZXNvbHZlcihyb290KTsKKyAgICAgIGFzc2VydE5vdE51bGwoIm5vdG51bGwiLHJl
c29sdmVyKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFdmFs
dWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEVfbnVsbC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEVfbnVsbC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcg
U1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJ
VFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0K
KyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0
YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBV
QkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5U
SVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJ
T04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3Rh
dGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1s
bnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBs
b3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0K
KyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHgg
Q0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBD
REFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVN
RU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lN
UExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8
c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIg
d2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRV9udWxsLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMg
OTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtD
REFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAy
ICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdp
dGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2Vj
cmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMi
PiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFu
YWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5Q
TyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3
IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lh
bGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5t
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQs
IElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNo
b3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLnN2Zwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0
ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfb3JkZXIuc3ZnCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVt
X09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQor
PCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVz
Ij4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBl
bnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1ll
cyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwh
RU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlv
bjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+
DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8
IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElT
VCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0
LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBD
REFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RB
VEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJl
Y3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0K
KyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlS
RUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQg
dHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51
bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVj
dCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfc25hcHNob3RJ
dGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLmpzIi8+DQorPHNjcmlwdCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRp
b24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZl
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUu
IERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3ll
ZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0
aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVm
ZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQg
Q0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQor
ICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwv
ZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJz
b25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+
Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgy
MSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1
bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMzcgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3Js
ZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNo
bm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFu
ZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBU
aGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5z
ZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBo
dHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJl
LTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlv
biBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRSddOworfQorCit2YXIgZG9j
c0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAg
ICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29u
ZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBs
b2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBz
ZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAg
ICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlv
biBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkg
eworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkg
dGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVk
QnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRv
Y1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykg
eworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQg
Kz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYg
KGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9y
KGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24g
b2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMu
CisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29t
cGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3Mg
dGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNl
dFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAg
IENyZWF0ZSBhIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9z
dGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUgRG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhh
dCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFyZSBub3QgaW52YWxpZGF0ZWQgWFBhdGhS
ZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGUgPT0gZmFsc2UuCisgICAgCisqIEBhdXRob3IgQm9i
IENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1Y
UGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFs
dWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVh
dGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQt
aW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2ludmFsaWRJ
dGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7
CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaW52YWxp
ZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUiKSAhPSBudWxsKSByZXR1cm47
CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAg
ICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAg
ICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsK
KyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZl
cjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2
YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAg
ICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlIjsKKyAgICAgIHZhciB4cGF0aFR5
cGUgPSBBTllfVU5PUkRFUkVEX05PREVfVFlQRTsKKyAgICAgIHZhciBlbXBsb3llZTsKKyAgICAg
IHZhciBkb2NFbGVtZW50OworICAgICAgdmFyIGludmFsaWRJdGVyYXRvclN0YXRlOworICAgICAg
CisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAg
ICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9
IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVO
U1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBl
dmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5
cGUsaW5yZXN1bHQpOworICAgICAgZG9jRWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisK
KyAgICAgIGVtcGxveWVlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImVtcGxveWVlIik7CisgICAgICBl
bXBsb3llZSA9IGRvY0VsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wbG95ZWUpOworICAgICAgaW52YWxp
ZEl0ZXJhdG9yU3RhdGUgPSBvdXRyZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAg
IGFzc2VydEZhbHNlKCJmYWxzZSIsaW52YWxpZEl0ZXJhdG9yU3RhdGUpOworCit9CisKKworCisK
K2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0
ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfSUQuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0lELnN2ZwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0lELnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFE
T0NUWVBFIHN2ZyBbDQorICA8IUVMRU1FTlQgdGVzdCAoY2hpbGQpKyA+DQorICA8IUFUVExJU1Qg
dGVzdCB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgIDwhRUxFTUVOVCBjaGlsZCBFTVBUWT4NCisg
IDwhQVRUTElTVCBjaGlsZCBpZCBJRCAjSU1QTElFRD4NCisgIDwhQVRUTElTVCBjaGlsZCBjaGVj
ayBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIHRlc3Qp
Pg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwh
RUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEg
I1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAj
UkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNj
cmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+
ICAgICAgDQorICA8IUVOVElUWSBzdmd1bml0IFNZU1RFTSAic3ZndW5pdC5qcyI+DQorICA8IUVO
VElUWSBzdmd0ZXN0IFNZU1RFTSAiQ29uZm9ybWFuY2VfSUQuanMiPiAgDQorXT4NCis8c3ZnIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9
IjEwMCIgaGVpZ2h0PSIxMDAiLz48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+JnN2Z3Rl
c3Q7JnN2Z3VuaXQ7PC9zY3JpcHQ+DQorPHRlc3QgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5v
cmciPg0KKyAgPGNoaWxkIGlkPSJjaGlsZDEiIGNoZWNrPSJjaGlsZDEiLz4NCisgIDxjaGlsZCBp
ZD0iY2hpbGQyIiBjaGVjaz0iY2hpbGQyIi8+DQorPC90ZXN0Pg0KKzwvc3ZnPg0KKw0KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0
ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQ
T1JURURfRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VS
Ui1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0Nh
bnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwx
MDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkg
c2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDEy
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDEyOiAiWFBhdGhFeHByZXNz
aW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVf
U1RSSU5HX1RZUEUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RSSU5HX1RZUEUuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQRS5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMzcgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdl
YiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBF
dXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1h
dGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsg
aXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4g
dGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3
LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMx
CisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VU
ZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0
b3JTdGF0ZV9TVFJJTkdfVFlQRSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwor
dmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBi
eSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qg
c3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25z
LCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBP
dGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRo
ZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmlu
ZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBz
ZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAg
IGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAg
IC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBk
b2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBp
ZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0
aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJk
b2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgewor
ICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2go
ZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAg
ICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5
Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5
IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUg
cGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2Yg
dGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAg
aWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21w
bGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhIFNUUklOR19UWVBF
IFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUg
RG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFy
ZSBub3QgaW52YWxpZGF0ZWQgWFBhdGhSZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGUgPT0gZmFs
c2UuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRv
cgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAw
MzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0
aW9uIFhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFKCkgeworICAg
dmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhS
ZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RSSU5HX1RZUEUiKSAhPSBudWxsKSByZXR1cm47
CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAg
ICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAg
ICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsK
KyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZl
cjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2
YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAg
ICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlIjsKKyAgICAgIHZhciB4cGF0aFR5
cGUgPSBTVFJJTkdfVFlQRTsKKyAgICAgIHZhciBlbXBsb3llZTsKKyAgICAgIHZhciBkb2NFbGVt
ZW50OworICAgICAgdmFyIGludmFsaWRJdGVyYXRvclN0YXRlOworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRo
RXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRv
Yyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZh
bHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQp
OworICAgICAgZG9jRWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgIGVtcGxv
eWVlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImVtcGxveWVlIik7CisgICAgICBlbXBsb3llZSA9IGRv
Y0VsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wbG95ZWUpOworICAgICAgaW52YWxpZEl0ZXJhdG9yU3Rh
dGUgPSBvdXRyZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAgIGFzc2VydEZhbHNl
KCJmYWxzZSIsaW52YWxpZEl0ZXJhdG9yU3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQ
RSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1
bHRfYm9vbGVhblZhbHVlX2ZhbHNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFsc2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVu
ZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2
Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2Rh
dGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisg
ICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyNzF4MTgKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAyNzE6ICJYUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFsc2U6IFN1
Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9U
WVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAs
MC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3Rl
eHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDU2N3gxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU2Nzog
IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBz
aG90TGVuZ3RoX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzMiBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUg
V2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ks
IEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhl
bWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29y
ayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBp
biB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93
d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEy
MzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9z
ZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X3NuYXBzaG90TGVu
Z3RoX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0g
LTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmlu
ZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9u
IGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMg
c3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21w
bGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3
aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFn
ZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8v
CisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNl
cHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7
CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVs
bDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2Fk
KGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9Cisg
ICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwg
ZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8v
CisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAg
ICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAg
IFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisv
LyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAg
ICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0
ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3Rh
dHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBY
UGF0aFJlc3VsdCBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSBYUGF0aFJlc3VsdFR5cGUgZm9y
IAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgpIGNoZWNr
aW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuc25hcHNob3RMZW5ndGggaXMgY29ycmVjdCB2YWx1
ZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXNu
YXBzaG90LWxlbmd0aAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc25hcHNob3RJdGVtCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHRUeXBlCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqLworZnVuY3Rpb24gWFBhdGhS
ZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJl
c3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSIpICE9IG51bGwp
IHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0g
MTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0g
MzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZh
ciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZh
ciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9jOworICAgICAgdmFy
IHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsK
KyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxs
OworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90
ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
OworICAgICAgdmFyIHNuYXBzaG90SXRlbTsKKyAgICAgIHZhciBzbmFwc2hvdExlbmd0aDsKKyAg
ICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9j
KSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0K
KyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0
b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3Jl
YXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0
ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBh
dGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIHNuYXBzaG90TGVuZ3RoID0gb3V0cmVzdWx0LnNuYXBz
aG90TGVuZ3RoOworCisgICAgICBhc3NlcnRFcXVhbHMoInNhbWUiLDUsc25hcHNob3RMZW5ndGgp
OworICAgICAgIAorfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1
bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUoKTsKK30KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBO
YW1lc3BhY2VVUklfcHJlZml4LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeC5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeC5zdmcJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/
Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAg
PCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQi
Pg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxl
bWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50
MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5
VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVC
TElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhp
cyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEg
UFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0g
Im5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95
ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAg
ICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAg
IG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFB
VFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFU
QSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElT
VCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBj
b21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3
aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9w
cmVmaXguanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
IiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3Qu
Z292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8
cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1z
dGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3
dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9M
ZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8
bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdp
dGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMg
YW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtd
XT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0K
KyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3Rj
PSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5E
ZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5p
c3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1w
bG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5v
cjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9z
aXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRl
cj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+Mjcg
U291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15
ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0K
KyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5v
cmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0K
KyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzcgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSddOwor
fQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisv
LworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsg
YmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVy
ZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAg
ICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8v
ICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRl
bHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4K
Ky8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmlu
Zyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAg
CisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFs
aXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRl
JzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhl
IGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGlu
IHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1
bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3
aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQu
CitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7
CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8q
KgorKiAKKyAgICAgIENyZWF0ZSBhIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIFhQYXRoUmVz
dWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUgRG9jdW1lbnQs
IHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFyZSBub3QgaW52
YWxpZGF0ZWQgWFBhdGhSZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGUgPT0gZmFsc2UuCisgICAg
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
dmFsdWF0b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhSZXN1bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0ZQorKi8KK2Z1bmN0aW9uIFhQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKCkg
eworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAi
WFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBO
VU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJP
T0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9
IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFy
IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9
IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRv
YzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIg
Y29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0
cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVl
IjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRTsKKyAg
ICAgIHZhciBlbXBsb3llZTsKKyAgICAgIHZhciBkb2NFbGVtZW50OworICAgICAgdmFyIGludmFs
aWRJdGVyYXRvclN0YXRlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAg
IGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9
IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNv
bHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9k
ZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250
ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgZG9jRWxlbWVudCA9
IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgIGVtcGxveWVlID0gZG9jLmNyZWF0ZUVsZW1l
bnQoImVtcGxveWVlIik7CisgICAgICBlbXBsb3llZSA9IGRvY0VsZW1lbnQuYXBwZW5kQ2hpbGQo
ZW1wbG95ZWUpOworICAgICAgaW52YWxpZEl0ZXJhdG9yU3RhdGUgPSBvdXRyZXN1bHQuaW52YWxp
ZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAgIGFzc2VydEZhbHNlKCJmYWxzZSIsaW52YWxpZEl0ZXJh
dG9yU3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSgpOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfRXhw
cmVzc2lvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0V4cHJlc3Npb25zLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0V4
cHJlc3Npb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBM
MTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBh
dCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAyMjh4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyMjg6ICJDb25m
b3JtYW5jZV9FeHByZXNzaW9uczogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9BTllfVFlQRS5zdmcJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0
b3JTdGF0ZV9BTllfVFlQRS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lT
VEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkg
ZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAg
IDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwv
ZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJ
QyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZ
IGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04g
bm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMg
Q0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3ll
ZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAg
IDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFU
QSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5U
IHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJ
RUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9U
WVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
c3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RB
VEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NE
QVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8g
YSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZl
bnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpv
bmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0
ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxh
cywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXll
cnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfMy5zdmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNT
dXBwb3J0ZWRfMy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQor
PCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/
UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkki
ICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMg
InVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVu
dGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJM
SUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90
YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSss
IGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHht
bG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFt
ZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJ
U1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJ
UkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNS
RVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNj
cmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1l
bnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3JjPSJDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLmpzIi8+DQorPHNjcmlw
dCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0
dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8
L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdl
bmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEy
MzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8
ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRz
DQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBu
dW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2Vj
dGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0
aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJv
LmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8
L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBP
IEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0
dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1w
OmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1w
OnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxh
cnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVy
Pg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVt
cDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywg
dGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVz
IiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBU
ZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4
dF9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0X09SREVSRURf
Tk9ERV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJz
dGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAi
MTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5U
SVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxl
bWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50
aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEg
IlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lT
VEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEg
I0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0K
KyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlw
dCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAg
ICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEw
MCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRS5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAg
PHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAy
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFz
LCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0K
KyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmlu
ZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25u
b3I8L25hbWU+DQorICA8cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisg
IDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBE
YWxsYXMsIFRleGFzIDk4NTU2PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxl
cyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0
IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMg
OTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dST05HX0RP
Q1VNRU5UX0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLnN2ZwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwh
RE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJ
VFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAg
IDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEg
eG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJ
dGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAi
ZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1
cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRp
dHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElD
ICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0
aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBl
bXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxu
cyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUg
Q0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNU
IHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJF
RA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVR
VUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3Jp
cHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50
IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4
bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHNyYz0iWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJS
LmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3Jj
PSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIg
eG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAx
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRv
bWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNh
LmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVu
dGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFk
amFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9u
YW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3Rj
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1
NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0
cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0
bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8
L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0Lmdv
diIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVl
SWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25t
Om5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9u
Pg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVt
YWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRo
IFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwv
bmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxz
YWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMu
IFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9z
dmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAw
eDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmls
bD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4w
MCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7
dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgNTcxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTcx
OiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVy
IGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAg
ICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBl
PVNPTElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwx
MDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0
ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDQ5NHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ5NDogIlhQYXRo
UmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUiCisgICAg
ICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyOTR4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCAyOTQ6ICJzYW1lOiBhc3NlcnRFcXVhbHMgZmFpbGVkLCBhY3R1YWwgMCwg
ZXhwZWN0ZWQgNS4iCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25f
ZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9k
b2N1bWVudEVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAs
MC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3Rl
eHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDM1MHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM1MDog
IlhQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQ6IFN1Y2Nlc3MiCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Qcm9jZXNzaW5nX0luc3RydWN0aW9u
X05vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9Qcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3Npbmdf
SW5zdHJ1Y3Rpb25fTm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcg
QEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEw
MHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2Zp
bGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAu
MDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQg
e3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDI1MHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI1
MDogIlByb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXM6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9JRC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2Vf
SUQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvQ29uZm9ybWFuY2VfSUQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4w
MEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
TlMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Np
b25fTlMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisKKy8qCitDb3B5cmlnaHQg
w4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0
cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAK
K2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAK
K1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PD
gsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAy
L2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5j
dGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJu
IFsnWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUyddOworfQorCit2YXIgZG9jc0xv
YWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAg
IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmln
dXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2Fk
aW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQg
dG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICBy
YWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBz
ZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgewor
ICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhy
b3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVp
bGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1Jl
ZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgewor
ICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0g
cHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAo
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3Io
YnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBv
ZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4K
Ky8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21w
bGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0
aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxv
YWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0
VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAg
VGhlIFhQYXRoRXZhbHVhdG9yIGNhbiBjcmVhdGUgYSAiWFBhdGhFeHByZXNzaW9uIiB1c2luZyB0
aGUgbWV0aG9kCisgICAgICAiY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciki
LgorICAgICAgCisgICAgICBSZXRyaWV2ZSB0aGUgRE9NIGRvY3VtZW50IG9uIHdoaWNoIHRoZQor
ICAgICAgJ2NyZWF0ZUV4cHJlc3Npb24oIi9zdGFmZi9uaXN0OmVtcGxveWVlIiwgcmVzb2x2ZXIp
JyBtZXRob2QgaXMKKyAgICAgIGludm9rZWQgd2l0aCB0aGUgZG9jdW1lbnQgZWxlbWVudC4gIFRo
ZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhCisgICAgICBwcmUtY29tcGlsZWQgZXhwcmVzc2lvbi4K
KyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
dmFsdWF0b3ItY3JlYXRlRXhwcmVzc2lvbgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2Ny
ZWF0ZUV4cHJlc3Npb25fTlMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRp
YWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TIikg
IT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7Cisg
ICAgICB2YXIgZXhwOworICAgICAgdmFyIHJvb3Q7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAg
ICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykg
IT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9Cisg
ICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICB4cEV2YWx1
YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Cityb290ID0gZG9jLmRvY3VtZW50RWxl
bWVudDsKKworICAgICAgcmVzb2x2ZXIgPSB4cEV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKHJv
b3QpOworICAgICAgZXhwID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lvbigiL3N0YWZmL25p
c3Q6ZW1wbG95ZWUiLHJlc29sdmVyKTsKKyAgICAgIGFzc2VydE5vdE51bGwoIm5vdG51bGwiLGV4
cCk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fTlMoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVf
VFlQRS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURfTk9ERV9U
WVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVf
VFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAg
IEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNP
TElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAu
MDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgw
LDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDQzOXgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQzOTogIlhQYXRoUmVz
dWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRSIKKyAgICAgIFJlbmRl
clNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0MHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDE0MDogIlR5cGVFcnJvcjogTnVsbCB2YWx1ZSIKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVf
RVJSLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0ZU5l
eHRfSU5WQUxJRF9TVEFURV9FUlIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUwIEBACisK
Ky8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
CisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFy
Y2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5p
dmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBl
eHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFt
ZXMoKQoreworcmV0dXJuIFsnWFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9F
UlInXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVs
bDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJh
bWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAg
SWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisv
LyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3Rh
dHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGlt
bWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhl
IHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0g
J3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9j
dW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVy
ID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7Cisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7Cisg
ICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBh
Z2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNo
SW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3Rh
cnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2Fk
ZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNo
YW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4
ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisvKioKKyogCisgICAgICBDcmVhdGUgYSBBTllfVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGlu
ZyAvc3RhZmYvZW1wbG95ZWUsCisgICAgICBtb2RpZnkgdGhlIERvY3VtZW50LCB0aGVuIGNoZWNr
IHRoYXQgWFBhdGhSZXN1bHRzLml0ZXJhdGVOZXh0CisgICAgICB0aHJvd3MgRE9NRXhjZXB0aW9u
IElOVkFMSURfU1RBVEVfRVJSLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVz
b2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0CisqIEBzZWUgaHR0cDovL3d3
dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0
aFJlc3VsdC1pdGVyYXRlTmV4dAorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0
X0lOVkFMSURfU1RBVEVfRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0
aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFU
RV9FUlIiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZh
ciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFy
IEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAg
dmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQ
RSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFy
IGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2
YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIg
b3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxv
eWVlIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBBTllfVFlQRTsKKyAgICAgIHZhciBvdXROb2Rl
OworICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgdmFyIHBhcmVudDsKKyAgICAgIHZhciBvd25l
cjsKKyAgICAgIHZhciBvd25lclR5cGU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIg
ZG9jRWxlbWVudDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7
CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIg
PSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAg
ZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5v
ZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0VsZW1lbnQgPSBkb2Mu
ZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJl
bXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGVtcGxv
eWVlKTsKKyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAg
ICAgb3V0Tm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgICB9CisJCWNhdGNo
KGV4KSB7CisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAm
JiBleC5jb2RlID09IDExKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ0aHJvd19JTlZBTElEX1NUQVRF
X0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBYUGF0aFJlc3VsdF9pdGVyYXRlTmV4dF9JTlZBTElEX1NUQVRFX0VSUigpOworfQpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0
X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRf
T1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0
X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZh
cyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgw
LDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUg
MTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4w
MCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDQxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggNDQxOiAiWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0X09SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4
MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjk3eDE4CisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjk3OiAiY291bnQ6IGFzc2VydEVxdWFscyBm
YWlsZWQsIGFjdHVhbCAwLCBleHBlY3RlZCA1LiIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHktZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNl
X2hhc0ZlYXR1cmVfZW1wdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9lbXB0eS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2Fu
dmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0
ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xv
cj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBM
MC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3
ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjY3eDE4Cisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjY3OiAiQ29uZm9ybWFuY2VfaGFzRmVh
dHVyZV9lbXB0eTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFDRV9FUlItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2V2YWx1YXRlX05BTUVTUEFDRV9FUlItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVf
TkFNRVNQQUNFX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMzY2eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzY2OiAi
WFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUjogU3VjY2VzcyIKSW5kZXg6IExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVz
b2x2ZXJfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVy
X2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2Rv
Y3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgNDAzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDAzOiAi
WFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQ6IFN1Y2Nlc3Mi
CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Qcm9jZXNzaW5nX0luc3Ry
dWN0aW9uX05vZGVzLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9Qcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzLnN2ZwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25f
Tm9kZXMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RFTSAic3RhZmYu
ZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAg
RGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBl
bnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQ+
PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVS
SSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQxICJUaGlz
IGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQ
VUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAi
bm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENEQVRBICNJTVBM
SUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrKT4NCisgICA8
IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQg
cmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJF
RA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVE
DQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQ
Q0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0K
K10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhl
aWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgc3JjPSJQcm9jZXNzaW5nX0luc3RydWN0aW9uX05vZGVzLmpzIi8+DQorPHNjcmlwdCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRp
b24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZl
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUu
IERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3ll
ZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0
aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVm
ZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQg
Q0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQor
ICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwv
ZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJz
b25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+
Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgy
MSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJf
bG9va3VwTmFtZXNwYWNlVVJJX251bGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVz
cGFjZVVSSV9udWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMzAyeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzAyOiAi
WFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsIgorICAgICAgUmVuZGVyU1ZH
VGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMTk5eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggMTk5OiAibm90bnVsbDogYXNzZXJ0TnVsbCBmYWlsZWQsIGFjdHVhbCIKSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0
YXRlX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRl
cmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29u
dGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3Jl
Y3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4
MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwx
MDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgK
KyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNTQzeDE4CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTQzOiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJh
dG9yU3RhdGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9UWVBF
X0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQ
RV9FUlIuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYi
ICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElU
WSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQor
ICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20n
PkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFF
TlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9u
MT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24y
Pg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0K
KyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFO
T1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQg
c3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0K
KyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlw
dCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAg
ICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0
LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVh
dG9yX2V2YWx1YXRlX1RZUEVfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFy
dGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAg
DQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50Mjsg
RGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFz
IDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVt
cD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNv
bSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06
bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBE
aXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5
Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVt
cDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDps
b2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRy
ZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFs
aXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29tbWVu
dF9Ob2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAg
ICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9
U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEw
MC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQg
KDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgMTY5eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTY5OiAiQ29tbWVu
dF9Ob2RlczogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFs
dWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNp
emUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEw
MCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAw
TDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZH
VGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgNDAzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggNDAzOiAiWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlI6IFN1Y2Nl
c3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9F
eHByZXNzaW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9Db25mb3JtYW5jZV9FeHByZXNzaW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX0V4cHJlc3Npb25zLmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMwNyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0
IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9m
IFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRp
Y3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2
ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBM
aWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2Yg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKwor
WzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29m
dHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1
bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ0NvbmZvcm1hbmNl
X0V4cHJlc3Npb25zJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVp
bGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0
ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4K
Ky8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5j
aHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lz
ZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBi
b2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRl
cyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAg
ICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2Fk
ZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogCisgICAgICAxLjMgQ29uZm9ybWFuY2UgLSBJdGVyYXRl
IG92ZXIgYSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyAKKyAgICAgIHZhbGlkIFhQYXRoIGV4
cHJlc3Npb25zLCBjYWxsaW5nIFhQYXRoRXZhbHVhdG9yLmNyZWF0ZUV4cHJlc3Npb24gCisgICAg
ICBmb3IgZWFjaC4gSWYgbm8gZXhwZWN0aW9ucyBhcmUgdGhyb3duIGFuZCBlYWNoIHJlc3VsdCBp
cyBub24tbnVsbCwgCisgICAgICB0aGVuIHRoZSB0ZXN0IHBhc3Nlcy4KKyAgICAKKyogQGF1dGhv
ciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZl
bC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI0NvbmZvcm1hbmNlCisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2
YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMt
WFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlRXhwcmVzc2lvbgorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhOU1Jlc29sdmVyCisqLworZnVuY3Rpb24gQ29uZm9ybWFuY2VfRXhwcmVzc2lvbnMoKSB7Cisg
ICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25m
b3JtYW5jZV9FeHByZXNzaW9ucyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAg
ICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBleHByZXNz
aW9uOworICAgICAgdmFyIGV4cHJlc3Npb25MaXN0ID0gbmV3IEFycmF5KCk7CisKKyAgICAgIHZh
ciB4cGF0aGV4cHJlc3Npb247CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAg
ICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVm
ID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOwor
cmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgZXhwcmVz
c2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIvIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiY2hpbGQ6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImNoaWxkOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJjaGlsZDo6cHJvY2Vzc2luZy1pbnN0cnVjdGlv
bigpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiY2hpbGQ6OnBy
b2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25hbWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9u
TGlzdC5sZW5ndGhdID0gImNoaWxkOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lv
bkxpc3QubGVuZ3RoXSA9ICJjaGlsZDo6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlz
dC5sZW5ndGhdID0gImNoaWxkOjpuaXN0OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxp
c3QubGVuZ3RoXSA9ICJjaGlsZDo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lv
bkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojpjb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojp0ZXh0KCkiOworZXhwcmVzc2lv
bkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojpwcm9jZXNzaW5nLWlu
c3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJk
ZXNjZW5kYW50Ojpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50Ojpub2RlKCkiOworZXhwcmVz
c2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50OjoqIjsKK2V4cHJl
c3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZGVzY2VuZGFudDo6bmlzdDoqIjsK
K2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZGVzY2VuZGFudDo6ZW1w
bG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwYXJlbnQ6
OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInBh
cmVudDo6dGV4dCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
cGFyZW50Ojpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICJwYXJlbnQ6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25hbWUn
KSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInBhcmVudDo6bm9k
ZSgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicGFyZW50Ojoq
IjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicGFyZW50OjpuaXN0
OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwYXJlbnQ6OmVt
cGxveWVlIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0
b3I6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0g
ImFuY2VzdG9yOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJhbmNlc3Rvcjo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbigpIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0b3I6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rp
b24oJ25hbWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImFu
Y2VzdG9yOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICJhbmNlc3Rvcjo6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0g
ImFuY2VzdG9yOjpuaXN0OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJhbmNlc3Rvcjo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICJmb2xsb3dpbmctc2libGluZzo6Y29tbWVudCgpIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nLXNpYmxpbmc6OnRleHQoKSI7Citl
eHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZy1zaWJsaW5n
Ojpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxp
c3QubGVuZ3RoXSA9ICJmb2xsb3dpbmctc2libGluZzo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbign
bmFtZScpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93
aW5nLXNpYmxpbmc6Om5vZGUoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gImZvbGxvd2luZy1zaWJsaW5nOjoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25M
aXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nLXNpYmxpbmc6Om5pc3Q6KiI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZy1zaWJsaW5nOjplbXBsb3llZSI7
CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZy1zaWJs
aW5nOjpjb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICJwcmVjZWRpbmctc2libGluZzo6dGV4dCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25M
aXN0Lmxlbmd0aF0gPSAicHJlY2VkaW5nLXNpYmxpbmc6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24o
KSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZy1z
aWJsaW5nOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwcmVjZWRpbmctc2libGluZzo6bm9kZSgpIjsKK2V4
cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicHJlY2VkaW5nLXNpYmxpbmc6
OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwcmVjZWRpbmct
c2libGluZzo6bmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0g
PSAicHJlY2VkaW5nLXNpYmxpbmc6OmVtcGxveWVlIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Np
b25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nOjpjb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJmb2xsb3dpbmc6OnRleHQoKSI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZzo6cHJvY2Vzc2luZy1pbnN0
cnVjdGlvbigpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9s
bG93aW5nOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJmb2xsb3dpbmc6Om5vZGUoKSI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZzo6KiI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImZvbGxvd2luZzo6bmlzdDoqIjsKK2V4cHJl
c3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZm9sbG93aW5nOjplbXBsb3llZSI7
CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZzo6Y29t
bWVudCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicHJlY2Vk
aW5nOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cmVjZWRpbmc6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKSI7CitleHByZXNzaW9uTGlzdFtleHBy
ZXNzaW9uTGlzdC5sZW5ndGhdID0gInByZWNlZGluZzo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbign
bmFtZScpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAicHJlY2Vk
aW5nOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cmVjZWRpbmc6OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cmVjZWRpbmc6Om5pc3Q6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gInByZWNlZGluZzo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICJhdHRyaWJ1dGU6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNz
aW9uTGlzdC5sZW5ndGhdID0gImF0dHJpYnV0ZTo6dGV4dCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYXR0cmlidXRlOjpwcm9jZXNzaW5nLWluc3RydWN0aW9u
KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhdHRyaWJ1dGU6
OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25hbWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNz
aW9uTGlzdC5sZW5ndGhdID0gImF0dHJpYnV0ZTo6bm9kZSgpIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYXR0cmlidXRlOjoqIjsKK2V4cHJlc3Npb25MaXN0W2V4
cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYXR0cmlidXRlOjpuaXN0OioiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhdHRyaWJ1dGU6OmVtcGxveWVlIjsKK2V4cHJl
c3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAibmFtZXNwYWNlOjpjb21tZW50KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJuYW1lc3BhY2U6OnRl
eHQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIm5hbWVzcGFj
ZTo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbigpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25M
aXN0Lmxlbmd0aF0gPSAibmFtZXNwYWNlOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJyki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJuYW1lc3BhY2U6Om5v
ZGUoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIm5hbWVzcGFj
ZTo6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIm5hbWVzcGFj
ZTo6bmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAibmFt
ZXNwYWNlOjplbXBsb3llZSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gInNlbGY6OmNvbW1lbnQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gInNlbGY6OnRleHQoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gInNlbGY6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKSI7CitleHByZXNzaW9uTGlzdFtl
eHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInNlbGY6OnByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ25h
bWUnKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInNlbGY6Om5v
ZGUoKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gInNlbGY6Oioi
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJzZWxmOjpuaXN0Oioi
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJzZWxmOjplbXBsb3ll
ZSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImRlc2NlbmRhbnQt
b3Itc2VsZjo6Y29tbWVudCgpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0
aF0gPSAiZGVzY2VuZGFudC1vci1zZWxmOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50LW9yLXNlbGY6OnByb2Nlc3NpbmctaW5zdHJ1
Y3Rpb24oKSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImRlc2Nl
bmRhbnQtb3Itc2VsZjo6cHJvY2Vzc2luZy1pbnN0cnVjdGlvbignbmFtZScpIjsKK2V4cHJlc3Np
b25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZGVzY2VuZGFudC1vci1zZWxmOjpub2Rl
KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJkZXNjZW5kYW50
LW9yLXNlbGY6OioiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJk
ZXNjZW5kYW50LW9yLXNlbGY6Om5pc3Q6KiI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlz
dC5sZW5ndGhdID0gImRlc2NlbmRhbnQtb3Itc2VsZjo6ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjpjb21tZW50KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1z
ZWxmOjp0ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJh
bmNlc3Rvci1vci1zZWxmOjpwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjpwcm9jZXNzaW5n
LWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjpub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICJhbmNlc3Rvci1vci1zZWxmOjoqIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0b3Itb3Itc2VsZjo6bmlzdDoqIjsKK2V4
cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiYW5jZXN0b3Itb3Itc2VsZjo6
ZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJjb21t
ZW50KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJ0ZXh0KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJwcm9jZXNzaW5nLWlu
c3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJw
cm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lv
bkxpc3QubGVuZ3RoXSA9ICJub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICIqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
bmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZW1wbG95
ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy9jb21tZW50
KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy90ZXh0KCki
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy9wcm9jZXNzaW5n
LWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICIuLy9wcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLy9ub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICIuLy8qIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0
Lmxlbmd0aF0gPSAiLi8vbmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxl
bmd0aF0gPSAiLi8vZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIuLi9jb21tZW50KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIuLi90ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICIuLi9wcm9jZXNzaW5nLWluc3RydWN0aW9uKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICIuLi9wcm9jZXNzaW5nLWluc3RydWN0aW9uKCduYW1lJykiOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLi9ub2RlKCkiOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLi8qIjsKK2V4cHJlc3Npb25M
aXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiLi4vbmlzdDoqIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiLi4vZW1wbG95ZWUiOworZXhwcmVzc2lvbkxpc3Rb
ZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJAYXR0cmlidXRlbmFtZSI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIi4vY29tbWVudCgpIjsKK2V4cHJlc3Npb25MaXN0
W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiLi90ZXh0KCkiOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuL3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oKSI7CitleHBy
ZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIi4vcHJvY2Vzc2luZy1pbnN0cnVj
dGlvbignbmFtZScpIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
Li9ub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuLyoi
OworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIuL25pc3Q6KiI7Citl
eHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIi4vZW1wbG95ZWUiOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJjb21tZW50KCkgfCB0ZXh0KCkg
fCBwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkgfCBub2RlKCkiOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVthZGRyZXNzXSI7CitleHByZXNzaW9uTGlz
dFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImVtcGxveWVlL2FkZHJlc3NbQHN0cmVldF0iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlv
bj0nQ29tcHV0ZXIgU3BlY2lhbGlzdCddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0
Lmxlbmd0aF0gPSAiZW1wbG95ZWVbcG9zaXRpb24hPSdDb21wdXRlciBTcGVjaWFsaXN0J10iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtnZW5kZXI9
J01hbGUnIG9yIGdlbmRlcj0nRmVtYWxlJ10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxp
c3QubGVuZ3RoXSA9ICJlbXBsb3llZVtnZW5kZXIhPSdNYWxlJyBhbmQgZ2VuZGVyIT0nRmVtYWxl
J10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZS9h
ZGRyZXNzW0BzdHJlZXQ9J1llcyddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxl
bmd0aF0gPSAiZW1wbG95ZWUvYWRkcmVzc1tAc3RyZWV0IT0nWWVzJ10iOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigpPTFdIjsKK2V4
cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZW1wbG95ZWVbMV0iOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigp
PWxhc3QoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBs
b3llZVtsYXN0KCldIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAi
ZW1wbG95ZWVbcG9zaXRpb24oKT4xIGFuZCBwb3NpdGlvbjxsYXN0KCldIjsKK2V4cHJlc3Npb25M
aXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiZW1wbG95ZWVbcG9zaXRpb24oKT49MSBhbmQg
cG9zaXRpb248PWxhc3QoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJlbXBsb3llZVtjb3VudCguKT4wXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlz
dC5sZW5ndGhdID0gImVtcGxveWVlW3Bvc2l0aW9uKCkgbW9kIDI9MF0iOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigpIG1vZCAtMj0w
XSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImVtcGxveWVlW3Bv
c2l0aW9uKCkgZGl2IDI9MF0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICJlbXBsb3llZVtwb3NpdGlvbigpIGRpdiAtMj0tMV0iOworZXhwcmVzc2lvbkxpc3RbZXhw
cmVzc2lvbkxpc3QubGVuZ3RoXSA9ICJlbXBsb3llZVtwb3NpdGlvbigpIGRpdiAyICogMj1wb3Np
dGlvbigpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gImVtcGxv
eWVlWzMgPiAyID4gMV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICJpZCgnQ0FOQURBJykiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICIqW2xvY2FsLW5hbWUoKT0nZW1wbG95ZWUnXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9u
TGlzdC5sZW5ndGhdID0gIipbbG9jYWwtbmFtZSguKT0nZW1wbG95ZWUnXSI7CitleHByZXNzaW9u
TGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIipbbG9jYWwtbmFtZShlbXBsb3llZSk9J2Vt
cGxveWVlJ10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW2xv
Y2FsLW5hbWUoKT0nZW1wbG95ZWUnXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5s
ZW5ndGhdID0gIipbbmFtZXNwYWNlLXVyaSgpPSdodHRwOi8vd3d3Lm5pc3QuZ292J10iOworZXhw
cmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW25hbWUoKT0nbmlzdDplbXBs
b3llZSddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiKltzdHJp
bmcoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N0cmlu
ZygxMCBkaXYgZm9vKT0nTmFOJ10iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIqW2NvbmNhdCgnYScsICdiJywgJ2MnKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVz
c2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N0YXJ0cy13aXRoKCdlbXBsb3llZScsICdlbXAnKV0iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW2NvbnRhaW5zKCdlbXBs
b3llZScsICdlbXAnKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9
ICIqW3N1YnN0cmluZy1iZWZvcmUoJ2VtcGxveWVlSWQnLCAnSWQnKV0iOworZXhwcmVzc2lvbkxp
c3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N1YnN0cmluZy1hZnRlcignZW1wbG95ZWVJ
ZCcsICdlbXBsb3llZScpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gIipbc3Vic3RyaW5nKCdlbXBsb3llZUlkJywgNCldIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJl
c3Npb25MaXN0Lmxlbmd0aF0gPSAiKltzdWJzdHJpbmcoJ2VtcGxveWVlSWQnLCA0LCA1KV0iOwor
ZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3RoXSA9ICIqW3N0cmluZy1sZW5ndGgo
KT0yXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhdID0gIipbc3RyaW5n
LWxlbmd0aCguKT1zdHJpbmctbGVuZ3RoKG5vcm1hbGl6ZS1zcGFjZSguKSldIjsKK2V4cHJlc3Np
b25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0gPSAiKlt0cmFuc2xhdGUoJ2JhcicsICdhYmMn
LCAnQUJDJyk9J0JBciddIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0aF0g
PSAiKltib29sZWFuKC4pXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5ndGhd
ID0gIipbbm90KGJvb2xlYW4oLikpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5s
ZW5ndGhdID0gIipbdHJ1ZSgpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gIipbZmFsc2UoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICIqW2xhbmcoJ2VuJyldIjsKK2V4cHJlc3Npb25MaXN0W2V4cHJlc3Npb25MaXN0Lmxlbmd0
aF0gPSAiKltudW1iZXIoKV0iOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVuZ3Ro
XSA9ICIqW251bWJlcignNCcpXSI7CitleHByZXNzaW9uTGlzdFtleHByZXNzaW9uTGlzdC5sZW5n
dGhdID0gIipbZmxvb3IoLildPjAiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3QubGVu
Z3RoXSA9ICIqW2NlaWxpbmcoLildPDEiOworZXhwcmVzc2lvbkxpc3RbZXhwcmVzc2lvbkxpc3Qu
bGVuZ3RoXSA9ICIqW3JvdW5kKG51bWJlciguKSk9MF08MSI7Citmb3IodmFyIGluZGV4TjY2Mzg4
ID0gMDtpbmRleE42NjM4OCA8IGV4cHJlc3Npb25MaXN0Lmxlbmd0aDsgaW5kZXhONjYzODgrKykg
eworICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25MaXN0W2luZGV4TjY2Mzg4XTsKKyAgICAg
IHhwYXRoZXhwcmVzc2lvbiA9IGV2YWx1YXRvci5jcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24s
cmVzb2x2ZXIpOworICAgICAgCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICBDb25mb3JtYW5jZV9FeHByZXNzaW9ucygpOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvQXR0cmlidXRlX05vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgw
LDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6
ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAw
IFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBM
MTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdU
ZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSAxNjN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAxNjM6ICJBdHRyaWJ1dGVfTm9kZXM6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1h
bmNlX2hhc0ZlYXR1cmVfbnVsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0Nh
bnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJ
dGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29s
b3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAw
TDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUg
Nzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI1MngxOAor
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI1MjogIkNvbmZvcm1hbmNlX2hhc0Zl
YXR1cmVfbnVsbDogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X1RZUEVfRVJSLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9UWVBFX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCww
KSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUg
MTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBb
ZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEw
MC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4
dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMjI3eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
MjI3OiAiWFBhdGhSZXN1bHRfVFlQRV9FUlI6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgw
LDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6
ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAw
IFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNGRjAwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBM
MTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdU
ZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSA0NzB4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCA0NzA6ICJYUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRSIKKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4Cisg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI5NHgxOAorICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI5NDogInNhbWU6IGFzc2VydEVxdWFscyBmYWlsZWQs
IGFjdHVhbCAwLCBleHBlY3RlZCA1LiIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDAp
IHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAw
eDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCww
LjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVy
U1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgNTQ3eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggNTQ3OiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorCisvKgorQ29w
eXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3Nh
Y2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNv
cnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkp
LiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0
aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhl
IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVn
YWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRl
c3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sK
K3JldHVybiBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBi
dWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhl
IHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRl
LgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5
bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3
aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhj
ZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhl
IGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQ
YWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVh
dGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLwor
ICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xv
YWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5
cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5k
b2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwg
InN0YWZmIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogCisgICAgICBDcmVhdGUgYSBVTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAg
IG1vZGlmeSB0aGUgRG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3Vs
dHMKKyAgICAgIGFyZSBub3QgaW52YWxpZGF0ZWQgWFBhdGhSZXN1bHQuaW52YWxpZEl0ZXJhdG9y
U3RhdGUgPT0gZmFsc2UuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZl
cgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
TlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVs
LTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaW52YWxpZC1pdGVyYXRvci1zdGF0
ZQorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0lu
aXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9V
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBB
TllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklO
R19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0g
NjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIg
QU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9E
RV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2
YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0
ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHBy
ZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRTsKKyAgICAgIHZhciBlbXBsb3llZTsKKyAgICAgIHZhciBk
b2NFbGVtZW50OworICAgICAgdmFyIGludmFsaWRJdGVyYXRvclN0YXRlOworICAgICAgCisgICAg
ICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9j
ID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0
ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29s
dmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0
b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5y
ZXN1bHQpOworICAgICAgZG9jRWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAg
IGVtcGxveWVlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImVtcGxveWVlIik7CisgICAgICBlbXBsb3ll
ZSA9IGRvY0VsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wbG95ZWUpOworICAgICAgaW52YWxpZEl0ZXJh
dG9yU3RhdGUgPSBvdXRyZXN1bHQuaW52YWxpZEl0ZXJhdG9yU3RhdGU7CisKKyAgICAgIGFzc2Vy
dEZhbHNlKCJmYWxzZSIsaW52YWxpZEl0ZXJhdG9yU3RhdGUpOworCit9CisKKworCisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMiBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkg
MjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3Ig
SW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdo
dHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBT
b2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5
cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24g
bmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQ
YXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUnXTsK
K30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKwor
Ly8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3Jr
IGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhl
cmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAg
ICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisv
LyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0
ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3Qu
CisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5p
bmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQg
YnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3Jl
YXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAg
IAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAn
Y29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlh
bGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRo
ZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBp
biBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9j
dW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQg
d2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVk
LgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkg
eworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisv
KioKKyogCisgICAgQ3JlYXRlIGFuIFhQYXRoUmVzdWx0IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUgWFBhdGhSZXN1bHRUeXBlIGZvciAKKyAgICBleHByZXNzaW9uIC9zdGFmZi9lbXBsb3ll
ZS9lbXBsb3llZUlkL3RleHQoKSBjaGVja2luZyB0aGF0OgorICAgIFhQYXRoUmVzdWx0LnNuYXBz
aG90TGVuZ3RoIGlzIGNvcnJlY3QgdmFsdWUuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5Cisq
IEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAz
MDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zbmFwc2hvdC1sZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LXNuYXBzaG90SXRlbQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNv
bHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRp
YWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9
IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0g
MjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAg
IHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0g
OTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVh
dG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsK
KworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0g
Ii9zdGFmZi9lbXBsb3llZS9lbXBsb3llZUlkL3RleHQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBl
ID0gVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRTsKKyAgICAgIHZhciBzbmFwc2hvdEl0ZW07
CisgICAgICB2YXIgc25hcHNob3RMZW5ndGg7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwg
ImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3Io
ZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAg
IGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHBy
ZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBz
bmFwc2hvdExlbmd0aCA9IG91dHJlc3VsdC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgYXNzZXJ0
RXF1YWxzKCJzYW1lIiw1LHNuYXBzaG90TGVuZ3RoKTsKKyAgICAgICAKK30KKworCisKKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5fVFlQRS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQk9PTEVBTl9UWVBFLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5fVFlQRS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFp
bmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9
IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAw
XX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAu
MDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDAxeDE4CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDAxOiAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9y
U3RhdGVfQk9PTEVBTl9UWVBFOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBT
SE9UX1RZUEVfbnVsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRV9udWxsLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEVfbnVsbC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKworLyoKK0NvcHlyaWdo
dCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNl
dHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVt
IAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxs
IAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFcz
Q8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIw
MDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1
bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1
cm4gWydYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RV9udWxsJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9
IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5n
IGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisv
LyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91
cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhl
IHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBp
cyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9m
IHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1
cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0
IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVp
bGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAw
OworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhp
cy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAg
ICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAlj
YXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2Ug
PSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2Fk
IHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMg
bG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBp
cyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBi
ZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9h
ZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9
Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBYUGF0aFJlc3VsdCBVTk9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFIFhQYXRoUmVzdWx0VHlwZSBmb3IgCisgICAgZXhwcmVzc2lvbiAvc3Rh
ZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCkgY2hlY2tpbmcgdGhhdDoKKyAgICBYUGF0aFJl
c3VsdC5zbmFwc2hvdEl0ZW0oeFBhdGhSZXN1bHQuc25hcHNob3RMZW5ndGgpID09IG51bGwsCisg
ICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zbmFwc2hv
dC1sZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXNuYXBzaG90SXRlbQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
WFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJl
c3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsIikgIT0g
bnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZ
UEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZ
UEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAg
ICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAg
ICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAg
ICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHRO
b2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9
IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZS9lbXBsb3ll
ZUlkL3RleHQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRTsKKyAgICAgIHZhciBzbmFwc2hvdEl0ZW07CisgICAgICB2YXIgc25hcHNob3RMZW5n
dGg7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0
aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7Cisg
ICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAg
ZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVh
dG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291
dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29s
dmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBzbmFwc2hvdExlbmd0aCA9IG91dHJlc3Vs
dC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgc25hcHNob3RJdGVtID0gb3V0cmVzdWx0LnNuYXBz
aG90SXRlbShzbmFwc2hvdExlbmd0aCk7CisgICAgICBhc3NlcnROdWxsKCJudWxsIixzbmFwc2hv
dEl0ZW0pOworICAgIAorfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhS
ZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbCgpOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudEVsZW1lbnQuc3ZnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2
ZXJfZG9jdW1lbnRFbGVtZW50LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnRF
bGVtZW50LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZG
IiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJ
VFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0K
KyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29t
Jz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwh
RU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlv
bjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9u
Mj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4N
CisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwh
Tk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5U
IHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4N
CisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVM
RU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3Jp
cHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAg
ICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlz
dC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNj
cmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1
YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50RWxlbWVudC5qcyIvPg0KKzxzY3JpcHQgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8v
d3d3LnVzYS5jb20iPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3Np
dGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5v
cnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxv
eWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwh
W0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVy
IDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24g
d2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5T
ZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20i
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2Vy
DQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5k
ZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3gg
MjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDpl
bXBsb3llZSB4bWxuczplbXA9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8v
d3d3LmFsdGF2aXN0YS5jb20iID4gICAgPGVtcDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBs
b3llZUlkPg0KKyAgPG5tOm5hbWU+SmVueSBPY29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3Np
dGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L2VtcDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1
LDAwMDwvZW1wOnNhbGFyeT4NCisgIDxlbXA6Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisg
IDxlbXA6YWRkcmVzcyBlbXA6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9u
ZT0iQ0FOQURBIiBlbXA6bG9jYWwxPSJUUlVFIj4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFz
IDk4NTU2PC9lbXA6YWRkcmVzcz4NCisgPC9lbXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
czplbXAyPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+
Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1s
bnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMg
OTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVf
RklSU1RfT1JERVJFRF9OT0RFX1RZUEUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVS
RURfTk9ERV9UWVBFLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURfTk9ERV9U
WVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMSBAQAorCisvKgorQ29weXJpZ2h0IMOC
wqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMg
SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitm
b3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitS
aWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LC
riBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQg
d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9j
b3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rp
b24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBb
J1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRSddOwor
fQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisv
LworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsg
YmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVy
ZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAg
ICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8v
ICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRl
bHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4K
Ky8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmlu
Zyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAg
CisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFs
aXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRl
JzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhl
IGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGlu
IHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1
bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3
aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQu
CitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7
CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8q
KgorKiAKKyAgICAgIENyZWF0ZSBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSBYUGF0aFJlc3VsdCBt
YXRjaGluZyAvc3RhZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCksCisgICAgICBjaGVja2lu
ZyB0aGF0IFhQYXRoUmVzdWx0LnNpbmdsZU5vZGVWYWx1ZSBtYXRjaGVzIHRoZSBmaXJzdCBFTVAw
MDAxLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQK
KyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIw
MDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlv
biBYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUoKSB7
CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJY
UGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUiKSAhPSBu
dWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQ
RSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQ
RSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAg
ICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAg
IHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5v
ZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0g
bnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL2VtcGxveWVl
SWQvdGV4dCgpIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBGSVJTVF9PUkRFUkVEX05PREVfVFlQ
RTsKKyAgICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIGRhdGE7CisgICAgICB2YXIgbm9kZU5h
bWU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0
aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7Cisg
ICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAg
ZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVh
dG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291
dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29s
dmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBvdXROb2RlID0gb3V0cmVzdWx0LnNpbmds
ZU5vZGVWYWx1ZTsKKworICAgICAgZGF0YSA9IG91dE5vZGUuZGF0YTsKKworICAgICAgYXNzZXJ0
RXF1YWxzKCJlcXVhbHMiLCJFTVAwMDAxIixkYXRhKTsKKyAgICAgICAKK30KKworCisKKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9P
UkRFUkVEX05PREVfVFlQRSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2V2YWx1YXRlX1RZUEVfRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJS
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAg
IEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2Fu
dmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0g
W2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEw
MC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBz
aXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMDh4
MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMDg6ICJYUGF0aEV2YWx1YXRv
cl9ldmFsdWF0ZV9UWVBFX0VSUjogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfcHJlZml4Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNS
ZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfcHJlZml4LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVz
cGFjZVVSSV9wcmVmaXguanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisKKy8qCitD
b3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFz
c2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29u
c29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0
eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0
aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9M
ZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2Ug
dGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQor
eworcmV0dXJuIFsnWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgnXTsK
K30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKwor
Ly8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3Jr
IGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhl
cmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAg
ICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisv
LyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0
ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3Qu
CisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5p
bmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQg
YnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3Jl
YXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAK
KyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAg
ICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAg
ICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9
ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0
aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBs
ZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
dGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVk
IGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBk
b2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdl
ZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0
ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisK
Ky8qKgorKiAKKyAgICAgIEl0ZXJhdGUgb3ZlciBhbGwgRWxlbWVudHMgaW4gdGhlIHRlc3QgZG9j
dW1lbnQsIGNyZWF0aW5nCisgICAgICBuc3Jlc29sdmVycyBjaGVja2luZyB0aGF0IGlmIHRoZSBF
bGVtZW50IGhhcyBhIHByZWZpeCwgdGhlbiAKKyAgICAgIGxvb2t1cE5hbWVzcGFjZVVSSSByZXR1
cm5zIHRoZSBzYW1lIHZhbHVlIGFzIEVsZW1lbnQubmFtZXNwYWNlVVJJCisgICAgCisqIEBhdXRo
b3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2
ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVy
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXItbG9va3VwTmFtZXNwYWNlVVJJCisqLworZnVu
Y3Rpb24gWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aE5T
UmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeCIpICE9IG51bGwpIHJldHVybjsKKyAg
ICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAg
ICAgIHZhciBlbGVtZW50OworICAgICAgdmFyIGVsZW1lbnRzOworICAgICAgdmFyIGxvb2t1cE5h
bWVzcGFjZVVSSTsKKyAgICAgIHZhciBuYW1lc3BhY2VVUkk7CisgICAgICB2YXIgcHJlZml4Owor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgZWxl
bWVudHMgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsIioiKTsKKyAgICAgIGV2YWx1
YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Citmb3IodmFyIGluZGV4TjY1NjMxID0g
MDtpbmRleE42NTYzMSA8IGVsZW1lbnRzLmxlbmd0aDsgaW5kZXhONjU2MzErKykgeworICAgICAg
ZWxlbWVudCA9IGVsZW1lbnRzLml0ZW0oaW5kZXhONjU2MzEpOworICAgICAgcHJlZml4ID0gZWxl
bWVudC5wcmVmaXg7CisKKyAgICAgIAorCWlmKAorCQorCShwcmVmaXggIT0gbnVsbCkKKworCSkg
eworCXJlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZWxlbWVudCk7CisgICAg
ICBuYW1lc3BhY2VVUkkgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSTsKKworICAgICAgbG9va3VwTmFt
ZXNwYWNlVVJJID0gcmVzb2x2ZXIubG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCk7CisgICAgICBh
c3NlcnRFcXVhbHMoImVxdWFsIixsb29rdXBOYW1lc3BhY2VVUkksbmFtZXNwYWNlVVJJKTsKKyAg
ICAgICAKKwl9CisJCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBYUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeCgpOworfQpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X2RvY3VtZW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQuc3ZnCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX2RvY3VtZW50LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMg
IlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAg
PCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4
YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54
eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0K
KyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBu
b3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5v
dGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2Fy
ZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0K
KyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFF
TEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95
ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93
d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+
DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0
aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2Eu
Y29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJn
YXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAg
ICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUu
IERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3ll
ZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtU
aGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQy
O11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSBy
ZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5
PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMi
PiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25l
czwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmlu
ZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUg
eG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRh
dmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4N
CisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVy
c29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2Vt
cDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFk
ZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFE
QSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1Njwv
ZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVy
IFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRw
Oi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFU
RV9FUlItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWlu
ZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0g
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBd
fV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4w
MCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOTB4MTgKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTA6ICJYUGF0aFJlc3VsdF9pdGVyYXRlTmV4dF9JTlZB
TElEX1NUQVRFX0VSUjogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL0NvbmZvcm1hbmNlX0V4cHJlc3Npb25zLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9FeHByZXNzaW9ucy5zdmcJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9FeHByZXNzaW9ucy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElD
ICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAg
IDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRl
eGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cu
eHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4N
CisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEg
bm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBu
b3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2Nh
cmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4N
CisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwh
RUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxv
eWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQor
ICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBD
REFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1F
TlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1Q
TElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8v
d3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQ29u
Zm9ybWFuY2VfRXhwcmVzc2lvbnMuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywg
VGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpk
bXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEg
Q0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwh
W0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4N
CisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4x
MDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMg
OTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1w
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29t
IiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpu
YW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERp
cmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+
DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1w
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxv
Y2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJl
c3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxp
c3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5p
c3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0g
InN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQy
ICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFF
TlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRF
bGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJl
bnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50
MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3Rh
dGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBT
WVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFU
QSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+
DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFF
TEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAj
UkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2Ny
aXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4g
ICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAg
PHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1
MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRB
W1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVu
dDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBh
IHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRh
cnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVu
dDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2
ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5h
bWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2Vy
PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50
NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJv
eCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
MS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9z
aXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dl
bmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291
dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0
PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8
L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2
aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExl
bmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5zdmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZ
U1RFTSAic3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZ
IGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisg
ICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJM
SUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5z
IENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95
ZWUrKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1w
bG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9u
YW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8
c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxh
ZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUx
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFb
VGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50
MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEg
cmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFy
eTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50
MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0
OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94
IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5K
ZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9wb3Np
dGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0
aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2
ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5h
bWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZp
bmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRl
X1dST05HX0RPQ1VNRU5UX0VSUi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9D
VU1FTlRfRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VS
Ui1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisg
ICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtD
YW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElE
XSBbY29sb3I9I0ZGRkYwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAs
MTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDAp
IHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDQ3
NngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ3NjogIlRlc3RzIHdpdGgg
bXVsdGlwbGUgbG9hZHMgb2YgZGlmZmVyZW50IGRvY3VtZW50cyBhcmUgbm90IGN1cnJlbnRseSBz
dXBwb3J0ZWQiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgx
OAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzNzJ4MTgKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNzI6ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9XUk9OR19ET0NVTUVOVF9FUlIiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9FbGVtZW50X05vZGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0VsZW1lbnRfTm9kZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9FbGVtZW50X05vZGVzLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0NCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUg
V2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ks
IEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhl
bWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29y
ayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBp
biB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93
d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEy
MzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9z
ZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ0VsZW1lbnRfTm9kZXMnXTsKK30KKwor
dmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8v
ICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9y
ZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJl
IG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9j
dW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAg
ICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5Cisv
LyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLwor
ZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOwor
ICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRl
ciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29u
ZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAg
IHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2Nz
TG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAg
ICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxl
dGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRp
b25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21w
bGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRV
cFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQg
aGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2gg
YWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVu
Y3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAg
ICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyog
CisgICAgICAxLjIuMS0gRWxlbWVudCBOb2RlcyAtIEV2YWx1YXRlIC9zdGFmZi9lbXBsb3llZSwK
KyAgICAgIGNoZWNrIHRoYXQgZWFjaCBtYXRjaGluZyBOb2RlIGluIHRoZSByZXN1bHQgCisgICAg
ICBpcyBhbiBFbGVtZW50LgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
TWFwcGluZworKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMt
WFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZh
bHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1
YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVy
CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0y
MDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1pdGVyYXRlTmV4dAorKi8KK2Z1bmN0aW9uIEVsZW1l
bnRfTm9kZXMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9u
KGJ1aWxkZXIsICJFbGVtZW50X05vZGVzIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllf
VFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19U
WVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRP
Ul9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsK
KyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5Z
X1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9U
WVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIg
ZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0g
bnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNz
aW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7
CisgICAgICB2YXIgb3V0Tm9kZTsKKyAgICAgIHZhciBub2RlVHlwZTsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVY
UGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZl
cihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9y
LmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVz
dWx0KTsKKyAgICAgIG91dE5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIAor
ICAgIHdoaWxlKAorCQorCShvdXROb2RlICE9IG51bGwpCisKKwkpIHsKKwlub2RlVHlwZSA9IG91
dE5vZGUubm9kZVR5cGU7CisKKyAgICAgIGFzc2VydEVxdWFscygiUzEuMi4xLUVsZW1lbnQtTm9k
ZXMtbm9kZVR5cGUiLDEsbm9kZVR5cGUpOworICAgICAgIG91dE5vZGUgPSBvdXRyZXN1bHQuaXRl
cmF0ZU5leHQoKTsKKyAgICAgIAorCX0KKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgRWxlbWVudF9Ob2RlcygpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAy
LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDIuc3ZnCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
Y3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAyLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQor
PCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/
UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkki
ICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMg
InVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVu
dGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJM
SUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90
YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSss
IGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHht
bG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFt
ZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJ
U1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJ
UkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNS
RVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNj
cmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1l
bnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFD
RV9FUlJfMDIuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5p
c3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlk
PkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQor
ICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+
NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8
L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDov
L3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9u
IHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMg
aXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRh
YjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxh
cnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQz
Ow0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRt
c3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlv
bj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0
aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3
Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6
ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nv
bm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6
cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdl
bmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZ
ZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+
MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1w
OmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxl
cyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0
IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIx
IE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
Q29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlXzMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFz
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyMzZ4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAyMzY6ICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzM6IFN1Y2Nlc3MiCkluZGV4OiBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHBy
ZXNzaW9uX25vX05TLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUg
c3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEg
ImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElU
WSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxv
Y2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQ
SWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZp
bGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmls
ZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3Vs
ZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRp
b24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxl
Ij4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxv
eWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEg
I0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJ
TVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0K
KyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0K
KyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUg
Q0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIg
MS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlz
dD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVp
Z2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
IiBzcmM9IlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMuanMiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMi
Lz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0i
aHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFu
dDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+
MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9s
ZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNl
IG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFT
ZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9z
aXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHpl
cm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0
OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+
UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQor
IDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0i
aHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9l
bXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxl
bXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNh
bGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5k
ZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIg
ZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFz
LCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95
ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZ
ZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5n
IFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRl
RXhwcmVzc2lvbl9JTlZBTElEX0VYUFJFU1NJT05fRVJSLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9J
TlZBTElEX0VYUFJFU1NJT05fRVJSLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2
ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJl
cyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkg
ZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2Nh
bDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElk
YXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxl
IiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUi
IE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQg
YmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9u
MUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+
DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3ll
ZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNG
SVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1Q
TElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisg
ICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAg
d2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisg
IDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENE
QVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEu
LS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9
Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdo
dD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
c3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9F
UlIuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
cmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51
c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGgg
RW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4g
YWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48
L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1z
dGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5
ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJo
dHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxv
eWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBh
cnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3Qu
Z292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95
ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwv
bm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRp
b24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5G
ZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0
cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291
dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxv
eWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJz
PC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRp
Yy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
dmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9OX0VSUi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9OX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9l
dmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2Fu
dmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQg
KDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6
ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0w
LjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBS
ZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0NDJ4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCA0NDI6ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJ
T05fRVJSOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhSZXN1bHRfVFlQRV9FUlIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfVFlQRV9FUlIuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MjQgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJl
c3VsdF9UWVBFX0VSUiddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1
aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUg
dGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUu
CisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3lu
Y2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndp
c2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNl
cHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUg
Ym9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBh
Z2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0
ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisg
ICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9h
ZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlw
ZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRv
YzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsK
KyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25v
dXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNo
cm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBz
dGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRl
c3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsr
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7
CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhbiBYUGF0aFJlc3VsdCBmb3Ig
dGhlIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlCisgICAgICBmb3IgZWFjaCB0eXBlIG9mIFhQ
YXRoUmVzdWx0VHlwZSwgY2hlY2tpbmcgdGhhdCBUWVBFX0VSUgorICAgICAgaXMgdGhyb3duIHdo
ZW4gaW5hcHByb3ByaWF0ZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGFyZSBhY2Nlc3NlZC4KKyAg
ICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1RZUEVfRVJSCisqIEBzZWUgaHR0
cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0
aCNYUGF0aEV4Y2VwdGlvbgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZl
cgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtcmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhS
ZXN1bHQtYm9vbGVhblZhbHVlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1udW1iZXJWYWx1ZQor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAw
MzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtc2luZ2xlTm9kZVZhbHVlCisqIEBzZWUgaHR0cDovL3d3
dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0
aFJlc3VsdC1zbmFwc2hvdC1sZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXN0cmluZ1Zh
bHVlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1pdGVyYXRlTmV4dAorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhSZXN1bHQtc25hcHNob3RJdGVtCisqLworZnVuY3Rpb24gWFBhdGhSZXN1bHRfVFlQRV9FUlIo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJYUGF0aFJlc3VsdF9UWVBFX0VSUiIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBleHBy
ZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAg
ICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKwor
ICAgICAgdmFyIGluTm9kZVR5cGU7CisgICAgICB2YXIgb3V0Tm9kZVR5cGU7CisgICAgICB2YXIg
QU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJ
TkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9
IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFy
IEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05P
REVfVFlQRSA9IDk7CisgICAgICB2YXIgYm9vbGVhblZhbHVlOworICAgICAgdmFyIHNob3J0VmFs
dWU7CisgICAgICB2YXIgaW50VmFsdWU7CisgICAgICB2YXIgZG91YmxlVmFsdWU7CisgICAgICB2
YXIgbm9kZVZhbHVlOworICAgICAgdmFyIHN0cmluZ1ZhbHVlOworICAgICAgbm9kZVR5cGVMaXN0
ID0gbmV3IEFycmF5KCk7CisgICAgICBub2RlVHlwZUxpc3RbMF0gPSAwOworICAgICAgbm9kZVR5
cGVMaXN0WzFdID0gMTsKKyAgICAgIG5vZGVUeXBlTGlzdFsyXSA9IDI7CisgICAgICBub2RlVHlw
ZUxpc3RbM10gPSAzOworICAgICAgbm9kZVR5cGVMaXN0WzRdID0gNDsKKyAgICAgIG5vZGVUeXBl
TGlzdFs1XSA9IDU7CisgICAgICBub2RlVHlwZUxpc3RbNl0gPSA2OworICAgICAgbm9kZVR5cGVM
aXN0WzddID0gNzsKKyAgICAgIG5vZGVUeXBlTGlzdFs4XSA9IDg7CisgICAgICBub2RlVHlwZUxp
c3RbOV0gPSA5OworCisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYg
KHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhp
cy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVy
ID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0g
IGRvYzsKK2Zvcih2YXIgaW5kZXhONjU3NzggPSAwO2luZGV4TjY1Nzc4IDwgbm9kZVR5cGVMaXN0
Lmxlbmd0aDsgaW5kZXhONjU3NzgrKykgeworICAgICAgaW5Ob2RlVHlwZSA9IG5vZGVUeXBlTGlz
dFtpbmRleE42NTc3OF07CisgICAgICBvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhw
cmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcixpbk5vZGVUeXBlLGlucmVzdWx0KTsKKyAgICAg
IG91dE5vZGVUeXBlID0gb3V0cmVzdWx0LnJlc3VsdFR5cGU7CisKKyAgICAgIAorCWlmKAorCShv
dXROb2RlVHlwZSA9PSBOVU1CRVJfVFlQRSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nlc3MgPSBmYWxz
ZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGJvb2xlYW5WYWx1ZSA9IG91dHJlc3VsdC5ib29sZWFu
VmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3Vj
Y2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7
CisJCX0KKwkJYXNzZXJ0VHJ1ZSgibnVtYmVyX2Jvb2xlYW5WYWx1ZV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBu
b2RlVmFsdWUgPSBvdXRyZXN1bHQuc2luZ2xlTm9kZVZhbHVlOworCisgICAgICAgIH0KKwkJY2F0
Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9
ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm51bWJl
cl9zaW5nbGVOb2RlVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2Vz
cyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgaW50VmFsdWUgPSBvdXRyZXN1bHQuc25h
cHNob3RMZW5ndGg7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAg
ICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9
PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgibnVtYmVyX3NuYXBzaG90TGVuZ3RoX1RZUEVfRVJS
IixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAg
ICAgICAgIHN0cmluZ1ZhbHVlID0gb3V0cmVzdWx0LnN0cmluZ1ZhbHVlOworCisgICAgICAgIH0K
KwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNv
ZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUo
Im51bWJlcl9zdHJpbmdWYWx1ZV9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNj
ZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBub2RlVmFsdWUgPSBvdXRyZXN1bHQu
aXRlcmF0ZU5leHQoKTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAg
ICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9
PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgibnVtYmVyX2l0ZXJhdGVOZXh0X1RZUEVfRVJSIixz
dWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAg
ICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdEl0ZW0oMCk7CisgICAgICAgIH0KKwkJ
Y2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUp
ICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm51
bWJlcl9zbmFwc2hvdEl0ZW1fVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCX0KKwkKKwlpZigK
Kwkob3V0Tm9kZVR5cGUgPT0gU1RSSU5HX1RZUEUpCisJKSB7CisJCisJeworCQlzdWNjZXNzID0g
ZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBib29sZWFuVmFsdWUgPSBvdXRyZXN1bHQuYm9v
bGVhblZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAg
IHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0g
NTIpOworCQl9CisJCWFzc2VydFRydWUoInN0cmluZ19ib29sZWFuVmFsdWVfVFlQRV9FUlIiLHN1
Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAg
ICAgZG91YmxlVmFsdWUgPSBvdXRyZXN1bHQubnVtYmVyVmFsdWU7CisKKyAgICAgICAgfQorCQlj
YXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkg
IT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgic3Ry
aW5nX251bWJlclZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3Mg
PSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5zaW5n
bGVOb2RlVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAg
ICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9
PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgic3RyaW5nX3NpbmdsZU5vZGVWYWx1ZV9UWVBFX0VS
UiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAg
ICAgICAgICBpbnRWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJzdHJpbmdfc25hcHNob3RMZW5ndGhfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJ
c3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVz
dWx0Lml0ZXJhdGVOZXh0KCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAK
KyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNv
ZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoInN0cmluZ19pdGVyYXRlTmV4dF9UWVBFX0VS
UiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAg
ICAgICAgICBub2RlVmFsdWUgPSBvdXRyZXN1bHQuc25hcHNob3RJdGVtKDApOworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJzdHJpbmdfc25hcHNob3RJdGVtX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl9CisJCisJ
aWYoCisJKG91dE5vZGVUeXBlID09IEJPT0xFQU5fVFlQRSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nl
c3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gb3V0cmVzdWx0
Lm51bWJlclZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAg
ICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUg
PT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImJvb2xlYW5fbnVtYmVyVmFsdWVfVFlQRV9FUlIi
LHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAg
ICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNpbmdsZU5vZGVWYWx1ZTsKKworICAgICAgICB9
CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5j
b2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVl
KCJib29sZWFuX3NpbmdsZU5vZGVWYWx1ZV9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJewor
CQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBpbnRWYWx1ZSA9IG91dHJl
c3VsdC5zbmFwc2hvdExlbmd0aDsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAg
ICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBl
eC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJib29sZWFuX3NuYXBzaG90TGVuZ3Ro
X1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5
IHsKKyAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gb3V0cmVzdWx0LnN0cmluZ1ZhbHVlOworCisg
ICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlw
ZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFz
c2VydFRydWUoImJvb2xlYW5fc3RyaW5nVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKwor
CXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0g
b3V0cmVzdWx0Lml0ZXJhdGVOZXh0KCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAg
ICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYm
IGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImJvb2xlYW5faXRlcmF0ZU5leHRf
VFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkg
eworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNuYXBzaG90SXRlbSgwKTsKKyAg
ICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBl
b2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNz
ZXJ0VHJ1ZSgiYm9vbGVhbl9zbmFwc2hvdEl0ZW1fVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKwor
CX0KKwkKKwlpZigKKwkob3V0Tm9kZVR5cGUgPT0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAg
IGJvb2xlYW5WYWx1ZSA9IG91dHJlc3VsdC5ib29sZWFuVmFsdWU7CisKKyAgICAgICAgfQorCQlj
YXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkg
IT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5v
cmRlcmVkX25vZGVfaXRlcmF0b3JfYm9vbGVhblZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9
CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGRvdWJsZVZh
bHVlID0gb3V0cmVzdWx0Lm51bWJlclZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsg
ICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmlu
ZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2Rl
X2l0ZXJhdG9yX251bWJlclZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1
Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3Vs
dC5zaW5nbGVOb2RlVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAg
IAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXgu
Y29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5vcmRlcmVkX25vZGVfaXRlcmF0b3Jf
c2luZ2xlTm9kZVZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3Mg
PSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludFZhbHVlID0gb3V0cmVzdWx0LnNuYXBz
aG90TGVuZ3RoOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAg
IHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0g
NTIpOworCQl9CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3NuYXBzaG90
TGVuZ3RoX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsK
KwkJdHJ5IHsKKyAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gb3V0cmVzdWx0LnN0cmluZ1ZhbHVl
OworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3Mg
PSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9
CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3N0cmluZ1ZhbHVlX1RZUEVf
RVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAg
ICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdEl0ZW0oMCk7CisgICAgICAg
IH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4
LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRy
dWUoInVub3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3NuYXBzaG90SXRlbV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJfQorCQorCWlmKAorCShvdXROb2RlVHlwZSA9PSBPUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSkKKwkpIHsKKwkKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAg
ICAgICAgICAgIGJvb2xlYW5WYWx1ZSA9IG91dHJlc3VsdC5ib29sZWFuVmFsdWU7CisKKyAgICAg
ICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2Yo
ZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0
VHJ1ZSgib3JkZXJlZF9ub2RlX2l0ZXJhdG9yX2Jvb2xlYW5WYWx1ZV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBk
b3VibGVWYWx1ZSA9IG91dHJlc3VsdC5udW1iZXJWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNo
KGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAn
dW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVk
X25vZGVfaXRlcmF0b3JfbnVtYmVyVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsK
KwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0
cmVzdWx0LnNpbmdsZU5vZGVWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAg
ICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAm
JiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfaXRlcmF0
b3Jfc2luZ2xlTm9kZVZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nl
c3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludFZhbHVlID0gb3V0cmVzdWx0LnNu
YXBzaG90TGVuZ3RoOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAg
ICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUg
PT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm9yZGVyZWRfbm9kZV9pdGVyYXRvcl9zbmFwc2hv
dExlbmd0aF9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7
CisJCXRyeSB7CisgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IG91dHJlc3VsdC5zdHJpbmdWYWx1
ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNz
ID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJ
fQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfaXRlcmF0b3Jfc3RyaW5nVmFsdWVfVFlQRV9F
UlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAg
ICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNuYXBzaG90SXRlbSgwKTsKKyAgICAgICAg
fQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXgu
Y29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1
ZSgib3JkZXJlZF9ub2RlX2l0ZXJhdG9yX3NuYXBzaG90SXRlbV9UWVBFX0VSUiIsc3VjY2Vzcyk7
CisJfQorCisJfQorCQorCWlmKAorCShvdXROb2RlVHlwZSA9PSBVTk9SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFKQorCSkgeworCQorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAg
ICAgICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVzdWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAg
ICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihl
eC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRU
cnVlKCJ1bm9yZGVyZWRfbm9kZV9zbmFwc2hvdF9ib29sZWFuVmFsdWVfVFlQRV9FUlIiLHN1Y2Nl
c3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAg
ZG91YmxlVmFsdWUgPSBvdXRyZXN1bHQubnVtYmVyVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRj
aChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0g
J3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5vcmRl
cmVkX25vZGVfc25hcHNob3RfbnVtYmVyVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKwor
CXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0g
b3V0cmVzdWx0LnNpbmdsZU5vZGVWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAg
ICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVk
JyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ1bm9yZGVyZWRfbm9kZV9z
bmFwc2hvdF9zaW5nbGVOb2RlVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJ
c3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBvdXRy
ZXN1bHQuc3RyaW5nVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAg
IAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXgu
Y29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidW5vcmRlcmVkX25vZGVfc25hcHNob3Rf
c3RyaW5nVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZh
bHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0Lml0ZXJhdGVO
ZXh0KCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nl
c3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOwor
CQl9CisJCWFzc2VydFRydWUoInVub3JkZXJlZF9ub2RlX3NuYXBzaG90X2l0ZXJhdGVOZXh0X1RZ
UEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl9CisJCisJaWYoCisJKG91dE5vZGVUeXBlID09IE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKQorCSkgeworCQorCXsKKwkJc3VjY2VzcyA9IGZhbHNl
OworCQl0cnkgeworICAgICAgICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVzdWx0LmJvb2xlYW5W
YWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNj
ZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsK
KwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfc25hcHNob3RfYm9vbGVhblZhbHVlX1RZ
UEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsK
KyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gb3V0cmVzdWx0Lm51bWJlclZhbHVlOworCisgICAg
ICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9m
KGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2Vy
dFRydWUoIm9yZGVyZWRfbm9kZV9zbmFwc2hvdF9udW1iZXJWYWx1ZV9UWVBFX0VSUiIsc3VjY2Vz
cyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBu
b2RlVmFsdWUgPSBvdXRyZXN1bHQuc2luZ2xlTm9kZVZhbHVlOworCisgICAgICAgIH0KKwkJY2F0
Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9
ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoIm9yZGVy
ZWRfbm9kZV9zbmFwc2hvdF9zaW5nbGVOb2RlVmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0K
KworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgc3RyaW5nVmFs
dWUgPSBvdXRyZXN1bHQuc3RyaW5nVmFsdWU7CisKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAg
ICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5l
ZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgib3JkZXJlZF9ub2RlX3Nu
YXBzaG90X3N0cmluZ1ZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1Y2Nl
c3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9IG91dHJlc3VsdC5p
dGVyYXRlTmV4dCgpOworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAg
ICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09
IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJvcmRlcmVkX25vZGVfc25hcHNob3RfaXRlcmF0ZU5l
eHRfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCX0KKwkKKwlpZigKKwkob3V0Tm9kZVR5cGUg
PT0gQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUpCisJKSB7CisJCisJeworCQlzdWNjZXNzID0gZmFs
c2U7CisJCXRyeSB7CisgICAgICAgICAgICBib29sZWFuVmFsdWUgPSBvdXRyZXN1bHQuYm9vbGVh
blZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1
Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIp
OworCQl9CisJCWFzc2VydFRydWUoImFueV91bm9yZGVyZWRfbm9kZV9ib29sZWFuVmFsdWVfVFlQ
RV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgewor
ICAgICAgICAgICAgZG91YmxlVmFsdWUgPSBvdXRyZXN1bHQubnVtYmVyVmFsdWU7CisKKyAgICAg
ICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2Yo
ZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0
VHJ1ZSgiYW55X3Vub3JkZXJlZF9ub2RlX251bWJlclZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsK
Kwl9CisKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGludFZh
bHVlID0gb3V0cmVzdWx0LnNuYXBzaG90TGVuZ3RoOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgp
IHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRl
ZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImFueV91bm9yZGVy
ZWRfbm9kZV9zbmFwc2hvdExlbmd0aF9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlz
dWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IG91dHJl
c3VsdC5zdHJpbmdWYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAg
CisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5j
b2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJhbnlfdW5vcmRlcmVkX25vZGVfc3RyaW5n
VmFsdWVfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOwor
CQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0Lml0ZXJhdGVOZXh0KCk7
CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAKKyAgICAgIHN1Y2Nlc3MgPSAo
dHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNTIpOworCQl9CisJ
CWFzc2VydFRydWUoImFueV91bm9yZGVyZWRfbm9kZV9pdGVyYXRlTmV4dF9UWVBFX0VSUiIsc3Vj
Y2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAg
ICBub2RlVmFsdWUgPSBvdXRyZXN1bHQuc25hcHNob3RJdGVtKDApOworICAgICAgICB9CisJCWNh
dGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAh
PSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJhbnlf
dW5vcmRlcmVkX25vZGVfc25hcHNob3RJdGVtX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl9
CisJCisJaWYoCisJKG91dE5vZGVUeXBlID09IEZJUlNUX09SREVSRURfTk9ERV9UWVBFKQorCSkg
eworCQorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgYm9vbGVh
blZhbHVlID0gb3V0cmVzdWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAgICB9CisJCWNhdGNoKGV4
KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5k
ZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJmaXJzdF9vcmRl
cmVkX25vZGVfYm9vbGVhblZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisKKwl7CisJCXN1
Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlID0gb3V0cmVz
dWx0Lm51bWJlclZhbHVlOworCisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsgICAgICAgICAgICAK
KyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNv
ZGUgPT0gNTIpOworCQl9CisJCWFzc2VydFRydWUoImZpcnN0X29yZGVyZWRfbm9kZV9udW1iZXJW
YWx1ZV9UWVBFX0VSUiIsc3VjY2Vzcyk7CisJfQorCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJ
CXRyeSB7CisgICAgICAgICAgICBpbnRWYWx1ZSA9IG91dHJlc3VsdC5zbmFwc2hvdExlbmd0aDsK
KworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAgICAgICAgCisgICAgICBzdWNjZXNzID0g
KHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAmJiBleC5jb2RlID09IDUyKTsKKwkJfQor
CQlhc3NlcnRUcnVlKCJmaXJzdF9vcmRlcmVkX25vZGVfc25hcHNob3RMZW5ndGhfVFlQRV9FUlIi
LHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAg
ICAgICAgc3RyaW5nVmFsdWUgPSBvdXRyZXN1bHQuc3RyaW5nVmFsdWU7CisKKyAgICAgICAgfQor
CQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29k
ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgi
Zmlyc3Rfb3JkZXJlZF9ub2RlX3N0cmluZ1ZhbHVlX1RZUEVfRVJSIixzdWNjZXNzKTsKKwl9CisK
Kwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIG5vZGVWYWx1ZSA9
IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgICB9CisJCWNhdGNoKGV4KSB7ICAgICAg
ICAgICAgCisgICAgICBzdWNjZXNzID0gKHR5cGVvZihleC5jb2RlKSAhPSAndW5kZWZpbmVkJyAm
JiBleC5jb2RlID09IDUyKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJmaXJzdF9vcmRlcmVkX25vZGVf
aXRlcmF0ZU5leHRfVFlQRV9FUlIiLHN1Y2Nlc3MpOworCX0KKworCXsKKwkJc3VjY2VzcyA9IGZh
bHNlOworCQl0cnkgeworICAgICAgICAgICAgbm9kZVZhbHVlID0gb3V0cmVzdWx0LnNuYXBzaG90
SXRlbSgwKTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeyAgICAgICAgICAgIAorICAgICAgc3Vj
Y2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA1Mik7
CisJCX0KKwkJYXNzZXJ0VHJ1ZSgiZmlyc3Rfb3JkZXJlZF9ub2RlX3NuYXBzaG90SXRlbV9UWVBF
X0VSUiIsc3VjY2Vzcyk7CisJfQorCisJfQorCQorCX0KKyAgIAorfQorCisKKworCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfVFlQRV9FUlIoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3Vt
ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNp
emUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEw
MCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAw
TDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZH
VGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMjg5eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggMjg5OiAiWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnQ6IFN1Y2Nlc3MiCkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVO
U1Jlc29sdmVyX2RvY3VtZW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50LnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
RXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4N
Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwh
RU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4N
CisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1l
bnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+
PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVS
SSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJ
QyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMg
ZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBV
QkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJu
b3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVl
KywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAg
eG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBu
YW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRU
TElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEg
I1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qg
c2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29t
bWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1l
bnQuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBz
cmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51
c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGgg
RW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4g
YWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48
L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1z
dGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5
ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJo
dHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00t
VGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxv
eWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBh
cnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3Qu
Z292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95
ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwv
bm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRp
b24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5G
ZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0
cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291
dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxv
eWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJz
PC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRp
Yy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9FUlIuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lO
VkFMSURfU1RBVEVfRVJSLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdGVOZXh0X0lOVkFMSURfU1RBVEVfRVJSLnN2
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9U
RVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0K
KyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBS
b2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVu
dEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJn
ZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRp
dHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkg
c2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJu
b3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9u
MkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNU
IHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1Q
VFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4N
CisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwh
LS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEw
MCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0i
WFBhdGhSZXN1bHRfaXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9FUlIuanMiLz4NCis8c2NyaXB0
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9w
b3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRo
IEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRp
dHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGph
Y2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9z
aXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVz
Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52
YWxpZEl0ZXJhdG9yU3RhdGVfQk9PTEVBTl9UWVBFLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfQk9PTEVBTl9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorCisvKgor
Q29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1h
c3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENv
bnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNp
dHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAor
dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0v
TGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3Nl
IHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkK
K3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5fVFlQ
RSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxs
OworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFt
ZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJ
ZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8v
ICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0
dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1t
ZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUg
dGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAn
cnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1
bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIg
PSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAg
ICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9j
KSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0K
KyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFn
ZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJ
bml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2Nv
bXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
b24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFy
dGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRl
ZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hh
bmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhl
Y3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhIEJPT0xFQU5fVFlQRSBYUGF0aFJlc3VsdCBtYXRj
aGluZyAvc3RhZmYvZW1wbG95ZWUsCisgICAgICBtb2RpZnkgdGhlIERvY3VtZW50LCB0aGVuIGNo
ZWNrIHRoYXQgaXRlcmF0b3IgWFBhdGhSZXN1bHRzCisgICAgICBhcmUgbm90IGludmFsaWRhdGVk
IFhQYXRoUmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlID09IGZhbHNlLgorICAgIAorKiBAYXV0
aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxl
dmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9y
LWV2YWx1YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwt
My1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
UmVzdWx0LWludmFsaWQtaXRlcmF0b3Itc3RhdGUKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUoKSB7CisgICB2YXIgc3VjY2VzczsKKyAg
ICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRl
cmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9U
WVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZ
UEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2Owor
ICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllf
VU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZ
UEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBl
dmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBu
dWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Np
b24gPSAiL3N0YWZmL2VtcGxveWVlIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBCT09MRUFOX1RZ
UEU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAgIHZh
ciBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7
CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBk
b2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9j
IiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29u
dGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Np
b24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0Vs
ZW1lbnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVh
dGVFbGVtZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVu
ZENoaWxkKGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0
LmludmFsaWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFs
aWRJdGVyYXRvclN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
WFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQk9PTEVBTl9UWVBFKCk7Cit9CkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9kb2N1bWVudEVsZW1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFs
dWF0b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExMiBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENv
bnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9w
ZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNz
LCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBk
aXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUg
Citob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMu
b3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyov
CisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RG
dW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3Vt
ZW50RWxlbWVudCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxk
ZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVz
dGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisv
LworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hy
b25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2Us
IHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRp
b24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9k
eSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VT
dGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMg
dGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAg
IGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVk
ID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsK
KyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAg
ICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgewor
ICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRV
cFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91
cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hy
b25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0
YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVz
dCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsK
KyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIFhQYXRoRXZh
bHVhdG9yIG9uIHdoaWNoIHRoZQorICAgICAgImV2YWx1YXRlKCIvIiwgZG9jdW1lbnRFbGVtZW50
LCBudWxsLCAwLCBudWxsKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aGUgZG9jdW1lbnQKKyAg
ICAgIGVsZW1lbnQuIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBYUGF0aFJlc3VsdC4KKyAg
ICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFs
dWF0b3ItZXZhbHVhdGUKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1
bWVudEVsZW1lbnQoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0
aW9uKGJ1aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQiKSAh
PSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAg
ICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciByb290OworICAgICAg
dmFyIHJlc3VsdDsKKyAgICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgCisgICAg
ICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9j
ID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBj
cmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CisK
KyAgICAgIHJlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRlKCIvIixyb290LG51bGxOU1Jlc29s
dmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJub3RudWxsIixyZXN1bHQp
OworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9l
dmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5cGUuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Jlc3VsdFR5cGUuc3Zn
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfcmVzdWx0VHlwZS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lT
VEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkg
ZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAg
IDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwv
ZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJ
QyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZ
IGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04g
bm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMg
Q0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3ll
ZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAg
IDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFU
QSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5U
IHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJ
RUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X3Jlc3VsdFR5cGUuanMiLz4NCis8c2NyaXB0
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9w
b3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRo
IEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRp
dHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGph
Y2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9z
aXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMi
IHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVz
Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9zdHJpbmdWYWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zdHJpbmdWYWx1ZS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmlu
Z1ZhbHVlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorCisvKgorQ29weXJpZ2h0
IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0
dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0g
Citmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwg
CitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzND
w4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxp
ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAw
Mi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVu
Y3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVy
biBbJ1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEw
MDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0
aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4
Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3Rh
cnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0
ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVu
IGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgp
IHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisg
ICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRp
b24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisK
KyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsK
KyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRv
Y1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRv
Y1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAg
fSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgp
OworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisv
LyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAg
ZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdo
ZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAg
ICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAg
Ym9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgp
IHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVz
ID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBYUGF0
aFJlc3VsdCBTVFJJTkdfVkFMVUUgWFBhdGhSZXN1bHRUeXBlIGZvciBleHByZXNzaW9uCisgICAg
L3N0YWZmL2VtcGxveWVlL3NhbGFyeVt0ZXh0KCk9JzU2LDAwMCddIGNoZWNraW5nIHRoYXQgdGhl
IAorICAgIFhQYXRoUmVzdWx0LnN0cmluZ1ZhbHVlID09ICI1NiwwMDAiCisgICAgCisqIEBhdXRo
b3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2
ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zdHJpbmdWYWx1ZQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVz
dWx0X3N0cmluZ1ZhbHVlKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFs
aXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUiKSAhPSBudWxsKSByZXR1
cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7Cisg
ICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7Cisg
ICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0g
NzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklS
U1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNv
bHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAg
ICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKwor
ICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL3NhbGFyeVt0ZXh0KCk9JzU2
LDAwMCddIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBTVFJJTkdfVFlQRTsKKyAgICAgIHZhciBz
dHJpbmdWYWx1ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7
CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIg
PSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAg
ZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5v
ZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIHN0cmluZ1ZhbHVlID0gb3V0
cmVzdWx0LnN0cmluZ1ZhbHVlOworCisgICAgICBhc3NlcnRFcXVhbHMoInNhbWUiLCI1NiwwMDAi
LHN0cmluZ1ZhbHVlKTsKKyAgICAgICAKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgIFhQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCww
KSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEw
MHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAs
MC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRl
clNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMyN3gxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDMyNzogIlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fbm9fTlM6IFN1Y2Nl
c3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRv
cl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9j
dW1lbnQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50LmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwOCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxk
IFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hu
b2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5k
IE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRo
aXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNl
IFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0
dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUt
MjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9u
IGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2Ny
ZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAw
MDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0
ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0
aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVk
LiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFu
ZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50
ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgewor
ICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAg
Ly8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgor
ICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAg
ICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAg
ICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVm
ID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVm
LCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0g
MSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0g
Y2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsK
KyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8g
ICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVh
Y2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVu
IGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAg
ICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJv
ZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7
CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9
ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2YWx1
YXRvciBjYW4gY3JlYXRlICJYUGF0aE5TUmVzb2x2ZXIiIHVzaW5nIHRoZSBtZXRob2QKKyAgICAg
ICJjcmVhdGVOU1Jlc29sdmVyKG5vZGVSZXNvbHZlcikiLgorICAgICAgCisgICAgICBSZXRyaWV2
ZSB0aGUgRE9NIGRvY3VtZW50IG9uIHdoaWNoIHRoZQorICAgICAgImNyZWF0ZU5TUmVzb2x2ZXIo
bm9kZVJlc29sdmVyKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aGUgZG9jdW1lbnQKKyAgICAg
IGl0c2VsZi4gVGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgcmVzb2x2ZXIuCisgICAgCisqIEBh
dXRob3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNy
ZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29s
dmVyX2RvY3VtZW50KCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXph
dGlvbihidWlsZGVyLCAiWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudCIp
ICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAg
ICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1Jl
ZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSB4cEV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBh
c3NlcnROb3ROdWxsKCJub3RudWxsIixyZXNvbHZlcik7CisKK30KKworCisKKworZnVuY3Rpb24g
cnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQo
KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNv
bHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklf
eG1sLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV94bWwuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE5IEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lk
ZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9n
eSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0
aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3
b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFd
IGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDov
L3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAy
MTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhw
b3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhOU1Jlc29sdmVyX2xvb2t1
cE5hbWVzcGFjZVVSSV94bWwnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3Zh
ciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkg
dGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1
aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywg
YXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3Ro
ZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUg
ZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcg
dGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0
VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBj
cmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAv
LworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9j
c0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYg
KHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhp
cy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9j
IiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgewor
ICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2go
ZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAg
ICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5
Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5
IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUg
cGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2Yg
dGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAg
aWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21w
bGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIEl0ZXJhdGUgb3ZlciBhbGwgZWxl
bWVudHMgaW4gdGhlIHRlc3QgZG9jdW1lbnQsIGNyZWF0aW5nCisgICAgICBuc3Jlc29sdmVycyBj
aGVja2luZyB0aGF0IGxvb2tpbmcgdXAgdGhlIHhtbCBwcmVmaXggcmV0dXJucworICAgICAgaHR0
cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLgorICAgIAorKiBAYXV0aG9yIEJvYiBD
bGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVh
dG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NS
LURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhOU1Jlc29sdmVyLWxvb2t1cE5hbWVzcGFjZVVSSQorKi8KK2Z1bmN0aW9uIFhQ
YXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sKCkgeworICAgdmFyIHN1Y2Nlc3M7
CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhOU1Jlc29sdmVyX2xv
b2t1cE5hbWVzcGFjZVVSSV94bWwiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAg
ICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgZWxlbWVu
dDsKKyAgICAgIHZhciBlbGVtZW50czsKKyAgICAgIHZhciBsb29rdXBOYW1lc3BhY2VVUkk7Cisg
ICAgICB2YXIgbmFtZXNwYWNlVVJJOworICAgICAgdmFyIHByZWZpeDsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgIGVsZW1lbnRzID0gZG9jLmdl
dEVsZW1lbnRzQnlUYWdOYW1lTlMoIioiLCIqIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVY
UGF0aEV2YWx1YXRvcihkb2MpOworZm9yKHZhciBpbmRleE42NTYzMSA9IDA7aW5kZXhONjU2MzEg
PCBlbGVtZW50cy5sZW5ndGg7IGluZGV4TjY1NjMxKyspIHsKKyAgICAgIGVsZW1lbnQgPSBlbGVt
ZW50cy5pdGVtKGluZGV4TjY1NjMxKTsKKyAgICAgIHJlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0
ZU5TUmVzb2x2ZXIoZWxlbWVudCk7CisgICAgICBsb29rdXBOYW1lc3BhY2VVUkkgPSByZXNvbHZl
ci5sb29rdXBOYW1lc3BhY2VVUkkoInhtbCIpOworICAgICAgYXNzZXJ0RXF1YWxzKCJlcXVhbCIs
Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsbG9va3VwTmFtZXNwYWNlVVJJ
KTsKKyAgICAgICAKKwl9CisgICAKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
IFhQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sKCk7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0
dHJpYnV0ZV9Ob2Rlc194bWxucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0Nv
bnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHty
ZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAw
ODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAs
MTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIwOXgxOAorICAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwOTogIkF0dHJpYnV0ZV9Ob2Rlc194bWxuczog
U3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X1RZUEVfRVJSLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9UWVBFX0VSUi5zdmcJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlM
RSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0
YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIg
TkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBi
ZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24x
RmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4N
CisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQor
ICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisg
ICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAg
IDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFU
QSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQg
Q0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFU
VExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMg
aXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVz
dWx0X1RZUEVfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+
DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxh
cnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlz
IGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11d
Pg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZl
cmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJv
Z2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9n
ZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcg
SXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkg
T2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJv
YWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5S
b2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5k
ZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBU
ZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvRWxlbWVudF9Ob2Rlcy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvRWxlbWVudF9O
b2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9FbGVtZW50X05vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0
ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4
MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAu
MDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJT
VkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAxNTl4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCAxNTk6ICJFbGVtZW50X05vZGVzOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfcmVzdWx0VHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9yZXN1bHRUeXBl
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhSZXN1bHRfcmVzdWx0VHlwZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTggQEAKKwor
LyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAK
KyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJj
aCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2
ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0
aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4
cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1l
cygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9yZXN1bHRUeXBlJ107Cit9CisKK3ZhciBkb2Nz
TG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAg
ICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25m
aWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxv
YWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNl
dCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAg
IHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9u
IHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7
CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0
aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRC
dWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9j
UmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7
CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCAr
PSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAo
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3Io
YnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBv
ZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4K
Ky8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21w
bGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0
aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxv
YWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0
VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAg
Q3JlYXRlIGFuIFhQYXRoUmVzdWx0IGZvciB0aGUgZXhwcmVzc2lvbiAvc3RhZmYvZW1wbG95ZWUK
KyAgICAgIGZvciBlYWNoIHR5cGUgb2YgWFBhdGhSZXN1bHRUeXBlLCBjaGVja2luZyB0aGF0IHRo
ZSByZXN1bHRUeXBlCisgICAgICBvZiB0aGUgWFBhdGhSZXN1bHQgbWF0Y2hlcyB0aGUgcmVxdWVz
dGVkIHR5cGUuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJl
c3VsdFR5cGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0CisqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1
YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0
ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgt
MjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtcmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhF
eGNlcHRpb24KKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9yZXN1bHRUeXBlKCkgeworICAgdmFy
IHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1
bHRfcmVzdWx0VHlwZSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFy
IHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBleHByZXNzaW9uID0g
Ii9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5y
ZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFy
IGluTm9kZVR5cGU7CisgICAgICB2YXIgb3V0Tm9kZVR5cGU7CisgICAgICB2YXIgQU5ZX1RZUEUg
PSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9
IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9S
REVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9
IDk7CisgICAgICB2YXIgaXNUeXBlRXF1YWw7CisgICAgICBub2RlVHlwZUxpc3QgPSBuZXcgQXJy
YXkoKTsKKyAgICAgIG5vZGVUeXBlTGlzdFswXSA9IDA7CisgICAgICBub2RlVHlwZUxpc3RbMV0g
PSAxOworICAgICAgbm9kZVR5cGVMaXN0WzJdID0gMjsKKyAgICAgIG5vZGVUeXBlTGlzdFszXSA9
IDM7CisgICAgICBub2RlVHlwZUxpc3RbNF0gPSA0OworICAgICAgbm9kZVR5cGVMaXN0WzVdID0g
NTsKKyAgICAgIG5vZGVUeXBlTGlzdFs2XSA9IDY7CisgICAgICBub2RlVHlwZUxpc3RbN10gPSA3
OworICAgICAgbm9kZVR5cGVMaXN0WzhdID0gODsKKyAgICAgIG5vZGVUeXBlTGlzdFs5XSA9IDk7
CisKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRo
aXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAg
ICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBl
dmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0
b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworZm9y
KHZhciBpbmRleE42NTczNyA9IDA7aW5kZXhONjU3MzcgPCBub2RlVHlwZUxpc3QubGVuZ3RoOyBp
bmRleE42NTczNysrKSB7CisgICAgICBpbk5vZGVUeXBlID0gbm9kZVR5cGVMaXN0W2luZGV4TjY1
NzM3XTsKKyAgICAgIG91dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNv
bnRleHROb2RlLHJlc29sdmVyLGluTm9kZVR5cGUsaW5yZXN1bHQpOworICAgICAgb3V0Tm9kZVR5
cGUgPSBvdXRyZXN1bHQucmVzdWx0VHlwZTsKKworICAgICAgCisJaWYoCisJKGluTm9kZVR5cGUg
PT0gQU5ZX1RZUEUpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJBTllfVFlQRV9yZXN1bHR0eXBlIixV
Tk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLG91dE5vZGVUeXBlKTsKKyAgICAgICAKKwl9CisJ
CisJaWYoCisJKGluTm9kZVR5cGUgPT0gTlVNQkVSX1RZUEUpCisJKSB7CisJYXNzZXJ0RXF1YWxz
KCJOVU1CRVJfVFlQRV9yZXN1bHR0eXBlIixOVU1CRVJfVFlQRSxvdXROb2RlVHlwZSk7CisgICAg
ICAgCisJfQorCQorCWlmKAorCShpbk5vZGVUeXBlID09IFNUUklOR19UWVBFKQorCSkgeworCWFz
c2VydEVxdWFscygiU1RSSU5HX1RZUEVfcmVzdWx0dHlwZSIsU1RSSU5HX1RZUEUsb3V0Tm9kZVR5
cGUpOworICAgICAgIAorCX0KKwkKKwlpZigKKwkoaW5Ob2RlVHlwZSA9PSBCT09MRUFOX1RZUEUp
CisJKSB7CisJYXNzZXJ0RXF1YWxzKCJCT09MRUFOX1RZUEVfcmVzdWx0dHlwZSIsQk9PTEVBTl9U
WVBFLG91dE5vZGVUeXBlKTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKGluTm9kZVR5cGUgPT0g
VU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoIlVOT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEVfcmVzdWx0dHlwZSIsVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRSxvdXROb2RlVHlwZSk7CisgICAgICAgCisJfQorCQorCWlmKAorCShpbk5vZGVUeXBl
ID09IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKQorCSkgeworCWFzc2VydEVxdWFscygiT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEVfcmVzdWx0dHlwZSIsT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEUsb3V0Tm9kZVR5cGUpOworICAgICAgIAorCX0KKwkKKwlpZigKKwkoaW5Ob2RlVHlwZSA9
PSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKQorCSkgeworCWFzc2VydEVxdWFscygiVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9yZXN1bHR0eXBlIixVTk9SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFLG91dE5vZGVUeXBlKTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKGluTm9kZVR5
cGUgPT0gT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJP
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9yZXN1bHR0eXBlIixPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSxvdXROb2RlVHlwZSk7CisgICAgICAgCisJfQorCQorCWlmKAorCShpbk5vZGVUeXBl
ID09IEFOWV9VTk9SREVSRURfTk9ERV9UWVBFKQorCSkgeworCWFzc2VydEVxdWFscygiQU5ZX1VO
T1JERVJFRF9OT0RFX1RZUEVfcmVzdWx0dHlwZSIsQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUsb3V0
Tm9kZVR5cGUpOworICAgICAgIAorCX0KKwkKKwlpZigKKwkoaW5Ob2RlVHlwZSA9PSBGSVJTVF9P
UkRFUkVEX05PREVfVFlQRSkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoIkZJUlNUX09SREVSRURfTk9E
RV9UWVBFX3Jlc3VsdHR5cGUiLEZJUlNUX09SREVSRURfTk9ERV9UWVBFLG91dE5vZGVUeXBlKTsK
KyAgICAgICAKKwl9CisJCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7
CisgICBYUGF0aFJlc3VsdF9yZXN1bHRUeXBlKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9P
UkRFUkVEX05PREVfVFlQRS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVE
X05PREVfVFlQRS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9E
RV9UWVBFLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorCisvKgorQ29weXJpZ2h0
IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0
dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0g
Citmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwg
CitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzND
w4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxp
ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAw
Mi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVu
Y3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVy
biBbJ1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9U
WVBFJ107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51
bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZy
YW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAg
IElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cwor
Ly8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0
YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBp
bW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRo
ZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9
ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRv
Y3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRl
ciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOwor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOwor
ICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQ
YWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRj
aEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAn
Y29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0
YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9h
ZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBj
aGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBl
eGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVk
ID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworLyoqCisqIAorICAgICAgQ3JlYXRlIGEgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgWFBh
dGhSZXN1bHQgbWF0Y2hpbmcgL3N0YWZmL2VtcGxveWVlLAorICAgICAgbW9kaWZ5IHRoZSBEb2N1
bWVudCwgdGhlbiBjaGVjayB0aGF0IGl0ZXJhdG9yIFhQYXRoUmVzdWx0cworICAgICAgYXJlIG5v
dCBpbnZhbGlkYXRlZCBYUGF0aFJlc3VsdC5pbnZhbGlkSXRlcmF0b3JTdGF0ZSA9PSBmYWxzZS4K
KyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisq
IEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAz
MDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aFJlc3VsdC1pbnZhbGlkLWl0ZXJhdG9yLXN0YXRlCisqLworZnVuY3Rpb24g
WFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQ
RSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5V
TUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9P
TEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0g
NDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIg
VU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0g
ODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9j
OworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBj
b250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRy
ZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYvZW1wbG95ZWUi
OworICAgICAgdmFyIHhwYXRoVHlwZSA9IEZJUlNUX09SREVSRURfTk9ERV9UWVBFOworICAgICAg
dmFyIGVtcGxveWVlOworICAgICAgdmFyIGRvY0VsZW1lbnQ7CisgICAgICB2YXIgaW52YWxpZEl0
ZXJhdG9yU3RhdGU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYg
KHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhp
cy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIp
OworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVy
ID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGNvbnRleHROb2RlID0g
IGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZShleHByZXNzaW9uLGNvbnRleHRO
b2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7CisgICAgICBkb2NFbGVtZW50ID0gZG9j
LmRvY3VtZW50RWxlbWVudDsKKworICAgICAgZW1wbG95ZWUgPSBkb2MuY3JlYXRlRWxlbWVudCgi
ZW1wbG95ZWUiKTsKKyAgICAgIGVtcGxveWVlID0gZG9jRWxlbWVudC5hcHBlbmRDaGlsZChlbXBs
b3llZSk7CisgICAgICBpbnZhbGlkSXRlcmF0b3JTdGF0ZSA9IG91dHJlc3VsdC5pbnZhbGlkSXRl
cmF0b3JTdGF0ZTsKKworICAgICAgYXNzZXJ0RmFsc2UoImZhbHNlIixpbnZhbGlkSXRlcmF0b3JT
dGF0ZSk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0
X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFKCk7Cit9CkluZGV4
OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvckNhc3QwMS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhFdmFsdWF0b3JDYXN0MDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JDYXN0MDEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZh
c0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVt
IHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9
IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAu
MDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1
eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIwM3gxOAorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwMzogIlhQYXRoRXZhbHVhdG9yQ2FzdDAx
OiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhO
U1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2
ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3RfZG1zdGMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xv
b2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZh
cyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgw
LDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUg
MTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4w
MCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzQ1eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMzQ1OiAiWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rt
c3RjIgorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDY5eDE4CisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDY5OiAiZG1zdGNlcXVhbDogYXNzZXJ0RXF1YWxzIGZh
aWxlZCwgYWN0dWFsIGh0dHA6Ly93d3cudXNhLmNvbSwgZXhwZWN0ZWQgbnVsbC4iCkluZGV4OiBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0
b3JTdGF0ZV9CT09MRUFOX1RZUEUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5f
VFlQRS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuc3ZnCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZ
TEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RFTSAic3RhZmYuZHRkIiBbDQorICAgPCFF
TlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0K
KyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVu
dCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRh
dGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUi
IE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQg
YmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9u
MUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+
DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0K
KyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQor
ICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisg
ICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0
IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFB
VFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlz
IGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQor
PHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuanMiLz4NCis8c2NyaXB0IHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3Np
dGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2
ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1h
cnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlS
ZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2Vu
dCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4N
CisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0i
WWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAz
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRp
b24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2Fs
YXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZ
ZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBl
cnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0K
KyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0
cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVz
cz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
NTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlv
bj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4x
ODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxv
eWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX05PVF9TVVBQT1JURURfRVJSLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURf
RVJSLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorCisvKgorQ29weXJpZ2h0IMOC
wqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMg
SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitm
b3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitS
aWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LC
riBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQg
d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9j
b3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rp
b24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBb
J1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUiddOworfQorCit2YXIg
ZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisv
LyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8g
Y29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVu
dCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBp
cyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAg
ICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5j
dGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0
cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBt
YXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1
cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFy
IGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVk
JykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2Fk
ZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAg
ICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRl
JzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9u
RXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
IH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxl
dGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBU
ZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhh
cyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFs
bG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0
aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqICAg
ICAgIAorICAgICAgVGVzdCBpZiBYUGF0aEV4cHJlc3Npb24uZXZhbHVhdGUgcHJvcGVybHkgdGhy
b3dzIE5PVF9TVVBQT1JURURfRVJST1IKKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6ln
YXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFeHByZXNzaW9uLWV2
YWx1YXRlCisqLworZnVuY3Rpb24gWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JU
RURfRVJSKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihi
dWlsZGVyLCAiWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSIikgIT0g
bnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7CisgICAg
ICB2YXIgcmVzdWx0OworICAgICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAg
dmFyIG51bGxSZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2
YXIgeHBhdGhFeHByZXNzaW9uOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAg
ICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1Jl
ZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAi
c3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworeHBhdGhFeHByZXNzaW9uID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lvbigiLy9mb28i
LG51bGxOU1Jlc29sdmVyKTsKKyAgICAgIGNvbnRleHROb2RlID0gZG9jLmNyZWF0ZUVudGl0eVJl
ZmVyZW5jZSgiZW50aXR5bmFtZSIpOworICAgICAgCisJeworCQlzdWNjZXNzID0gZmFsc2U7CisJ
CXRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSB4cGF0aEV4cHJlc3Npb24uZXZhbHVhdGUoY29u
dGV4dE5vZGUsMCxudWxsUmVzdWx0KTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAg
c3VjY2VzcyA9ICh0eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSA5
KTsKKwkJfQorCQlhc3NlcnRUcnVlKCJ0aHJvd19OT1RfU1VQUE9SVEVEX0VSUiIsc3VjY2Vzcyk7
CisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV4cHJlc3Np
b25fZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX2VtcHR5LnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9p
c1N1cHBvcnRlZF9lbXB0eS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eS5zdmcJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQ
SURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitb
DQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFz
IFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8
ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRF
bGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAi
ZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVu
dDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50
MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3Rh
dGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBT
WVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwg
ZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyAN
CisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0K
KyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQor
ICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdo
dCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwh
QVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhp
cyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5
PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHku
anMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9
InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4
bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRp
b24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9t
ZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2Eu
Y29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0y
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5N
YXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50
aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRq
YWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25h
bWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1
NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRw
Oi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRt
ZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwv
ZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJ
ZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06
bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+
DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1h
bGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVl
dD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGgg
Um9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8
ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9u
YW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4g
Um9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2
Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFs
dWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAxLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4
cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFN
RVNQQUNFX0VSUl8wMS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjEgQEAKKworLyoKK0Nv
cHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNz
YWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25z
b3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5
KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3Ro
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xl
Z2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0
ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7
CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJf
MDEnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVs
bDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJh
bWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAg
SWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisv
LyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3Rh
dHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGlt
bWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhl
IHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0g
J3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9j
dW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVy
ID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7Cisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsK
KyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVw
UGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0
Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0g
J2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBz
dGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxv
YWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMg
Y2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUg
ZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRl
ZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQor
fQorCisKKy8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2YWx1YXRvciBjYW4gY3JlYXRlIGEgIlhQ
YXRoRXhwcmVzc2lvbiIgdXNpbmcgdGhlIG1ldGhvZAorICAgICAgImNyZWF0ZUV4cHJlc3Npb24o
ZXhwcmVzc2lvbiwgcmVzb2x2ZXIpIi4KKyAgICAgIAorICAgICAgUmV0cmlldmUgdGhlIERPTSBk
b2N1bWVudCBvbiB3aGljaCB0aGUKKyAgICAgICdjcmVhdGVFeHByZXNzaW9uKCIvamZvdWZmYTpl
bXBsb3llZSIsIG51bGwpJyBtZXRob2QgaXMKKyAgICAgIGludm9rZWQgd2l0aCB0aGUgZG9jdW1l
bnQgZWxlbWVudC4gIFRoZSBtZXRob2Qgc2hvdWxkIGZhaWwgdG8gY3JlYXRlCisgICAgICBwcmUt
Y29tcGlsZWQgZXhwcmVzc2lvbiBhbmQgdGhyb3dzIERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJS
CisgICAgICBzaW5jZSB0aGUgcHJlZml4IGpmb3VmZmEgaXMgbm90IG1hcHBlZC4KKyAgICAKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3It
Y3JlYXRlRXhwcmVzc2lvbgorKi8KK2Z1bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJl
c3Npb25fTkFNRVNQQUNFX0VSUl8wMSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNr
SW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25f
TkFNRVNQQUNFX0VSUl8wMSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAg
dmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAg
ICAgdmFyIGV4cDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAo
dHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlz
LmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMi
KTsKKyAgICAgIHhwRXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKKworCXsK
KwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgZXhwID0geHBFdmFsdWF0
b3IuY3JlYXRlRXhwcmVzc2lvbigiL2pmb3VmZmE6ZW1wbG95ZWUiLG51bGxOU1Jlc29sdmVyKTsK
KyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAgc3VjY2VzcyA9ICh0eXBlb2YoZXguY29k
ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSAxNCk7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgi
dGhyb3dfTkFNRVNQQUNFX0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKworCisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFD
RV9FUlJfMDEoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
dmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZh
bHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisg
IFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVy
IHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0
ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1d
IFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAi
XQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDQ1eDE4CisgICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMCkgd2lkdGggNDQ1OiAiWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lv
bl9OQU1FU1BBQ0VfRVJSXzAyOiBTdWNjZXNzIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFz
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzNDF4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAzNDE6ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQ6IFN1
Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZh
bHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fSU5WQUxJRF9FWFBSRVNTSU9OX0VSUi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZh
c0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVt
IHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9
IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAu
MDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1
eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDQ5N3gxOAorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ5NzogIlhQYXRoRXZhbHVhdG9yX2NyZWF0
ZUV4cHJlc3Npb25fSU5WQUxJRF9FWFBSRVNTSU9OX0VSUjogU3VjY2VzcyIKSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X251bWJlclZhbHVlLnN2Zwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9udW1iZXJWYWx1ZS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS5zdmcJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0K
KzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJl
cyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkg
ZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZ
ZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8
IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRp
b24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQi
Pg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJ
U1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVj
dCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMg
Q0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENE
QVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCBy
ZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQN
CisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJ
UkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0
IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBu
dW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJl
Y3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X251bWJlclZh
bHVlLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
c3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9z
aXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RB
VEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NE
QVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8g
YSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZl
bnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpv
bmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0
ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxh
cywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXll
cnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQor
ICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzX3htbG5zLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rlc194bWxu
cy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0
dHJpYnV0ZV9Ob2Rlc194bWxucy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzQgQEAKKwor
LyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAK
KyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJj
aCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2
ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0
aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4
cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1l
cygpCit7CityZXR1cm4gWydBdHRyaWJ1dGVfTm9kZXNfeG1sbnMnXTsKK30KKwordmFyIGRvY3NM
b2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAg
ICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZp
Z3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9h
ZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0
IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAg
cmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24g
c2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsK
KyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRo
cm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1
aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYg
KGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9y
KGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9
CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24g
b2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMu
CisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29t
cGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3Mg
dGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBs
b2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNl
dFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAg
IFMxLjIuMiBBdHRyaWJ1dGUgTm9kZXMgLSAKKyAgICAgIENyZWF0ZSBBTllfVFlQRSBYUGF0aFJl
c3VsdCBtYXRjaGluZyAvL0B4bWxucywKKyAgICAgIGNoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIG1h
dGNoaW5nIE5vZGVzIGJ5CisgICAgICBjaGVja2luZyBmb3IgWFBhdGhSZXN1bHQuaXRlcmF0ZU5l
eHQgPT0gbnVsbAorICAgICAgc2luY2UgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgYXJlIG5vdCByZXRy
aWV2YWJsZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI01hcHBpbmcK
KyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIw
MDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIv
MjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1j
cmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00t
TGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAw
My9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhSZXN1bHQtaXRlcmF0ZU5leHQKKyovCitmdW5jdGlvbiBBdHRyaWJ1dGVfTm9k
ZXNfeG1sbnMoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9u
KGJ1aWxkZXIsICJBdHRyaWJ1dGVfTm9kZXNfeG1sbnMiKSAhPSBudWxsKSByZXR1cm47CisgICAg
dmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIg
U1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIg
VU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAg
IHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJF
RF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAg
ICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5y
ZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFy
IGV4cHJlc3Npb24gPSAiLy9AeG1sbnMiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEFOWV9UWVBF
OworICAgICAgdmFyIG91dE5vZGU7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOwor
ICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9j
UmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIs
ICJzdGFmZk5TIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29u
dGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Np
b24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIG91dE5v
ZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIGFzc2VydE51bGwoIkF0dHJpYnV0
ZV9Ob2Rlc194bWxuc3htbG5zIixvdXROb2RlKTsKKyAgICAKK30KKworCisKKworZnVuY3Rpb24g
cnVuVGVzdCgpIHsKKyAgIEF0dHJpYnV0ZV9Ob2Rlc194bWxucygpOworfQpJbmRleDogTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lv
bl9OUy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2
YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFz
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5k
ZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMDN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCAzMDM6ICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05TOiBTdWNjZXNz
IgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2lu
Z2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5n
bGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2lu
Z2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVu
ZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2
Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAs
MCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2Rh
dGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisg
ICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1MTN4MTgKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCA1MTM6ICJYUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VO
T1JERVJFRF9OT0RFX1RZUEU6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9O
T0RFX0lURVJBVE9SX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZ
U1RFTSAic3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZ
IGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisg
ICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJM
SUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5z
IENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95
ZWUrKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4N
CisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBN
YXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAg
ICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4
YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxl
bXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8
IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJl
ciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9u
IHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+
U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2Vu
ZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZ
ZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQg
TWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5v
Ij5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0
b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsi
PjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3Bl
Y2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJv
YWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+
DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvVGV4dF9Ob2Rlcy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgv
VGV4dF9Ob2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZh
cyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgw
LDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUg
MTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4w
MCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVu
ZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzh4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCww
KSB3aWR0aCA3ODogIlRleHRfTm9kZXMiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAo
MCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAzMzF4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMzE6ICJTMS4yLjQt
VGV4dC1Ob2Rlcy1BZGphY2VudC1OZXh0OiBhc3NlcnRUcnVlIGZhaWxlZCIKSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rlcy5zdmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJp
YnV0ZV9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJz
dGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAi
MTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5U
SVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxl
bWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50
aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEg
IlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lT
VEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEg
I0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0K
KyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxF
TUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlw
dCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAg
ICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEw
MCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiBzcmM9IkF0dHJpYnV0ZV9Ob2Rlcy5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxl
cyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2Fy
ZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAg
ICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dl
bmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5v
bGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBu
dW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2Vj
dGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0
aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVl
dD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRt
ZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0
PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+UGVyc29ubmVsIERp
cmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZJmVu
dDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVy
IFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiPjE4MjEgTm9yZGlj
LiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwv
c3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X2Jvb2xlYW5WYWx1ZV90cnVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVh
blZhbHVlX3RydWUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACisKKy8qCitDb3B5
cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2Fj
aHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29y
dGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSku
IEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUg
aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdh
bC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVz
dCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQorewor
cmV0dXJuIFsnWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX3RydWUnXTsKK30KKwordmFyIGRvY3NM
b2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAg
ICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZp
Z3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9h
ZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0
IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAg
cmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24g
c2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsK
KyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRo
cm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1
aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9
IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAgICAgIGlmIChk
b2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAg
ICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihi
dWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQor
CisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9m
IAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgor
Ly8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBs
ZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRo
ZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9h
ZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRV
cFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisgICAgICBD
cmVhdGUgQk9PTEVBTl9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwK
KyAgICAgIGNoZWNraW5nIHRoYXQgWFBhdGhSZXN1bHQuYm9vbGVhblZhbHVlID09IHRydWUKKyAg
ICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3
dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0
aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtYm9vbGVhblZhbHVlCisq
LworZnVuY3Rpb24gWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX3RydWUoKSB7CisgICB2YXIgc3Vj
Y2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aFJlc3VsdF9i
b29sZWFuVmFsdWVfdHJ1ZSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAw
OworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7
CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9
IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2
YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVS
RURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7
CisgICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRv
cjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisK
KyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIv
c3RhZmYvZW1wbG95ZWUiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEJPT0xFQU5fVFlQRTsKKyAg
ICAgIHZhciBvdXROb2RlOworICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgdmFyIHBhcmVudDsK
KyAgICAgIHZhciBvd25lcjsKKyAgICAgIHZhciBvd25lclR5cGU7CisgICAgICB2YXIgYm9vbGVh
blZhbHVlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2
YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7
CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxy
ZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgYm9vbGVhblZhbHVlID0gb3V0cmVz
dWx0LmJvb2xlYW5WYWx1ZTsKKworICAgICAgYXNzZXJ0VHJ1ZSgidHJ1ZSIsYm9vbGVhblZhbHVl
KTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhSZXN1bHRfYm9v
bGVhblZhbHVlX3RydWUoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5zdmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZv
cm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBz
dmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAi
ZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZ
IGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9j
YWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJ
ZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5Rmls
ZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxl
IiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxk
IGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlv
bjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUi
Pg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95
ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAj
RklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQor
ICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQor
ICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBD
REFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAx
Li0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0
PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHNyYz0iQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsLmpzIi8+DQorPHNjcmlwdCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cu
dXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9u
PiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RB
VEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAm
ZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRo
IGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3Jl
dGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5G
ZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
WWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisg
Sm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJ
cnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxv
eWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cu
YWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVl
SWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAw
PC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVt
cDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJD
QU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1
NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVt
cDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21w
dXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VV
UklfeG1sLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3htbC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3htbC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJl
bmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtz
dmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgw
LDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtk
YXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQor
ICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzYweDE4CisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMzYwOiAiWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVS
SV94bWw6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9D
b25mb3JtYW5jZV9oYXNGZWF0dXJlX2VtcHR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9oYXNGZWF0dXJlX2VtcHR5LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorCisv
KgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAor
KE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNo
IENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZl
cnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1
bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRp
dW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhw
b3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVz
KCkKK3sKK3JldHVybiBbJ0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHknXTsKK30KKwordmFy
IGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQor
Ly8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5v
IGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1l
bnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAg
aXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAg
ICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVu
Y3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAg
dHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZh
ciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9h
ZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAg
ICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlv
bkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBs
ZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVw
VGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBo
YXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBh
bGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5j
dGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAg
ICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAK
KyAgICAgIDEuMyBDb25mb3JtYW5jZSAtIFRlc3QgaWYgCisgICAgICBEb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5oYXNGZWF0dXJlKCdYUGF0aCcsICIiKSByZXR1cm5zIHRydWUKKyAgICAKKyogQGF1
dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjSW50ZXJmYWNlcworKi8KK2Z1bmN0aW9uIENvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHko
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlX2VtcHR5IikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZh
ciBkb2M7CisgICAgICB2YXIgc3RhdGU7CisgICAgICB2YXIgaW1wbDsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgIGltcGwgPSBkb2MuaW1wbGVt
ZW50YXRpb247CitzdGF0ZSA9IGltcGwuaGFzRmVhdHVyZSgieHBBVEgiLCIiKTsKK2Fzc2VydFRy
dWUoImhhc0ZlYXR1cmUtWFBhdGgtZW1wdHkiLHN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9lbXB0eSgpOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1
cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlz
dF9kbXN0Yy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0Yy5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAw
NCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBv
ZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0
aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2Vy
dmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUg
TGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisK
K1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNv
ZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitm
dW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aE5TUmVz
b2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3RfZG1zdGMnXTsKK30KKwordmFyIGRvY3NMb2Fk
ZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBy
dW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3Vy
YXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGlu
ZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRv
IGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFp
c2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0
VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAg
ICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93
IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxk
ZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYg
PSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHBy
ZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRv
Y3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAg
ICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1
aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisK
KworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2Yg
CisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisv
LworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxl
dGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhl
CisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2Fk
Q29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVw
UGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIElu
dGVyYXRlIG92ZXIgYWxsIGVtcGxveWVlIGVsZW1lbnRzIHdpdGggeG1sbnM6ZG1zdGMgYXR0cmli
dXRlCisgICAgICBpbiB0aGUgdGVzdCBkb2N1bWVudCwgY3JlYXRpbmcgbnNyZXNvbHZlcnMgY2hl
Y2tpbmcgdGhhdCAKKyAgICAgIGZvciBhbGwgY2hpbGRyZW4gdGhlIHByZWZpeCAnbmlzdCcgcmVz
b2x2ZXMgdG8gCisgICAgICBodHRwOi8vd3d3Lm5pc3QuZ292IGFuZCB0aGF0IHByZWZpeCAnZG1z
dGMnIHJlc29sdmVzIHRvIHRoZSBzYW1lIAorICAgICAgdmFsdWUgYXMgZW1wbG95ZWUuZ2V0QXR0
cmlidXRlKCd4bWxuczpkbXN0YycpLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NS
LURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5T
UmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhO
U1Jlc29sdmVyLWxvb2t1cE5hbWVzcGFjZVVSSQorKi8KK2Z1bmN0aW9uIFhQYXRoTlNSZXNvbHZl
cl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0YygpIHsKKyAgIHZhciBzdWNjZXNzOworICAg
IGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoTlNSZXNvbHZlcl9sb29rdXBO
YW1lc3BhY2VVUklfbmlzdF9kbXN0YyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOwor
ICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBsb29r
dXBOYW1lc3BhY2VVUkk7CisgICAgICB2YXIgbmFtZXNwYWNlVVJJOworICAgICAgdmFyIGNoaWxk
OworICAgICAgdmFyIGNoaWxkcmVuOworICAgICAgdmFyIGVtcGxveWVlOworICAgICAgdmFyIGVt
cGxveWVlczsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlw
ZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRv
YzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsK
KyAgICAgIGVtcGxveWVlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwiZW1wbG95
ZWUiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Citmb3Io
dmFyIGluZGV4TjY1NjMzID0gMDtpbmRleE42NTYzMyA8IGVtcGxveWVlcy5sZW5ndGg7IGluZGV4
TjY1NjMzKyspIHsKKyAgICAgIGVtcGxveWVlID0gZW1wbG95ZWVzLml0ZW0oaW5kZXhONjU2MzMp
OworICAgICAgbmFtZXNwYWNlVVJJID0gZW1wbG95ZWUuZ2V0QXR0cmlidXRlKCJ4bWxuczpkbXN0
YyIpOworICAgICAgY2hpbGRyZW4gPSBlbXBsb3llZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIq
IiwiKiIpOworICAgICAgZm9yKHZhciBpbmRleE42NTY1MCA9IDA7aW5kZXhONjU2NTAgPCBjaGls
ZHJlbi5sZW5ndGg7IGluZGV4TjY1NjUwKyspIHsKKyAgICAgIGNoaWxkID0gY2hpbGRyZW4uaXRl
bShpbmRleE42NTY1MCk7CisgICAgICByZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29s
dmVyKGNoaWxkKTsKKyAgICAgIGxvb2t1cE5hbWVzcGFjZVVSSSA9IHJlc29sdmVyLmxvb2t1cE5h
bWVzcGFjZVVSSSgiZG1zdGMiKTsKKyAgICAgIGFzc2VydEVxdWFscygiZG1zdGNlcXVhbCIsbmFt
ZXNwYWNlVVJJLGxvb2t1cE5hbWVzcGFjZVVSSSk7CisgICAgICAgbG9va3VwTmFtZXNwYWNlVVJJ
ID0gcmVzb2x2ZXIubG9va3VwTmFtZXNwYWNlVVJJKCJuaXN0Iik7CisgICAgICBhc3NlcnRFcXVh
bHMoIm5pc3RlcXVhbCIsImh0dHA6Ly93d3cubmlzdC5nb3YiLGxvb2t1cE5hbWVzcGFjZVVSSSk7
CisgICAgICAgCisJfQorICAgCisJfQorICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICBYUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3RfZG1zdGMoKTsK
K30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lz
U3VwcG9ydGVkX251bGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbC5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lzU3VwcG9ydGVk
X251bGwuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisKKy8qCitDb3B5cmlnaHQg
w4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0
cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAK
K2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAK
K1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PD
gsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAy
L2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5j
dGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJu
IFsnQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9
IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5p
bmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlv
biBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlz
IHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29t
cGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQg
d2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBh
Z2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAv
LworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhj
ZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigp
OworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51
bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAg
ICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xv
YWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9
CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRl
ciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisK
Ky8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8v
ICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisv
LyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQs
CisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8v
ICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21w
bGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdl
U3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgMS4zIENv
bmZvcm1hbmNlIC0gVGVzdCBpZiAKKyAgICAgIERvY3VtZW50LmlzU3VwcG9ydGVkKCdYUGF0aCcs
IG51bGwpIHJldHVybnMgdHJ1ZQorICAgIAorKiBAYXV0aG9yIFBoaWxpcHBlIExlIEjDqWdhcmV0
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNDb25mb3JtYW5jZQorKi8KK2Z1bmN0
aW9uIENvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGwoKSB7CisgICB2YXIgc3VjY2VzczsKKyAg
ICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25mb3JtYW5jZV9pc1N1cHBvcnRl
ZF9udWxsIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgc3RhdGU7
CisgICAgICB2YXIgbnVsbFZhbHVlID0gbnVsbDsKKworICAgICAgCisgICAgICB2YXIgZG9jUmVm
ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NS
ZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgc3RhdGUgPSBkb2MuaXNTdXBwb3J0ZWQoInhw
QVRIIixudWxsVmFsdWUpOworICAgICAgYXNzZXJ0VHJ1ZSgiaXNTdXBwb3J0ZWQtWFBhdGgtbnVs
bCIsc3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBDb25mb3Jt
YW5jZV9pc1N1cHBvcnRlZF9udWxsKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LnN2Zwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJl
c3Npb25fZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1
bWVudEVsZW1lbnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAi
U1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8
IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhh
cyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5
ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQor
ICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5v
dGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90
YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJk
ZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQor
ICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVM
RU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3ll
ZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAg
IDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFU
QSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5U
IHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJ
RUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3
dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4N
Cis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRo
RXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuanMiLz4NCis8c2NyaXB0IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3
dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRp
b24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZl
bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0
aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxl
bXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtD
REFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAy
ICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdp
dGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2Vj
cmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0
PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0K
KyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3
IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1w
bG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3
dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95
ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRp
b24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSww
MDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8
ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9
IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5
ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNv
bXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4N
CisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5z
PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4
NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVf
T1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAg
QEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0
aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBS
ZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2Vp
byBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9D
b25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisK
Ky8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rp
b25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAw
MDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhl
IHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNl
cHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0
ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUg
YW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBl
bnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7
CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAg
ICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9u
CisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisg
ICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7Cisg
ICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NS
ZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NS
ZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0g
MSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0g
Y2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsK
KyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8g
ICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVh
Y2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVu
IGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAg
ICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJv
ZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7
CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9
ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIENyZWF0ZSBhIE9SREVS
RURfTk9ERV9JVEVSQVRPUl9UWVBFIFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3ll
ZSwKKyAgICAgIG1vZGlmeSB0aGUgRG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBY
UGF0aFJlc3VsdHMKKyAgICAgIGFyZSBpbnZhbGlkYXRlZCBYUGF0aFJlc3VsdC5pbnZhbGlkSXRl
cmF0b3JTdGF0ZSA9PSB0cnVlLgorICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBh
dGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVz
b2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LWludmFsaWQtaXRlcmF0b3It
c3RhdGUKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRF
UkVEX05PREVfSVRFUkFUT1JfVFlQRSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNr
SW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRl
X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBB
TllfVFlQRSA9IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklO
R19UWVBFID0gMjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0g
NjsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIg
QU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9E
RV9UWVBFID0gOTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2
YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0
ID0gbnVsbDsKKworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHBy
ZXNzaW9uID0gIi9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9j
RWxlbWVudDsKKyAgICAgIHZhciBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAg
dmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZp
bmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9
IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVY
UGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZl
cihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9y
LmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVz
dWx0KTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0LmludmFsaWRJdGVy
YXRvclN0YXRlOworCisgICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFsaWRJdGVyYXRvclN0
YXRlKTsKK2RvY0VsZW1lbnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3ll
ZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NF
bGVtZW50LmFwcGVuZENoaWxkKGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRl
ID0gb3V0cmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRUcnVlKCJ0
cnVlIixpbnZhbGlkSXRlcmF0b3JTdGF0ZSk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgIFhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX251bGwuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1
cE5hbWVzcGFjZVVSSV9udWxsLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAw
MS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0
dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5m
b3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMg
UmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0
d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFu
dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmln
aHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFt
ZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRo
TlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbCddOworfQorCit2YXIgZG9jc0xvYWRl
ZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1
bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJh
dGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5n
IGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8g
Y29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlz
ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRV
cFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAg
ICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cg
ZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRl
cigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAg
ICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJl
bG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9j
c0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAg
ICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVp
bGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKwor
CisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAK
Ky8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8v
CisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0
ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUK
Ky8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRD
b21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQ
YWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgSXRl
cmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGUgdGVzdCBkb2N1bWVudCwgY3JlYXRpbmcKKyAg
ICAgIG5zcmVzb2x2ZXJzIGNoZWNraW5nIHRoYXQgbG9va2luZyB1cCBub24tZXhpc3RlbnQgcHJl
Zml4ZXMKKyAgICAgIGFsd2F5cyByZXR1cm5zIG51bGwuCisgICAgCisqIEBhdXRob3IgQm9iIENs
YXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0
b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNYUGF0aE5TUmVzb2x2ZXItbG9va3VwTmFtZXNwYWNlVVJJCisqLworZnVuY3Rpb24gWFBh
dGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9udWxsKCkgeworICAgdmFyIHN1Y2Nlc3M7
CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhOU1Jlc29sdmVyX2xv
b2t1cE5hbWVzcGFjZVVSSV9udWxsIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7Cisg
ICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAgdmFyIGVsZW1l
bnQ7CisgICAgICB2YXIgZWxlbWVudHM7CisgICAgICB2YXIgbG9va3VwTmFtZXNwYWNlVVJJOwor
ICAgICAgdmFyIG5hbWVzcGFjZVVSSTsKKyAgICAgIHZhciBwcmVmaXg7CisgICAgICAKKyAgICAg
IHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2Mg
PSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICBlbGVtZW50cyA9IGRvYy5n
ZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwiKiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRl
WFBhdGhFdmFsdWF0b3IoZG9jKTsKK2Zvcih2YXIgaW5kZXhONjU2MzEgPSAwO2luZGV4TjY1NjMx
IDwgZWxlbWVudHMubGVuZ3RoOyBpbmRleE42NTYzMSsrKSB7CisgICAgICBlbGVtZW50ID0gZWxl
bWVudHMuaXRlbShpbmRleE42NTYzMSk7CisgICAgICByZXNvbHZlciA9IGV2YWx1YXRvci5jcmVh
dGVOU1Jlc29sdmVyKGVsZW1lbnQpOworICAgICAgbG9va3VwTmFtZXNwYWNlVVJJID0gcmVzb2x2
ZXIubG9va3VwTmFtZXNwYWNlVVJJKCJmb29iYXIiKTsKKyAgICAgIGFzc2VydE51bGwoIm5vdG51
bGwiLGxvb2t1cE5hbWVzcGFjZVVSSSk7CisgICAgCisJfQorICAgCit9CisKKworCisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX251
bGwoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQ
RS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgS0Nh
bnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwx
MDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkg
c2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNTA2
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTA2OiAiWFBhdGhSZXN1bHRf
aW52YWxpZEl0ZXJhdG9yU3RhdGVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEU6IFN1Y2Nlc3MiCklu
ZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFs
dWF0ZV9kb2N1bWVudEVsZW1lbnQuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudC5z
dmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuc3ZnCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4N
Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0KKyAgIDwh
RU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4N
CisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1l
bnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudDE+
PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVudGl0eVVS
SSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2IFBVQkxJ
QyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMg
ZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBV
QkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJu
b3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVl
KywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAg
eG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBu
YW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRU
TElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEg
I1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qg
c2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29t
bWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0iMCIgd2lk
dGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVu
dC5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNy
Yz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3Yi
IHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
MTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3Np
dGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpk
b21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVz
cz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVz
YS5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBF
bnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBh
ZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwv
bmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSww
MDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0
Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4
NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0
dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1U
ZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95
ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFy
dG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisg
PC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3llZSB4bWxuczplbXA9Imh0dHA6Ly93d3cubmlzdC5n
b3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFsdGF2aXN0YS5jb20iID4gICAgPGVtcDplbXBsb3ll
ZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlkPg0KKyAgPG5tOm5hbWU+SmVueSBPY29ubm9yPC9u
bTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L2VtcDpwb3NpdGlv
bj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwvZW1wOnNhbGFyeT4NCisgIDxlbXA6Z2VuZGVyPkZl
bWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6YWRkcmVzcyBlbXA6ZG9tZXN0aWM9IlllcyIgc3Ry
ZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FOQURBIiBlbXA6bG9jYWwxPSJUUlVFIj4yNyBTb3V0
aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2PC9lbXA6YWRkcmVzcz4NCisgPC9lbXA6ZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAyPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8
L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8
c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjE4MjEgTm9yZGlj
LiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDwv
c3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4
cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9k
b2N1bWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0Nv
bnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHty
ZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAw
ODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAs
MTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI5OHgxOAorICAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI5ODogIlhQYXRoRXhwcmVzc2lvbl9ldmFsdWF0
ZV9kb2N1bWVudDogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3Jt
YW5jZV9oYXNGZWF0dXJlX251bGwuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisK
Ky8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
CisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFy
Y2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5p
dmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBl
eHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFt
ZXMoKQoreworcmV0dXJuIFsnQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsJ107Cit9CisKK3Zh
ciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAg
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUK
Ky8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBu
byBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3Vt
ZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAg
IGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8g
ICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1
bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAg
IHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIs
IG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZp
Z3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2
YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xv
YWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAg
ICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxl
dGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRp
b25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7Cisg
ICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21w
bGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRV
cFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQg
aGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2gg
YWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVu
Y3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAg
ICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyog
CisgICAgICAxLjMgQ29uZm9ybWFuY2UgLSBUZXN0IGlmIAorICAgICAgRG9jdW1lbnQuaW1wbGVt
ZW50YXRpb24uaGFzRmVhdHVyZSgnWFBhdGgnLCBudWxsKSByZXR1cm5zIHRydWUKKyAgICAKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjQ29uZm9ybWFuY2UKKyovCitmdW5jdGlvbiBDb25mb3JtYW5jZV9oYXNGZWF0dXJlX251
bGwoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxk
ZXIsICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwiKSAhPSBudWxsKSByZXR1cm47CisgICAg
dmFyIGRvYzsKKyAgICAgIHZhciBzdGF0ZTsKKyAgICAgIHZhciBpbXBsOworICAgICAgdmFyIG51
bGxWYWx1ZSA9IG51bGw7CisKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0
YWZmTlMiKTsKKyAgICAgIGltcGwgPSBkb2MuaW1wbGVtZW50YXRpb247CitzdGF0ZSA9IGltcGwu
aGFzRmVhdHVyZSgieHBBVEgiLG51bGxWYWx1ZSk7Cithc3NlcnRUcnVlKCJoYXNGZWF0dXJlLVhQ
YXRoLW51bGwiLHN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
Q29uZm9ybWFuY2VfaGFzRmVhdHVyZV9udWxsKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAw
MS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0
dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5m
b3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMg
UmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0
d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFu
dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmln
aHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFt
ZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ0F0dHJp
YnV0ZV9Ob2RlcyddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxk
ZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVz
dGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisv
LworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hy
b25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2Us
IHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRp
b24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9k
eSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VT
dGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMg
dGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAg
IGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVk
ID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsK
KyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAg
IHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAg
ICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQ
YWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMg
bG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9u
b3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0
dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3Qg
dG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9j
c0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7Cisg
ICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFMxLjIuMiBBdHRyaWJ1dGUgTm9kZXMgLSAKKyAg
ICAgIENyZWF0ZSBBTllfVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGluZyAgLy9AKiwKKyAgICAgIGNo
ZWNrIHRoYXQgZWFjaCBtYXRjaGluZyBOb2RlIGlzIGFuIEF0dHJpYnV0ZSBOb2RlLAorICAgICAg
dGhhdCBwYXJlbnROb2RlcyBvZiByZXR1cm5lZCBBdHRyaWJ1dGVzIGFyZSBudWxsLAorICAgICAg
YW5kIHRoYXQgb3duZXJFbGVtZW50cyBhcmUgaW4gZmFjdCBFbGVtZW50cy4KKyAgICAKKyogQGF1
dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI01hcHBpbmcKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZh
bHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1Y
UGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1jcmVhdGVOU1Jlc29sdmVyCisqIEBz
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMz
MS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhOU1Jlc29s
dmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0
aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQtaXRl
cmF0ZU5leHQKKyovCitmdW5jdGlvbiBBdHRyaWJ1dGVfTm9kZXMoKSB7CisgICB2YXIgc3VjY2Vz
czsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJBdHRyaWJ1dGVfTm9kZXMi
KSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1C
RVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xF
QU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7
CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVO
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7
CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsK
KyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29u
dGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVz
dWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiLy9AKiI7CisgICAgICB2YXIg
eHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2YXIgb3V0Tm9kZTsKKyAgICAgIHZhciBub2Rl
VHlwZTsKKyAgICAgIHZhciBwYXJlbnQ7CisgICAgICB2YXIgb3duZXI7CisgICAgICB2YXIgb3du
ZXJUeXBlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAg
ICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2
YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7
CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxy
ZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAgb3V0Tm9kZSA9IG91dHJlc3VsdC5p
dGVyYXRlTmV4dCgpOworICAgICAgCisgICAgd2hpbGUoCisJCisJKG91dE5vZGUgIT0gbnVsbCkK
KworCSkgeworCW5vZGVUeXBlID0gb3V0Tm9kZS5ub2RlVHlwZTsKKworICAgICAgYXNzZXJ0RXF1
YWxzKCJTMS4yLjItQXR0cmlidXRlLU5vZGVzLW5vZGVUeXBlIiwyLG5vZGVUeXBlKTsKKyAgICAg
ICBwYXJlbnQgPSBvdXROb2RlLnBhcmVudE5vZGU7CisKKyAgICAgIGFzc2VydE51bGwoIlMxLjIu
Mi1BdHRyaWJ1dGUtTm9kZXMtcGFyZW50Tm9kZSIscGFyZW50KTsKKyAgICBvd25lciA9IG91dE5v
ZGUub3duZXJFbGVtZW50OworCisgICAgICBvd25lclR5cGUgPSBvd25lci5ub2RlVHlwZTsKKwor
ICAgICAgYXNzZXJ0RXF1YWxzKCJTMS4yLjItQXR0cmlidXRlLU5vZGVzLW93bmVyLW5vZGVUeXBl
IiwxLG93bmVyVHlwZSk7CisgICAgICAgb3V0Tm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgp
OworICAgICAgCisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBBdHRy
aWJ1dGVfTm9kZXMoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L0F0dHJpYnV0ZV9Ob2Rlc194bWxucy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzX3htbG5zLnN2ZwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rlc194bWxu
cy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0
YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVu
dDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8
IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxl
bWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElU
WSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0K
KyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQor
ICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFU
SU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcg
KHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAg
PCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5U
IHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlS
RUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJF
RA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgj
UENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICAN
CitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292
Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQXR0cmlidXRlX05vZGVz
X3htbG5zLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0
LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAg
PHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRt
c3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93
d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3
aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlz
IGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7
XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5
PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsN
CisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0
Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+
RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5u
aXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVt
cGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25u
b3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBv
c2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5k
ZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3
IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDpl
bXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMi
Pg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBN
eWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisg
IDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBO
b3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sLnN2Zwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFt
ZXNwYWNlVVJJX3htbC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3htbC5zdmcJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1T
VFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRk
IiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAg
RGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBl
bnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRh
PC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBV
QkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5U
SVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJ
VFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElP
TiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0
aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNj
cmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNU
IHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1Q
VFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAg
ICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4N
CisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwh
LS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4
PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5h
bWVzcGFjZVVSSV94bWwuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8v
d3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25h
bWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxz
YWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMg
OTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0i
aHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFT
ZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRB
W1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0
YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisg
IDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAg
PGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMs
ICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHht
bG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxw
b3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6
ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8
L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRw
Oi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAg
IDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkpl
bnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9y
PC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8
ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVz
dGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0i
VFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQor
IDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0
LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bv
c2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292
Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2Vt
cGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGwuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRl
TlNSZXNvbHZlcl9hbGwuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2FsbC5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBX
b3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
ZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNz
IGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVk
LiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGlj
ZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sx
XSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3
YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5j
dGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRv
cl9jcmVhdGVOU1Jlc29sdmVyX2FsbCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAw
OwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRl
c3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRp
b25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQu
ICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5k
IHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRl
cmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7Cisg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAv
LyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisg
ICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAg
ICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBj
YXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOwor
ICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAg
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFj
aCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4g
ZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAg
IHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9k
eSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsK
KyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0g
J2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgSXRlcmF0ZSBvdmVyIGFs
bCBub2RlcyBpbiB0aGUgdGVzdCBkb2N1bWVudCwgY3JlYXRpbmcKKyAgICAgIFhQYXRoTlNSZXNv
bHZlcnMgY2hlY2tpbmcgdGhhdCBub25lIHJldHVybiBhIG51bGwgb2JqZWN0LgorICAgIAorKiBA
YXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9N
LUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRo
I1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1
YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2FsbCgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNo
ZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2
ZXJfYWxsIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgc3RhZmY7
CisgICAgICB2YXIgc3RhZmZjaGlsZHJlbjsKKyAgICAgIHZhciBzdGFmZmNoaWxkOworICAgICAg
dmFyIHN0YWZmZ3JhbmRjaGlsZHJlbjsKKyAgICAgIHZhciBzdGFmZmdyYW5kY2hpbGQ7CisgICAg
ICB2YXIgc3RhZmZncmVhdGdyYW5kY2hpbGRyZW47CisgICAgICB2YXIgc3RhZmZncmVhdGdyYW5k
Y2hpbGQ7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVhdG9yOworICAgICAg
CisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAg
ICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgZXZhbHVhdG9y
ID0gY3JlYXRlWFBhdGhFdmFsdWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0
ZU5TUmVzb2x2ZXIoZG9jKTsKKyAgICAgIGFzc2VydE5vdE51bGwoImRvY3VtZW50bm90bnVsbCIs
cmVzb2x2ZXIpOworc3RhZmYgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICByZXNvbHZl
ciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKHN0YWZmKTsKKyAgICAgIGFzc2VydE5vdE51
bGwoImRvY3VtZW50RWxlbWVudG5vdG51bGwiLHJlc29sdmVyKTsKK3N0YWZmY2hpbGRyZW4gPSBz
dGFmZi5jaGlsZE5vZGVzOworCisgICAgICBmb3IodmFyIGluZGV4TjY1NjQ0ID0gMDtpbmRleE42
NTY0NCA8IHN0YWZmY2hpbGRyZW4ubGVuZ3RoOyBpbmRleE42NTY0NCsrKSB7CisgICAgICBzdGFm
ZmNoaWxkID0gc3RhZmZjaGlsZHJlbi5pdGVtKGluZGV4TjY1NjQ0KTsKKyAgICAgIHJlc29sdmVy
ID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoc3RhZmZjaGlsZCk7CisgICAgICBhc3NlcnRO
b3ROdWxsKCJzdGFmZmNoaWxkbm90bnVsbCIscmVzb2x2ZXIpOworc3RhZmZncmFuZGNoaWxkcmVu
ID0gc3RhZmZjaGlsZC5jaGlsZE5vZGVzOworCisgICAgICBmb3IodmFyIGluZGV4TjY1NjYxID0g
MDtpbmRleE42NTY2MSA8IHN0YWZmZ3JhbmRjaGlsZHJlbi5sZW5ndGg7IGluZGV4TjY1NjYxKysp
IHsKKyAgICAgIHN0YWZmZ3JhbmRjaGlsZCA9IHN0YWZmZ3JhbmRjaGlsZHJlbi5pdGVtKGluZGV4
TjY1NjYxKTsKKyAgICAgIHJlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoc3Rh
ZmZncmFuZGNoaWxkKTsKKyAgICAgIGFzc2VydE5vdE51bGwoInN0YWZmZ3JhbmRjaGlsZG5vdG51
bGwiLHJlc29sdmVyKTsKK3N0YWZmZ3JlYXRncmFuZGNoaWxkcmVuID0gc3RhZmZncmFuZGNoaWxk
LmNoaWxkTm9kZXM7CisKKyAgICAgIGZvcih2YXIgaW5kZXhONjU2NzggPSAwO2luZGV4TjY1Njc4
IDwgc3RhZmZncmVhdGdyYW5kY2hpbGRyZW4ubGVuZ3RoOyBpbmRleE42NTY3OCsrKSB7CisgICAg
ICBzdGFmZmdyZWF0Z3JhbmRjaGlsZCA9IHN0YWZmZ3JlYXRncmFuZGNoaWxkcmVuLml0ZW0oaW5k
ZXhONjU2NzgpOworICAgICAgcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihz
dGFmZmdyZWF0Z3JhbmRjaGlsZCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJzdGFmZmdyZWF0Z3Jh
bmRjaGlsZG5vdG51bGwiLHJlc29sdmVyKTsKKworCX0KKyAgIAorCX0KKyAgIAorCX0KKyAgIAor
fQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3JfY3JlYXRl
TlNSZXNvbHZlcl9hbGwoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLnN2ZwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNl
X2hhc0ZlYXR1cmVfMy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElD
ICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAg
IDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRl
eGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cu
eHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4N
CisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEg
bm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBu
b3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2Nh
cmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4N
CisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwh
RUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxv
eWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQor
ICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBD
REFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1F
TlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1Q
TElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8v
d3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iQ29u
Zm9ybWFuY2VfaGFzRmVhdHVyZV8zLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFy
dGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAg
DQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50Mjsg
RGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFz
IDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVt
cD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNv
bSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06
bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBE
aXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5
Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVt
cDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDps
b2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRy
ZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFs
aXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0
Yy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3RjLnN2ZwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9s
b29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0Yy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9D
VFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkg
ZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwh
RU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1s
bnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFy
Z2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50
aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmki
ICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkg
c2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJu
b3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9u
MkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6
ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBD
REFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RB
VEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJl
Y3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0K
KyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlS
RUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQg
dHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51
bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxu
czpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0iWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9uaXN0X2Rtc3Rj
LmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3Jj
PSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIg
eG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAx
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRv
bWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNz
Pg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNh
LmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
Mi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVu
dGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFk
amFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9u
YW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3Rj
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1
NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0
cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRl
c3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3ll
ZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0
bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMi
IHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8
L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0Lmdv
diIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVl
SWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25t
Om5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9u
Pg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVt
YWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJl
ZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRo
IFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAg
PGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwv
bmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxz
YWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMu
IFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9z
dmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRS5zdmcJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9GSVJTVF9PUkRFUkVEX05PREVfVFlQRS5zdmcJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURB
VEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBl
bnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFF
TlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVz
dGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4N
CisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEg
bm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNj
YXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+
DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8
IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2
ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAg
eG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBu
YW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRU
TElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEg
I1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qg
c2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29t
bWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLmpzIi8+DQorPHNjcmlw
dCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwv
cG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2Vu
ZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0
aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxl
bXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZl
bC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFt
ZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50
aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRq
YWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25h
bWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1Q
MDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVz
cz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
NDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlv
bj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9z
aXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9Illl
cyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9l
bXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNU
LVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAg
IDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2Fk
Ij4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVs
ZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQg
UElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlG
aWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hv
dWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3Rh
dGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZp
bGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8
IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2
ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
Ig0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+
DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5
IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhl
aWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisg
IDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0g
VGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBh
dGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUuanMi
Lz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2
Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5B
Y2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
Ij4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rp
b24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhp
cyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAm
dGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQor
IDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1w
bG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25h
bWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxh
cnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4
NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhh
cyA5ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFt
ZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxh
cnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IHN0cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9UZXh0X05vZGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1RleHRfTm9kZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIwMCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUg
V2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ks
IEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhl
bWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29y
ayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBp
biB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93
d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEy
MzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9z
ZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1RleHRfTm9kZXMnXTsKK30KKwordmFy
IGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQor
Ly8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5v
IGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1l
bnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAg
aXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAg
ICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVu
Y3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAg
dHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZh
ciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9h
ZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICAgIAorICAgICAg
IGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUn
OworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25F
cnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAg
fQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0
aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRl
c3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFz
IGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxs
b3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rp
b24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogCisg
ICAgICAxLjIuNCBUZXh0IE5vZGVzIC0gCisgICAgICBDcmVhdGUgQU5ZX1RZUEUgWFBhdGhSZXN1
bHQgbWF0Y2hpbmcgLy90ZXh0KCksCisgICAgICBjaGVjayB0aGF0IGVhY2ggbWF0Y2hpbmcgTm9k
ZSBpcyBhIFRleHQgTm9kZSwgYW5kCisgICAgICB0aGF0IG5vIHBhaXIgb2Ygbm9kZXMgaW4gdGhl
IHJlc3VsdCBhcmUgc2libGluZ3MuCisgICAgCisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94
cGF0aCNNYXBwaW5nCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2
ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvcgorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3It
ZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0z
LVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhS
ZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LWl0ZXJhdGVOZXh0CisqLworZnVuY3Rpb24g
VGV4dF9Ob2RlcygpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRp
b24oYnVpbGRlciwgIlRleHRfTm9kZXMiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9U
WVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZ
UEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2Owor
ICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllf
VU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZ
UEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBl
dmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBu
dWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Np
b24gPSAiLy90ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IEFOWV9UWVBFOworICAgICAg
dmFyIGN1cnJOb2RlOworICAgICAgdmFyIG5leHROb2RlOworICAgICAgdmFyIGN1cnJOb2RlTmV4
dFNpYmxpbmc7CisgICAgICB2YXIgbmV4dE5vZGVQcmV2U2libGluZzsKKyAgICAgIHZhciBub2Rl
VHlwZTsKKyAgICAgIHZhciBpc1RleHROb2RlOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9y
KGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRvYyk7CisgICAg
ICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoZXhw
cmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQpOworICAgICAg
Y3Vyck5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIAorICAgIHdoaWxlKAor
CQorCShjdXJyTm9kZSAhPSBudWxsKQorCisJKSB7CisJbm9kZVR5cGUgPSBjdXJyTm9kZS5ub2Rl
VHlwZTsKKworICAgICAgaXNUZXh0Tm9kZSA9ICJ0cnVlIjsKKworCWlmKAorCQorCSghKDMgPT0g
bm9kZVR5cGUpICYmICEoNCA9PSBub2RlVHlwZSkpCisKKwkpIHsKKwlpc1RleHROb2RlID0gImZh
bHNlIjsKKworCX0KKwlhc3NlcnRFcXVhbHMoIlMxLjIuNC1UZXh0LU5vZGVzLW5vZGVUeXBlIiwi
dHJ1ZSIudG9Mb3dlckNhc2UoKSxpc1RleHROb2RlLnRvTG93ZXJDYXNlKCkpOworICAgICAgIG5l
eHROb2RlID0gb3V0cmVzdWx0Lml0ZXJhdGVOZXh0KCk7CisgICAgICAKKwlpZigKKwkKKwkobmV4
dE5vZGUgIT0gbnVsbCkKKworCSkgeworCWN1cnJOb2RlTmV4dFNpYmxpbmcgPSBjdXJyTm9kZS5u
ZXh0U2libGluZzsKKworICAgICAgCisJaWYoCisJCisJc2FtZShuZXh0Tm9kZSxjdXJyTm9kZU5l
eHRTaWJsaW5nKQorCisJKSB7CisJLyogZHVtbXkgc3RhdGVtZW50ICovCisKKwl9CisJCisJCWVs
c2UgeworCQkJYXNzZXJ0VHJ1ZSgiUzEuMi40LVRleHQtTm9kZXMtQWRqYWNlbnQtTmV4dCIsZmFs
c2UpOworCisJCX0KKwluZXh0Tm9kZVByZXZTaWJsaW5nID0gbmV4dE5vZGUucHJldmlvdXNTaWJs
aW5nOworCisgICAgICAKKwlpZigKKwkKKwlzYW1lKG5leHROb2RlUHJldlNpYmxpbmcsY3Vyck5v
ZGUpCisKKwkpIHsKKwkvKiBkdW1teSBzdGF0ZW1lbnQgKi8KKworCX0KKwkKKwkJZWxzZSB7CisJ
CQlhc3NlcnRUcnVlKCJTMS4yLjQtVGV4dC1Ob2Rlcy1BZGphY2VudC1QcmV2IixmYWxzZSk7CisK
KwkJfQorCQorCX0KKwljdXJyTm9kZSA9ICBuZXh0Tm9kZTsKKworCX0KKworfQorCisKKworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgVGV4dF9Ob2RlcygpOworfQpJbmRleDogTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9ib29sZWFuVmFsdWVfZmFsc2Uuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLnN2Zwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNU
LVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAg
IDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2Fk
Ij4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVs
ZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQg
UElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlG
aWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hv
dWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3Rh
dGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZp
bGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8
IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2
ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
Ig0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+
DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5
IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhl
aWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisg
IDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0g
VGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIv
Pg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBh
dGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJl
dCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAg
ICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywg
VGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9s
ZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51
bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0
aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRp
b24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8
Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0
PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1l
bnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxn
ZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9
Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGly
ZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50
MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIg
U3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdl
bmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMu
IFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9z
dmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29s
dmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBO
YW1lc3BhY2VVUklfcHJlZml4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VV
UklfcHJlZml4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlw
ZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBM
MTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBh
dCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAzNzN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNzM6ICJYUGF0
aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX3ByZWZpeDogU3VjY2VzcyIKSW5kZXg6IExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMuc3ZnCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMuc3Zn
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29tbWVu
dF9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFm
Zi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkw
MCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZ
IGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVu
dD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5
VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRo
aXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24x
IFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVN
ICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAg
IDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVO
VCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJ
UkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlS
RUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAo
I1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAg
DQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIg
aGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIiBzcmM9IkNvbW1lbnRfTm9kZXMuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1h
cnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAg
IA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhh
cyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRoYSBSYXlub2xkczwh
W0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVy
IDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24g
d2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5T
ZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Illl
cyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBN
YW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8i
PlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0K
KyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3Rv
cjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+
MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVj
aWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
Pm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4xODIxIE5vcmRpYy4gUm9h
ZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4N
CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9l
dmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRF
RF9FUlIuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIuc3ZnCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUg
UElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQor
Ww0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxh
cyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAi
PGVudEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50
RWxlbWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMg
ImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBl
bnQ2IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVu
dDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90
YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIg
U1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQs
IGVtcGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcg
DQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIN
CisgICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0K
KyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBD
REFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWln
aHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8
IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRo
aXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIg
eT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9T
VVBQT1JURURfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2Fs
YXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4
NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0
dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3Qt
U3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlk
Pg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2Vj
dGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtU
aGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFi
ICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8
c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxh
ZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAm
ZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxu
czpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9z
aXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRv
bWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDov
L3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8
ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55
IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3Rvcjwv
ZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVt
cDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3Rp
Yz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRS
VUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8
L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5n
b3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJv
YmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3Np
dGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+
MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBs
b3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3Rh
dGVfTlVNQkVSX1RZUEUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM3IEBACisKKy8qCitD
b3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFz
c2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29u
c29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0
eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0
aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9M
ZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2Ug
dGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQor
eworcmV0dXJuIFsnWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVSX1RZUEUn
XTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsK
KworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3
b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYg
dGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAg
ICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVz
CisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVk
aWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRl
c3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1
bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1l
bnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0g
Y3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAg
ICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykg
IT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9Cisg
ICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAg
ICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2Ug
PSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5p
dGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21w
bGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9u
IHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRl
ZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQg
ZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5n
ZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1
dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0g
MSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKwor
CisvKioKKyogCisgICAgICBDcmVhdGUgYSBOVU1CRVJfVFlQRSBYUGF0aFJlc3VsdCBtYXRjaGlu
ZyAvc3RhZmYvZW1wbG95ZWUsCisgICAgICBtb2RpZnkgdGhlIERvY3VtZW50LCB0aGVuIGNoZWNr
IHRoYXQgaXRlcmF0b3IgWFBhdGhSZXN1bHRzCisgICAgICBhcmUgbm90IGludmFsaWRhdGVkIFhQ
YXRoUmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlID09IGZhbHNlLgorICAgIAorKiBAYXV0aG9y
IEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVs
LTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRo
RXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2
YWx1YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1Y
UGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVz
dWx0LWludmFsaWQtaXRlcmF0b3Itc3RhdGUKKyovCitmdW5jdGlvbiBYUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9OVU1CRVJfVFlQRSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlm
KGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRv
clN0YXRlX05VTUJFUl9UWVBFIikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBBTllfVFlQRSA9
IDA7CisgICAgICB2YXIgTlVNQkVSX1RZUEUgPSAxOworICAgICAgdmFyIFNUUklOR19UWVBFID0g
MjsKKyAgICAgIHZhciBCT09MRUFOX1RZUEUgPSAzOworICAgICAgdmFyIFVOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUgPSA0OworICAgICAgdmFyIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ID0gNTsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNjsKKyAgICAg
IHZhciBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7CisgICAgICB2YXIgQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUgPSA4OworICAgICAgdmFyIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0g
OTsKKyAgICAgIHZhciBkb2M7CisgICAgICB2YXIgcmVzb2x2ZXI7CisgICAgICB2YXIgZXZhbHVh
dG9yOworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgdmFyIGlucmVzdWx0ID0gbnVsbDsK
KworICAgICAgdmFyIG91dHJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBleHByZXNzaW9uID0g
Ii9zdGFmZi9lbXBsb3llZSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gTlVNQkVSX1RZUEU7Cisg
ICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAgIHZhciBpbnZh
bGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0
YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVz
b2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5v
ZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29u
dGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGRvY0VsZW1lbnQg
PSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVhdGVFbGVt
ZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVuZENoaWxk
KGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0LmludmFs
aWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFsaWRJdGVy
YXRvclN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhS
ZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVSX1RZUEUoKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3Vt
ZW50LnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1
bWVudC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIg
InN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZ
IGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisg
ICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+
RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVO
VElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24x
Pg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+
DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQor
ICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5P
VEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBz
dmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQor
ICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0
ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAg
ICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3Qu
Z292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3Jp
cHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iWFBhdGhFdmFsdWF0
b3JfZXZhbHVhdGVfZG9jdW1lbnQuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJo
dHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywg
VGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpk
bXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEg
Q0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwh
W0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4N
CisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4x
MDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
ZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMg
OTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1w
PSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29t
IiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpu
YW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERp
cmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+
DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1w
OmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxv
Y2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJl
c3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxp
c3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFs
ZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5p
c3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZh
bHVhdG9yX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dS
T05HX0RPQ1VNRU5UX0VSUi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKworLyoK
K0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhN
YXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBD
b25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJz
aXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAK
K3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVt
L0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9z
ZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygp
Cit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIn
XTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsK
KworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3
b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYg
dGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAg
ICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVz
CisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVk
aWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRl
c3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1
bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1l
bnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0g
Y3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAg
ICAKKyAgICAgIHZhciBkb2MxUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2Mx
KSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2MxUmVmID0gdGhpcy5kb2MxOworICAgICAg
fQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvYzFSZWYsICJkb2MxIiwgInN0YWZmTlMi
KTsKKyAgICAgICAgCisgICAgICB2YXIgZG9jMlJlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9m
KHRoaXMuZG9jMikgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jMlJlZiA9IHRoaXMuZG9j
MjsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2MyUmVmLCAiZG9jMiIs
ICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAyKSB7CisgICAg
ICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkg
eworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBz
ZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJv
bm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3lu
Y2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdl
IHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUg
dGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAo
Kytkb2NzTG9hZGVkID09IDIpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRl
JzsKKyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAorICAgICAgVGVzdCBpZiBYUGF0aEV2YWx1
YXRvci5ldmFsdWF0ZSBwcm9wZXJseSB0aHJvd3MgV1JPTkdfRE9DVU1FTlRfRVJST1IKKyAgICAK
KyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItZXZhbHVhdGUKKyovCitmdW5jdGlvbiBYUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIoKSB7CisgICB2YXIgc3VjY2VzczsKKyAg
ICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9XUk9OR19ET0NVTUVOVF9FUlIiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzE7Cisg
ICAgICB2YXIgZG9jMjsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciByb290Owor
ICAgICAgdmFyIHJlc3VsdDsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAg
ICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgCisgICAgICB2YXIgZG9jMVJlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jMSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgZG9jMVJlZiA9IHRoaXMuZG9jMTsKKyAgICAgIH0KKyAgICAgIGRvYzEgPSBsb2FkKGRv
YzFSZWYsICJkb2MxIiwgInN0YWZmTlMiKTsKKyAgICAgIAorICAgICAgdmFyIGRvYzJSZWYgPSBu
dWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYzIpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvYzJSZWYgPSB0aGlzLmRvYzI7CisgICAgICB9CisgICAgICBkb2MyID0gbG9hZChkb2My
UmVmLCAiZG9jMiIsICJzdGFmZiIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2
YWx1YXRvcihkb2MxKTsKK3Jvb3QgPSBkb2MyLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgCisJ
eworCQlzdWNjZXNzID0gZmFsc2U7CisJCXRyeSB7CisgICAgICAgICAgICByZXN1bHQgPSB4cEV2
YWx1YXRvci5ldmFsdWF0ZSgiLy9mb286YmFyIixyb290LG51bGxOU1Jlc29sdmVyLDAsbnVsbFJl
c3VsdCk7CisgICAgICAgIH0KKwkJY2F0Y2goZXgpIHsKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9m
KGV4LmNvZGUpICE9ICd1bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gNCk7CisJCX0KKwkJYXNzZXJ0
VHJ1ZSgidGhyb3dfV1JPTkdfRE9DVU1FTlRfRVJSIixzdWNjZXNzKTsKKwl9CisKK30KKworCisK
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1dST05H
X0RPQ1VNRU5UX0VSUigpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0X1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfaXRlcmF0b3JOZXh0X1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
dGVyYXRvck5leHRfVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNDUgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBX
aWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9s
b2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBN
YXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlz
IHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBb
MV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRw
Oi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIw
MDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBl
eHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aFJlc3VsdF9pdGVyYXRv
ck5leHRfVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSddOworfQorCit2YXIgZG9jc0xvYWRl
ZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1
bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJh
dGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5n
IGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8g
Y29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlz
ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRV
cFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAg
ICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cg
ZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRl
cigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9
IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAg
ICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJl
bG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NM
b2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAg
fQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxk
ZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKwor
CisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisv
LyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLwor
Ly8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVk
LAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisv
LyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29t
cGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICBDcmVhdGUg
YW4gWFBhdGhSZXN1bHQgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSBYUGF0aFJlc3VsdFR5
cGUgZm9yIAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgp
IGNoZWNraW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuaXRlcmF0b3JOZXh0IGNvbnRhaW5zIHRo
ZSBjb3JyZWN0IG51bWJlciBvZiBub2Rlcy4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMw
MzMxL3hwYXRoI1hQYXRoUmVzdWx0LWl0ZXJhdG9yTmV4dAorKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1
bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0
b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4
dF9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAg
aWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1bHRfaXRlcmF0b3JOZXh0
X1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFy
IEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQRSA9IDE7CisgICAgICB2YXIgU1RS
SU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQRSA9IDM7CisgICAgICB2YXIgVU5P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUg
PSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNzsKKyAgICAgIHZh
ciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAgICB2YXIgRklSU1RfT1JERVJFRF9O
T0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAgIHZhciByZXNvbHZlcjsKKyAgICAg
IHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5vZGU7CisgICAgICB2YXIgaW5yZXN1
bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGV4
cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgpIjsKKyAgICAgIHZh
ciB4cGF0aFR5cGUgPSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOworICAgICAgdmFyIG91
dE5vZGU7CisgICAgICB2YXIgbm9kZVR5cGU7CisgICAgICB2YXIgcGFyZW50OworICAgICAgdmFy
IG93bmVyOworICAgICAgdmFyIG93bmVyVHlwZTsKKyAgICAgIHZhciBpbmRleDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBj
cmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNS
ZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZh
bHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBl
LGlucmVzdWx0KTsKKyAgICAgIGluZGV4ID0gMDsKK291dE5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0
ZU5leHQoKTsKKyAgICAgIAorICAgIHdoaWxlKAorCQorCShvdXROb2RlICE9IG51bGwpCisKKwkp
IHsKKwlpbmRleCArPSAxOworb3V0Tm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAg
ICAgCisJfQorYXNzZXJ0RXF1YWxzKCJjb3VudCIsNCxpbmRleCk7CisgICAgICAgCit9CisKKwor
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfVU5P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVf
My5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0Nv
bmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAK
KworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVt
LCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNl
YXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBV
bml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25z
b3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8v
IGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25O
YW1lcygpCit7CityZXR1cm4gWydDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzMnXTsKK30KKwordmFy
IGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQor
Ly8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5v
IGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1l
bnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAg
aXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAg
ICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVu
Y3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAg
dHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwg
bWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmln
dXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZh
ciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9h
ZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAg
ICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0
ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlv
bkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBs
ZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVw
VGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBo
YXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBh
bGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5j
dGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAg
ICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAK
KyAgICAgIDEuMyBDb25mb3JtYW5jZSAtIFRlc3QgaWYgCisgICAgICBEb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5oYXNGZWF0dXJlKCdYUGF0aCcsICIzLjAiKSByZXR1cm5zIHRydWUKKyAgICAKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEv
eHBhdGgjQ29uZm9ybWFuY2UKKyovCitmdW5jdGlvbiBDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzMo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJDb25mb3JtYW5jZV9oYXNGZWF0dXJlXzMiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRv
YzsKKyAgICAgIHZhciBzdGF0ZTsKKyAgICAgIHZhciBpbXBsOworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgaW1wbCA9IGRvYy5pbXBsZW1lbnRh
dGlvbjsKK3N0YXRlID0gaW1wbC5oYXNGZWF0dXJlKCJ4cEFUSCIsIjMuMCIpOworYXNzZXJ0VHJ1
ZSgiaGFzRmVhdHVyZS1YUGF0aC0zLjAiLHN0YXRlKTsKKworfQorCisKKworCitmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgQ29uZm9ybWFuY2VfaGFzRmVhdHVyZV8zKCk7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
MyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNv
cnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFu
IFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBL
ZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0
cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCito
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3Jn
L0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisK
KworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5j
dGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50J107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEw
MDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0
aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4
Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3Rh
cnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0
ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVu
IGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgp
IHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisg
ICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRp
b24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisK
KyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsK
KyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRv
Y1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRv
Y1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9
PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAg
fSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgp
OworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisv
LyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAg
ZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdo
ZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAg
ICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAg
Ym9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgp
IHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVz
ID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0ZSBhbiBYUGF0
aFJlc3VsdCBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIFhQYXRoUmVzdWx0VHlwZSBmb3Ig
CisgICAgZXhwcmVzc2lvbiAvc3RhZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCkgY2hlY2tp
bmcgdGhhdDoKKyAgICBYUGF0aFJlc3VsdC5zbmFwc2hvdEl0ZW0oMC4uMykgZXhpc3QuCisgICAg
CisqIEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdC1zbmFwc2hvdC1s
ZW5ndGgKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQ
YXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LXNuYXBzaG90SXRlbQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
WFBhdGhSZXN1bHQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZl
bC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBh
dGhFdmFsdWF0b3ItY3JlYXRlTlNSZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X3Nu
YXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50KCkgeworICAgdmFy
IHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWlsZGVyLCAiWFBhdGhSZXN1
bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfY291bnQiKSAhPSBu
dWxsKSByZXR1cm47CisgICAgdmFyIEFOWV9UWVBFID0gMDsKKyAgICAgIHZhciBOVU1CRVJfVFlQ
RSA9IDE7CisgICAgICB2YXIgU1RSSU5HX1RZUEUgPSAyOworICAgICAgdmFyIEJPT0xFQU5fVFlQ
RSA9IDM7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1OworICAgICAgdmFyIFVOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2OworICAgICAgdmFyIE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFID0gNzsKKyAgICAgIHZhciBBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDg7CisgICAg
ICB2YXIgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5OworICAgICAgdmFyIGRvYzsKKyAgICAg
IHZhciByZXNvbHZlcjsKKyAgICAgIHZhciBldmFsdWF0b3I7CisgICAgICB2YXIgY29udGV4dE5v
ZGU7CisgICAgICB2YXIgaW5yZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgb3V0cmVzdWx0ID0g
bnVsbDsKKworICAgICAgdmFyIGV4cHJlc3Npb24gPSAiL3N0YWZmL2VtcGxveWVlL2VtcGxveWVl
SWQvdGV4dCgpIjsKKyAgICAgIHZhciB4cGF0aFR5cGUgPSBVTk9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFOworICAgICAgdmFyIHNuYXBzaG90SXRlbTsKKyAgICAgIHZhciBzbmFwc2hvdExlbmd0
aDsKKyAgICAgIHZhciBpbmRleDsKKyAgICAgIHZhciB0ZXh0OworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgIGV2YWx1YXRvciA9IGNyZWF0ZVhQYXRo
RXZhbHVhdG9yKGRvYyk7CityZXNvbHZlciA9IGV2YWx1YXRvci5jcmVhdGVOU1Jlc29sdmVyKGRv
Yyk7CisgICAgICBjb250ZXh0Tm9kZSA9ICBkb2M7CitvdXRyZXN1bHQgPSBldmFsdWF0b3IuZXZh
bHVhdGUoZXhwcmVzc2lvbixjb250ZXh0Tm9kZSxyZXNvbHZlcix4cGF0aFR5cGUsaW5yZXN1bHQp
OworICAgICAgaW5kZXggPSAwOworCisgICAgd2hpbGUoCisJCisJKGluZGV4IDwgNSkKKworCSkg
eworCXNuYXBzaG90SXRlbSA9IG91dHJlc3VsdC5zbmFwc2hvdEl0ZW0oaW5kZXgpOworICAgICAg
YXNzZXJ0Tm90TnVsbCgibm90bnVsbCIsc25hcHNob3RJdGVtKTsKK2luZGV4ICs9IDE7CisKKwl9
CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoUmVzdWx0X3NuYXBz
aG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50KCk7Cit9CkluZGV4OiBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9u
dWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9udWxsLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lz
U3VwcG9ydGVkX251bGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAK
K2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgx
MDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9
e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAs
MC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3Rl
eHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDI1OXgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI1OTog
IkNvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGw6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
eHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkg
MjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3Ig
SW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdo
dHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBT
b2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5
cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24g
bmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQ
YXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9
IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5p
bmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlv
biBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlz
IHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29t
cGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQg
d2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBh
Z2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAv
LworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhj
ZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigp
OworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51
bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAg
ICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9h
ZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xv
YWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9
CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRl
ciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisK
Ky8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8v
ICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisv
LyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQs
CisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8v
ICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21w
bGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdl
U3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAorICAgICAg
VGVzdCBpZiBYUGF0aEV4cHJlc3Npb24uZXZhbHVhdGUgcmV0dXJucyBub24tbnVsbCByZXN1bHQK
KyAgICAgIHVzaW5nIERvY3VtZW50IGFzIGNvbnRleHROb2RlLgorICAgIAorKiBAYXV0aG9yIFBo
aWxpcHBlIExlIEjDqWdhcmV0CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV4cHJlc3Npb24tZXZhbHVhdGUK
KyovCitmdW5jdGlvbiBYUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQoKSB7CisgICB2
YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJYUGF0aEV4
cHJlc3Npb25fZXZhbHVhdGVfZG9jdW1lbnQiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRv
YzsKKyAgICAgIHZhciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51
bGw7CisKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciB4cGF0aFJlc3VsdDsKKyAg
ICAgIHZhciBudWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIHhwYXRoRXhwcmVzc2lvbjsK
KyAgICAgIHZhciBleHByZXNzaW9uID0gIi8iOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0g
bnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1
YXRvcihkb2MpOworY29udGV4dE5vZGUgPSAgZG9jOworeHBhdGhFeHByZXNzaW9uID0geHBFdmFs
dWF0b3IuY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLG51bGxOU1Jlc29sdmVyKTsKKyAgICAg
IHhwYXRoUmVzdWx0ID0geHBhdGhFeHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHROb2RlLDAsbnVs
bFJlc3VsdCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJub3RudWxsIix4cGF0aFJlc3VsdCk7CisK
K30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRoRXhwcmVzc2lvbl9ldmFs
dWF0ZV9kb2N1bWVudCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0
cmluZ1ZhbHVlLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0
YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIx
OTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJ
VFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVt
ZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRp
dHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAi
VGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNU
RU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAj
SU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQor
ICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0
ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAg
ICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUuanMiLz4NCis8c2NyaXB0IHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVt
cGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVs
LTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1l
Pk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlv
bj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVt
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4g
RGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcnRo
YSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0aCBFbnRpdHlSZWZl
cmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBhbiBhZGphY2VudCBD
REFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11dPjwvbmFtZT4NCisg
IDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4zNSwwMDA8L3NhbGFy
eT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVz
IiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+
RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5
Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMi
IHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8
L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9N
LVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXBs
b3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBvc2l0aW9uPlBlcnNv
bm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwvc2FsYXJ5Pg0KKyAg
PGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiIHN0cmVl
dD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1NjwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
L0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwv
ZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5D
b21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIj4xODIx
IE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVl
Pg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MCBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkg
MjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3Ig
SW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdo
dHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBT
b2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5
cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24g
bmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUnXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAwMDAwMDsKK3ZhciBidWlsZGVyID0gbnVs
bDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJh
bWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAg
SWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhjZXB0aW9ucywgYXN5bmNocm9ub3VzCisv
LyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFydGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3Rh
dHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRlIGFuZCB0aGUgZXhjZXB0aW9uIGlzIGlt
bWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhl
IHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkgeworICAgc2V0VXBQYWdlU3RhdHVzID0g
J3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAgICAgLy8gICBjcmVhdGVzIHRlc3QgZG9j
dW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlvbgorICAgICAvLworICAgICBidWlsZGVy
ID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKworICAgICAgZG9jc0xvYWRlZCA9IDA7Cisg
ICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRv
YykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9
CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9jUmVmLCAiZG9jIiwgInN0YWZmIik7Cisg
ICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBh
Z2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNo
SW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdj
b21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3Rh
cnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2Fk
ZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNo
YW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4
ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisvKioKKyogCisgICAgICBDcmVhdGUgYSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
IFhQYXRoUmVzdWx0IG1hdGNoaW5nIC9zdGFmZi9lbXBsb3llZSwKKyAgICAgIG1vZGlmeSB0aGUg
RG9jdW1lbnQsIHRoZW4gY2hlY2sgdGhhdCBpdGVyYXRvciBYUGF0aFJlc3VsdHMKKyAgICAgIGFy
ZSBpbnZhbGlkYXRlZCBYUGF0aFJlc3VsdC5pbnZhbGlkSXRlcmF0b3JTdGF0ZSA9PSB0cnVlLgor
ICAgIAorKiBAYXV0aG9yIEJvYiBDbGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IKKyog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMw
MzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2ZXIKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoRXZhbHVhdG9yLWV2YWx1YXRlCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9D
Ui1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aE5TUmVzb2x2ZXIKKyogQHNl
ZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMx
L3hwYXRoI1hQYXRoUmVzdWx0LWludmFsaWQtaXRlcmF0b3Itc3RhdGUKKyovCitmdW5jdGlvbiBY
UGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9U
WVBFKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAg
ICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAg
ICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRP
Ul9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7Cisg
ICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9E
RV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAg
ICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAg
ICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAg
IHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3RhZmYv
ZW1wbG95ZWUiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEU7CisgICAgICB2YXIgZW1wbG95ZWU7CisgICAgICB2YXIgZG9jRWxlbWVudDsKKyAgICAg
IHZhciBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51
bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAg
ICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAi
ZG9jIiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihk
b2MpOworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAg
Y29udGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJl
c3Npb24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGlu
dmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0LmludmFsaWRJdGVyYXRvclN0YXRlOworCisg
ICAgICBhc3NlcnRGYWxzZSgiZmFsc2UiLGludmFsaWRJdGVyYXRvclN0YXRlKTsKK2RvY0VsZW1l
bnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICBlbXBsb3llZSA9IGRvYy5jcmVhdGVF
bGVtZW50KCJlbXBsb3llZSIpOworICAgICAgZW1wbG95ZWUgPSBkb2NFbGVtZW50LmFwcGVuZENo
aWxkKGVtcGxveWVlKTsKKyAgICAgIGludmFsaWRJdGVyYXRvclN0YXRlID0gb3V0cmVzdWx0Lmlu
dmFsaWRJdGVyYXRvclN0YXRlOworCisgICAgICBhc3NlcnRUcnVlKCJ0cnVlIixpbnZhbGlkSXRl
cmF0b3JTdGF0ZSk7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgIFhQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUo
KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3Nu
YXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuc3ZnCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25h
cHNob3RJdGVtX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfbnVsbC5zdmcJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQ
SURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElU
WSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAg
PCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRv
bWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+
Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRB
VEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBk
aXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmls
ZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisg
ICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5U
IHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAg
ICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAg
ICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwh
QVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAj
UkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RB
VEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJ
U1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMg
Y29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2Ny
aXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0
X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanMiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQu
anMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50
YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMw
IE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0
aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBh
biBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11d
PjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4z
NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQor
ICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAw
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1
NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisg
IDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVl
dD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0
ZV9kb2N1bWVudC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50LmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExMSBAQAorCisvKgorQ29weXJpZ2h0IMOCwqkgMjAwMS0yMDA0IFdvcmxkIFdp
ZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xv
Z3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1h
dGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitSaWdodHMgUmVzZXJ2ZWQuIFRoaXMg
d29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LCriBTb2Z0d2FyZSBMaWNlbnNlIFsx
XSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAKKworWzFdIGh0dHA6
Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAw
MjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rpb24gbmFtZXMKK2Z1bmN0aW9uIGV4
cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBbJ1hQYXRoRXZhbHVhdG9yX2V2YWx1
YXRlX2RvY3VtZW50J107Cit9CisKK3ZhciBkb2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVp
bGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0
ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4K
Ky8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5j
aHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lz
ZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBi
b2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFn
ZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRl
cyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAg
ICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2Fk
ZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBl
b2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9j
OworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJz
dGFmZk5TIik7CisgICAgICAgIAorICAgICAgIGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAg
ICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7
CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNl
dFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9u
b3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRlc3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5j
aHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFzIGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ug
c3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxsb3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0
ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgr
K2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAgICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUn
OworICAgIH0KK30KKworCisvKioKKyogICAgICAgCisgICAgICBSZXRyaWV2ZSB0aGUgWFBhdGhF
dmFsdWF0b3Igb24gd2hpY2ggdGhlCisgICAgICAiZXZhbHVhdGUoIi8iLCBkb2N1bWVudCwgbnVs
bCwgMCwgbnVsbCkiIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhlIGRvY3VtZW50CisgICAgICBl
bGVtZW50LiBUaGUgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gWFBhdGhSZXN1bHQuCisgICAgCisq
IEBhdXRob3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9y
LWV2YWx1YXRlCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfZG9jdW1lbnQo
KSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIs
ICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudCIpICE9IG51bGwpIHJldHVybjsKKyAg
ICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFyIHJvb3Q7CisgICAg
ICB2YXIgcmVzdWx0OworICAgICAgdmFyIG51bGxOU1Jlc29sdmVyID0gbnVsbDsKKworICAgICAg
dmFyIG51bGxSZXN1bHQgPSBudWxsOworCisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxs
OworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
ZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRv
YyIsICJzdGFmZk5TIik7CisgICAgICB4cEV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9y
KGRvYyk7Cityb290ID0gIGRvYzsKK3Jlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRlKCIvIixy
b290LG51bGxOU1Jlc29sdmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICBhc3NlcnROb3ROdWxsKCJu
b3RudWxsIixyZXN1bHQpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBY
UGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RS
SU5HX1RZUEUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBF
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1NUUklOR19UWVBFLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52
YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRl
bSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9y
PSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEww
LjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4
NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzODF4MTgKKyAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzODE6ICJYUGF0aFJlc3VsdF9pbnZhbGlk
SXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL3N2Z3VuaXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvc3ZndW5pdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL3N2Z3VuaXQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjk1IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgV29ybGQgV2lkZSBXZWIgQ29u
c29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3Bl
YW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3Ms
IEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0MocikgU29mdHdhcmUgTGljZW5zZSBbMV0gaW4gdGhlIAor
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3LnczLm9y
Zy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCisqLwor
CisgIGZ1bmN0aW9uIGFzc2VydFNpemUoZGVzY3IsIGV4cGVjdGVkLCBhY3R1YWwpIHsKKyAgICB2
YXIgYWN0dWFsU2l6ZTsKKyAgICBhY3R1YWxTaXplID0gYWN0dWFsLmxlbmd0aDsKKyAgICBhc3Nl
cnRFcXVhbHMoZGVzY3IsIGV4cGVjdGVkLCBhY3R1YWxTaXplKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGFzc2VydEVxdWFsc0F1dG9DYXNlKGNvbnRleHQsIGRlc2NyLCBleHBlY3RlZCwgYWN0dWFsKSB7
CisgIAlpZiAoYnVpbGRlci5jb250ZW50VHlwZSA9PSAidGV4dC9odG1sIikgeworICAJICAgIGlm
KGNvbnRleHQgPT0gImF0dHJpYnV0ZSIpIHsKKyAgCSAgICAJYXNzZXJ0RXF1YWxzKGRlc2NyLCBl
eHBlY3RlZC50b0xvd2VyQ2FzZSgpLCBhY3R1YWwudG9Mb3dlckNhc2UoKSk7CisgIAkgICAgfSBl
bHNlIHsKKyAgCSAgICAgICAgYXNzZXJ0RXF1YWxzKGRlc2NyLCBleHBlY3RlZC50b1VwcGVyQ2Fz
ZSgpLCBhY3R1YWwpOworICAJICAgIH0KKyAgCX0gZWxzZSB7CisgIAkJYXNzZXJ0RXF1YWxzKGRl
c2NyLCBleHBlY3RlZCwgYWN0dWFsKTsgCisgIAl9CisgIH0KKyAgCisKKyAgZnVuY3Rpb24gYXNz
ZXJ0RXF1YWxzQ29sbGVjdGlvbkF1dG9DYXNlKGNvbnRleHQsIGRlc2NyLCBleHBlY3RlZCwgYWN0
dWFsKSB7CisgICAgLy8KKyAgICAvLyAgaWYgdGhleSBhcmVuJ3QgdGhlIHNhbWUgc2l6ZSwgdGhl
eSBhcmVuJ3QgZXF1YWwKKyAgICBhc3NlcnRFcXVhbHMoZGVzY3IsIGV4cGVjdGVkLmxlbmd0aCwg
YWN0dWFsLmxlbmd0aCk7CisgICAgCisgICAgLy8KKyAgICAvLyAgaWYgdGhlcmUgbGVuZ3RoIGlz
IHRoZSBzYW1lLCB0aGVuIGV2ZXJ5IGVudHJ5IGluIHRoZSBleHBlY3RlZCBsaXN0CisgICAgLy8g
ICAgIG11c3QgYXBwZWFyIG9uY2UgYW5kIG9ubHkgb25jZSBpbiB0aGUgYWN0dWFsIGxpc3QKKyAg
ICB2YXIgZXhwZWN0ZWRMZW4gPSBleHBlY3RlZC5sZW5ndGg7CisgICAgdmFyIGV4cGVjdGVkVmFs
dWU7CisgICAgdmFyIGFjdHVhbExlbiA9IGFjdHVhbC5sZW5ndGg7CisgICAgdmFyIGk7CisgICAg
dmFyIGo7CisgICAgdmFyIG1hdGNoZXM7CisgICAgZm9yKGkgPSAwOyBpIDwgZXhwZWN0ZWRMZW47
IGkrKykgeworICAgICAgICBtYXRjaGVzID0gMDsKKyAgICAgICAgZXhwZWN0ZWRWYWx1ZSA9IGV4
cGVjdGVkW2ldOworICAgICAgICBmb3IoaiA9IDA7IGogPCBhY3R1YWxMZW47IGorKykgeworICAg
ICAgICAJaWYgKGJ1aWxkZXIuY29udGVudFR5cGUgPT0gInRleHQvaHRtbCIpIHsKKyAgICAgICAg
CQlpZiAoY29udGV4dCA9PSAiYXR0cmlidXRlIikgeworICAgICAgICAJCQlpZiAoZXhwZWN0ZWRW
YWx1ZS50b0xvd2VyQ2FzZSgpID09IGFjdHVhbFtqXS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAg
IAkJCQltYXRjaGVzKys7CisgICAgICAgIAkJCX0KKyAgICAgICAgCQl9IGVsc2UgeworICAgICAg
ICAJCQlpZiAoZXhwZWN0ZWRWYWx1ZS50b1VwcGVyQ2FzZSgpID09IGFjdHVhbFtqXSkgeworICAg
ICAgICAJCQkJbWF0Y2hlcysrOworICAgICAgICAJCQl9CisgICAgICAgIAkJfQorICAgICAgICAJ
fSBlbHNlIHsKKyAgICAgICAgICAgIAlpZihleHBlY3RlZFZhbHVlID09IGFjdHVhbFtqXSkgewor
ICAgICAgICAgICAgICAgIAltYXRjaGVzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmKG1hdGNoZXMgPT0gMCkgeworICAgICAgICAgICAg
YXNzZXJ0KGRlc2NyICsgIjogTm8gbWF0Y2ggZm91bmQgZm9yICIgKyBleHBlY3RlZFZhbHVlLGZh
bHNlKTsKKyAgICAgICAgfQorICAgICAgICBpZihtYXRjaGVzID4gMSkgeworICAgICAgICAgICAg
YXNzZXJ0KGRlc2NyICsgIjogTXVsdGlwbGUgbWF0Y2hlcyBmb3VuZCBmb3IgIiArIGV4cGVjdGVk
VmFsdWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGFzc2Vy
dEVxdWFsc0NvbGxlY3Rpb24oZGVzY3IsIGV4cGVjdGVkLCBhY3R1YWwpIHsKKyAgICAvLworICAg
IC8vICBpZiB0aGV5IGFyZW4ndCB0aGUgc2FtZSBzaXplLCB0aGV5IGFyZW4ndCBlcXVhbAorICAg
IGFzc2VydEVxdWFscyhkZXNjciwgZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWwubGVuZ3RoKTsKKyAg
ICAvLworICAgIC8vICBpZiB0aGVyZSBsZW5ndGggaXMgdGhlIHNhbWUsIHRoZW4gZXZlcnkgZW50
cnkgaW4gdGhlIGV4cGVjdGVkIGxpc3QKKyAgICAvLyAgICAgbXVzdCBhcHBlYXIgb25jZSBhbmQg
b25seSBvbmNlIGluIHRoZSBhY3R1YWwgbGlzdAorICAgIHZhciBleHBlY3RlZExlbiA9IGV4cGVj
dGVkLmxlbmd0aDsKKyAgICB2YXIgZXhwZWN0ZWRWYWx1ZTsKKyAgICB2YXIgYWN0dWFsTGVuID0g
YWN0dWFsLmxlbmd0aDsKKyAgICB2YXIgaTsKKyAgICB2YXIgajsKKyAgICB2YXIgbWF0Y2hlczsK
KyAgICBmb3IoaSA9IDA7IGkgPCBleHBlY3RlZExlbjsgaSsrKSB7CisgICAgICAgIG1hdGNoZXMg
PSAwOworICAgICAgICBleHBlY3RlZFZhbHVlID0gZXhwZWN0ZWRbaV07CisgICAgICAgIGZvcihq
ID0gMDsgaiA8IGFjdHVhbExlbjsgaisrKSB7CisgICAgICAgICAgICBpZihleHBlY3RlZFZhbHVl
ID09IGFjdHVhbFtqXSkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZihtYXRjaGVzID09IDApIHsKKyAgICAgICAgICAgIGFz
c2VydChkZXNjciArICI6IE5vIG1hdGNoIGZvdW5kIGZvciAiICsgZXhwZWN0ZWRWYWx1ZSxmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYobWF0Y2hlcyA+IDEpIHsKKyAgICAgICAgICAgIGFz
c2VydChkZXNjciArICI6IE11bHRpcGxlIG1hdGNoZXMgZm91bmQgZm9yICIgKyBleHBlY3RlZFZh
bHVlLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgIH0KKworCisgIGZ1bmN0aW9uIGFzc2Vy
dEVxdWFsc0xpc3RBdXRvQ2FzZShjb250ZXh0LCBkZXNjciwgZXhwZWN0ZWQsIGFjdHVhbCkgewor
CXZhciBtaW5MZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7CisJaWYgKGFjdHVhbC5sZW5ndGggPCBt
aW5MZW5ndGgpIHsKKwkgICAgbWluTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDsKKwl9CisgICAgLy8K
KyAgICBmb3IodmFyIGkgPSAwOyBpIDwgbWluTGVuZ3RoOyBpKyspIHsKKwkJYXNzZXJ0RXF1YWxz
QXV0b0Nhc2UoY29udGV4dCwgZGVzY3IsIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pOworICAgIH0K
KyAgICAvLworICAgIC8vICBpZiB0aGV5IGFyZW4ndCB0aGUgc2FtZSBzaXplLCB0aGV5IGFyZW4n
dCBlcXVhbAorICAgIGFzc2VydEVxdWFscyhkZXNjciwgZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWwu
bGVuZ3RoKTsKKyAgfQorCisKKyAgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzTGlzdChkZXNjciwgZXhw
ZWN0ZWQsIGFjdHVhbCkgeworCXZhciBtaW5MZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7CisJaWYg
KGFjdHVhbC5sZW5ndGggPCBtaW5MZW5ndGgpIHsKKwkgICAgbWluTGVuZ3RoID0gYWN0dWFsLmxl
bmd0aDsKKwl9CisgICAgLy8KKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgbWluTGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYoZXhwZWN0ZWRbaV0gIT0gYWN0dWFsW2ldKSB7CisJCQlhc3NlcnRFcXVh
bHMoZGVzY3IsIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pOworICAgICAgICB9CisgICAgfQorICAg
IC8vCisgICAgLy8gIGlmIHRoZXkgYXJlbid0IHRoZSBzYW1lIHNpemUsIHRoZXkgYXJlbid0IGVx
dWFsCisgICAgYXNzZXJ0RXF1YWxzKGRlc2NyLCBleHBlY3RlZC5sZW5ndGgsIGFjdHVhbC5sZW5n
dGgpOworICB9CisKKyAgZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VPZihkZXNjciwgdHlwZSwgb2Jq
KSB7CisgICAgaWYodHlwZSA9PSAiQXR0ciIpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGRlc2Ny
LDIsb2JqLm5vZGVUeXBlKTsKKyAgICAgICAgdmFyIHNwZWNkID0gb2JqLnNwZWNpZmllZDsKKyAg
ICB9CisgIH0KKworICBmdW5jdGlvbiBhc3NlcnRTYW1lKGRlc2NyLCBleHBlY3RlZCwgYWN0dWFs
KSB7CisgICAgaWYoZXhwZWN0ZWQgIT0gYWN0dWFsKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhk
ZXNjciwgZXhwZWN0ZWQubm9kZVR5cGUsIGFjdHVhbC5ub2RlVHlwZSk7CisgICAgICAgIGFzc2Vy
dEVxdWFscyhkZXNjciwgZXhwZWN0ZWQubm9kZVZhbHVlLCBhY3R1YWwubm9kZVZhbHVlKTsKKyAg
ICB9CisgIH0KKworICBmdW5jdGlvbiBhc3NlcnRVUklFcXVhbHMoYXNzZXJ0SUQsIHNjaGVtZSwg
cGF0aCwgaG9zdCwgZmlsZSwgbmFtZSwgcXVlcnksIGZyYWdtZW50LCBpc0Fic29sdXRlLCBhY3R1
YWwpIHsKKyAgICAvLworICAgIC8vICBVUkkgbXVzdCBiZSBub24tbnVsbAorICAgIGFzc2VydE5v
dE51bGwoYXNzZXJ0SUQsIGFjdHVhbCk7CisKKyAgICB2YXIgdXJpID0gYWN0dWFsOworCisgICAg
dmFyIGxhc3RQb3VuZCA9IGFjdHVhbC5sYXN0SW5kZXhPZigiIyIpOworICAgIHZhciBhY3R1YWxG
cmFnbWVudCA9ICIiOworICAgIGlmKGxhc3RQb3VuZCAhPSAtMSkgeworICAgICAgICAvLworICAg
ICAgICAvLyAgIHN1YnN0cmluZyBiZWZvcmUgcG91bmQKKyAgICAgICAgLy8KKyAgICAgICAgdXJp
ID0gYWN0dWFsLnN1YnN0cmluZygwLGxhc3RQb3VuZCk7CisgICAgICAgIGFjdHVhbEZyYWdtZW50
ID0gYWN0dWFsLnN1YnN0cmluZyhsYXN0UG91bmQrMSk7CisgICAgfQorICAgIGlmKGZyYWdtZW50
ICE9IG51bGwpIGFzc2VydEVxdWFscyhhc3NlcnRJRCxmcmFnbWVudCwgYWN0dWFsRnJhZ21lbnQp
OworCisgICAgdmFyIGxhc3RRdWVzdGlvbiA9IHVyaS5sYXN0SW5kZXhPZigiPyIpOworICAgIHZh
ciBhY3R1YWxRdWVyeSA9ICIiOworICAgIGlmKGxhc3RRdWVzdGlvbiAhPSAtMSkgeworICAgICAg
ICAvLworICAgICAgICAvLyAgIHN1YnN0cmluZyBiZWZvcmUgcG91bmQKKyAgICAgICAgLy8KKyAg
ICAgICAgdXJpID0gYWN0dWFsLnN1YnN0cmluZygwLGxhc3RRdWVzdGlvbik7CisgICAgICAgIGFj
dHVhbFF1ZXJ5ID0gYWN0dWFsLnN1YnN0cmluZyhsYXN0UXVlc3Rpb24rMSk7CisgICAgfQorICAg
IGlmKHF1ZXJ5ICE9IG51bGwpIGFzc2VydEVxdWFscyhhc3NlcnRJRCwgcXVlcnksIGFjdHVhbFF1
ZXJ5KTsKKworICAgIHZhciBmaXJzdENvbG9uID0gdXJpLmluZGV4T2YoIjoiKTsKKyAgICB2YXIg
Zmlyc3RTbGFzaCA9IHVyaS5pbmRleE9mKCIvIik7CisgICAgdmFyIGFjdHVhbFBhdGggPSB1cmk7
CisgICAgdmFyIGFjdHVhbFNjaGVtZSA9ICIiOworICAgIGlmKGZpcnN0Q29sb24gIT0gLTEgJiYg
Zmlyc3RDb2xvbiA8IGZpcnN0U2xhc2gpIHsKKyAgICAgICAgYWN0dWFsU2NoZW1lID0gdXJpLnN1
YnN0cmluZygwLGZpcnN0Q29sb24pOworICAgICAgICBhY3R1YWxQYXRoID0gdXJpLnN1YnN0cmlu
ZyhmaXJzdENvbG9uICsgMSk7CisgICAgfQorCisgICAgaWYoc2NoZW1lICE9IG51bGwpIHsKKyAg
ICAgICAgYXNzZXJ0RXF1YWxzKGFzc2VydElELCBzY2hlbWUsIGFjdHVhbFNjaGVtZSk7CisgICAg
fQorCisgICAgaWYocGF0aCAhPSBudWxsKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhhc3NlcnRJ
RCwgcGF0aCwgYWN0dWFsUGF0aCk7CisgICAgfQorCisgICAgaWYoaG9zdCAhPSBudWxsKSB7Cisg
ICAgICAgIHZhciBhY3R1YWxIb3N0ID0gIiI7CisgICAgICAgIGlmKGFjdHVhbFBhdGguc3Vic3Ry
aW5nKDAsMikgPT0gIi8vIikgeworICAgICAgICAgICAgdmFyIHRlcm1TbGFzaCA9IGFjdHVhbFBh
dGguc3Vic3RyaW5nKDIpLmluZGV4T2YoIi8iKSArIDI7CisgICAgICAgICAgICBhY3R1YWxIb3N0
ID0gYWN0dWFsUGF0aC5zdWJzdHJpbmcoMCx0ZXJtU2xhc2gpOworICAgICAgICB9CisgICAgICAg
IGFzc2VydEVxdWFscyhhc3NlcnRJRCwgaG9zdCwgYWN0dWFsSG9zdCk7CisgICAgfQorCisgICAg
aWYoZmlsZSAhPSBudWxsIHx8IG5hbWUgIT0gbnVsbCkgeworICAgICAgICB2YXIgYWN0dWFsRmls
ZSA9IGFjdHVhbFBhdGg7CisgICAgICAgIHZhciBmaW5hbFNsYXNoID0gYWN0dWFsUGF0aC5sYXN0
SW5kZXhPZigiLyIpOworICAgICAgICBpZihmaW5hbFNsYXNoICE9IC0xKSB7CisgICAgICAgICAg
ICBhY3R1YWxGaWxlID0gYWN0dWFsUGF0aC5zdWJzdHJpbmcoZmluYWxTbGFzaCsxKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVh
bHMoYXNzZXJ0SUQsIGZpbGUsIGFjdHVhbEZpbGUpOworICAgICAgICB9CisgICAgICAgIGlmIChu
YW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBhY3R1YWxOYW1lID0gYWN0dWFsRmlsZTsK
KyAgICAgICAgICAgIHZhciBmaW5hbERvdCA9IGFjdHVhbEZpbGUubGFzdEluZGV4T2YoIi4iKTsK
KyAgICAgICAgICAgIGlmIChmaW5hbERvdCAhPSAtMSkgeworICAgICAgICAgICAgICAgIGFjdHVh
bE5hbWUgPSBhY3R1YWxOYW1lLnN1YnN0cmluZygwLCBmaW5hbERvdCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoYXNzZXJ0SUQsIG5hbWUsIGFjdHVhbE5hbWUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYoaXNBYnNvbHV0ZSAhPSBudWxsKSB7CisgICAgICAg
IGFzc2VydEVxdWFscyhhc3NlcnRJRCwgaXNBYnNvbHV0ZSwgYWN0dWFsUGF0aC5zdWJzdHJpbmco
MCwxKSA9PSAiLyIpOworICAgIH0KKyAgfQorCisKKy8vIHNpemUoKSB1c2VkIGJ5IGFzc2VydFNp
emUgZWxlbWVudAorZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKQoreworICByZXR1cm4gY29sbGVj
dGlvbi5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIHNhbWUoZXhwZWN0ZWQsIGFjdHVhbCkKK3sKKyAg
cmV0dXJuIGV4cGVjdGVkID09PSBhY3R1YWw7Cit9CisKK2Z1bmN0aW9uIGdldFN1ZmZpeChjb250
ZW50VHlwZSkgeworICAgICAgICByZXR1cm4gIi5zdmciOworfQorCitmdW5jdGlvbiBlcXVhbHNB
dXRvQ2FzZShjb250ZXh0LCBleHBlY3RlZCwgYWN0dWFsKSB7CisJaWYgKGJ1aWxkZXIuY29udGVu
dFR5cGUgPT0gInRleHQvaHRtbCIpIHsKKwkJaWYgKGNvbnRleHQgPT0gImF0dHJpYnV0ZSIpIHsK
KwkJCXJldHVybiBleHBlY3RlZC50b0xvd2VyQ2FzZSgpID09IGFjdHVhbDsKKwkJfQorCQlyZXR1
cm4gZXhwZWN0ZWQudG9VcHBlckNhc2UoKSA9PSBhY3R1YWw7CisJfQorCXJldHVybiBleHBlY3Rl
ZCA9PSBhY3R1YWw7Cit9CisKKworZnVuY3Rpb24gY3JlYXRlVGVtcFVSSShzY2hlbWUpIHsKKyAg
IGlmIChzY2hlbWUgPT0gImh0dHAiKSB7CisgICAJICByZXR1cm4gImh0dHA6Ly9sb2NhbGhvc3Q6
ODA4MC93ZWJkYXYvdG1wIiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMCkgKyAi
LnhtbCI7CisgICB9CisgICByZXR1cm4gImZpbGU6Ly8vdG1wL2RvbXRzIiArIE1hdGguZmxvb3Io
TWF0aC5yYW5kb20oKSAqIDEwMDAwMCkgKyAiLnhtbCI7Cit9CisKKworZnVuY3Rpb24gRXZlbnRN
b25pdG9yKCkgeworICB0aGlzLmF0RXZlbnRzID0gbmV3IEFycmF5KCk7CisgIHRoaXMuYnViYmxl
ZEV2ZW50cyA9IG5ldyBBcnJheSgpOworICB0aGlzLmNhcHR1cmVkRXZlbnRzID0gbmV3IEFycmF5
KCk7CisgIHRoaXMuYWxsRXZlbnRzID0gbmV3IEFycmF5KCk7Cit9CisKK0V2ZW50TW9uaXRvci5w
cm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldnQpIHsKKyAgICBzd2l0Y2goZXZ0LmV2
ZW50UGhhc2UpIHsKKyAgICAgICBjYXNlIDE6CisgICAgICAgbW9uaXRvci5jYXB0dXJlZEV2ZW50
c1ttb25pdG9yLmNhcHR1cmVkRXZlbnRzLmxlbmd0aF0gPSBldnQ7CisgICAgICAgYnJlYWs7Cisg
ICAgICAgCisgICAgICAgY2FzZSAyOgorICAgICAgIG1vbml0b3IuYXRFdmVudHNbbW9uaXRvci5h
dEV2ZW50cy5sZW5ndGhdID0gZXZ0OworICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSAzOgor
ICAgICAgIG1vbml0b3IuYnViYmxlZEV2ZW50c1ttb25pdG9yLmJ1YmJsZWRFdmVudHMubGVuZ3Ro
XSA9IGV2dDsKKyAgICAgICBicmVhazsKKyAgICB9CisgICAgbW9uaXRvci5hbGxFdmVudHNbbW9u
aXRvci5hbGxFdmVudHMubGVuZ3RoXSA9IGV2dDsKK30KKworZnVuY3Rpb24gRE9NRXJyb3JJbXBs
KGVycikgeworICB0aGlzLnNldmVyaXR5ID0gZXJyLnNldmVyaXR5OworICB0aGlzLm1lc3NhZ2Ug
PSBlcnIubWVzc2FnZTsKKyAgdGhpcy50eXBlID0gZXJyLnR5cGU7CisgIHRoaXMucmVsYXRlZEV4
Y2VwdGlvbiA9IGVyci5yZWxhdGVkRXhjZXB0aW9uOworICB0aGlzLnJlbGF0ZWREYXRhID0gZXJy
LnJlbGF0ZWREYXRhOworICB0aGlzLmxvY2F0aW9uID0gZXJyLmxvY2F0aW9uOworfQorCisKKwor
ZnVuY3Rpb24gRE9NRXJyb3JNb25pdG9yKCkgeworICB0aGlzLmFsbEVycm9ycyA9IG5ldyBBcnJh
eSgpOworfQorCitET01FcnJvck1vbml0b3IucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rp
b24oZXJyKSB7CisgICAgZXJyb3JNb25pdG9yLmFsbEVycm9yc1tlcnJvck1vbml0b3IuYWxsRXJy
b3JzLmxlbmd0aF0gPSBuZXcgRE9NRXJyb3JJbXBsKGVycik7Cit9CisKK0RPTUVycm9yTW9uaXRv
ci5wcm90b3R5cGUuYXNzZXJ0TG93ZXJTZXZlcml0eSA9IGZ1bmN0aW9uKGlkLCBzZXZlcml0eSkg
eworICAgIHZhciBpOworICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFsbEVycm9ycy5sZW5ndGg7
IGkrKykgeworICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnNbaV0uc2V2ZXJpdHkgPj0gc2V2ZXJp
dHkpIHsKKyAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGlkLCBzZXZlcml0eSAtIDEsIHRoaXMuYWxs
RXJyb3JzW2ldLnNldmVyaXR5KTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gVXNl
ckRhdGFOb3RpZmljYXRpb24ob3BlcmF0aW9uLCBrZXksIGRhdGEsIHNyYywgZHN0KSB7CisgICAg
dGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgdGhpcy5rZXkgPSBrZXk7CisgICAgdGhp
cy5kYXRhID0gZGF0YTsKKyAgICB0aGlzLnNyYyA9IHNyYzsKKyAgICB0aGlzLmRzdCA9IGRzdDsK
K30KKworZnVuY3Rpb24gVXNlckRhdGFNb25pdG9yKCkgeworCXRoaXMuYWxsTm90aWZpY2F0aW9u
cyA9IG5ldyBBcnJheSgpOworfQorCitVc2VyRGF0YU1vbml0b3IucHJvdG90eXBlLmhhbmRsZSA9
IGZ1bmN0aW9uKG9wZXJhdGlvbiwga2V5LCBkYXRhLCBzcmMsIGRzdCkgeworICAgIHVzZXJEYXRh
TW9uaXRvci5hbGxOb3RpZmljYXRpb25zW3VzZXJEYXRhTW9uaXRvci5hbGxOb3RpZmljYXRpb25z
Lmxlbmd0aF0gPQorICAgICAgICAgbmV3IFVzZXJEYXRhTm90aWZpY2F0aW9uKG9wZXJhdGlvbiwg
a2V5LCBkYXRhLCBzcmMsIGRzdCk7Cit9CisKKworZnVuY3Rpb24gdG9Mb3dlckFycmF5KHNyYykg
eworICAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5KCk7CisgICB2YXIgaTsKKyAgIGZvciAoaSA9
IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHsKKyAgICAgIG5ld0FycmF5W2ldID0gc3JjW2ldLnRv
TG93ZXJDYXNlKCk7CisgICB9CisgICByZXR1cm4gbmV3QXJyYXk7Cit9CisKKworCitmdW5jdGlv
biBTVkdCdWlsZGVyKCkgeworICAgIHRoaXMuY29udGVudFR5cGUgPSAiaW1hZ2Uvc3ZnK3htbCI7
CisgICAgdGhpcy5zdXBwb3J0ZWRDb250ZW50VHlwZXMgPSBbICJpbWFnZS9zdmcreG1sIiBdOwor
CisgICAgdGhpcy5zdXBwb3J0c0FzeW5jQ2hhbmdlID0gZmFsc2U7CisgICAgdGhpcy5hc3luYyA9
IGZhbHNlOworICAgIHRoaXMuZml4ZWRBdHRyaWJ1dGVOYW1lcyA9IFsKKyAgICAgICAgInZhbGlk
YXRpbmciLCAgImV4cGFuZEVudGl0eVJlZmVyZW5jZXMiLCAiY29hbGVzY2luZyIsIAorICAgICAg
ICAic2lnbmVkIiwgImhhc051bGxTdHJpbmciLCAiaWdub3JpbmdFbGVtZW50Q29udGVudFdoaXRl
c3BhY2UiLCAibmFtZXNwYWNlQXdhcmUiLCAiaWdub3JpbmdDb21tZW50cyIsICJzY2hlbWFWYWxp
ZGF0aW5nIl07CisKKyAgICB0aGlzLmZpeGVkQXR0cmlidXRlVmFsdWVzID0gW2ZhbHNlLCAgdHJ1
ZSwgZmFsc2UsIHRydWUsIHRydWUgLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlIF07CisgICAg
dGhpcy5jb25maWd1cmFibGVBdHRyaWJ1dGVOYW1lcyA9IFsgXTsKKyAgICB0aGlzLmNvbmZpZ3Vy
YWJsZUF0dHJpYnV0ZVZhbHVlcyA9IFsgXTsKKyAgICB0aGlzLmluaXRpYWxpemF0aW9uRXJyb3Ig
PSBudWxsOworICAgIHRoaXMuaW5pdGlhbGl6YXRpb25GYXRhbEVycm9yID0gbnVsbDsKKyAgICB0
aGlzLnNraXBJbmNvbXBhdGlibGVUZXN0cyA9IHRydWU7CisgICAgdGhpcy5kb2N1bWVudFVSTHMg
PSBuZXcgQXJyYXkoKTsKKyAgICB0aGlzLmRvY3VtZW50VmFybmFtZXMgPSBuZXcgQXJyYXkoKTsK
K30KKworU1ZHQnVpbGRlci5wcm90b3R5cGUuaGFzRmVhdHVyZSA9IGZ1bmN0aW9uKGZlYXR1cmUs
IHZlcnNpb24pIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVy
ZShmZWF0dXJlLCB2ZXJzaW9uKTsKK30KKworU1ZHQnVpbGRlci5wcm90b3R5cGUuZ2V0SW1wbGVt
ZW50YXRpb24gPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9u
OworfQorCitTVkdCdWlsZGVyLnByb3RvdHlwZS5wcmVsb2FkID0gZnVuY3Rpb24oZnJhbWUsIHZh
cm5hbWUsIHVybCkgeworICB2YXIgaTsKKyAgdGhpcy5kb2N1bWVudFZhcm5hbWVzW3RoaXMuZG9j
dW1lbnRWYXJuYW1lcy5sZW5ndGhdID0gdmFybmFtZTsKKyAgdGhpcy5kb2N1bWVudFVSTHNbdGhp
cy5kb2N1bWVudFVSTHMubGVuZ3RoXSA9IHVybDsKKyAgaWYgKHRoaXMuZG9jdW1lbnRVUkxzLmxl
bmd0aCA+IDEpIHsKKyAgICAgLy8KKyAgICAgLy8gICBpZiBhbGwgdGhlIHVybHMgYXJlIG5vdCB0
aGUgc2FtZQorICAgICAvLworICAgICBmb3IgKGkgPSAxOyBpIDwgdGhpcy5kb2N1bWVudFVSTHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgIGlmICh0aGlzLmRvY3VtZW50VVJMc1tpXSAhPSB0aGlz
LmRvY3VtZW50VVJMc1swXSkgeworICAgICAgICAgICAgIHRocm93ICJUZXN0cyB3aXRoIG11bHRp
cGxlIGxvYWRzIG9mIGRpZmZlcmVudCBkb2N1bWVudHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9y
dGVkIjsKKyAgICAgICAgIH0KKyAgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitTVkdCdWls
ZGVyLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbihzcmNOb2RlLCBkb2MpIHsKKyAgIHZh
ciBjbG9uZSA9IG51bGw7CisgICBzd2l0Y2goc3JjTm9kZS5ub2RlVHlwZSkgeworICAgICAgLy8K
KyAgICAgIC8vICBlbGVtZW50CisgICAgICBjYXNlIDE6CisgICAgICBjbG9uZSA9IGRvYy5jcmVh
dGVFbGVtZW50TlMoc3JjTm9kZS5uYW1lc3BhY2VVUkksIHNyY05vZGUubm9kZU5hbWUpOworICAg
ICAgdmFyIGF0dHJzID0gc3JjTm9kZS5hdHRyaWJ1dGVzOworICAgICAgZm9yKHZhciBpID0gMDsg
aSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIHNyY0F0dHIgPSBhdHRycy5p
dGVtKGkpOworICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZU5TKHNyY0F0dHIubmFtZXNwYWNl
VVJJLCBzcmNBdHRyLm5vZGVOYW1lLCBzcmNBdHRyLm5vZGVWYWx1ZSk7CisgICAgICB9CisgICAg
ICB2YXIgc3JjQ2hpbGQgPSBzcmNOb2RlLmZpcnN0Q2hpbGQ7CisgICAgICB3aGlsZShzcmNDaGls
ZCAhPSBudWxsKSB7CisgICAgICAgICB2YXIgY2xvbmVDaGlsZCA9IHRoaXMuY2xvbmVOb2RlKHNy
Y0NoaWxkLCBkb2MpOworICAgICAgICAgaWYgKGNsb25lQ2hpbGQgIT0gbnVsbCkgeworICAgICAg
ICAgICAgIGNsb25lLmFwcGVuZENoaWxkKGNsb25lQ2hpbGQpOworICAgICAgICAgfQorICAgICAg
ICAgc3JjQ2hpbGQgPSBzcmNDaGlsZC5uZXh0U2libGluZzsKKyAgICAgIH0KKyAgICAgIGJyZWFr
OworICAgICAgCisgICAgICBjYXNlIDM6CisgICAgICBjbG9uZSA9IGRvYy5jcmVhdGVUZXh0Tm9k
ZShzcmNOb2RlLm5vZGVWYWx1ZSk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgICAgY2FzZSA0
OgorICAgICAgY2xvbmUgPSBkb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKHNyY05vZGUubm9kZVZhbHVl
KTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgICBjYXNlIDU6CisgICAgICBjbG9uZSA9IGRv
Yy5jcmVhdGVFbnRpdHlSZWZlcmVuY2Uoc3JjTm9kZS5ub2RlTmFtZSk7CisgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIAorICAgICAgY2FzZSA3OgorICAgICAgY2xvbmUgPSBkb2MuY3Jl
YXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHNyY05vZGUudGFyZ2V0LCBzcmNOb2RlLmRhdGEpOwor
ICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGNhc2UgODoKKyAgICAgIGNsb25lID0gZG9jLmNy
ZWF0ZUNvbW1lbnQoc3JjTm9kZS5ub2RlVmFsdWUpOworICAgICAgYnJlYWs7CisgICB9CisgICBy
ZXR1cm4gY2xvbmU7CisgICAgICAKK30KKworCitTVkdCdWlsZGVyLnByb3RvdHlwZS5sb2FkID0g
ZnVuY3Rpb24oZnJhbWUsIHZhcm5hbWUsIHVybCkgeworICBpZiAodGhpcy5kb2N1bWVudFZhcm5h
bWVzWzBdID09IHZhcm5hbWUpIHsKKyAgCXJldHVybiBkb2N1bWVudDsKKyAgfQorICAvLworICAv
LworICAvLyAgbm90IGEgcGVyZmVjdCB3YXkgdG8gZG8gdGhpcworICAvLyAgICBEb2N1bWVudC5j
bG9uZU5vZGUgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1dCBleGlzdHMgaW4gTDEKKyAg
Ly8gICAgICAgYW5kIGltcGxlbWVudGVkIGluIElFLiAgVGhlIGFsdGVybmF0aXZlIGJydXRlIGZv
cmNlIGNvcHkKKyAgLy8gICAgICAgb25seSB3b3JrcyBpbiBMMiBvciBoaWdoZXIgaW1wbGVtZW50
YXRpb25zIGFuZCBjYW4ndCBjb3B5CisgIC8vICAgICAgIGVudGl0eSBhbmQgbm90YXRpb24gZGVm
aW5pdGlvbnMsIGV0Yy4KKyAgdmFyIGNsb25lID0gbnVsbDsKKyAgdHJ5IHsKKyAgICAgIGNsb25l
ID0gZG9jdW1lbnQuY2xvbmVOb2RlKHRydWUpOworICB9IGNhdGNoKGV4KSB7CisgIH0KKyAgaWYg
KGNsb25lID09IG51bGwpIHsKKyAgICAgIGNsb25lID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24u
Y3JlYXRlRG9jdW1lbnQoCisgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVz
cGFjZVVSSSwKKyAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUsCisg
ICAgICAgICAgbnVsbCk7CisgICAgICAvLworICAgICAgLy8gICBXb3JrLWFyb3VuZCBzaW5jZQor
ICAgICAgLy8gICBTYWZhcmkgZG9lcyBub3QgY3JlYXRlIGRvY3VtZW50IGVsZW1lbnQgCisgICAg
ICAvLyAgICAgIGNyZWF0ZSBkb2N1bWVudC4gICAgICAKKyAgICAgIGlmIChjbG9uZS5kb2N1bWVu
dEVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgICAgICBjbG9uZS5hcHBlbmRDaGlsZChjbG9uZS5j
cmVhdGVFbGVtZW50TlMoCisgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5u
YW1lc3BhY2VVUkksIAorICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubm9k
ZU5hbWUpKTsKKyAgICAgIH0KKyAgICAgIHZhciBhdHRycyA9IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5hdHRyaWJ1dGVzOworICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgdmFyIHNyY0F0dHIgPSBhdHRycy5pdGVtKGkpOworICAgICAgICAg
IGNsb25lLmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGVOUygKKyAgICAgICAgICAgICBzcmNB
dHRyLm5hbWVzcGFjZVVSSSwgc3JjQXR0ci5ub2RlTmFtZSwgc3JjQXR0ci5ub2RlVmFsdWUpOwor
ICAgICAgfQorCisgICAgICB2YXIgc3JjTm9kZSA9IGRvY3VtZW50LmZpcnN0Q2hpbGQ7CisgICAg
ICB3aGlsZShzcmNOb2RlICE9IG51bGwgJiYgc3JjTm9kZS5ub2RlVHlwZSAhPSAxKSB7CisgICAg
ICAgICAgaWYgKHNyY05vZGUubm9kZVR5cGUgIT0gMTApIHsKKyAgICAgICAgICAJIHZhciBjbG9u
ZU5vZGUgPSB0aGlzLmNsb25lTm9kZShzcmNOb2RlLCBjbG9uZSk7CisgICAgICAgICAgICAgY2xv
bmUuaW5zZXJ0QmVmb3JlKGNsb25lTm9kZSwgY2xvbmUuZG9jdW1lbnRFbGVtZW50KTsKKyAgICAg
ICAgICAgfQorICAgICAgICAgICBzcmNOb2RlID0gc3JjTm9kZS5uZXh0U2libGluZzsgCisgICAg
ICB9CisgICAgICBzcmNOb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5leHRTaWJsaW5n
OworICAgICAgd2hpbGUoc3JjTm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgdmFyIGNsb25lTm9k
ZSA9IHRoaXMuY2xvbmVOb2RlKHNyY05vZGUsIGNsb25lKTsKKyAgICAgICAgICBjbG9uZS5hcHBl
bmRDaGlsZChjbG9uZU5vZGUpOworICAgICAgICAgIHNyY05vZGUgPSBzcmNOb2RlLm5leHRTaWJs
aW5nOworICAgICAgfQorICAgICAgc3JjTm9kZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5m
aXJzdENoaWxkOworICAgICAgd2hpbGUoc3JjTm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgdmFy
IGNsb25lTm9kZSA9IHRoaXMuY2xvbmVOb2RlKHNyY05vZGUsIGNsb25lKTsKKyAgICAgICAgICBp
ZiAoY2xvbmVOb2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICBjbG9uZS5kb2N1bWVudEVsZW1l
bnQuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgc3JjTm9k
ZSA9IHNyY05vZGUubmV4dFNpYmxpbmc7CisgICAgICB9CisgIH0KKyAgcmV0dXJuIGNsb25lOwor
fQorCitTVkdCdWlsZGVyLnByb3RvdHlwZS5nZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSA9IGZ1
bmN0aW9uKGF0dHIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZml4ZWRBdHRyaWJ1
dGVOYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAodGhpcy5maXhlZEF0dHJpYnV0ZU5h
bWVzW2ldID09IGF0dHIpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpeGVkQXR0cmlidXRl
VmFsdWVzW2ldOworICAgICAgICB9CisgICAgfQorICAgIHRocm93ICJVbnJlY29nbml6ZWQgaW1w
bGVtZW50YXRpb24gYXR0cmlidXRlOiAiICsgYXR0cjsKK30KKworCitTVkdCdWlsZGVyLnByb3Rv
dHlwZS5zZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFs
dWUpIHsKKyAgICB2YXIgc3VwcG9ydGVkID0gdGhpcy5nZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0
ZShhdHRyaWJ1dGUpOworICAgIGlmIChzdXBwb3J0ZWQgIT0gdmFsdWUpIHsKKyAgICAgICAgdGhp
cy5pbml0aWFsaXphdGlvbkVycm9yID0gIlNWRyBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCAiICsg
YXR0cmlidXRlICsgIj0iICsgdmFsdWU7CisgICAgfQorfQorCitTVkdCdWlsZGVyLnByb3RvdHlw
ZS5jYW5TZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJpYnV0ZSwgdmFs
dWUpIHsKKyAgICB2YXIgc3VwcG9ydGVkID0gdGhpcy5nZXRJbXBsZW1lbnRhdGlvbkF0dHJpYnV0
ZShhdHRyaWJ1dGUpOworICAgIHJldHVybiAoc3VwcG9ydGVkID09IHZhbHVlKTsKK30KKworCisK
KworZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKSB7CisgICAgcmV0dXJuIG5ldyBT
VkdCdWlsZGVyKCk7Cit9CisKK2Z1bmN0aW9uIGNhdGNoSW5pdGlhbGl6YXRpb25FcnJvcihidWls
ZHIsIGV4KSB7CisgICBidWlsZHIuaW5pdGlhbGl6YXRpb25FcnJvciA9IGV4OworICAgYnVpbGRy
LmluaXRpYWxpemF0aW9uRmF0YWxFcnJvciA9IGV4OworfQorCisKK2Z1bmN0aW9uIGNoZWNrRmVh
dHVyZShmZWF0dXJlLCB2ZXJzaW9uKQoreworICBpZiAoIWJ1aWxkZXIuaGFzRmVhdHVyZShmZWF0
dXJlLCB2ZXJzaW9uKSkKKyAgeworICAgIC8vCisgICAgLy8gICBkb24ndCB0aHJvdyBleGNlcHRp
b24gc28gdGhhdCB1c2VycyBjYW4gc2VsZWN0IHRvIGlnbm9yZSB0aGUgcHJlY29uZGl0aW9uCisg
ICAgLy8KKyAgICBidWlsZGVyLmluaXRpYWxpemF0aW9uRXJyb3IgPSAiYnVpbGRlciBkb2VzIG5v
dCBzdXBwb3J0IGZlYXR1cmUgIiArIGZlYXR1cmUgKyAiIHZlcnNpb24gIiArIHZlcnNpb247Cisg
IH0KK30KKworCitmdW5jdGlvbiBjaGFuZ2VDb2xvcihjb2xvcikgeworICAgZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInJlY3QiKS5pdGVtKDApLnNldEF0dHJpYnV0ZSgic3R5bGUiLCAi
ZmlsbDoiICsgY29sb3IpOworfQorCitmdW5jdGlvbiBhZGRNZXNzYWdlKHgsIHksIG1zZykgewor
ICAgdmFyIHRleHRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyIsICJ0ZXh0Iik7CisgICB0ZXh0RWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxs
LCAieCIsIHgpOworICAgdGV4dEVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgInkiLCB5KTsKKyAg
IHRleHRFbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOworICAg
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRleHRFbGVtKTsgICAKK30KKwor
ZnVuY3Rpb24gY2hlY2tJbml0aWFsaXphdGlvbihidWlsZHIsIHRlc3RuYW1lKSB7CisgICBpZiAo
YnVpbGRyLmluaXRpYWxpemF0aW9uRXJyb3IgIT0gbnVsbCkgeworICAgICAgYWRkTWVzc2FnZSgi
MCIsICIxNjAiLCBidWlsZHIuaW5pdGlhbGl6YXRpb25FcnJvcik7CisgICAgICBjaGFuZ2VDb2xv
cigieWVsbG93Iik7CisgICB9CisgICByZXR1cm4gYnVpbGRyLmluaXRpYWxpemF0aW9uRXJyb3I7
Cit9CisKK2Z1bmN0aW9uIHByZWxvYWQoZG9jUmVmLCB2YXJuYW1lLCBocmVmKSB7CisgICByZXR1
cm4gYnVpbGRlci5wcmVsb2FkKGRvY1JlZiwgdmFybmFtZSwgaHJlZik7Cit9CisKKworZnVuY3Rp
b24gbG9hZChkb2NSZWYsIHZhcm5hbWUsIGhyZWYpIHsKKyAgIHJldHVybiBidWlsZGVyLmxvYWQo
ZG9jUmVmLCB2YXJuYW1lLCBocmVmKTsKK30KKworCitmdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlv
bkF0dHJpYnV0ZShhdHRyKSB7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0SW1wbGVtZW50YXRpb25B
dHRyaWJ1dGUoYXR0cik7Cit9CisKKworZnVuY3Rpb24gc2V0SW1wbGVtZW50YXRpb25BdHRyaWJ1
dGUoYXR0cmlidXRlLCB2YWx1ZSkgeworICAgIGJ1aWxkZXIuc2V0SW1wbGVtZW50YXRpb25BdHRy
aWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVhQYXRoRXZhbHVh
dG9yKGRvYykgeworICAgIHRyeSB7CisgICAgICAgIHJldHVybiBkb2MuZ2V0RmVhdHVyZSgiWFBh
dGgiLCBudWxsKTsKKyAgICB9CisgICAgY2F0Y2goZXgpIHsKKyAgICB9CisgICAgcmV0dXJuIGRv
YzsKK30KKworCitmdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlvbigpIHsKKyAgICByZXR1cm4gYnVp
bGRlci5nZXRJbXBsZW1lbnRhdGlvbigpOworfQorCisKK2Z1bmN0aW9uIGFzc2VydEVxdWFscyhp
ZCwgZXhwZWN0ZWQsIGFjdHVhbCkgeworICAgdmFyIG15QWN0dWFsOworICAgaWYgKGV4cGVjdGVk
ICE9IGFjdHVhbCkgeworICAgICAgIG15QWN0dWFsID0gYWN0dWFsOworICAgICAgIGlmIChhY3R1
YWwgPT0gbnVsbCkgeworICAgICAgICAgIG15QWN0dWFsID0gIm51bGwiOworICAgICAgIH0KKyAg
ICAgICB0aHJvdyBpZCArICI6IGFzc2VydEVxdWFscyBmYWlsZWQsIGFjdHVhbCAiICsgYWN0dWFs
ICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIi4iOyAKKyAgIH0KK30KKworZnVuY3Rpb24g
YXNzZXJ0TnVsbChpZCwgYWN0dWFsKSB7CisgICBpZiAoYWN0dWFsICE9IG51bGwpIHsKKyAgICAg
ICB0aHJvdyBpZCArICI6IGFzc2VydE51bGwgZmFpbGVkLCBhY3R1YWwgIiArIGFjdHVhbDsKKyAg
IH0KK30KKworCitmdW5jdGlvbiBhc3NlcnRUcnVlKGlkLCBhY3R1YWwpIHsKKyAgIGlmICghYWN0
dWFsKSB7CisgICAgICAgdGhyb3cgaWQgKyAiOiBhc3NlcnRUcnVlIGZhaWxlZCI7CisgICB9Cit9
CisKK2Z1bmN0aW9uIGFzc2VydChpZCwgYWN0dWFsKSB7CisgICBpZiAoIWFjdHVhbCkgeworICAg
ICAgIHRocm93IGlkICsgIjogYXNzZXJ0IGZhaWxlZCI7CisgICB9Cit9CisKKworZnVuY3Rpb24g
YXNzZXJ0RmFsc2UoaWQsIGFjdHVhbCkgeworICAgaWYgKGFjdHVhbCkgeworICAgICAgIHRocm93
IGlkICsgIjogYXNzZXJ0RmFsc2UgZmFpbGVkIjsKKyAgIH0KK30KKworZnVuY3Rpb24gYXNzZXJ0
Tm90TnVsbChpZCwgYWN0dWFsKSB7CisgICBpZiAoYWN0dWFsID09IG51bGwpIHsKKyAgICAgICB0
aHJvdyBpZCArICI6IGFzc2VydE5vdE51bGwgZmFpbGVkIjsKKyAgIH0KK30KKworZnVuY3Rpb24g
ZmFpbChpZCkgeworICAgIHRocm93IGlkICsgIjogZmFpbCI7Cit9CisKKworZnVuY3Rpb24gZ2V0
U3VmZml4KGNvbnRlbnRUeXBlKSB7CisgICAgc3dpdGNoKGNvbnRlbnRUeXBlKSB7CisgICAgICAg
IGNhc2UgInRleHQvaHRtbCI6CisgICAgICAgIHJldHVybiAiLmh0bWwiOworCisgICAgICAgIGNh
c2UgImFwcGxpY2F0aW9uL3hodG1sK3htbCI6CisgICAgICAgIHJldHVybiAiLnhodG1sIjsKKwor
ICAgICAgICBjYXNlICJpbWFnZS9zdmcreG1sIjoKKyAgICAgICAgcmV0dXJuICIuc3ZnIjsKKwor
ICAgICAgICBjYXNlICJ0ZXh0L21hdGhtbCI6CisgICAgICAgIHJldHVybiAiLm1tbCI7CisgICAg
fQorICAgIHJldHVybiAiLnhtbCI7Cit9CisKKworZnVuY3Rpb24gZ2V0UmVzb3VyY2VVUkkobmFt
ZSwgc2NoZW1lLCBjb250ZW50VHlwZSkgeworICAgIHZhciBiYXNlID0gZG9jdW1lbnQuZG9jdW1l
bnRVUkk7CisgICAgaWYgKGJhc2UgPT0gbnVsbCkgeworICAgICAgIGJhc2UgPSAiIjsKKyAgICB9
IGVsc2UgeworCSAgIGJhc2UgPSBiYXNlLnN1YnN0cmluZygwLCBiYXNlLmxhc3RJbmRleE9mKCcv
JykgKyAxKSArICJmaWxlcy8iOworICAgIH0KKyAgICByZXR1cm4gYmFzZSArIG5hbWUgKyBnZXRT
dWZmaXgoY29udGVudFR5cGUpOworfQorCisKKy8vCisvLyAgIGludm9rZSB0ZXN0IHNldHVwCisv
Lworc2V0VXBQYWdlKCk7CisKK3RyeSB7CisJcnVuVGVzdCgpOworCWlmIChidWlsZGVyLmluaXRp
YWxpemF0aW9uRXJyb3IgPT0gbnVsbCkgeworCSAgIGNoYW5nZUNvbG9yKCJncmVlbiIpOworCSAg
IGFkZE1lc3NhZ2UoIjAiLCAiMTIwIiwgZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKVswXSArICI6
IFN1Y2Nlc3MiKTsKKwl9IGVsc2UgeworCQlhZGRNZXNzYWdlKCIwIiwgIjEyMCIsIGV4cG9zZVRl
c3RGdW5jdGlvbk5hbWVzKClbMF0pOworCX0KK30gY2F0Y2goZXgpIHsKKwlhZGRNZXNzYWdlKCIw
IiwgIjEyMCIsIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKClbMF0pOworICAgIGNoYW5nZUNvbG9y
KCJyZWQiKTsKKyAgICBhZGRNZXNzYWdlKCIwIiwgIjE0MCIsIGV4KTsgICAgCit9ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBh
dGgvVGV4dF9Ob2Rlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZl
bDMveHBhdGgvVGV4dF9Ob2Rlcy5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20v
c3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NU
WVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisg
ICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJU
ZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxl
bWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZ
IGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQor
ICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAg
PCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFU
SU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBs
b3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3Jp
cHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAj
RklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQor
ICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQor
ICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBD
REFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAx
Li0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIw
IiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iVGV4dF9Ob2Rlcy5qcyIvPg0KKzxzY3JpcHQg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0K
KyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUv
TGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAg
PG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bv
c2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRl
cj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwt
MS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0
eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFj
ZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3Np
dGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDQ8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRpb24+
UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxhcnk+
DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIg
c3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAw
MDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMi
PjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX2RvY3VtZW50RWxlbWVudC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2IEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAy
MDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0
aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJ
bmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0
cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNv
ZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJy
YW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHly
aWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBu
YW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBh
dGhFeHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudCddOworfQorCit2YXIgZG9jc0xv
YWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAg
IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmln
dXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2Fk
aW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQg
dG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICBy
YWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBz
ZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgewor
ICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhy
b3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVp
bGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1Jl
ZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgewor
ICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0g
cHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAo
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAg
ICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3Io
YnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30K
KworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBv
ZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4K
Ky8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21w
bGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0
aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxv
YWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0
VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqICAgICAgIAor
ICAgICAgVGVzdCBpZiBYUGF0aEV4cHJlc3Npb24uZXZhbHVhdGUgcmV0dXJucyBub24tbnVsbCBy
ZXN1bHQKKyAgICAgIHVzaW5nIERvY3VtZW50LmRvY3VtZW50RWxlbWVudCBhcyBjb250ZXh0Tm9k
ZS4KKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAYXV0aG9yIEJvYiBD
bGFyeQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFeHByZXNzaW9uLWV2YWx1YXRlCisqIEBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNY
UGF0aEV2YWx1YXRvci1jcmVhdGVFeHByZXNzaW9uCisqLworZnVuY3Rpb24gWFBhdGhFeHByZXNz
aW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudCgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlm
KGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9k
b2N1bWVudEVsZW1lbnQiKSAhPSBudWxsKSByZXR1cm47CisgICAgdmFyIGRvYzsKKyAgICAgIHZh
ciB4cEV2YWx1YXRvcjsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAg
IHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciB4cGF0aFJlc3VsdDsKKyAgICAgIHZhciBudWxs
UmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIHhwYXRoRXhwcmVzc2lvbjsKKyAgICAgIHZhciBl
eHByZXNzaW9uID0gIi8iOworICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAg
IGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9
IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3Rh
ZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOwor
Y29udGV4dE5vZGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICB4cGF0aEV4cHJlc3Np
b24gPSB4cEV2YWx1YXRvci5jcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sbnVsbE5TUmVzb2x2
ZXIpOworICAgICAgeHBhdGhSZXN1bHQgPSB4cGF0aEV4cHJlc3Npb24uZXZhbHVhdGUoY29udGV4
dE5vZGUsMCxudWxsUmVzdWx0KTsKKyAgICAgIGFzc2VydE5vdE51bGwoIm5vdG51bGwiLHhwYXRo
UmVzdWx0KTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgWFBhdGhFeHBy
ZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudCgpOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VS
Ui5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNFX0VSUi5zdmcJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9O
QU1FU1BBQ0VfRVJSLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMg
IlNUQUZGIiAic3RhZmZOUy5kdGQiIA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAg
PCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4
YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54
eXouY29tJz5FbGVtZW50IGRhdGE8L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0K
KyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBu
b3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5v
dGF0aW9uMj4NCisgICA8IUVOVElUWSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2Fy
ZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0K
KyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFF
TEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95
ZWUqKT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisg
ICA8IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENE
QVRBICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RB
VEEgI1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVO
VCBzY3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBM
SUVEPiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93
d3cubmlzdC5nb3YiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+
DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9OQU1FU1BBQ0VfRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cu
dXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+
TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9u
PiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGgg
QXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1w
bG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RB
VEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAm
ZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRo
IGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3Jl
dGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5G
ZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
WWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+
DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisg
Sm9uZXM8L25hbWU+DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4N
CisgIDxzYWxhcnk+MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJ
cnZpbmcsIHRleGFzIDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxv
eWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cu
YWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVl
SWQ+DQorICA8bm06bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9u
PlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAw
PC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVt
cDphZGRyZXNzIGVtcDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJD
QU5BREEiIGVtcDpsb2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1
NTY8L2VtcDphZGRyZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVt
cDI9Imh0dHA6Ly93d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RP
TS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1w
bG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21w
dXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQor
ICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1
ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRl
c3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yQ2FzdDAxLnN2Zwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvckNh
c3QwMS5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvckNhc3QwMS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBz
dmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFFTlRJVFkgZW50MSAi
ZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZ
IGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudDEgeG1sbnM6bG9j
YWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48P1BJdGFyZ2V0IFBJ
ZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5Rmls
ZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElDICJ1cmkiICJmaWxl
IiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRpdHkgc2hvdWxk
IGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElDICJub3RhdGlv
bjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0aW9uMkZpbGUi
Pg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrLCBlbXA6ZW1wbG95
ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAj
RklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lN
UExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQor
ICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQor
ICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBD
REFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAx
Li0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpuaXN0
PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHNyYz0iWFBhdGhFdmFsdWF0b3JDYXN0MDEuanMiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHht
bG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29t
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJl
dCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAg
ICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2Vu
ZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERh
bGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlz
IGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11d
Pg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZl
cmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZl
bnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxl
bXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwv
bmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywg
dGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1s
bnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlz
dGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5FTVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisg
IDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFtZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29u
bmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQorICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpz
YWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJl
c3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIg
ZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9hZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1w
OmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0
cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3Qt
U3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlk
Pg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNw
ZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5k
ZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8v
d3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfSUQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfSUQuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9JRC5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydDb25mb3Jt
YW5jZV9JRCddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIg
PSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGlu
ZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLwor
Ly8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25v
dXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRo
ZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24g
aXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBv
ZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0
dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVz
dCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1
aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0g
MDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRo
aXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAg
ICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAiaW50ZXJu
YWxkdGQiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAgIH0gY2F0Y2goZXgpIHsK
KyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4KTsKKyAgICAgICAgc2V0
VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLworLy8gICBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAgIGVhY2ggYXN5Y2hyb25v
dXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBXaGVuIGV2ZXJ5IHN5bmNo
cm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8gICAgICB0aGUgcGFnZSBz
dGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAgIGJvZHkgb2YgdGhlIHRl
c3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUoKSB7CisgICAgaWYgKCsr
ZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1cyA9ICdjb21wbGV0ZSc7
CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIDEuMyBDb25mb3JtYW5jZSAtIENoZWNrIHRo
YXQgdGhlIGVsZW1lbnQgcmV0dXJuZWQgYnkgWFBhdGggaWQoKSBmdW5jdGlvbgorICAgICAgcmV0
dXJucyB0aGUgc2FtZSBlbGVtZW50IGFzIERvY3VtZW50LmdldEVsZW1lbnRCeUlkCisgICAgCisq
IEBhdXRob3IgQm9iIENsYXJ5CisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNDb25mb3JtYW5jZQorKiBAc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgj
WFBhdGhFdmFsdWF0b3IKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1M
ZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWNyZWF0ZU5TUmVzb2x2
ZXIKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoTlNSZXNvbHZlcgorKiBAc2VlIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0
b3ItZXZhbHVhdGUKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZl
bC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoUmVzdWx0LWl0ZXJhdGVOZXh0CisqLworZnVu
Y3Rpb24gQ29uZm9ybWFuY2VfSUQoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0lu
aXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25mb3JtYW5jZV9JRCIpICE9IG51bGwpIHJldHVybjsK
KyAgICB2YXIgQU5ZX1RZUEUgPSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAg
IHZhciBTVFJJTkdfVFlQRSA9IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAg
IHZhciBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSA9IDY7CisgICAgICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3Owor
ICAgICAgdmFyIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9P
UkRFUkVEX05PREVfVFlQRSA9IDk7CisgICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVy
OworICAgICAgdmFyIGV2YWx1YXRvcjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZh
ciBpbnJlc3VsdCA9IG51bGw7CisKKyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAg
ICB2YXIgZXhwcmVzc2lvbiA9ICJpZCgnY2hpbGQxJykiOworICAgICAgdmFyIHhwYXRoVHlwZSA9
IEFOWV9UWVBFOworICAgICAgdmFyIG91dE5vZGU7CisgICAgICB2YXIgY2hpbGQxRWxlbWVudDsK
KyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMu
ZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAg
IH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9jIiwgImludGVybmFsZHRkIik7CisgICAg
ICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcmVzb2x2ZXIgPSBldmFs
dWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29udGV4dE5vZGUgPSAgZG9jOwor
b3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Npb24sY29udGV4dE5vZGUscmVz
b2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIG91dE5vZGUgPSBvdXRyZXN1bHQuaXRl
cmF0ZU5leHQoKTsKKyAgICAgIGNoaWxkMUVsZW1lbnQgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImNo
aWxkMSIpOworICAgICAgYXNzZXJ0U2FtZSgiUzEuMy1Db25mb3JtYW5jZS1JRCIsY2hpbGQxRWxl
bWVudCxvdXROb2RlKTsKKworfQorCisKKworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgQ29u
Zm9ybWFuY2VfSUQoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9j
cmVhdGVOU1Jlc29sdmVyX2FsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVy
X2FsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAg
S0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09M
SURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4w
MCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAs
MCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUg
MzA0eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzA0OiAiWFBhdGhFdmFs
dWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGw6IFN1Y2Nlc3MiCkluZGV4OiBMYXlvdXRUZXN0cy9k
b20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9udWxsLnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9p
c1N1cHBvcnRlZF9udWxsLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGwuc3ZnCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElE
QVRBPz4NCis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiU1RBRkYiICJzdGFmZk5TLmR0ZCIgDQorWw0K
KyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxhcyBS
b2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAiPGVu
dEVsZW1lbnQxIHhtbG5zOmxvY2FsMT0nd3d3Lnh5ei5jb20nPkVsZW1lbnQgZGF0YTwvZW50RWxl
bWVudDE+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVu
dGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQ2
IFBVQkxJQyAidXJpIiAiZmlsZSIgTkRBVEEgbm90YXRpb24yPg0KKyAgIDwhRU5USVRZIGVudDEg
IlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lT
VEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVt
cGxveWVlKywgZW1wOmVtcGxveWVlLCBlbXBsb3llZSopPg0KKyAgIDwhQVRUTElTVCBzdmcgDQor
ICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisg
ICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAg
IDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFU
QSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQg
Q0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFU
VExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMg
aXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyIgeG1sbnM6bmlzdD0iaHR0cDovL3d3dy5uaXN0LmdvdiI+PHJlY3QgeD0iMCIgeT0i
MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IkNvbmZvcm1hbmNlX2lzU3VwcG9ydGVkX251bGwuanMi
Lz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2
Z3VuaXQuanMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4bWxu
czpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29tIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+
QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0
aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQor
IDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy51c2EuY29t
IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0
aGEgUmF5bm9sZHMNCis8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5
UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNl
bnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+
DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9z
YWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9t
ZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwv
YWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRwOi8v
d3d3Lm5ldHplcm8uY29tIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1T
dWl0ZS9MZXZlbC0yL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDM8L2VtcGxveWVlSWQ+
DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxwb3NpdGlvbj5EZXBhcnRtZW50
IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAwPC9zYWxhcnk+DQorICA8Z2Vu
ZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG1zdGM6ZG9tZXN0aWM9IlllcyIgc3Ry
ZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXA6ZW1wbG95ZWUgeG1sbnM6ZW1wPSJodHRwOi8vd3d3Lm5pc3QuZ292IiB4
bWxuczpubT0iaHR0cDovL3d3dy5hbHRhdmlzdGEuY29tIiA+ICAgIDxlbXA6ZW1wbG95ZWVJZD5F
TVAwMDA0PC9lbXA6ZW1wbG95ZWVJZD4NCisgIDxubTpuYW1lPkplbnkgT2Nvbm5vcjwvbm06bmFt
ZT4NCisgIDxlbXA6cG9zaXRpb24+UGVyc29ubmVsIERpcmVjdG9yPC9lbXA6cG9zaXRpb24+DQor
ICA8ZW1wOnNhbGFyeT45NSwwMDA8L2VtcDpzYWxhcnk+DQorICA8ZW1wOmdlbmRlcj5GZW1hbGU8
L2VtcDpnZW5kZXI+DQorICA8ZW1wOmFkZHJlc3MgZW1wOmRvbWVzdGljPSJZZXMiIHN0cmVldD0i
WSZlbnQxOyIgZW1wOnpvbmU9IkNBTkFEQSIgZW1wOmxvY2FsMT0iVFJVRSI+MjcgU291dGggUm9h
ZC4gRGFsbGFzLCB0ZXhhcyA5ODU1NjwvZW1wOmFkZHJlc3M+DQorIDwvZW1wOmVtcGxveWVlPg0K
KyA8ZW1wbG95ZWUgeG1sbnM6ZW1wMj0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1w
bG95ZWVJZD5FTVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1l
Pg0KKyAgPHBvc2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFy
eT45MCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mg
c3RyZWV0PSJZZXMiIHhtbG5zPSJodHRwOi8vd3d3Lm5pc3QuZ292Ij4xODIxIE5vcmRpYy4gUm9h
ZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4N
CisgDQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
c3RyaW5nVmFsdWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3N0cmluZ1ZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgICBLQ2FudmFzQ29udGFpbmVyIHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEw
MAorICAgICAgS0NhbnZhc0l0ZW0ge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17
W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCww
LjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgUmVuZGVyU1ZHVGV4dCB7dGV4
dH0gYXQgKDAsMCkgc2l6ZSA3ODV4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMTYxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTYxOiAi
WFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAo
MCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAzMjJ4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMjI6ICJzYW1lOiBh
c3NlcnRFcXVhbHMgZmFpbGVkLCBhY3R1YWwgLCBleHBlY3RlZCA1NiwwMDAuIgpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1w
dHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29u
Zm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHkuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eS5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEt
MjAwNCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0
ZSBvZiBUZWNobm9sb2d5LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9y
bWF0aWNzIGFuZCBNYXRoZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJl
c2VydmVkLiBUaGlzIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdh
cmUgTGljZW5zZSBbMV0gaW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
CisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0
LXNvZnR3YXJlLTIwMDIxMjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVz
CitmdW5jdGlvbiBleHBvc2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydDb25mb3Jt
YW5jZV9pc1N1cHBvcnRlZF9lbXB0eSddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAw
OwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRl
c3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRp
b25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQu
ICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5k
IHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRl
cmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7Cisg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLworICAgICAv
LyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisg
ICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAg
ICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAg
ICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYg
PSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYs
ICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAx
KSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBj
YXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOwor
ICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAg
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFj
aCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4g
ZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAg
IHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9k
eSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsK
KyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0g
J2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgICAgMS4zIENvbmZvcm1hbmNl
IC0gVGhlICJmZWF0dXJlIiBwYXJhbWV0ZXIgaW4gdGhlIAorICAgICAgIk5vZGUuaXNTdXBwb3J0
ZWQoZmVhdHVyZSx2ZXJzaW9uKSIKKyAgICAgIG1ldGhvZCBpcyB0aGUgbmFtZSBvZiB0aGUgZmVh
dHVyZSBhbmQgdGhlIHZlcnNpb24gaXMgdGhlIHZlcnNpb24KKyAgICAgIG51bWJlciBvZiB0aGUg
ZmVhdHVyZSB0byB0ZXN0LiAgWFBhdGggaXMgdGhlIGxlZ2FsIHZhbHVlIGZvciB0aGUKKyAgICAg
IFhQYXRoIG1vZHVsZS4gIFRoZSBtZXRob2Qgc2hvdWxkIHJldHVybiAidHJ1ZSIuCisgICAgICAK
KyAgICAgIFJldHJpZXZlIHRoZSBET00gZG9jdW1lbnQgb24gd2hpY2ggdGhlCisgICAgICAiaXNT
dXBwb3J0ZWQoZmVhdHVyZSx2ZXJzaW9uKSIgbWV0aG9kIGlzIGludm9rZWQgd2l0aCAiZmVhdHVy
ZSIKKyAgICAgIGVxdWFsIHRvICJYUGF0aCIgYW5kIHZlcnNpb24gdG8gdGhlIGVtcHR5IHN0cmlu
ZyAiIi4gIFRoZSBtZXRob2QgCisgICAgICBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiAidHJ1ZSIg
aWYgdGhlIGltcGxlbWVudGF0aW9uIGNsYWltcyBzdXBwb3J0IAorICAgICAgZm9yIHNvbWUgdmVy
c2lvbiBmb3IgWFBhdGguCisgICAgCisqIEBhdXRob3IgUGhpbGlwcGUgTGUgSMOpZ2FyZXQKKyog
QGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURP
TS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI0NvbmZvcm1hbmNlCisqLworZnVuY3Rpb24g
Q29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHkoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBp
ZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxkZXIsICJDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF9l
bXB0eSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHN0YXRlOwor
ICAgICAgCisgICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5k
b2MpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAg
fQorICAgICAgZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgc3Rh
dGUgPSBkb2MuaXNTdXBwb3J0ZWQoInhwQVRIIiwiIik7CisgICAgICBhc3NlcnRUcnVlKCJpc1N1
cHBvcnRlZC1YUGF0aC1lbXB0eSIsc3RhdGUpOworCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICBDb25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eSgpOworfQpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5W
QUxJRF9FWFBSRVNTSU9OX0VSUi5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfSU5WQUxJRF9FWFBSRVNTSU9O
X0VSUi5zdmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLnN2ZwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNU
WUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQi
IA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBE
YWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVu
dDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVC
TElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJ
VFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2Ny
aXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qg
c3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBU
WT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAg
aGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0K
KyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEt
LSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9
IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9J
TlZBTElEX0VYUFJFU1NJT05fRVJSLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQor
ICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFy
dGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAg
DQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMs
IFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9l
bXBsb3llZUlkPg0KKyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBh
IENEQVRBU2VjdGlvbiB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8
IVtDREFUQVtUaGlzIGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNl
IHRvIGEgdGFiICZ0YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRl
cj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50Mjsg
RGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxuczpkbXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95
ZWVJZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+
DQorICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+
MTAwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFz
IDk4NTUzPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVt
cD0iaHR0cDovL3d3dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNv
bSIgPiAgICA8ZW1wOmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06
bmFtZT5KZW55IE9jb25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBE
aXJlY3RvcjwvZW1wOnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5
Pg0KKyAgPGVtcDpnZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVt
cDpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDps
b2NhbDE9IlRSVUUiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRy
ZXNzPg0KKyA8L2VtcDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFs
aXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1h
bGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4N
CisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTgwIEBACisKKy8qCitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29y
bGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCisoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVj
aG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2ggQ29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBh
bmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4g
VGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vu
c2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gCit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0g
aHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2Fy
ZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBvc2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rp
b24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMoKQoreworcmV0dXJuIFsnWFBhdGhSZXN1bHRfaXRl
cmF0b3JOZXh0X09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFJ107Cit9CisKK3ZhciBkb2NzTG9h
ZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8vICAgICAg
cnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBjb25maWd1
cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50IGxvYWRp
bmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlzIHNldCB0
byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAgICAgIHJh
aXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0aW9uIHNl
dFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRyeSB7Cisg
ICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1heSB0aHJv
dyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3VyZWRCdWls
ZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIgZG9jUmVm
ID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRlZCArPSBw
cmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgICAKKyAgICAgICBpZiAoZG9j
c0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICAg
ICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRpYWxpemF0aW9uRXJyb3IoYnVp
bGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUnOworICAgIH0KK30KKwor
CisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgY29tcGxldGlvbiBvZiAK
Ky8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQgaW4gc2V0VXBUZXN0cy4KKy8v
CisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRvY3VtZW50IGhhcyBjb21wbGV0
ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2VkIHdoaWNoIGFsbG93cyB0aGUK
Ky8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRlZC4KK2Z1bmN0aW9uIGxvYWRD
b21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgc2V0VXBQ
YWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworLyoqCisqIAorICAgIENyZWF0
ZSBhbiBYUGF0aFJlc3VsdCBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSBYUGF0aFJlc3VsdFR5
cGUgZm9yIAorICAgIGV4cHJlc3Npb24gL3N0YWZmL2VtcGxveWVlL2VtcGxveWVlSWQvdGV4dCgp
IGNoZWNraW5nIHRoYXQ6CisgICAgWFBhdGhSZXN1bHQuaXRlcmF0b3JOZXh0IHJldHVybnMgdGhl
IG5vZGVzIGluIGRvY3VtZW50IG9yZGVyLAorICAgIGFuZCB0aGF0IHRoZSBjb3JyZWN0IG51bWJl
ciBpcyByZXR1cm5lZC4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQ
YXRoUmVzdWx0LWl0ZXJhdG9yTmV4dAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMv
Q1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhSZXN1bHQKKyogQHNlZSBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hw
YXRoI1hQYXRoUmVzdWx0VHlwZQorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1It
RE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlTlNS
ZXNvbHZlcgorKi8KK2Z1bmN0aW9uIFhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRSgpIHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlh
bGl6YXRpb24oYnVpbGRlciwgIlhQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRSIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUgPSAwOwor
ICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9IDI7Cisg
ICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7
CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAgICB2YXIg
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9SREVSRURf
Tk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7Cisg
ICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1YXRvcjsK
KyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7CisKKyAg
ICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICIvc3Rh
ZmYvZW1wbG95ZWUvZW1wbG95ZWVJZC90ZXh0KCkiOworICAgICAgdmFyIHhwYXRoVHlwZSA9IE9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOworICAgICAgdmFyIG91dE5vZGU7CisgICAgICB2YXIg
aW5kZXg7CisgICAgICB2YXIgdGV4dDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7
CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBk
b2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvYyA9IGxvYWQoZG9jUmVmLCAiZG9j
IiwgInN0YWZmIik7CisgICAgICBldmFsdWF0b3IgPSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2Mp
OworcmVzb2x2ZXIgPSBldmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihkb2MpOworICAgICAgY29u
dGV4dE5vZGUgPSAgZG9jOworb3V0cmVzdWx0ID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHJlc3Np
b24sY29udGV4dE5vZGUscmVzb2x2ZXIseHBhdGhUeXBlLGlucmVzdWx0KTsKKyAgICAgIGluZGV4
ID0gMDsKK291dE5vZGUgPSBvdXRyZXN1bHQuaXRlcmF0ZU5leHQoKTsKKyAgICAgIAorICAgIHdo
aWxlKAorCQorCShvdXROb2RlICE9IG51bGwpCisKKwkpIHsKKwl0ZXh0ID0gb3V0Tm9kZS5kYXRh
OworCisgICAgICAKKwlpZigKKwkoMCA9PSBpbmRleCkKKwkpIHsKKwlhc3NlcnRFcXVhbHMoImZp
cnN0IiwiRU1QMDAwMSIsdGV4dCk7CisgICAgICAgCisJfQorCQorCWlmKAorCSgxID09IGluZGV4
KQorCSkgeworCWFzc2VydEVxdWFscygic2Vjb25kIiwiRU1QMDAwMiIsdGV4dCk7CisgICAgICAg
CisJfQorCQorCWlmKAorCSgyID09IGluZGV4KQorCSkgeworCWFzc2VydEVxdWFscygidGhpcmQi
LCJFTVAwMDAzIix0ZXh0KTsKKyAgICAgICAKKwl9CisJCisJaWYoCisJKDMgPT0gaW5kZXgpCisJ
KSB7CisJYXNzZXJ0RXF1YWxzKCJmb3VydGgiLCJFTVAwMDA0Iix0ZXh0KTsKKyAgICAgICAKKwl9
CisJCisJaWYoCisJKDQgPT0gaW5kZXgpCisJKSB7CisJYXNzZXJ0RXF1YWxzKCJmaWZ0aCIsIkVN
UDAwMDUiLHRleHQpOworICAgICAgIAorCX0KKwlpbmRleCArPSAxOworb3V0Tm9kZSA9IG91dHJl
c3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgCisJfQorYXNzZXJ0RXF1YWxzKCJjb3VudCIsNSxp
bmRleCk7CisgICAgICAgCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0
aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUoKTsKK30KSW5k
ZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFs
dWF0ZV9XUk9OR19ET0NVTUVOVF9FUlItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9XUk9O
R19ET0NVTUVOVF9FUlItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VN
RU5UX0VSUi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK2xheWVy
IGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAg
ICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBl
PVNPTElEXSBbY29sb3I9I0ZGRkYwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwx
MDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0
ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDQ3NngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ3NjogIlRlc3Rz
IHdpdGggbXVsdGlwbGUgbG9hZHMgb2YgZGlmZmVyZW50IGRvY3VtZW50cyBhcmUgbm90IGN1cnJl
bnRseSBzdXBwb3J0ZWQiCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXpl
IDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzODF4MTgK
KyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzODE6ICJYUGF0aEV4cHJlc3Npb25f
ZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVSX1RZUEUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWlu
ZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0g
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBd
fV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4w
MCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOTJ4MTgKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTI6ICJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JT
dGF0ZV9OVU1CRVJfVFlQRTogU3VjY2VzcyIKSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8w
MS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAxLnN2ZwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMS5zdmcJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0K
KzwhRE9DVFlQRSBzdmcgUFVCTElDICJTVEFGRiIgInN0YWZmTlMuZHRkIiANCitbDQorICAgPCFF
TlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0K
KyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVu
dDEgeG1sbnM6bG9jYWwxPSd3d3cueHl6LmNvbSc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50MT48
P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJ
IiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDYgUFVCTElD
ICJ1cmkiICJmaWxlIiBOREFUQSBub3RhdGlvbjI+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBl
bnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVC
TElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5v
dGF0aW9uMkZpbGUiPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUr
LCBlbXA6ZW1wbG95ZWUsIGVtcGxveWVlKik+DQorICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4
bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5h
bWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRM
SVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisgICAgICB5IENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAj
UkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBz
Y3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21t
ZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IiB4bWxuczpuaXN0PSJodHRwOi8vd3d3Lm5pc3QuZ292Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiIHNyYz0iWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BB
Q0VfRVJSXzAxLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy5u
aXN0LmdvdiIgeG1sbnM6ZG1zdGM9Imh0dHA6Ly93d3cudXNhLmNvbSI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0K
KyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5
PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNz
IGRtc3RjOmRvbWVzdGljPSJZZXMiPjEyMzAgTm9ydGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUx
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6ZG1zdGM9Imh0dHA6
Ly93d3cudXNhLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+TWFydGhhIFJheW5vbGRzDQorPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlv
biB3aXRoIEVudGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlz
IGlzIGFuIGFkamFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0
YWI7XV0+PC9uYW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2Fs
YXJ5PjM1LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRy
ZXNzIGRtc3RjOmRvbWVzdGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50
MzsNCisgOTg1NTQ8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczpk
bXN0Yz0iaHR0cDovL3d3dy5uZXR6ZXJvLmNvbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMi9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAz
PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQorICA8cG9zaXRp
b24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAwLDAwMDwvc2Fs
YXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRtc3RjOmRvbWVz
dGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9hZGRy
ZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wOmVtcGxveWVlIHhtbG5zOmVtcD0iaHR0cDovL3d3
dy5uaXN0LmdvdiIgeG1sbnM6bm09Imh0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbSIgPiAgICA8ZW1w
OmVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wOmVtcGxveWVlSWQ+DQorICA8bm06bmFtZT5KZW55IE9j
b25ub3I8L25tOm5hbWU+DQorICA8ZW1wOnBvc2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvZW1w
OnBvc2l0aW9uPg0KKyAgPGVtcDpzYWxhcnk+OTUsMDAwPC9lbXA6c2FsYXJ5Pg0KKyAgPGVtcDpn
ZW5kZXI+RmVtYWxlPC9lbXA6Z2VuZGVyPg0KKyAgPGVtcDphZGRyZXNzIGVtcDpkb21lc3RpYz0i
WWVzIiBzdHJlZXQ9IlkmZW50MTsiIGVtcDp6b25lPSJDQU5BREEiIGVtcDpsb2NhbDE9IlRSVUUi
PjI3IFNvdXRoIFJvYWQuIERhbGxhcywgdGV4YXMgOTg1NTY8L2VtcDphZGRyZXNzPg0KKyA8L2Vt
cDplbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmVtcDI9Imh0dHA6Ly93d3cubmlzdC5nb3Yi
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVy
dCBNeWVyczwvbmFtZT4NCisgIDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+OTAsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4N
CisgIDxhZGRyZXNzIHN0cmVldD0iWWVzIiB4bWxucz0iaHR0cDovL3d3dy5uaXN0LmdvdiI+MTgy
MSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3ll
ZT4NCisgPC9zdmc+DQorIA0KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUu
c3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuc3ZnCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1
bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5zdmcJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlM
RSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBzdmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVO
VElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQor
ICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50
IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQgZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0
YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIg
TkRBVEEgbm90YXRpb24xPg0KKyAgIDwhRU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBi
ZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24x
RmlsZSI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4N
CisgICA8IUFUVExJU1QgZW1wbG95ZWUgeG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBlbXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQor
ICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisg
ICAgICBuYW1lIENEQVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAg
IDwhQVRUTElTVCByZWN0IA0KKyAgICAgIHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFU
QSAjUkVRVUlSRUQNCisgICAgICB3aWR0aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQg
Q0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFU
VExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEgI0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMg
aXMgY29tbWVudCBudW1iZXIgMS4tLT4NCis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVz
dWx0X3NuYXBzaG90TGVuZ3RoX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuanMiLz4NCis8
c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9InN2Z3VuaXQu
anMiLz4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0
LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMTwvZW1wbG95ZWVJ
ZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4NCisgIDxwb3NpdGlvbj5BY2NvdW50
YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFyeT41NiwwMDA8L3NhbGFyeT4NCisg
IDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIj4xMjMw
IE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPk1hcnRoYSBSYXlub2xkczwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rpb24gd2l0
aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhpcyBpcyBh
biBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAmdGFiO11d
PjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4z
NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVudDM7DQorIDk4NTU0
PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJ
ZD5FTVAwMDAzPC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9nZXINCisgSm9uZXM8L25hbWU+DQor
ICA8cG9zaXRpb24+RGVwYXJ0bWVudCBNYW5hZ2VyPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MTAw
LDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj4mZW50NDs8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRv
bWVzdGljPSJZZXMiIHN0cmVldD0iTm8iPlBPIEJveCAyNyBJcnZpbmcsIHRleGFzIDk4NTUzPC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA0PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+SmVueSBPY29ubm9yPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPlBlcnNvbm5lbCBEaXJlY3RvcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5Pjk1LDAwMDwv
c2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGlj
PSJZZXMiIHN0cmVldD0iWSZlbnQxOyI+MjcgU291dGggUm9hZC4gRGFsbGFzLCBUZXhhcyA5ODU1
NjwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwNTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvYmVydCBNeWVyczwvbmFtZT4NCisg
IDxwb3NpdGlvbj5Db21wdXRlciBTcGVjaWFsaXN0PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTAs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPm1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIHN0cmVl
dD0iWWVzIj4xODIxIE5vcmRpYy4gUm9hZCwgSXJ2aW5nIFRleGFzIDk4NTU4PC9hZGRyZXNzPg0K
KyA8L2VtcGxveWVlPg0KKyA8L3N2Zz4NCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RF
TSAic3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVu
dDIgIjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8
IUVOVElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2Vu
dEVsZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMg
ImVudGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBl
bnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5v
dGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24y
IFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENE
QVRBICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUr
KT4NCisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8
IUVMRU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRB
ICNSRVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEg
I1JFUVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBz
Y3JpcHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVE
PiAgICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisg
IDxlbXBsb3llZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0
aW48L25hbWU+DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICAN
CisgIDxzYWxhcnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0K
KyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMg
OTg1NTE8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBs
b3llZUlkPkVNUDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtD
REFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAy
ICZlbnQyO11dPg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdp
dGggYSByZWZlcmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2Vj
cmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVy
PkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMi
PiZlbnQyOyBEYWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4N
CisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRl
L0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisg
IDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFu
YWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+
JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5Q
TyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisg
PGVtcGxveWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xl
dmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxu
YW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8
L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxl
PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3
IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+
DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0
ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQor
ICA8bmFtZT5Sb2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lh
bGlzdDwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5t
YWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQs
IElydmluZyBUZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJ
bmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JDYXN0
MDEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFdmFsdWF0b3JDYXN0MDEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvckNhc3QwMS5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDIgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRlIFdl
YiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBF
dXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRoZW1h
dGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdvcmsg
aXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0gaW4g
dGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8vd3d3
LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMx
CisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBvc2VU
ZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvckNhc3QwMSddOwor
fQorCit2YXIgZG9jc0xvYWRlZCA9IC0xMDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisv
LworLy8gICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsg
YmVmb3JlCisvLyAgICAgIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVy
ZSBhcmUgbm8gY29uZmlndXJhdGlvbiBleGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAg
ICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8v
ICAgICAgICBpcyBzZXQgdG8gY29tcGxldGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRl
bHkKKy8vICAgICAgICByYWlzZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4K
Ky8vCitmdW5jdGlvbiBzZXRVcFBhZ2UoKSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmlu
Zyc7CisgICB0cnkgeworICAgICAvLworICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBi
dWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVh
dGVDb25maWd1cmVkQnVpbGRlcigpOworCisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAor
ICAgICAgdmFyIGRvY1JlZiA9IG51bGw7CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAn
dW5kZWZpbmVkJykgeworICAgICAgICBkb2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAg
IGRvY3NMb2FkZWQgKz0gcHJlbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAg
ICAKKyAgICAgICBpZiAoZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgICAgc2V0VXBQYWdlID0g
J2NvbXBsZXRlJzsKKyAgICAgICB9CisgICAgfSBjYXRjaChleCkgeworICAgIAljYXRjaEluaXRp
YWxpemF0aW9uRXJyb3IoYnVpbGRlciwgZXgpOworICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxl
dGUnOworICAgIH0KK30KKworCisKKy8vCisvLyAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0
aGUgY29tcGxldGlvbiBvZiAKKy8vICAgICAgZWFjaCBhc3ljaHJvbm91cyBsb2FkIHN0YXJ0ZWQg
aW4gc2V0VXBUZXN0cy4KKy8vCisvLyAgIFdoZW4gZXZlcnkgc3luY2hyb25vdXMgbG9hZGVkIGRv
Y3VtZW50IGhhcyBjb21wbGV0ZWQsCisvLyAgICAgIHRoZSBwYWdlIHN0YXR1cyBpcyBjaGFuZ2Vk
IHdoaWNoIGFsbG93cyB0aGUKKy8vICAgICAgYm9keSBvZiB0aGUgdGVzdCB0byBiZSBleGVjdXRl
ZC4KK2Z1bmN0aW9uIGxvYWRDb21wbGV0ZSgpIHsKKyAgICBpZiAoKytkb2NzTG9hZGVkID09IDEp
IHsKKyAgICAgICAgc2V0VXBQYWdlU3RhdHVzID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKwor
LyoqCisqIAorQSBkb2N1bWVudCBpcyBjcmVhdGVkIHVzaW5nIGltcGxlbWVudGF0aW9uLmNyZWF0
ZURvY3VtZW50IGFuZCAKK2Nhc3QgdG8gYSBYUGF0aEV2YWx1YXRvciBpbnRlcmZhY2UuCisKKyog
QGF1dGhvciBQaGlsaXBwZSBMZSBIw6lnYXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3IK
KyovCitmdW5jdGlvbiBYUGF0aEV2YWx1YXRvckNhc3QwMSgpIHsKKyAgIHZhciBzdWNjZXNzOwor
ICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwgIlhQYXRoRXZhbHVhdG9yQ2FzdDAx
IikgIT0gbnVsbCkgcmV0dXJuOworICAgIHZhciBkb2M7CisgICAgICB2YXIgeHBFdmFsdWF0b3I7
CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlz
LmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAg
ICB9CisgICAgICBkb2MgPSBsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICB4
cEV2YWx1YXRvciA9IGNyZWF0ZVhQYXRoRXZhbHVhdG9yKGRvYyk7Cithc3NlcnROb3ROdWxsKCJu
b3RudWxsIix4cEV2YWx1YXRvcik7CisKK30KKworCisKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgIFhQYXRoRXZhbHVhdG9yQ2FzdDAxKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRV9jb3VudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VOT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEVfY291bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX1VO
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEVfY291bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVy
Q2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30g
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSNGRjAwMDBdfV0gW2RhdGE9
Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAg
ICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1MjB4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCA1MjA6ICJYUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRV9jb3VudCIKKyAgICAgIFJlbmRlclNWR1RleHQge3RleHR9IGF0ICgw
LDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDE3OHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDE3ODogIm5vdG51bGw6
IGFzc2VydE5vdE51bGwgZmFpbGVkIgpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGwuc3ZnCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0
ZU5TUmVzb2x2ZXJfYWxsLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfYWxsLnN2ZwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PD9URVNULVNU
WUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIlNUQUZGIiAic3RhZmZOUy5kdGQi
IA0KK1sNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFFTlRJVFkgZW50MiAiMTkwMCBE
YWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMiPg0KKyAgIDwhRU5USVRZIGVu
dDQgIjxlbnRFbGVtZW50MSB4bWxuczpsb2NhbDE9J3d3dy54eXouY29tJz5FbGVtZW50IGRhdGE8
L2VudEVsZW1lbnQxPjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVC
TElDICJlbnRpdHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJ
VFkgZW50NiBQVUJMSUMgInVyaSIgImZpbGUiIE5EQVRBIG5vdGF0aW9uMj4NCisgICA8IUVOVElU
WSBlbnQxICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9O
IG5vdGF0aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRp
b24yIFNZU1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2Ny
aXB0LCBlbXBsb3llZSssIGVtcDplbXBsb3llZSwgZW1wbG95ZWUqKT4NCisgICA8IUFUVExJU1Qg
c3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVMRU1FTlQgcmVjdCBFTVBU
WT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNSRVFVSVJFRA0KKyAgICAg
IHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAg
aGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0K
KyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAgICAgIA0KK10+DQorPCEt
LSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHhtbG5zOm5pc3Q9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjxyZWN0IHg9
IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJYUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jl
c29sdmVyX2FsbC5qcyIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIvPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cu
bmlzdC5nb3YiIHhtbG5zOmRtc3RjPSJodHRwOi8vd3d3LnVzYS5jb20iPg0KKyAgPGVtcGxveWVl
SWQ+RU1QMDAwMTwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPk1hcmdhcmV0IE1hcnRpbjwvbmFtZT4N
CisgIDxwb3NpdGlvbj5BY2NvdW50YW50PC9wb3NpdGlvbj4gICAgICAgICAgIA0KKyAgPHNhbGFy
eT41NiwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVz
cyBkbXN0Yzpkb21lc3RpYz0iWWVzIj4xMjMwIE5vcnRoIEF2ZS4gRGFsbGFzLCBUZXhhcyA5ODU1
MTwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zOmRtc3RjPSJodHRw
Oi8vd3d3LnVzYS5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1
aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMjwvZW1wbG95ZWVJZD4N
CisgIDxuYW1lPk1hcnRoYSBSYXlub2xkcw0KKzwhW0NEQVRBW1RoaXMgaXMgYSBDREFUQVNlY3Rp
b24gd2l0aCBFbnRpdHlSZWZlcmVuY2UgbnVtYmVyIDIgJmVudDI7XV0+DQorPCFbQ0RBVEFbVGhp
cyBpcyBhbiBhZGphY2VudCBDREFUQVNlY3Rpb24gd2l0aCBhIHJlZmVyZW5jZSB0byBhIHRhYiAm
dGFiO11dPjwvbmFtZT4NCisgIDxwb3NpdGlvbj5TZWNyZXRhcnk8L3Bvc2l0aW9uPg0KKyAgPHNh
bGFyeT4zNSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkbXN0Yzpkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlllcyI+JmVudDI7IERhbGxhcywgJmVu
dDM7DQorIDk4NTU0PC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM6
ZG1zdGM9Imh0dHA6Ly93d3cubmV0emVyby5jb20iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTIvRmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAw
MzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0
aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3Nh
bGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRkcmVzcyBkbXN0Yzpkb21l
c3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcDplbXBsb3llZSB4bWxuczplbXA9Imh0dHA6Ly93
d3cubmlzdC5nb3YiIHhtbG5zOm5tPSJodHRwOi8vd3d3LmFsdGF2aXN0YS5jb20iID4gICAgPGVt
cDplbXBsb3llZUlkPkVNUDAwMDQ8L2VtcDplbXBsb3llZUlkPg0KKyAgPG5tOm5hbWU+SmVueSBP
Y29ubm9yPC9ubTpuYW1lPg0KKyAgPGVtcDpwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L2Vt
cDpwb3NpdGlvbj4NCisgIDxlbXA6c2FsYXJ5Pjk1LDAwMDwvZW1wOnNhbGFyeT4NCisgIDxlbXA6
Z2VuZGVyPkZlbWFsZTwvZW1wOmdlbmRlcj4NCisgIDxlbXA6YWRkcmVzcyBlbXA6ZG9tZXN0aWM9
IlllcyIgc3RyZWV0PSJZJmVudDE7IiBlbXA6em9uZT0iQ0FOQURBIiBlbXA6bG9jYWwxPSJUUlVF
Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIHRleGFzIDk4NTU2PC9lbXA6YWRkcmVzcz4NCisgPC9l
bXA6ZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxuczplbXAyPSJodHRwOi8vd3d3Lm5pc3QuZ292
IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0yL0Zp
bGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2Jl
cnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRp
b24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyIgeG1sbnM9Imh0dHA6Ly93d3cubmlzdC5nb3YiPjE4
MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwvZW1wbG95
ZWU+DQorIDwvc3ZnPg0KKyANCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFs
dWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Rv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9TVVBQT1JURURf
RVJSLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorCisvKgorQ29weXJpZ2h0IMOC
wqkgMjAwMS0yMDA0IFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIAorKE1hc3NhY2h1c2V0dHMg
SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitm
b3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgCitS
aWdodHMgUmVzZXJ2ZWQuIFRoaXMgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVzNDw4LC
riBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBpbiB0aGUgCitob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIAordGhlIGltcGxpZWQg
d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAKKworWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9j
b3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKKyovCisKKworLy8gZXhwb3NlIHRlc3QgZnVuY3Rp
b24gbmFtZXMKK2Z1bmN0aW9uIGV4cG9zZVRlc3RGdW5jdGlvbk5hbWVzKCkKK3sKK3JldHVybiBb
J1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSJ107Cit9CisKK3ZhciBk
b2NzTG9hZGVkID0gLTEwMDAwMDA7Cit2YXIgYnVpbGRlciA9IG51bGw7CisKKy8vCisvLyAgIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0ZXN0aW5nIGZyYW1ld29yayBiZWZvcmUKKy8v
ICAgICAgcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4KKy8vCisvLyAgIElmIHRoZXJlIGFyZSBubyBj
b25maWd1cmF0aW9uIGV4Y2VwdGlvbnMsIGFzeW5jaHJvbm91cworLy8gICAgICAgIGRvY3VtZW50
IGxvYWRpbmcgaXMgc3RhcnRlZC4gIE90aGVyd2lzZSwgdGhlIHN0YXR1cworLy8gICAgICAgIGlz
IHNldCB0byBjb21wbGV0ZSBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBpbW1lZGlhdGVseQorLy8gICAg
ICAgIHJhaXNlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5IG9mIHRoZSB0ZXN0LgorLy8KK2Z1bmN0
aW9uIHNldFVwUGFnZSgpIHsKKyAgIHNldFVwUGFnZVN0YXR1cyA9ICdydW5uaW5nJzsKKyAgIHRy
eSB7CisgICAgIC8vCisgICAgIC8vICAgY3JlYXRlcyB0ZXN0IGRvY3VtZW50IGJ1aWxkZXIsIG1h
eSB0aHJvdyBleGNlcHRpb24KKyAgICAgLy8KKyAgICAgYnVpbGRlciA9IGNyZWF0ZUNvbmZpZ3Vy
ZWRCdWlsZGVyKCk7CisKKyAgICAgIGRvY3NMb2FkZWQgPSAwOworICAgICAgCisgICAgICB2YXIg
ZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9jc0xvYWRl
ZCArPSBwcmVsb2FkKGRvY1JlZiwgImRvYyIsICJzdGFmZk5TIik7CisgICAgICAgIAorICAgICAg
IGlmIChkb2NzTG9hZGVkID09IDEpIHsKKyAgICAgICAgICBzZXRVcFBhZ2UgPSAnY29tcGxldGUn
OworICAgICAgIH0KKyAgICB9IGNhdGNoKGV4KSB7CisgICAgCWNhdGNoSW5pdGlhbGl6YXRpb25F
cnJvcihidWlsZGVyLCBleCk7CisgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAg
fQorfQorCisKKworLy8KKy8vICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0
aW9uIG9mIAorLy8gICAgICBlYWNoIGFzeWNocm9ub3VzIGxvYWQgc3RhcnRlZCBpbiBzZXRVcFRl
c3RzLgorLy8KKy8vICAgV2hlbiBldmVyeSBzeW5jaHJvbm91cyBsb2FkZWQgZG9jdW1lbnQgaGFz
IGNvbXBsZXRlZCwKKy8vICAgICAgdGhlIHBhZ2Ugc3RhdHVzIGlzIGNoYW5nZWQgd2hpY2ggYWxs
b3dzIHRoZQorLy8gICAgICBib2R5IG9mIHRoZSB0ZXN0IHRvIGJlIGV4ZWN1dGVkLgorZnVuY3Rp
b24gbG9hZENvbXBsZXRlKCkgeworICAgIGlmICgrK2RvY3NMb2FkZWQgPT0gMSkgeworICAgICAg
ICBzZXRVcFBhZ2VTdGF0dXMgPSAnY29tcGxldGUnOworICAgIH0KK30KKworCisvKioKKyogICAg
ICAgCisgICAgICBUZXN0IGlmIFhQYXRoRXZhbHVhdG9yLmV2YWx1YXRlIHByb3Blcmx5IHRocm93
cyBOT1RfU1VQUE9SVEVEX0VSUk9SCisgICAgCisqIEBhdXRob3IgUGhpbGlwcGUgTGUgSMOpZ2Fy
ZXQKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAz
L0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yLWV2YWx1
YXRlCisqLworZnVuY3Rpb24gWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9F
UlIoKSB7CisgICB2YXIgc3VjY2VzczsKKyAgICBpZihjaGVja0luaXRpYWxpemF0aW9uKGJ1aWxk
ZXIsICJYUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUiIpICE9IG51bGwp
IHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOworICAgICAgdmFy
IHJlc3VsdDsKKyAgICAgIHZhciBudWxsTlNSZXNvbHZlciA9IG51bGw7CisKKyAgICAgIHZhciBu
dWxsUmVzdWx0ID0gbnVsbDsKKworICAgICAgdmFyIGNvbnRleHROb2RlOworICAgICAgCisgICAg
ICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAgZG9j
ID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3IgPSBj
cmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworY29udGV4dE5vZGUgPSBkb2MuY3JlYXRlRW50aXR5
UmVmZXJlbmNlKCJlbnRpdHluYW1lIik7CisgICAgICAKKwl7CisJCXN1Y2Nlc3MgPSBmYWxzZTsK
KwkJdHJ5IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHhwRXZhbHVhdG9yLmV2YWx1YXRlKCIvL2Zv
bzpiYXIiLGNvbnRleHROb2RlLG51bGxOU1Jlc29sdmVyLDAsbnVsbFJlc3VsdCk7CisgICAgICAg
IH0KKwkJY2F0Y2goZXgpIHsKKyAgICAgIHN1Y2Nlc3MgPSAodHlwZW9mKGV4LmNvZGUpICE9ICd1
bmRlZmluZWQnICYmIGV4LmNvZGUgPT0gOSk7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgidGhyb3dfTk9U
X1NVUFBPUlRFRF9FUlIiLHN1Y2Nlc3MpOworCX0KKworfQorCisKKworCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTk9UX1NVUFBPUlRFRF9FUlIoKTsK
K30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1lbnRfTm9kZXMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29tbWVu
dF9Ob2Rlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbW1lbnRfTm9kZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisKKy8q
CitDb3B5cmlnaHQgw4LCqSAyMDAxLTIwMDQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCiso
TWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgRXVyb3BlYW4gUmVzZWFyY2gg
Q29uc29ydGl1bSAKK2ZvciBJbmZvcm1hdGljcyBhbmQgTWF0aGVtYXRpY3MsIEtlaW8gVW5pdmVy
c2l0eSkuIEFsbCAKK1JpZ2h0cyBSZXNlcnZlZC4gVGhpcyB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBXM0PDgsKuIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGluIHRoZSAKK2hvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
Cit0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuIAorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1
bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorKi8KKworCisvLyBleHBv
c2UgdGVzdCBmdW5jdGlvbiBuYW1lcworZnVuY3Rpb24gZXhwb3NlVGVzdEZ1bmN0aW9uTmFtZXMo
KQoreworcmV0dXJuIFsnQ29tbWVudF9Ob2RlcyddOworfQorCit2YXIgZG9jc0xvYWRlZCA9IC0x
MDAwMDAwOwordmFyIGJ1aWxkZXIgPSBudWxsOworCisvLworLy8gICBUaGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCBieSB0aGUgdGVzdGluZyBmcmFtZXdvcmsgYmVmb3JlCisvLyAgICAgIHJ1bm5pbmcg
dGhlIHRlc3Qgc3VpdGUuCisvLworLy8gICBJZiB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBl
eGNlcHRpb25zLCBhc3luY2hyb25vdXMKKy8vICAgICAgICBkb2N1bWVudCBsb2FkaW5nIGlzIHN0
YXJ0ZWQuICBPdGhlcndpc2UsIHRoZSBzdGF0dXMKKy8vICAgICAgICBpcyBzZXQgdG8gY29tcGxl
dGUgYW5kIHRoZSBleGNlcHRpb24gaXMgaW1tZWRpYXRlbHkKKy8vICAgICAgICByYWlzZWQgd2hl
biBlbnRlcmluZyB0aGUgYm9keSBvZiB0aGUgdGVzdC4KKy8vCitmdW5jdGlvbiBzZXRVcFBhZ2Uo
KSB7CisgICBzZXRVcFBhZ2VTdGF0dXMgPSAncnVubmluZyc7CisgICB0cnkgeworICAgICAvLwor
ICAgICAvLyAgIGNyZWF0ZXMgdGVzdCBkb2N1bWVudCBidWlsZGVyLCBtYXkgdGhyb3cgZXhjZXB0
aW9uCisgICAgIC8vCisgICAgIGJ1aWxkZXIgPSBjcmVhdGVDb25maWd1cmVkQnVpbGRlcigpOwor
CisgICAgICBkb2NzTG9hZGVkID0gMDsKKyAgICAgIAorICAgICAgdmFyIGRvY1JlZiA9IG51bGw7
CisgICAgICBpZiAodHlwZW9mKHRoaXMuZG9jKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICBk
b2NSZWYgPSB0aGlzLmRvYzsKKyAgICAgIH0KKyAgICAgIGRvY3NMb2FkZWQgKz0gcHJlbG9hZChk
b2NSZWYsICJkb2MiLCAic3RhZmYiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAg
IH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4
KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLwor
Ly8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAg
IGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBX
aGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8g
ICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAg
IGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUo
KSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1
cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFMxLjIuNiBDb21t
ZW50IE5vZGVzIC0gCisgICAgICBDcmVhdGUgQU5ZX1RZUEUgWFBhdGhSZXN1bHQgbWF0Y2hpbmcg
Ly9jb21tZW50KCksCisgICAgICBjaGVjayB0aGF0IGVhY2ggbWF0Y2hpbmcgTm9kZSBpcyBhIENv
bW1lbnQgTm9kZS4KKyAgICAKKyogQGF1dGhvciBCb2IgQ2xhcnkKKyogQHNlZSBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRoLTIwMDMwMzMxL3hwYXRoI01hcHBp
bmcKKyogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL0NSLURPTS1MZXZlbC0zLVhQYXRo
LTIwMDMwMzMxL3hwYXRoI1hQYXRoRXZhbHVhdG9yCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRv
ci1jcmVhdGVOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9DUi1E
T00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aEV2YWx1YXRvci1ldmFsdWF0ZQor
KiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAw
MzAzMzEveHBhdGgjWFBhdGhOU1Jlc29sdmVyCisqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIv
MjAwMy9DUi1ET00tTGV2ZWwtMy1YUGF0aC0yMDAzMDMzMS94cGF0aCNYUGF0aFJlc3VsdAorKiBA
c2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBhdGgtMjAwMzAz
MzEveHBhdGgjWFBhdGhSZXN1bHQtaXRlcmF0ZU5leHQKKyovCitmdW5jdGlvbiBDb21tZW50X05v
ZGVzKCkgeworICAgdmFyIHN1Y2Nlc3M7CisgICAgaWYoY2hlY2tJbml0aWFsaXphdGlvbihidWls
ZGVyLCAiQ29tbWVudF9Ob2RlcyIpICE9IG51bGwpIHJldHVybjsKKyAgICB2YXIgQU5ZX1RZUEUg
PSAwOworICAgICAgdmFyIE5VTUJFUl9UWVBFID0gMTsKKyAgICAgIHZhciBTVFJJTkdfVFlQRSA9
IDI7CisgICAgICB2YXIgQk9PTEVBTl9UWVBFID0gMzsKKyAgICAgIHZhciBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFID0gNDsKKyAgICAgIHZhciBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQ
RSA9IDU7CisgICAgICB2YXIgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7CisgICAg
ICB2YXIgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3OworICAgICAgdmFyIEFOWV9VTk9S
REVSRURfTk9ERV9UWVBFID0gODsKKyAgICAgIHZhciBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9
IDk7CisgICAgICB2YXIgZG9jOworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgdmFyIGV2YWx1
YXRvcjsKKyAgICAgIHZhciBjb250ZXh0Tm9kZTsKKyAgICAgIHZhciBpbnJlc3VsdCA9IG51bGw7
CisKKyAgICAgIHZhciBvdXRyZXN1bHQgPSBudWxsOworCisgICAgICB2YXIgZXhwcmVzc2lvbiA9
ICIvL2NvbW1lbnQoKSI7CisgICAgICB2YXIgeHBhdGhUeXBlID0gQU5ZX1RZUEU7CisgICAgICB2
YXIgY3Vyck5vZGU7CisgICAgICB2YXIgbm9kZVR5cGU7CisgICAgICAKKyAgICAgIHZhciBkb2NS
ZWYgPSBudWxsOworICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgZG9jUmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2MgPSBsb2FkKGRv
Y1JlZiwgImRvYyIsICJzdGFmZiIpOworICAgICAgZXZhbHVhdG9yID0gY3JlYXRlWFBhdGhFdmFs
dWF0b3IoZG9jKTsKK3Jlc29sdmVyID0gZXZhbHVhdG9yLmNyZWF0ZU5TUmVzb2x2ZXIoZG9jKTsK
KyAgICAgIGNvbnRleHROb2RlID0gIGRvYzsKK291dHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0
ZShleHByZXNzaW9uLGNvbnRleHROb2RlLHJlc29sdmVyLHhwYXRoVHlwZSxpbnJlc3VsdCk7Cisg
ICAgICBjdXJyTm9kZSA9IG91dHJlc3VsdC5pdGVyYXRlTmV4dCgpOworICAgICAgCisgICAgd2hp
bGUoCisJCisJKGN1cnJOb2RlICE9IG51bGwpCisKKwkpIHsKKwlub2RlVHlwZSA9IGN1cnJOb2Rl
Lm5vZGVUeXBlOworCisgICAgICBhc3NlcnRFcXVhbHMoIlMxLjIuNi1Db21tZW50LU5vZGVzLW5v
ZGVUeXBlIiw4LG5vZGVUeXBlKTsKKyAgICAgICBjdXJyTm9kZSA9IG91dHJlc3VsdC5pdGVyYXRl
TmV4dCgpOworICAgICAgCisJfQorCit9CisKKworCisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICBDb21tZW50X05vZGVzKCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfbnVtYmVyVmFsdWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfbnVtYmVyVmFsdWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDcgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJDYW52
YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgS0NhbnZhc0NvbnRhaW5lciB7c3ZnfSBhdCAo
MCwwKSBzaXplIDEwMHgxMDAKKyAgICAgIEtDYW52YXNJdGVtIHtyZWN0fSBhdCAoMCwwKSBzaXpl
IDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAu
MDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAsMTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgIFJl
bmRlclNWR1RleHQge3RleHR9IGF0ICgwLDApIHNpemUgNzg1eDE4CisgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIzMngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDApIHdpZHRoIDIzMjogIlhQYXRoUmVzdWx0X251bWJlclZhbHVlOiBTdWNjZXNzIgpJbmRleDog
TGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZh
bHVlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURf
Tk9ERV9UWVBFLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0
YWZmLmR0ZCIgWw0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIx
OTAwIERhbGxhcyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJ
VFkgZW50NCAiPGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVt
ZW50Pjw/UEl0YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRp
dHlVUkkiICJlbnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAi
VGhpcyBlbnRpdHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlv
bjEgUFVCTElDICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNU
RU0gIm5vdGF0aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAj
SU1QTElFRD4NCisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQor
ICAgPCFBVFRMSVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVN
RU5UIHJlY3QgRU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVR
VUlSRUQNCisgICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFV
SVJFRA0KKyAgICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0
ICgjUENEQVRBKT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAg
ICANCitdPg0KKzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHNyYz0iWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0ZJUlNUX09SREVSRURfTk9E
RV9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8
cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYs
MDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9t
ZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+
DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8
L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEg
Q0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwh
W0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlv
bj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVy
Pg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMs
ICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMi
Pg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQor
IEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+
DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5n
LCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0K
KyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5v
cjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAg
PHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8
YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERh
bGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVz
Ij4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQg
TXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+
DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQor
ICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5
ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9V
Tk9SREVSRURfTk9ERV9UWVBFLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9O
T0RFX1RZUEUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBF
LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
PD9URVNULVNUWUxFIFBJREFUQT8+DQorPCFET0NUWVBFIHN2ZyBTWVNURU0gInN0YWZmLmR0ZCIg
Ww0KKyAgIDwhRU5USVRZIGVudDEgImVzIj4NCisgICA8IUVOVElUWSBlbnQyICIxOTAwIERhbGxh
cyBSb2FkIj4NCisgICA8IUVOVElUWSBlbnQzICJUZXhhcyI+DQorICAgPCFFTlRJVFkgZW50NCAi
PGVudEVsZW1lbnQgZG9tZXN0aWM9J1llcyc+RWxlbWVudCBkYXRhPC9lbnRFbGVtZW50Pjw/UEl0
YXJnZXQgUElkYXRhPz4iPg0KKyAgIDwhRU5USVRZIGVudDUgUFVCTElDICJlbnRpdHlVUkkiICJl
bnRpdHlGaWxlIiBOREFUQSBub3RhdGlvbjE+DQorICAgPCFFTlRJVFkgZW50MSAiVGhpcyBlbnRp
dHkgc2hvdWxkIGJlIGRpc2NhcmRlZCI+DQorICAgPCFOT1RBVElPTiBub3RhdGlvbjEgUFVCTElD
ICJub3RhdGlvbjFGaWxlIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0aW9uMiBTWVNURU0gIm5vdGF0
aW9uMkZpbGUiPg0KKyAgIDwhQVRUTElTVCBlbXBsb3llZSB4bWxucyBDREFUQSAjSU1QTElFRD4N
CisgICA8IUVMRU1FTlQgc3ZnIChyZWN0LCBzY3JpcHQsIGVtcGxveWVlKyk+DQorICAgPCFBVFRM
SVNUIHN2ZyANCisgICAgICB4bWxucyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIg0KKyAgICAgIG5hbWUgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHJlY3Qg
RU1QVFk+DQorICAgPCFBVFRMSVNUIHJlY3QgDQorICAgICAgeCBDREFUQSAjUkVRVUlSRUQNCisg
ICAgICB5IENEQVRBICNSRVFVSVJFRA0KKyAgICAgIHdpZHRoIENEQVRBICNSRVFVSVJFRA0KKyAg
ICAgIGhlaWdodCBDREFUQSAjUkVRVUlSRUQ+DQorICA8IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRB
KT4NCisgIDwhQVRUTElTVCBzY3JpcHQgdHlwZSBDREFUQSAjSU1QTElFRD4gICAgICANCitdPg0K
KzwhLS0gVGhpcyBpcyBjb21tZW50IG51bWJlciAxLi0tPg0KKzxzdmcgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9
IjEwMCIvPg0KKzxzY3JpcHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNy
Yz0iWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLmpz
Ii8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3JjPSJz
dmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9E
T00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDE8L2Vt
cGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+DQorICA8cG9zaXRpb24+
QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxhcnk+NTYsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2FkZHJlc3M+DQorIDwvZW1w
bG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVz
dC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDI8L2VtcGxveWVl
SWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlzIGlzIGEgQ0RBVEFTZWN0
aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11dPg0KKzwhW0NEQVRBW1Ro
aXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYSB0YWIg
JnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9wb3NpdGlvbj4NCisgIDxz
YWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFk
ZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBEYWxsYXMsICZlbnQzOw0K
KyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVt
cGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJvZ2VyDQorIEpvbmVzPC9u
YW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9zaXRpb24+DQorICA8c2Fs
YXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9nZW5kZXI+DQorICA8YWRk
cmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcgSXJ2aW5nLCB0ZXhhcyA5
ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVlIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmlsZXMiPg0KKyAgPGVtcGxv
eWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkgT2Nvbm5vcjwvbmFtZT4N
CisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45
NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+DQorICA8YWRkcmVzcyBk
b21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJvYWQuIERhbGxhcywgVGV4
YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxl
bXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2JlcnQgTXllcnM8L25h
bWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9zaXRpb24+DQorICA8c2Fs
YXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5kZXI+DQorICA8YWRkcmVz
cyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBUZXhhcyA5ODU1ODwvYWRk
cmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5b3V0VGVzdHMvZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0Vf
RVJSXzAyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2RvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMjQgQEAKKworLyoKK0NvcHlyaWdodCDDgsKpIDIwMDEtMjAwNCBXb3JsZCBXaWRl
IFdlYiBDb25zb3J0aXVtLCAKKyhNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5
LCBFdXJvcGVhbiBSZXNlYXJjaCBDb25zb3J0aXVtIAorZm9yIEluZm9ybWF0aWNzIGFuZCBNYXRo
ZW1hdGljcywgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIAorUmlnaHRzIFJlc2VydmVkLiBUaGlzIHdv
cmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFczQ8OCwq4gU29mdHdhcmUgTGljZW5zZSBbMV0g
aW4gdGhlIAoraG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiAKK3RoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCisKK1sxXSBodHRwOi8v
d3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIx
MjMxCisqLworCisKKy8vIGV4cG9zZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzCitmdW5jdGlvbiBleHBv
c2VUZXN0RnVuY3Rpb25OYW1lcygpCit7CityZXR1cm4gWydYUGF0aEV2YWx1YXRvcl9jcmVhdGVF
eHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDInXTsKK30KKwordmFyIGRvY3NMb2FkZWQgPSAtMTAw
MDAwMDsKK3ZhciBidWlsZGVyID0gbnVsbDsKKworLy8KKy8vICAgVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGJlZm9yZQorLy8gICAgICBydW5uaW5nIHRo
ZSB0ZXN0IHN1aXRlLgorLy8KKy8vICAgSWYgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZXhj
ZXB0aW9ucywgYXN5bmNocm9ub3VzCisvLyAgICAgICAgZG9jdW1lbnQgbG9hZGluZyBpcyBzdGFy
dGVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RhdHVzCisvLyAgICAgICAgaXMgc2V0IHRvIGNvbXBsZXRl
IGFuZCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5CisvLyAgICAgICAgcmFpc2VkIHdoZW4g
ZW50ZXJpbmcgdGhlIGJvZHkgb2YgdGhlIHRlc3QuCisvLworZnVuY3Rpb24gc2V0VXBQYWdlKCkg
eworICAgc2V0VXBQYWdlU3RhdHVzID0gJ3J1bm5pbmcnOworICAgdHJ5IHsKKyAgICAgLy8KKyAg
ICAgLy8gICBjcmVhdGVzIHRlc3QgZG9jdW1lbnQgYnVpbGRlciwgbWF5IHRocm93IGV4Y2VwdGlv
bgorICAgICAvLworICAgICBidWlsZGVyID0gY3JlYXRlQ29uZmlndXJlZEJ1aWxkZXIoKTsKKwor
ICAgICAgZG9jc0xvYWRlZCA9IDA7CisgICAgICAKKyAgICAgIHZhciBkb2NSZWYgPSBudWxsOwor
ICAgICAgaWYgKHR5cGVvZih0aGlzLmRvYykgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZG9j
UmVmID0gdGhpcy5kb2M7CisgICAgICB9CisgICAgICBkb2NzTG9hZGVkICs9IHByZWxvYWQoZG9j
UmVmLCAiZG9jIiwgInN0YWZmTlMiKTsKKyAgICAgICAgCisgICAgICAgaWYgKGRvY3NMb2FkZWQg
PT0gMSkgeworICAgICAgICAgIHNldFVwUGFnZSA9ICdjb21wbGV0ZSc7CisgICAgICAgfQorICAg
IH0gY2F0Y2goZXgpIHsKKyAgICAJY2F0Y2hJbml0aWFsaXphdGlvbkVycm9yKGJ1aWxkZXIsIGV4
KTsKKyAgICAgICAgc2V0VXBQYWdlID0gJ2NvbXBsZXRlJzsKKyAgICB9Cit9CisKKworCisvLwor
Ly8gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGNvbXBsZXRpb24gb2YgCisvLyAgICAg
IGVhY2ggYXN5Y2hyb25vdXMgbG9hZCBzdGFydGVkIGluIHNldFVwVGVzdHMuCisvLworLy8gICBX
aGVuIGV2ZXJ5IHN5bmNocm9ub3VzIGxvYWRlZCBkb2N1bWVudCBoYXMgY29tcGxldGVkLAorLy8g
ICAgICB0aGUgcGFnZSBzdGF0dXMgaXMgY2hhbmdlZCB3aGljaCBhbGxvd3MgdGhlCisvLyAgICAg
IGJvZHkgb2YgdGhlIHRlc3QgdG8gYmUgZXhlY3V0ZWQuCitmdW5jdGlvbiBsb2FkQ29tcGxldGUo
KSB7CisgICAgaWYgKCsrZG9jc0xvYWRlZCA9PSAxKSB7CisgICAgICAgIHNldFVwUGFnZVN0YXR1
cyA9ICdjb21wbGV0ZSc7CisgICAgfQorfQorCisKKy8qKgorKiAKKyAgICAgIFRoZSBYUGF0aEV2
YWx1YXRvciBjYW4gY3JlYXRlIGEgIlhQYXRoRXhwcmVzc2lvbiIgdXNpbmcgdGhlIG1ldGhvZAor
ICAgICAgImNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIpIi4KKyAgICAgIAor
ICAgICAgUmV0cmlldmUgdGhlIERPTSBkb2N1bWVudCBvbiB3aGljaCB0aGUKKyAgICAgICdjcmVh
dGVFeHByZXNzaW9uKCIvc3RhZmYvamZvdWZmYTplbXBsb3llZSIsIHJlc29sdmVyKScgbWV0aG9k
IGlzCisgICAgICBpbnZva2VkIHdpdGggdGhlIGRvY3VtZW50IGVsZW1lbnQuIFRoZSBtZXRob2Qg
c2hvdWxkIGZhaWwgdG8gY3JlYXRlCisgICAgICBwcmUtY29tcGlsZWQgZXhwcmVzc2lvbiBhbmQg
dGhyb3dzIERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSCisgICAgICBzaW5jZSB0aGUgcHJlZml4
IGpmb3VmZmEgaXMgbm90IG1hcHBlZC4KKyAgICAKKyogQGF1dGhvciBQaGlsaXBwZSBMZSBIw6ln
YXJldAorKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvQ1ItRE9NLUxldmVsLTMtWFBh
dGgtMjAwMzAzMzEveHBhdGgjWFBhdGhFdmFsdWF0b3ItY3JlYXRlRXhwcmVzc2lvbgorKi8KK2Z1
bmN0aW9uIFhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMigp
IHsKKyAgIHZhciBzdWNjZXNzOworICAgIGlmKGNoZWNrSW5pdGlhbGl6YXRpb24oYnVpbGRlciwg
IlhQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMiIpICE9IG51
bGwpIHJldHVybjsKKyAgICB2YXIgZG9jOworICAgICAgdmFyIHhwRXZhbHVhdG9yOworICAgICAg
dmFyIGV4cDsKKyAgICAgIHZhciByb290OworICAgICAgdmFyIHJlc29sdmVyOworICAgICAgCisg
ICAgICB2YXIgZG9jUmVmID0gbnVsbDsKKyAgICAgIGlmICh0eXBlb2YodGhpcy5kb2MpICE9ICd1
bmRlZmluZWQnKSB7CisgICAgICAgIGRvY1JlZiA9IHRoaXMuZG9jOworICAgICAgfQorICAgICAg
ZG9jID0gbG9hZChkb2NSZWYsICJkb2MiLCAic3RhZmZOUyIpOworICAgICAgeHBFdmFsdWF0b3Ig
PSBjcmVhdGVYUGF0aEV2YWx1YXRvcihkb2MpOworcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7
CisKKyAgICAgIHJlc29sdmVyID0geHBFdmFsdWF0b3IuY3JlYXRlTlNSZXNvbHZlcihyb290KTsK
KyAgICAgIAorCXsKKwkJc3VjY2VzcyA9IGZhbHNlOworCQl0cnkgeworICAgICAgICAgICAgZXhw
ID0geHBFdmFsdWF0b3IuY3JlYXRlRXhwcmVzc2lvbigiL3N0YWZmL2pmb3VmZmE6ZW1wbG95ZWUi
LHJlc29sdmVyKTsKKyAgICAgICAgfQorCQljYXRjaChleCkgeworICAgICAgc3VjY2VzcyA9ICh0
eXBlb2YoZXguY29kZSkgIT0gJ3VuZGVmaW5lZCcgJiYgZXguY29kZSA9PSAxNCk7CisJCX0KKwkJ
YXNzZXJ0VHJ1ZSgidGhyb3dfTkFNRVNQQUNFX0VSUiIsc3VjY2Vzcyk7CisJfQorCit9CisKKwor
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICBYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX05BTUVTUEFDRV9FUlJfMDIoKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2RvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX05VTUJFUl9UWVBFLnN2
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJl
c3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9OVU1CRVJfVFlQRS5zdmcJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRl
cmF0b3JTdGF0ZV9OVU1CRVJfVFlQRS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/Pjw/VEVTVC1TVFlMRSBQSURBVEE/Pg0KKzwhRE9DVFlQRSBz
dmcgU1lTVEVNICJzdGFmZi5kdGQiIFsNCisgICA8IUVOVElUWSBlbnQxICJlcyI+DQorICAgPCFF
TlRJVFkgZW50MiAiMTkwMCBEYWxsYXMgUm9hZCI+DQorICAgPCFFTlRJVFkgZW50MyAiVGV4YXMi
Pg0KKyAgIDwhRU5USVRZIGVudDQgIjxlbnRFbGVtZW50IGRvbWVzdGljPSdZZXMnPkVsZW1lbnQg
ZGF0YTwvZW50RWxlbWVudD48P1BJdGFyZ2V0IFBJZGF0YT8+Ij4NCisgICA8IUVOVElUWSBlbnQ1
IFBVQkxJQyAiZW50aXR5VVJJIiAiZW50aXR5RmlsZSIgTkRBVEEgbm90YXRpb24xPg0KKyAgIDwh
RU5USVRZIGVudDEgIlRoaXMgZW50aXR5IHNob3VsZCBiZSBkaXNjYXJkZWQiPg0KKyAgIDwhTk9U
QVRJT04gbm90YXRpb24xIFBVQkxJQyAibm90YXRpb24xRmlsZSI+DQorICAgPCFOT1RBVElPTiBu
b3RhdGlvbjIgU1lTVEVNICJub3RhdGlvbjJGaWxlIj4NCisgICA8IUFUVExJU1QgZW1wbG95ZWUg
eG1sbnMgQ0RBVEEgI0lNUExJRUQ+DQorICAgPCFFTEVNRU5UIHN2ZyAocmVjdCwgc2NyaXB0LCBl
bXBsb3llZSspPg0KKyAgIDwhQVRUTElTVCBzdmcgDQorICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVE
ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCisgICAgICBuYW1lIENEQVRBICNJTVBMSUVE
Pg0KKyAgIDwhRUxFTUVOVCByZWN0IEVNUFRZPg0KKyAgIDwhQVRUTElTVCByZWN0IA0KKyAgICAg
IHggQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgeSBDREFUQSAjUkVRVUlSRUQNCisgICAgICB3aWR0
aCBDREFUQSAjUkVRVUlSRUQNCisgICAgICBoZWlnaHQgQ0RBVEEgI1JFUVVJUkVEPg0KKyAgPCFF
TEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQorICA8IUFUVExJU1Qgc2NyaXB0IHR5cGUgQ0RBVEEg
I0lNUExJRUQ+ICAgICAgDQorXT4NCis8IS0tIFRoaXMgaXMgY29tbWVudCBudW1iZXIgMS4tLT4N
Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMCIgeT0i
MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiLz4NCis8c2NyaXB0IHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiBzcmM9IlhQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRl
X05VTUJFUl9UWVBFLmpzIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJzdmd1bml0LmpzIi8+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3ll
ZUlkPkVNUDAwMDE8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJnYXJldCBNYXJ0aW48L25hbWU+
DQorICA8cG9zaXRpb24+QWNjb3VudGFudDwvcG9zaXRpb24+ICAgICAgICAgICANCisgIDxzYWxh
cnk+NTYsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJl
c3MgZG9tZXN0aWM9IlllcyI+MTIzMCBOb3J0aCBBdmUuIERhbGxhcywgVGV4YXMgOTg1NTE8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDI8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5NYXJ0aGEgUmF5bm9sZHM8IVtDREFUQVtUaGlz
IGlzIGEgQ0RBVEFTZWN0aW9uIHdpdGggRW50aXR5UmVmZXJlbmNlIG51bWJlciAyICZlbnQyO11d
Pg0KKzwhW0NEQVRBW1RoaXMgaXMgYW4gYWRqYWNlbnQgQ0RBVEFTZWN0aW9uIHdpdGggYSByZWZl
cmVuY2UgdG8gYSB0YWIgJnRhYjtdXT48L25hbWU+DQorICA8cG9zaXRpb24+U2VjcmV0YXJ5PC9w
b3NpdGlvbj4NCisgIDxzYWxhcnk+MzUsMDAwPC9zYWxhcnk+DQorICA8Z2VuZGVyPkZlbWFsZTwv
Z2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9IlllcyIgc3RyZWV0PSJZZXMiPiZlbnQyOyBE
YWxsYXMsICZlbnQzOw0KKyA5ODU1NDwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxv
eWVlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEv
RmlsZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwMzwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPlJv
Z2VyDQorIEpvbmVzPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkRlcGFydG1lbnQgTWFuYWdlcjwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjEwMCwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+JmVudDQ7PC9n
ZW5kZXI+DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9Ik5vIj5QTyBCb3ggMjcg
SXJ2aW5nLCB0ZXhhcyA5ODU1MzwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPGVtcGxveWVl
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL0xldmVsLTEvRmls
ZXMiPg0KKyAgPGVtcGxveWVlSWQ+RU1QMDAwNDwvZW1wbG95ZWVJZD4NCisgIDxuYW1lPkplbnkg
T2Nvbm5vcjwvbmFtZT4NCisgIDxwb3NpdGlvbj5QZXJzb25uZWwgRGlyZWN0b3I8L3Bvc2l0aW9u
Pg0KKyAgPHNhbGFyeT45NSwwMDA8L3NhbGFyeT4NCisgIDxnZW5kZXI+RmVtYWxlPC9nZW5kZXI+
DQorICA8YWRkcmVzcyBkb21lc3RpYz0iWWVzIiBzdHJlZXQ9IlkmZW50MTsiPjI3IFNvdXRoIFJv
YWQuIERhbGxhcywgVGV4YXMgOTg1NTY8L2FkZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBs
b3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0x
L0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAwMDU8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5S
b2JlcnQgTXllcnM8L25hbWU+DQorICA8cG9zaXRpb24+Q29tcHV0ZXIgU3BlY2lhbGlzdDwvcG9z
aXRpb24+DQorICA8c2FsYXJ5PjkwLDAwMDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5tYWxlPC9nZW5k
ZXI+DQorICA8YWRkcmVzcyBzdHJlZXQ9IlllcyI+MTgyMSBOb3JkaWMuIFJvYWQsIElydmluZyBU
ZXhhcyA5ODU1ODwvYWRkcmVzcz4NCisgPC9lbXBsb3llZT4NCisgPC9zdmc+DQpJbmRleDogTGF5
b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVz
c2lvbl9OQU1FU1BBQ0VfRVJSXzAxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9u
X05BTUVTUEFDRV9FUlJfMDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9O
QU1FU1BBQ0VfRVJSXzAxLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBA
CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNp
emUgODAweDYwMAorICAgIEtDYW52YXNDb250YWluZXIge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4
MTAwCisgICAgICBLQ2FudmFzSXRlbSB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxs
PXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAw
LDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICBSZW5kZXJTVkdUZXh0IHt0
ZXh0fSBhdCAoMCwwKSBzaXplIDc4NXgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSA0NDV4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0NDU6
ICJYUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDE6IFN1Y2Nl
c3MiCkluZGV4OiBMYXlvdXRUZXN0cy9kb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9i
b29sZWFuVmFsdWVfdHJ1ZS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX3RydWUuc3ZnCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVh
blZhbHVlX3RydWUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz48P1RFU1QtU1RZTEUgUElEQVRBPz4NCis8IURPQ1RZUEUgc3ZnIFNZU1RFTSAi
c3RhZmYuZHRkIiBbDQorICAgPCFFTlRJVFkgZW50MSAiZXMiPg0KKyAgIDwhRU5USVRZIGVudDIg
IjE5MDAgRGFsbGFzIFJvYWQiPg0KKyAgIDwhRU5USVRZIGVudDMgIlRleGFzIj4NCisgICA8IUVO
VElUWSBlbnQ0ICI8ZW50RWxlbWVudCBkb21lc3RpYz0nWWVzJz5FbGVtZW50IGRhdGE8L2VudEVs
ZW1lbnQ+PD9QSXRhcmdldCBQSWRhdGE/PiI+DQorICAgPCFFTlRJVFkgZW50NSBQVUJMSUMgImVu
dGl0eVVSSSIgImVudGl0eUZpbGUiIE5EQVRBIG5vdGF0aW9uMT4NCisgICA8IUVOVElUWSBlbnQx
ICJUaGlzIGVudGl0eSBzaG91bGQgYmUgZGlzY2FyZGVkIj4NCisgICA8IU5PVEFUSU9OIG5vdGF0
aW9uMSBQVUJMSUMgIm5vdGF0aW9uMUZpbGUiPg0KKyAgIDwhTk9UQVRJT04gbm90YXRpb24yIFNZ
U1RFTSAibm90YXRpb24yRmlsZSI+DQorICAgPCFBVFRMSVNUIGVtcGxveWVlIHhtbG5zIENEQVRB
ICNJTVBMSUVEPg0KKyAgIDwhRUxFTUVOVCBzdmcgKHJlY3QsIHNjcmlwdCwgZW1wbG95ZWUrKT4N
CisgICA8IUFUVExJU1Qgc3ZnIA0KKyAgICAgIHhtbG5zIENEQVRBICNGSVhFRCAiaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciDQorICAgICAgbmFtZSBDREFUQSAjSU1QTElFRD4NCisgICA8IUVM
RU1FTlQgcmVjdCBFTVBUWT4NCisgICA8IUFUVExJU1QgcmVjdCANCisgICAgICB4IENEQVRBICNS
RVFVSVJFRA0KKyAgICAgIHkgQ0RBVEEgI1JFUVVJUkVEDQorICAgICAgd2lkdGggQ0RBVEEgI1JF
UVVJUkVEDQorICAgICAgaGVpZ2h0IENEQVRBICNSRVFVSVJFRD4NCisgIDwhRUxFTUVOVCBzY3Jp
cHQgKCNQQ0RBVEEpPg0KKyAgPCFBVFRMSVNUIHNjcmlwdCB0eXBlIENEQVRBICNJTVBMSUVEPiAg
ICAgIA0KK10+DQorPCEtLSBUaGlzIGlzIGNvbW1lbnQgbnVtYmVyIDEuLS0+DQorPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIi8+DQorPHNjcmlwdCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgc3JjPSJYUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfdHJ1ZS5qcyIvPg0KKzxzY3Jp
cHQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0ic3ZndW5pdC5qcyIv
Pg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3Vp
dGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAxPC9lbXBsb3llZUlkPg0K
KyAgPG5hbWU+TWFyZ2FyZXQgTWFydGluPC9uYW1lPg0KKyAgPHBvc2l0aW9uPkFjY291bnRhbnQ8
L3Bvc2l0aW9uPiAgICAgICAgICAgDQorICA8c2FsYXJ5PjU2LDAwMDwvc2FsYXJ5Pg0KKyAgPGdl
bmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVzdGljPSJZZXMiPjEyMzAgTm9y
dGggQXZlLiBEYWxsYXMsIFRleGFzIDk4NTUxPC9hZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8
ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2
ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5FTVAwMDAyPC9lbXBsb3llZUlkPg0KKyAgPG5h
bWU+TWFydGhhIFJheW5vbGRzPCFbQ0RBVEFbVGhpcyBpcyBhIENEQVRBU2VjdGlvbiB3aXRoIEVu
dGl0eVJlZmVyZW5jZSBudW1iZXIgMiAmZW50MjtdXT4NCis8IVtDREFUQVtUaGlzIGlzIGFuIGFk
amFjZW50IENEQVRBU2VjdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgdGFiICZ0YWI7XV0+PC9u
YW1lPg0KKyAgPHBvc2l0aW9uPlNlY3JldGFyeTwvcG9zaXRpb24+DQorICA8c2FsYXJ5PjM1LDAw
MDwvc2FsYXJ5Pg0KKyAgPGdlbmRlcj5GZW1hbGU8L2dlbmRlcj4NCisgIDxhZGRyZXNzIGRvbWVz
dGljPSJZZXMiIHN0cmVldD0iWWVzIj4mZW50MjsgRGFsbGFzLCAmZW50MzsNCisgOTg1NTQ8L2Fk
ZHJlc3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVN
UDAwMDM8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5Sb2dlcg0KKyBKb25lczwvbmFtZT4NCisgIDxw
b3NpdGlvbj5EZXBhcnRtZW50IE1hbmFnZXI8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT4xMDAsMDAw
PC9zYWxhcnk+DQorICA8Z2VuZGVyPiZlbnQ0OzwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0
aWM9IlllcyIgc3RyZWV0PSJObyI+UE8gQm94IDI3IElydmluZywgdGV4YXMgOTg1NTM8L2FkZHJl
c3M+DQorIDwvZW1wbG95ZWU+DQorIDxlbXBsb3llZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMS9ET00tVGVzdC1TdWl0ZS9MZXZlbC0xL0ZpbGVzIj4NCisgIDxlbXBsb3llZUlkPkVNUDAw
MDQ8L2VtcGxveWVlSWQ+DQorICA8bmFtZT5KZW55IE9jb25ub3I8L25hbWU+DQorICA8cG9zaXRp
b24+UGVyc29ubmVsIERpcmVjdG9yPC9wb3NpdGlvbj4NCisgIDxzYWxhcnk+OTUsMDAwPC9zYWxh
cnk+DQorICA8Z2VuZGVyPkZlbWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3MgZG9tZXN0aWM9Illl
cyIgc3RyZWV0PSJZJmVudDE7Ij4yNyBTb3V0aCBSb2FkLiBEYWxsYXMsIFRleGFzIDk4NTU2PC9h
ZGRyZXNzPg0KKyA8L2VtcGxveWVlPg0KKyA8ZW1wbG95ZWUgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzIwMDEvRE9NLVRlc3QtU3VpdGUvTGV2ZWwtMS9GaWxlcyI+DQorICA8ZW1wbG95ZWVJZD5F
TVAwMDA1PC9lbXBsb3llZUlkPg0KKyAgPG5hbWU+Um9iZXJ0IE15ZXJzPC9uYW1lPg0KKyAgPHBv
c2l0aW9uPkNvbXB1dGVyIFNwZWNpYWxpc3Q8L3Bvc2l0aW9uPg0KKyAgPHNhbGFyeT45MCwwMDA8
L3NhbGFyeT4NCisgIDxnZW5kZXI+bWFsZTwvZ2VuZGVyPg0KKyAgPGFkZHJlc3Mgc3RyZWV0PSJZ
ZXMiPjE4MjEgTm9yZGljLiBSb2FkLCBJcnZpbmcgVGV4YXMgOTg1NTg8L2FkZHJlc3M+DQorIDwv
ZW1wbG95ZWU+DQorIDwvc3ZnPg0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTgwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjA3IEBACisyMDA2LTA1
LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBtYWMuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBET00zIHhwYXRoIHRlc3RzIGFz
IHNlbGYtY29udGFpbmVkIFNWRyBmaWxlcy4gCisgICAgICAgIAorICAgICAgICAqIGRvbS9zdmc6
IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgv
QXR0cmlidXRlX05vZGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvQXR0cmlidXRlX05vZGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9BdHRyaWJ1dGVfTm9kZXNfeG1sbnMu
anM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0F0dHJpYnV0ZV9Ob2Rl
c194bWxucy5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbW1l
bnRfTm9kZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9Db21tZW50X05vZGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9Db21tZW50X05vZGVzLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvQ29uZm9ybWFuY2VfRXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9FeHByZXNzaW9ucy5qczogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfRXhwcmVzc2lv
bnMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9JRC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L0NvbmZvcm1hbmNlX0lELmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9Db25mb3JtYW5jZV9JRC5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hw
YXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfMy5qczogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaGFzRmVhdHVy
ZV8zLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFu
Y2VfaGFzRmVhdHVyZV9lbXB0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1wdHkuanM6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfZW1w
dHkuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5j
ZV9oYXNGZWF0dXJlX251bGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9oYXNGZWF0dXJlX251bGwuanM6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2hhc0ZlYXR1cmVfbnVsbC5z
dmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0NvbmZvcm1hbmNlX2lz
U3VwcG9ydGVkXzMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLmpzOiBBZGRlZC4KKyAgICAgICAgKiBk
b20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF8zLnN2ZzogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRf
ZW1wdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRlZF9lbXB0eS5qczogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfZW1wdHkuc3ZnOiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Db25mb3JtYW5jZV9pc1N1cHBvcnRl
ZF9udWxsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbC5qczogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvQ29uZm9ybWFuY2VfaXNTdXBwb3J0ZWRfbnVsbC5zdmc6IEFkZGVk
LgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL0VsZW1lbnRfTm9kZXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9FbGVtZW50X05vZGVz
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9FbGVtZW50X05vZGVz
LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvUHJvY2Vzc2luZ19J
bnN0cnVjdGlvbl9Ob2Rlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcv
bGV2ZWwzL3hwYXRoL1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXMuanM6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1Byb2Nlc3NpbmdfSW5zdHJ1Y3Rpb25fTm9kZXMu
c3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9UZXh0X05vZGVzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvVGV4dF9O
b2Rlcy5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvVGV4dF9Ob2Rl
cy5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVh
dG9yQ2FzdDAxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JDYXN0MDEuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yQ2FzdDAxLnN2ZzogQWRkZWQuCisgICAgICAgICog
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9JTlZB
TElEX0VYUFJFU1NJT05fRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2
Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9JTlZBTElEX0VY
UFJFU1NJT05fRVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX0lOVkFMSURfRVhQUkVTU0lPTl9FUlIuc3Zn
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9j
cmVhdGVFeHByZXNzaW9uX05BTUVTUEFDRV9FUlJfMDEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNz
aW9uX05BTUVTUEFDRV9FUlJfMDEuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMS5z
dmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9y
X2NyZWF0ZUV4cHJlc3Npb25fTkFNRVNQQUNFX0VSUl8wMi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJl
c3Npb25fTkFNRVNQQUNFX0VSUl8wMi5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9OQU1FU1BBQ0VfRVJSXzAy
LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0
b3JfY3JlYXRlRXhwcmVzc2lvbl9OUy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZUV4cHJlc3Npb25fTlMuanM6
IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2Ny
ZWF0ZUV4cHJlc3Npb25fTlMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVFeHByZXNzaW9uX25vX05TLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfY3Jl
YXRlRXhwcmVzc2lvbl9ub19OUy5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlRXhwcmVzc2lvbl9ub19OUy5zdmc6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVz
b2x2ZXJfYWxsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhFdmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9hbGwuanM6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2
ZXJfYWxsLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
dmFsdWF0b3JfY3JlYXRlTlNSZXNvbHZlcl9kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVz
b2x2ZXJfZG9jdW1lbnQuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnQuc3ZnOiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9jcmVhdGVOU1Jlc29s
dmVyX2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2NyZWF0ZU5TUmVzb2x2ZXJfZG9jdW1lbnRF
bGVtZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2
YWx1YXRvcl9jcmVhdGVOU1Jlc29sdmVyX2RvY3VtZW50RWxlbWVudC5zdmc6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX0lOVkFM
SURfRVhQUkVTU0lPTl9FUlItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05f
RVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1
YXRvcl9ldmFsdWF0ZV9JTlZBTElEX0VYUFJFU1NJT05fRVJSLnN2ZzogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfTkFNRVNQQUNF
X0VSUi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFDRV9FUlIuanM6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05BTUVTUEFD
RV9FUlIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2
YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX05P
VF9TVVBQT1JURURfRVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9OT1RfU1VQUE9SVEVEX0VSUi5zdmc6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZ
UEVfRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfVFlQRV9FUlIuanM6IEFkZGVkLgorICAgICAgICAq
IGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX1RZUEVfRVJSLnN2
ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
ZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3JfZXZhbHVhdGVfV1JPTkdfRE9D
VU1FTlRfRVJSLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV2YWx1YXRvcl9ldmFsdWF0ZV9XUk9OR19ET0NVTUVOVF9FUlIuc3ZnOiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVu
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aEV2YWx1YXRvcl9ldmFsdWF0ZV9kb2N1bWVudC5zdmc6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1
YXRlX2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXZhbHVhdG9yX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudC5q
czogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFdmFsdWF0b3Jf
ZXZhbHVhdGVfZG9jdW1lbnRFbGVtZW50LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhF
eHByZXNzaW9uX2V2YWx1YXRlX05PVF9TVVBQT1JURURfRVJSLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aEV4cHJlc3Npb25fZXZhbHVhdGVfTk9UX1NVUFBP
UlRFRF9FUlIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aEV4cHJlc3Npb25fZXZhbHVhdGVfV1JPTkdfRE9DVU1FTlRfRVJSLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1
YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRlX1dST05HX0RPQ1VNRU5UX0VSUi5zdmc6
IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9l
dmFsdWF0ZV9kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcv
bGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudC5qczogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhFeHByZXNzaW9uX2V2YWx1YXRl
X2RvY3VtZW50LnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBh
dGhFeHByZXNzaW9uX2V2YWx1YXRlX2RvY3VtZW50RWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0
ZV9kb2N1bWVudEVsZW1lbnQuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoRXhwcmVzc2lvbl9ldmFsdWF0ZV9kb2N1bWVudEVsZW1lbnQuc3ZnOiBBZGRlZC4K
KyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFt
ZXNwYWNlVVJJX25pc3RfZG1zdGMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9va3VwTmFtZXNwYWNlVVJJX25pc3Rf
ZG1zdGMuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNS
ZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbmlzdF9kbXN0Yy5zdmc6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VV
UklfbnVsbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hw
YXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfbnVsbC5qczogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVz
cGFjZVVSSV9udWxsLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgv
WFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXgtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9v
a3VwTmFtZXNwYWNlVVJJX3ByZWZpeC5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhOU1Jlc29sdmVyX2xvb2t1cE5hbWVzcGFjZVVSSV9wcmVmaXguc3ZnOiBB
ZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJfbG9v
a3VwTmFtZXNwYWNlVVJJX3htbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoTlNSZXNvbHZlcl9sb29rdXBOYW1lc3BhY2VVUklfeG1sLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aE5TUmVzb2x2ZXJf
bG9va3VwTmFtZXNwYWNlVVJJX3htbC5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2
ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X1RZUEVfRVJSLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfVFlQRV9FUlIuanM6IEFkZGVk
LgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X1RZUEVfRVJSLnN2
ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9v
bGVhblZhbHVlX2ZhbHNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfYm9vbGVhblZhbHVlX2ZhbHNlLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVfZmFs
c2Uuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3Vs
dF9ib29sZWFuVmFsdWVfdHJ1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2Jvb2xlYW5WYWx1ZV90cnVlLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9ib29sZWFuVmFsdWVf
dHJ1ZS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9y
U3RhdGVfQU5ZX1RZUEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRo
L1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0FOWV9UWVBFLnN2ZzogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9y
U3RhdGVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0
ZV9BTllfVU5PUkRFUkVEX05PREVfVFlQRS5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfQU5ZX1VOT1JERVJF
RF9OT0RFX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZh
bGlkSXRlcmF0b3JTdGF0ZV9CT09MRUFOX1RZUEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0JPT0xFQU5f
VFlQRS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVz
dWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
aW52YWxpZEl0ZXJhdG9yU3RhdGVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUuanM6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRv
clN0YXRlX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfTlVNQkVS
X1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0
aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9OVU1CRVJfVFlQRS5qczogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJh
dG9yU3RhdGVfTlVNQkVSX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwz
L3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5z
dmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2lu
dmFsaWRJdGVyYXRvclN0YXRlX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52
YWxpZEl0ZXJhdG9yU3RhdGVfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuanM6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2ludmFsaWRJdGVyYXRv
clN0YXRlX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLnN2ZzogQWRkZWQuCisgICAgICAgICog
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfU1RS
SU5HX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9TVFJJTkdfVFlQRS5qczogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0
ZXJhdG9yU3RhdGVfU1RSSU5HX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9s
ZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRS5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfaW52YWxpZEl0ZXJhdG9yU3RhdGVfVU5PUkRFUkVEX05PREVfSVRFUkFU
T1JfVFlQRS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X2ludmFsaWRJdGVyYXRvclN0YXRlX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9pbnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9p
bnZhbGlkSXRlcmF0b3JTdGF0ZV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLnN2ZzogQWRk
ZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfaXRlcmF0ZU5l
eHRfSU5WQUxJRF9TVEFURV9FUlItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRlTmV4dF9JTlZBTElEX1NUQVRFX0VS
Ui5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRf
aXRlcmF0ZU5leHRfSU5WQUxJRF9TVEFURV9FUlIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9pdGVyYXRvck5leHRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X2l0ZXJhdG9yTmV4dF9PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS5zdmc6IEFkZGVkLgorICAg
ICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X2l0ZXJhdG9yTmV4dF9VTk9S
REVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xl
dmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1iZXJWYWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X251bWJlclZhbHVlLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9udW1i
ZXJWYWx1ZS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3Jlc3VsdFR5cGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3Zn
L2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9yZXN1bHRUeXBlLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9yZXN1bHRUeXBlLnN2ZzogQWRkZWQu
CisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZh
bHVlX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc2luZ2xlTm9kZVZhbHVlX0FOWV9V
Tk9SREVSRURfTk9ERV9UWVBFLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94
cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2RlVmFsdWVfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUu
c3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9z
aW5nbGVOb2RlVmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zaW5nbGVOb2Rl
VmFsdWVfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUuanM6IEFkZGVkLgorICAgICAgICAqIGRvbS9z
dmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NpbmdsZU5vZGVWYWx1ZV9GSVJTVF9PUkRFUkVE
X05PREVfVFlQRS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQ
YXRoUmVzdWx0X3NuYXBzaG90SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhS
ZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwuanM6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90
SXRlbV9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLnN2ZzogQWRkZWQuCisgICAgICAg
ICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFX29yZGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RJdGVtX09SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFX29yZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVs
My94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEVfb3JkZXIuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0
aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRo
UmVzdWx0X3NuYXBzaG90SXRlbV9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX2NvdW50Lmpz
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFw
c2hvdEl0ZW1fVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9jb3VudC5zdmc6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3NuYXBzaG90SXRlbV9V
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFX251bGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRV9udWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKiBkb20v
c3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdEl0ZW1fVU5PUkRFUkVEX05PREVf
U05BUFNIT1RfVFlQRV9udWxsLnN2ZzogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMv
eHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBkb20vc3ZnL2xldmVsMy94cGF0aC9Y
UGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS5qczog
QWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNo
b3RMZW5ndGhfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuc3ZnOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vc3ZnL2xldmVsMy94cGF0aC9YUGF0aFJlc3VsdF9zbmFwc2hvdExlbmd0aF9VTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9t
L3N2Zy9sZXZlbDMveHBhdGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRS5qczogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBh
dGgvWFBhdGhSZXN1bHRfc25hcHNob3RMZW5ndGhfVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RS5zdmc6IEFkZGVkLgorICAgICAgICAqIGRvbS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0
X3N0cmluZ1ZhbHVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZG9tL3N2Zy9sZXZl
bDMveHBhdGgvWFBhdGhSZXN1bHRfc3RyaW5nVmFsdWUuanM6IEFkZGVkLgorICAgICAgICAqIGRv
bS9zdmcvbGV2ZWwzL3hwYXRoL1hQYXRoUmVzdWx0X3N0cmluZ1ZhbHVlLnN2ZzogQWRkZWQuCisg
ICAgICAgICogZG9tL3N2Zy9sZXZlbDMveHBhdGgvc3ZndW5pdC5qczogQWRkZWQuCisKIDIwMDYt
MDUtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEp1c3Rpbi4K
</data>
<flag name="review"
          id="2274"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8112</attachid>
            <date>2006-05-04 13:27:33 -0700</date>
            <delta_ts>2006-05-04 14:30:43 -0700</delta_ts>
            <desc>Implementation</desc>
            <filename>xpath-support.txt</filename>
            <type>text/plain</type>
            <size>190154</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0IEBAIEtYQ0xvZ0No
YW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRz
ID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9OwogS1hDTG9nQ2hhbm5l
bCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGggPSAgICAgICAgICAg
ICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsT2ZmIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0xv
Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRlcm4gS1hDTG9nQ2hh
bm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRzOwog
ZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENMb2dDaGFubmVsIExv
Z1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBhdGg7CiAKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlwZSBlcSAiTm9kZUxp
c3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0eXBlIGVxICJUZXh0
IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFdmFs
dWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0gZWxzaWYgKCR0eXBl
IGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAkaW1w
bEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUwMSw3ICs1MDUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xhc3NOYW1lID0gIiR7
cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
Y29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFt
ZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigkY2xhc3NOYW1lLCAk
cHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAtIEFkZCBmdW5jdGlv
bnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC04MjQsNyArODI4
LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9y
CiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiRG9j
dW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7CisgICAgICAgICAg
ICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IikgewogICAgIHJldHVybiAi
JHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NzYsNiArODgyLDEyIEBAIHN1YiBUeXBl
Q2FuRmFpbENvbnZlcnNpb24KICAgICAgIHJldHVybiAwOwogICB9IGVsc2lmICgkdHlwZSBlcSAi
RE9NV2luZG93IikgewogICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0
aEV2YWx1YXRvciIpIHsKKyAgICAgIHJldHVybiAwOworICB9IGVsc2lmICgkdHlwZSBlcSAiWFBh
dGhOU1Jlc29sdmVyIikgeworICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJY
UGF0aFJlc3VsdCIpIHsKKyAgICAgIHJldHVybiAwOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9u
J3Qga25vdyB3aGV0aGVyIGEgSlMgdmFsdWUgY2FuIGZhaWwgY29udmVyc2lvbiB0byB0eXBlICR0
eXBlLiIKICAgfQpAQCAtOTM2LDcgKzk0OCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAg
cmV0dXJuICJ0b05vZGVGaWx0ZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01X
aW5kb3ciKSB7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwotICAgIHJl
dHVybiAidG9ET01XaW5kb3coJHZhbHVlKSI7CisgICAgcmV0dXJuICJ0b0RPTVdpbmRvdygkdmFs
dWUpIjsgCisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAg
ICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBl
LmgifSA9IDE7CisgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwogICB9IGVsc2UgewogICAg
IGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9mIHR5cGUgJHR5cGUu
IgogICB9CkBAIC05NTUsNyArOTcxLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAg
ICAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJzaG9y
dCIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IKLSAgICAgICAg
ICAgJHR5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAkdHlwZSBlcSAiZmxvYXQiIG9yIAor
ICAgICAgICAgICAkdHlwZSBlcSAiZG91YmxlIikgewogICAgIHJldHVybiAianNOdW1iZXIoJHZh
bHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgbXkgJGNvbnYg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxTdHJpbmdUbyJ9
OwpAQCAtMTA0Miw2ICsxMDU5LDExIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgfSBlbHNpZiAo
JHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVl
KSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iIG9yCisgICAgICAgICAg
ICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAgICAgICR0eXBlIGVxICJYUGF0
aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CisgICAgcmV0
dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25v
dyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBKUyBWYWx1ZSI7CiAg
IH0KQEAgLTEyNDksNiArMTI3MSw3IEBAIHN1YiBjb25zdHJ1Y3RvckZvcgogICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKICAgICBteSAkcHJvdG9DbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjYW5Db25zdHJ1Y3QgPSBzaGlmdDsKICAg
ICAKIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3MgJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNjEsNyArMTI4NCwxNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
RU9GCisKKyAgICBpZiAoJGNhbkNvbnN0cnVjdCkgeworJGltcGxDb250ZW50IC49IDw8ICJFT0Yi
OworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHRvSlMo
ZXhlYywgbmV3ICRpbnRlcmZhY2VOYW1lKSk7IH0KK0VPRgorICAgIH0KKworJGltcGxDb250ZW50
IC49IDw8ICJFT0YiOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjppbmZvID0geyAiJHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yIiwgMCwgJiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yVGFibGUsIDAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCShyZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1w
bC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CkBAIC0y
OTgsNiArMjk5LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRFeGNlcHRpb24K
ICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9OwogCitzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiSU5WQUxJRF9FWFBSRVNT
SU9OX0VSUiIsCisgICAgIlRZUEVfRVJSIgorfTsKKwogdm9pZCBzZXRET01FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjKQogewogICBpZiAoZWMgPT0gMCB8fCBleGVj
LT5oYWRFeGNlcHRpb24oKSkKQEAgLTMwNyw2ICszMTMsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAgY29uc3QgY2hhciAq
IGNvbnN0ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgCiAgIGludCBu
YW1lVGFibGVTaXplOwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9mZnNldCAmJiBjb2Rl
IDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFuZ2UiOwpAQCAtMzE4
LDEyICszMjYsMjIgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAog
ICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAgICAgbmFtZVRhYmxlID0gZXZlbnRF
eGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKGV2ZW50RXhjZXB0aW9u
TmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXNbMF0pOworICB9IGVsc2UgaWYgKGNv
ZGUgPj0gWFBhdGhFeGNlcHRpb25PZmZzZXQgJiYgY29kZSA8PSBYUGF0aEV4Y2VwdGlvbk1heCkg
eworICAgICAgLy8gWFBhdGggZXhjZXB0aW9uIGNvZGVzIHN0YXJ0IHdpdGggNTEgYW5kIHdlIGRv
bid0IHdhbnQgNTEgZW1wdHkgZWxlbWVudHMgaW4gdGhlIG5hbWUgYXJyYXkKKyAgICBpbnQgbmFt
ZUluZGV4ID0gY29kZSAtIElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAgdHlwZSA9ICJET00g
WFBhdGgiOworICAgIGNvZGUgLT0gWFBhdGhFeGNlcHRpb25PZmZzZXQ7CisgICAgbmFtZVRhYmxl
ID0geHBhdGhFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHhwYXRo
RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXNbMF0pOworCisgICAg
bmFtZSA9IG5hbWVJbmRleCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVbbmFtZUluZGV4XSA6
IDA7CiAgIH0gZWxzZSB7CiAgICAgbmFtZVRhYmxlID0gZXhjZXB0aW9uTmFtZXM7CiAgICAgbmFt
ZVRhYmxlU2l6ZSA9IHNpemVvZihleGNlcHRpb25OYW1lcykgLyBzaXplb2YoZXhjZXB0aW9uTmFt
ZXNbMF0pOwogICB9CiAKLSAgY29uc3QgY2hhciogbmFtZSA9IGNvZGUgPCBuYW1lVGFibGVTaXpl
ID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKKyAgaWYgKCFuYW1lKQorICAgICAgbmFtZSA9IGNvZGUg
PCBuYW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKIAogICAvLyAxMDAgY2hhcmFj
dGVycyBpcyBhIGJpZyBlbm91Z2ggYnVmZmVyLCBiZWNhdXNlIHRoZXJlIGFyZToKICAgLy8gICAx
MyBjaGFyYWN0ZXJzIGluIHRoZSBtZXNzYWdlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlz
aW9uIDE0MTc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjM5LDYgKzYzOSw5IEBAIHN0YXRpYyBMaXN0ZW5lck1hcCAqbGlzdGVuZXJNYXA7CiAg
ICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01Ob3RhdGlvbiBjbGFzc107CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDcmVh
dGUgYW4gWFBhdGggb2JqZWN0aXZlIEMgd3JhcHBlcgorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxvY10gX2luaXRXaXRoTm9kZTpp
bXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNDE3
OSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3Jl
KS9odG1sIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorCSQoV2ViQ29yZSkveHBhdGgKICMKIAog
LlBIT05ZIDogYWxsCkBAIC03Miw2ICs3MywxMCBAQCBhbGwgOiBcCiAgICAgSlNSYW5nZS5oIFwK
ICAgICBKU1RleHQuaCBcCiAgICAgSlNVSUV2ZW50LmggXAorCUpTWFBhdGhFdmFsdWF0b3IuaCBc
CisJSlNYUGF0aEV4cHJlc3Npb24uaCBcCisJSlNYUGF0aE5TUmVzb2x2ZXIuaCBcCisJSlNYUGF0
aFJlc3VsdC5oIFwKICAgICBKU1doZWVsRXZlbnQuaCBcCiAgICAgSlNYTUxIdHRwUmVxdWVzdC5s
dXQuaCBcCiAgICAgSlNYTUxTZXJpYWxpemVyLmx1dC5oIFwKQEAgLTc5LDYgKzg0LDcgQEAgYWxs
IDogXAogICAgIFNWR05hbWVzLmNwcCBcCiAgICAgVXNlckFnZW50U3R5bGVTaGVldHMuaCBcCiAg
ICAgWExpbmtOYW1lcy5jcHAgXAorCVhQYXRoR3JhbW1hci5jcHAgXAogICAgIGtqc19jc3MubHV0
LmggXAogICAgIGtqc19kb20ubHV0LmggXAogICAgIGtqc19ldmVudHMubHV0LmggXApAQCAtMTMw
LDYgKzEzNiwxNSBAQCBDU1NHcmFtbWFyLmNwcCA6IGNzcy9DU1NHcmFtbWFyLnkKIAljYXQgQ1NT
R3JhbW1hci5jcHAuaCBDU1NHcmFtbWFyLmhwcCA+IENTU0dyYW1tYXIuaAogCXJtIC1mIENTU0dy
YW1tYXIuY3BwLmggQ1NTR3JhbW1hci5ocHAKIAorIyBYUGF0aCBncmFtbWFyCisKK1hQYXRoR3Jh
bW1hci5jcHAgOiB4cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55CisJYmlzb24gLWQgLXAgeHBhdGh5
eSAkPCAtbyAkQAorCXRvdWNoIFhQYXRoR3JhbW1hci5jcHAuaAorCXRvdWNoIFhQYXRoR3JhbW1h
ci5ocHAKKwljYXQgWFBhdGhHcmFtbWFyLmNwcC5oIFhQYXRoR3JhbW1hci5ocHAgPiBYUGF0aEdy
YW1tYXIuaAorCXJtIC1mIFhQYXRoR3JhbW1hci5jcHAuaCBYUGF0aEdyYW1tYXIuaHBwCisKICMg
dXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAogVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdl
YkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUp
L2Nzcy9zdmcuY3NzIApAQCAtMTgzLDQgKzE5OCw0IEBAIEpTX0JJTkRJTkdTX1NDUklQVFMgPSBc
CiAjCiAKIEpTJS5oIDogJS5pZGwgJChKU19CSU5ESU5HU19TQ1JJUFRTKQotCXBlcmwgLUkkKFdl
YkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVy
YXRlLWJpbmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVkZSBkb20gLS1pbmNsdWRlIGh0
bWwgLS1vdXRwdXRkaXIgLiAkPAorCXBlcmwgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMg
JChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZ2VuZXJh
dG9yIEpTIC0taW5jbHVkZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1pbmNsdWRlIHhwYXRoIC0tb3V0
cHV0ZGlyICAuICQ8CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwyMCBAQCBtb2R1
bGUgY29yZSB7CiAgICAgICAgIE5vZGUgYWRvcHROb2RlKGluIE5vZGUgc291cmNlKQogICAgICAg
ICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIC8vIERPTSBMZXZlbCAzIFhQ
YXRoIChYUGF0aEV2YWx1YXRvciBpbnRlcmZhY2UpCisgICAgICAgIFhQYXRoRXhwcmVzc2lvbiBj
cmVhdGVFeHByZXNzaW9uKGluIERPTVN0cmluZyBleHByZXNzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aE5TUmVzb2x2ZXIgcmVzb2x2ZXIpCisg
ICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICBYUGF0aE5TUmVzb2x2
ZXIgY3JlYXRlTlNSZXNvbHZlcihpbiBOb2RlIG5vZGVSZXNvbHZlcik7CisgICAgICAgIAorICAg
ICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShpbiBET01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gTm9kZSBjb250ZXh0Tm9kZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIFhQYXRoTlNSZXNvbHZlciByZXNvbHZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5SZXN1bHQpCisgICAgICAgICAgICBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAgICAvLyBDb21tb24gZXh0ZW5zaW9ucwogCiAg
ICAgICAgIGJvb2xlYW4gZXhlY0NvbW1hbmQoaW4gRE9NU3RyaW5nIGNvbW1hbmQsIApJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBACiAjaW5jbHVkZSAieG1sX3Rva2VuaXplci5o
IgogI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlhQYXRoUmVz
dWx0LmgiCiAKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgpA
QCAtNTA5LDYgKzUxMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmltcG9ydE5vZGUo
Tm8KICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFX05PREU6CiAgICAgICAgIGNhc2UgRE9DVU1F
TlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBOT1RBVElPTl9OT0RFOgorICAgICAgICBj
YXNlIFhQQVRIX05BTUVTUEFDRV9OT0RFOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC0zMTExLDQgKzMxMTYsMzUgQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKICAg
ICAgICAgZi0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKK1Bhc3NSZWZQdHI8WFBhdGhFeHByZXNz
aW9uPiBEb2N1bWVudDo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
IW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3IgPSBuZXcgWFBhdGhF
dmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3ItPmNyZWF0ZUV4cHJl
c3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVjKTsKK30KKworUGFzc1JlZlB0cjxYUGF0aE5T
UmVzb2x2ZXI+IERvY3VtZW50OjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcikK
K3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3Ig
PSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3It
PmNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKTsKK30KKworUGFzc1JlZlB0cjxYUGF0aFJl
c3VsdD4gRG9jdW1lbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjb250ZXh0Tm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2
ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1feHBhdGhF
dmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7
CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3ItPmV2YWx1YXRlKGV4cHJlc3Npb24s
IGNvbnRleHROb2RlLCByZXNvbHZlciwgdHlwZSwgcmVzdWx0LCBlYyk7Cit9CisKIH0KSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDE0MTc5KQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw5IEBA
IGJvb2wgRE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUgKGNvbnMKICAgICAgICAgICAgIHx8
IGxvd2VyID09ICJ1aWV2ZW50cyIKICAgICAgICAgICAgIHx8IGxvd2VyID09ICJ2aWV3cyIpCiAg
ICAgICAgIHJldHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJzaW9uID09ICIyLjAiOworICAg
IGlmIChsb3dlciA9PSAieHBhdGgiKQorICAgICAgICByZXR1cm4gdmVyc2lvbi5pc0VtcHR5KCkg
fHwgdmVyc2lvbiA9PSAiMy4wIjsKKyAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw2ICs4OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
VGV4dDsKICAgICBjbGFzcyBUb2tlbml6ZXI7CiAgICAgY2xhc3MgVHJlZVdhbGtlcjsKKyAgICBj
bGFzcyBYUGF0aEV2YWx1YXRvcjsKKyAgICBjbGFzcyBYUGF0aEV4cHJlc3Npb247CisgICAgY2xh
c3MgWFBhdGhOU1Jlc29sdmVyOworICAgIGNsYXNzIFhQYXRoUmVzdWx0OwogCiAjaWYgX19BUFBM
RV9fCiAgICAgc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlOwpAQCAtNTQxLDYgKzU0NSwxOCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwogCisgICAgLy8gWFBhdGhF
dmFsdWF0b3IgbWV0aG9kcworICAgIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVF
eHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKyAgICBQYXNzUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3JlYXRlTlNSZXNv
bHZlcihOb2RlICpub2RlUmVzb2x2ZXIpOworICAgIFBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IGV2
YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTU3R5bGVTZWxl
Y3RvciAqbV9zdHlsZVNlbGVjdG9yOwogICAgIEZyYW1lVmlldyAqbV92aWV3OwpAQCAtNzM4LDYg
Kzc1NCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPEhUTUxGb3JtRWxlbWVudCos
IE5hbWVUb0lucHV0TWFwKj4gRm9ybVRvR3JvdXBNYXA7CiAgICAgRm9ybVRvR3JvdXBNYXAgbV9z
ZWxlY3RlZFJhZGlvQnV0dG9uczsKICAgICAKKyAgICBSZWZQdHI8WFBhdGhFdmFsdWF0b3I+IG1f
eHBhdGhFdmFsdWF0b3I7CisgICAgCiAjaWYgU1ZHX1NVUFBPUlQKICAgICBTVkdEb2N1bWVudEV4
dGVuc2lvbnMqIG1fc3ZnRXh0ZW5zaW9uczsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQxNzkpCisr
KyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDggQEAgcHVi
bGljOgogICAgICAgICBET0NVTUVOVF9OT0RFID0gOSwKICAgICAgICAgRE9DVU1FTlRfVFlQRV9O
T0RFID0gMTAsCiAgICAgICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMSwKLSAgICAgICAg
Tk9UQVRJT05fTk9ERSA9IDEyCisgICAgICAgIE5PVEFUSU9OX05PREUgPSAxMiwKKyAgICAgICAg
WFBBVEhfTkFNRVNQQUNFX05PREUgPSAxMwogICAgIH07CiAKICAgICBOb2RlKERvY3VtZW50Kik7
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTQxNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNDQgQEAKIAkJMTRFODM3OEUwOUY4NUQ0RjAwQjg1
QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2ZW50LmggKi87IH07CiAJCTE0
RUMyNjdGMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUMyNjdEMDlDQTA3RTAwMEUxRUVF
QyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLzsgfTsKIAkJMTRFQzI2ODAwOUNBMDdFMDAwRTFFRUVD
IC8qIEV2ZW50VGFyZ2V0Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEVDMjY3RTA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2Rl
LmNwcCAqLzsgfTsKKwkJMUE3NjI5ODMwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NTkw
QTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwICovOyB9OworCQkxQTc2Mjk4NDBBMDc0
MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24u
aCAqLzsgfTsKKwkJMUE3NjI5OEEwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2MTBBMDc0
MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJMUE3NjI5OEIwQTA3NDBBMDAw
OTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE3NjI5NjIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oICovOyB9
OworCQkxQTc2Mjk4QzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTYzMEEwNzQw
QTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuY3BwICovOyB9OworCQkxQTc2Mjk4RDBBMDc0
MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2NDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vk
c3RhdGVtZW50LmggKi87IH07CisJCTFBNzYyOThFMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY1
MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLzsgfTsKKwkJMUE3NjI5OEYwQTA3NDBBMDAw
OTg5RjVCIC8qIHBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyOTY2MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmggKi87IH07CisJCTFBNzYy
OTkwMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHBy
ZWRpY2F0ZS5jcHAgKi87IH07CisJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYy
OTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCAqLzsgfTsKKwkJMUE3NjI5OTIwQTA3
NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3NjI5NjkwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwICovOyB9
OworCQkxQTc2Mjk5MzBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8q
IHN0ZXAuaCAqLzsgfTsKKwkJMUE3NjI5OTUwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2
QzBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJMUE3NjI5OTYwQTA3
NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkQwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5o
ICovOyB9OworCQkxQTc2Mjk5NzBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2RTBBMDc0MEEwMDA5
ODlGNUIgLyogdXRpbC5jcHAgKi87IH07CisJCTFBNzYyOTk4MEEwNzQwQTAwMDk4OUY1QiAvKiB1
dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2
Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oICovOyB9OworCQkxQTc2Mjk5OTBBMDc0MEEw
MDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlh
YmxlcmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5RjVCIC8qIHZh
cmlhYmxlcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuaCAq
LzsgfTsKKwkJMUE3NjI5OUQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTc1MEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi87IH07CisJCTFBNzYyOTlFMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
RXZhbHVhdG9yLmggKi87IH07CisJCTFBNzYyOUEwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4
cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE3NjI5NzgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5jcHAgKi87IH07
CisJCTFBNzYyOUExMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTc5MEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMUE3NjI5QTMwQTA3NDBBMDAw
OTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdCMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVz
cGFjZS5jcHAgKi87IH07CisJCTFBNzYyOUE0MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3
NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmggKi87IH07CisJCTFBNzYy
OUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5N0QwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi87IH07CisJCTFBNzYyOUE2MEEwNzQwQTAwMDk4OUY1
QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNzYyOTdFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIu
aCAqLzsgfTsKKwkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTgwMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgKi87IH07CisJCTFBNzYyOUE5MEEwNzQw
QTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5ODEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0
LmggKi87IH07CisJCTFBNzYyOUQ1MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5RDMw
QTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgKi87IH07CisJCTFBNzYyOUQ2MEEw
NzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdy
YW1tYXIuaCAqLzsgfTsKKwkJMUE3NjJDNzMwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFs
dWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE3NjJDNkIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuY3BwICovOyB9Owor
CQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkMwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCAqLzsgfTsKKwkJMUE3NjJDNzUwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRo
RXhwcmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyQzc2MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmggKi87
IH07CisJCTFBNzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM2RjBB
MDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuY3BwICovOyB9OworCQkxQTc2MkM3
ODBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzcwMEEwNzRGMjYwMDk4OUY1QiAv
KiBKU1hQYXRoTlNSZXNvbHZlci5oICovOyB9OworCQkxQTc2MkM3OTBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAg
Ki87IH07CisJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MjBBMDc0
RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovOyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVk
TmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWRO
YW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBB
MEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyB9OwogCQk1NTBBMEJD
RDA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkNCMDg1RjYwNEQwMDczNTNENiAvKiBIVE1M
TmFtZXMuY3BwICovOyB9OwpAQCAtMTI1Niw2ICsxMjk0LDQ5IEBACiAJCTE0RTgzNzhEMDlGODVE
NEYwMEI4NUFFNCAvKiBKU0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RUMyNjdEMDlDQTA3
RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXZlbnRUYXJnZXROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0RUMyNjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJnZXROb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NTkwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJl
c3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGV4cHJlc3Np
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk1QTBBMDc0MEEwMDA5
ODlGNUIgLyogZXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
ZXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2MTBBMDc0
MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBmdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBmdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE3NjI5NjMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2Vkc3RhdGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjQwQTA3NDBBMDAwOTg5RjVCIC8qIHBh
cnNlZHN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2Vk
c3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTY1MEEwNzQw
QTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBwYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjYwQTA3
NDBBMDAwOTg5RjVCIC8qIHBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjcwQTA3NDBBMDAw
OTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gcHJlZGljYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
NjgwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gcHJlZGljYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
NzYyOTY5MEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBzdGVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHN0ZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
NkMwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gdG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NkQwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUE3NjI5NkYwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB2YXJpYWJsZXJlZmVyZW5jZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTcxMEEwNzQwQTAwMDk4OUY1
QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gdmFyaWFibGVyZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3
NjI5NzIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci55ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUueWFjYzsgcGF0aCA9IFhQYXRoR3JhbW1hci55OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQTc2Mjk3NTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoRXZhbHVhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzYwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0
aEV2YWx1YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3NzBBMDc0
MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBYUGF0aEV2YWx1YXRvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYy
OTc4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTc5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3QTBBMDc0MEEwMDA5ODlG
NUIgLyogWFBhdGhFeHByZXNzaW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gWFBhdGhF
eHByZXNzaW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5N0IwQTA3
NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBYUGF0aE5hbWVzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyOTdDMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhOYW1lc3BhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5N0QwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
TlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBh
dGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5N0Uw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFBNzYyOTdGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aE5TUmVzb2x2ZXIuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTc2Mjk4MDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoUmVzdWx0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5ODEwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0
aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk4MjBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0
aFJlc3VsdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOUQzMEEwNzQy
NTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhQYXRoR3JhbW1hci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoR3JhbW1hci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQTc2MkM2QjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aEV2YWx1
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzZDMEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1hQYXRoRXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aEV4cHJlc3Npb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2RTBBMDc0RjI2MDA5ODlGNUIgLyog
SlNYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
WFBhdGhFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzZG
MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM3MDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5T
UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhOU1Jl
c29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzcxMEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1hQYXRoUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlw
Ym9hcmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBDbGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQk0NzU4QzQ0MzA4QzVGMjE3MDA5QkFGMDUgLyogS0NhbnZhc1Bh
dGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBLQ2FudmFzUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMjYxOSw2ICsyNzAwLDcgQEAKIAkJCQlGNTIzRDJGMzAy
REU0NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovLAogCQkJCUE4QzBGNkRDMDg5NzAxRjEwMEJB
NTExNCAvKiBXZWJDb3JlK1NWRyAqLywKIAkJCQlFMUYwNDI0MzA5ODM5Mzg5MDA2Njk0RUEgLyog
eG1sICovLAorCQkJCTFBNzYyOTU3MEEwNzQwQTAwMDk4OUY1QiAvKiB4cGF0aCAqLywKIAkJCQk2
NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTA4OUMx
NjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJMDg2N0Q2OUFGRTg0MDI4
RkMwMkFBQzA3IC8qIEZyYW1ld29ya3MgKi8sCkBAIC0yNjYyLDYgKzI3NDQsNTQgQEAKIAkJCXBh
dGggPSBSZXNvdXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkxQTc2
Mjk1NzBBMDc0MEEwMDA5ODlGNUIgLyogeHBhdGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTFBNzYyOTU4MEEwNzQwQTAwMDk4OUY1QiAvKiBpbXBsICov
LAorCQkJCTFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi8s
CisJCQkJMUE3NjI5NzYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi8sCisJ
CQkJMUE3NjI5NzcwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmlkbCAqLywKKwkJ
CQkxQTc2Mjk3ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCAqLywKKwkJ
CQkxQTc2Mjk3OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmggKi8sCisJCQkJ
MUE3NjI5N0EwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5pZGwgKi8sCisJCQkJ
MUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCAqLywKKwkJCQkx
QTc2Mjk3QzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCAqLywKKwkJCQkxQTc2
Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmNwcCAqLywKKwkJCQkxQTc2
Mjk3RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggKi8sCisJCQkJMUE3NjI5
N0YwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5pZGwgKi8sCisJCQkJMUE3NjI5
ODAwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCAqLywKKwkJCQkxQTc2Mjk4MTBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCAqLywKKwkJCQkxQTc2Mjk4MjBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovLAorCQkJKTsKKwkJCXBhdGggPSB4cGF0aDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFBNzYyOTU4MEEwNzQwQTAwMDk4
OUY1QiAvKiBpbXBsICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQkxQTc2Mjk1OTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5jcHAgKi8sCisJCQkJ
MUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uaCAqLywKKwkJCQkxQTc2Mjk2
MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLywKKwkJCQkxQTc2Mjk2MjBBMDc0
MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi8sCisJCQkJMUE3NjI5NjMwQTA3NDBBMDAwOTg5
RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgKi8sCisJCQkJMUE3NjI5NjQwQTA3NDBBMDAwOTg5
RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovLAorCQkJCTFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1
QiAvKiBwYXRoLmNwcCAqLywKKwkJCQkxQTc2Mjk2NjBBMDc0MEEwMDA5ODlGNUIgLyogcGF0aC5o
ICovLAorCQkJCTFBNzYyOTY3MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuY3BwICovLAor
CQkJCTFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCAqLywKKwkJCQkxQTc2
Mjk2OTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5jcHAgKi8sCisJCQkJMUE3NjI5NkEwQTA3NDBB
MDAwOTg5RjVCIC8qIHN0ZXAuaCAqLywKKwkJCQkxQTc2Mjk2QzBBMDc0MEEwMDA5ODlGNUIgLyog
dG9rZW5pemVyLmNwcCAqLywKKwkJCQkxQTc2Mjk2RDBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5p
emVyLmggKi8sCisJCQkJMUE3NjI5NkUwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwuY3BwICovLAor
CQkJCTFBNzYyOTZGMEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmggKi8sCisJCQkJMUE3NjI5NzAw
QTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCAqLywKKwkJCQkxQTc2Mjk3
MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuaCAqLywKKwkJCQkxQTc2Mjk3
MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLnkgKi8sCisJCQkpOworCQkJcGF0aCA9
IGltcGw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1NTk5OEE1NzA1MkI1
OThGMDAxN0E2QzEgLyogQWNjZXNzaWJpbGl0eSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC0yNzQ3LDYgKzI4NzcsMTQgQEAKIAkJCQk2NURGMzFGMDA5RDFD
QzYwMDAwQkUzMjUgLyogSlNUZXh0LmggKi8sCiAJCQkJQTg2NjI5Q0EwOURBMkI0NzAwOTYzM0E1
IC8qIEpTVUlFdmVudC5jcHAgKi8sCiAJCQkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpT
VUlFdmVudC5oICovLAorCQkJCTFBNzYyQzZCMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZh
bHVhdG9yLmNwcCAqLywKKwkJCQkxQTc2MkM2QzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2
YWx1YXRvci5oICovLAorCQkJCTFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhw
cmVzc2lvbi5jcHAgKi8sCisJCQkJMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhF
eHByZXNzaW9uLmggKi8sCisJCQkJMUE3NjJDNkYwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhO
U1Jlc29sdmVyLmNwcCAqLywKKwkJCQkxQTc2MkM3MDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0
aE5TUmVzb2x2ZXIuaCAqLywKKwkJCQkxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0
aFJlc3VsdC5jcHAgKi8sCisJCQkJMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhS
ZXN1bHQuaCAqLywKIAkJCQk2NURGMzFGMTA5RDFDQzYwMDAwQkUzMjUgLyogSlNXaGVlbEV2ZW50
LmNwcCAqLywKIAkJCQk2NURGMzFGMjA5RDFDQzYwMDAwQkUzMjUgLyogSlNXaGVlbEV2ZW50Lmgg
Ki8sCiAJCQkJNjU2NTgxRDcwOUQxNTA4RDAwMEU2MUQ3IC8qIEpTWE1MSHR0cFJlcXVlc3QubHV0
LmggKi8sCkBAIC0yNzc2LDYgKzI5MTQsOCBAQAogCQkJCTY1NjU4MUFGMDlEMTRFRTYwMDBFNjFE
NyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovLAogCQkJCTY1NjU4MUVBMDlEMTUw
OEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmNwcCAqLywKIAkJCQk2NTY1ODFFQjA5RDE1MDhEMDAw
RTYxRDcgLyogWExpbmtOYW1lcy5oICovLAorCQkJCTFBNzYyOUQzMEEwNzQyNTEwMDk4OUY1QiAv
KiBYUGF0aEdyYW1tYXIuY3BwICovLAorCQkJCTFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1QiAvKiBY
UGF0aEdyYW1tYXIuaCAqLywKIAkJCQkxNDIwMTFCNTBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NT
dHlsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJEZXJpdmVkIFNvdXJjZXMi
OwpAQCAtNDg0OCw2ICs0OTg4LDI1IEBACiAJCQkJMTREQzBEMzgwOUZFRDA3MzAwN0IwMjM1IC8q
IEpTTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMEM4MjUwOUZGMEVGNTAwNkIzNkQ5IC8q
IGtqc19kb21ub2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDIwMTFCNzBBMDAzMTMzMDA4MzAz
RjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk4
NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3
NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MUE3NjI5OEQwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCBpbiBIZWFkZXJzICov
LAorCQkJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTFBNzYyOTkzMEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmggaW4gSGVhZGVycyAq
LywKKwkJCQkxQTc2Mjk5NjBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxQTc2Mjk5ODBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFs
dWF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUExMEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUE0MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5QTYwQTA3
NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3
NjI5QTkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxQTc2MjlENjBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRvci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMUE3NjJDNzYwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHBy
ZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3ODBBMDc0RjI2MDA5ODlGNUIgLyog
SlNYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyQzdBMEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU1NjUsNiArNTcy
NCwyNSBAQAogCQkJCUJDRkU4RTMyMEEwMkExRDMwMDA5RTYxRCAvKiBXZWJDb3JlVGV4dFJlbmRl
cmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREQzBEMzcwOUZFRDA3MzAwN0IwMjM1IC8qIEpT
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIwMTFCNjBBMDAzMTMzMDA4MzAzRjkgLyog
SlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTgzMEEw
NzQwQTAwMDk4OUY1QiAvKiBleHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYy
OThBMEEwNzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUE3NjI5OEMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxQTc2Mjk4RTBBMDc0MEEwMDA5ODlGNUIgLyogcGF0aC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxQTc2Mjk5MDBBMDc0MEEwMDA5ODlGNUIgLyogcHJlZGljYXRlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFBNzYyOTkyMEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFBNzYyOTk1MEEwNzQwQTAwMDk4OUY1QiAvKiB0b2tlbml6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTcwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTkwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxl
cmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTlEMEEwNzQwQTAwMDk4OUY1
QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlBMDBBMDc0
MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFB
NzYyOUEzMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkxQTc2MjlBNTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTFBNzYyOUE4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlENTBBMDc0MjUxMDA5ODlGNUIgLyogWFBh
dGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyQzczMEEwNzRGMjYwMDk4OUY1
QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyQzc1MEEw
NzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkxQTc2MkM3NzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMUE3NjJDNzkwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM2QkREMUQwQTAzMUFFQjAwNERGNEFCIC8qIEdyYXBo
aWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDE0
MTc5KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
MCw2ICsyNDAsNyBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdGFydE1hcmt1cChjb25zCiAg
ICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZ
X1JFRkVSRU5DRV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAg
ICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgcmV0dXJuICIiOwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIFhQYXRoTmFtZXNwYWNlLmNwcCAtIENvcHlyaWdo
dCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aE5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFBhdGhOYW1lc3BhY2U6OlhQYXRo
TmFtZXNwYWNlKERvY3VtZW50ICpwdHIsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJp
bmcmIHVyaSkKKwk6IE5vZGUoIHB0ciApLAorCW1fb3duZXJEb2N1bWVudCggcHRyICksCisJbV9w
cmVmaXgoIHByZWZpeCApLAorCW1fdXJpKCB1cmkgKQoreworfQorCitYUGF0aE5hbWVzcGFjZTo6
flhQYXRoTmFtZXNwYWNlKCkKK3sKK30KKworRG9jdW1lbnQgKlhQYXRoTmFtZXNwYWNlOjpvd25l
ckRvY3VtZW50KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9vd25lckRvY3VtZW50OworfQorCitFbGVt
ZW50ICpYUGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KCkgY29uc3QKK3sKKwkvLyBYWFgKKwly
ZXR1cm4gMDsKK30KKworY29uc3QgQXRvbWljU3RyaW5nICZYUGF0aE5hbWVzcGFjZTo6cHJlZml4
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVmaXg7Cit9CisKK1N0cmluZyBYUGF0aE5hbWVz
cGFjZTo6bm9kZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWZpeDsKK30KKworY29u
c3QgQXRvbWljU3RyaW5nICZYUGF0aE5hbWVzcGFjZTo6bmFtZXNwYWNlVVJJKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV91cmk7Cit9CisKK1dlYkNvcmU6Ok5vZGU6Ok5vZGVUeXBlIFhQYXRoTmFt
ZXNwYWNlOjpub2RlVHlwZSgpIGNvbnN0Cit7CisJcmV0dXJuIE5vZGU6OlhQQVRIX05BTUVTUEFD
RV9OT0RFOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBYUGF0aEV4cHJlc3Npb25JbXBsLmNwcCAtIENvcHly
aWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorCisjaW5jbHVkZSAiaW1wbC9leHByZXNzaW9uLmgiCisjaW5jbHVkZSAiaW1wbC91dGlsLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFhQYXRoOworICAgIAor
UGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IFhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRlRXhwcmVz
c2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIs
IGludCYgZWMpCit7CisgICAgWFBhdGhFeHByZXNzaW9uICpleHByID0gbmV3IFhQYXRoRXhwcmVz
c2lvbjsKKyAgICAKKwlFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnJlc29sdmVyID0g
cmVzb2x2ZXI7CisgICAgaWYgKCFleHByLT5tX3N0YXRlbWVudC5wYXJzZShleHByZXNzaW9uLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgZWMpKSB7CisgICAgICAgIGRlbGV0ZSBleHByOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGV4cHI7Cit9CisKK1Bhc3NSZWZQdHI8
WFBhdGhSZXN1bHQ+IFhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVhdGUoTm9kZSAqY29udGV4dE5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhQYXRoUmVzdWx0ICpyZXN1bHRfLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKwlpZiAoIWlz
VmFsaWRDb250ZXh0Tm9kZShjb250ZXh0Tm9kZSkpIHsKKwkJZWMgPSBOT1RfU1VQUE9SVEVEX0VS
UjsKKwkJcmV0dXJuIDA7CisJfQorICAgIAorICAgIE5vZGUgKmV2ZW50VGFyZ2V0ID0gY29udGV4
dE5vZGUtPm93bmVyRG9jdW1lbnQoKSA/IAorICAgICAgICBjb250ZXh0Tm9kZS0+b3duZXJEb2N1
bWVudCgpIDogY29udGV4dE5vZGU7CisgICAgCisJWFBhdGhSZXN1bHQqIHJlc3VsdCA9IG5ldyBY
UGF0aFJlc3VsdChzdGF0aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihldmVudFRhcmdldCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlbWVudC5ldmFs
dWF0ZShjb250ZXh0Tm9kZSkpOworICAgIAorCWlmICh0eXBlICE9IFhQYXRoUmVzdWx0OjpBTllf
VFlQRSkgeworCQlyZXN1bHQtPmNvbnZlcnRUbyh0eXBlLCBlYyk7CisKKwkJaWYgKGVjKQorCQkJ
cmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworfQpJbmRleDogV2ViQ29yZS94
cGF0aC9YUGF0aE5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhO
YW1lc3BhY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2Uu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIFhQYXRoTmFtZXNwYWNlLmgg
LSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBYUEFUSE5hbWVzcGFjZV9ICisjZGVmaW5lIFhQQVRITmFtZXNwYWNlX0gKKwor
I2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUKK3sKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTdHJpbmdJbXBsOworCitjbGFz
cyBYUGF0aE5hbWVzcGFjZSA6IHB1YmxpYyBXZWJDb3JlOjpOb2RlCit7CitwdWJsaWM6CisJWFBh
dGhOYW1lc3BhY2UoRG9jdW1lbnQgKnB0ciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiB1cmkpOworCXZpcnR1YWwgflhQYXRoTmFtZXNwYWNl
KCk7CisKKwl2aXJ0dWFsIERvY3VtZW50ICpvd25lckRvY3VtZW50KCkgY29uc3Q7CisJdmlydHVh
bCBFbGVtZW50ICpvd25lckVsZW1lbnQoKSBjb25zdDsKKworCXZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nICZwcmVmaXgoKSBjb25zdDsKKwl2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0
OworCXZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nICZuYW1lc3BhY2VVUkkoKSBjb25zdDsKKwor
CXZpcnR1YWwgV2ViQ29yZTo6Tm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKKworcHJp
dmF0ZToKKwlEb2N1bWVudCAqbV9vd25lckRvY3VtZW50OworICAgIEF0b21pY1N0cmluZyBtX3By
ZWZpeDsKKyAgICBBdG9taWNTdHJpbmcgbV91cmk7Cit9OworCit9CisKKyNlbmRpZiAvLyBYUEFU
SE5hbWVzcGFjZV9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBYUGF0aEV2YWx1YXRvckltcGwuY3BwIC0gQ29weXJpZ2h0IDIw
MDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiWFBhdGhFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJYUGF0
aEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJY
UGF0aFJlc3VsdC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCisjaW5jbHVkZSAi
aW1wbC91dGlsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFhQ
YXRoOworICAgIAorUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IFhQYXRoRXZhbHVhdG9yOjpj
cmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVz
b2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGV4Y2VwdGlvbmNvZGUpCit7Cisg
ICAgUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gZXhwciA9IFhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRl
RXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciwgZXhjZXB0aW9uY29kZSk7CisgICAgCisg
ICAgcmV0dXJuIGV4cHI7Cit9CisKK1Bhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBYUGF0aEV2
YWx1YXRvcjo6Y3JlYXRlTlNSZXNvbHZlcihOb2RlICpub2RlUmVzb2x2ZXIpCit7CisJcmV0dXJu
IG5ldyBYUGF0aE5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKTsKK30KKworUGFzc1JlZlB0cjxYUGF0
aFJlc3VsdD4gWFBhdGhFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
ICpjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYUGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQgKnJl
c3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQmIGV4Y2VwdGlvbmNvZGUpCit7CisJaWYgKCFpc1ZhbGlkQ29udGV4dE5vZGUoY29udGV4dE5v
ZGUpKSB7CisJCWV4Y2VwdGlvbmNvZGUgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKwkJcmV0dXJuIDA7
CisJfQorCisJUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gZXhwciA9IGNyZWF0ZUV4cHJlc3Npb24o
ZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGV4Y2VwdGlvbmNvZGUpOworCWlmKGV4Y2VwdGlvbmNvZGUp
CisJCXJldHVybiAwOworICAgIAorCXJldHVybiBleHByLT5ldmFsdWF0ZShjb250ZXh0Tm9kZSwg
dHlwZSwgcmVzdWx0LCBleGNlcHRpb25jb2RlKTsKK30KKworfQorCkluZGV4OiBXZWJDb3JlL3hw
YXRoL1hQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0
aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogWFBhdGhOU1Jl
c29sdmVySW1wbC5jcHAgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0
aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworWFBhdGhOU1Jlc29sdmVyOjpYUGF0aE5TUmVzb2x2ZXIoTm9kZSAqbm9kZSkKKwk6IG1fbm9k
ZSggbm9kZSApCit7Cit9CisKK1N0cmluZyBYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFj
ZVVSSShjb25zdCBTdHJpbmcmIHByZWZpeCkKK3sKKwkvLyBBcHBhcmVudGx5IE5vZGU6Omxvb2t1
cE5hbWVzcGFjZVVSSSBkb2Vzbid0IGRvIHRoaXMuCisJaWYgKHByZWZpeCA9PSAieG1sIikgewor
CQlyZXR1cm4gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7CisJfQorCisJ
cmV0dXJuIG1fbm9kZSA/IG1fbm9kZS0+bG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCkgOiBTdHJp
bmcoKTsKK30KKworfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYyIEBACisvKgorICogWFBhdGhFeHByZXNzaW9uSW1wbC5oIC0gQ29weXJpZ2h0IDIwMDUg
RnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUEFU
SEVYUFJFU1NJT05JTVBMX0gKKyNkZWZpbmUgWFBBVEhFWFBSRVNTSU9OSU1QTF9ICisKKyNpbmNs
dWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAi
aW1wbC9wYXJzZWRzdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlCit7CitjbGFzcyBOb2RlOworY2xhc3MgU3RyaW5nSW1wbDsKKworY2xh
c3MgWFBhdGhOU1Jlc29sdmVyOworY2xhc3MgWFBhdGhSZXN1bHQ7CisKK2NsYXNzIFhQYXRoRXhw
cmVzc2lvbiA6IHB1YmxpYyBTaGFyZWQ8WFBhdGhFeHByZXNzaW9uPgoreworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gY3JlYXRlRXhwcmVzc2lvbihjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKworCVBhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKE5vZGUgKmNv
bnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhS
ZXN1bHQgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlJiBlYyk7CisJCQorcHJpdmF0ZToKKyAgICBYUGF0aDo6UGFyc2VkU3RhdGVtZW50
IG1fc3RhdGVtZW50OworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhFWFBSRVNTSU9OSU1QTF9I
CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0
aC9YUGF0aFJlc3VsdC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggeworCisgICAg
aW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yXSBYUGF0aFJlc3VsdCB7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IEFOWV9UWVBFICAgICAgICAgICAgICAgICAgICAgICA9IDA7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5VTUJFUl9UWVBFICAgICAgICAgICAgICAgICAg
ICA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUUklOR19UWVBFICAgICAgICAg
ICAgICAgICAgICA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEJPT0xFQU5fVFlQ
RSAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVO
T1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgICA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICAgICA9IDU7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgICA9IDY7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICAgICA9
IDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFOWV9VTk9SREVSRURfTk9ERV9UWVBF
ICAgICAgICA9IDg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZJUlNUX09SREVSRURf
Tk9ERV9UWVBFICAgICAgICA9IDk7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2ln
bmVkIHNob3J0ICByZXN1bHRUeXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91Ymxl
ICAgICAgICAgIG51bWJlclZhbHVlCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChET01FeGNl
cHRpb24pOworICAgICAgICAgICAgCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgICAgICAgc3RyaW5nVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2Vw
dGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBib29s
ZWFuVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgICAgICAgICAgICBzaW5nbGVOb2RlVmFsdWUK
KyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgICBzbmFwc2hvdExlbmd0aAor
ICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBOb2RlIGl0ZXJhdGVOZXh0KCkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKKyAgICAgICAgTm9kZSBzbmFwc2hvdEl0ZW0oaW4gdW5zaWduZWQgbG9uZyBpbmRleCkK
KyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRleDogV2Vi
Q29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgv
WFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFs
dWF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIFhQYXRoRXZhbHVh
dG9ySW1wbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElT
JycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworI2lmbmRlZiBYUEFUSEVWQUxVQVRPUl9ICisjZGVmaW5lIFhQQVRIRVZB
TFVBVE9SX0gKKworI2luY2x1ZGUgIlNoYXJlZC5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKK2NsYXNzIE5vZGU7CisKK2NsYXNzIFhQYXRo
RXhwcmVzc2lvbjsKK2NsYXNzIFhQYXRoTlNSZXNvbHZlcjsKK2NsYXNzIFhQYXRoUmVzdWx0Owor
Citjb25zdCBpbnQgWFBhdGhFeGNlcHRpb25PZmZzZXQgPSA0MDA7Citjb25zdCBpbnQgWFBhdGhF
eGNlcHRpb25NYXggPSA0OTk7ICAgCisKK2VudW0gWFBhdGhFeGNlcHRpb25Db2RlIHsgSU5WQUxJ
RF9FWFBSRVNTSU9OX0VSUiA9IFhQYXRoRXhjZXB0aW9uT2Zmc2V0ICsgNTEsIFRZUEVfRVJSIH07
CisKK2NsYXNzIFhQYXRoRXZhbHVhdG9yIDogcHVibGljIFNoYXJlZDxYUGF0aEV2YWx1YXRvcj4K
K3sKK3B1YmxpYzoKKyAgICBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gY3JlYXRlRXhwcmVz
c2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZXhjZXB0
aW9uY29kZSk7CisgICAgUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IGNyZWF0ZU5TUmVzb2x2
ZXIoTm9kZSAqbm9kZVJlc29sdmVyKTsKKwlQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBldmFsdWF0
ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSAqY29udGV4dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0ICpyZXN1bHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ICZleGNlcHRpb25jb2RlKTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFhQQVRIRVZBTFVBVE9SSU1QTF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhO
U1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBYUGF0aE5TUmVzb2x2ZXIuaCAtIENvcHly
aWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
Zm5kZWYgWFBBVEhOU1JFU09MVkVSSU1QTF9ICisjZGVmaW5lIFhQQVRITlNSRVNPTFZFUklNUExf
SAorCisjaW5jbHVkZSAiU2hhcmVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUKK3sKKworY2xhc3MgTm9kZTsKKworY2xhc3MgWFBhdGhOU1Jlc29s
dmVyIDogcHVibGljIFNoYXJlZDxYUGF0aE5TUmVzb2x2ZXI+Cit7CisJcHVibGljOgorCQlYUGF0
aE5TUmVzb2x2ZXIoTm9kZSAqbm9kZSk7CisKKwkJU3RyaW5nIGxvb2t1cE5hbWVzcGFjZVVSSShj
b25zdCBTdHJpbmcmIHByZWZpeCk7CisKKwlwcml2YXRlOgorCQlOb2RlICptX25vZGU7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBYUEFUSE5TUkVTT0xWRVJJTVBMX0gKKwpJbmRleDogV2ViQ29yZS94
cGF0aC9pbXBsL2V4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1w
bC9leHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9leHBy
ZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBleHByZXNz
aW9uLmNjIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKKyNpbmNsdWRlIDxj
bWF0aD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIFhQYXRoIHsKKyAgICAKK1ZhbHVlOjpWYWx1ZSgpCit7Cit9CisKK1ZhbHVlOjpWYWx1
ZShOb2RlICp2YWx1ZSkKKwk6IG1fdHlwZShOb2Rlc2V0KQoreworICAgIG1fbm9kZXNldC5hcHBl
bmQodmFsdWUpOworfQorCitWYWx1ZTo6VmFsdWUoY29uc3QgTm9kZVNldCYgdmFsdWUpCisgICAg
OiBtX3R5cGUoTm9kZXNldCkKKyAgICAsIG1fbm9kZXNldCh2YWx1ZSkKK3sKK30KKworVmFsdWU6
OlZhbHVlKCBib29sIHZhbHVlICkKKwk6IG1fdHlwZSggQm9vbGVhbiApLAorCW1fYm9vbCggdmFs
dWUgKQoreworfQorCitWYWx1ZTo6VmFsdWUoIGRvdWJsZSB2YWx1ZSApCisJOiBtX3R5cGUoIE51
bWJlciApLAorCW1fbnVtYmVyKCB2YWx1ZSApCit7Cit9CisKK1ZhbHVlOjpWYWx1ZSggY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyAmdmFsdWUgKQorCTogbV90eXBlKCBTdHJpbmcgKSwKKwltX3N0cmlu
ZyggdmFsdWUgKQoreworfQorCitWYWx1ZTo6VHlwZSBWYWx1ZTo6dHlwZSgpIGNvbnN0Cit7CisJ
cmV0dXJuIG1fdHlwZTsKK30KKworYm9vbCBWYWx1ZTo6aXNOb2Rlc2V0KCkgY29uc3QKK3sKKwly
ZXR1cm4gbV90eXBlID09IE5vZGVzZXQ7Cit9CisKK2Jvb2wgVmFsdWU6OmlzQm9vbGVhbigpIGNv
bnN0Cit7CisJcmV0dXJuIG1fdHlwZSA9PSBCb29sZWFuOworfQorCitib29sIFZhbHVlOjppc051
bWJlcigpIGNvbnN0Cit7CisJcmV0dXJuIG1fdHlwZSA9PSBOdW1iZXI7Cit9CisKK2Jvb2wgVmFs
dWU6OmlzU3RyaW5nKCkgY29uc3QKK3sKKwlyZXR1cm4gbV90eXBlID09IFN0cmluZzsKK30KKwor
Tm9kZVNldCYgVmFsdWU6OnRvTm9kZVNldCgpCit7CisJaWYgKG1fdHlwZSAhPSBOb2Rlc2V0KSB7
CisgICAgICAgIExPRyhYUGF0aCwgIkNhbm5vdCBjb252ZXJ0IGFueXRoaW5nIHRvIGEgbm9kZXNl
dC4iKTsKKyAgICB9CisJcmV0dXJuIG1fbm9kZXNldDsKK30KKworY29uc3QgTm9kZVNldCYgVmFs
dWU6OnRvTm9kZVNldCgpIGNvbnN0Cit7CisJaWYgKG1fdHlwZSAhPSBOb2Rlc2V0KSB7CisgICAg
ICAgIExPRyhYUGF0aCwgIkNhbm5vdCBjb252ZXJ0IGFueXRoaW5nIHRvIGEgbm9kZXNldC4iKTsK
KyAgICB9CisgICAgCisJcmV0dXJuIG1fbm9kZXNldDsgICAgCit9ICAgIAorCitib29sIFZhbHVl
Ojp0b0Jvb2xlYW4oKSBjb25zdAoreworCXN3aXRjaCAoIG1fdHlwZSApIHsKKwkJY2FzZSBOb2Rl
c2V0OgorCQkJcmV0dXJuICFtX25vZGVzZXQuaXNFbXB0eSgpOworCQljYXNlIEJvb2xlYW46CisJ
CQlyZXR1cm4gbV9ib29sOworCQljYXNlIE51bWJlcjoKKwkJCXJldHVybiBtX251bWJlciAhPSAw
OworCQljYXNlIFN0cmluZzoKKwkJCXJldHVybiAhbV9zdHJpbmcuaXNFbXB0eSgpOworCX0KKwly
ZXR1cm4gYm9vbCgpOworfQorCitkb3VibGUgVmFsdWU6OnRvTnVtYmVyKCkgY29uc3QKK3sKKwlz
d2l0Y2ggKCBtX3R5cGUgKSB7CisJCWNhc2UgTm9kZXNldDoKKwkJCXJldHVybiBWYWx1ZSggdG9T
dHJpbmcoKSApLnRvTnVtYmVyKCk7CisJCWNhc2UgTnVtYmVyOgorCQkJcmV0dXJuIG1fbnVtYmVy
OworCQljYXNlIFN0cmluZzogeworCQkJYm9vbCBjYW5Db252ZXJ0OworCQkJRGVwcmVjYXRlZFN0
cmluZyBzID0gbV9zdHJpbmcuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7CisKKwkJCWRvdWJsZSB2YWx1
ZSA9IHMudG9Eb3VibGUoICZjYW5Db252ZXJ0ICk7CisJCQlpZiAoIGNhbkNvbnZlcnQgKSB7CisJ
CQkJcmV0dXJuIHZhbHVlOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gTkFOOworCQkJfQorCQl9
CisJCWNhc2UgQm9vbGVhbjoKKwkJCXJldHVybiBtX2Jvb2wgPyAxIDogMDsKKwl9CisJcmV0dXJu
IGRvdWJsZSgpOworfQorCitEZXByZWNhdGVkU3RyaW5nIFZhbHVlOjp0b1N0cmluZygpIGNvbnN0
Cit7CisJc3dpdGNoICggbV90eXBlICkgeworCQljYXNlIE5vZGVzZXQ6CisJCQlpZiAobV9ub2Rl
c2V0LmlzRW1wdHkoKSApIHsKKwkJCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggIiIgKTsKKwkJ
CX0KKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShtX25vZGVzZXRbMF0uZ2V0KCkpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKKwkJY2FzZSBTdHJpbmc6CisJCQlyZXR1cm4gbV9zdHJpbmc7CisJ
CWNhc2UgTnVtYmVyOgorCQkJaWYgKCBpc25hbiggbV9udW1iZXIgKSApIHsKKwkJCQlyZXR1cm4g
RGVwcmVjYXRlZFN0cmluZyggIk5hTiIgKTsKKwkJCX0gZWxzZSBpZiAoIG1fbnVtYmVyID09IDAg
KSB7CisJCQkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICIwIiApOworCQkJfSBlbHNlIGlmICgg
aXNpbmYoIG1fbnVtYmVyICkgKSB7CisJCQkJaWYgKCBzaWduYml0KCBtX251bWJlciApID09IDAg
KSB7CisJCQkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiSW5maW5pdHkiICk7CisJCQkJfSBl
bHNlIHsKKwkJCQkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICItSW5maW5pdHkiICk7CisJCQkJ
fQorCQkJfQorCQkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlciggbV9udW1iZXIgKTsK
KwkJY2FzZSBCb29sZWFuOgorCQkJcmV0dXJuIG1fYm9vbCA/IERlcHJlY2F0ZWRTdHJpbmcoICJ0
cnVlIiApCisJCQkgICAgICAgICAgICAgIDogRGVwcmVjYXRlZFN0cmluZyggImZhbHNlIiApOwor
CX0KKwlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworfQorCitFdmFsdWF0aW9uQ29udGV4dCAm
RXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKQoreworCXN0YXRpYyBFdmFsdWF0aW9uQ29u
dGV4dCBldmFsdWF0aW9uQ29udGV4dDsKKwlyZXR1cm4gZXZhbHVhdGlvbkNvbnRleHQ7Cit9CisK
K0V4cHJlc3Npb246OkV4cHJlc3Npb24oKQorCTogbV9jb25zdGFudFZhbHVlKCAwICkKK3sKK30K
KworRXhwcmVzc2lvbjo6fkV4cHJlc3Npb24oKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3N1
YkV4cHJlc3Npb25zKTsKKyAgICAKKwlkZWxldGUgbV9jb25zdGFudFZhbHVlOworfQorCitWYWx1
ZSBFeHByZXNzaW9uOjpldmFsdWF0ZSgpIGNvbnN0Cit7CisJaWYgKCBtX2NvbnN0YW50VmFsdWUg
KSB7CisJCXJldHVybiAqbV9jb25zdGFudFZhbHVlOworCX0KKwlyZXR1cm4gZG9FdmFsdWF0ZSgp
OworfQorCit2b2lkIEV4cHJlc3Npb246OmFkZFN1YkV4cHJlc3Npb24oRXhwcmVzc2lvbiAqZXhw
cikKK3sKKwltX3N1YkV4cHJlc3Npb25zLmFwcGVuZChleHByKTsKK30KKwordm9pZCBFeHByZXNz
aW9uOjpvcHRpbWl6ZSgpCit7CisJYm9vbCBhbGxTdWJFeHByZXNzaW9uc0NvbnN0YW50ID0gdHJ1
ZTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdWJFeHByZXNzaW9ucy5z
aXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9zdWJFeHByZXNzaW9uc1tpXS0+aXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgbV9zdWJFeHByZXNzaW9uc1tpXS0+b3B0aW1pemUoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYWxsU3ViRXhwcmVzc2lvbnNDb25zdGFudCA9IGZhbHNlOwor
ICAgIH0KKworCWlmIChhbGxTdWJFeHByZXNzaW9uc0NvbnN0YW50KSB7CisJCW1fY29uc3RhbnRW
YWx1ZSA9IG5ldyBWYWx1ZShkb0V2YWx1YXRlKCkpOworICAgICAgICBkZWxldGVBbGxWYWx1ZXMo
bV9zdWJFeHByZXNzaW9ucyk7CisJCW1fc3ViRXhwcmVzc2lvbnMuY2xlYXIoKTsKKwl9Cit9CisK
K3Vuc2lnbmVkIGludCBFeHByZXNzaW9uOjpzdWJFeHByQ291bnQoKSBjb25zdAoreworCXJldHVy
biBtX3N1YkV4cHJlc3Npb25zLnNpemUoKTsKK30KKworRXhwcmVzc2lvbiogRXhwcmVzc2lvbjo6
c3ViRXhwcih1bnNpZ25lZCBpKQoreworCUFTU0VSVCggaSA8IHN1YkV4cHJDb3VudCgpICk7CisK
KwlyZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKK30KKworY29uc3QgRXhwcmVzc2lvbiAqRXhw
cmVzc2lvbjo6c3ViRXhwcih1bnNpZ25lZCBpKSBjb25zdAoreworCUFTU0VSVChpIDwgc3ViRXhw
ckNvdW50KCkpOworICAgIAorICAgIHJldHVybiBtX3N1YkV4cHJlc3Npb25zW2ldOworfQorCiti
b29sIEV4cHJlc3Npb246OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3N1YkV4cHJlc3Npb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmICgh
bV9zdWJFeHByZXNzaW9uc1tpXS0+aXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworCXJldHVybiB0cnVlOworfQorCit9Cit9ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3hwYXRoL2ltcGwvcHJlZGljYXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzMDIgQEAKKy8qCisgKiBwcmVkaWNhdGUuY2MgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisKKyNpbmNsdWRl
ICJOb2RlLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorTnVtYmVyOjpOdW1iZXIoIGRvdWJsZSB2YWx1ZSAp
CisJOiBtX3ZhbHVlKCB2YWx1ZSApCit7Cit9CisKK2Jvb2wgTnVtYmVyOjppc0NvbnN0YW50KCkg
Y29uc3QKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgTnVtYmVyOjpkb0V2YWx1YXRlKCkg
Y29uc3QKK3sKKwlyZXR1cm4gVmFsdWUoIG1fdmFsdWUgKTsKK30KKworU3RyaW5nRXhwcmVzc2lv
bjo6U3RyaW5nRXhwcmVzc2lvbiggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdmFsdWUgKQorCTog
bV92YWx1ZSggdmFsdWUgKQoreworfQorCitib29sIFN0cmluZ0V4cHJlc3Npb246OmlzQ29uc3Rh
bnQoKSBjb25zdAoreworCXJldHVybiB0cnVlOworfQorCitWYWx1ZSBTdHJpbmdFeHByZXNzaW9u
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlyZXR1cm4gVmFsdWUoIG1fdmFsdWUgKTsKK30KKwor
VmFsdWUgTmVnYXRpdmU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCVZhbHVlIHAoc3ViRXhwcigw
KS0+ZXZhbHVhdGUoKSk7CisJaWYgKCFwLmlzTnVtYmVyKCkpIHsKKwkJTE9HKFhQYXRoLCAiVW5h
cnkgbWludXMgaXMgdW5kZWZpbmVkIGZvciBub24tbnVtZXJpYyB0eXBlcy4iICk7CisJCXJldHVy
biBWYWx1ZSgpOworCX0KKwlyZXR1cm4gVmFsdWUoLXAudG9OdW1iZXIoKSk7Cit9CisKK051bWVy
aWNPcDo6TnVtZXJpY09wKCBpbnQgX29wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9u
KiByaHMgKSA6CisJb3BDb2RlKCBfb3BDb2RlICkKK3sKKwlhZGRTdWJFeHByZXNzaW9uKCBsaHMg
KTsKKwlhZGRTdWJFeHByZXNzaW9uKCByaHMgKTsKK30KKworVmFsdWUgTnVtZXJpY09wOjpkb0V2
YWx1YXRlKCkgY29uc3QKK3sKKwlWYWx1ZSBsaHMoIHN1YkV4cHIoIDAgKS0+ZXZhbHVhdGUoKSk7
CisJVmFsdWUgcmhzKCBzdWJFeHByKCAxICktPmV2YWx1YXRlKCkpOworICAgIAorCWlmICghbGhz
LmlzTnVtYmVyKCkgfHwgIXJocy5pc051bWJlcigpKSB7CisJCUxPRyhYUGF0aCwgIkNhbm5vdCBw
ZXJmb3JtIG9wZXJhdGlvbiBvbiBub24tbnVtZXJpYyB0eXBlcy4iKTsKKwkJcmV0dXJuIFZhbHVl
KCk7CisJfQorCisJZG91YmxlIGxlZnRWYWwgPSBsaHMudG9OdW1iZXIoKSwgcmlnaHRWYWwgPSBy
aHMudG9OdW1iZXIoKTsKKworCXN3aXRjaCAob3BDb2RlKSB7CisJCWNhc2UgT1BfQWRkOgorCQkJ
cmV0dXJuIFZhbHVlKCBsZWZ0VmFsICsgcmlnaHRWYWwgKTsKKwkJY2FzZSBPUF9TdWI6CisJCQly
ZXR1cm4gVmFsdWUoIGxlZnRWYWwgLSByaWdodFZhbCApOworCQljYXNlIE9QX011bDoKKwkJCXJl
dHVybiBWYWx1ZSggbGVmdFZhbCAqIHJpZ2h0VmFsICk7CisJCWNhc2UgT1BfRGl2OgorCQkJaWYg
KCByaWdodFZhbCA9PSAwLjAgfHwgcmlnaHRWYWwgPT0gLTAuMCApCisJCQkJcmV0dXJuIFZhbHVl
KCk7IC8vRGl2aWRlIGJ5IDA7CisJCQllbHNlCisJCQkJcmV0dXJuIFZhbHVlKCBsZWZ0VmFsIC8g
cmlnaHRWYWwgKTsKKwkJY2FzZSBPUF9Nb2Q6CisJCQlpZiAoIHJpZ2h0VmFsID09IDAuMCB8fCBy
aWdodFZhbCA9PSAtMC4wICkKKwkJCQlyZXR1cm4gVmFsdWUoKTsgLy9EaXZpZGUgYnkgMDsKKwkJ
CWVsc2UKKwkJCQlyZXR1cm4gVmFsdWUoIHJlbWFpbmRlciggbGVmdFZhbCwgcmlnaHRWYWwgKSAp
OworCQljYXNlIE9QX0dUOgorCQkJcmV0dXJuIFZhbHVlICggbGVmdFZhbCA+IHJpZ2h0VmFsICk7
CisJCWNhc2UgT1BfR0U6CisJCQlyZXR1cm4gVmFsdWUgKCBsZWZ0VmFsID49IHJpZ2h0VmFsICk7
CisJCWNhc2UgT1BfTFQ6CisJCQlyZXR1cm4gVmFsdWUgKCBsZWZ0VmFsIDwgcmlnaHRWYWwgKTsK
KwkJY2FzZSBPUF9MRToKKwkJCXJldHVybiBWYWx1ZSAoIGxlZnRWYWwgPD0gcmlnaHRWYWwgKTsK
KwkJZGVmYXVsdDoKKwkJCWFzc2VydCgwKTsKKwkJcmV0dXJuIFZhbHVlKCk7CisJfQorfQorCitE
ZXByZWNhdGVkU3RyaW5nIE51bWVyaWNPcDo6b3BOYW1lKCkgY29uc3QKK3sKKwlzd2l0Y2ggKG9w
Q29kZSkgeworCQljYXNlIE9QX0FkZDoKKwkJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiYWRk
aXRpb24iICk7CisJCWNhc2UgT1BfU3ViOgorCQkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJz
dWJ0cmFjdGlvbiIgKTsKKwkJY2FzZSBPUF9NdWw6CisJCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmlu
ZyggIm11bHRpcGxpY2F0aW9uIiApOworCQljYXNlIE9QX0RpdjoKKwkJCXJldHVybiBEZXByZWNh
dGVkU3RyaW5nKCAiZGl2aXNpb24iICk7CisJCWNhc2UgT1BfTW9kOgorCQkJcmV0dXJuIERlcHJl
Y2F0ZWRTdHJpbmcoICJtb2R1bG8iICk7CisJCWNhc2UgT1BfR1Q6CisJCQlyZXR1cm4gRGVwcmVj
YXRlZFN0cmluZyggInJlbGF0aW9uR1QiICk7CisJCWNhc2UgT1BfR0U6CisJCQlyZXR1cm4gRGVw
cmVjYXRlZFN0cmluZyggInJlbGF0aW9uR0UiICk7CisJCWNhc2UgT1BfTFQ6CisJCQlyZXR1cm4g
RGVwcmVjYXRlZFN0cmluZyggInJlbGF0aW9uTFQiICk7CisJCWNhc2UgT1BfTEU6CisJCQlyZXR1
cm4gRGVwcmVjYXRlZFN0cmluZyggInJlbGF0aW9uTEUiICk7CisJCWRlZmF1bHQ6CisJCQlhc3Nl
cnQoMCk7CisJCQlyZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworCX0KK30KKworRXFUZXN0T3A6
OkVxVGVzdE9wKCBpbnQgX29wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMg
KSA6CisJb3BDb2RlKF9vcENvZGUpCit7CisJYWRkU3ViRXhwcmVzc2lvbiggbGhzICk7CisJYWRk
U3ViRXhwcmVzc2lvbiggcmhzICk7Cit9CisKK1ZhbHVlIEVxVGVzdE9wOjpkb0V2YWx1YXRlKCkg
Y29uc3QKK3sKKwlWYWx1ZSBsaHMoIHN1YkV4cHIoIDAgKS0+ZXZhbHVhdGUoKSApOworCVZhbHVl
IHJocyggc3ViRXhwciggMSApLT5ldmFsdWF0ZSgpICk7CisKKwlib29sIGVxdWFsOworCWlmICgg
bGhzLmlzQm9vbGVhbigpIHx8IHJocy5pc0Jvb2xlYW4oKSApIHsKKwkJZXF1YWwgPSAoIGxocy50
b0Jvb2xlYW4oKSA9PSByaHMudG9Cb29sZWFuKCkgKTsKKwl9IGVsc2UgaWYgKCBsaHMuaXNOdW1i
ZXIoKSB8fCByaHMuaXNOdW1iZXIoKSApIHsKKwkJZXF1YWwgPSAoIGxocy50b051bWJlcigpID09
IHJocy50b051bWJlcigpICk7CisJfSBlbHNlIHsKKwkJZXF1YWwgPSAoIGxocy50b1N0cmluZygp
ID09IHJocy50b1N0cmluZygpICk7CisJfQorCisJaWYgKCBvcENvZGUgPT0gT1BfRVEgKQorCQly
ZXR1cm4gVmFsdWUoIGVxdWFsICk7CisJZWxzZQorCQlyZXR1cm4gVmFsdWUoICFlcXVhbCApOwor
fQorCitEZXByZWNhdGVkU3RyaW5nIEVxVGVzdE9wOjpvcE5hbWUoKSBjb25zdAoreworCWlmICgg
b3BDb2RlID09IE9QX0VRICkKKwkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJyZWxhdGlvbkVR
IiApOworCWVsc2UKKwkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJyZWxhdGlvbk5FIiApOwor
fQorCitMb2dpY2FsT3A6OkxvZ2ljYWxPcCggaW50IF9vcENvZGUsIEV4cHJlc3Npb24qIGxocywg
RXhwcmVzc2lvbiogcmhzICkgOgorCW9wQ29kZSggX29wQ29kZSApCit7CisJYWRkU3ViRXhwcmVz
c2lvbiggbGhzICk7CisJYWRkU3ViRXhwcmVzc2lvbiggcmhzICk7Cit9CisKK2Jvb2wgTG9naWNh
bE9wOjpzaG9ydENpcmN1aXRPbigpIGNvbnN0Cit7CisJaWYgKG9wQ29kZSA9PSBPUF9BbmQpCisJ
CXJldHVybiBmYWxzZTsgLy9mYWxzZSBhbmQgZm9vCisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsgIC8v
dHJ1ZSBvciBiYXIKK30KKworYm9vbCBMb2dpY2FsT3A6OmlzQ29uc3RhbnQoKSBjb25zdAorewor
CXJldHVybiBzdWJFeHByKCAwICktPmlzQ29uc3RhbnQoKSAmJgorCSAgICAgICBzdWJFeHByKCAw
ICktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkgPT0gc2hvcnRDaXJjdWl0T24oKTsKK30KKworRGVw
cmVjYXRlZFN0cmluZyBMb2dpY2FsT3A6Om9wTmFtZSgpIGNvbnN0Cit7CisJaWYgKCBvcENvZGUg
PT0gT1BfQW5kICkKKwkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJjb25qdW5jdGlvbiIgKTsK
KwllbHNlCisJCXJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiZGlzanVuY3Rpb24iICk7Cit9CisK
K1ZhbHVlIExvZ2ljYWxPcDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJVmFsdWUgbGhzKCBzdWJF
eHByKCAwICktPmV2YWx1YXRlKCkgKTsKKworCS8vIFRoaXMgaXMgbm90IG9ubHkgYW4gb3B0aW1p
emF0aW9uLCBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aAorCS8vIGRpY3RhdGVzIHRoYXQgd2Ug
bXVzdCBkbyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24KKwlib29sIGxoc0Jvb2wgPSBsaHMudG9C
b29sZWFuKCk7CisJaWYgKCBsaHNCb29sID09IHNob3J0Q2lyY3VpdE9uKCkgKSB7CisJCXJldHVy
biBWYWx1ZSggbGhzQm9vbCApOworCX0KKworCXJldHVybiBWYWx1ZSggc3ViRXhwciggMSApLT5l
dmFsdWF0ZSgpLnRvQm9vbGVhbigpICk7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgVW5pb246Om9w
TmFtZSgpIGNvbnN0Cit7CisJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoInVuaW9uIik7Cit9CisK
K1ZhbHVlIFVuaW9uOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlWYWx1ZSBsaHMgPSBzdWJFeHBy
KCAwICktPmV2YWx1YXRlKCk7CisJVmFsdWUgcmhzID0gc3ViRXhwciggMSApLT5ldmFsdWF0ZSgp
OworCWlmICggIWxocy5pc05vZGVzZXQoKSB8fCAhcmhzLmlzTm9kZXNldCgpICkgeworCQlMT0co
WFBhdGgsICJVbmlvbiBvcGVyYXRvciAnfCcgd29ya3Mgb25seSB3aXRoIG5vZGVzZXRzLiIgKTsK
KwkJcmV0dXJuIFZhbHVlKE5vZGVTZXQoKSk7CisJfQorICAgIAorICAgIE5vZGVTZXQgbGhzTm9k
ZXMgPSBsaHMudG9Ob2RlU2V0KCk7CisgICAgTm9kZVNldCByaHNOb2RlcyA9IHJocy50b05vZGVT
ZXQoKTsKKyAgICBOb2RlU2V0IHJlc3VsdCA9IGxoc05vZGVzOworICAgIAorICAgIEhhc2hTZXQ8
Tm9kZSAqPiBub2RlczsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmhzTm9k
ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTm9kZSAqbm9kZSA9IHJoc05vZGVzW2ldLmdldCgp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFub2Rlcy5jb250YWlucyhub2RlKSkgeworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIG5vZGVzLmFkZChub2RlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gVmFsdWUocmVzdWx0KTsKK30KKwor
UHJlZGljYXRlOjpQcmVkaWNhdGUoIEV4cHJlc3Npb24gKmV4cHIgKQorCTogbV9leHByKCBleHBy
ICkKK3sKK30KKworUHJlZGljYXRlOjp+UHJlZGljYXRlKCkKK3sKKwlkZWxldGUgbV9leHByOwor
fQorCitib29sIFByZWRpY2F0ZTo6ZXZhbHVhdGUoKSBjb25zdAoreworCUFTU0VSVChtX2V4cHIg
IT0gMCk7CisKKwlWYWx1ZSByZXN1bHQoIG1fZXhwci0+ZXZhbHVhdGUoKSApOworCisJLy8gZm9v
WzNdIHJlYWxseSBtZWFucyBmb29bcG9zaXRpb24oKT0zXQorCWlmICggcmVzdWx0LmlzTnVtYmVy
KCkgKSB7CisJCUV4cHJlc3Npb24gKnJlYWxFeHByID0gbmV3IEVxVGVzdE9wKEVxVGVzdE9wOjpP
UF9FUSwKKwkJICAgICAgICAgICAgICAgIEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0
aW9uKCAicG9zaXRpb24iICksCisJCSAgICAgICAgICAgICAgICBuZXcgTnVtYmVyKCByZXN1bHQu
dG9OdW1iZXIoKSApICk7CisJCXJlc3VsdCA9IHJlYWxFeHByLT5ldmFsdWF0ZSgpOworCQlkZWxl
dGUgcmVhbEV4cHI7CisJfQorCisJcmV0dXJuIHJlc3VsdC50b0Jvb2xlYW4oKTsKK30KKwordm9p
ZCBQcmVkaWNhdGU6Om9wdGltaXplKCkKK3sKKwltX2V4cHItPm9wdGltaXplKCk7Cit9CisKK30K
K30KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94cGF0aC9pbXBsL3BhdGguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9w
YXRoLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBwYXRoLmggLSBDb3B5
cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
CisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aWZuZGVmIFBBVEhfSAorI2RlZmluZSBQQVRIX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJzdGVwLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworZXh0
ZXJuIGludCB4cGF0aHl5cGFyc2UoKTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IFhQYXRoIHsKKyAgICAgICAgCitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRXhwcmVzc2lvbgorewor
cHVibGljOgorCUZpbHRlcihFeHByZXNzaW9uKiBleHByLCBjb25zdCBWZWN0b3I8UHJlZGljYXRl
Kj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7CisJdmlydHVhbCB+RmlsdGVy
KCk7CisKK3ByaXZhdGU6CisJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKwlF
eHByZXNzaW9uICptX2V4cHI7CisgICAgVmVjdG9yPFByZWRpY2F0ZSAqPiBtX3ByZWRpY2F0ZXM7
Cit9OworCitjbGFzcyBMb2NhdGlvblBhdGggOiBwdWJsaWMgRXhwcmVzc2lvbgoreworZnJpZW5k
IGludCA6OnhwYXRoeXlwYXJzZSgpOworcHVibGljOgorCUxvY2F0aW9uUGF0aCgpOworCXZpcnR1
YWwgfkxvY2F0aW9uUGF0aCgpOworCisJdm9pZCBvcHRpbWl6ZSgpOworCitwcml2YXRlOgorCXZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgVmVjdG9yPFN0ZXAgKj4gbV9z
dGVwczsKKwlib29sIG1fYWJzb2x1dGU7Cit9OworCitjbGFzcyBQYXRoIDogcHVibGljIEV4cHJl
c3Npb24KK3sKK3B1YmxpYzoKKwlQYXRoKCBGaWx0ZXIgKmZpbHRlciwgTG9jYXRpb25QYXRoICpw
YXRoICk7CisJdmlydHVhbCB+UGF0aCgpOworCitwcml2YXRlOgorCXZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworCisJRmlsdGVyICptX2ZpbHRlcjsKKwlMb2NhdGlvblBhdGggKm1f
cGF0aDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFBBVEhfSAorCkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgv
aW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisv
KgorICogcGFyc2Vkc3RhdGVtZW50LmNjIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8
cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
CisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAicGFyc2Vkc3RhdGVtZW50LmgiCisjaW5jbHVkZSAicGF0aC5oIgorCisjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIFhQYXRoIHsKKworZXh0ZXJuIEV4cHJlc3Npb24gKnBhcnNlU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBpbnQmIGVjKTsKKworUGFyc2VkU3RhdGVtZW50OjpQ
YXJzZWRTdGF0ZW1lbnQoKQorCTogbV9leHByKCAwICkKK3sKK30KKworUGFyc2VkU3RhdGVtZW50
Ojp+UGFyc2VkU3RhdGVtZW50KCkKK3sKKwlkZWxldGUgbV9leHByOworfQorCitib29sIFBhcnNl
ZFN0YXRlbWVudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGludCYgZWMpCit7CisJ
ZGVsZXRlIG1fZXhwcjsKKyAgICAKKwltX2V4cHIgPSBwYXJzZVN0YXRlbWVudChzdGF0ZW1lbnQs
IGVjKTsKKyAgICAKKyAgICByZXR1cm4gKG1fZXhwciAhPSAwKTsKK30KKwordm9pZCBQYXJzZWRT
dGF0ZW1lbnQ6Om9wdGltaXplKCkKK3sKKwlpZiAoIW1fZXhwcikKKwkJcmV0dXJuOworCisJbV9l
eHByLT5vcHRpbWl6ZSgpOworfQorCitWYWx1ZSBQYXJzZWRTdGF0ZW1lbnQ6OmV2YWx1YXRlKE5v
ZGUgKmNvbnRleHQpIGNvbnN0Cit7CisJRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5u
b2RlID0gY29udGV4dDsKKwlyZXR1cm4gbV9leHByLT5ldmFsdWF0ZSgpOworfQorCit9Cit9Cklu
ZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogdmFyaWFibGVyZWZlcmVuY2UuY2MgLSBDb3B5cmln
aHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
T1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisg
KiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ2YXJpYWJsZXJlZmVyZW5jZS5oIgorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IFhQYXRoIHsKKyAgICAKK1ZhcmlhYmxlUmVmZXJlbmNlOjpWYXJpYWJsZVJlZmVyZW5jZShjb25z
dCBTdHJpbmcmIG5hbWUpCisJOiBtX25hbWUobmFtZSkKK3sKK30KKworYm9vbCBWYXJpYWJsZVJl
ZmVyZW5jZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIGZhbHNlOworfQorCitWYWx1
ZSBWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4qIGJpbmRpbmdzID0gJmV2YWx1YXRpb25Db250ZXh0KCkudmFyaWFibGVCaW5k
aW5nczsKKwlpZiAoIWJpbmRpbmdzLT5jb250YWlucyhtX25hbWUpKSB7CisJCS8vIFhYWCBXaGF0
IHRvIGRvIGlmIGFuIHVua25vd24gdmFyaWFibGUgaXMgcmVmZXJlbmNlZD8KKwkJcmV0dXJuIFZh
bHVlKCAiIiApOworCX0KKwlyZXR1cm4gVmFsdWUoYmluZGluZ3MtPmdldChtX25hbWUpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSk7Cit9CisKK30KK30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL2V4
cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZXhwcmVzc2lvbi5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBleHByZXNzaW9uLmggLSBDb3B5cmlnaHQg
MjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm
IEVYUFJFU1NJT05fSAorI2RlZmluZSBFWFBSRVNTSU9OX0gKKworI2luY2x1ZGUgInV0aWwuaCIK
KworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7CitjbGFzcyBYUGF0aE5T
UmVzb2x2ZXI7CisKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorc3RydWN0IEV2YWx1YXRp
b25Db250ZXh0Cit7CisJRXZhbHVhdGlvbkNvbnRleHQoKSA6IG5vZGUoIDAgKSwgc2l6ZSggMCAp
LCBwb3NpdGlvbiggMCApLCByZXNvbHZlciggMCApIHsgfQorCisJV2ViQ29yZTo6Tm9kZSAqbm9k
ZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBwb3NpdGlvbjsKKyAgICBI
YXNoTWFwPFdlYkNvcmU6OlN0cmluZywgV2ViQ29yZTo6U3RyaW5nPiB2YXJpYWJsZUJpbmRpbmdz
OworCisJLyogVGhlIGZ1bmN0aW9uIGxpYnJhcnkgaXMgZ2xvYmFsbHkgYWNjZXNzaWJsZSB0aHJv
dWdoCisJICogRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkKKwkgKi8KKwlXZWJDb3JlOjpYUGF0aE5T
UmVzb2x2ZXIgKnJlc29sdmVyOworfTsKKworY2xhc3MgVmFsdWUKK3sKK3B1YmxpYzoKKwllbnVt
IFR5cGUgeworCQlOb2Rlc2V0LCBCb29sZWFuLCBOdW1iZXIsIFN0cmluZworCX07CisKKwlWYWx1
ZSgpOworCWV4cGxpY2l0IFZhbHVlKFdlYkNvcmU6Ok5vZGUgKnZhbHVlKTsKKyAgICBleHBsaWNp
dCBWYWx1ZShjb25zdCBOb2RlU2V0JiB2YWx1ZSk7CisJZXhwbGljaXQgVmFsdWUoYm9vbCB2YWx1
ZSk7CisJZXhwbGljaXQgVmFsdWUoZG91YmxlIHZhbHVlKTsKKwlleHBsaWNpdCBWYWx1ZShjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1ZSk7CisKKwlUeXBlIHR5cGUoKSBjb25zdDsKKwlib29s
IGlzTm9kZXNldCgpIGNvbnN0OworCWJvb2wgaXNCb29sZWFuKCkgY29uc3Q7CisJYm9vbCBpc051
bWJlcigpIGNvbnN0OworCWJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKworICAgIE5vZGVTZXQmIHRv
Tm9kZVNldCgpOworICAgIGNvbnN0IE5vZGVTZXQmIHRvTm9kZVNldCgpIGNvbnN0OworICAgIAor
CWJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CisJZG91YmxlIHRvTnVtYmVyKCkgY29uc3Q7CisJRGVw
cmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorCVR5cGUgbV90eXBl
OworICAgIE5vZGVTZXQgbV9ub2Rlc2V0OworCWJvb2wgbV9ib29sOworCWRvdWJsZSBtX251bWJl
cjsKKwlEZXByZWNhdGVkU3RyaW5nIG1fc3RyaW5nOworfTsKKworY2xhc3MgRXhwcmVzc2lvbgor
eworcHVibGljOgorICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29udGV4dCAmZXZhbHVhdGlvbkNvbnRl
eHQoKTsKKworICAgIEV4cHJlc3Npb24oKTsKKyAgICB2aXJ0dWFsIH5FeHByZXNzaW9uKCk7Cisg
ICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0OworCisgICAgdm9pZCBhZGRTdWJFeHBy
ZXNzaW9uKEV4cHJlc3Npb24gKmV4cHIpOworICAgIHZvaWQgb3B0aW1pemUoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdW5zaWduZWQg
aW50IHN1YkV4cHJDb3VudCgpIGNvbnN0OworICAgIEV4cHJlc3Npb24gKnN1YkV4cHIodW5zaWdu
ZWQgaSk7CisgICAgY29uc3QgRXhwcmVzc2lvbiAqc3ViRXhwcih1bnNpZ25lZCBpKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdCA9IDA7CisK
KyAgICBWZWN0b3I8RXhwcmVzc2lvbiAqPiBtX3N1YkV4cHJlc3Npb25zOworICAgIFZhbHVlICpt
X2NvbnN0YW50VmFsdWU7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBFWFBSRVNTSU9OX0gKKwpJ
bmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgv
aW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBw
cmVkaWNhdGUuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJ
UycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgUFJFRElDQVRFX0gKKyNkZWZpbmUgUFJFRElDQVRFX0gK
KworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIFhQYXRoIHsKKyAgICAgICAgCitjbGFzcyBOdW1iZXIgOiBwdWJsaWMgRXhwcmVzc2lvbgor
eworcHVibGljOgorCU51bWJlcihkb3VibGUgdmFsdWUpOworCisJYm9vbCBpc0NvbnN0YW50KCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisK
Kwlkb3VibGUgbV92YWx1ZTsKK307CisKK2NsYXNzIFN0cmluZ0V4cHJlc3Npb24gOiBwdWJsaWMg
RXhwcmVzc2lvbgoreworcHVibGljOgorCVN0cmluZ0V4cHJlc3Npb24oY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmdmFsdWUpOworCisJYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6
CisJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKwlEZXByZWNhdGVkU3RyaW5n
IG1fdmFsdWU7Cit9OworCitjbGFzcyBOZWdhdGl2ZSA6IHB1YmxpYyBFeHByZXNzaW9uCit7Citw
cml2YXRlOgorCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3Mg
QmluYXJ5RXhwckJhc2UgOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHJvdGVjdGVkOgorCXZpcnR1
YWwgRGVwcmVjYXRlZFN0cmluZyBvcE5hbWUoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBOdW1l
cmljT3AgOiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKK3sKK3B1YmxpYzoKKwllbnVtIHsKKwkJT1Bf
QWRkID0gMSwKKwkJT1BfU3ViLAorCQlPUF9NdWwsCisJCU9QX0RpdiwKKwkJT1BfTW9kLAorCQlP
UF9HVCwKKwkJT1BfTFQsCisJCU9QX0dFLAorCQlPUF9MRQorCX07CisKKwlOdW1lcmljT3AoaW50
IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMgKTsKKworcHJpdmF0ZToK
Kwl2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3Q7CisJdmlydHVhbCBWYWx1
ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisJaW50IG9wQ29kZTsKK307CisKK2NsYXNzIEVxVGVzdE9w
IDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7CitwdWJsaWM6CisJZW51bSB7CisJCU9QX0VRID0g
MSwKKwkJT1BfTkUKKwl9OworCisJRXFUZXN0T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhz
LCBFeHByZXNzaW9uKiByaHMpOworCitwcml2YXRlOgorCXZpcnR1YWwgRGVwcmVjYXRlZFN0cmlu
ZyBvcE5hbWUoKSBjb25zdDsKKwl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKwlp
bnQgb3BDb2RlOworfTsKKworY2xhc3MgTG9naWNhbE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNl
Cit7CitwdWJsaWM6CisJZW51bSB7CisJCU9QX0FuZCA9IDEsCisJCU9QX09yCisJfTsKKworCUxv
Z2ljYWxPcCggaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMgKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisJYm9v
bCBzaG9ydENpcmN1aXRPbigpIGNvbnN0OworCXZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBvcE5h
bWUoKSBjb25zdDsKKwl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKwlpbnQgb3BD
b2RlOworfTsKKworY2xhc3MgVW5pb24gOiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKK3sKK3ByaXZh
dGU6CisJdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIG9wTmFtZSgpIGNvbnN0OworCXZpcnR1YWwg
VmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgUHJlZGljYXRlCit7CitwdWJs
aWM6CisJUHJlZGljYXRlKCBFeHByZXNzaW9uICpleHByICk7CisJflByZWRpY2F0ZSgpOworCisJ
Ym9vbCBldmFsdWF0ZSgpIGNvbnN0OworCisJdm9pZCBvcHRpbWl6ZSgpOworCitwcml2YXRlOgor
CVByZWRpY2F0ZSggY29uc3QgUHJlZGljYXRlICZyaHMgKTsKKwlQcmVkaWNhdGUgJm9wZXJhdG9y
PSggY29uc3QgUHJlZGljYXRlICZyaHMgKTsKKworCUV4cHJlc3Npb24gKm1fZXhwcjsKK307CisK
K30KK30KKyNlbmRpZiAvLyBQUkVESUNBVEVfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
ZnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxNSBAQAorLyoKKyAqIGZ1bmN0aW9ucy5jYyAtIENvcHly
aWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIK
KyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorI2RlZmluZSBERUZJTkVf
RlVOQ1RJT05fQ1JFQVRPUihDbGFzcykgXAorc3RhdGljIEZ1bmN0aW9uICpjcmVhdGUjI0NsYXNz
KCkgeyByZXR1cm4gbmV3IENsYXNzOyB9CisKK2NsYXNzIEludGVydmFsCit7CisJcHVibGljOgor
CQlzdGF0aWMgY29uc3QgaW50IEluZiA9LTE7CisKKwkJSW50ZXJ2YWwoKTsKKwkJSW50ZXJ2YWwo
IGludCB2YWx1ZSApOworCQlJbnRlcnZhbCggaW50IG1pbiwgaW50IG1heCApOworCisJCWJvb2wg
Y29udGFpbnMoIGludCB2YWx1ZSApIGNvbnN0OworCisJCURlcHJlY2F0ZWRTdHJpbmcgYXNTdHJp
bmcoKSBjb25zdDsKKworCXByaXZhdGU6CisJCWludCBtX21pbjsKKwkJaW50IG1fbWF4OworfTsK
KworY2xhc3MgRnVuTGFzdCA6IHB1YmxpYyBGdW5jdGlvbgoreworCXB1YmxpYzoKKwkJdmlydHVh
bCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuUG9zaXRpb24gOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKwlwdWJsaWM6CisJCXZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisK
Kwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2Ns
YXNzIEZ1bkNvdW50IDogcHVibGljIEZ1bmN0aW9uCit7CisJcHVibGljOgorCQl2aXJ0dWFsIGJv
b2wgaXNDb25zdGFudCgpIGNvbnN0OworCisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Mb2NhbE5hbWUgOiBwdWJsaWMgRnVuY3Rp
b24KK3sKKwlwdWJsaWM6CisJCXZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKwlw
cml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNz
IEZ1bk5hbWVzcGFjZVVSSSA6IHB1YmxpYyBGdW5jdGlvbgoreworCXB1YmxpYzoKKwkJdmlydHVh
bCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTmFtZSA6IHB1YmxpYyBGdW5jdGlv
bgoreworCXB1YmxpYzoKKwkJdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworCXBy
aXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3Mg
RnVuU3RyaW5nIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1
ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Db25jYXQgOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsK
K307CisKK2NsYXNzIEZ1blN0YXJ0c1dpdGggOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRl
OgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkNv
bnRhaW5zIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBk
b0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdWJzdHJpbmdCZWZvcmUgOiBwdWJs
aWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKK307CisKK2NsYXNzIEZ1blN1YnN0cmluZ0FmdGVyIDogcHVibGljIEZ1bmN0aW9uCit7
CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitj
bGFzcyBGdW5TdWJzdHJpbmcgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0
dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blN0cmluZ0xlbmd0
aCA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFs
dWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTm9ybWFsaXplU3BhY2UgOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsK
K307CisKK2NsYXNzIEZ1blRyYW5zbGF0ZSA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6
CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQm9v
bGVhbiA6IHB1YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTm90IDogcHVibGljIEZ1bmN0aW9uCit7
CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitj
bGFzcyBGdW5UcnVlIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHVibGljOgorCQl2aXJ0dWFsIGJv
b2wgaXNDb25zdGFudCgpIGNvbnN0OworCisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5GYWxzZSA6IHB1YmxpYyBGdW5jdGlvbgor
eworCXB1YmxpYzoKKwkJdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworCXByaXZh
dGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVu
TGFuZyA6IHB1YmxpYyBGdW5jdGlvbgoreworCXB1YmxpYzoKKwkJdmlydHVhbCBib29sIGlzQ29u
c3RhbnQoKSBjb25zdDsKKworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OworfTsKKworY2xhc3MgRnVuTnVtYmVyIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHJp
dmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBG
dW5TdW0gOiBwdWJsaWMgRnVuY3Rpb24KK3sKKwlwcml2YXRlOgorCQl2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkZsb29yIDogcHVibGljIEZ1bmN0aW9u
Cit7CisJcHJpdmF0ZToKKwkJdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitjbGFzcyBGdW5DZWlsaW5nIDogcHVibGljIEZ1bmN0aW9uCit7CisJcHJpdmF0ZToKKwkJdmly
dHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Sb3VuZCA6IHB1
YmxpYyBGdW5jdGlvbgoreworCXByaXZhdGU6CisJCXZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OworfTsKKworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkxhc3QgKQorREVGSU5F
X0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blBvc2l0aW9uICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KCBGdW5Db3VudCApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuTG9jYWxOYW1lICkKK0RF
RklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5OYW1lc3BhY2VVUkkgKQorREVGSU5FX0ZVTkNUSU9O
X0NSRUFUT1IoIEZ1bk5hbWUgKQorCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuU3RyaW5n
ICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5Db25jYXQgKQorREVGSU5FX0ZVTkNUSU9O
X0NSRUFUT1IoIEZ1blN0YXJ0c1dpdGggKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkNv
bnRhaW5zICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5TdWJzdHJpbmdCZWZvcmUgKQor
REVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blN1YnN0cmluZ0FmdGVyICkKK0RFRklORV9GVU5D
VElPTl9DUkVBVE9SKCBGdW5TdWJzdHJpbmcgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1
blN0cmluZ0xlbmd0aCApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuTm9ybWFsaXplU3Bh
Y2UgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blRyYW5zbGF0ZSApCisKK0RFRklORV9G
VU5DVElPTl9DUkVBVE9SKCBGdW5Cb29sZWFuICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBG
dW5Ob3QgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blRydWUgKQorREVGSU5FX0ZVTkNU
SU9OX0NSRUFUT1IoIEZ1bkZhbHNlICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5MYW5n
ICkKKworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bk51bWJlciApCitERUZJTkVfRlVOQ1RJ
T05fQ1JFQVRPUiggRnVuU3VtICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5GbG9vciAp
CitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuQ2VpbGluZyApCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUiggRnVuUm91bmQgKQorCisjdW5kZWYgREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IKKwor
SW50ZXJ2YWw6OkludGVydmFsKCkKKwk6IG1fbWluKCBJbmYgKSwKKwltX21heCggSW5mICkKK3sK
K30KKworSW50ZXJ2YWw6OkludGVydmFsKCBpbnQgdmFsdWUgKQorCTogbV9taW4oIHZhbHVlICks
CisJbV9tYXgoIHZhbHVlICkKK3sKK30KKworSW50ZXJ2YWw6OkludGVydmFsKCBpbnQgbWluLCBp
bnQgbWF4ICkKKwk6IG1fbWluKCBtaW4gKSwKKwltX21heCggbWF4ICkKK3sKK30KKworYm9vbCBJ
bnRlcnZhbDo6Y29udGFpbnMoIGludCB2YWx1ZSApIGNvbnN0Cit7CisJaWYgKCBtX21pbiA9PSBJ
bmYgJiYgbV9tYXggPT0gSW5mICkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoIG1fbWlu
ID09IEluZiApIHsKKwkJcmV0dXJuIHZhbHVlIDw9IG1fbWF4OworCX0KKworCWlmICggbV9tYXgg
PT0gSW5mICkgeworCQlyZXR1cm4gdmFsdWUgPj0gbV9taW47CisJfQorCisJcmV0dXJuIHZhbHVl
ID49IG1fbWluICYmIHZhbHVlIDw9IG1fbWF4OworfQorCitEZXByZWNhdGVkU3RyaW5nIEludGVy
dmFsOjphc1N0cmluZygpIGNvbnN0Cit7CisJRGVwcmVjYXRlZFN0cmluZyBzID0gIlsiOworCisJ
aWYgKCBtX21pbiA9PSBJbmYgKSB7CisJCXMgKz0gIi1JbmZpbml0eSI7CisJfSBlbHNlIHsKKwkJ
cyArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoIG1fbWluICk7CisJfQorCisJcyArPSAiLi4i
OworCisJaWYgKCBtX21heCA9PSBJbmYgKSB7CisJCXMgKz0gIkluZmluaXR5IjsKKwl9IGVsc2Ug
eworCQlzICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlciggbV9tYXggKTsKKwl9CisKKwlzICs9
ICJdIjsKKworCXJldHVybiBzOworfQorCit2b2lkIEZ1bmN0aW9uOjpzZXRBcmd1bWVudHMoY29u
c3QgVmVjdG9yPEV4cHJlc3Npb24qPiAmYXJncykKK3sKKyAgICBWZWN0b3I8RXhwcmVzc2lvbio+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOworCisgICAgZm9yIChWZWN0b3I8RXhw
cmVzc2lvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyBp
dCsrKQorICAgICAgICBhZGRTdWJFeHByZXNzaW9uKCppdCk7Cit9CisKK3ZvaWQgRnVuY3Rpb246
OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworCW1fbmFtZSA9IG5hbWU7Cit9CisKK0V4
cHJlc3Npb24gKkZ1bmN0aW9uOjphcmcoaW50IGkpCit7CisJcmV0dXJuIHN1YkV4cHIoaSk7Cit9
CisKK2NvbnN0IEV4cHJlc3Npb24gKkZ1bmN0aW9uOjphcmcoaW50IGkpIGNvbnN0Cit7CisJcmV0
dXJuIHN1YkV4cHIoaSk7Cit9CisKK3Vuc2lnbmVkIGludCBGdW5jdGlvbjo6YXJnQ291bnQoKSBj
b25zdAoreworCXJldHVybiBzdWJFeHByQ291bnQoKTsKK30KKworU3RyaW5nIEZ1bmN0aW9uOjpu
YW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9uYW1lOworfQorCitWYWx1ZSBGdW5MYXN0Ojpkb0V2
YWx1YXRlKCkgY29uc3QKK3sKKwlyZXR1cm4gVmFsdWUoZG91YmxlKEV4cHJlc3Npb246OmV2YWx1
YXRpb25Db250ZXh0KCkuc2l6ZSkpOworfQorCitib29sIEZ1bkxhc3Q6OmlzQ29uc3RhbnQoKSBj
b25zdAoreworCXJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVuUG9zaXRpb246OmRvRXZhbHVh
dGUoKSBjb25zdAoreworCXJldHVybiBWYWx1ZShkb3VibGUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlv
bkNvbnRleHQoKS5wb3NpdGlvbikpOworfQorCitib29sIEZ1blBvc2l0aW9uOjppc0NvbnN0YW50
KCkgY29uc3QKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnVuTG9jYWxOYW1lOjppc0Nv
bnN0YW50KCkgY29uc3QKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1bkxvY2FsTmFt
ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJTm9kZSAqbm9kZSA9IDA7CisJaWYgKCBhcmdDb3Vu
dCgpID4gMCApIHsKKwkJVmFsdWUgYSA9IGFyZyggMCApLT5ldmFsdWF0ZSgpOworCQlpZiAoIGEu
aXNOb2Rlc2V0KCkgKSB7CisJCQlub2RlID0gYS50b05vZGVTZXQoKVswXS5nZXQoKTsKKwkJfQor
CX0KKworCWlmICghbm9kZSkKKwkJbm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKwor
CXJldHVybiBWYWx1ZShub2RlLT5sb2NhbE5hbWUoKS5kZXByZWNhdGVkU3RyaW5nKCkpOworfQor
Citib29sIEZ1bk5hbWVzcGFjZVVSSTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIGZh
bHNlOworfQorCitWYWx1ZSBGdW5OYW1lc3BhY2VVUkk6OmRvRXZhbHVhdGUoKSBjb25zdAorewor
CU5vZGUgKm5vZGUgPSAwOworCWlmICggYXJnQ291bnQoKSA+IDAgKSB7CisJCVZhbHVlIGEgPSBh
cmcoIDAgKS0+ZXZhbHVhdGUoKTsKKwkJaWYgKCBhLmlzTm9kZXNldCgpICkgeworCQkJbm9kZSA9
IGEudG9Ob2RlU2V0KClbMF0uZ2V0KCk7CisJCX0KKwl9CisKKwlpZiAoICFub2RlICkgeworCQlu
b2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworCX0KKworCXJldHVybiBWYWx1ZSggbm9k
ZS0+bmFtZXNwYWNlVVJJKCkuZGVwcmVjYXRlZFN0cmluZygpICk7Cit9CisKK2Jvb2wgRnVuTmFt
ZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIGZhbHNlOworfQorCitWYWx1ZSBGdW5O
YW1lOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlOb2RlICpub2RlID0gMDsKKwlpZiAoIGFyZ0Nv
dW50KCkgPiAwICkgeworCQlWYWx1ZSBhID0gYXJnKCAwICktPmV2YWx1YXRlKCk7CisJCWlmICgg
YS5pc05vZGVzZXQoKSApIHsKKwkJCW5vZGUgPSBhLnRvTm9kZVNldCgpWzBdLmdldCgpOworCQl9
CisJfQorCisJaWYgKCAhbm9kZSApIHsKKwkJbm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9k
ZTsKKwl9CisKKwlEZXByZWNhdGVkU3RyaW5nIHMgPSBub2RlLT5uYW1lc3BhY2VVUkkoKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CisJcyArPSAiOiI7CisJcyArPSBub2RlLT5sb2NhbE5hbWUoKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CisKKwlyZXR1cm4gVmFsdWUoIHMgKTsKK30KKworVmFsdWUgRnVuQ291
bnQ6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCVZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7
CisgICAgCisJaWYgKCFhLmlzTm9kZXNldCgpKSB7CisgICAgICAgIExPRyhYUGF0aCwgImNvdW50
KCkgZXhwZWN0cyA8bm9kZXNldD5cbiIpOworCisJCXJldHVybiBWYWx1ZSggMC4wICk7CisJfQor
ICAgIAorCXJldHVybiBWYWx1ZShkb3VibGUoYS50b05vZGVTZXQoKS5zaXplKCkpKTsKK30KKwor
Ym9vbCBGdW5Db3VudDo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisJcmV0dXJuIGZhbHNlOworfQor
CitWYWx1ZSBGdW5TdHJpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCWlmICggYXJnQ291bnQo
KSA9PSAwICkgeworCQlEZXByZWNhdGVkU3RyaW5nIHMgPSBWYWx1ZSggRXhwcmVzc2lvbjo6ZXZh
bHVhdGlvbkNvbnRleHQoKS5ub2RlICkudG9TdHJpbmcoKTsKKwkJcmV0dXJuIFZhbHVlKCBzICk7
CisJfQorCXJldHVybiBWYWx1ZSggYXJnKCAwICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKSApOwor
fQorCitWYWx1ZSBGdW5Db25jYXQ6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCURlcHJlY2F0ZWRT
dHJpbmcgc3RyOworCWZvciAoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsr
aSApIHsKKwkJc3RyLmFwcGVuZCggYXJnKCBpICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKSApOwor
CX0KKwlyZXR1cm4gVmFsdWUoIERlcHJlY2F0ZWRTdHJpbmcoIHN0ciApICk7Cit9CisKK1ZhbHVl
IEZ1blN0YXJ0c1dpdGg6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCURlcHJlY2F0ZWRTdHJpbmcg
czEgPSBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCURlcHJlY2F0ZWRTdHJpbmcg
czIgPSBhcmcoIDEgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisJaWYgKCBzMi5pc0VtcHR5
KCkgKSB7CisJCXJldHVybiBWYWx1ZSggdHJ1ZSApOworCX0KKworCXJldHVybiBWYWx1ZSggczEu
c3RhcnRzV2l0aCggczIgKSApOworfQorCitWYWx1ZSBGdW5Db250YWluczo6ZG9FdmFsdWF0ZSgp
IGNvbnN0Cit7CisJRGVwcmVjYXRlZFN0cmluZyBzMSA9IGFyZyggMCApLT5ldmFsdWF0ZSgpLnRv
U3RyaW5nKCk7CisJRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZyggMSApLT5ldmFsdWF0ZSgpLnRv
U3RyaW5nKCk7CisKKwlpZiAoIHMyLmlzRW1wdHkoKSApIHsKKwkJcmV0dXJuIFZhbHVlKCB0cnVl
ICk7CisJfQorCisJcmV0dXJuIFZhbHVlKCBzMS5jb250YWlucyggczIgKSAhPSAwKTsKK30KKwor
VmFsdWUgRnVuU3Vic3RyaW5nQmVmb3JlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlEZXByZWNh
dGVkU3RyaW5nIHMxID0gYXJnKCAwICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKwlEZXByZWNh
dGVkU3RyaW5nIHMyID0gYXJnKCAxICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworCWlmICgg
czIuaXNFbXB0eSgpICkgeworCQlyZXR1cm4gVmFsdWUoICIiICk7CisJfQorCWludCBpID0gczEu
ZmluZCggczIgKTsKKworCWlmICggaSA9PSAtMSApIHsKKwkJcmV0dXJuIFZhbHVlKCAiIiApOwor
CX0KKworCXJldHVybiBWYWx1ZSggRGVwcmVjYXRlZFN0cmluZyggczEubGVmdCggaSApICkgKTsK
K30KKworVmFsdWUgRnVuU3Vic3RyaW5nQWZ0ZXI6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCURl
cHJlY2F0ZWRTdHJpbmcgczEgPSBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCURl
cHJlY2F0ZWRTdHJpbmcgczIgPSBhcmcoIDEgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisJ
aWYgKCBzMi5pc0VtcHR5KCkgKSB7CisJCXJldHVybiBWYWx1ZSggczIgKTsKKwl9CisKKwlpbnQg
aSA9IHMxLmZpbmQoIHMyICk7CisJaWYgKCBpID09IC0xICkgeworCQlyZXR1cm4gVmFsdWUoICIi
ICk7CisJfQorCisJcmV0dXJuIFZhbHVlKCBEZXByZWNhdGVkU3RyaW5nKCBzMS5taWQoIGkgKyAx
ICkgKSApOworfQorCitWYWx1ZSBGdW5TdWJzdHJpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAorewor
CURlcHJlY2F0ZWRTdHJpbmcgcyA9IGFyZyggMCApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisJ
bG9uZyBwb3MgPSBsb25nKHJvdW5kKGFyZyggMSApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpKTsK
Kwlib29sIGhhdmVMZW5ndGggPSBhcmdDb3VudCgpID09IDM7CisJbG9uZyBsZW4gPSAtMTsKKwlp
ZiAoaGF2ZUxlbmd0aCkKKwkJbGVuID0gbG9uZyhyb3VuZChhcmcoIDIgKS0+ZXZhbHVhdGUoKS50
b051bWJlcigpKSk7CisKKwlpZiAocG9zID4gbG9uZyhzLmxlbmd0aCgpKSkgCisJCXJldHVybiBW
YWx1ZSggIiIgKTsKKworCWlmIChoYXZlTGVuZ3RoICYmIHBvcyA8IDEpIHsKKwkJbGVuIC09IDEg
LSBwb3M7CisJCXBvcyA9IDE7CisJCWlmICggbGVuIDwgMSApIHsKKwkJCXJldHVybiBWYWx1ZSgg
IiIgKTsKKwkJfQorCX0KKworCXJldHVybiBWYWx1ZShEZXByZWNhdGVkU3RyaW5nKHMubWlkKHBv
cyAtIDEsIGxlbikpKTsKK30KKworVmFsdWUgRnVuU3RyaW5nTGVuZ3RoOjpkb0V2YWx1YXRlKCkg
Y29uc3QKK3sKKwlpZiAoIGFyZ0NvdW50KCkgPT0gMCApIHsKKwkJRGVwcmVjYXRlZFN0cmluZyBz
ID0gVmFsdWUoIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSApLnRvU3RyaW5n
KCk7CisJCXJldHVybiBWYWx1ZSggZG91YmxlKCBzLmxlbmd0aCgpICkgKTsKKwl9CisKKwlyZXR1
cm4gVmFsdWUoIGRvdWJsZSggYXJnKCAwICktPmV2YWx1YXRlKCkudG9TdHJpbmcoKS5sZW5ndGgo
KSApICk7Cit9CisKK1ZhbHVlIEZ1bk5vcm1hbGl6ZVNwYWNlOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKwlpZiAoIGFyZ0NvdW50KCkgPT0gMCApIHsKKwkJRGVwcmVjYXRlZFN0cmluZyBzID0gVmFs
dWUoIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSApLnRvU3RyaW5nKCk7CisJ
CXJldHVybiBWYWx1ZShEZXByZWNhdGVkU3RyaW5nKHMuc2ltcGxpZnlXaGl0ZVNwYWNlKCkpKTsK
Kwl9CisKKwlEZXByZWNhdGVkU3RyaW5nIHMgPSBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b1N0cmlu
ZygpOworCXMgPSBzLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworCXJldHVybiBWYWx1ZShEZXByZWNh
dGVkU3RyaW5nKHMpKTsKK30KKworVmFsdWUgRnVuVHJhbnNsYXRlOjpkb0V2YWx1YXRlKCkgY29u
c3QKK3sKKwlEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKCAwICktPmV2YWx1YXRlKCkudG9TdHJp
bmcoKTsKKwlEZXByZWNhdGVkU3RyaW5nIHMyID0gYXJnKCAxICktPmV2YWx1YXRlKCkudG9TdHJp
bmcoKTsKKwlEZXByZWNhdGVkU3RyaW5nIHMzID0gYXJnKCAyICktPmV2YWx1YXRlKCkudG9TdHJp
bmcoKTsKKwlEZXByZWNhdGVkU3RyaW5nIG5ld1N0cmluZzsKKworCWZvciAodW5zaWduZWQgaTEg
PSAwOyBpMSA8IHMxLmxlbmd0aCgpOyArK2kxKSB7CisJCVFDaGFyIGNoID0gczFbaTFdOworCQlp
bnQgaTIgPSBzMi5maW5kKGNoKTsKKyAgICAgICAgCisJCWlmIChpMiA9PSAtMSkgCisJCQluZXdT
dHJpbmcgKz0gY2g7CisJCWVsc2UgaWYgKCh1bnNpZ25lZClpMiA8IHMzLmxlbmd0aCgpKQorCQkJ
bmV3U3RyaW5nICs9IHMzWyBpMiBdOworCX0KKworCXJldHVybiBWYWx1ZSggRGVwcmVjYXRlZFN0
cmluZyggbmV3U3RyaW5nICkgKTsKK30KKworVmFsdWUgRnVuQm9vbGVhbjo6ZG9FdmFsdWF0ZSgp
IGNvbnN0Cit7CisJcmV0dXJuIFZhbHVlKCBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b0Jvb2xlYW4o
KSApOworfQorCitWYWx1ZSBGdW5Ob3Q6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCXJldHVybiBW
YWx1ZSggIWFyZyggMCApLT5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpICk7Cit9CisKK1ZhbHVlIEZ1
blRydWU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCXJldHVybiBWYWx1ZSggdHJ1ZSApOworfQor
Citib29sIEZ1blRydWU6OmlzQ29uc3RhbnQoKSBjb25zdAoreworCXJldHVybiB0cnVlOworfQor
CitWYWx1ZSBGdW5MYW5nOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlEZXByZWNhdGVkU3RyaW5n
IGxhbmcgPSBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisJUmVmUHRyPE5vZGU+
IGxhbmdOb2RlID0gMDsKKwlOb2RlICpub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOwor
CisJU3RyaW5nIHhtcyggInhtcyIgKTsKKwlTdHJpbmcgeG1zbnNVUkkgPSBub2RlLT5sb29rdXBO
YW1lc3BhY2VVUkkoeG1zKTsKKworCXdoaWxlICggbm9kZSApIHsKKwkJTmFtZWRBdHRyTWFwICph
dHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKwkJU3RyaW5nIGwoICJsYW5nIiApOworCQlsYW5n
Tm9kZSA9IGF0dHJzLT5nZXROYW1lZEl0ZW1OUyh4bXNuc1VSSSwgbCk7CisJCWlmICggbGFuZ05v
ZGUgKSB7CisJCQlicmVhazsKKwkJfQorCQlub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCX0K
KworCWlmICggIWxhbmdOb2RlICkgeworCQlyZXR1cm4gVmFsdWUoIGZhbHNlICk7CisJfQorCisJ
RGVwcmVjYXRlZFN0cmluZyBsYW5nTm9kZVZhbHVlID0gbGFuZ05vZGUtPm5vZGVWYWx1ZSgpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKKworCS8vIGV4dHJhY3QgJ2VuJyBvdXQgb2YgJ2VuLXVzJworCWxh
bmdOb2RlVmFsdWUgPSBsYW5nTm9kZVZhbHVlLmxlZnQobGFuZ05vZGVWYWx1ZS5maW5kKCctJykp
OworCisJcmV0dXJuIFZhbHVlKGxhbmdOb2RlVmFsdWUubG93ZXIoKSA9PSBsYW5nLmxvd2VyKCkp
OworfQorCitib29sIEZ1bkxhbmc6OmlzQ29uc3RhbnQoKSBjb25zdAoreworCXJldHVybiBmYWxz
ZTsKK30KKworVmFsdWUgRnVuRmFsc2U6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCXJldHVybiBW
YWx1ZSggZmFsc2UgKTsKK30KKworYm9vbCBGdW5GYWxzZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7
CisJcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVlIEZ1bk51bWJlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0
Cit7CisJcmV0dXJuIFZhbHVlKCBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b051bWJlcigpICk7Cit9
CisKK1ZhbHVlIEZ1blN1bTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisJVmFsdWUgYSA9IGFyZygg
MCApLT5ldmFsdWF0ZSgpOworCWlmICggIWEuaXNOb2Rlc2V0KCkgKSB7CisgICAgICAgIExPRyhY
UGF0aCwgInN1bSgpIGV4cGVjdHMgPG5vZGVzZXQ+XG4iKTsKKwkJcmV0dXJuIFZhbHVlKCAwLjAg
KTsKKwl9CisKKwlkb3VibGUgc3VtID0gMC4wOworICAgIGNvbnN0IE5vZGVTZXQgbm9kZXMgPSBh
LnRvTm9kZVNldCgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5z
aXplKCk7IGkrKykKKyAgICAgICAgc3VtICs9IFZhbHVlKHN0cmluZ1ZhbHVlKG5vZGVzW2ldLmdl
dCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpLnRvTnVtYmVyKCk7CisgICAgCisJcmV0dXJuIFZhbHVl
KCBzdW0gKTsKK30KKworVmFsdWUgRnVuRmxvb3I6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCWNv
bnN0IGRvdWJsZSBudW0gPSBhcmcoIDAgKS0+ZXZhbHVhdGUoKS50b051bWJlcigpOworCisJaWYg
KCBpc25hbiggbnVtICkgfHwgaXNpbmYoIG51bSApICkgeworCQlyZXR1cm4gVmFsdWUoIG51bSAp
OworCX0KKworCXJldHVybiBWYWx1ZSggZmxvb3IoIG51bSApICk7Cit9CisKK1ZhbHVlIEZ1bkNl
aWxpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworCWNvbnN0IGRvdWJsZSBudW0gPSBhcmcoIDAg
KS0+ZXZhbHVhdGUoKS50b051bWJlcigpOworCisJaWYgKGlzbmFuKG51bSkgfHwgaXNpbmYobnVt
KSkgCisJCXJldHVybiBWYWx1ZShudW0pOworCisJcmV0dXJuIFZhbHVlKGNlaWwobnVtKSk7Cit9
CisKK1ZhbHVlIEZ1blJvdW5kOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlyZXR1cm4gVmFsdWUo
ZG91YmxlKHJvdW5kKGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKSkpOworfQorCitzdHJ1
Y3QgRnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvblJlYworeworCXR5cGVkZWYgRnVuY3Rpb24gKigq
RmFjdG9yeUZuICkoKTsKKworCUZhY3RvcnlGbiBmYWN0b3J5Rm47CisJSW50ZXJ2YWwgYXJnczsK
K307CisKK3N0cnVjdCBGdW5jdGlvbk1hcHBpbmcKK3sKKwljb25zdCBjaGFyICpuYW1lOworCUZ1
bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMgZnVuY3Rpb247Cit9OworCitGdW5jdGlvbkxpYnJh
cnkgJkZ1bmN0aW9uTGlicmFyeTo6c2VsZigpCit7CisJc3RhdGljIEZ1bmN0aW9uTGlicmFyeSBp
bnN0YW5jZTsKKwlyZXR1cm4gaW5zdGFuY2U7Cit9CisKK0Z1bmN0aW9uTGlicmFyeTo6RnVuY3Rp
b25MaWJyYXJ5KCkKK3sKKyAgICBzdGF0aWMgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9uc1tdID0g
eworCXsgImxhc3QiLCB7ICZjcmVhdGVGdW5MYXN0LCAwIH0gfSwKKwl7ICJsYXN0IiwgeyAmY3Jl
YXRlRnVuTGFzdCwgMCB9IH0sCisJeyAicG9zaXRpb24iLCB7ICZjcmVhdGVGdW5Qb3NpdGlvbiwg
MCB9IH0sCisJeyAiY291bnQiLCB7ICZjcmVhdGVGdW5Db3VudCwgMSB9IH0sCisJeyAic3VtIiwg
eyAmY3JlYXRlRnVuU3VtLCAxIH0gfSwKKwl7ICJsb2NhbC1uYW1lIiwgeyAmY3JlYXRlRnVuTG9j
YWxOYW1lLCBJbnRlcnZhbCggMCwgMSApIH0gfSwKKwl7ICJuYW1lc3BhY2UtdXJpIiwgeyAmY3Jl
YXRlRnVuTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCggMCwgMSApIH0gfSwKKwl7ICJuYW1lIiwgeyAm
Y3JlYXRlRnVuTmFtZSwgSW50ZXJ2YWwoIDAsIDEgKSB9IH0sCisJeyAic3RyaW5nIiwgeyAmY3Jl
YXRlRnVuU3RyaW5nLCBJbnRlcnZhbCggMCwgMSApIH0gfSwKKwl7ICJjb25jYXQiLCB7ICZjcmVh
dGVGdW5Db25jYXQsIEludGVydmFsKCAyLCBJbnRlcnZhbDo6SW5mICkgfSB9LAorCXsgInN0YXJ0
cy13aXRoIiwgeyAmY3JlYXRlRnVuU3RhcnRzV2l0aCwgMiB9IH0sCisJeyAiY29udGFpbnMiLCB7
ICZjcmVhdGVGdW5Db250YWlucywgMiB9IH0sCisJeyAic3Vic3RyaW5nLWJlZm9yZSIsIHsgJmNy
ZWF0ZUZ1blN1YnN0cmluZ0JlZm9yZSwgMiB9IH0sCisJeyAic3Vic3RyaW5nLWFmdGVyIiwgeyAm
Y3JlYXRlRnVuU3Vic3RyaW5nQWZ0ZXIsIDIgfSB9LAorCXsgInN1YnN0cmluZyIsIHsgJmNyZWF0
ZUZ1blN1YnN0cmluZywgSW50ZXJ2YWwoIDIsIDMgKSB9IH0sCisJeyAic3RyaW5nLWxlbmd0aCIs
IHsgJmNyZWF0ZUZ1blN0cmluZ0xlbmd0aCwgMSB9IH0sCisJeyAibm9ybWFsaXplLXNwYWNlIiwg
eyAmY3JlYXRlRnVuTm9ybWFsaXplU3BhY2UsIDEgfSB9LAorCXsgInRyYW5zbGF0ZSIsIHsgJmNy
ZWF0ZUZ1blRyYW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIAorCXsgImJvb2xlYW4iLCB7ICZjcmVh
dGVGdW5Cb29sZWFuLCAxIH0gfSwKKwl7ICJub3QiLCB7ICZjcmVhdGVGdW5Ob3QsIDEgfSB9LAor
CXsgInRydWUiLCB7ICZjcmVhdGVGdW5UcnVlLCAwIH0gfSwKKwl7ICJmYWxzZSIsIHsgJmNyZWF0
ZUZ1bkZhbHNlLCAwIH0gfSwKKwl7ICJsYW5nIiwgeyAmY3JlYXRlRnVuTGFuZywgMSB9IH0sCisg
ICAgICAgIAorCXsgIm51bWJlciIsIHsgJmNyZWF0ZUZ1bk51bWJlciwgMSB9IH0sCisJeyAiZmxv
b3IiLCB7ICZjcmVhdGVGdW5GbG9vciwgMSB9IH0sCisJeyAiY2VpbGluZyIsIHsgJmNyZWF0ZUZ1
bkNlaWxpbmcsIDEgfSB9LAorCXsgInJvdW5kIiwgeyAmY3JlYXRlRnVuUm91bmQsIDEgfSB9Cisg
ICAgfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG51bUZ1bmN0aW9ucyA9IHNpemVv
ZiggZnVuY3Rpb25zICkgLyBzaXplb2YoIGZ1bmN0aW9uc1sgMCBdICk7CisgICAgICAgIAorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GdW5jdGlvbnM7ICsraSApIHsKKyAgICAgICAg
bV9mdW5jdGlvbkRpY3Quc2V0KGZ1bmN0aW9uc1tpXS5uYW1lLCBmdW5jdGlvbnNbaV0uZnVuY3Rp
b24pOworCX0KK30KKworRnVuY3Rpb24gKkZ1bmN0aW9uTGlicmFyeTo6Z2V0RnVuY3Rpb24oY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiAmYXJncykgY29uc3QKK3sK
KwlpZiAoIW1fZnVuY3Rpb25EaWN0LmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIExPRyhYUGF0
aCwgIkZ1bmN0aW9uICclcycgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLlxu
IiwgbmFtZSk7CisgICAgICAgIAorCQkvLyBSZXR1cm4gYSBkdW1teSBmdW5jdGlvbiBpbnN0ZWFk
IG9mIDAuCisJCUZ1bmN0aW9uICpmdW5jVHJ1ZSA9IG1fZnVuY3Rpb25EaWN0LmdldCgidHJ1ZSIp
LmZhY3RvcnlGbigpOworCQlmdW5jVHJ1ZS0+c2V0TmFtZSgidHJ1ZSIpOworCQlyZXR1cm4gZnVu
Y1RydWU7CisJfQorCisJRnVuY3Rpb25SZWMgZnVuY3Rpb25SZWMgPSBtX2Z1bmN0aW9uRGljdC5n
ZXQobmFtZSk7CisJaWYgKCFmdW5jdGlvblJlYy5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkg
eworICAgICAgICBMT0coWFBhdGgsICJGdW5jdGlvbiAnJXMnIHJlcXVpcmVzICVkIGFyZ3VtZW50
cywgYnV0ICVkIGdpdmVuLlxuIiwgbmFtZSwgZnVuY3Rpb25SZWMuYXJncy5hc1N0cmluZygpLmFz
Y2lpKCksIGFyZ3Muc2l6ZSgpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJRnVuY3Rpb24gKmZ1bmN0
aW9uID0gZnVuY3Rpb25SZWMuZmFjdG9yeUZuKCk7CisJZnVuY3Rpb24tPnNldEFyZ3VtZW50cyhh
cmdzKTsKKwlmdW5jdGlvbi0+c2V0TmFtZSggbmFtZSApOworICAgIAorCXJldHVybiBmdW5jdGlv
bjsKK30KKworfQorfQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIHBhcnNlZHN0YXRlbWVudC5oIC0gQ29weXJp
Z2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT
IE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAor
ICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lm
bmRlZiBQQVJTRURTVEFURU1FTlRfSAorI2RlZmluZSBQQVJTRURTVEFURU1FTlRfSAorCisjaW5j
bHVkZSAidXRpbC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgTm9kZTsKKyAgICAKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAor
Y2xhc3MgRXhwcmVzc2lvbjsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQYXJzZWRTdGF0ZW1lbnQK
K3sKK3B1YmxpYzoKKwlQYXJzZWRTdGF0ZW1lbnQoKTsKKwl+UGFyc2VkU3RhdGVtZW50KCk7CisK
Kwlib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYyk7
CisKKwl2b2lkIG9wdGltaXplKCk7CisKKwlWYWx1ZSBldmFsdWF0ZShOb2RlICpjb250ZXh0KSBj
b25zdDsKKworcHJpdmF0ZToKKwlFeHByZXNzaW9uICptX2V4cHI7Cit9OworCit9Cit9CisjZW5k
aWYgLy8gUEFSU0VEU1RBVEVNRU5UX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3Zhcmlh
YmxlcmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxl
cmVmZXJlbmNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVy
ZWZlcmVuY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIHZhcmlhYmxl
cmVmZXJlbmNlLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3Jn
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
CisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBWQVJJQUJMRVJFRkVSRU5DRV9I
CisjZGVmaW5lIFZBUklBQkxFUkVGRVJFTkNFX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAKK2NsYXNzIFZh
cmlhYmxlUmVmZXJlbmNlIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKwlWYXJpYWJs
ZVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisJdmlydHVhbCBib29sIGlzQ29uc3Rh
bnQoKSBjb25zdDsKKworcHJpdmF0ZToKKwl2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25z
dDsKKworCVN0cmluZyBtX25hbWU7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBWQVJJQUJMRVJF
RkVSRU5DRV9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTA1IEBACisvKgorICogdG9rZW5pemVyLmNjIC0gQ29weXJpZ2h0IDIwMDUgTWFrc2ltIE9y
bG92aWNoIDxtYWtzaW1Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAidG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJYUGF0aEdyYW1tYXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworc3RydWN0IFRva2Vu
Cit7CisJaW50ICAgICB0eXBlOworCURlcHJlY2F0ZWRTdHJpbmcgdmFsdWU7CisJaW50ICAgICBp
bnRWYWx1ZTsgLy8wIGlmIG5vdCBzZXQKKyAgICAKKwlUb2tlbihpbnQgX3R5cGUpOiB0eXBlKF90
eXBlKSwgaW50VmFsdWUoMCkge30KKwlUb2tlbihEZXByZWNhdGVkU3RyaW5nIF92YWx1ZSk6IHR5
cGUoRVJST1IrMSksIHZhbHVlKF92YWx1ZSksaW50VmFsdWUoMCkge30KKwlUb2tlbihpbnQgX3R5
cGUsIERlcHJlY2F0ZWRTdHJpbmcgX3ZhbHVlKTogdHlwZShfdHlwZSksIHZhbHVlKF92YWx1ZSkg
e30KKwlUb2tlbihpbnQgX3R5cGUsIGludCAgICAgX3ZhbHVlKTogdHlwZShfdHlwZSksIGludFZh
bHVlKF92YWx1ZSkge30KK307CisKK2NsYXNzIFRva2VuaXplcgoreworcHJpdmF0ZToKKwl1bnNp
Z25lZCBtX25leHRQb3M7CisJU3RyaW5nIG1fZGF0YTsKKwlpbnQgbV9sYXN0VG9rZW5UeXBlOwor
ICAgIAorCXN0YXRpYyBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgU3RlcDo6QXhpc1R5cGU+KiBz
X2F4aXNOYW1lc0RpY3Q7CisJc3RhdGljIEhhc2hTZXQ8V2ViQ29yZTo6U3RyaW5nPiogc19ub2Rl
VHlwZU5hbWVzRGljdDsKKyAgICAKKwllbnVtIFhNTENhdCB7CisJCU5hbWVTdGFydCwKKwkJTmFt
ZUNvbnQsCisJCU5vdFBhcnRPZk5hbWUKKwl9OworICAgIAorCVhNTENhdCBjaGFyQ2F0KFFDaGFy
IGFDaGFyKTsKKwkKKwlib29sIGlzQXhpc05hbWUoRGVwcmVjYXRlZFN0cmluZyBuYW1lLCBTdGVw
OjpBeGlzVHlwZSAmdHlwZSk7CisJYm9vbCBpc05vZGVUeXBlTmFtZShEZXByZWNhdGVkU3RyaW5n
IG5hbWUpOworCWJvb2wgaXNPcGVyYXRvckNvbnRleHQoKTsKKyAgICAKKwl2b2lkICBza2lwV1Mo
KTsKKwlUb2tlbiBtYWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgYWR2YW5jZSA9IDEp
OworCVRva2VuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUsIGludCB2YWwsIGludCBh
ZHZhbmNlID0gMSk7CisJY2hhciAgcGVla0FoZWFkSGVscGVyKCk7CisJY2hhciAgcGVla0N1ckhl
bHBlcigpOworCQorCVRva2VuIGxleFN0cmluZygpOworCVRva2VuIGxleE51bWJlcigpOworCVRv
a2VuIGxleE5DTmFtZSgpOworCVRva2VuIGxleFFOYW1lKCk7CisJCisJVG9rZW4gbmV4dFRva2Vu
SW50ZXJuYWwoKTsKKwlUb2tlbml6ZXIoKTsKKwlUb2tlbml6ZXIoY29uc3QgVG9rZW5pemVyICZy
aHMpOyAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkCisJVG9rZW5pemVyICZvcGVyYXRvcj0o
Y29uc3QgVG9rZW5pemVyICZyaHMpOyAgICAgICAvLyBkaXNhYmxlZAorCX5Ub2tlbml6ZXIoKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgVG9rZW5pemVyICZzZWxmKCk7CisgICAgCisJdm9pZCByZXNl
dChjb25zdCBTdHJpbmcmKTsKKwlUb2tlbiBuZXh0VG9rZW4oKTsKK307CisKK3N0cnVjdCBBeGlz
TmFtZU1hcHBpbmcKK3sKKwljb25zdCBjaGFyICpuYW1lOworCVN0ZXA6OkF4aXNUeXBlIHR5cGU7
Cit9OworCitzdGF0aWMgQXhpc05hbWVNYXBwaW5nIGF4aXNOYW1lc1tdID0geworCXsgImFuY2Vz
dG9yIiwgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisJeyAiYW5jZXN0b3Itb3Itc2VsZiIsIFN0ZXA6
OkFuY2VzdG9yT3JTZWxmQXhpcyB9LAorCXsgImF0dHJpYnV0ZSIsIFN0ZXA6OkF0dHJpYnV0ZUF4
aXMgfSwKKwl7ICJjaGlsZCIsIFN0ZXA6OkNoaWxkQXhpcyB9LAorCXsgImRlc2NlbmRhbnQiLCBT
dGVwOjpEZXNjZW5kYW50QXhpcyB9LAorCXsgImRlc2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRl
c2NlbmRhbnRPclNlbGZBeGlzIH0sCisJeyAiZm9sbG93aW5nIiwgU3RlcDo6Rm9sbG93aW5nQXhp
cyB9LAorCXsgImZvbGxvd2luZy1zaWJsaW5nIiwgU3RlcDo6Rm9sbG93aW5nU2libGluZ0F4aXMg
fSwKKwl7ICJuYW1lc3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCisJeyAicGFyZW50Iiwg
U3RlcDo6UGFyZW50QXhpcyB9LAorCXsgInByZWNlZGluZyIsIFN0ZXA6OlByZWNlZGluZ0F4aXMg
fSwKKwl7ICJwcmVjZWRpbmctc2libGluZyIsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0s
CisJeyAic2VsZiIsIFN0ZXA6OlNlbGZBeGlzIH0KK307CitzdGF0aWMgdW5zaWduZWQgaW50IGF4
aXNOYW1lc0NvdW50ID0gc2l6ZW9mKGF4aXNOYW1lcykgLyBzaXplb2YoYXhpc05hbWVzWzBdKTsK
K3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBub2RlVHlwZU5hbWVzW10gPSB7CisJImNvbW1lbnQi
LAorCSJ0ZXh0IiwKKwkicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIsCisJIm5vZGUiLAorCTAKK307
CisKK0hhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT4qIFRva2VuaXplcjo6c19heGlzTmFt
ZXNEaWN0ID0gMDsKK0hhc2hTZXQ8U3RyaW5nPiogVG9rZW5pemVyOjpzX25vZGVUeXBlTmFtZXNE
aWN0ID0gMDsKKworVG9rZW5pemVyICZUb2tlbml6ZXI6OnNlbGYoKQoreworCXN0YXRpYyBUb2tl
bml6ZXIgaW5zdGFuY2U7CisJcmV0dXJuIGluc3RhbmNlOworfQorCitUb2tlbml6ZXI6OlhNTENh
dCBUb2tlbml6ZXI6OmNoYXJDYXQoUUNoYXIgYUNoYXIpCit7CisJLy8jIyMgbWlnaHQgbmVlZCB0
byBhZGQgc29tZSBzcGVjaWFsIGNhc2VzIGZyb20gdGhlIFhNTCBzcGVjLgorCisJaWYgKGFDaGFy
LnVuaWNvZGUoKSA9PSAnXycpCisJCXJldHVybiBOYW1lU3RhcnQ7CisKKwlpZiAoYUNoYXIudW5p
Y29kZSgpID09ICcuJyB8fCBhQ2hhci51bmljb2RlKCkgPT0gJy0nKQorCQlyZXR1cm4gTmFtZUNv
bnQ7CisgICAgc3dpdGNoICh1X2NoYXJUeXBlKGFDaGFyLnVuaWNvZGUoKSkpIHsKKyAgICAgICAg
Y2FzZSBVX0xPV0VSQ0FTRV9MRVRURVI6IC8vTGwKKyAgICAgICAgY2FzZSBVX1VQUEVSQ0FTRV9M
RVRURVI6IC8vTHUKKyAgICAgICAgY2FzZSBVX09USEVSX0xFVFRFUjogICAgIC8vTG8KKyAgICAg
ICAgY2FzZSBVX1RJVExFQ0FTRV9MRVRURVI6IC8vTHQKKyAgICAgICAgY2FzZSBVX0xFVFRFUl9O
VU1CRVI6ICAgIC8vTmwKKyAgICAgICAgICAgIHJldHVybiBOYW1lU3RhcnQ7CisgICAgICAgIGNh
c2UgVV9DT01CSU5JTkdfU1BBQ0lOR19NQVJLOiAvL01jCisgICAgICAgIGNhc2UgVV9FTkNMT1NJ
TkdfTUFSSzogICAgICAgICAvL01lCisgICAgICAgIGNhc2UgVV9OT05fU1BBQ0lOR19NQVJLOiAg
ICAgICAvL01uCisgICAgICAgIGNhc2UgVV9NT0RJRklFUl9MRVRURVI6ICAgICAgICAvL0xtCisg
ICAgICAgIGNhc2UgVV9ERUNJTUFMX0RJR0lUX05VTUJFUjogICAvL05kCisgICAgICAgICAgICBy
ZXR1cm4gTmFtZUNvbnQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTm90
UGFydE9mTmFtZTsKKyAgICB9Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppc0F4aXNOYW1lKERlcHJl
Y2F0ZWRTdHJpbmcgbmFtZSwgU3RlcDo6QXhpc1R5cGUmIHR5cGUpCit7CisJaWYgKCFzX2F4aXNO
YW1lc0RpY3QpIHsKKwkJc19heGlzTmFtZXNEaWN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdGVw
OjpBeGlzVHlwZT47CisJCWZvciAodW5zaWduZWQgaW50IHAgPSAwOyBwIDwgYXhpc05hbWVzQ291
bnQ7ICsrcCkKKwkJCXNfYXhpc05hbWVzRGljdC0+c2V0KGF4aXNOYW1lc1twXS5uYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc05hbWVzW3BdLnR5cGUpOworCX0KKwor
CUhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT46Oml0ZXJhdG9yIGl0ID0gc19heGlzTmFt
ZXNEaWN0LT5maW5kKG5hbWUpOworICAgIAorCWlmIChpdCAhPSBzX2F4aXNOYW1lc0RpY3QtPmVu
ZCgpKSB7CisJCXR5cGUgPSBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwl9IGVs
c2UgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmlzTm9k
ZVR5cGVOYW1lKERlcHJlY2F0ZWRTdHJpbmcgbmFtZSkKK3sKKwlpZiAoIXNfbm9kZVR5cGVOYW1l
c0RpY3QpIHsKKwkJc19ub2RlVHlwZU5hbWVzRGljdCA9IG5ldyBIYXNoU2V0PFN0cmluZz47CisJ
CWZvciAoaW50IHAgPSAwOyBub2RlVHlwZU5hbWVzW3BdOyArK3ApCisJCQlzX25vZGVUeXBlTmFt
ZXNEaWN0LT5hZGQobm9kZVR5cGVOYW1lc1twXSk7CisJfQorCXJldHVybiBzX25vZGVUeXBlTmFt
ZXNEaWN0LT5jb250YWlucyhTdHJpbmcobmFtZSkpOworfQorCisvKiBSZXR1cm5zIHdoZXRoZXIg
dGhlIGxhc3QgcGFyc2VkIHRva2VuIG1hdGNoZXMgdGhlIFszMl0gT3BlcmF0b3IgcnVsZQorICog
KGNoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoI2V4cHJsZXgpLiBOZWNlc3NhcnkgdG8g
ZGlzYW1iaWd1YXRlCisgKiB0aGUgdG9rZW5zLgorICovCitib29sIFRva2VuaXplcjo6aXNPcGVy
YXRvckNvbnRleHQoKQoreworCWlmICggbV9uZXh0UG9zID09IDAgKSB7CisJCXJldHVybiBmYWxz
ZTsKKwl9CisKKwlzd2l0Y2ggKCBtX2xhc3RUb2tlblR5cGUgKSB7CisJCWNhc2UgQU5EOiBjYXNl
IE9SOiBjYXNlIE1VTE9QOgorCQljYXNlICcvJzogY2FzZSBTTEFTSFNMQVNIOiBjYXNlICd8Jzog
Y2FzZSBQTFVTOiBjYXNlIE1JTlVTOgorCQljYXNlIEVRT1A6IGNhc2UgUkVMT1A6CisJCWNhc2Ug
J0AnOiBjYXNlIEFYSVNOQU1FOiAgIGNhc2UgJygnOiBjYXNlICdbJzoKKwkJCXJldHVybiBmYWxz
ZTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiB0cnVlOworCX0KK30KKwordm9pZCBUb2tlbml6ZXI6
OnNraXBXUygpCit7CisJd2hpbGUgKG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKSAmJiBtX2Rh
dGFbbV9uZXh0UG9zXS5pc1NwYWNlKCkpCisJCSsrbV9uZXh0UG9zOworfQorCitUb2tlbiBUb2tl
bml6ZXI6Om1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUsIGludCBhZHZhbmNlKQoreworCW1f
bmV4dFBvcyArPSBhZHZhbmNlOworCXJldHVybiBUb2tlbihjb2RlKTsKK30KKworVG9rZW4gVG9r
ZW5pemVyOjptYWtlSW50VG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgdmFsLCBpbnQgYWR2
YW5jZSkKK3sKKwltX25leHRQb3MgKz0gYWR2YW5jZTsKKwlyZXR1cm4gVG9rZW4oY29kZSwgdmFs
KTsKK30KKworLy9SZXR1cm5zIG5leHQgY2hhciBpZiBpdCdzIHRoZXJlIGFuZCBpbnRlcmVzdGlu
ZywgMCBvdGhlcndpc2UKK2NoYXIgVG9rZW5pemVyOjpwZWVrQWhlYWRIZWxwZXIoKQoreworCWlm
IChtX25leHRQb3MgKyAxID49IG1fZGF0YS5sZW5ndGgoKSkKKwkJcmV0dXJuIDA7CisJUUNoYXIg
bmV4dCA9IG1fZGF0YVttX25leHRQb3MgKyAxXTsKKwlpZiAobmV4dC5yb3coKSAhPSAwKQorCQly
ZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBuZXh0LmNlbGwoKTsKK30KKworY2hhciBUb2tlbml6
ZXI6OnBlZWtDdXJIZWxwZXIoKQoreworCWlmIChtX25leHRQb3MgPj0gbV9kYXRhLmxlbmd0aCgp
KQorCQlyZXR1cm4gMDsKKwlRQ2hhciBuZXh0ID0gbV9kYXRhW21fbmV4dFBvc107CisJaWYgKG5l
eHQucm93KCkgIT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gbmV4dC5jZWxsKCk7
Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bGV4U3RyaW5nKCkKK3sKKwlRQ2hhciBkZWxpbWl0ZXIg
PSBtX2RhdGFbbV9uZXh0UG9zXTsKKwlpbnQgICBzdGFydFBvcyAgPSBtX25leHRQb3MgKyAxOwor
CisJZm9yIChtX25leHRQb3MgPSBzdGFydFBvczsgbV9uZXh0UG9zIDwgbV9kYXRhLmxlbmd0aCgp
OyArK21fbmV4dFBvcykgeworCQlpZiAobV9kYXRhW21fbmV4dFBvc10gPT0gZGVsaW1pdGVyKSB7
CisJCQlEZXByZWNhdGVkU3RyaW5nIHZhbHVlID0gbV9kYXRhLmRlcHJlY2F0ZWRTdHJpbmcoKS5t
aWQoc3RhcnRQb3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9zKTsKKwkJCSsrbV9uZXh0UG9zOyAvL0Nv
bnN1bWUgdGhlIGNoYXI7CisJCQlyZXR1cm4gVG9rZW4oTElURVJBTCwgdmFsdWUpOworCQl9CisJ
fQorCisJLy9PdWNoLCB3ZW50IG9mZiB0aGUgZW5kIC0tIHJlcG9ydCBlcnJvcgorCXJldHVybiBU
b2tlbihFUlJPUik7Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bGV4TnVtYmVyKCkKK3sKKwlpbnQg
c3RhcnRQb3MgPSBtX25leHRQb3M7CisJYm9vbCBzZWVuRG90ID0gZmFsc2U7CisKKwkvL0dvIHVu
dGlsIGVuZCBvciBhIG5vbi1kaWdpdHMgY2hhcmFjdGVyCisJZm9yICg7IG1fbmV4dFBvcyA8IG1f
ZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsKKwkJUUNoYXIgYUNoYXIgPSBtX2RhdGFbbV9u
ZXh0UG9zXTsKKwkJaWYgKGFDaGFyLnJvdygpICE9IDApIGJyZWFrOworCisJCWlmIChhQ2hhci5j
ZWxsKCkgPCAnMCcgfHwgYUNoYXIuY2VsbCgpID4gJzknKSB7CisJCQlpZiAoYUNoYXIuY2VsbCgp
ID09ICcuJyAmJiAhc2VlbkRvdCkKKwkJCQlzZWVuRG90ID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQli
cmVhazsKKwkJfQorCX0KKworCURlcHJlY2F0ZWRTdHJpbmcgdmFsdWUgPSBtX2RhdGEuZGVwcmVj
YXRlZFN0cmluZygpLm1pZChzdGFydFBvcywgbV9uZXh0UG9zIC0gc3RhcnRQb3MpOworCXJldHVy
biBUb2tlbihOVU1CRVIsIHZhbHVlKTsKK30KKworVG9rZW4gVG9rZW5pemVyOjpsZXhOQ05hbWUo
KQoreworCWludCBzdGFydFBvcyA9IG1fbmV4dFBvczsKKwlpZiAobV9uZXh0UG9zIDwgbV9kYXRh
Lmxlbmd0aCgpICYmIGNoYXJDYXQobV9kYXRhW21fbmV4dFBvc10pID09IE5hbWVTdGFydCkKKwl7
CisJCS8vS2VlcCBnb2luZyB1bnRpbCB3ZSBnZXQgYSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBnb29k
IGZvciBuYW1lcy4KKwkJZm9yICg7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25l
eHRQb3MpIHsKKwkJCWlmIChjaGFyQ2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOb3RQYXJ0T2ZO
YW1lKQorCQkJCWJyZWFrOworCQl9CisJCQorCQlEZXByZWNhdGVkU3RyaW5nIHZhbHVlID0gbV9k
YXRhLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoc3RhcnRQb3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9z
KTsKKwkJcmV0dXJuIFRva2VuKHZhbHVlKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gbWFrZVRva2Vu
QW5kQWR2YW5jZShFUlJPUik7Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bGV4UU5hbWUoKQorewor
CVRva2VuIHQxID0gbGV4TkNOYW1lKCk7CisJaWYgKHQxLnR5cGUgPT0gRVJST1IpIHJldHVybiB0
MTsKKwlza2lwV1MoKTsKKwkvL0lmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyA6LCB3aGF0IHdlIGp1
c3QgZ290IGl0IHRoZSBwcmVmaXgsIGlmIG5vdCwKKwkvL2l0J3MgdGhlIHdob2xlIHRoaW5nCisJ
aWYgKHBlZWtBaGVhZEhlbHBlcigpICE9ICc6JykKKwkJcmV0dXJuIHQxOworCisJVG9rZW4gdDIg
PSBsZXhOQ05hbWUoKTsKKwlpZiAodDIudHlwZSA9PSBFUlJPUikgcmV0dXJuIHQyOworCisJcmV0
dXJuIFRva2VuKHQxLnZhbHVlICsgIjoiICsgdDIudmFsdWUpOworfQorCitUb2tlbiBUb2tlbml6
ZXI6Om5leHRUb2tlbkludGVybmFsKCkKK3sKKwlza2lwV1MoKTsKKworCWlmIChtX25leHRQb3Mg
Pj0gbV9kYXRhLmxlbmd0aCgpKSB7CisJCXJldHVybiBUb2tlbigwKTsKKwl9CisKKwljaGFyIGNv
ZGUgPSBwZWVrQ3VySGVscGVyKCk7CisJc3dpdGNoIChjb2RlKSB7CisJCWNhc2UgJygnOiBjYXNl
ICcpJzogY2FzZSAnWyc6IGNhc2UgJ10nOgorCQljYXNlICdAJzogY2FzZSAnLCc6IGNhc2UgJ3wn
OgorCQkJcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoY29kZSk7CisJCWNhc2UgJ1wnJzoKKwkJ
Y2FzZSAnXCInOgorCQkJcmV0dXJuIGxleFN0cmluZygpOworCQljYXNlICcwJzogY2FzZSAnMSc6
IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2Fz
ZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCXJldHVybiBsZXhOdW1iZXIoKTsKKwkJY2Fz
ZSAnLic6IHsKKwkJCWNoYXIgbmV4dCA9IHBlZWtBaGVhZEhlbHBlcigpOworCQkJaWYgKG5leHQg
PT0gJy4nKQorCQkJCXJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKERPVERPVCwgMik7CisJCQll
bHNlIGlmIChuZXh0ID49ICcwJyAmJiBuZXh0IDw9ICc5JykKKwkJCQlyZXR1cm4gbGV4TnVtYmVy
KCk7CisJCQllbHNlCisJCQkJcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoJy4nKTsKKwkJfQor
CQljYXNlICcvJzoKKwkJCWlmIChwZWVrQWhlYWRIZWxwZXIoKSA9PSAnLycpCisJCQkJcmV0dXJu
IG1ha2VUb2tlbkFuZEFkdmFuY2UoU0xBU0hTTEFTSCwgMik7CisJCQllbHNlCisJCQkJcmV0dXJu
IG1ha2VUb2tlbkFuZEFkdmFuY2UoJy8nKTsKKwkJY2FzZSAnKyc6CisJCQlyZXR1cm4gbWFrZVRv
a2VuQW5kQWR2YW5jZShQTFVTKTsKKwkJY2FzZSAnLSc6CisJCQlyZXR1cm4gbWFrZVRva2VuQW5k
QWR2YW5jZShNSU5VUyk7CisJCWNhc2UgJz0nOgorCQkJcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFk
dmFuY2UoRVFPUCwgRXFUZXN0T3A6Ok9QX0VRKTsKKwkJY2FzZSAnISc6CisJCQlpZiAocGVla0Fo
ZWFkSGVscGVyKCkgPT0gJz0nKQorCQkJCXJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKEVR
T1AsIEVxVGVzdE9wOjpPUF9ORSwgMik7CisJCQllbHNlIHsKKwkJCQlyZXR1cm4gVG9rZW4oRVJS
T1IpOworCQkJfQorCQljYXNlICc8JzoKKwkJCWlmIChwZWVrQWhlYWRIZWxwZXIoKSA9PSAnPScp
CisJCQkJcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIE51bWVyaWNPcDo6T1Bf
TEUsIDIpOworCQkJZWxzZQorCQkJCXJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9Q
LCBOdW1lcmljT3A6Ok9QX0xUKTsKKwkJY2FzZSAnPic6CisJCQlpZiAocGVla0FoZWFkSGVscGVy
KCkgPT0gJz0nKQorCQkJCXJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1l
cmljT3A6Ok9QX0dFLCAyKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gbWFrZUludFRva2VuQW5kQWR2
YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9HVCk7CisJCWNhc2UgJyonOgorCQkJaWYgKGlzT3Bl
cmF0b3JDb250ZXh0KCkpCisJCQkJcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoTVVMT1As
IE51bWVyaWNPcDo6T1BfTXVsKTsKKwkJCWVsc2UgeworCQkJCSsrbV9uZXh0UG9zOworCQkJCXJl
dHVybiBUb2tlbihOQU1FVEVTVCwgIioiKTsKKwkJCX0KKwkJY2FzZSAnJCc6IHsvLyQgUU5hbWUK
KwkJCW1fbmV4dFBvcysrOworCQkJVG9rZW4gcGFyID0gbGV4UU5hbWUoKTsKKwkJCWlmIChwYXIu
dHlwZSA9PSBFUlJPUikKKwkJCQlyZXR1cm4gcGFyOworCQkJZWxzZQorCQkJCXJldHVybiBUb2tl
bihWQVJJQUJMRVJFRkVSRU5DRSwgcGFyLnZhbHVlKTsKKwkJfQorCX0KKworCVRva2VuIHQxID0g
bGV4TkNOYW1lKCk7CisJaWYgKHQxLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MTsKKworCXNraXBX
UygpOworCS8vSWYgd2UncmUgaW4gYW4gb3BlcmF0b3IgY29udGV4dCwgY2hlY2sgZm9yIGFueSBv
cGVyYXRvciBuYW1lcworCWlmIChpc09wZXJhdG9yQ29udGV4dCgpKSB7CisJCWlmICh0MS52YWx1
ZSA9PSAiYW5kIikgLy8jIyMgaGFzaD8KKwkJCXJldHVybiBUb2tlbihBTkQpOworCQlpZiAodDEu
dmFsdWUgPT0gIm9yIikKKwkJCXJldHVybiBUb2tlbihPUik7CisJCWlmICh0MS52YWx1ZSA9PSAi
bW9kIikKKwkJCXJldHVybiBUb2tlbihNVUxPUCwgTnVtZXJpY09wOjpPUF9Nb2QpOworCQlpZiAo
dDEudmFsdWUgPT0gImRpdiIpCisJCQlyZXR1cm4gVG9rZW4oTVVMT1AsIE51bWVyaWNPcDo6T1Bf
RGl2KTsKKwl9CisKKwkvL1NlZSB3aGV0aGVyIHdlIGFyZSBhdCBhIDoKKwlpZiAocGVla0N1ckhl
bHBlcigpID09ICc6JykgeworCQltX25leHRQb3MrKzsKKwkJLy9BbnkgY2hhbmNlIGl0J3MgYW4g
YXhpcyBuYW1lPworCQlpZiAocGVla0N1ckhlbHBlcigpID09ICc6JykgeworCQkJbV9uZXh0UG9z
Kys7CisJCQkKKwkJCS8vSXQgbWlnaHQgYmUgYW4gYXhpcyBuYW1lLgorCQkJU3RlcDo6QXhpc1R5
cGUgYXhpc1R5cGU7CisJCQlpZiAoaXNBeGlzTmFtZSh0MS52YWx1ZSwgYXhpc1R5cGUpKQorCQkJ
CXJldHVybiBUb2tlbihBWElTTkFNRSwgYXhpc1R5cGUpOworCQkJLy9VZ2gsIDo6IGlzIG9ubHkg
dmFsaWQgaW4gYXhpcyBuYW1lcyAtPiBlcnJvcgorCQkJcmV0dXJuIFRva2VuKEVSUk9SKTsKKwkJ
fQorCisJCS8vU2VlbXMgbGlrZSB0aGlzIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHFuYW1lLCBvciBw
ZXJoYXBzIHRoZSAqIG1vZGlmaWVkIG9uZSBmcm9tIE5hbWVUZXN0CisJCXNraXBXUygpOworCQlp
ZiAocGVla0N1ckhlbHBlcigpID09ICcqJykgeworCQkJbV9uZXh0UG9zKys7CisJCQlyZXR1cm4g
VG9rZW4oTkFNRVRFU1QsIHQxLnZhbHVlICsgIjoqIik7CisJCX0KKwkJCisJCS8vTWFrZSBhIGZ1
bGwgcW5hbWUuLgorCQlUb2tlbiB0MiA9IGxleE5DTmFtZSgpOworCQlpZiAodDIudHlwZSA9PSBF
UlJPUikgcmV0dXJuIHQyOworCQkKKwkJdDEudmFsdWUgPSB0MS52YWx1ZSArICc6JyArIHQyLnZh
bHVlOworCX0KKworCXNraXBXUygpOworCWlmIChwZWVrQ3VySGVscGVyKCkgPT0gJygnKSB7CisJ
CS8vbm90ZTogd2UgZG9uJ3Qgc3dhbGxvdyB0aGUgKCBoZXJlIQorCQkKKwkJLy9laXRoZXIgbm9k
ZSB0eXBlIG9mIGZ1bmN0aW9uIG5hbWUKKwkJaWYgKGlzTm9kZVR5cGVOYW1lKHQxLnZhbHVlKSkg
eworCQkJaWYgKHQxLnZhbHVlID09ICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIikKKwkJCQlyZXR1
cm4gVG9rZW4oUEksIHQxLnZhbHVlKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gVG9rZW4oTk9ERVRZ
UEUsIHQxLnZhbHVlKTsKKwkJfQorCQkvL211c3QgYmUgYSBmdW5jdGlvbiBuYW1lLgorCQlyZXR1
cm4gVG9rZW4oRlVOQ1RJT05OQU1FLCB0MS52YWx1ZSk7CisJfQorCisJLy9BdCB0aGlzIHBvaW50
LCBpdCBtdXN0IGJlIE5BTUVURVNUCisJcmV0dXJuIFRva2VuKE5BTUVURVNULCB0MS52YWx1ZSk7
Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bmV4dFRva2VuKCkKK3sKKwlUb2tlbiB0b1JldCA9IG5l
eHRUb2tlbkludGVybmFsKCk7CisJbV9sYXN0VG9rZW5UeXBlID0gdG9SZXQudHlwZTsKKwlyZXR1
cm4gdG9SZXQ7Cit9CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKCkKK3sKKwlyZXNldChTdHJpbmco
KSk7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpyZXNldChjb25zdCBTdHJpbmcmIGRhdGEpCit7CisJbV9uZXh0UG9zID0gMDsKKwltX2RhdGEg
PSBkYXRhOworCW1fbGFzdFRva2VuVHlwZSA9IDA7Cit9CisKK30KK30KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU6OlhQYXRoOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2ludCB4cGF0
aHl5bGV4KCkKK3sKKwlUb2tlbiB0b2sgPSBUb2tlbml6ZXI6OnNlbGYoKS5uZXh0VG9rZW4oKTsK
KyAgICBpZiAoIXRvay52YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgeHBhdGh5eWx2YWwuc3Ry
ID0gbmV3IERlcHJlY2F0ZWRTdHJpbmcodG9rLnZhbHVlKTsKKwl9IGVsc2UgaWYgKHRvay5pbnRW
YWx1ZSkgeworCQl4cGF0aHl5bHZhbC5udW0gPSB0b2suaW50VmFsdWU7CisJfQorCXJldHVybiB0
b2sudHlwZTsKK30KKwordm9pZCBpbml0VG9rZW5pemVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworCVRva2VuaXplcjo6c2VsZigpLnJlc2V0KHN0cmluZyk7Cit9CisKK3ZvaWQgeHBhdGh5eWVy
cm9yKGNvbnN0IGNoYXIgKnN0cikKK3sKKwkvLyBYWFggQ2xlYW4geHBhdGh5eWx2YWwuc3RyIHVw
IHRvIGF2b2lkIGxlYWtpbmcgaXQuCit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ1NiBAQAorLyoKKyAqIHN0ZXAuY2MgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxy
YWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMK
KyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJzdGVwLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJYUGF0aE5TUmVz
b2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworLyog
RklYTUU6IEkgY2FuJ3QgZmluZCBhbnl3aGVyZSBpbiB0aGUgeHBhdGggc3BlYyB3aGVyZSB0aGlz
IHNob3VsZCBiZSB1c2VkCitzdGF0aWMgYm9vbCBhcmVBZGphY2VudFRleHROb2RlcyggTm9kZSAq
biwgTm9kZSAqbSApCit7CisJaWYgKCAhbiB8fCAhbSApIHsKKwkJcmV0dXJuIGZhbHNlOworCX0K
KworCWlmICggbi0+bm9kZVR5cGUoKSAhPSBOb2RlOjpURVhUX05PREUgJiYgbi0+bm9kZVR5cGUo
KSAhPSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJ
aWYgKCBtLT5ub2RlVHlwZSgpICE9IE5vZGU6OlRFWFRfTk9ERSAmJiBtLT5ub2RlVHlwZSgpICE9
IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSApIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJl
dHVybiAoIG4tPm5leHRTaWJsaW5nKCkgJiYgbi0+bmV4dFNpYmxpbmcoKS0+aXNTYW1lTm9kZSgg
bSApICkgfHwKKwkgICAgICAgKCBtLT5uZXh0U2libGluZygpICYmIG0tPm5leHRTaWJsaW5nKCkt
PmlzU2FtZU5vZGUoIG4gKSApOworfQorCitzdGF0aWMgRG9tTm9kZUxpc3QgY29tcHJlc3NUZXh0
Tm9kZXMoIGNvbnN0IERvbU5vZGVMaXN0ICZub2RlcyApCit7CisJRG9tTm9kZUxpc3Qgb3V0Tm9k
ZXM7CisJRG9tTm9kZUxpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBub2Rlcy5iZWdpbigpOworCURv
bU5vZGVMaXN0OjpDb25zdEl0ZXJhdG9yIGVuZCA9IG5vZGVzLmVuZCgpOworCXdoaWxlICggaXQg
IT0gZW5kICkgeworCQlEb21Ob2RlTGlzdDo6Q29uc3RJdGVyYXRvciBuZXh0SXQgPSBpdDsKKwkJ
KytuZXh0SXQ7CisJCWlmICggbmV4dEl0ID09IGVuZCB8fCAhYXJlQWRqYWNlbnRUZXh0Tm9kZXMo
ICppdCwgKm5leHRJdCApICkgeworCQkJb3V0Tm9kZXMuYXBwZW5kKCAqaXQgKTsKKwkJfSBlbHNl
IGlmICggYXJlQWRqYWNlbnRUZXh0Tm9kZXMoICppdCwgKm5leHRJdCApICkgeworI2lmZGVmIFhQ
QVRIX0NPTlZFUlNJT05fQ09NUExFVEUKKwkJCURlcHJlY2F0ZWRTdHJpbmcgcyA9ICggKml0ICkt
Pm5vZGVWYWx1ZSgpLT5zdHJpbmcoKTsKKwkJCWl0ID0gbmV4dEl0Kys7CisJCQl3aGlsZSAoIG5l
eHRJdCAhPSBlbmQgJiYgYXJlQWRqYWNlbnRUZXh0Tm9kZXMoICppdCwgKm5leHRJdCApICkgewor
CQkJCXMgKz0gKCAqaXQgKS0+bm9kZVZhbHVlKCktPnN0cmluZygpOworCQkJfQorCQkJb3V0Tm9k
ZXMuYXBwZW5kKCAoICppdCApLT5vd25lckRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKCBuZXcg
RE9NU3RyaW5nSW1wbCggcyApICkgKTsKKyNlbmRpZiAgICAgICAgICAgIAorCQl9CisJCWl0ID0g
bmV4dEl0OworCQkKKwl9CisJcmV0dXJuIG91dE5vZGVzOworfQorKi8KKworRGVwcmVjYXRlZFN0
cmluZyBTdGVwOjpheGlzQXNTdHJpbmcoIEF4aXNUeXBlIGF4aXMgKQoreworCXN3aXRjaCAoIGF4
aXMgKSB7CisJCWNhc2UgQW5jZXN0b3JBeGlzOiByZXR1cm4gImFuY2VzdG9yIjsKKwkJY2FzZSBB
bmNlc3Rvck9yU2VsZkF4aXM6IHJldHVybiAiYW5jZXN0b3Itb3Itc2VsZiI7CisJCWNhc2UgQXR0
cmlidXRlQXhpczogcmV0dXJuICJhdHRyaWJ1dGUiOworCQljYXNlIENoaWxkQXhpczogcmV0dXJu
ICJjaGlsZCI7CisJCWNhc2UgRGVzY2VuZGFudEF4aXM6IHJldHVybiAiZGVzY2VuZGFudCI7CisJ
CWNhc2UgRGVzY2VuZGFudE9yU2VsZkF4aXM6IHJldHVybiAiZGVzY2VuZGFudC1vci1zZWxmIjsK
KwkJY2FzZSBGb2xsb3dpbmdBeGlzOiByZXR1cm4gImZvbGxvd2luZyI7CisJCWNhc2UgRm9sbG93
aW5nU2libGluZ0F4aXM6IHJldHVybiAiZm9sbG93aW5nLXNpYmxpbmciOworCQljYXNlIE5hbWVz
cGFjZUF4aXM6IHJldHVybiAibmFtZXNwYWNlIjsKKwkJY2FzZSBQYXJlbnRBeGlzOiByZXR1cm4g
InBhcmVudCI7CisJCWNhc2UgUHJlY2VkaW5nQXhpczogcmV0dXJuICJwcmVjZWRpbmciOworCQlj
YXNlIFByZWNlZGluZ1NpYmxpbmdBeGlzOiByZXR1cm4gInByZWNlZGluZy1zaWJsaW5nIjsKKwkJ
Y2FzZSBTZWxmQXhpczogcmV0dXJuICJzZWxmIjsKKwl9CisJcmV0dXJuIERlcHJlY2F0ZWRTdHJp
bmcoKTsKK30KKworU3RlcDo6U3RlcCgpCit7Cit9CisKK1N0ZXA6OlN0ZXAoQXhpc1R5cGUgYXhp
cywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVk
aWNhdGVzKQorCTogbV9heGlzKGF4aXMpLAorCW1fbm9kZVRlc3Qobm9kZVRlc3QpLAorCW1fcHJl
ZGljYXRlcyhwcmVkaWNhdGVzKQoreworfQorCitTdGVwOjp+U3RlcCgpCit7CisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fcHJlZGljYXRlcyk7Cit9CisKK05vZGVTZXQgU3RlcDo6ZXZhbHVhdGUoTm9k
ZSAqY29udGV4dCkgY29uc3QKK3sKKyAgICBMT0coWFBhdGgsICJFdmFsdWF0aW5nIHN0ZXAsIGF4
aXM9JyVzJywgbm9kZXRlc3Q9JyVzJywgJXUgcHJlZGljYXRlc1xuIiwKKyAgICAgICAgICAgIGF4
aXNBc1N0cmluZyhtX2F4aXMpLmFzY2lpKCksIG1fbm9kZVRlc3QuYXNjaWkoKSwgbV9wcmVkaWNh
dGVzLnNpemUoKSk7CisJaWYgKCBjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRf
Tk9ERSApIHsKKwkJTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIGFuIGVsZW1lbnQgY2FsbGVk
ICVzXG4iLCBjb250ZXh0LT5ub2RlTmFtZSgpLmFzY2lpKCkpOworCX0gZWxzZSBpZiAoIGNvbnRl
eHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgKSB7CisgICAgICAgIExPRyhY
UGF0aCwgIkNvbnRleHQgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgY2FsbGVkICVzIHdpdGggdmFsdWUg
JXNcbiIsIAorICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZU5hbWUoKS5hc2NpaSgpLCAKKyAg
ICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVWYWx1ZSgpLmFzY2lpKCkpOworCX0gZWxzZSB7Cisg
ICAgICAgIExPRyhYUGF0aCwgIkNvbnRleHQgbm9kZSBpcyBvZiB1bmtub3duIHR5cGUgJWRcbiIs
IGNvbnRleHQtPm5vZGVUeXBlKCkpOworCX0KKworCU5vZGVTZXQgaW5Ob2RlcyA9IG5vZGVzSW5B
eGlzKGNvbnRleHQpLCBvdXROb2RlczsKKyAgICBMT0coWFBhdGgsICJBeGlzICVzIG1hdGNoZXMg
JWQgbm9kZXMuXG4iLCBheGlzQXNTdHJpbmcobV9heGlzKS5hc2NpaSgpLCBpbk5vZGVzLnNpemUo
KSk7CisKKwlpbk5vZGVzID0gbm9kZVRlc3RNYXRjaGVzKGluTm9kZXMpOworICAgIExPRyhYUGF0
aCwgIk5vZGV0ZXN0ICVzIHRyaW1zIHRoaXMgbnVtYmVyIHRvICVkXG4iLCBtX25vZGVUZXN0LmFz
Y2lpKCksIGluTm9kZXMuc2l6ZSgpKTsKKwkKKyAgICBvdXROb2RlcyA9IGluTm9kZXM7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlZGljYXRlcy5zaXplKCk7IGkrKykgeworICAg
ICAgICBQcmVkaWNhdGUqIHByZWRpY2F0ZSA9IG1fcHJlZGljYXRlc1tpXTsKKworCQlvdXROb2Rl
cy5jbGVhcigpOworCQlFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnNpemUgPSBpbk5v
ZGVzLnNpemUoKTsKKwkJRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbiA9
IDE7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbk5vZGVzLnNpemUoKTsgaisr
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaW5Ob2Rlc1tqXS5nZXQoKTsKKworCQkJRXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gbm9kZTsKKwkJCUV2YWx1YXRpb25D
b250ZXh0IGJhY2t1cEN0eCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCk7CisJCQlp
ZiAoIHByZWRpY2F0ZS0+ZXZhbHVhdGUoKSApIHsKKwkJCQlvdXROb2Rlcy5hcHBlbmQoIG5vZGUg
KTsKKwkJCX0KKwkJCUV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkgPSBiYWNrdXBDdHg7
CisJCQkrK0V4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb247CisJCX0KKwor
CQlMT0coWFBhdGgsICJcdFByZWRpY2F0ZSB0cmltcyB0aGlzIG51bWJlciB0byAlZCIsIG91dE5v
ZGVzLnNpemUoKSk7CisKKwkJaW5Ob2RlcyA9IG91dE5vZGVzOworCX0KKwlyZXR1cm4gb3V0Tm9k
ZXM7Cit9CisKK05vZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoIE5vZGUgKmNvbnRleHQgKSBjb25z
dAoreworCU5vZGVTZXQgbm9kZXM7CisJc3dpdGNoICggbV9heGlzICkgeworCQljYXNlIENoaWxk
QXhpczogeworCQkJTm9kZSAqbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsKKwkJCXdoaWxlICgg
biApIHsKKwkJCQlub2Rlcy5hcHBlbmQoIG4gKTsKKwkJCQluID0gbi0+bmV4dFNpYmxpbmcoKTsK
KwkJCX0KKwkJCXJldHVybiBub2RlczsKKwkJfQorCQljYXNlIERlc2NlbmRhbnRBeGlzOiAKKwkJ
CXJldHVybiBnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KGNvbnRleHQpOworCQljYXNlIFBhcmVudEF4
aXM6CisJCQlub2Rlcy5hcHBlbmQoY29udGV4dC0+cGFyZW50Tm9kZSgpKTsKKwkJCXJldHVybiBu
b2RlczsKKwkJY2FzZSBBbmNlc3RvckF4aXM6IHsKKwkJCU5vZGUgKm4gPSBjb250ZXh0LT5wYXJl
bnROb2RlKCk7CisJCQl3aGlsZSAoIG4gKSB7CisJCQkJbm9kZXMuYXBwZW5kKCBuICk7CisJCQkJ
biA9IG4tPnBhcmVudE5vZGUoKTsKKwkJCX0KKwkJCXJldHVybiBub2RlczsKKwkJfQorCQljYXNl
IEZvbGxvd2luZ1NpYmxpbmdBeGlzOiB7CisJCQlpZiAoY29udGV4dC0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpBVFRSSUJVVEVfTk9ERSB8fAorCQkJICAgICBjb250ZXh0LT5ub2RlVHlwZSgpID09IE5v
ZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKSAKKwkJCQlyZXR1cm4gTm9kZVNldCgpOworCisJCQlO
b2RlICpuID0gY29udGV4dC0+bmV4dFNpYmxpbmcoKTsKKwkJCXdoaWxlICggbiApIHsKKwkJCQlu
b2Rlcy5hcHBlbmQoIG4gKTsKKwkJCQluID0gbi0+bmV4dFNpYmxpbmcoKTsKKwkJCX0KKwkJCXJl
dHVybiBub2RlczsKKwkJfQorCQljYXNlIFByZWNlZGluZ1NpYmxpbmdBeGlzOiB7CisJCQlpZiAo
Y29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAorCQkJICAgICBj
b250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKQorCQkJCXJl
dHVybiBOb2RlU2V0KCk7CisKKwkJCU5vZGUgKm4gPSBjb250ZXh0LT5wcmV2aW91c1NpYmxpbmco
KTsKKwkJCXdoaWxlICggbiApIHsKKwkJCQlub2Rlcy5hcHBlbmQoIG4gKTsKKwkJCQluID0gbi0+
cHJldmlvdXNTaWJsaW5nKCk7CisJCQl9CisJCQlyZXR1cm4gbm9kZXM7CisJCX0KKwkJY2FzZSBG
b2xsb3dpbmdBeGlzOiB7CisJCQlOb2RlICpwID0gY29udGV4dDsKKwkJCXdoaWxlICggIWlzUm9v
dERvbU5vZGUoIHAgKSApIHsKKwkJCQlOb2RlICpuID0gcC0+bmV4dFNpYmxpbmcoKTsKKwkJCQl3
aGlsZSAoIG4gKSB7CisJCQkJCW5vZGVzLmFwcGVuZCggbiApOworICAgICAgICAgICAgICAgICAg
ICBub2Rlcy5hcHBlbmQoZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShuKSk7CisKKwkJCQkJbiA9IG4t
Pm5leHRTaWJsaW5nKCk7CisJCQkJfQorCQkJCXAgPSBwLT5wYXJlbnROb2RlKCk7CisJCQl9CisJ
CQlyZXR1cm4gbm9kZXM7CisJCX0KKwkJY2FzZSBQcmVjZWRpbmdBeGlzOiB7CisJCQlOb2RlICpw
ID0gY29udGV4dDsKKwkJCXdoaWxlICggIWlzUm9vdERvbU5vZGUoIHAgKSApIHsKKwkJCQlOb2Rl
ICpuID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7CisJCQkJd2hpbGUgKCBuICkgeworCQkJCQlub2Rl
cy5hcHBlbmQoIG4gKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGdldENoaWxk
cmVuUmVjdXJzaXZlbHkobikpOworCQkJCQluID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisJCQkJ
fQorCQkJCXAgPSBwLT5wYXJlbnROb2RlKCk7CisJCQl9CisJCQlyZXR1cm4gbm9kZXM7CisJCX0K
KwkJY2FzZSBBdHRyaWJ1dGVBeGlzOiB7CisJCQlpZiAoIGNvbnRleHQtPm5vZGVUeXBlKCkgIT0g
Tm9kZTo6RUxFTUVOVF9OT0RFKQorCQkJCXJldHVybiBOb2RlU2V0KCk7CisKKwkJCU5hbWVkQXR0
ck1hcCAqYXR0cnMgPSBjb250ZXh0LT5hdHRyaWJ1dGVzKCk7CisJCQlpZiAoIWF0dHJzKSB7Cisg
ICAgICAgICAgICAgICAgTE9HKFhQYXRoLCAiTm9kZTo6YXR0cmlidXRlcygpIHJldHVybmVkIE5V
TEwhIik7CisJCQkJcmV0dXJuIG5vZGVzOworCQkJfQorCisJCQlmb3IgKHVuc2lnbmVkIGxvbmcg
aSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgCisJCQkJbm9kZXMuYXBwZW5kIChhdHRy
cy0+aXRlbShpKSk7CisKKwkJCXJldHVybiBub2RlczsKKwkJfQorCQljYXNlIE5hbWVzcGFjZUF4
aXM6IHsKKwkJCWlmIChjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkK
KwkJCQlyZXR1cm4gTm9kZVNldCgpOworCisJCQlib29sIGZvdW5kWG1sTnNOb2RlID0gZmFsc2U7
CisJCQlOb2RlICpub2RlID0gY29udGV4dDsKKwkJCXdoaWxlICggbm9kZSApIHsKKwkJCQlOYW1l
ZEF0dHJNYXAgKmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOworCQkJCWlmICggIWF0dHJzICkg
eworCQkJCQlMT0coWFBhdGgsICJOb2RlOjphdHRyaWJ1dGVzKCkgcmV0dXJuZWQgTlVMTCEiKTsK
KworCQkJCQlub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCQkJCQljb250aW51ZTsKKwkJCQl9
CisKKwkJCQlmb3IgKCB1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyAr
K2kgKSB7CisJCQkJCU5vZGUgKm4gPSBhdHRycy0+aXRlbShpKS5nZXQoKTsKKwkJCQkJaWYgKCBu
LT5ub2RlTmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCAieG1sbnM6IiApICkg
eworCQkJCQkJbm9kZXMuYXBwZW5kKCBuICk7CisJCQkJCX0gZWxzZSBpZiAobi0+bm9kZU5hbWUo
KSA9PSAieG1sbnMiICYmCisJCQkJCSAgICAgICAgICAgIWZvdW5kWG1sTnNOb2RlKSB7CisJCQkJ
CQlmb3VuZFhtbE5zTm9kZSA9IHRydWU7CisJCQkJCQlpZiAoICFuLT5ub2RlVmFsdWUoKS5kZXBy
ZWNhdGVkU3RyaW5nKCkuaXNFbXB0eSgpICkgeworCQkJCQkJCW5vZGVzLmFwcGVuZCggbiApOwor
CQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCW5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisJ
CQl9CisJCQlyZXR1cm4gbm9kZXM7CisJCX0KKwkJY2FzZSBTZWxmQXhpczoKKwkJCW5vZGVzLmFw
cGVuZCggY29udGV4dCApOworCQkJcmV0dXJuIG5vZGVzOworCQljYXNlIERlc2NlbmRhbnRPclNl
bGZBeGlzOgorCQkJbm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAgICAgICAgICAgbm9kZXMuYXBw
ZW5kKGdldENoaWxkcmVuUmVjdXJzaXZlbHkoY29udGV4dCkpOworCQkJcmV0dXJuIG5vZGVzOwor
CQljYXNlIEFuY2VzdG9yT3JTZWxmQXhpczogeworCQkJbm9kZXMuYXBwZW5kKGNvbnRleHQpOwor
CQkJTm9kZSAqbiA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsKKwkJCXdoaWxlICggbiApIHsKKwkJ
CQlub2Rlcy5hcHBlbmQoIG4gKTsKKwkJCQluID0gbi0+cGFyZW50Tm9kZSgpOworCQkJfQorCQkJ
cmV0dXJuIG5vZGVzOworCQl9CisJCWRlZmF1bHQ6CisgICAgICAgICAgICBMT0coWFBhdGgsICJV
bmtub3duIGF4aXMgJXMgcGFzc2VkIHRvIFN0ZXA6Om5vZGVzSW5BeGlzIiwgYXhpc0FzU3RyaW5n
KG1fYXhpcykuYXNjaWkoKSk7CisJfQorCisJcmV0dXJuIE5vZGVTZXQoKTsKK30KKworCitOb2Rl
U2V0IFN0ZXA6Om5vZGVUZXN0TWF0Y2hlcyhjb25zdCBOb2RlU2V0JiBub2RlcykgY29uc3QKK3sK
KwlTdHJpbmcgbnMgPSBuYW1lc3BhY2VGcm9tTm9kZXRlc3QoIG1fbm9kZVRlc3QgKTsKKwlOb2Rl
U2V0IG1hdGNoZXM7CisJaWYgKCBtX25vZGVUZXN0ID09ICIqIiApIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2Rl
ICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisJCQlpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBwcmlt
YXJ5Tm9kZVR5cGUobV9heGlzKSkgeworCQkJCWlmICggbnMuaXNFbXB0eSgpIHx8CisJCQkJICAg
ICBub2RlLT5uYW1lc3BhY2VVUkkoKSA9PSBucyApIHsKKwkJCQkJbWF0Y2hlcy5hcHBlbmQobm9k
ZSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBub2RlczsKKwl9IGVsc2UgaWYgKCBtX25v
ZGVUZXN0ID09ICJ0ZXh0KCkiICkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5n
ZXQoKTsKKwkJCWlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAg
ICAgICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RF
ICkgCisJCQkJbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisJCX0KKwkJcmV0dXJuIG1hdGNoZXM7CisJ
fSBlbHNlIGlmICggbV9ub2RlVGVzdCA9PSAiY29tbWVudCgpIiApIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2Rl
ICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpDT01NRU5UX05PREUpCisgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQo
bm9kZSk7CisgICAgICAgIH0KKwkJcmV0dXJuIG1hdGNoZXM7CisJfSBlbHNlIGlmICggbV9ub2Rl
VGVzdC5zdGFydHNXaXRoKCAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgKSApIHsKKwkJRGVwcmVj
YXRlZFN0cmluZyBwYXJhbTsKKworCQljb25zdCBpbnQgc3BhY2UgPSBtX25vZGVUZXN0LmZpbmQo
ICcgJyApOworCQlpZiAoIHNwYWNlID4gLTEgKSB7CisJCQlwYXJhbSA9IG1fbm9kZVRlc3QuZGVw
cmVjYXRlZFN0cmluZygpLm1pZChzcGFjZSArIDEpOworCQl9CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgTm9kZSAqbm9k
ZSA9IG5vZGVzW2ldLmdldCgpOworCisJCQlpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQ
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgJiYKKyAgICAgICAgICAgICAgICAocGFyYW0uaXNF
bXB0eSgpIHx8IG5vZGUtPm5vZGVOYW1lKCkgPT0gcGFyYW0pKQorICAgICAgICAgICAgICAgICAg
ICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfSAgICAKKwkJcmV0dXJuIG1hdGNoZXM7
CisJfSBlbHNlIGlmICggbV9ub2RlVGVzdCA9PSAibm9kZSgpIiApIHsKKwkJcmV0dXJuIG5vZGVz
OworCX0gZWxzZSB7CisJCVN0cmluZyBwcmVmaXgsIGxvY2FsTmFtZTsKKworCQljb25zdCBpbnQg
Y29sb24gPSBtX25vZGVUZXN0LmZpbmQoICc6JyApOworCQlpZiAoY29sb24gPiAtMSkgeworCQkJ
cHJlZml4ID0gbV9ub2RlVGVzdC5sZWZ0KCBjb2xvbiApOworCQkJbG9jYWxOYW1lID0gbV9ub2Rl
VGVzdC5kZXByZWNhdGVkU3RyaW5nKCkubWlkKGNvbG9uICsgMSk7CisJCX0gZWxzZSB7CisJCQls
b2NhbE5hbWUgPSBtX25vZGVUZXN0OworCQl9CisKKwkJaWYgKCAhcHJlZml4LmlzRW1wdHkoKSAp
IHsKKyNpZmRlZiBYUEFUSF9DT05WRVJTSU9OX0NPTVBMRVRFCisJCQlET01TdHJpbmdJbXBsIHMo
IHByZWZpeCApOworCQkJaWYgKCAhRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5yZXNv
bHZlci0+bG9va3VwTmFtZXNwYWNlVVJJKCAmcyApICkgeworCQkJCXRocm93IG5ldyBYUGF0aEV4
Y2VwdGlvbkltcGwoIE5BTUVTUEFDRV9FUlIgKTsKKwkJCX0KKyNlbmRpZgorCQl9CisKKwkJaWYg
KCBtX2F4aXMgPT0gQXR0cmlidXRlQXhpcyApIHsKKwkJCS8vIEluIFhQYXRoIGxhbmQsIG5hbWVz
cGFjZSBub2RlcyBhcmUgbm90IGFjY2Vzc2libGUKKwkJCS8vIG9uIHRoZSBhdHRyaWJ1dGUgYXhp
cy4KKwkJCWlmICggbG9jYWxOYW1lID09ICJ4bWxucyIgKSB7CisJCQkJcmV0dXJuIG1hdGNoZXM7
CisJCQl9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXpl
KCk7IGkrKykgeworICAgICAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsK
KyAgICAgICAgICAgICAgICAKKwkJCQlpZiAoIG5vZGUtPm5vZGVOYW1lKCkgPT0gbG9jYWxOYW1l
ICkgeworCQkJCQltYXRjaGVzLmFwcGVuZCggbm9kZSApOworCQkJCQlicmVhazsgLy8gVGhlcmUg
Y2FuIG9ubHkgYmUgb25lLgorCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoZXM7CisJCX0g
ZWxzZSBpZiAoIG1fYXhpcyA9PSBOYW1lc3BhY2VBeGlzICkgeworICAgICAgICAgICAgTE9HKFhQ
YXRoLCAiTm9kZSB0ZXN0ICVzIG9uIGF4aXMgJXMgaXMgbm90IGltcGxlbWVudGVkIHlldC4iLAor
ICAgICAgICAgICAgICAgIG1fbm9kZVRlc3QuYXNjaWkoKSwgYXhpc0FzU3RyaW5nKG1fYXhpcyku
YXNjaWkoKSk7CisJCX0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9k
ZXNbaV0uZ2V0KCk7CisgCisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRhZ1FOYW1lIGhlcmUg
YmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBlbGVtZW50IG5hbWUgaW4gdXBwZXJjYXNlIAorICAg
ICAgICAgICAgICAgIC8vIGxpa2Ugd2UgZ2V0IHdpdGggSFRNTCBlbGVtZW50cy4KKwkJCQlpZiAo
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgJiYKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihub2RlKS0+dGFnUU5hbWUoKS50b1N0cmluZygp
ID09IGxvY2FsTmFtZSkgeworCQkJCQltYXRjaGVzLmFwcGVuZChub2RlKTsKKwkJCQl9CisJCQl9
CisKKwkJCXJldHVybiBtYXRjaGVzOworCQl9CisJfQorICAgIAorICAgIExPRyhYUGF0aCwgIk5v
ZGUgdGVzdCAlcyBvbiBheGlzICVzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIiwKKyAgICAgICAg
bV9ub2RlVGVzdC5hc2NpaSgpLCBheGlzQXNTdHJpbmcobV9heGlzKS5hc2NpaSgpKTsKKworCXJl
dHVybiBtYXRjaGVzOworfQorCit2b2lkIFN0ZXA6Om9wdGltaXplKCkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVkaWNhdGVzLnNpemUoKTsgaSsrKQorCQltX3ByZWRpY2F0
ZXNbaV0tPm9wdGltaXplKCk7Cit9CisKK1N0cmluZyBTdGVwOjpuYW1lc3BhY2VGcm9tTm9kZXRl
c3QoY29uc3QgU3RyaW5nJiBub2RlVGVzdCkgY29uc3QKK3sKKwlpbnQgaSA9IG5vZGVUZXN0LmZp
bmQoICc6JyApOworCWlmICggaSA9PSAtMSApIHsKKwkJcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmco
KTsKKwl9CisKKwlTdHJpbmcgcHJlZml4KG5vZGVUZXN0LmxlZnQoaSkpOworICAgIAorCU5vZGUg
KmN0eE5vZGUgPSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisJcmV0dXJu
IGN0eE5vZGUtPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpOworfQorCitOb2RlOjpOb2RlVHlw
ZSBTdGVwOjpwcmltYXJ5Tm9kZVR5cGUoQXhpc1R5cGUgYXhpcykgY29uc3QKK3sKKwlzd2l0Y2gg
KCBheGlzICkgeworCQljYXNlIEF0dHJpYnV0ZUF4aXM6CisJCQlyZXR1cm4gTm9kZTo6QVRUUklC
VVRFX05PREU7CisJCWNhc2UgTmFtZXNwYWNlQXhpczoKKwkJCXJldHVybiBOb2RlOjpYUEFUSF9O
QU1FU1BBQ0VfTk9ERTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOb2RlOjpFTEVNRU5UX05PREU7
CisJfQorfQorCit9Cit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAK
Ky8qCisgKiB1dGlsLmNjIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAidXRp
bC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IFhQYXRoIHsKKyAgICAgICAgCitib29sIGlzUm9vdERvbU5vZGUoTm9kZSAqbm9kZSkKK3sKKwly
ZXR1cm4gbm9kZSAmJiAhbm9kZS0+cGFyZW50Tm9kZSgpOworfQorCitTdHJpbmcgc3RyaW5nVmFs
dWUoIE5vZGUgKm5vZGUgKQoreworCXN3aXRjaCAoIG5vZGUtPm5vZGVUeXBlKCkgKSB7CisJCWNh
c2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisJCWNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVD
VElPTl9OT0RFOgorCQljYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKKwkJY2FzZSBOb2RlOjpURVhU
X05PREU6CisJCQlyZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisJCWRlZmF1bHQ6CisJCQlpZiAo
IGlzUm9vdERvbU5vZGUoIG5vZGUgKQorCQkJICAgICB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5v
ZGU6OkVMRU1FTlRfTk9ERSApIHsKKwkJCQlTdHJpbmcgc3RyOworICAgICAgICAgICAgICAgIE5v
ZGVTZXQgbm9kZXMgPSBnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG5vZGUpOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc3RyaW5nVmFsdWUobm9kZSk7CisJ
CQkJfQorCisJCQkJcmV0dXJuIHN0cjsKKwkJCX0KKwl9CisgICAgCisJcmV0dXJuIFN0cmluZygp
OworfQorCitOb2RlU2V0IGdldENoaWxkcmVuUmVjdXJzaXZlbHkoIE5vZGUgKm5vZGUgKQorewor
CU5vZGVTZXQgbm9kZXM7CisJTm9kZSAqbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKwl3aGlsZSAo
bikgeworCQlub2Rlcy5hcHBlbmQobik7CisgICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJl
blJlY3Vyc2l2ZWx5KG4pKTsKKwkJbiA9IG4tPm5leHRTaWJsaW5nKCk7CisJfQorCXJldHVybiBu
b2RlczsKK30KKworYm9vbCBpc1ZhbGlkQ29udGV4dE5vZGUoIE5vZGUgKm5vZGUgKQoreworCXJl
dHVybiBub2RlICYmICggCisgICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxF
TUVOVF9OT0RFIHx8CisJICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRF
X05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwK
KwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwK
KwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9O
X05PREUgfHwKKwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUg
fHwKKwkgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8CisJ
ICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpOwor
fQorCit9Cit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBmdW5jdGlvbnMuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJh
YWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRlVOQ1RJT05TX0gKKyNkZWZpbmUg
RlVOQ1RJT05TX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitjbGFzcyBGdW5jdGlvbiA6IHB1YmxpYyBF
eHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgdm9pZCBzZXRBcmd1bWVudHMoY29uc3QgVmVjdG9y
PEV4cHJlc3Npb24qPiAmYXJncyk7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyAmbmFt
ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHByZXNzaW9uICphcmcoaW50IHBvcyk7CisgICAgY29u
c3QgRXhwcmVzc2lvbiAqYXJnKGludCBwb3MpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBhcmdD
b3VudCgpIGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIG1fbmFtZTsKK307CisKK2NsYXNzIEZ1bmN0aW9uTGlicmFyeQoreworCWZyaWVuZCBz
dHJ1Y3QgRnVuY3Rpb25NYXBwaW5nOworcHVibGljOgorCXN0YXRpYyBGdW5jdGlvbkxpYnJhcnkg
JnNlbGYoKTsKKworCUZ1bmN0aW9uICpnZXRGdW5jdGlvbihjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvbiAqPiAmYXJncyA9IFZlY3RvcjxFeHByZXNzaW9uKj4oKSkgY29u
c3Q7CisKK3ByaXZhdGU6CisJc3RydWN0IEZ1bmN0aW9uUmVjOworCisJRnVuY3Rpb25MaWJyYXJ5
KCk7CisJRnVuY3Rpb25MaWJyYXJ5KCBjb25zdCBGdW5jdGlvbkxpYnJhcnkgJnJocyApOworCUZ1
bmN0aW9uTGlicmFyeSAmb3BlcmF0b3I9KCBjb25zdCBGdW5jdGlvbkxpYnJhcnkgJnJocyApOwor
CisgICAgSGFzaE1hcDxXZWJDb3JlOjpTdHJpbmcsIEZ1bmN0aW9uUmVjPiBtX2Z1bmN0aW9uRGlj
dDsKK307CisKK30KK30KKyNlbmRpZiAvLyBGVU5DVElPTlNfSAorCkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvdG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3Rv
a2VuaXplci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogdG9rZW5pemVyLmggLSBDb3B5
cmlnaHQgMjAwNSBNYWtzaW0gT3Jsb3ZpY2ggPG1ha3NpbUBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIFRPS0VOSVpFUl9ICisjZGVmaW5lIFRPS0VOSVpFUl9ICisKKyNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgInN0
ZXAuaCIKKyNpbmNsdWRlICJwYXRoLmgiCisjaW5jbHVkZSAicHJlZGljYXRlLmgiCisjaW5jbHVk
ZSAiZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworLy8gSW50ZXJmYWNlIHRvIHRo
ZSBwYXJzZXIKK2ludCB4cGF0aHl5bGV4KCk7Cit2b2lkIHhwYXRoeXllcnJvcihjb25zdCBjaGFy
ICpzdHIpOwordm9pZCBpbml0VG9rZW5pemVyKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc3RyaW5n
KTsKKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2ViQ29yZS94
cGF0aC9pbXBsL3N0ZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIHN0ZXAuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2gg
UmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU1RFUF9ICisjZGVm
aW5lIFNURVBfSAorCisjaW5jbHVkZSAicHJlZGljYXRlLmgiCisjaW5jbHVkZSAidXRpbC5oIgor
CisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBh
dGggeworICAgICAgICAKK2NsYXNzIFN0ZXAKK3sKK3B1YmxpYzoKKwllbnVtIEF4aXNUeXBlIHsK
KwkJQW5jZXN0b3JBeGlzPTEsIEFuY2VzdG9yT3JTZWxmQXhpcywgQXR0cmlidXRlQXhpcywKKwkJ
Q2hpbGRBeGlzLCBEZXNjZW5kYW50QXhpcywgRGVzY2VuZGFudE9yU2VsZkF4aXMsCisJCUZvbGxv
d2luZ0F4aXMsIEZvbGxvd2luZ1NpYmxpbmdBeGlzLCBOYW1lc3BhY2VBeGlzLAorCQlQYXJlbnRB
eGlzLCBQcmVjZWRpbmdBeGlzLCBQcmVjZWRpbmdTaWJsaW5nQXhpcywKKwkJU2VsZkF4aXMKKwl9
OworCisJc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgYXhpc0FzU3RyaW5nKCBBeGlzVHlwZSBheGlz
ICk7CisKKwlTdGVwKCk7CisJU3RlcChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJpbmcgJm5vZGVU
ZXN0LCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4gJnByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGlj
YXRlKj4oKSk7CisJflN0ZXAoKTsKKworCU5vZGVTZXQgZXZhbHVhdGUoTm9kZSAqY29udGV4dCkg
Y29uc3Q7CisKKwl2b2lkIG9wdGltaXplKCk7CisKK3ByaXZhdGU6CisJTm9kZVNldCBub2Rlc0lu
QXhpcyhOb2RlICpjb250ZXh0KSBjb25zdDsKKwlOb2RlU2V0IG5vZGVUZXN0TWF0Y2hlcyhjb25z
dCBOb2RlU2V0JiBub2RlcykgY29uc3Q7CisJU3RyaW5nIG5hbWVzcGFjZUZyb21Ob2RldGVzdChj
b25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdDsKKyAgICBOb2RlOjpOb2RlVHlwZSBwcmltYXJ5
Tm9kZVR5cGUoIEF4aXNUeXBlIGF4aXMgKSBjb25zdDsKKworCUF4aXNUeXBlIG1fYXhpczsKKwlT
dHJpbmcgbV9ub2RlVGVzdDsKKwlWZWN0b3I8UHJlZGljYXRlKj4gbV9wcmVkaWNhdGVzOworfTsK
KworfQorfQorCisjZW5kaWYgLy8gU1RFUF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9Y
UGF0aEdyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhHcmFt
bWFyLnkJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhHcmFtbWFyLnkJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ4IEBACisleworI2luY2x1ZGUgImNvbmZpZy5oIgor
ICAgIAorI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgInhwYXRoL2ltcGwvcGF0aC5o
IgorI2luY2x1ZGUgInN0ZXAuaCIKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1
dGlsLmgiCisjaW5jbHVkZSAidmFyaWFibGVyZWZlcmVuY2UuaCIKKyAgICAKKyNpbmNsdWRlICJY
UGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKworI2RlZmluZSBZWURFQlVHIDEKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6WFBhdGg7CisgICAgCitFeHByZXNz
aW9uICpwYXJzZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0aW9uQ29k
ZSYgY29kZSk7CisgICAgCitleHRlcm4gaW50IHhwYXRoeXlsZXgoKTsKK2V4dGVybiB2b2lkIHhw
YXRoeXllcnJvcihjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgaW5pdFRva2VuaXplcihj
b25zdCBTdHJpbmcmIHN0cmluZyk7CisKK3N0YXRpYyBFeHByZXNzaW9uICpfdG9wRXhwcjsKK3N0
YXRpYyBib29sIGdvdE5hbWVzcGFjZUVycm9yOworCislfQorCisldW5pb24KK3sKKyAgICBXZWJD
b3JlOjpYUGF0aDo6U3RlcDo6QXhpc1R5cGUgYXhpc1R5cGU7CisJaW50ICAgICAgICBudW07CisJ
RGVwcmVjYXRlZFN0cmluZyAqc3RyOworCVdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uICpleHBy
OworCVZlY3RvcjxXZWJDb3JlOjpYUGF0aDo6UHJlZGljYXRlKj4gKnByZWRMaXN0OworCVZlY3Rv
cjxXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbio+ICphcmdMaXN0OworCVdlYkNvcmU6OlhQYXRo
OjpTdGVwICpzdGVwOworCVdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGggKmxvY2F0aW9uUGF0
aDsKK30KKworJWxlZnQgPG51bT4gTVVMT1AgUkVMT1AgRVFPUAorJWxlZnQgPHN0cj4gUExVUyBN
SU5VUworJWxlZnQgPHN0cj4gT1IgQU5ECisldG9rZW4gPGF4aXNUeXBlPiBBWElTTkFNRQorJXRv
a2VuIDxzdHI+IE5PREVUWVBFIFBJIEZVTkNUSU9OTkFNRSBMSVRFUkFMCisldG9rZW4gPHN0cj4g
VkFSSUFCTEVSRUZFUkVOQ0UgTlVNQkVSCisldG9rZW4gPHN0cj4gRE9URE9UIFNMQVNIU0xBU0gg
TkFNRVRFU1QKKyV0b2tlbiBFUlJPUgorCisldHlwZSA8bG9jYXRpb25QYXRoPiBMb2NhdGlvblBh
dGgKKyV0eXBlIDxsb2NhdGlvblBhdGg+IEFic29sdXRlTG9jYXRpb25QYXRoCisldHlwZSA8bG9j
YXRpb25QYXRoPiBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorJXR5cGUgPHN0ZXA+IFN0ZXAKKyV0eXBl
IDxheGlzVHlwZT4gQXhpc1NwZWNpZmllcgorJXR5cGUgPHN0ZXA+IERlc2NlbmRhbnRPclNlbGYK
KyV0eXBlIDxzdHI+IE5vZGVUZXN0CisldHlwZSA8ZXhwcj4gUHJlZGljYXRlCisldHlwZSA8cHJl
ZExpc3Q+IFByZWRpY2F0ZUxpc3QKKyV0eXBlIDxzdGVwPiBBYmJyZXZpYXRlZFN0ZXAKKyV0eXBl
IDxleHByPiBFeHByCisldHlwZSA8ZXhwcj4gUHJpbWFyeUV4cHIKKyV0eXBlIDxleHByPiBGdW5j
dGlvbkNhbGwKKyV0eXBlIDxhcmdMaXN0PiBBcmd1bWVudExpc3QKKyV0eXBlIDxleHByPiBBcmd1
bWVudAorJXR5cGUgPGV4cHI+IFVuaW9uRXhwcgorJXR5cGUgPGV4cHI+IFBhdGhFeHByCisldHlw
ZSA8ZXhwcj4gRmlsdGVyRXhwcgorJXR5cGUgPGV4cHI+IE9yRXhwcgorJXR5cGUgPGV4cHI+IEFu
ZEV4cHIKKyV0eXBlIDxleHByPiBFcXVhbGl0eUV4cHIKKyV0eXBlIDxleHByPiBSZWxhdGlvbmFs
RXhwcgorJXR5cGUgPGV4cHI+IEFkZGl0aXZlRXhwcgorJXR5cGUgPGV4cHI+IE11bHRpcGxpY2F0
aXZlRXhwcgorJXR5cGUgPGV4cHI+IFVuYXJ5RXhwcgorCislJQorCitFeHByOgorCU9yRXhwcgor
CXsKKwkJX3RvcEV4cHIgPSAkMTsKKwl9CisJOworCitMb2NhdGlvblBhdGg6CisJUmVsYXRpdmVM
b2NhdGlvblBhdGgKKwl7CisJCSQkLT5tX2Fic29sdXRlID0gZmFsc2U7CisJfQorCXwKKwlBYnNv
bHV0ZUxvY2F0aW9uUGF0aAorCXsKKwkJJCQtPm1fYWJzb2x1dGUgPSB0cnVlOworCX0KKwk7CisK
K0Fic29sdXRlTG9jYXRpb25QYXRoOgorCScvJworCXsKKwkJJCQgPSBuZXcgTG9jYXRpb25QYXRo
OworCX0KKwl8CisJJy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoCisJeworCQkkJCA9ICQyOworCX0K
Kwl8CisJRGVzY2VuZGFudE9yU2VsZiBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorCXsKKwkJJCQgPSAk
MjsKKwkJJCQtPm1fc3RlcHMuaW5zZXJ0KDAsICQxKTsKKwl9CisJOworCitSZWxhdGl2ZUxvY2F0
aW9uUGF0aDoKKwlTdGVwCisJeworCQkkJCA9IG5ldyBMb2NhdGlvblBhdGg7CisJCSQkLT5tX3N0
ZXBzLmFwcGVuZCggJDEgKTsKKwl9CisJfAorCVJlbGF0aXZlTG9jYXRpb25QYXRoICcvJyBTdGVw
CisJeworCQkkJC0+bV9zdGVwcy5hcHBlbmQoICQzICk7CisJfQorCXwKKwlSZWxhdGl2ZUxvY2F0
aW9uUGF0aCBEZXNjZW5kYW50T3JTZWxmIFN0ZXAKKwl7CisJCSQkLT5tX3N0ZXBzLmFwcGVuZCgg
JDIgKTsKKwkJJCQtPm1fc3RlcHMuYXBwZW5kKCAkMyApOworCX0KKwk7CisKK1N0ZXA6CisJTm9k
ZVRlc3QKKwl7CisJCSQkID0gbmV3IFN0ZXAoIFN0ZXA6OkNoaWxkQXhpcywgKiQxICk7CisJCWRl
bGV0ZSAkMTsKKwl9CisJfAorCU5vZGVUZXN0IFByZWRpY2F0ZUxpc3QKKwl7CisJCSQkID0gbmV3
IFN0ZXAoU3RlcDo6Q2hpbGRBeGlzLCAqJDEsICokMiApOworCQlkZWxldGUgJDE7CisJCWRlbGV0
ZSAkMjsKKwl9CisJfAorCUF4aXNTcGVjaWZpZXIgTm9kZVRlc3QKKwl7CisJCSQkID0gbmV3IFN0
ZXAoICQxLCAqJDIgKTsKKwkJZGVsZXRlICQyOworCX0KKwl8CisJQXhpc1NwZWNpZmllciBOb2Rl
VGVzdCBQcmVkaWNhdGVMaXN0CisJeworCQkkJCA9IG5ldyBTdGVwKCAkMSwgKiQyLCAgKiQzICk7
CisJCWRlbGV0ZSAkMjsKKwkJZGVsZXRlICQzOworCX0KKwl8CisJQWJicmV2aWF0ZWRTdGVwCisJ
OworCitBeGlzU3BlY2lmaWVyOgorCUFYSVNOQU1FCisJfAorCSdAJworCXsKKwkJJCQgPSBTdGVw
OjpBdHRyaWJ1dGVBeGlzOworCX0KKwk7CisKK05vZGVUZXN0OgorCU5BTUVURVNUCisJeworCQlj
b25zdCBpbnQgY29sb24gPSAkMS0+ZmluZCgnOicpOworCQlpZiAoY29sb24gPiAtMSkgeworCQkJ
U3RyaW5nIHByZWZpeCgkMS0+bGVmdChjb2xvbikpOworCQkJWFBhdGhOU1Jlc29sdmVyICpyZXNv
bHZlciA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucmVzb2x2ZXI7CisJCQlpZiAo
IXJlc29sdmVyIHx8IHJlc29sdmVyLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgIGdvdE5hbWVzcGFjZUVycm9yID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBZWUFCT1JUOworCQkJfQorCQl9CisJfQorCXwKKwlOT0RFVFlQRSAnKCcgJyknCisJ
eworCQkkJCA9IG5ldyBEZXByZWNhdGVkU3RyaW5nKCAqJDEgKyAiKCkiICk7CisJfQorCXwKKwlQ
SSAnKCcgJyknCisJfAorCVBJICcoJyBMSVRFUkFMICcpJworCXsKKwkJRGVwcmVjYXRlZFN0cmlu
ZyBzID0gKiQxICsgIiAiICsgKiQzOworICAgICAgICBzID0gcy5zdHJpcFdoaXRlU3BhY2UoKTsK
KwkJJCQgPSBuZXcgRGVwcmVjYXRlZFN0cmluZyggcyApOworCQlkZWxldGUgJDE7CisJCWRlbGV0
ZSAkMzsKKwl9CisJOworCitQcmVkaWNhdGVMaXN0OgorCVByZWRpY2F0ZQorCXsKKwkJJCQgPSBu
ZXcgVmVjdG9yPFByZWRpY2F0ZSo+OworCQkkJC0+YXBwZW5kKCBuZXcgUHJlZGljYXRlKCAkMSAp
ICk7CisJfQorCXwKKwlQcmVkaWNhdGVMaXN0IFByZWRpY2F0ZQorCXsKKwkJJCQtPmFwcGVuZCgg
bmV3IFByZWRpY2F0ZSggJDIgKSApOworCX0KKwk7CisKK1ByZWRpY2F0ZToKKwknWycgRXhwciAn
XScKKwl7CisJCSQkID0gJDI7CisJfQorCTsKKworRGVzY2VuZGFudE9yU2VsZjoKKwlTTEFTSFNM
QVNICisJeworCQkkJCA9IG5ldyBTdGVwKCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcywgIm5v
ZGUoKSIgKTsKKwl9CisJOworCitBYmJyZXZpYXRlZFN0ZXA6CisJJy4nCisJeworCQkkJCA9IG5l
dyBTdGVwKCBTdGVwOjpTZWxmQXhpcywgIm5vZGUoKSIgKTsKKwl9CisJfAorCURPVERPVAorCXsK
KwkJJCQgPSBuZXcgU3RlcCggU3RlcDo6UGFyZW50QXhpcywgIm5vZGUoKSIgKTsKKwl9CisJOwor
CitQcmltYXJ5RXhwcjoKKwlWQVJJQUJMRVJFRkVSRU5DRQorCXsKKwkJJCQgPSBuZXcgVmFyaWFi
bGVSZWZlcmVuY2UoICokMSApOworCQlkZWxldGUgJDE7CisJfQorCXwKKwknKCcgRXhwciAnKScK
Kwl7CisJCSQkID0gJDI7CisJfQorCXwKKwlMSVRFUkFMCisJeworCQkkJCA9IG5ldyBTdHJpbmdF
eHByZXNzaW9uKCAqJDEgKTsKKwkJZGVsZXRlICQxOworCX0KKwl8CisJTlVNQkVSCisJeworCQkk
JCA9IG5ldyBOdW1iZXIoICQxLT50b0RvdWJsZSgpICk7CisJCWRlbGV0ZSAkMTsKKwl9CisJfAor
CUZ1bmN0aW9uQ2FsbAorCTsKKworRnVuY3Rpb25DYWxsOgorCUZVTkNUSU9OTkFNRSAnKCcgJykn
CisJeworCQkkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0aW9uKCAkMS0+bGF0
aW4xKCkgKTsKKwkJZGVsZXRlICQxOworCX0KKwl8CisJRlVOQ1RJT05OQU1FICcoJyBBcmd1bWVu
dExpc3QgJyknCisJeworCQkkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0aW9u
KCAkMS0+bGF0aW4xKCksICokMyApOworCQlkZWxldGUgJDE7CisJCWRlbGV0ZSAkMzsKKwl9CisJ
OworCitBcmd1bWVudExpc3Q6CisJQXJndW1lbnQKKwl7CisJCSQkID0gbmV3IFZlY3RvcjxFeHBy
ZXNzaW9uKj47CisJCSQkLT5hcHBlbmQoJDEpOworCX0KKwl8CisJQXJndW1lbnRMaXN0ICcsJyBB
cmd1bWVudAorCXsKKwkJJCQtPmFwcGVuZCgkMyk7CisJfQorCTsKKworQXJndW1lbnQ6CisJRXhw
cgorCTsKKworCitVbmlvbkV4cHI6CisJUGF0aEV4cHIKKwl8CisJVW5pb25FeHByICd8JyBQYXRo
RXhwcgorCXsKKwkJJCQgPSBuZXcgVW5pb247CisJCSQkLT5hZGRTdWJFeHByZXNzaW9uKCAkMSAp
OworCQkkJC0+YWRkU3ViRXhwcmVzc2lvbiggJDMgKTsKKwl9CisJOworCitQYXRoRXhwcjoKKwlM
b2NhdGlvblBhdGgKKwl7CisJCSQkID0gJDE7CisJfQorCXwKKwlGaWx0ZXJFeHByCisJeworCQkk
JCA9ICQxOworCX0KKwl8CisJRmlsdGVyRXhwciAnLycgUmVsYXRpdmVMb2NhdGlvblBhdGgKKwl7
CisJCSQzLT5tX2Fic29sdXRlID0gdHJ1ZTsKKwkJJCQgPSBuZXcgUGF0aCggc3RhdGljX2Nhc3Q8
RmlsdGVyICo+KCAkMSApLCAkMyApOworCX0KKwl8CisJRmlsdGVyRXhwciBEZXNjZW5kYW50T3JT
ZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRoCisJeworCQkkMy0+bV9zdGVwcy5pbnNlcnQoMCwgJDIp
OworCQkkMy0+bV9hYnNvbHV0ZSA9IHRydWU7CisJCSQkID0gbmV3IFBhdGgoIHN0YXRpY19jYXN0
PEZpbHRlciAqPiggJDEgKSwgJDMgKTsKKwl9CisJOworCitGaWx0ZXJFeHByOgorCVByaW1hcnlF
eHByCisJeworCQkkJCA9ICQxOworCX0KKwl8CisJUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAor
CXsKKwkJJCQgPSBuZXcgRmlsdGVyKCAkMSwgKiQyICk7CisJfQorCTsKKworT3JFeHByOgorCUFu
ZEV4cHIKKwl8CisJT3JFeHByIE9SIEFuZEV4cHIKKwl7CisJCSQkID0gbmV3IExvZ2ljYWxPcCgg
TG9naWNhbE9wOjpPUF9PciwgJDEsICQzICk7CisJfQorCTsKKworQW5kRXhwcjoKKwlFcXVhbGl0
eUV4cHIKKwl8CisJQW5kRXhwciBBTkQgRXF1YWxpdHlFeHByCisJeworCQkkJCA9IG5ldyBMb2dp
Y2FsT3AoIExvZ2ljYWxPcDo6T1BfQW5kLCAkMSwgJDMgKTsKKwl9CisJOworCitFcXVhbGl0eUV4
cHI6CisJUmVsYXRpb25hbEV4cHIKKwl8CisJRXF1YWxpdHlFeHByIEVRT1AgUmVsYXRpb25hbEV4
cHIKKwl7CisJCSQkID0gbmV3IEVxVGVzdE9wKCAkMiwgJDEsICQzICk7CisJfQorCTsKKworUmVs
YXRpb25hbEV4cHI6CisJQWRkaXRpdmVFeHByCisJfAorCVJlbGF0aW9uYWxFeHByIFJFTE9QIEFk
ZGl0aXZlRXhwcgorCXsKKwkJJCQgPSBuZXcgTnVtZXJpY09wKCAkMiwgJDEsICQzICk7CisJfQor
CTsKKworQWRkaXRpdmVFeHByOgorCU11bHRpcGxpY2F0aXZlRXhwcgorCXwKKwlBZGRpdGl2ZUV4
cHIgUExVUyBNdWx0aXBsaWNhdGl2ZUV4cHIKKwl7CisJCSQkID0gbmV3IE51bWVyaWNPcCggTnVt
ZXJpY09wOjpPUF9BZGQsICQxLCAkMyApOworCX0KKwl8CisJQWRkaXRpdmVFeHByIE1JTlVTIE11
bHRpcGxpY2F0aXZlRXhwcgorCXsKKwkJJCQgPSBuZXcgTnVtZXJpY09wKCBOdW1lcmljT3A6Ok9Q
X1N1YiwgJDEsICQzICk7CisJfQorCTsKKworTXVsdGlwbGljYXRpdmVFeHByOgorCVVuYXJ5RXhw
cgorCXwKKwlNdWx0aXBsaWNhdGl2ZUV4cHIgTVVMT1AgVW5hcnlFeHByCisJeworCQkkJCA9IG5l
dyBOdW1lcmljT3AoICQyLCAkMSwgJDMgKTsKKwl9CisJOworCitVbmFyeUV4cHI6CisJVW5pb25F
eHByCisJfAorCU1JTlVTIFVuYXJ5RXhwcgorCXsKKwkJJCQgPSBuZXcgTmVnYXRpdmU7CisJCSQk
LT5hZGRTdWJFeHByZXNzaW9uKCAkMiApOworCX0KKwk7CisKKyUlCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitFeHByZXNzaW9uKiBwYXJzZVN0YXRlbWVu
dChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0aW9uQ29kZSYgY29kZSkKK3sKKyAgICBn
b3ROYW1lc3BhY2VFcnJvciA9IGZhbHNlOworCisJaW5pdFRva2VuaXplcihzdGF0ZW1lbnQpOwor
ICAgIAorCWludCBwYXJzZUVycm9yID0geXlwYXJzZSgpOworICAgIAorICAgIGlmIChwYXJzZUVy
cm9yKSB7CisgICAgICAgIGlmIChnb3ROYW1lc3BhY2VFcnJvcikKKyAgICAgICAgICAgIGNvZGUg
PSBOQU1FU1BBQ0VfRVJSOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gSU5WQUxJ
RF9FWFBSRVNTSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorCXJldHVy
biBfdG9wRXhwcjsKK30KKworfQorfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogdXRpbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBVVElMX0gKKyNkZWZpbmUgVVRJTF9ICisKKyNp
bmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJOb2RlLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgWFBhdGggeworCit0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBOb2RlU2V0OworICAgIAorLyogQHJldHVybiB3aGV0aGVyIHRoZSBnaXZl
biBub2RlIGlzIHRoZSByb290IG5vZGUuCisgKi8KK2Jvb2wgaXNSb290RG9tTm9kZShOb2RlICpu
b2RlKTsKKworLyogQHJldHVybiB0aGUgJ3N0cmluZy12YWx1ZScgb2YgdGhlIGdpdmVuIG5vZGUg
YXMgc3BlY2lmaWVkIGJ5CisgICBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aAorICovCitTdHJp
bmcgc3RyaW5nVmFsdWUoTm9kZSAqbm9kZSk7CisKKy8qIEByZXR1cm4gYWxsIGFuY2VzdG9yIG5v
ZGVzIG9mIHRoZSBnaXZlbiBub2RlLCBpbiBkb2N1bWVudCBvcmRlci4KKyAqLworTm9kZVNldCBn
ZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KE5vZGUgKm5vZGUpOworCisvKiBAcmV0dXJuIHdoZXRoZXIg
dGhlIGdpdmVuIG5vZGUgaXMgYSB2YWxpZCBjb250ZXh0IG5vZGUKKyAqLworYm9vbCBpc1ZhbGlk
Q29udGV4dE5vZGUoIFdlYkNvcmU6Ok5vZGUgKm5vZGUgKTsKKworfQorfQorCisjZW5kaWYgLy8g
VVRJTF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3hwYXRoL2ltcGwvcGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hw
YXRoL2ltcGwvcGF0aC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICog
cGF0aC5jYyAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KworI2luY2x1ZGUgInBhdGguaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAg
ICAKK0ZpbHRlcjo6RmlsdGVyKEV4cHJlc3Npb24gKmV4cHIsIGNvbnN0IFZlY3RvcjxQcmVkaWNh
dGUqPiYgcHJlZGljYXRlcykKKwk6IG1fZXhwcihleHByKSwKKwltX3ByZWRpY2F0ZXMocHJlZGlj
YXRlcykKK3sKK30KKworRmlsdGVyOjp+RmlsdGVyKCkKK3sKKwlkZWxldGUgbV9leHByOworICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX3ByZWRpY2F0ZXMpOworfQorCitWYWx1ZSBGaWx0ZXI6OmRvRXZh
bHVhdGUoKSBjb25zdAoreworCVZhbHVlIHYgPSBtX2V4cHItPmV2YWx1YXRlKCk7CisgICAgCisJ
aWYgKCF2LmlzTm9kZXNldCgpKSB7CisgICAgICAgIGlmICghbV9wcmVkaWNhdGVzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIExPRyhYUGF0aCwgIklnbm9yaW5nIHByZWRpY2F0ZXMgZm9yIGZpbHRl
ciBzaW5jZSBleHByZXNzaW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIGEgbm9kZXNldCEiKTsKKwor
CQlyZXR1cm4gdjsKKwl9CisKKyAgICBOb2RlU2V0IGluTm9kZXMgPSB2LnRvTm9kZVNldCgpLCBv
dXROb2RlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVkaWNhdGVzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIG91dE5vZGVzLmNsZWFyKCk7CisJCUV4cHJlc3Npb246OmV2YWx1
YXRpb25Db250ZXh0KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOworCQlFeHByZXNzaW9uOjpldmFs
dWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBpbk5vZGVzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBOb2Rl
ICpub2RlID0gaW5Ob2Rlc1tqXS5nZXQoKTsKKyAgICAgICAgICAgIAorCQkJRXhwcmVzc2lvbjo6
ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gbm9kZTsKKwkJCSsrRXhwcmVzc2lvbjo6ZXZhbHVh
dGlvbkNvbnRleHQoKS5wb3NpdGlvbjsKKyAgICAgICAgICAgIAorCQkJaWYgKG1fcHJlZGljYXRl
c1tpXS0+ZXZhbHVhdGUoKSkKKwkJCQlvdXROb2Rlcy5hcHBlbmQobm9kZSk7CisJCX0KKwkJaW5O
b2RlcyA9IG91dE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShvdXROb2Rlcyk7Cit9
CisKK0xvY2F0aW9uUGF0aDo6TG9jYXRpb25QYXRoKCkKKwk6IG1fYWJzb2x1dGUoIGZhbHNlICkK
K3sKK30KKworTG9jYXRpb25QYXRoOjp+TG9jYXRpb25QYXRoKCkKK3sKKyAgICBkZWxldGVBbGxW
YWx1ZXMobV9zdGVwcyk7Cit9CisKK3ZvaWQgTG9jYXRpb25QYXRoOjpvcHRpbWl6ZSgpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RlcHMuc2l6ZSgpOyBpKyspCisgICAgICAg
IG1fc3RlcHNbaV0tPm9wdGltaXplKCk7Cit9CisKK1ZhbHVlIExvY2F0aW9uUGF0aDo6ZG9FdmFs
dWF0ZSgpIGNvbnN0Cit7CisJaWYgKG1fYWJzb2x1dGUpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAi
RXZhbHVhdGluZyBhYnNvbHV0ZSBwYXRoIGV4cHJlc3Npb24gd2l0aCAlaSBsb2NhdGlvbiBzdGVw
cy5cbiIsIG1fc3RlcHMuc2l6ZSgpKTsKKwl9IGVsc2UgeworCQlMT0coWFBhdGgsICJFdmFsdWF0
aW5nIHJlbGF0aXZlIHBhdGggZXhwcmVzc2lvbiB3aXRoICVpIGxvY2F0aW9uIHN0ZXBzLlxuIiwg
bV9zdGVwcy5zaXplKCkpOworCX0KKworCU5vZGVTZXQgaW5Eb21Ob2Rlcywgb3V0RG9tTm9kZXM7
CisKKwkvKiBGb3IgYWJzb2x1dGUgbG9jYXRpb24gcGF0aHMsIHRoZSBjb250ZXh0IG5vZGUgaXMg
aWdub3JlZCAtIHRoZQorCSAqIGRvY3VtZW50J3Mgcm9vdCBub2RlIGlzIHVzZWQgaW5zdGVhZC4K
KwkgKi8KKwlOb2RlICpjb250ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5u
b2RlOworCWlmIChtX2Fic29sdXRlICYmIGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9D
VU1FTlRfTk9ERSkgCisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LT5vd25lckRvY3VtZW50KCk7
CisKKwlpbkRvbU5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zdGVwcy5zaXplKCk7IGkrKykgeworCQlTdGVwICpzdGVwID0gbV9zdGVw
c1tpXTsKKworCQlmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5Eb21Ob2Rlcy5zaXplKCk7IGor
KykgeworCQkJTm9kZVNldCBtYXRjaGVzID0gc3RlcC0+ZXZhbHVhdGUoaW5Eb21Ob2Rlc1tqXS5n
ZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dERvbU5vZGVzLmFwcGVuZChtYXRj
aGVzKTsKKwkJfQorICAgICAgICAKKwkJaW5Eb21Ob2RlcyA9IG91dERvbU5vZGVzOworCQlvdXRE
b21Ob2Rlcy5jbGVhcigpOworCX0KKworICAgIHJldHVybiBWYWx1ZShpbkRvbU5vZGVzKTsKK30K
KworUGF0aDo6UGF0aCggRmlsdGVyICpmaWx0ZXIsIExvY2F0aW9uUGF0aCAqcGF0aCApCisJOiBt
X2ZpbHRlciggZmlsdGVyICksCisJbV9wYXRoKCBwYXRoICkKK3sKK30KKworUGF0aDo6flBhdGgo
KQoreworCWRlbGV0ZSBtX2ZpbHRlcjsKKwlkZWxldGUgbV9wYXRoOworfQorCitWYWx1ZSBQYXRo
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKwlyZXR1cm4gVmFsdWUoKTsKK30KKworfQorfQpJbmRl
eDogV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
cGF0aC9YUGF0aFJlc3VsdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRo
UmVzdWx0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBYUGF0aFJl
c3VsdC5jcHAgLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aFJlc3Vs
dC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFhQYXRo
OworCitjbGFzcyBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVu
ZXIgeworcHVibGljOgorICAgIEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXRO
b2RlICpub2RlLCBYUGF0aFJlc3VsdCAqcmVzdWx0KSAKKyAgICAgICAgOiBtX25vZGUobm9kZSks
IG1fcmVzdWx0KHJlc3VsdCkgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50
KEV2ZW50KiwgYm9vbCkgeyBtX3Jlc3VsdC0+aW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUoKTsgfQor
cHJpdmF0ZToKKyAgICBFdmVudFRhcmdldE5vZGUgKm1fbm9kZTsKKyAgICBYUGF0aFJlc3VsdCAq
bV9yZXN1bHQ7Cit9OworCitYUGF0aFJlc3VsdDo6WFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2Rl
KiBldmVudFRhcmdldCwgY29uc3QgVmFsdWUgJnZhbHVlKQorCTogbV92YWx1ZSh2YWx1ZSkKKyAg
ICAsIG1fZXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpCit7CisgICAgbV9ldmVudExpc3RlbmVyID0g
bmV3IEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIobV9ldmVudFRhcmdldC5nZXQoKSwgdGhpcyk7
CisgICAgbV9ldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0
cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIAorCXN3
aXRjaCAobV92YWx1ZS50eXBlKCkpIHsKKwkJY2FzZSBWYWx1ZTo6Qm9vbGVhbjoKKwkJCW1fcmVz
dWx0VHlwZSA9IEJPT0xFQU5fVFlQRTsKKwkJCWJyZWFrOworCQljYXNlIFZhbHVlOjpOdW1iZXI6
CisJCQltX3Jlc3VsdFR5cGUgPSBOVU1CRVJfVFlQRTsKKwkJCWJyZWFrOworCQljYXNlIFZhbHVl
OjpTdHJpbmc6CisJCQltX3Jlc3VsdFR5cGUgPSBTVFJJTkdfVFlQRTsKKwkJCWJyZWFrOworCQlj
YXNlIFZhbHVlOjpOb2Rlc2V0OgorCQkJbV9yZXN1bHRUeXBlID0gVU5PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRTsKKyAgICAgICAgICAgIG1fbm9kZVNldFBvc2l0aW9uID0gMDsKKyAgICAgICAg
ICAgIG1fbm9kZVNldCA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7CisgICAgICAgICAgICBtX2ludmFs
aWRJdGVyYXRvclN0YXRlID0gZmFsc2U7CisJfQorfQorCitYUGF0aFJlc3VsdDo6flhQYXRoUmVz
dWx0KCkKK3sKKyAgICBpZiAobV9ldmVudFRhcmdldCkKKyAgICAgICAgbV9ldmVudFRhcmdldC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwg
bV9ldmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7Cit9CisKK3ZvaWQgWFBhdGhSZXN1bHQ6OmNv
bnZlcnRUbyggdW5zaWduZWQgc2hvcnQgdHlwZSwgaW50ICZleGNlcHRpb25jb2RlICkKK3sKKwlz
d2l0Y2ggKCB0eXBlICkgeworCQljYXNlIEFOWV9UWVBFOgorCQkJYnJlYWs7CisJCWNhc2UgTlVN
QkVSX1RZUEU6CisJCQltX3Jlc3VsdFR5cGUgPSB0eXBlOworCQkJbV92YWx1ZSA9IFZhbHVlKCBt
X3ZhbHVlLnRvTnVtYmVyKCkgKTsKKwkJCWJyZWFrOworCQljYXNlIFNUUklOR19UWVBFOgorCQkJ
bV9yZXN1bHRUeXBlID0gdHlwZTsKKwkJCW1fdmFsdWUgPSBWYWx1ZSggbV92YWx1ZS50b1N0cmlu
ZygpICk7CisJCQlicmVhazsKKwkJY2FzZSBCT09MRUFOX1RZUEU6CisJCQltX3Jlc3VsdFR5cGUg
PSB0eXBlOworCQkJbV92YWx1ZSA9IFZhbHVlKG1fdmFsdWUudG9Cb29sZWFuKCkpOworCQkJYnJl
YWs7CisJCWNhc2UgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRToKKwkJY2FzZSBPUkRFUkVE
X05PREVfSVRFUkFUT1JfVFlQRToKKwkJY2FzZSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
OgorCQljYXNlIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFOgorCQljYXNlIEFOWV9VTk9SREVS
RURfTk9ERV9UWVBFOgorCQljYXNlIEZJUlNUX09SREVSRURfTk9ERV9UWVBFOgorCQkJaWYgKCFt
X3ZhbHVlLmlzTm9kZXNldCgpKSB7CisJCQkJZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworCQkJ
CXJldHVybjsKKwkJCX0KKwkJCW1fcmVzdWx0VHlwZSA9IHR5cGU7CisJCWRlZmF1bHQ6CisgICAg
ICAgICAgICBMT0coWFBhdGgsICJDYW5ub3QgY29udmVydCBYUGF0aFJlc3VsdCB0byB1bmtub3du
IHR5cGUgJyV1JyEiLCB0eXBlKTsKKwl9Cit9CisKK3Vuc2lnbmVkIHNob3J0IFhQYXRoUmVzdWx0
OjpyZXN1bHRUeXBlKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9yZXN1bHRUeXBlOworfQorCitkb3Vi
bGUgWFBhdGhSZXN1bHQ6Om51bWJlclZhbHVlKGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sK
KwlpZiAocmVzdWx0VHlwZSgpICE9IE5VTUJFUl9UWVBFKSB7CisJCWV4Y2VwdGlvbmNvZGUgPSBU
WVBFX0VSUjsKKwkJcmV0dXJuIDAuMDsKKwl9CisJcmV0dXJuIG1fdmFsdWUudG9OdW1iZXIoKTsK
K30KKworU3RyaW5nIFhQYXRoUmVzdWx0OjpzdHJpbmdWYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUp
IGNvbnN0Cit7CisJaWYgKCByZXN1bHRUeXBlKCkgIT0gU1RSSU5HX1RZUEUgKSB7CisJCWV4Y2Vw
dGlvbmNvZGUgPSBUWVBFX0VSUjsKKwkJcmV0dXJuIFN0cmluZygpOworCX0KKwlyZXR1cm4gbV92
YWx1ZS50b1N0cmluZygpOworfQorCitib29sIFhQYXRoUmVzdWx0Ojpib29sZWFuVmFsdWUoaW50
ICZleGNlcHRpb25jb2RlKSBjb25zdAoreworCWlmICggcmVzdWx0VHlwZSgpICE9IEJPT0xFQU5f
VFlQRSApIHsKKwkJZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworCQlyZXR1cm4gZmFsc2U7CisJ
fQorCXJldHVybiBtX3ZhbHVlLnRvQm9vbGVhbigpOworfQorCitOb2RlICpYUGF0aFJlc3VsdDo6
c2luZ2xlTm9kZVZhbHVlKGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sKKwlpZiAoIHJlc3Vs
dFR5cGUoKSAhPSBBTllfVU5PUkRFUkVEX05PREVfVFlQRSAmJgorCSAgICAgcmVzdWx0VHlwZSgp
ICE9IEZJUlNUX09SREVSRURfTk9ERV9UWVBFICkgeworCQlleGNlcHRpb25jb2RlID0gVFlQRV9F
UlI7CisJCXJldHVybiAwOworCX0KKyAgCisgICAgTm9kZVNldCBub2RlcyA9IG1fdmFsdWUudG9O
b2RlU2V0KCk7CisgICAgaWYgKG5vZGVzLnNpemUgKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbm9kZXNbMF0uZ2V0KCk7Cit9CisKK3ZvaWQgWFBh
dGhSZXN1bHQ6OmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCkKK3sgCisgICAgbV9pbnZhbGlkSXRl
cmF0b3JTdGF0ZSA9IHRydWU7CisgICAgCisgICAgQVNTRVJUKG1fZXZlbnRUYXJnZXQpOworICAg
IEFTU0VSVChtX2V2ZW50TGlzdGVuZXIpOworICAgIAorICAgIG1fZXZlbnRUYXJnZXQtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVkRXZlbnQsIG1fZXZl
bnRMaXN0ZW5lci5nZXQoKSwgZmFsc2UpOworICAgIAorICAgIG1fZXZlbnRUYXJnZXQgPSAwOwor
fQorCitib29sIFhQYXRoUmVzdWx0OjppbnZhbGlkSXRlcmF0b3JTdGF0ZSgpIGNvbnN0Cit7CisJ
aWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICYmCisgICAg
ICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSkKKwkJcmV0dXJu
IGZhbHNlOworICAgIAorCXJldHVybiBtX2ludmFsaWRJdGVyYXRvclN0YXRlOworfQorCit1bnNp
Z25lZCBsb25nIFhQYXRoUmVzdWx0OjpzbmFwc2hvdExlbmd0aChpbnQgJmV4Y2VwdGlvbmNvZGUp
IGNvbnN0Cit7CisJaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9U
WVBFICYmCisgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RSkgeworCQlleGNlcHRpb25jb2RlID0gVFlQRV9FUlI7CisJCXJldHVybiAwOworCX0KKworCXJl
dHVybiBtX3ZhbHVlLnRvTm9kZVNldCgpLnNpemUoKTsKK30KKworTm9kZSAqWFBhdGhSZXN1bHQ6
Oml0ZXJhdGVOZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKQoreworCWlmIChyZXN1bHRUeXBlKCkgIT0g
VU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAmJgorCSAgICByZXN1bHRUeXBlKCkgIT0gT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEUpIHsKKwkJZWMgPSBUWVBFX0VSUjsKKwkJcmV0dXJuIDA7
CisJfQorICAgIAorICAgIGlmIChtX2ludmFsaWRJdGVyYXRvclN0YXRlKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAg
ICBpZiAobV9ub2RlU2V0UG9zaXRpb24gKyAxID49IG1fbm9kZVNldC5zaXplKCkpCisJCXJldHVy
biAwOworCisgICAgTm9kZSAqbm9kZSA9IG1fbm9kZVNldFttX25vZGVTZXRQb3NpdGlvbl0uZ2V0
KCk7CisgICAgCisgICAgbV9ub2RlU2V0UG9zaXRpb24rKzsKKworICAgIHJldHVybiBub2RlOwor
fQorCitOb2RlICpYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKCB1bnNpZ25lZCBsb25nIGluZGV4
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQoreworCWlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSAmJgorCSAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFKSB7CisJCWV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsKKwkJcmV0dXJu
IDA7CisJfQorICAgIAorICAgIE5vZGVTZXQgbm9kZXMgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOwor
ICAgIGlmIChpbmRleCA+PSBub2Rlcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIHJldHVybiBub2Rlc1tpbmRleF0uZ2V0KCk7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS94
cGF0aC9YUGF0aFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1
bHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIFhQYXRoUmVzdWx0LmggLSBDb3B5cmlnaHQg
MjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm
IFhQYXRoUmVzdWx0X0gKKyNkZWZpbmUgWFBhdGhSZXN1bHRfSAorCisjaW5jbHVkZSAiU2hhcmVk
LmgiCisKKyNpbmNsdWRlICJpbXBsL2V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE5vZGU7CitjbGFzcyBFdmVu
dFRhcmdldE5vZGU7CitjbGFzcyBFdmVudExpc3RlbmVyOworCitjbGFzcyBYUGF0aFJlc3VsdCA6
IHB1YmxpYyBTaGFyZWQ8WFBhdGhSZXN1bHQ+Cit7CitwdWJsaWM6CisgICAgZW51bSBYUGF0aFJl
c3VsdFR5cGUgeworCQlBTllfVFlQRSA9IDAsCisJCU5VTUJFUl9UWVBFID0gMSwKKwkJU1RSSU5H
X1RZUEUgPSAyLAorCQlCT09MRUFOX1RZUEUgPSAzLAorCQlVTk9SREVSRURfTk9ERV9JVEVSQVRP
Ul9UWVBFID0gNCwKKwkJT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA1LAorCQlVTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNiwKKwkJT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUg
PSA3LAorCQlBTllfVU5PUkRFUkVEX05PREVfVFlQRSA9IDgsCisJCUZJUlNUX09SREVSRURfTk9E
RV9UWVBFID0gOQorCX07CisJCisJWFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2RlICpldmVudFRh
cmdldCwgY29uc3QgWFBhdGg6OlZhbHVlICZ2YWx1ZSk7CisgICAgflhQYXRoUmVzdWx0KCk7Cisg
ICAgCisJdm9pZCBjb252ZXJ0VG8odW5zaWduZWQgc2hvcnQgdHlwZSwgaW50ICZleGNlcHRpb25j
b2RlKTsKKworCXVuc2lnbmVkIHNob3J0IHJlc3VsdFR5cGUoKSBjb25zdDsKKworCWRvdWJsZSBu
dW1iZXJWYWx1ZSggaW50ICZleGNlcHRpb25jb2RlICkgY29uc3Q7CisJU3RyaW5nIHN0cmluZ1Zh
bHVlKCBpbnQgJmV4Y2VwdGlvbmNvZGUgKSBjb25zdDsKKwlib29sIGJvb2xlYW5WYWx1ZSggaW50
ICZleGNlcHRpb25jb2RlICkgY29uc3Q7CisJTm9kZSAqc2luZ2xlTm9kZVZhbHVlKCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKSBjb25zdDsKKworCWJvb2wgaW52YWxpZEl0ZXJhdG9yU3RhdGUoKSBjb25z
dDsKKwl1bnNpZ25lZCBsb25nIHNuYXBzaG90TGVuZ3RoKGludCAmZXhjZXB0aW9uY29kZSkgY29u
c3Q7CisJTm9kZSAqaXRlcmF0ZU5leHQoaW50ICZleGNlcHRpb25jb2RlKTsKKwlOb2RlICpzbmFw
c2hvdEl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlKTsKKworICAg
IHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUoKTsKK3ByaXZhdGU6CisgICAgWFBhdGg6OlZh
bHVlIG1fdmFsdWU7CisgICAgdW5zaWduZWQgbV9ub2RlU2V0UG9zaXRpb247CisgICAgWFBhdGg6
Ok5vZGVTZXQgbV9ub2RlU2V0OworCXVuc2lnbmVkIHNob3J0IG1fcmVzdWx0VHlwZTsKKyAgICBi
b29sIG1faW52YWxpZEl0ZXJhdG9yU3RhdGU7CisgICAgUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4g
bV9ldmVudFRhcmdldDsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gWFBhdGhSZXN1bHRfSAorCkluZGV4OiBXZWJDb3JlL3hw
YXRoL1hQYXRoRXhwcmVzc2lvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0
aEV4cHJlc3Npb24uaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJl
c3Npb24uaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIHhwYXRoIHsKKworICAgIGludGVyZmFj
ZSBYUGF0aEV4cHJlc3Npb24geworICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShpbiBOb2Rl
IGNvbnRleHROb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQg
c2hvcnQgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoUmVzdWx0
IGluUmVzdWx0KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKK30K
SW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94
cGF0aC9YUGF0aEV2YWx1YXRvci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggewor
CisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yLCBDYW5CZUNvbnN0cnVjdGVkXSBY
UGF0aEV2YWx1YXRvciB7CisgICAgICAgIFhQYXRoRXhwcmVzc2lvbiBjcmVhdGVFeHByZXNzaW9u
KGluIERPTVN0cmluZyBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBYUGF0aE5TUmVzb2x2ZXIgcmVzb2x2ZXIpCisgICAgICAgICAgICByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICBYUGF0aE5TUmVzb2x2ZXIgY3JlYXRlTlNSZXNv
bHZlcihpbiBOb2RlIG5vZGVSZXNvbHZlcik7CisKKyAgICAgICAgWFBhdGhSZXN1bHQgZXZhbHVh
dGUoaW4gRE9NU3RyaW5nIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIE5vZGUgY29udGV4dE5vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBY
UGF0aE5TUmVzb2x2ZXIgcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQ
YXRoUmVzdWx0IGluUmVzdWx0KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisg
ICAgfTsKK30KSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGwJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1
bGUgeHBhdGggeworCisgICAgaW50ZXJmYWNlIFhQYXRoTlNSZXNvbHZlciB7CisgICAgICAgIERP
TVN0cmluZyBsb29rdXBOYW1lc3BhY2VVUkkoaW4gRE9NU3RyaW5nIHByZWZpeCk7CisgICAgfTsK
K30KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNDE4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjg4IEBACisyMDA2LTA1LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBtYWMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzOAor
ICAgICAgICBTdXBwb3J0IE1vemlsbGEncyBYUGF0aEV2YWx1YXRvciBvYmplY3QuCisgICAgICAg
IAorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgIEdlbmVyYXRlIFhQYXRo
IGdyYW1tYXIsIGFuZCBKYXZhU2NyaXB0IHdyYXBwZXJzLgorICAgICAgICAKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMg
dG8gcHJvamVjdAorICAgICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5j
cHA6CisgICAgICAgIChLSlM6Oik6CisgICAgICAgIChLSlM6OnNldERPTUV4Y2VwdGlvbik6Cisg
ICAgICAgIEhhbmRsZSBzZXR0aW5nIFhQYXRoIGV4Y2VwdGlvbnMuCisgICAgICAgIAorICAgICAg
ICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICBKdXN0IHJldHVybiBuaWwgZm9yIG5v
dyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSB3cmFwcGVyIGZvciAKKyAgICAgICAgWFBhdGggbmFt
ZXNwYWNlIG5vZGVzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG06CisgICAgICAgIEFkZCBYUGF0aCB0eXBlcy4gQWxzbyBhZGQgYSAiQ2FuQmVDb25zdHJ1
Y3RlZCIgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAgIGZvciBpbnRlcmZhY2VzIHRoYXQgY2Fu
IGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LgorICAgICAgICAKKyAgICAgICAgKiBicmlkZ2UvbWFj
L1dlYkNvcmVQYWdlQnJpZGdlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVs
c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgSW5pdGlhbGl6ZSBMb2dYUGF0aCBjaGFubmVsLgorICAg
ICAgICAKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUpOgorICAgICAgICBTdXBwb3J0ICJ4
cGF0aCIgdmVyc2lvbiAiMy4wIi4KKyAgICAgICAgCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcG9ydE5vZGUpOgorICAgICAgICBJZ25vcmUgWFBh
dGggbmFtZXNwYWNlIG5vZGVzLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpjcmVhdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVO
U1Jlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpldmFsdWF0ZSk6CisgICAg
ICAgIE5ldyBmdW5jdGlvbnMgd2hpY2ggY2FsbCBkb3duIHRvIGEgbGF6aWx5IGNyZWF0ZWQgWFBh
dGhFdmFsdWF0b3IuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgQWRkIGZ1
bmN0aW9uIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogZG9tL0RvY3VtZW50Lmlk
bDoKKyAgICAgICAgQWRkIFhQYXRoIG1ldGhvZHMuCisgICAgICAgIAorICAgICAgICAqIGRvbS9O
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjopOgorICAgICAgICBBZGQgWFBBVEhfTkFN
RVNQQUNFX05PREUgdHlwZS4KKyAgICAgICAgCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRNYXJrdXApOgorICAgICAgICBJZ25vcmUgWFBhdGgg
bmFtZXNwYWNlIG5vZGVzLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6
CisgICAgICAgIEFkZCBjb25zdHJ1Y3RvcnMgZm9yIFhQYXRoRXZhbHVhdG9yIGFuZCBYUGF0aFJl
c3VsdC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vTG9nZ2luZy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vTG9nZ2luZy5oOgorICAgICAgICBBZGQgWFBhdGggbG9nIGNoYW5uZWwKKyAg
ICAgICAgCisgICAgICAgICogeHBhdGg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoRXZh
bHVhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV2YWx1YXRvcjo6Y3Jl
YXRlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV2YWx1YXRvcjo6Y3JlYXRl
TlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV2YWx1YXRvcjo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHhwYXRoL1hQYXRoRXZhbHVhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6KToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV2YWx1YXRvci5pZGw6IEFkZGVkLgorICAg
ICAgICAqIHhwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVhdGUpOgorICAgICAgICAqIHhwYXRoL1hQYXRoRXhwcmVz
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Npb24uaWRsOiBBZGRl
ZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcjo6WFBhdGhOU1Jlc29sdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiB4
cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhOU1Jl
c29sdmVyLmlkbDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpYUGF0aE5hbWVzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6flhQYXRoTmFtZXNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpvd25lckRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpvd25lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhOYW1lc3BhY2U6OnByZWZpeCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVz
cGFjZTo6bm9kZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om5hbWVz
cGFjZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6bm9kZVR5cGUpOgor
ICAgICAgICAqIHhwYXRoL1hQYXRoTmFtZXNwYWNlLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRo
L1hQYXRoUmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnZhbGlkYXRpbmdF
dmVudExpc3RlbmVyOjpJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoUmVzdWx0OjpYUGF0aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aFJlc3VsdDo6flhQYXRoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0Ojpj
b252ZXJ0VG8pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnJlc3VsdFR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6Om51bWJlclZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoUmVzdWx0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aFJlc3VsdDo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0Ojpz
aW5nbGVOb2RlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OmludmFsaWRh
dGVJdGVyYXRvclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppbnZhbGlk
SXRlcmF0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c25hcHNob3RM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6Oml0ZXJhdGVOZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpzbmFwc2hvdEl0ZW0pOgorICAgICAgICAqIHhw
YXRoL1hQYXRoUmVzdWx0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6
Oik6CisgICAgICAgICogeHBhdGgvWFBhdGhSZXN1bHQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB4
cGF0aC9pbXBsOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55OiBB
ZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL2V4cHJlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6aXNOb2Rl
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6aXNCb29sZWFuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6aXNOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlZhbHVlOjppc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6
OnRvTm9kZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnRvQm9vbGVhbik6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnRvTnVtYmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpFeHByZXNzaW9uOjpFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHBy
ZXNzaW9uOjp+RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lv
bjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OmFkZFN1
YkV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246Om9wdGlt
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpzdWJFeHByQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OnN1YkV4cHIpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OmlzQ29uc3RhbnQpOgorICAgICAgICAqIHhw
YXRoL2ltcGwvZXhwcmVzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpF
dmFsdWF0aW9uQ29udGV4dDo6RXZhbHVhdGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlZhbHVlOjopOgorICAgICAgICAqIHhwYXRoL2ltcGwvZnVuY3Rpb25zLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6SW50ZXJ2YWw6OkludGVydmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpJbnRlcnZhbDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkludGVydmFsOjphc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RnVuY3Rpb246OnNldEFyZ3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rp
b246OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjphcmcpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjphcmdDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb246Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkZ1bkxhc3Q6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhc3Q6
OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blBvc2l0aW9uOjpkb0V2
YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Qb3NpdGlvbjo6aXNDb25zdGFu
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTG9jYWxOYW1lOjppc0NvbnN0YW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Mb2NhbE5hbWU6OmRvRXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWVzcGFjZVVSSTo6aXNDb25zdGFudCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZXNwYWNlVVJJOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpGdW5OYW1lOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpGdW5Db3VudDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ291
bnQ6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN0cmluZzo6ZG9F
dmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ29uY2F0Ojpkb0V2YWx1YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdGFydHNXaXRoOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Db250YWluczo6ZG9FdmFsdWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nQmVmb3JlOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJpbmdBZnRlcjo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdHJpbmdMZW5ndGg6OmRvRXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5vcm1hbGl6ZVNwYWNlOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5UcmFuc2xhdGU6OmRvRXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1bkJvb2xlYW46OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkZ1bk5vdDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RnVuVHJ1ZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuVHJ1ZTo6
aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6ZG9FdmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6aXNDb25zdGFudCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuRmFsc2U6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkZ1bkZhbHNlOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5OdW1iZXI6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
blN1bTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuRmxvb3I6OmRv
RXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNlaWxpbmc6OmRvRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blJvdW5kOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbkxpYnJhcnk6OnNlbGYpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25MaWJyYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbkxpYnJhcnk6OmdldEZ1bmN0aW9uKToKKyAgICAg
ICAgKiB4cGF0aC9pbXBsL2Z1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBs
L3BhcnNlZHN0YXRlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBh
cnNlZFN0YXRlbWVudDo6UGFyc2VkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXJzZWRTdGF0ZW1lbnQ6On5QYXJzZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlBhcnNlZFN0YXRlbWVudDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlBhcnNlZFN0YXRlbWVudDo6b3B0aW1pemUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBh
cnNlZFN0YXRlbWVudDo6ZXZhbHVhdGUpOgorICAgICAgICAgKiB4cGF0aC9pbXBsL3BhcnNlZHN0
YXRlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL3BhdGguY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RmlsdGVyOjp+RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpG
aWx0ZXI6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0
aDo6TG9jYXRpb25QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6
On5Mb2NhdGlvblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6
b3B0aW1pemUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGF0aDo6UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBh
dGg6OmRvRXZhbHVhdGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvcGF0aC5oOiBBZGRlZC4KKyAg
ICAgICAgKiB4cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6Ok51bWJlcjo6TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1i
ZXI6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWJlcjo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RyaW5nRXhwcmVzc2lvbjo6U3RyaW5n
RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RyaW5nRXhwcmVzc2lvbjo6
aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RyaW5nRXhwcmVzc2lvbjo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TmVnYXRpdmU6OmRvRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6TnVtZXJpY09wKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6OmRvRXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6b3BOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpFcVRlc3RPcDo6RXFUZXN0T3ApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkVxVGVz
dE9wOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFcVRlc3RPcDo6b3BO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OkxvZ2ljYWxPcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjpzaG9ydENpcmN1aXRPbik6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6TG9naWNhbE9wOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpVbmlv
bjo6b3BOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpVbmlvbjo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UHJlZGljYXRlOjpQcmVkaWNhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6flByZWRpY2F0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6UHJlZGljYXRlOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6UHJlZGljYXRlOjpvcHRpbWl6ZSk6CisgICAgICAgICogeHBhdGgvaW1wbC9wcmVkaWNhdGUu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjopOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkVxVGVzdE9wOjopOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkxvZ2ljYWxPcDo6KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3N0ZXAuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpheGlzQXNTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlN0ZXA6OlN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6
On5TdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpldmFsdWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlN0ZXA6Om5vZGVUZXN0TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6U3RlcDo6b3B0aW1pemUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5hbWVz
cGFjZUZyb21Ob2RldGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6cHJpbWFy
eU5vZGVUeXBlKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3N0ZXAuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3Rva2VuaXpl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuOjpUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjopOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpzZWxmKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmNoYXJDYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlRva2VuaXplcjo6aXNBeGlzTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6VG9rZW5pemVyOjppc05vZGVUeXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VG9rZW5pemVyOjppc09wZXJhdG9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VG9rZW5pemVyOjpza2lwV1MpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXpl
cjo6bWFrZVRva2VuQW5kQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5p
emVyOjptYWtlSW50VG9rZW5BbmRBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpU
b2tlbml6ZXI6OnBlZWtBaGVhZEhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9r
ZW5pemVyOjpwZWVrQ3VySGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6
ZXI6OmxleFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6bGV4TkNOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmxleFFOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6Om5leHRUb2tlbkludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6VG9rZW5pemVyOjpUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlRva2VuaXplcjo6flRva2VuaXplcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5p
emVyOjpyZXNldCk6CisgICAgICAgICh4cGF0aHl5bGV4KToKKyAgICAgICAgKGluaXRUb2tlbml6
ZXIpOgorICAgICAgICAoeHBhdGh5eWVycm9yKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3Rva2Vu
aXplci5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL3V0aWwuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjppc1Jvb3REb21Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Z2V0Q2hpbGRy
ZW5SZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6aXNWYWxpZENvbnRleHRO
b2RlKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3V0aWwuaDogQWRkZWQuCisgICAgICAgICogeHBh
dGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlZhcmlhYmxlUmVmZXJlbmNlOjpWYXJpYWJsZVJlZmVyZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6VmFyaWFibGVSZWZlcmVuY2U6OmlzQ29uc3RhbnQpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlZhcmlhYmxlUmVmZXJlbmNlOjpkb0V2YWx1YXRlKToKKyAgICAgICAg
KiB4cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmg6IEFkZGVkLgorCiAyMDA2LTA1LTA0ICBF
cmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IHRp
bW8uCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCShyZXZpc2lv
biAxNDE3OSkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nZ2lu
Z0NoYW5uZWxzSWZOCiAgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nRXZlbnRzKTsKICAgICBp
bml0aWFsaXplTG9nQ2hhbm5lbChMb2dFZGl0aW5nKTsKICAgICBpbml0aWFsaXplTG9nQ2hhbm5l
bChMb2dUZXh0Q29udmVyc2lvbik7CisgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nWFBhdGgp
OwogfQogCiAtIChpZClpbml0CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMTQxNzkpCisr
KyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIs
OCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIE5vZGVDb25zdHJ1Y3RvciBO
b2RlOwogICAgICAgICBhdHRyaWJ1dGUgTm9kZUZpbHRlckNvbnN0cnVjdG9yIE5vZGVGaWx0ZXI7
CiAgICAgICAgIGF0dHJpYnV0ZSBSYW5nZUNvbnN0cnVjdG9yIFJhbmdlOworICAgICAgICBhdHRy
aWJ1dGUgWFBhdGhFdmFsdWF0b3JDb25zdHJ1Y3RvciBYUGF0aEV2YWx1YXRvcjsKKyAgICAgICAg
YXR0cmlidXRlIFhQYXRoUmVzdWx0Q29uc3RydWN0b3IgWFBhdGhSZXN1bHQ7CiAgICAgfTsKIAog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8114</attachid>
            <date>2006-05-04 14:30:43 -0700</date>
            <delta_ts>2006-05-04 16:54:51 -0700</delta_ts>
            <desc>Misc fixes</desc>
            <filename>xpath-support-2.txt</filename>
            <type>text/plain</type>
            <size>197625</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0IEBAIEtYQ0xvZ0No
YW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRz
ID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9OwogS1hDTG9nQ2hhbm5l
bCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGggPSAgICAgICAgICAg
ICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsT2ZmIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0xv
Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRlcm4gS1hDTG9nQ2hh
bm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRzOwog
ZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENMb2dDaGFubmVsIExv
Z1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBhdGg7CiAKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlwZSBlcSAiTm9kZUxp
c3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0eXBlIGVxICJUZXh0
IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFdmFs
dWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0gZWxzaWYgKCR0eXBl
IGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAkaW1w
bEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUwMSw3ICs1MDUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xhc3NOYW1lID0gIiR7
cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
Y29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFt
ZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigkY2xhc3NOYW1lLCAk
cHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAtIEFkZCBmdW5jdGlv
bnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC04MjQsNyArODI4
LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9y
CiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiRG9j
dW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7CisgICAgICAgICAg
ICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IikgewogICAgIHJldHVybiAi
JHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NzYsNiArODgyLDEyIEBAIHN1YiBUeXBl
Q2FuRmFpbENvbnZlcnNpb24KICAgICAgIHJldHVybiAwOwogICB9IGVsc2lmICgkdHlwZSBlcSAi
RE9NV2luZG93IikgewogICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0
aEV2YWx1YXRvciIpIHsKKyAgICAgIHJldHVybiAwOworICB9IGVsc2lmICgkdHlwZSBlcSAiWFBh
dGhOU1Jlc29sdmVyIikgeworICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJY
UGF0aFJlc3VsdCIpIHsKKyAgICAgIHJldHVybiAwOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9u
J3Qga25vdyB3aGV0aGVyIGEgSlMgdmFsdWUgY2FuIGZhaWwgY29udmVyc2lvbiB0byB0eXBlICR0
eXBlLiIKICAgfQpAQCAtOTM2LDcgKzk0OCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAg
cmV0dXJuICJ0b05vZGVGaWx0ZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01X
aW5kb3ciKSB7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwotICAgIHJl
dHVybiAidG9ET01XaW5kb3coJHZhbHVlKSI7CisgICAgcmV0dXJuICJ0b0RPTVdpbmRvdygkdmFs
dWUpIjsgCisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAg
ICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBl
LmgifSA9IDE7CisgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwogICB9IGVsc2UgewogICAg
IGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9mIHR5cGUgJHR5cGUu
IgogICB9CkBAIC05NTUsNyArOTcxLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAg
ICAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJzaG9y
dCIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IKLSAgICAgICAg
ICAgJHR5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAkdHlwZSBlcSAiZmxvYXQiIG9yIAor
ICAgICAgICAgICAkdHlwZSBlcSAiZG91YmxlIikgewogICAgIHJldHVybiAianNOdW1iZXIoJHZh
bHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgbXkgJGNvbnYg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxTdHJpbmdUbyJ9
OwpAQCAtMTA0Miw2ICsxMDU5LDExIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgfSBlbHNpZiAo
JHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVl
KSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iIG9yCisgICAgICAgICAg
ICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAgICAgICR0eXBlIGVxICJYUGF0
aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CisgICAgcmV0
dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25v
dyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBKUyBWYWx1ZSI7CiAg
IH0KQEAgLTEyNDksNiArMTI3MSw3IEBAIHN1YiBjb25zdHJ1Y3RvckZvcgogICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKICAgICBteSAkcHJvdG9DbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjYW5Db25zdHJ1Y3QgPSBzaGlmdDsKICAg
ICAKIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3MgJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNjEsNyArMTI4NCwxNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
RU9GCisKKyAgICBpZiAoJGNhbkNvbnN0cnVjdCkgeworJGltcGxDb250ZW50IC49IDw8ICJFT0Yi
OworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHRvSlMo
ZXhlYywgbmV3ICRpbnRlcmZhY2VOYW1lKSk7IH0KK0VPRgorICAgIH0KKworJGltcGxDb250ZW50
IC49IDw8ICJFT0YiOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjppbmZvID0geyAiJHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yIiwgMCwgJiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yVGFibGUsIDAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCShyZXZpc2lvbiAxNDE3OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1w
bC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CkBAIC0y
OTgsNiArMjk5LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRFeGNlcHRpb24K
ICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9OwogCitzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiSU5WQUxJRF9FWFBSRVNT
SU9OX0VSUiIsCisgICAgIlRZUEVfRVJSIgorfTsKKwogdm9pZCBzZXRET01FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjKQogewogICBpZiAoZWMgPT0gMCB8fCBleGVj
LT5oYWRFeGNlcHRpb24oKSkKQEAgLTMwNyw2ICszMTMsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAgY29uc3QgY2hhciAq
IGNvbnN0ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgCiAgIGludCBu
YW1lVGFibGVTaXplOwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9mZnNldCAmJiBjb2Rl
IDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFuZ2UiOwpAQCAtMzE4
LDEyICszMjYsMjIgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAog
ICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAgICAgbmFtZVRhYmxlID0gZXZlbnRF
eGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKGV2ZW50RXhjZXB0aW9u
TmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXNbMF0pOworICB9IGVsc2UgaWYgKGNv
ZGUgPj0gWFBhdGhFeGNlcHRpb25PZmZzZXQgJiYgY29kZSA8PSBYUGF0aEV4Y2VwdGlvbk1heCkg
eworICAgICAgLy8gWFBhdGggZXhjZXB0aW9uIGNvZGVzIHN0YXJ0IHdpdGggNTEgYW5kIHdlIGRv
bid0IHdhbnQgNTEgZW1wdHkgZWxlbWVudHMgaW4gdGhlIG5hbWUgYXJyYXkKKyAgICBpbnQgbmFt
ZUluZGV4ID0gY29kZSAtIElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAgdHlwZSA9ICJET00g
WFBhdGgiOworICAgIGNvZGUgLT0gWFBhdGhFeGNlcHRpb25PZmZzZXQ7CisgICAgbmFtZVRhYmxl
ID0geHBhdGhFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHhwYXRo
RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXNbMF0pOworCisgICAg
bmFtZSA9IG5hbWVJbmRleCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVbbmFtZUluZGV4XSA6
IDA7CiAgIH0gZWxzZSB7CiAgICAgbmFtZVRhYmxlID0gZXhjZXB0aW9uTmFtZXM7CiAgICAgbmFt
ZVRhYmxlU2l6ZSA9IHNpemVvZihleGNlcHRpb25OYW1lcykgLyBzaXplb2YoZXhjZXB0aW9uTmFt
ZXNbMF0pOwogICB9CiAKLSAgY29uc3QgY2hhciogbmFtZSA9IGNvZGUgPCBuYW1lVGFibGVTaXpl
ID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKKyAgaWYgKCFuYW1lKQorICAgICAgbmFtZSA9IGNvZGUg
PCBuYW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKIAogICAvLyAxMDAgY2hhcmFj
dGVycyBpcyBhIGJpZyBlbm91Z2ggYnVmZmVyLCBiZWNhdXNlIHRoZXJlIGFyZToKICAgLy8gICAx
MyBjaGFyYWN0ZXJzIGluIHRoZSBtZXNzYWdlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlz
aW9uIDE0MTc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjM5LDYgKzYzOSw5IEBAIHN0YXRpYyBMaXN0ZW5lck1hcCAqbGlzdGVuZXJNYXA7CiAg
ICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01Ob3RhdGlvbiBjbGFzc107CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDcmVh
dGUgYW4gWFBhdGggb2JqZWN0aXZlIEMgd3JhcHBlcgorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxvY10gX2luaXRXaXRoTm9kZTpp
bXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNDE3
OSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3Jl
KS9odG1sIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkveHBhdGgKICMK
IAogLlBIT05ZIDogYWxsCkBAIC03Miw2ICs3MywxMCBAQCBhbGwgOiBcCiAgICAgSlNSYW5nZS5o
IFwKICAgICBKU1RleHQuaCBcCiAgICAgSlNVSUV2ZW50LmggXAorICAgIEpTWFBhdGhFdmFsdWF0
b3IuaCBcCisgICAgSlNYUGF0aEV4cHJlc3Npb24uaCBcCisgICAgSlNYUGF0aE5TUmVzb2x2ZXIu
aCBcCisgICAgSlNYUGF0aFJlc3VsdC5oIFwKICAgICBKU1doZWVsRXZlbnQuaCBcCiAgICAgSlNY
TUxIdHRwUmVxdWVzdC5sdXQuaCBcCiAgICAgSlNYTUxTZXJpYWxpemVyLmx1dC5oIFwKQEAgLTc5
LDYgKzg0LDcgQEAgYWxsIDogXAogICAgIFNWR05hbWVzLmNwcCBcCiAgICAgVXNlckFnZW50U3R5
bGVTaGVldHMuaCBcCiAgICAgWExpbmtOYW1lcy5jcHAgXAorICAgIFhQYXRoR3JhbW1hci5jcHAg
XAogICAgIGtqc19jc3MubHV0LmggXAogICAgIGtqc19kb20ubHV0LmggXAogICAgIGtqc19ldmVu
dHMubHV0LmggXApAQCAtMTMwLDYgKzEzNiwxNSBAQCBDU1NHcmFtbWFyLmNwcCA6IGNzcy9DU1NH
cmFtbWFyLnkKIAljYXQgQ1NTR3JhbW1hci5jcHAuaCBDU1NHcmFtbWFyLmhwcCA+IENTU0dyYW1t
YXIuaAogCXJtIC1mIENTU0dyYW1tYXIuY3BwLmggQ1NTR3JhbW1hci5ocHAKIAorIyBYUGF0aCBn
cmFtbWFyCisKK1hQYXRoR3JhbW1hci5jcHAgOiB4cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55CisJ
Ymlzb24gLWQgLXAgeHBhdGh5eSAkPCAtbyAkQAorCXRvdWNoIFhQYXRoR3JhbW1hci5jcHAuaAor
CXRvdWNoIFhQYXRoR3JhbW1hci5ocHAKKwljYXQgWFBhdGhHcmFtbWFyLmNwcC5oIFhQYXRoR3Jh
bW1hci5ocHAgPiBYUGF0aEdyYW1tYXIuaAorCXJtIC1mIFhQYXRoR3JhbW1hci5jcHAuaCBYUGF0
aEdyYW1tYXIuaHBwCisKICMgdXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAogVVNFUl9BR0VOVF9T
VFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVp
cmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIApAQCAtMTgzLDQgKzE5OCw0IEBAIEpTX0JJ
TkRJTkdTX1NDUklQVFMgPSBcCiAjCiAKIEpTJS5oIDogJS5pZGwgJChKU19CSU5ESU5HU19TQ1JJ
UFRTKQotCXBlcmwgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5k
aW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVk
ZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1vdXRwdXRkaXIgLiAkPAorCXBlcmwgLUkkKFdlYkNvcmUp
L2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVkZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1p
bmNsdWRlIHhwYXRoIC0tb3V0cHV0ZGlyICAuICQ8CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAx
NDE3OSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDYgKzExNCwyMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIE5vZGUgYWRvcHROb2RlKGluIE5v
ZGUgc291cmNlKQogICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAg
IC8vIERPTSBMZXZlbCAzIFhQYXRoIChYUGF0aEV2YWx1YXRvciBpbnRlcmZhY2UpCisgICAgICAg
IFhQYXRoRXhwcmVzc2lvbiBjcmVhdGVFeHByZXNzaW9uKGluIERPTVN0cmluZyBleHByZXNzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aE5TUmVz
b2x2ZXIgcmVzb2x2ZXIpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAg
ICAgICBYUGF0aE5TUmVzb2x2ZXIgY3JlYXRlTlNSZXNvbHZlcihpbiBOb2RlIG5vZGVSZXNvbHZl
cik7CisgICAgICAgIAorICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShpbiBET01TdHJpbmcg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTm9kZSBjb250ZXh0
Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoTlNSZXNvbHZlciBy
ZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQgc2hvcnQg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5SZXN1
bHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAgICAvLyBDb21t
b24gZXh0ZW5zaW9ucwogCiAgICAgICAgIGJvb2xlYW4gZXhlY0NvbW1hbmQoaW4gRE9NU3RyaW5n
IGNvbW1hbmQsIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBACiAjaW5jbHVk
ZSAieG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2lu
Y2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgor
I2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCiAKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAi
WFNMVFByb2Nlc3Nvci5oIgpAQCAtNTA5LDYgKzUxMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9j
dW1lbnQ6OmltcG9ydE5vZGUoTm8KICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFX05PREU6CiAg
ICAgICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBOT1RBVElP
Tl9OT0RFOgorICAgICAgICBjYXNlIFhQQVRIX05BTUVTUEFDRV9OT0RFOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zMTExLDQgKzMxMTYsMzUgQEAgdm9pZCBEb2N1bWVudDo6Zmlu
aXNoZWRQYXJzaW5nKCkKICAgICAgICAgZi0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKK1Bhc3NS
ZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBEb2N1bWVudDo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFs
dWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFs
dWF0b3ItPmNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IERvY3VtZW50OjpjcmVhdGVOU1Jlc29sdmVyKE5v
ZGUgKm5vZGVSZXNvbHZlcikKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAg
IG1feHBhdGhFdmFsdWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJu
IG1feHBhdGhFdmFsdWF0b3ItPmNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKTsKK30KKwor
UGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gRG9jdW1lbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3IgPSBu
ZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3ItPmV2
YWx1YXRlKGV4cHJlc3Npb24sIGNvbnRleHROb2RlLCByZXNvbHZlciwgdHlwZSwgcmVzdWx0LCBl
Yyk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDE0
MTc5KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSw5IEBAIGJvb2wgRE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUgKGNv
bnMKICAgICAgICAgICAgIHx8IGxvd2VyID09ICJ1aWV2ZW50cyIKICAgICAgICAgICAgIHx8IGxv
d2VyID09ICJ2aWV3cyIpCiAgICAgICAgIHJldHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJz
aW9uID09ICIyLjAiOworICAgIGlmIChsb3dlciA9PSAieHBhdGgiKQorICAgICAgICByZXR1cm4g
dmVyc2lvbi5pc0VtcHR5KCkgfHwgdmVyc2lvbiA9PSAiMy4wIjsKKyAgICAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgVGV4dDsKICAgICBjbGFzcyBUb2tlbml6ZXI7CiAgICAgY2xhc3Mg
VHJlZVdhbGtlcjsKKyAgICBjbGFzcyBYUGF0aEV2YWx1YXRvcjsKKyAgICBjbGFzcyBYUGF0aEV4
cHJlc3Npb247CisgICAgY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworICAgIGNsYXNzIFhQYXRoUmVz
dWx0OwogCiAjaWYgX19BUFBMRV9fCiAgICAgc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlOwpA
QCAtNTQxLDYgKzU0NSwxOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygp
OwogCisgICAgLy8gWFBhdGhFdmFsdWF0b3IgbWV0aG9kcworICAgIFBhc3NSZWZQdHI8WFBhdGhF
eHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVz
b2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBQYXNzUmVmUHRyPFhQYXRoTlNSZXNv
bHZlcj4gY3JlYXRlTlNSZXNvbHZlcihOb2RlICpub2RlUmVzb2x2ZXIpOworICAgIFBhc3NSZWZQ
dHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjb250ZXh0Tm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJl
c3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
JiBlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiBwcm90ZWN0ZWQ6
CiAgICAgQ1NTU3R5bGVTZWxlY3RvciAqbV9zdHlsZVNlbGVjdG9yOwogICAgIEZyYW1lVmlldyAq
bV92aWV3OwpAQCAtNzM4LDYgKzc1NCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFw
PEhUTUxGb3JtRWxlbWVudCosIE5hbWVUb0lucHV0TWFwKj4gRm9ybVRvR3JvdXBNYXA7CiAgICAg
Rm9ybVRvR3JvdXBNYXAgbV9zZWxlY3RlZFJhZGlvQnV0dG9uczsKICAgICAKKyAgICBSZWZQdHI8
WFBhdGhFdmFsdWF0b3I+IG1feHBhdGhFdmFsdWF0b3I7CisgICAgCiAjaWYgU1ZHX1NVUFBPUlQK
ICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIG1fc3ZnRXh0ZW5zaW9uczsKICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAko
cmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDggQEAgcHVibGljOgogICAgICAgICBET0NVTUVOVF9OT0RFID0gOSwKICAgICAg
ICAgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTAsCiAgICAgICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05P
REUgPSAxMSwKLSAgICAgICAgTk9UQVRJT05fTk9ERSA9IDEyCisgICAgICAgIE5PVEFUSU9OX05P
REUgPSAxMiwKKyAgICAgICAgWFBBVEhfTkFNRVNQQUNFX05PREUgPSAxMwogICAgIH07CiAKICAg
ICBOb2RlKERvY3VtZW50Kik7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNDQgQEAKIAkJMTRF
ODM3OEUwOUY4NUQ0RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2
ZW50LmggKi87IH07CiAJCTE0RUMyNjdGMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUMy
NjdEMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLzsgfTsKIAkJMTRFQzI2
ODAwOUNBMDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVDMjY3RTA5Q0EwN0UwMDBFMUVFRUMg
LyogRXZlbnRUYXJnZXROb2RlLmNwcCAqLzsgfTsKKwkJMUE3NjI5ODMwQTA3NDBBMDAwOTg5RjVC
IC8qIGV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5NTkwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwICovOyB9
OworCQkxQTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NUEwQTA3NDBBMDAwOTg5
RjVCIC8qIGV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMUE3NjI5OEEwQTA3NDBBMDAwOTg5RjVCIC8q
IGZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJ
MUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjIwQTA3NDBBMDAwOTg5RjVCIC8q
IGZ1bmN0aW9ucy5oICovOyB9OworCQkxQTc2Mjk4QzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vk
c3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNzYyOTYzMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuY3BwICovOyB9
OworCQkxQTc2Mjk4RDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2NDBBMDc0MEEw
MDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggKi87IH07CisJCTFBNzYyOThFMEEwNzQwQTAw
MDk4OUY1QiAvKiBwYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLzsgfTsKKwkJ
MUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY2MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRo
LmggKi87IH07CisJCTFBNzYyOTkwMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjcwQTA3
NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi87IH07CisJCTFBNzYyOTkxMEEwNzQwQTAw
MDk4OUY1QiAvKiBwcmVkaWNhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCAqLzsg
fTsKKwkJMUE3NjI5OTIwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjkwQTA3NDBBMDAwOTg5RjVC
IC8qIHN0ZXAuY3BwICovOyB9OworCQkxQTc2Mjk5MzBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkEw
QTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLzsgfTsKKwkJMUE3NjI5OTUwQTA3NDBBMDAwOTg5
RjVCIC8qIHRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTc2Mjk2QzBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLzsg
fTsKKwkJMUE3NjI5OTYwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkQwQTA3NDBBMDAwOTg5
RjVCIC8qIHRva2VuaXplci5oICovOyB9OworCQkxQTc2Mjk5NzBBMDc0MEEwMDA5ODlGNUIgLyog
dXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2Mjk2RTBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5jcHAgKi87IH07CisJCTFBNzYyOTk4MEEw
NzQwQTAwMDk4OUY1QiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTc2Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oICovOyB9Owor
CQkxQTc2Mjk5OTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzAwQTA3NDBB
MDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OUEwQTA3
NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFy
aWFibGVyZWZlcmVuY2UuaCAqLzsgfTsKKwkJMUE3NjI5OUQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQ
YXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi87
IH07CisJCTFBNzYyOTlFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzYwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi87IH07CisJCTFBNzYyOUEwMEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhw
cmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyOUExMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4
cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNzYyOTc5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLzsgfTsKKwkJ
MUE3NjI5QTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdCMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5jcHAgKi87IH07CisJCTFBNzYyOUE0MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNl
LmggKi87IH07CisJCTFBNzYyOUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5
N0QwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi87IH07CisJCTFBNzYy
OUE2MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdFMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aE5TUmVzb2x2ZXIuaCAqLzsgfTsKKwkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyOTgwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgKi87IH07
CisJCTFBNzYyOUE5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5ODEwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoUmVzdWx0LmggKi87IH07CisJCTFBNzYyOUQ1MEEwNzQyNTEwMDk4OUY1QiAv
KiBYUGF0aEdyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5RDMwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgKi87
IH07CisJCTFBNzYyOUQ2MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOUQ0MEEwNzQyNTEw
MDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCAqLzsgfTsKKwkJMUE3NjJDNzMwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFs
dWF0b3IuY3BwICovOyB9OworCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2
YWx1YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE3NjJDNkMwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCAqLzsgfTsKKwkJ
MUE3NjJDNzUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZEMEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyQzc2MEEwNzRG
MjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBh
dGhFeHByZXNzaW9uLmggKi87IH07CisJCTFBNzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2MkM2RjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuY3Bw
ICovOyB9OworCQkxQTc2MkM3ODBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzcw
MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oICovOyB9OworCQkxQTc2MkM3
OTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIgLyog
SlNYUGF0aFJlc3VsdC5jcHAgKi87IH07CisJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBK
U1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovOyB9Owog
CQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5MDA3
MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkwMDcz
NTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5o
ICovOyB9OwogCQk1NTBBMEJDRDA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkNCMDg1RjYw
NEQwMDczNTNENiAvKiBIVE1MTmFtZXMuY3BwICovOyB9OwpAQCAtMTI1Niw2ICsxMjk0LDQ5IEBA
CiAJCTE0RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RUMyNjdEMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRUYXJnZXROb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0RUMyNjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdl
dE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJn
ZXROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NTkwQTA3NDBB
MDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IGV4cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2Mjk1QTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gZXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmdW5jdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0
YXRlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2Vk
c3RhdGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjQwQTA3
NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gcGFyc2Vkc3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NjYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcHJlZGljYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUE3NjI5NjgwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHJlZGljYXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBNzYyOTY5MEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBzdGVwLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN0ZXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUE3NjI5NkMwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdG9rZW5pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkQwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2Vu
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5pemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1QiAvKiB1
dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkYwQTA3NDBBMDAwOTg5RjVCIC8q
IHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlh
YmxlcmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB2
YXJpYWJsZXJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYy
OTcxMEEwNzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gdmFyaWFibGVyZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci55
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IFhQYXRoR3JhbW1hci55OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3NTBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhFdmFsdWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQ
YXRoRXZhbHVhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzYw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBYUGF0aEV2YWx1YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQTc2Mjk3NzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aEV2YWx1YXRvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFBNzYyOTc4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTc5MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFhQYXRoRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2
Mjk3QTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gWFBhdGhFeHByZXNzaW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aE5hbWVzcGFjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdDMEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aE5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhO
YW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5N0QwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUE3NjI5N0UwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aE5TUmVzb2x2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aE5TUmVzb2x2ZXIu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk4MDBBMDc0MEEwMDA5ODlG
NUIgLyogWFBhdGhSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhQYXRoUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
ODEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBYUGF0aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQTc2Mjk4MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBYUGF0aFJlc3VsdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOUQzMEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoR3JhbW1hci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdy
YW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoR3JhbW1hci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2QjBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aEV2YWx1YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNYUGF0aEV2YWx1YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBNzYyQzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoRXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhw
cmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0
aEV4cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2RTBB
MDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyQzZGMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM3MDBBMDc0RjI2MDA5
ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBNzYyQzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoUmVzdWx0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhS
ZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhSZXN1bHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFB
IC8qIENsaXBib2FyZE1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAv
KiBDbGlwYm9hcmRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDbGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk0NzU4QzQ0MzA4QzVGMjE3MDA5
QkFGMDUgLyogS0NhbnZhc1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMjYxOSw2ICsyNzAwLDcg
QEAKIAkJCQlGNTIzRDJGMzAyREU0NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovLAogCQkJCUE4
QzBGNkRDMDg5NzAxRjEwMEJBNTExNCAvKiBXZWJDb3JlK1NWRyAqLywKIAkJCQlFMUYwNDI0MzA5
ODM5Mzg5MDA2Njk0RUEgLyogeG1sICovLAorCQkJCTFBNzYyOTU3MEEwNzQwQTAwMDk4OUY1QiAv
KiB4cGF0aCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3Vy
Y2VzICovLAogCQkJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8sCiAJ
CQkJMDg2N0Q2OUFGRTg0MDI4RkMwMkFBQzA3IC8qIEZyYW1ld29ya3MgKi8sCkBAIC0yNjYyLDYg
KzI3NDQsNTQgQEAKIAkJCXBhdGggPSBSZXNvdXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQkxQTc2Mjk1NzBBMDc0MEEwMDA5ODlGNUIgLyogeHBhdGggKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBNzYyOTU4MEEwNzQwQTAw
MDk4OUY1QiAvKiBpbXBsICovLAorCQkJCTFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aEV2YWx1YXRvci5jcHAgKi8sCisJCQkJMUE3NjI5NzYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
RXZhbHVhdG9yLmggKi8sCisJCQkJMUE3NjI5NzcwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZh
bHVhdG9yLmlkbCAqLywKKwkJCQkxQTc2Mjk3ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHBy
ZXNzaW9uLmNwcCAqLywKKwkJCQkxQTc2Mjk3OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHBy
ZXNzaW9uLmggKi8sCisJCQkJMUE3NjI5N0EwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVz
c2lvbi5pZGwgKi8sCisJCQkJMUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNw
YWNlLmNwcCAqLywKKwkJCQkxQTc2Mjk3QzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3Bh
Y2UuaCAqLywKKwkJCQkxQTc2Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVy
LmNwcCAqLywKKwkJCQkxQTc2Mjk3RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVy
LmggKi8sCisJCQkJMUE3NjI5N0YwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5p
ZGwgKi8sCisJCQkJMUE3NjI5ODAwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCAq
LywKKwkJCQkxQTc2Mjk4MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCAqLywKKwkJ
CQkxQTc2Mjk4MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovLAorCQkJKTsK
KwkJCXBhdGggPSB4cGF0aDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFB
NzYyOTU4MEEwNzQwQTAwMDk4OUY1QiAvKiBpbXBsICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQTc2Mjk1OTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVz
c2lvbi5jcHAgKi8sCisJCQkJMUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24u
aCAqLywKKwkJCQkxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLywK
KwkJCQkxQTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi8sCisJCQkJMUE3
NjI5NjMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgKi8sCisJCQkJMUE3
NjI5NjQwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovLAorCQkJCTFBNzYy
OTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLywKKwkJCQkxQTc2Mjk2NjBBMDc0MEEw
MDA5ODlGNUIgLyogcGF0aC5oICovLAorCQkJCTFBNzYyOTY3MEEwNzQwQTAwMDk4OUY1QiAvKiBw
cmVkaWNhdGUuY3BwICovLAorCQkJCTFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNh
dGUuaCAqLywKKwkJCQkxQTc2Mjk2OTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5jcHAgKi8sCisJ
CQkJMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLywKKwkJCQkxQTc2Mjk2QzBB
MDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLywKKwkJCQkxQTc2Mjk2RDBBMDc0MEEw
MDA5ODlGNUIgLyogdG9rZW5pemVyLmggKi8sCisJCQkJMUE3NjI5NkUwQTA3NDBBMDAwOTg5RjVC
IC8qIHV0aWwuY3BwICovLAorCQkJCTFBNzYyOTZGMEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmgg
Ki8sCisJCQkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNw
cCAqLywKKwkJCQkxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2Uu
aCAqLywKKwkJCQkxQTc2Mjk3MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLnkgKi8s
CisJCQkpOworCQkJcGF0aCA9IGltcGw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQk1NTk5OEE1NzA1MkI1OThGMDAxN0E2QzEgLyogQWNjZXNzaWJpbGl0eSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNzQ3LDYgKzI4NzcsMTQgQEAK
IAkJCQk2NURGMzFGMDA5RDFDQzYwMDAwQkUzMjUgLyogSlNUZXh0LmggKi8sCiAJCQkJQTg2NjI5
Q0EwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgKi8sCiAJCQkJQTg2NjI5QzkwOURB
MkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovLAorCQkJCTFBNzYyQzZCMEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCAqLywKKwkJCQkxQTc2MkM2QzBBMDc0RjI2MDA5
ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRvci5oICovLAorCQkJCTFBNzYyQzZEMEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi8sCisJCQkJMUE3NjJDNkUwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmggKi8sCisJCQkJMUE3NjJDNkYwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCAqLywKKwkJCQkxQTc2MkM3MDBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLywKKwkJCQkxQTc2MkM3MTBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgKi8sCisJCQkJMUE3NjJDNzIwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCAqLywKIAkJCQk2NURGMzFGMTA5RDFDQzYwMDAwQkUz
MjUgLyogSlNXaGVlbEV2ZW50LmNwcCAqLywKIAkJCQk2NURGMzFGMjA5RDFDQzYwMDAwQkUzMjUg
LyogSlNXaGVlbEV2ZW50LmggKi8sCiAJCQkJNjU2NTgxRDcwOUQxNTA4RDAwMEU2MUQ3IC8qIEpT
WE1MSHR0cFJlcXVlc3QubHV0LmggKi8sCkBAIC0yNzc2LDYgKzI5MTQsOCBAQAogCQkJCTY1NjU4
MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovLAog
CQkJCTY1NjU4MUVBMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmNwcCAqLywKIAkJCQk2
NTY1ODFFQjA5RDE1MDhEMDAwRTYxRDcgLyogWExpbmtOYW1lcy5oICovLAorCQkJCTFBNzYyOUQz
MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovLAorCQkJCTFBNzYyOUQ0MEEw
NzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCAqLywKIAkJCQkxNDIwMTFCNTBBMDAzMTMz
MDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
ICJEZXJpdmVkIFNvdXJjZXMiOwpAQCAtNDg0OCw2ICs0OTg4LDI1IEBACiAJCQkJMTREQzBEMzgw
OUZFRDA3MzAwN0IwMjM1IC8qIEpTTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMEM4MjUw
OUZGMEVGNTAwNkIzNkQ5IC8qIGtqc19kb21ub2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDIw
MTFCNzBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxQTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OEQwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBh
dGguaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVk
aWNhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkzMEEwNzQwQTAwMDk4OUY1QiAvKiBz
dGVwLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5NjBBMDc0MEEwMDA5ODlGNUIgLyogdG9r
ZW5pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5ODBBMDc0MEEwMDA5ODlGNUIgLyog
dXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5RjVCIC8qIHZh
cmlhYmxlcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5RTBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUExMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
NzYyOUE0MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMUE3NjI5QTYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUE3NjI5QTkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlENjBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFt
bWFyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aEV2YWx1YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjJDNzYwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3ODBB
MDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTU1NjUsNiArNTcyNCwyNSBAQAogCQkJCUJDRkU4RTMyMEEwMkExRDMwMDA5RTYxRCAv
KiBXZWJDb3JlVGV4dFJlbmRlcmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREQzBEMzcwOUZF
RDA3MzAwN0IwMjM1IC8qIEpTTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIwMTFCNjBB
MDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyOTgzMEEwNzQwQTAwMDk4OUY1QiAvKiBleHByZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBNzYyOThBMEEwNzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OEMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk4RTBBMDc0MEEwMDA5ODlGNUIgLyog
cGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5MDBBMDc0MEEwMDA5ODlGNUIgLyog
cHJlZGljYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTkyMEEwNzQwQTAwMDk4OUY1
QiAvKiBzdGVwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTk1MEEwNzQwQTAwMDk4OUY1
QiAvKiB0b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTcwQTA3NDBBMDAw
OTg5RjVCIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTkwQTA3NDBBMDAw
OTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYy
OTlEMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxQTc2MjlBMDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFBNzYyOUEzMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlBNTBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUE4MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlENTBBMDc0
MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYy
QzczMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyQzc1MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxQTc2MkM3NzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5T
UmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJDNzkwQTA3NEYyNjAwOTg5RjVC
IC8qIEpTWFBhdGhSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM2QkREMUQwQTAzMUFF
QjAwNERGNEFCIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAJKHJldmlzaW9uIDE0MTc5KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAsNyBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBz
dGFydE1hcmt1cChjb25zCiAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CiAgICAgICAg
IGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6Ok5P
VEFUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuICIiOwpJbmRleDogV2ViQ29yZS94
cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0
aE5hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNw
YWNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIFhQYXRoTmFtZXNw
YWNlLmNwcCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
CisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aE5hbWVzcGFj
ZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFBh
dGhOYW1lc3BhY2U6OlhQYXRoTmFtZXNwYWNlKERvY3VtZW50ICpwdHIsIGNvbnN0IFN0cmluZyYg
cHJlZml4LCBjb25zdCBTdHJpbmcmIHVyaSkKKyAgICA6IE5vZGUoIHB0ciApLAorICAgIG1fb3du
ZXJEb2N1bWVudCggcHRyICksCisgICAgbV9wcmVmaXgoIHByZWZpeCApLAorICAgIG1fdXJpKCB1
cmkgKQoreworfQorCitYUGF0aE5hbWVzcGFjZTo6flhQYXRoTmFtZXNwYWNlKCkKK3sKK30KKwor
RG9jdW1lbnQgKlhQYXRoTmFtZXNwYWNlOjpvd25lckRvY3VtZW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9vd25lckRvY3VtZW50OworfQorCitFbGVtZW50ICpYUGF0aE5hbWVzcGFjZTo6b3du
ZXJFbGVtZW50KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiAwOworfQorCitj
b25zdCBBdG9taWNTdHJpbmcgJlhQYXRoTmFtZXNwYWNlOjpwcmVmaXgoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByZWZpeDsKK30KKworU3RyaW5nIFhQYXRoTmFtZXNwYWNlOjpub2RlTmFtZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJlZml4OworfQorCitjb25zdCBBdG9taWNTdHJpbmcg
JlhQYXRoTmFtZXNwYWNlOjpuYW1lc3BhY2VVUkkoKSBjb25zdAoreworICAgIHJldHVybiBtX3Vy
aTsKK30KKworV2ViQ29yZTo6Tm9kZTo6Tm9kZVR5cGUgWFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7Cit9CisK
K30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIFhQYXRoRXhwcmVzc2lvbkltcGwuY3BwIC0gQ29weXJpZ2h0IDIwMDUgRnJl
cmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiU3RyaW5nSW1w
bC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVk
ZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNpbmNsdWRl
ICJpbXBsL2V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJpbXBsL3V0aWwuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgWFBhdGg7CisgICAgCitQYXNzUmVmUHRyPFhQ
YXRoRXhwcmVzc2lvbj4gWFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwgaW50JiBlYykKK3sK
KyAgICBYUGF0aEV4cHJlc3Npb24gKmV4cHIgPSBuZXcgWFBhdGhFeHByZXNzaW9uOworICAgIAor
ICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucmVzb2x2ZXIgPSByZXNvbHZlcjsK
KyAgICBpZiAoIWV4cHItPm1fc3RhdGVtZW50LnBhcnNlKGV4cHJlc3Npb24uZGVwcmVjYXRlZFN0
cmluZygpLCBlYykpIHsKKyAgICAgICAgZGVsZXRlIGV4cHI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gZXhwcjsKK30KKworUGFzc1JlZlB0cjxYUGF0aFJlc3Vs
dD4gWFBhdGhFeHByZXNzaW9uOjpldmFsdWF0ZShOb2RlICpjb250ZXh0Tm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WFBhdGhSZXN1bHQgKnJlc3VsdF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghaXNWYWxpZENv
bnRleHROb2RlKGNvbnRleHROb2RlKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgTm9kZSAqZXZlbnRUYXJnZXQg
PSBjb250ZXh0Tm9kZS0+b3duZXJEb2N1bWVudCgpID8gCisgICAgICAgIGNvbnRleHROb2RlLT5v
d25lckRvY3VtZW50KCkgOiBjb250ZXh0Tm9kZTsKKyAgICAKKyAgICBYUGF0aFJlc3VsdCogcmVz
dWx0ID0gbmV3IFhQYXRoUmVzdWx0KHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGV2ZW50
VGFyZ2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGVtZW50LmV2YWx1YXRlKGNvbnRleHROb2RlKSk7CisgICAgCisgICAgaWYgKHR5cGUgIT0gWFBh
dGhSZXN1bHQ6OkFOWV9UWVBFKSB7CisgICAgICAgIHJlc3VsdC0+Y29udmVydFRvKHR5cGUsIGVj
KTsKKworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogWFBhdGhOYW1lc3BhY2UuaCAtIENvcHlyaWdodCAyMDA1
IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQQVRI
TmFtZXNwYWNlX0gKKyNkZWZpbmUgWFBBVEhOYW1lc3BhY2VfSAorCisjaW5jbHVkZSAiTm9kZS5o
IgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitj
bGFzcyBEb2N1bWVudDsKK2NsYXNzIFN0cmluZ0ltcGw7CisKK2NsYXNzIFhQYXRoTmFtZXNwYWNl
IDogcHVibGljIFdlYkNvcmU6Ok5vZGUKK3sKK3B1YmxpYzoKKyAgICBYUGF0aE5hbWVzcGFjZShE
b2N1bWVudCAqcHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJlZml4LCBj
b25zdCBTdHJpbmcmIHVyaSk7CisgICAgdmlydHVhbCB+WFBhdGhOYW1lc3BhY2UoKTsKKworICAg
IHZpcnR1YWwgRG9jdW1lbnQgKm93bmVyRG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVs
ZW1lbnQgKm93bmVyRWxlbWVudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcgJnByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcgJm5hbWVzcGFjZVVSSSgpIGNvbnN0
OworCisgICAgdmlydHVhbCBXZWJDb3JlOjpOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIERvY3VtZW50ICptX293bmVyRG9jdW1lbnQ7CisgICAgQXRvbWlj
U3RyaW5nIG1fcHJlZml4OworICAgIEF0b21pY1N0cmluZyBtX3VyaTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFhQQVRITmFtZXNwYWNlX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIFhQYXRoRXZhbHVhdG9ySW1wbC5jcHAgLSBD
b3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2lu
Y2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgor
I2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisK
KyNpbmNsdWRlICJpbXBsL3V0aWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBu
YW1lc3BhY2UgWFBhdGg7CisgICAgCitQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gWFBhdGhF
dmFsdWF0b3I6OmNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9u
Y29kZSkKK3sKKyAgICBSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBleHByID0gWFBhdGhFeHByZXNz
aW9uOjpjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVyLCBleGNlcHRpb25jb2Rl
KTsKKyAgICAKKyAgICByZXR1cm4gZXhwcjsKK30KKworUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2
ZXI+IFhQYXRoRXZhbHVhdG9yOjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcikK
K3sKKyAgICByZXR1cm4gbmV3IFhQYXRoTlNSZXNvbHZlcihub2RlUmVzb2x2ZXIpOworfQorCitQ
YXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBYUGF0aEV2YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
UGF0aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCYgZXhjZXB0aW9uY29kZSkKK3sKKyAgICBpZiAoIWlzVmFsaWRDb250
ZXh0Tm9kZShjb250ZXh0Tm9kZSkpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IE5PVF9TVVBQ
T1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8WFBhdGhF
eHByZXNzaW9uPiBleHByID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciwg
ZXhjZXB0aW9uY29kZSk7CisgICAgaWYoZXhjZXB0aW9uY29kZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlKGNvbnRleHROb2RlLCB0eXBlLCByZXN1
bHQsIGV4Y2VwdGlvbmNvZGUpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhO
U1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBYUGF0aE5TUmVzb2x2ZXJJbXBs
LmNwcCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4K
KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYUGF0aE5T
UmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZlcihOb2RlICpub2RlKQorICAgIDogbV9ub2RlKCBub2Rl
ICkKK3sKK30KKworU3RyaW5nIFhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKGNv
bnN0IFN0cmluZyYgcHJlZml4KQoreworICAgIC8vIEFwcGFyZW50bHkgTm9kZTo6bG9va3VwTmFt
ZXNwYWNlVVJJIGRvZXNuJ3QgZG8gdGhpcy4KKyAgICBpZiAocHJlZml4ID09ICJ4bWwiKSB7Cisg
ICAgICAgIHJldHVybiAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKKyAg
ICB9CisKKyAgICByZXR1cm4gbV9ub2RlID8gbV9ub2RlLT5sb29rdXBOYW1lc3BhY2VVUkkocHJl
Zml4KSA6IFN0cmluZygpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFeHBy
ZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBYUGF0aEV4cHJlc3Npb25JbXBsLmggLSBDb3B5
cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
CisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aWZuZGVmIFhQQVRIRVhQUkVTU0lPTklNUExfSAorI2RlZmluZSBYUEFUSEVYUFJFU1NJT05JTVBM
X0gKKworI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
KyNpbmNsdWRlICJpbXBsL3BhcnNlZHN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKK2NsYXNzIE5vZGU7CitjbGFzcyBTdHJpbmdJ
bXBsOworCitjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7CitjbGFzcyBYUGF0aFJlc3VsdDsKKworY2xh
c3MgWFBhdGhFeHByZXNzaW9uIDogcHVibGljIFNoYXJlZDxYUGF0aEV4cHJlc3Npb24+Cit7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHBy
ZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZh
bHVhdGUoTm9kZSAqY29udGV4dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYUGF0aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgCitwcml2YXRlOgorICAgIFhQ
YXRoOjpQYXJzZWRTdGF0ZW1lbnQgbV9zdGF0ZW1lbnQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBY
UEFUSEVYUFJFU1NJT05JTVBMX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5pZGwJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmlkbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21v
ZHVsZSB4cGF0aCB7CisKKyAgICBpbnRlcmZhY2UgW0dlbmVyYXRlQ29uc3RydWN0b3JdIFhQYXRo
UmVzdWx0IHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQU5ZX1RZUEUgICAgICAgICAg
ICAgICAgICAgICAgID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTlVNQkVSX1RZ
UEUgICAgICAgICAgICAgICAgICAgID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
U1RSSU5HX1RZUEUgICAgICAgICAgICAgICAgICAgID0gMjsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgQk9PTEVBTl9UWVBFICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAgID0gNDsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgICAg
ID0gNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVU5PUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSAgID0gNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUgICAgID0gNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQU5Z
X1VOT1JERVJFRF9OT0RFX1RZUEUgICAgICAgID0gODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgICAgICAgID0gOTsKKworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgIHJlc3VsdFR5cGU7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBkb3VibGUgICAgICAgICAgbnVtYmVyVmFsdWUKKyAgICAgICAgICAgIGdl
dHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICBzdHJpbmdWYWx1ZQorICAgICAgICAgICAgZ2V0
dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
Ym9vbGVhbiAgICAgICAgIGJvb2xlYW5WYWx1ZQorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAo
RE9NRXhjZXB0aW9uKTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSAgICAgICAg
ICAgIHNpbmdsZU5vZGVWYWx1ZQorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiAgICAgICAgIGludmFs
aWRJdGVyYXRvclN0YXRlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyAgIHNuYXBzaG90TGVuZ3RoCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChET01FeGNlcHRp
b24pOworICAgICAgICAgICAgCisgICAgICAgIE5vZGUgaXRlcmF0ZU5leHQoKQorICAgICAgICAg
ICAgcmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAgICBOb2RlIHNuYXBzaG90SXRlbShpbiB1
bnNpZ25lZCBsb25nIGluZGV4KQorICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwor
ICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogWFBhdGhFdmFsdWF0b3JJbXBsLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQQVRIRVZBTFVBVE9S
X0gKKyNkZWZpbmUgWFBBVEhFVkFMVUFUT1JfSAorCisjaW5jbHVkZSAiU2hhcmVkLmgiCisKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworY2xhc3Mg
Tm9kZTsKKworY2xhc3MgWFBhdGhFeHByZXNzaW9uOworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOwor
Y2xhc3MgWFBhdGhSZXN1bHQ7CisKK2NvbnN0IGludCBYUGF0aEV4Y2VwdGlvbk9mZnNldCA9IDQw
MDsKK2NvbnN0IGludCBYUGF0aEV4Y2VwdGlvbk1heCA9IDQ5OTsgICAKKworZW51bSBYUGF0aEV4
Y2VwdGlvbkNvZGUgeyBJTlZBTElEX0VYUFJFU1NJT05fRVJSID0gWFBhdGhFeGNlcHRpb25PZmZz
ZXQgKyA1MSwgVFlQRV9FUlIgfTsKKworY2xhc3MgWFBhdGhFdmFsdWF0b3IgOiBwdWJsaWMgU2hh
cmVkPFhQYXRoRXZhbHVhdG9yPgoreworcHVibGljOgorICAgIFBhc3NSZWZQdHI8WFBhdGhFeHBy
ZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29s
dmVyKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBleGNlcHRpb25jb2RlKTsKKyAgICBQYXNzUmVmUHRyPFhQYXRoTlNSZXNv
bHZlcj4gY3JlYXRlTlNSZXNvbHZlcihOb2RlICpub2RlUmVzb2x2ZXIpOworICAgIFBhc3NSZWZQ
dHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpjb250ZXh0Tm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQgKnJl
c3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmV4Y2VwdGlv
bmNvZGUpOworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhFVkFMVUFUT1JJTVBMX0gKKwpJbmRl
eDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9Y
UGF0aE5TUmVzb2x2ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFhQ
YXRoTlNSZXNvbHZlci5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUEFUSE5TUkVTT0xWRVJJTVBMX0gKKyNkZWZp
bmUgWFBBVEhOU1JFU09MVkVSSU1QTF9ICisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitjbGFzcyBOb2Rl
OworCitjbGFzcyBYUGF0aE5TUmVzb2x2ZXIgOiBwdWJsaWMgU2hhcmVkPFhQYXRoTlNSZXNvbHZl
cj4KK3sKKyAgICBwdWJsaWM6CisgICAgICAgIFhQYXRoTlNSZXNvbHZlcihOb2RlICpub2RlKTsK
KworICAgICAgICBTdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgcHJlZml4
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIE5vZGUgKm1fbm9kZTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFhQQVRITlNSRVNPTFZFUklNUExfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
ZXhwcmVzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Np
b24uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZy
ZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorCisjaW5jbHVkZSA8Y21hdGg+CisKK3VzaW5nIG5hbWVzcGFjZSBz
dGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitWYWx1
ZTo6VmFsdWUoKQoreworfQorCitWYWx1ZTo6VmFsdWUoTm9kZSAqdmFsdWUpCisgICAgOiBtX3R5
cGUoTm9kZXNldCkKK3sKKyAgICBtX25vZGVzZXQuYXBwZW5kKHZhbHVlKTsKK30KKworVmFsdWU6
OlZhbHVlKGNvbnN0IE5vZGVTZXQmIHZhbHVlKQorICAgIDogbV90eXBlKE5vZGVzZXQpCisgICAg
LCBtX25vZGVzZXQodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpWYWx1ZSggYm9vbCB2YWx1ZSApCisg
ICAgOiBtX3R5cGUoIEJvb2xlYW4gKSwKKyAgICBtX2Jvb2woIHZhbHVlICkKK3sKK30KKworVmFs
dWU6OlZhbHVlKCBkb3VibGUgdmFsdWUgKQorICAgIDogbV90eXBlKCBOdW1iZXIgKSwKKyAgICBt
X251bWJlciggdmFsdWUgKQoreworfQorCitWYWx1ZTo6VmFsdWUoIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnZhbHVlICkKKyAgICA6IG1fdHlwZSggU3RyaW5nICksCisgICAgbV9zdHJpbmcoIHZh
bHVlICkKK3sKK30KKworVmFsdWU6OlR5cGUgVmFsdWU6OnR5cGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3R5cGU7Cit9CisKK2Jvb2wgVmFsdWU6OmlzTm9kZXNldCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdHlwZSA9PSBOb2Rlc2V0OworfQorCitib29sIFZhbHVlOjppc0Jvb2xlYW4oKSBj
b25zdAoreworICAgIHJldHVybiBtX3R5cGUgPT0gQm9vbGVhbjsKK30KKworYm9vbCBWYWx1ZTo6
aXNOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGUgPT0gTnVtYmVyOworfQorCiti
b29sIFZhbHVlOjppc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZSA9PSBTdHJp
bmc7Cit9CisKK05vZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKQoreworICAgIGlmIChtX3R5cGUg
IT0gTm9kZXNldCkgeworICAgICAgICBMT0coWFBhdGgsICJDYW5ub3QgY29udmVydCBhbnl0aGlu
ZyB0byBhIG5vZGVzZXQuIik7CisgICAgfQorICAgIHJldHVybiBtX25vZGVzZXQ7Cit9CisKK2Nv
bnN0IE5vZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKSBjb25zdAoreworICAgIGlmIChtX3R5cGUg
IT0gTm9kZXNldCkgeworICAgICAgICBMT0coWFBhdGgsICJDYW5ub3QgY29udmVydCBhbnl0aGlu
ZyB0byBhIG5vZGVzZXQuIik7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX25vZGVzZXQ7ICAg
IAorfSAgICAKKworYm9vbCBWYWx1ZTo6dG9Cb29sZWFuKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KCBtX3R5cGUgKSB7CisgICAgICAgIGNhc2UgTm9kZXNldDoKKyAgICAgICAgICAgIHJldHVybiAh
bV9ub2Rlc2V0LmlzRW1wdHkoKTsKKyAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAg
cmV0dXJuIG1fYm9vbDsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICByZXR1cm4g
bV9udW1iZXIgIT0gMDsKKyAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4g
IW1fc3RyaW5nLmlzRW1wdHkoKTsKKyAgICB9CisgICAgcmV0dXJuIGJvb2woKTsKK30KKworZG91
YmxlIFZhbHVlOjp0b051bWJlcigpIGNvbnN0Cit7CisgICAgc3dpdGNoICggbV90eXBlICkgewor
ICAgICAgICBjYXNlIE5vZGVzZXQ6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUoIHRvU3RyaW5n
KCkgKS50b051bWJlcigpOworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIHJldHVy
biBtX251bWJlcjsKKyAgICAgICAgY2FzZSBTdHJpbmc6IHsKKyAgICAgICAgICAgIGJvb2wgY2Fu
Q29udmVydDsKKyAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IG1fc3RyaW5nLnNpbXBs
aWZ5V2hpdGVTcGFjZSgpOworCisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBzLnRvRG91Ymxl
KCAmY2FuQ29udmVydCApOworICAgICAgICAgICAgaWYgKCBjYW5Db252ZXJ0ICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5BTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXNl
IEJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gbV9ib29sID8gMSA6IDA7CisgICAgfQorICAg
IHJldHVybiBkb3VibGUoKTsKK30KKworRGVwcmVjYXRlZFN0cmluZyBWYWx1ZTo6dG9TdHJpbmco
KSBjb25zdAoreworICAgIHN3aXRjaCAoIG1fdHlwZSApIHsKKyAgICAgICAgY2FzZSBOb2Rlc2V0
OgorICAgICAgICAgICAgaWYgKG1fbm9kZXNldC5pc0VtcHR5KCkpIAorICAgICAgICAgICAgICAg
IHJldHVybiAiIjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Ry
aW5nVmFsdWUobV9ub2Rlc2V0WzBdLmdldCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAg
IGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgICAgICBjYXNl
IE51bWJlcjoKKyAgICAgICAgICAgIGlmICggaXNuYW4oIG1fbnVtYmVyICkgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJOYU4iICk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCBtX251bWJlciA9PSAwICkgeworICAgICAgICAgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nKCAiMCIgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGlzaW5mKCBtX251
bWJlciApICkgeworICAgICAgICAgICAgICAgIGlmICggc2lnbmJpdCggbV9udW1iZXIgKSA9PSAw
ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggIkluZmlu
aXR5IiApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nKCAiLUluZmluaXR5IiApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIoIG1fbnVtYmVyICk7CisgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVy
biBtX2Jvb2wgPyBEZXByZWNhdGVkU3RyaW5nKCAidHJ1ZSIgKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IERlcHJlY2F0ZWRTdHJpbmcoICJmYWxzZSIgKTsKKyAgICB9CisgICAgcmV0dXJu
IERlcHJlY2F0ZWRTdHJpbmcoKTsKK30KKworRXZhbHVhdGlvbkNvbnRleHQgJkV4cHJlc3Npb246
OmV2YWx1YXRpb25Db250ZXh0KCkKK3sKKyAgICBzdGF0aWMgRXZhbHVhdGlvbkNvbnRleHQgZXZh
bHVhdGlvbkNvbnRleHQ7CisgICAgcmV0dXJuIGV2YWx1YXRpb25Db250ZXh0OworfQorCitFeHBy
ZXNzaW9uOjpFeHByZXNzaW9uKCkKKyAgICA6IG1fY29uc3RhbnRWYWx1ZSggMCApCit7Cit9CisK
K0V4cHJlc3Npb246On5FeHByZXNzaW9uKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zdWJF
eHByZXNzaW9ucyk7CisgICAgCisgICAgZGVsZXRlIG1fY29uc3RhbnRWYWx1ZTsKK30KKworVmFs
dWUgRXhwcmVzc2lvbjo6ZXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmICggbV9jb25zdGFudFZh
bHVlICkgeworICAgICAgICByZXR1cm4gKm1fY29uc3RhbnRWYWx1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGRvRXZhbHVhdGUoKTsKK30KKwordm9pZCBFeHByZXNzaW9uOjphZGRTdWJFeHByZXNzaW9u
KEV4cHJlc3Npb24gKmV4cHIpCit7CisgICAgbV9zdWJFeHByZXNzaW9ucy5hcHBlbmQoZXhwcik7
Cit9CisKK3ZvaWQgRXhwcmVzc2lvbjo6b3B0aW1pemUoKQoreworICAgIGJvb2wgYWxsU3ViRXhw
cmVzc2lvbnNDb25zdGFudCA9IHRydWU7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fc3ViRXhwcmVzc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc3ViRXhw
cmVzc2lvbnNbaV0tPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIG1fc3ViRXhwcmVzc2lvbnNb
aV0tPm9wdGltaXplKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsbFN1YkV4cHJlc3Np
b25zQ29uc3RhbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoYWxsU3ViRXhwcmVzc2lvbnND
b25zdGFudCkgeworICAgICAgICBtX2NvbnN0YW50VmFsdWUgPSBuZXcgVmFsdWUoZG9FdmFsdWF0
ZSgpKTsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fc3ViRXhwcmVzc2lvbnMpOworICAgICAg
ICBtX3N1YkV4cHJlc3Npb25zLmNsZWFyKCk7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgRXhw
cmVzc2lvbjo6c3ViRXhwckNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdWJFeHByZXNz
aW9ucy5zaXplKCk7Cit9CisKK0V4cHJlc3Npb24qIEV4cHJlc3Npb246OnN1YkV4cHIodW5zaWdu
ZWQgaSkKK3sKKyAgICBBU1NFUlQoIGkgPCBzdWJFeHByQ291bnQoKSApOworCisgICAgcmV0dXJu
IG1fc3ViRXhwcmVzc2lvbnNbaV07Cit9CisKK2NvbnN0IEV4cHJlc3Npb24gKkV4cHJlc3Npb246
OnN1YkV4cHIodW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaSA8IHN1YkV4cHJDb3Vu
dCgpKTsKKyAgICAKKyAgICByZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKK30KKworYm9vbCBF
eHByZXNzaW9uOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zdWJFeHByZXNzaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fc3Vi
RXhwcmVzc2lvbnNbaV0tPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorfQpJbmRleDogV2ViQ29yZS94cGF0
aC9pbXBsL3ByZWRpY2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3By
ZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvcHJlZGljYXRl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAw
NSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgi
CisKKyNpbmNsdWRlICJOb2RlLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorTnVtYmVyOjpOdW1iZXIoIGRv
dWJsZSB2YWx1ZSApCisgICAgOiBtX3ZhbHVlKCB2YWx1ZSApCit7Cit9CisKK2Jvb2wgTnVtYmVy
Ojppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgTnVt
YmVyOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoIG1fdmFsdWUgKTsK
K30KKworU3RyaW5nRXhwcmVzc2lvbjo6U3RyaW5nRXhwcmVzc2lvbiggY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmdmFsdWUgKQorICAgIDogbV92YWx1ZSggdmFsdWUgKQoreworfQorCitib29sIFN0
cmluZ0V4cHJlc3Npb246OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCitWYWx1ZSBTdHJpbmdFeHByZXNzaW9uOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gVmFsdWUoIG1fdmFsdWUgKTsKK30KKworVmFsdWUgTmVnYXRpdmU6OmRvRXZhbHVhdGUo
KSBjb25zdAoreworICAgIFZhbHVlIHAoc3ViRXhwcigwKS0+ZXZhbHVhdGUoKSk7CisgICAgaWYg
KCFwLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiVW5hcnkgbWludXMgaXMgdW5k
ZWZpbmVkIGZvciBub24tbnVtZXJpYyB0eXBlcy4iICk7CisgICAgICAgIHJldHVybiBWYWx1ZSgp
OworICAgIH0KKyAgICByZXR1cm4gVmFsdWUoLXAudG9OdW1iZXIoKSk7Cit9CisKK051bWVyaWNP
cDo6TnVtZXJpY09wKCBpbnQgX29wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiBy
aHMgKSA6CisgICAgb3BDb2RlKCBfb3BDb2RlICkKK3sKKyAgICBhZGRTdWJFeHByZXNzaW9uKCBs
aHMgKTsKKyAgICBhZGRTdWJFeHByZXNzaW9uKCByaHMgKTsKK30KKworVmFsdWUgTnVtZXJpY09w
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBWYWx1ZSBsaHMoIHN1YkV4cHIoIDAgKS0+ZXZh
bHVhdGUoKSk7CisgICAgVmFsdWUgcmhzKCBzdWJFeHByKCAxICktPmV2YWx1YXRlKCkpOworICAg
IAorICAgIGlmICghbGhzLmlzTnVtYmVyKCkgfHwgIXJocy5pc051bWJlcigpKSB7CisgICAgICAg
IExPRyhYUGF0aCwgIkNhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBub24tbnVtZXJpYyB0eXBl
cy4iKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCk7CisgICAgfQorCisgICAgZG91YmxlIGxlZnRW
YWwgPSBsaHMudG9OdW1iZXIoKSwgcmlnaHRWYWwgPSByaHMudG9OdW1iZXIoKTsKKworICAgIHN3
aXRjaCAob3BDb2RlKSB7CisgICAgICAgIGNhc2UgT1BfQWRkOgorICAgICAgICAgICAgcmV0dXJu
IFZhbHVlKCBsZWZ0VmFsICsgcmlnaHRWYWwgKTsKKyAgICAgICAgY2FzZSBPUF9TdWI6CisgICAg
ICAgICAgICByZXR1cm4gVmFsdWUoIGxlZnRWYWwgLSByaWdodFZhbCApOworICAgICAgICBjYXNl
IE9QX011bDoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZSggbGVmdFZhbCAqIHJpZ2h0VmFsICk7
CisgICAgICAgIGNhc2UgT1BfRGl2OgorICAgICAgICAgICAgaWYgKCByaWdodFZhbCA9PSAwLjAg
fHwgcmlnaHRWYWwgPT0gLTAuMCApCisgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlKCk7IC8v
RGl2aWRlIGJ5IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFZh
bHVlKCBsZWZ0VmFsIC8gcmlnaHRWYWwgKTsKKyAgICAgICAgY2FzZSBPUF9Nb2Q6CisgICAgICAg
ICAgICBpZiAoIHJpZ2h0VmFsID09IDAuMCB8fCByaWdodFZhbCA9PSAtMC4wICkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVmFsdWUoKTsgLy9EaXZpZGUgYnkgMDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWUoIHJlbWFpbmRlciggbGVmdFZhbCwgcmlnaHRW
YWwgKSApOworICAgICAgICBjYXNlIE9QX0dUOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlICgg
bGVmdFZhbCA+IHJpZ2h0VmFsICk7CisgICAgICAgIGNhc2UgT1BfR0U6CisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWUgKCBsZWZ0VmFsID49IHJpZ2h0VmFsICk7CisgICAgICAgIGNhc2UgT1BfTFQ6
CisgICAgICAgICAgICByZXR1cm4gVmFsdWUgKCBsZWZ0VmFsIDwgcmlnaHRWYWwgKTsKKyAgICAg
ICAgY2FzZSBPUF9MRToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZSAoIGxlZnRWYWwgPD0gcmln
aHRWYWwgKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAg
ICAgcmV0dXJuIFZhbHVlKCk7CisgICAgfQorfQorCitEZXByZWNhdGVkU3RyaW5nIE51bWVyaWNP
cDo6b3BOYW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wQ29kZSkgeworICAgICAgICBjYXNl
IE9QX0FkZDoKKyAgICAgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiYWRkaXRpb24i
ICk7CisgICAgICAgIGNhc2UgT1BfU3ViOgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRT
dHJpbmcoICJzdWJ0cmFjdGlvbiIgKTsKKyAgICAgICAgY2FzZSBPUF9NdWw6CisgICAgICAgICAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggIm11bHRpcGxpY2F0aW9uIiApOworICAgICAgICBj
YXNlIE9QX0RpdjoKKyAgICAgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiZGl2aXNp
b24iICk7CisgICAgICAgIGNhc2UgT1BfTW9kOgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmcoICJtb2R1bG8iICk7CisgICAgICAgIGNhc2UgT1BfR1Q6CisgICAgICAgICAgICBy
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggInJlbGF0aW9uR1QiICk7CisgICAgICAgIGNhc2UgT1Bf
R0U6CisgICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyggInJlbGF0aW9uR0UiICk7
CisgICAgICAgIGNhc2UgT1BfTFQ6CisgICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmlu
ZyggInJlbGF0aW9uTFQiICk7CisgICAgICAgIGNhc2UgT1BfTEU6CisgICAgICAgICAgICByZXR1
cm4gRGVwcmVjYXRlZFN0cmluZyggInJlbGF0aW9uTEUiICk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmlu
ZygpOworICAgIH0KK30KKworRXFUZXN0T3A6OkVxVGVzdE9wKCBpbnQgX29wQ29kZSwgRXhwcmVz
c2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMgKSA6CisgICAgb3BDb2RlKF9vcENvZGUpCit7Cisg
ICAgYWRkU3ViRXhwcmVzc2lvbiggbGhzICk7CisgICAgYWRkU3ViRXhwcmVzc2lvbiggcmhzICk7
Cit9CisKK1ZhbHVlIEVxVGVzdE9wOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBWYWx1ZSBs
aHMoIHN1YkV4cHIoIDAgKS0+ZXZhbHVhdGUoKSApOworICAgIFZhbHVlIHJocyggc3ViRXhwcigg
MSApLT5ldmFsdWF0ZSgpICk7CisKKyAgICBib29sIGVxdWFsOworICAgIGlmICggbGhzLmlzQm9v
bGVhbigpIHx8IHJocy5pc0Jvb2xlYW4oKSApIHsKKyAgICAgICAgZXF1YWwgPSAoIGxocy50b0Jv
b2xlYW4oKSA9PSByaHMudG9Cb29sZWFuKCkgKTsKKyAgICB9IGVsc2UgaWYgKCBsaHMuaXNOdW1i
ZXIoKSB8fCByaHMuaXNOdW1iZXIoKSApIHsKKyAgICAgICAgZXF1YWwgPSAoIGxocy50b051bWJl
cigpID09IHJocy50b051bWJlcigpICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXF1YWwgPSAo
IGxocy50b1N0cmluZygpID09IHJocy50b1N0cmluZygpICk7CisgICAgfQorCisgICAgaWYgKCBv
cENvZGUgPT0gT1BfRVEgKQorICAgICAgICByZXR1cm4gVmFsdWUoIGVxdWFsICk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gVmFsdWUoICFlcXVhbCApOworfQorCitEZXByZWNhdGVkU3RyaW5n
IEVxVGVzdE9wOjpvcE5hbWUoKSBjb25zdAoreworICAgIGlmICggb3BDb2RlID09IE9QX0VRICkK
KyAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJyZWxhdGlvbkVRIiApOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJyZWxhdGlvbk5FIiApOworfQor
CitMb2dpY2FsT3A6OkxvZ2ljYWxPcCggaW50IF9vcENvZGUsIEV4cHJlc3Npb24qIGxocywgRXhw
cmVzc2lvbiogcmhzICkgOgorICAgIG9wQ29kZSggX29wQ29kZSApCit7CisgICAgYWRkU3ViRXhw
cmVzc2lvbiggbGhzICk7CisgICAgYWRkU3ViRXhwcmVzc2lvbiggcmhzICk7Cit9CisKK2Jvb2wg
TG9naWNhbE9wOjpzaG9ydENpcmN1aXRPbigpIGNvbnN0Cit7CisgICAgaWYgKG9wQ29kZSA9PSBP
UF9BbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy9mYWxzZSBhbmQgZm9vCisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gdHJ1ZTsgIC8vdHJ1ZSBvciBiYXIKK30KKworYm9vbCBMb2dpY2FsT3A6
OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBzdWJFeHByKCAwICktPmlzQ29uc3Rh
bnQoKSAmJgorICAgICAgICAgICBzdWJFeHByKCAwICktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkg
PT0gc2hvcnRDaXJjdWl0T24oKTsKK30KKworRGVwcmVjYXRlZFN0cmluZyBMb2dpY2FsT3A6Om9w
TmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKCBvcENvZGUgPT0gT1BfQW5kICkKKyAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcoICJjb25qdW5jdGlvbiIgKTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCAiZGlzanVuY3Rpb24iICk7Cit9CisKK1ZhbHVlIExv
Z2ljYWxPcDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgbGhzKCBzdWJFeHByKCAw
ICktPmV2YWx1YXRlKCkgKTsKKworICAgIC8vIFRoaXMgaXMgbm90IG9ubHkgYW4gb3B0aW1pemF0
aW9uLCBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aAorICAgIC8vIGRpY3RhdGVzIHRoYXQgd2Ug
bXVzdCBkbyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24KKyAgICBib29sIGxoc0Jvb2wgPSBsaHMu
dG9Cb29sZWFuKCk7CisgICAgaWYgKCBsaHNCb29sID09IHNob3J0Q2lyY3VpdE9uKCkgKSB7Cisg
ICAgICAgIHJldHVybiBWYWx1ZSggbGhzQm9vbCApOworICAgIH0KKworICAgIHJldHVybiBWYWx1
ZSggc3ViRXhwciggMSApLT5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpICk7Cit9CisKK0RlcHJlY2F0
ZWRTdHJpbmcgVW5pb246Om9wTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRT
dHJpbmcoInVuaW9uIik7Cit9CisKK1ZhbHVlIFVuaW9uOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sK
KyAgICBWYWx1ZSBsaHMgPSBzdWJFeHByKCAwICktPmV2YWx1YXRlKCk7CisgICAgVmFsdWUgcmhz
ID0gc3ViRXhwciggMSApLT5ldmFsdWF0ZSgpOworICAgIGlmICggIWxocy5pc05vZGVzZXQoKSB8
fCAhcmhzLmlzTm9kZXNldCgpICkgeworICAgICAgICBMT0coWFBhdGgsICJVbmlvbiBvcGVyYXRv
ciAnfCcgd29ya3Mgb25seSB3aXRoIG5vZGVzZXRzLiIgKTsKKyAgICAgICAgcmV0dXJuIFZhbHVl
KE5vZGVTZXQoKSk7CisgICAgfQorICAgIAorICAgIE5vZGVTZXQgbGhzTm9kZXMgPSBsaHMudG9O
b2RlU2V0KCk7CisgICAgTm9kZVNldCByaHNOb2RlcyA9IHJocy50b05vZGVTZXQoKTsKKyAgICBO
b2RlU2V0IHJlc3VsdCA9IGxoc05vZGVzOworICAgIAorICAgIEhhc2hTZXQ8Tm9kZSAqPiBub2Rl
czsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmhzTm9kZXMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgTm9kZSAqbm9kZSA9IHJoc05vZGVzW2ldLmdldCgpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFub2Rlcy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIG5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gVmFsdWUocmVzdWx0KTsKK30KKworUHJlZGljYXRlOjpQ
cmVkaWNhdGUoIEV4cHJlc3Npb24gKmV4cHIgKQorICAgIDogbV9leHByKCBleHByICkKK3sKK30K
KworUHJlZGljYXRlOjp+UHJlZGljYXRlKCkKK3sKKyAgICBkZWxldGUgbV9leHByOworfQorCiti
b29sIFByZWRpY2F0ZTo6ZXZhbHVhdGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2V4cHIgIT0g
MCk7CisKKyAgICBWYWx1ZSByZXN1bHQoIG1fZXhwci0+ZXZhbHVhdGUoKSApOworCisgICAgLy8g
Zm9vWzNdIHJlYWxseSBtZWFucyBmb29bcG9zaXRpb24oKT0zXQorICAgIGlmICggcmVzdWx0Lmlz
TnVtYmVyKCkgKSB7CisgICAgICAgIEV4cHJlc3Npb24gKnJlYWxFeHByID0gbmV3IEVxVGVzdE9w
KEVxVGVzdE9wOjpPUF9FUSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTGlicmFy
eTo6c2VsZigpLmdldEZ1bmN0aW9uKCAicG9zaXRpb24iICksCisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgTnVtYmVyKCByZXN1bHQudG9OdW1iZXIoKSApICk7CisgICAgICAgIHJlc3VsdCA9
IHJlYWxFeHByLT5ldmFsdWF0ZSgpOworICAgICAgICBkZWxldGUgcmVhbEV4cHI7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdC50b0Jvb2xlYW4oKTsKK30KKwordm9pZCBQcmVkaWNhdGU6Om9w
dGltaXplKCkKK3sKKyAgICBtX2V4cHItPm9wdGltaXplKCk7Cit9CisKK30KK30KSW5kZXg6IFdl
YkNvcmUveHBhdGgvaW1wbC9wYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBs
L3BhdGguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBwYXRoLmggLSBDb3B5cmlnaHQgMjAwNSBG
cmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFBBVEhf
SAorI2RlZmluZSBQQVRIX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJz
dGVwLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworZXh0ZXJuIGludCB4cGF0
aHl5cGFyc2UoKTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAg
ICAgICAgCitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgorICAg
IEZpbHRlcihFeHByZXNzaW9uKiBleHByLCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHByZWRp
Y2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7CisgICAgdmlydHVhbCB+RmlsdGVyKCk7CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKyAgICBF
eHByZXNzaW9uICptX2V4cHI7CisgICAgVmVjdG9yPFByZWRpY2F0ZSAqPiBtX3ByZWRpY2F0ZXM7
Cit9OworCitjbGFzcyBMb2NhdGlvblBhdGggOiBwdWJsaWMgRXhwcmVzc2lvbgoreworZnJpZW5k
IGludCA6OnhwYXRoeXlwYXJzZSgpOworcHVibGljOgorICAgIExvY2F0aW9uUGF0aCgpOworICAg
IHZpcnR1YWwgfkxvY2F0aW9uUGF0aCgpOworCisgICAgdm9pZCBvcHRpbWl6ZSgpOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgVmVjdG9y
PFN0ZXAgKj4gbV9zdGVwczsKKyAgICBib29sIG1fYWJzb2x1dGU7Cit9OworCitjbGFzcyBQYXRo
IDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKyAgICBQYXRoKCBGaWx0ZXIgKmZpbHRl
ciwgTG9jYXRpb25QYXRoICpwYXRoICk7CisgICAgdmlydHVhbCB+UGF0aCgpOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgRmlsdGVyICpt
X2ZpbHRlcjsKKyAgICBMb2NhdGlvblBhdGggKm1fcGF0aDsKK307CisKK30KK30KKworI2VuZGlm
IC8vIFBBVEhfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmlj
aCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAicGFyc2Vkc3RhdGVtZW50LmgiCisjaW5jbHVkZSAicGF0aC5oIgorCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworZXh0ZXJuIEV4cHJlc3Npb24gKnBhcnNl
U3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBpbnQmIGVjKTsKKworUGFyc2VkU3Rh
dGVtZW50OjpQYXJzZWRTdGF0ZW1lbnQoKQorICAgIDogbV9leHByKCAwICkKK3sKK30KKworUGFy
c2VkU3RhdGVtZW50Ojp+UGFyc2VkU3RhdGVtZW50KCkKK3sKKyAgICBkZWxldGUgbV9leHByOwor
fQorCitib29sIFBhcnNlZFN0YXRlbWVudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQs
IGludCYgZWMpCit7CisgICAgZGVsZXRlIG1fZXhwcjsKKyAgICAKKyAgICBtX2V4cHIgPSBwYXJz
ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGVjKTsKKyAgICAKKyAgICByZXR1cm4gKG1fZXhwciAhPSAw
KTsKK30KKwordm9pZCBQYXJzZWRTdGF0ZW1lbnQ6Om9wdGltaXplKCkKK3sKKyAgICBpZiAoIW1f
ZXhwcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9leHByLT5vcHRpbWl6ZSgpOworfQorCitW
YWx1ZSBQYXJzZWRTdGF0ZW1lbnQ6OmV2YWx1YXRlKE5vZGUgKmNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gY29udGV4dDsKKyAgICBy
ZXR1cm4gbV9leHByLT5ldmFsdWF0ZSgpOworfQorCit9Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRo
L2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgv
aW1wbC92YXJpYWJsZXJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRo
L2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAidmFyaWFibGVyZWZl
cmVuY2UuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitWYXJpYWJsZVJlZmVyZW5jZTo6VmFyaWFi
bGVSZWZlcmVuY2UoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogbV9uYW1lKG5hbWUpCit7Cit9
CisKK2Jvb2wgVmFyaWFibGVSZWZlcmVuY2U6OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworVmFsdWUgVmFyaWFibGVSZWZlcmVuY2U6OmRvRXZhbHVhdGUoKSBj
b25zdAoreworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KiBiaW5kaW5ncyA9ICZldmFsdWF0
aW9uQ29udGV4dCgpLnZhcmlhYmxlQmluZGluZ3M7CisgICAgaWYgKCFiaW5kaW5ncy0+Y29udGFp
bnMobV9uYW1lKSkgeworICAgICAgICAvLyBGSVhNRSBXaGF0IHRvIGRvIGlmIGFuIHVua25vd24g
dmFyaWFibGUgaXMgcmVmZXJlbmNlZD8KKyAgICAgICAgcmV0dXJuIFZhbHVlKCAiIiApOworICAg
IH0KKyAgICByZXR1cm4gVmFsdWUoYmluZGluZ3MtPmdldChtX25hbWUpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7Cit9CisKK30KK30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZXhwcmVzc2lvbi5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMjIgQEAKKy8qCisgKiBleHByZXNzaW9uLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVy
aWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIEVYUFJFU1NJ
T05fSAorI2RlZmluZSBFWFBSRVNTSU9OX0gKKworI2luY2x1ZGUgInV0aWwuaCIKKworI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8a3htbGNvcmUvVmVjdG9yLmg+CisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7CitjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7
CisKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorc3RydWN0IEV2YWx1YXRpb25Db250ZXh0
Cit7CisgICAgRXZhbHVhdGlvbkNvbnRleHQoKSA6IG5vZGUoIDAgKSwgc2l6ZSggMCApLCBwb3Np
dGlvbiggMCApLCByZXNvbHZlciggMCApIHsgfQorCisgICAgV2ViQ29yZTo6Tm9kZSAqbm9kZTsK
KyAgICB1bnNpZ25lZCBsb25nIHNpemU7CisgICAgdW5zaWduZWQgbG9uZyBwb3NpdGlvbjsKKyAg
ICBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgV2ViQ29yZTo6U3RyaW5nPiB2YXJpYWJsZUJpbmRp
bmdzOworCisgICAgLyogVGhlIGZ1bmN0aW9uIGxpYnJhcnkgaXMgZ2xvYmFsbHkgYWNjZXNzaWJs
ZSB0aHJvdWdoCisgICAgICogRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkKKyAgICAgKi8KKyAgICBX
ZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyOworfTsKKworY2xhc3MgVmFsdWUKK3sK
K3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBOb2Rlc2V0LCBCb29sZWFuLCBOdW1i
ZXIsIFN0cmluZworICAgIH07CisKKyAgICBWYWx1ZSgpOworICAgIGV4cGxpY2l0IFZhbHVlKFdl
YkNvcmU6Ok5vZGUgKnZhbHVlKTsKKyAgICBleHBsaWNpdCBWYWx1ZShjb25zdCBOb2RlU2V0JiB2
YWx1ZSk7CisgICAgZXhwbGljaXQgVmFsdWUoYm9vbCB2YWx1ZSk7CisgICAgZXhwbGljaXQgVmFs
dWUoZG91YmxlIHZhbHVlKTsKKyAgICBleHBsaWNpdCBWYWx1ZShjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZ2YWx1ZSk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBib29sIGlzTm9kZXNl
dCgpIGNvbnN0OworICAgIGJvb2wgaXNCb29sZWFuKCkgY29uc3Q7CisgICAgYm9vbCBpc051bWJl
cigpIGNvbnN0OworICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKworICAgIE5vZGVTZXQmIHRv
Tm9kZVNldCgpOworICAgIGNvbnN0IE5vZGVTZXQmIHRvTm9kZVNldCgpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CisgICAgZG91YmxlIHRvTnVtYmVyKCkgY29uc3Q7
CisgICAgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorICAg
IFR5cGUgbV90eXBlOworICAgIE5vZGVTZXQgbV9ub2Rlc2V0OworICAgIGJvb2wgbV9ib29sOwor
ICAgIGRvdWJsZSBtX251bWJlcjsKKyAgICBEZXByZWNhdGVkU3RyaW5nIG1fc3RyaW5nOworfTsK
KworY2xhc3MgRXhwcmVzc2lvbgoreworcHVibGljOgorICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29u
dGV4dCAmZXZhbHVhdGlvbkNvbnRleHQoKTsKKworICAgIEV4cHJlc3Npb24oKTsKKyAgICB2aXJ0
dWFsIH5FeHByZXNzaW9uKCk7CisgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0Owor
CisgICAgdm9pZCBhZGRTdWJFeHByZXNzaW9uKEV4cHJlc3Npb24gKmV4cHIpOworICAgIHZvaWQg
b3B0aW1pemUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcm90
ZWN0ZWQ6CisgICAgdW5zaWduZWQgaW50IHN1YkV4cHJDb3VudCgpIGNvbnN0OworICAgIEV4cHJl
c3Npb24gKnN1YkV4cHIodW5zaWduZWQgaSk7CisgICAgY29uc3QgRXhwcmVzc2lvbiAqc3ViRXhw
cih1bnNpZ25lZCBpKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZh
bHVhdGUoKSBjb25zdCA9IDA7CisKKyAgICBWZWN0b3I8RXhwcmVzc2lvbiAqPiBtX3N1YkV4cHJl
c3Npb25zOworICAgIFZhbHVlICptX2NvbnN0YW50VmFsdWU7Cit9OworCit9Cit9CisKKyNlbmRp
ZiAvLyBFWFBSRVNTSU9OX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNTcgQEAKKy8qCisgKiBwcmVkaWNhdGUuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2gg
UmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgUFJFRElDQVRFX0gK
KyNkZWZpbmUgUFJFRElDQVRFX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitjbGFzcyBOdW1iZXIg
OiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgorICAgIE51bWJlcihkb3VibGUgdmFsdWUp
OworCisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisK
K2NsYXNzIFN0cmluZ0V4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgor
ICAgIFN0cmluZ0V4cHJlc3Npb24oY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdmFsdWUpOworCisg
ICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1
ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKyAgICBEZXByZWNhdGVkU3RyaW5nIG1fdmFsdWU7Cit9
OworCitjbGFzcyBOZWdhdGl2ZSA6IHB1YmxpYyBFeHByZXNzaW9uCit7Citwcml2YXRlOgorICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgQmluYXJ5RXhw
ckJhc2UgOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRGVw
cmVjYXRlZFN0cmluZyBvcE5hbWUoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBOdW1lcmljT3Ag
OiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKK3sKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAg
T1BfQWRkID0gMSwKKyAgICAgICAgT1BfU3ViLAorICAgICAgICBPUF9NdWwsCisgICAgICAgIE9Q
X0RpdiwKKyAgICAgICAgT1BfTW9kLAorICAgICAgICBPUF9HVCwKKyAgICAgICAgT1BfTFQsCisg
ICAgICAgIE9QX0dFLAorICAgICAgICBPUF9MRQorICAgIH07CisKKyAgICBOdW1lcmljT3AoaW50
IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMgKTsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgaW50IG9wQ29kZTsKK307CisKK2NsYXNz
IEVxVGVzdE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7CitwdWJsaWM6CisgICAgZW51bSB7
CisgICAgICAgIE9QX0VRID0gMSwKKyAgICAgICAgT1BfTkUKKyAgICB9OworCisgICAgRXFUZXN0
T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBvcE5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICBpbnQgb3BDb2RlOworfTsKKwor
Y2xhc3MgTG9naWNhbE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE9QX0FuZCA9IDEsCisgICAgICAgIE9QX09yCisgICAgfTsKKworICAg
IExvZ2ljYWxPcCggaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMg
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBzaG9ydENpcmN1aXRPbigpIGNvbnN0OworICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0
cmluZyBvcE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25z
dDsKKyAgICBpbnQgb3BDb2RlOworfTsKKworY2xhc3MgVW5pb24gOiBwdWJsaWMgQmluYXJ5RXhw
ckJhc2UKK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIG9wTmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xh
c3MgUHJlZGljYXRlCit7CitwdWJsaWM6CisgICAgUHJlZGljYXRlKCBFeHByZXNzaW9uICpleHBy
ICk7CisgICAgflByZWRpY2F0ZSgpOworCisgICAgYm9vbCBldmFsdWF0ZSgpIGNvbnN0OworCisg
ICAgdm9pZCBvcHRpbWl6ZSgpOworCitwcml2YXRlOgorICAgIFByZWRpY2F0ZSggY29uc3QgUHJl
ZGljYXRlICZyaHMgKTsKKyAgICBQcmVkaWNhdGUgJm9wZXJhdG9yPSggY29uc3QgUHJlZGljYXRl
ICZyaHMgKTsKKworICAgIEV4cHJlc3Npb24gKm1fZXhwcjsKK307CisKK30KK30KKyNlbmRpZiAv
LyBQUkVESUNBVEVfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgxNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJl
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5hbWVkQXR0
ck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisKKyNp
bmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7
CisgICAgICAgIAorI2RlZmluZSBERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihDbGFzcykgXAorc3Rh
dGljIEZ1bmN0aW9uICpjcmVhdGUjI0NsYXNzKCkgeyByZXR1cm4gbmV3IENsYXNzOyB9CisKK2Ns
YXNzIEludGVydmFsCit7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IElu
ZiA9LTE7CisKKyAgICAgICAgSW50ZXJ2YWwoKTsKKyAgICAgICAgSW50ZXJ2YWwoIGludCB2YWx1
ZSApOworICAgICAgICBJbnRlcnZhbCggaW50IG1pbiwgaW50IG1heCApOworCisgICAgICAgIGJv
b2wgY29udGFpbnMoIGludCB2YWx1ZSApIGNvbnN0OworCisgICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgYXNTdHJpbmcoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGludCBtX21pbjsK
KyAgICAgICAgaW50IG1fbWF4OworfTsKKworY2xhc3MgRnVuTGFzdCA6IHB1YmxpYyBGdW5jdGlv
bgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25z
dDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OworfTsKKworY2xhc3MgRnVuUG9zaXRpb24gOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1bkNvdW50IDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Mb2Nh
bE5hbWUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bk5hbWVzcGFjZVVSSSA6
IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlz
Q29uc3RhbnQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTmFtZSA6IHB1YmxpYyBGdW5jdGlv
bgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25z
dDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OworfTsKKworY2xhc3MgRnVuU3RyaW5nIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitj
bGFzcyBGdW5Db25jYXQgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAg
ICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blN0YXJ0
c1dpdGggOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkNvbnRhaW5zIDogcHVi
bGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdWJzdHJpbmdCZWZvcmUgOiBwdWJsaWMg
RnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVh
dGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blN1YnN0cmluZ0FmdGVyIDogcHVibGljIEZ1bmN0
aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkg
Y29uc3Q7Cit9OworCitjbGFzcyBGdW5TdWJzdHJpbmcgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307
CisKK2NsYXNzIEZ1blN0cmluZ0xlbmd0aCA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZh
dGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xh
c3MgRnVuTm9ybWFsaXplU3BhY2UgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgor
ICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1
blRyYW5zbGF0ZSA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQm9vbGVhbiA6
IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTm90IDogcHVibGljIEZ1bmN0aW9u
Cit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7Cit9OworCitjbGFzcyBGdW5UcnVlIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFz
cyBGdW5GYWxzZSA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTGFuZyA6IHB1
YmxpYyBGdW5jdGlvbgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29u
c3RhbnQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTnVtYmVyIDogcHVibGljIEZ1bmN0aW9u
Cit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7Cit9OworCitjbGFzcyBGdW5TdW0gOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRl
OgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNz
IEZ1bkZsb29yIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmly
dHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5DZWlsaW5nIDog
cHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBk
b0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Sb3VuZCA6IHB1YmxpYyBGdW5jdGlv
bgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OworfTsKKworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkxhc3QgKQorREVGSU5FX0ZV
TkNUSU9OX0NSRUFUT1IoIEZ1blBvc2l0aW9uICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBG
dW5Db3VudCApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuTG9jYWxOYW1lICkKK0RFRklO
RV9GVU5DVElPTl9DUkVBVE9SKCBGdW5OYW1lc3BhY2VVUkkgKQorREVGSU5FX0ZVTkNUSU9OX0NS
RUFUT1IoIEZ1bk5hbWUgKQorCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuU3RyaW5nICkK
K0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5Db25jYXQgKQorREVGSU5FX0ZVTkNUSU9OX0NS
RUFUT1IoIEZ1blN0YXJ0c1dpdGggKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bkNvbnRh
aW5zICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5TdWJzdHJpbmdCZWZvcmUgKQorREVG
SU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blN1YnN0cmluZ0FmdGVyICkKK0RFRklORV9GVU5DVElP
Tl9DUkVBVE9SKCBGdW5TdWJzdHJpbmcgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blN0
cmluZ0xlbmd0aCApCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuTm9ybWFsaXplU3BhY2Ug
KQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blRyYW5zbGF0ZSApCisKK0RFRklORV9GVU5D
VElPTl9DUkVBVE9SKCBGdW5Cb29sZWFuICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5O
b3QgKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1blRydWUgKQorREVGSU5FX0ZVTkNUSU9O
X0NSRUFUT1IoIEZ1bkZhbHNlICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5MYW5nICkK
KworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoIEZ1bk51bWJlciApCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUiggRnVuU3VtICkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKCBGdW5GbG9vciApCitE
RUZJTkVfRlVOQ1RJT05fQ1JFQVRPUiggRnVuQ2VpbGluZyApCitERUZJTkVfRlVOQ1RJT05fQ1JF
QVRPUiggRnVuUm91bmQgKQorCisjdW5kZWYgREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IKKworSW50
ZXJ2YWw6OkludGVydmFsKCkKKyAgICA6IG1fbWluKCBJbmYgKSwKKyAgICBtX21heCggSW5mICkK
K3sKK30KKworSW50ZXJ2YWw6OkludGVydmFsKCBpbnQgdmFsdWUgKQorICAgIDogbV9taW4oIHZh
bHVlICksCisgICAgbV9tYXgoIHZhbHVlICkKK3sKK30KKworSW50ZXJ2YWw6OkludGVydmFsKCBp
bnQgbWluLCBpbnQgbWF4ICkKKyAgICA6IG1fbWluKCBtaW4gKSwKKyAgICBtX21heCggbWF4ICkK
K3sKK30KKworYm9vbCBJbnRlcnZhbDo6Y29udGFpbnMoIGludCB2YWx1ZSApIGNvbnN0Cit7Cisg
ICAgaWYgKCBtX21pbiA9PSBJbmYgJiYgbV9tYXggPT0gSW5mICkgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIG1fbWluID09IEluZiApIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlIDw9IG1fbWF4OworICAgIH0KKworICAgIGlmICggbV9tYXggPT0gSW5mICkgeworICAg
ICAgICByZXR1cm4gdmFsdWUgPj0gbV9taW47CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlID49
IG1fbWluICYmIHZhbHVlIDw9IG1fbWF4OworfQorCitEZXByZWNhdGVkU3RyaW5nIEludGVydmFs
Ojphc1N0cmluZygpIGNvbnN0Cit7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gIlsiOworCisg
ICAgaWYgKCBtX21pbiA9PSBJbmYgKSB7CisgICAgICAgIHMgKz0gIi1JbmZpbml0eSI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcyArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoIG1fbWluICk7
CisgICAgfQorCisgICAgcyArPSAiLi4iOworCisgICAgaWYgKCBtX21heCA9PSBJbmYgKSB7Cisg
ICAgICAgIHMgKz0gIkluZmluaXR5IjsKKyAgICB9IGVsc2UgeworICAgICAgICBzICs9IERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlciggbV9tYXggKTsKKyAgICB9CisKKyAgICBzICs9ICJdIjsKKwor
ICAgIHJldHVybiBzOworfQorCit2b2lkIEZ1bmN0aW9uOjpzZXRBcmd1bWVudHMoY29uc3QgVmVj
dG9yPEV4cHJlc3Npb24qPiAmYXJncykKK3sKKyAgICBWZWN0b3I8RXhwcmVzc2lvbio+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOworCisgICAgZm9yIChWZWN0b3I8RXhwcmVzc2lv
bio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyBpdCsrKQor
ICAgICAgICBhZGRTdWJFeHByZXNzaW9uKCppdCk7Cit9CisKK3ZvaWQgRnVuY3Rpb246OnNldE5h
bWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fbmFtZSA9IG5hbWU7Cit9CisKK0V4cHJl
c3Npb24gKkZ1bmN0aW9uOjphcmcoaW50IGkpCit7CisgICAgcmV0dXJuIHN1YkV4cHIoaSk7Cit9
CisKK2NvbnN0IEV4cHJlc3Npb24gKkZ1bmN0aW9uOjphcmcoaW50IGkpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN1YkV4cHIoaSk7Cit9CisKK3Vuc2lnbmVkIGludCBGdW5jdGlvbjo6YXJnQ291bnQo
KSBjb25zdAoreworICAgIHJldHVybiBzdWJFeHByQ291bnQoKTsKK30KKworU3RyaW5nIEZ1bmN0
aW9uOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uYW1lOworfQorCitWYWx1ZSBGdW5M
YXN0Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoZG91YmxlKEV4cHJl
c3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkuc2l6ZSkpOworfQorCitib29sIEZ1bkxhc3Q6Omlz
Q29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVuUG9z
aXRpb246OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1ZShkb3VibGUoRXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbikpOworfQorCitib29sIEZ1blBv
c2l0aW9uOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgRnVuTG9jYWxOYW1lOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1ZhbHVlIEZ1bkxvY2FsTmFtZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgTm9k
ZSAqbm9kZSA9IDA7CisgICAgaWYgKCBhcmdDb3VudCgpID4gMCApIHsKKyAgICAgICAgVmFsdWUg
YSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAgICAgICAgaWYgKCBhLmlzTm9kZXNldCgpICkgewor
ICAgICAgICAgICAgbm9kZSA9IGEudG9Ob2RlU2V0KClbMF0uZ2V0KCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgp
Lm5vZGU7CisKKyAgICByZXR1cm4gVmFsdWUobm9kZS0+bG9jYWxOYW1lKCkuZGVwcmVjYXRlZFN0
cmluZygpKTsKK30KKworYm9vbCBGdW5OYW1lc3BhY2VVUkk6OmlzQ29uc3RhbnQoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVuTmFtZXNwYWNlVVJJOjpkb0V2YWx1
YXRlKCkgY29uc3QKK3sKKyAgICBOb2RlICpub2RlID0gMDsKKyAgICBpZiAoIGFyZ0NvdW50KCkg
PiAwICkgeworICAgICAgICBWYWx1ZSBhID0gYXJnKDApLT5ldmFsdWF0ZSgpOworICAgICAgICBp
ZiAoIGEuaXNOb2Rlc2V0KCkgKSB7CisgICAgICAgICAgICBub2RlID0gYS50b05vZGVTZXQoKVsw
XS5nZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggIW5vZGUgKSB7CisgICAgICAg
IG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIFZh
bHVlKCBub2RlLT5uYW1lc3BhY2VVUkkoKS5kZXByZWNhdGVkU3RyaW5nKCkgKTsKK30KKworYm9v
bCBGdW5OYW1lOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K1ZhbHVlIEZ1bk5hbWU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIE5vZGUgKm5vZGUgPSAw
OworICAgIGlmICggYXJnQ291bnQoKSA+IDAgKSB7CisgICAgICAgIFZhbHVlIGEgPSBhcmcoMCkt
PmV2YWx1YXRlKCk7CisgICAgICAgIGlmICggYS5pc05vZGVzZXQoKSApIHsKKyAgICAgICAgICAg
IG5vZGUgPSBhLnRvTm9kZVNldCgpWzBdLmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKCAhbm9kZSApIHsKKyAgICAgICAgbm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsK
KyAgICB9CisKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBub2RlLT5uYW1lc3BhY2VVUkkoKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgcyArPSAiOiI7CisgICAgcyArPSBub2RlLT5sb2NhbE5h
bWUoKS5kZXByZWNhdGVkU3RyaW5nKCk7CisKKyAgICByZXR1cm4gVmFsdWUoIHMgKTsKK30KKwor
VmFsdWUgRnVuQ291bnQ6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVlIGEgPSBhcmco
MCktPmV2YWx1YXRlKCk7CisgICAgCisgICAgaWYgKCFhLmlzTm9kZXNldCgpKSB7CisgICAgICAg
IExPRyhYUGF0aCwgImNvdW50KCkgZXhwZWN0cyA8bm9kZXNldD5cbiIpOworCisgICAgICAgIHJl
dHVybiBWYWx1ZSggMC4wICk7CisgICAgfQorICAgIAorICAgIHJldHVybiBWYWx1ZShkb3VibGUo
YS50b05vZGVTZXQoKS5zaXplKCkpKTsKK30KKworYm9vbCBGdW5Db3VudDo6aXNDb25zdGFudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWYWx1ZSBGdW5TdHJpbmc6OmRvRXZh
bHVhdGUoKSBjb25zdAoreworICAgIGlmICggYXJnQ291bnQoKSA9PSAwICkgeworICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIHMgPSBWYWx1ZSggRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQo
KS5ub2RlICkudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCBzICk7CisgICAgfQor
ICAgIHJldHVybiBWYWx1ZSggYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCkgKTsKK30KKwor
VmFsdWUgRnVuQ29uY2F0Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3Ry
aW5nIHN0cjsKKyAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyAr
K2kgKSB7CisgICAgICAgIHN0ci5hcHBlbmQoIGFyZyggaSApLT5ldmFsdWF0ZSgpLnRvU3RyaW5n
KCkgKTsKKyAgICB9CisgICAgcmV0dXJuIFZhbHVlKCBEZXByZWNhdGVkU3RyaW5nKCBzdHIgKSAp
OworfQorCitWYWx1ZSBGdW5TdGFydHNXaXRoOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBE
ZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAg
RGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygxKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisg
ICAgaWYgKCBzMi5pc0VtcHR5KCkgKSB7CisgICAgICAgIHJldHVybiBWYWx1ZSggdHJ1ZSApOwor
ICAgIH0KKworICAgIHJldHVybiBWYWx1ZSggczEuc3RhcnRzV2l0aCggczIgKSApOworfQorCitW
YWx1ZSBGdW5Db250YWluczo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgRGVwcmVjYXRlZFN0
cmluZyBzMSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAgIERlcHJlY2F0ZWRT
dHJpbmcgczIgPSBhcmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIGlmICggczIu
aXNFbXB0eSgpICkgeworICAgICAgICByZXR1cm4gVmFsdWUoIHRydWUgKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gVmFsdWUoIHMxLmNvbnRhaW5zKCBzMiApICE9IDApOworfQorCitWYWx1ZSBGdW5T
dWJzdHJpbmdCZWZvcmU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIERlcHJlY2F0ZWRTdHJp
bmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3Ry
aW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisKKyAgICBpZiAoIHMyLmlz
RW1wdHkoKSApIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCAiIiApOworICAgIH0KKyAgICBpbnQg
aSA9IHMxLmZpbmQoIHMyICk7CisKKyAgICBpZiAoIGkgPT0gLTEgKSB7CisgICAgICAgIHJldHVy
biBWYWx1ZSggIiIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gVmFsdWUoIERlcHJlY2F0ZWRTdHJp
bmcoIHMxLmxlZnQoIGkgKSApICk7Cit9CisKK1ZhbHVlIEZ1blN1YnN0cmluZ0FmdGVyOjpkb0V2
YWx1YXRlKCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDApLT5ldmFs
dWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygxKS0+ZXZh
bHVhdGUoKS50b1N0cmluZygpOworCisgICAgaWYgKCBzMi5pc0VtcHR5KCkgKSB7CisgICAgICAg
IHJldHVybiBWYWx1ZSggczIgKTsKKyAgICB9CisKKyAgICBpbnQgaSA9IHMxLmZpbmQoIHMyICk7
CisgICAgaWYgKCBpID09IC0xICkgeworICAgICAgICByZXR1cm4gVmFsdWUoICIiICk7CisgICAg
fQorCisgICAgcmV0dXJuIFZhbHVlKCBEZXByZWNhdGVkU3RyaW5nKCBzMS5taWQoIGkgKyAxICkg
KSApOworfQorCitWYWx1ZSBGdW5TdWJzdHJpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IERlcHJlY2F0ZWRTdHJpbmcgcyA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAg
IGxvbmcgcG9zID0gbG9uZyhyb3VuZChhcmcoMSktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpOwor
ICAgIGJvb2wgaGF2ZUxlbmd0aCA9IGFyZ0NvdW50KCkgPT0gMzsKKyAgICBsb25nIGxlbiA9IC0x
OworICAgIGlmIChoYXZlTGVuZ3RoKQorICAgICAgICBsZW4gPSBsb25nKHJvdW5kKGFyZyggMiAp
LT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkpKTsKKworICAgIGlmIChwb3MgPiBsb25nKHMubGVuZ3Ro
KCkpKSAKKyAgICAgICAgcmV0dXJuIFZhbHVlKCAiIiApOworCisgICAgaWYgKGhhdmVMZW5ndGgg
JiYgcG9zIDwgMSkgeworICAgICAgICBsZW4gLT0gMSAtIHBvczsKKyAgICAgICAgcG9zID0gMTsK
KyAgICAgICAgaWYgKCBsZW4gPCAxICkgeworICAgICAgICAgICAgcmV0dXJuIFZhbHVlKCAiIiAp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRTdHJpbmco
cy5taWQocG9zIC0gMSwgbGVuKSkpOworfQorCitWYWx1ZSBGdW5TdHJpbmdMZW5ndGg6OmRvRXZh
bHVhdGUoKSBjb25zdAoreworICAgIGlmICggYXJnQ291bnQoKSA9PSAwICkgeworICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIHMgPSBWYWx1ZSggRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQo
KS5ub2RlICkudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCBkb3VibGUoIHMubGVu
Z3RoKCkgKSApOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZSggZG91YmxlKCBhcmcoMCktPmV2
YWx1YXRlKCkudG9TdHJpbmcoKS5sZW5ndGgoKSApICk7Cit9CisKK1ZhbHVlIEZ1bk5vcm1hbGl6
ZVNwYWNlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIGFyZ0NvdW50KCkgPT0gMCAp
IHsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gVmFsdWUoIEV4cHJlc3Npb246OmV2YWx1
YXRpb25Db250ZXh0KCkubm9kZSApLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBWYWx1ZShE
ZXByZWNhdGVkU3RyaW5nKHMuc2ltcGxpZnlXaGl0ZVNwYWNlKCkpKTsKKyAgICB9CisKKyAgICBE
ZXByZWNhdGVkU3RyaW5nIHMgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBz
ID0gcy5zaW1wbGlmeVdoaXRlU3BhY2UoKTsKKyAgICByZXR1cm4gVmFsdWUoRGVwcmVjYXRlZFN0
cmluZyhzKSk7Cit9CisKK1ZhbHVlIEZ1blRyYW5zbGF0ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygp
OworICAgIERlcHJlY2F0ZWRTdHJpbmcgczIgPSBhcmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmco
KTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMzID0gYXJnKCAyICktPmV2YWx1YXRlKCkudG9TdHJp
bmcoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1N0cmluZzsKKworICAgIGZvciAodW5zaWdu
ZWQgaTEgPSAwOyBpMSA8IHMxLmxlbmd0aCgpOyArK2kxKSB7CisgICAgICAgIFFDaGFyIGNoID0g
czFbaTFdOworICAgICAgICBpbnQgaTIgPSBzMi5maW5kKGNoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpMiA9PSAtMSkgCisgICAgICAgICAgICBuZXdTdHJpbmcgKz0gY2g7CisgICAgICAgIGVs
c2UgaWYgKCh1bnNpZ25lZClpMiA8IHMzLmxlbmd0aCgpKQorICAgICAgICAgICAgbmV3U3RyaW5n
ICs9IHMzWyBpMiBdOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZSggRGVwcmVjYXRlZFN0cmlu
ZyggbmV3U3RyaW5nICkgKTsKK30KKworVmFsdWUgRnVuQm9vbGVhbjo6ZG9FdmFsdWF0ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKCBhcmcoMCktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkg
KTsKK30KKworVmFsdWUgRnVuTm90Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
VmFsdWUoICFhcmcoMCktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkgKTsKK30KKworVmFsdWUgRnVu
VHJ1ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKCB0cnVlICk7Cit9
CisKK2Jvb2wgRnVuVHJ1ZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1ZhbHVlIEZ1bkxhbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIERlcHJlY2F0
ZWRTdHJpbmcgbGFuZyA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisgICAgUmVm
UHRyPE5vZGU+IGxhbmdOb2RlID0gMDsKKyAgICBOb2RlICpub2RlID0gZXZhbHVhdGlvbkNvbnRl
eHQoKS5ub2RlOworCisgICAgU3RyaW5nIHhtcyggInhtcyIgKTsKKyAgICBTdHJpbmcgeG1zbnNV
UkkgPSBub2RlLT5sb29rdXBOYW1lc3BhY2VVUkkoeG1zKTsKKworICAgIHdoaWxlICggbm9kZSAp
IHsKKyAgICAgICAgTmFtZWRBdHRyTWFwICphdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAg
ICAgICAgU3RyaW5nIGwoICJsYW5nIiApOworICAgICAgICBsYW5nTm9kZSA9IGF0dHJzLT5nZXRO
YW1lZEl0ZW1OUyh4bXNuc1VSSSwgbCk7CisgICAgICAgIGlmICggbGFuZ05vZGUgKSB7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgIH0KKworICAgIGlmICggIWxhbmdOb2RlICkgeworICAgICAgICByZXR1cm4gVmFs
dWUoIGZhbHNlICk7CisgICAgfQorCisgICAgRGVwcmVjYXRlZFN0cmluZyBsYW5nTm9kZVZhbHVl
ID0gbGFuZ05vZGUtPm5vZGVWYWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKworICAgIC8vIGV4
dHJhY3QgJ2VuJyBvdXQgb2YgJ2VuLXVzJworICAgIGxhbmdOb2RlVmFsdWUgPSBsYW5nTm9kZVZh
bHVlLmxlZnQobGFuZ05vZGVWYWx1ZS5maW5kKCctJykpOworCisgICAgcmV0dXJuIFZhbHVlKGxh
bmdOb2RlVmFsdWUubG93ZXIoKSA9PSBsYW5nLmxvd2VyKCkpOworfQorCitib29sIEZ1bkxhbmc6
OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVu
RmFsc2U6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1ZSggZmFsc2UgKTsK
K30KKworYm9vbCBGdW5GYWxzZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1ZhbHVlIEZ1bk51bWJlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFZhbHVlKCBhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSApOworfQorCitWYWx1ZSBG
dW5TdW06OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1
YXRlKCk7CisgICAgaWYgKCAhYS5pc05vZGVzZXQoKSApIHsKKyAgICAgICAgTE9HKFhQYXRoLCAi
c3VtKCkgZXhwZWN0cyA8bm9kZXNldD5cbiIpOworICAgICAgICByZXR1cm4gVmFsdWUoIDAuMCAp
OworICAgIH0KKworICAgIGRvdWJsZSBzdW0gPSAwLjA7CisgICAgY29uc3QgTm9kZVNldCBub2Rl
cyA9IGEudG9Ob2RlU2V0KCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5v
ZGVzLnNpemUoKTsgaSsrKQorICAgICAgICBzdW0gKz0gVmFsdWUoc3RyaW5nVmFsdWUobm9kZXNb
aV0uZ2V0KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSkudG9OdW1iZXIoKTsKKyAgICAKKyAgICByZXR1
cm4gVmFsdWUoIHN1bSApOworfQorCitWYWx1ZSBGdW5GbG9vcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0
Cit7CisgICAgY29uc3QgZG91YmxlIG51bSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigp
OworCisgICAgaWYgKCBpc25hbiggbnVtICkgfHwgaXNpbmYoIG51bSApICkgeworICAgICAgICBy
ZXR1cm4gVmFsdWUoIG51bSApOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZSggZmxvb3IoIG51
bSApICk7Cit9CisKK1ZhbHVlIEZ1bkNlaWxpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IGNvbnN0IGRvdWJsZSBudW0gPSBhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKTsKKworICAg
IGlmIChpc25hbihudW0pIHx8IGlzaW5mKG51bSkpIAorICAgICAgICByZXR1cm4gVmFsdWUobnVt
KTsKKworICAgIHJldHVybiBWYWx1ZShjZWlsKG51bSkpOworfQorCitWYWx1ZSBGdW5Sb3VuZDo6
ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKGRvdWJsZShyb3VuZChhcmco
MCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpKTsKK30KKworc3RydWN0IEZ1bmN0aW9uTGlicmFy
eTo6RnVuY3Rpb25SZWMKK3sKKyAgICB0eXBlZGVmIEZ1bmN0aW9uICooKkZhY3RvcnlGbiApKCk7
CisKKyAgICBGYWN0b3J5Rm4gZmFjdG9yeUZuOworICAgIEludGVydmFsIGFyZ3M7Cit9OworCitz
dHJ1Y3QgRnVuY3Rpb25NYXBwaW5nCit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBGdW5j
dGlvbkxpYnJhcnk6OkZ1bmN0aW9uUmVjIGZ1bmN0aW9uOworfTsKKworRnVuY3Rpb25MaWJyYXJ5
ICZGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKQoreworICAgIHN0YXRpYyBGdW5jdGlvbkxpYnJhcnkg
aW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitGdW5jdGlvbkxpYnJhcnk6OkZ1
bmN0aW9uTGlicmFyeSgpCit7CisgICAgc3RhdGljIEZ1bmN0aW9uTWFwcGluZyBmdW5jdGlvbnNb
XSA9IHsKKyAgICB7ICJsYXN0IiwgeyAmY3JlYXRlRnVuTGFzdCwgMCB9IH0sCisgICAgeyAibGFz
dCIsIHsgJmNyZWF0ZUZ1bkxhc3QsIDAgfSB9LAorICAgIHsgInBvc2l0aW9uIiwgeyAmY3JlYXRl
RnVuUG9zaXRpb24sIDAgfSB9LAorICAgIHsgImNvdW50IiwgeyAmY3JlYXRlRnVuQ291bnQsIDEg
fSB9LAorICAgIHsgInN1bSIsIHsgJmNyZWF0ZUZ1blN1bSwgMSB9IH0sCisgICAgeyAibG9jYWwt
bmFtZSIsIHsgJmNyZWF0ZUZ1bkxvY2FsTmFtZSwgSW50ZXJ2YWwoIDAsIDEgKSB9IH0sCisgICAg
eyAibmFtZXNwYWNlLXVyaSIsIHsgJmNyZWF0ZUZ1bk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoIDAs
IDEgKSB9IH0sCisgICAgeyAibmFtZSIsIHsgJmNyZWF0ZUZ1bk5hbWUsIEludGVydmFsKCAwLCAx
ICkgfSB9LAorICAgIHsgInN0cmluZyIsIHsgJmNyZWF0ZUZ1blN0cmluZywgSW50ZXJ2YWwoIDAs
IDEgKSB9IH0sCisgICAgeyAiY29uY2F0IiwgeyAmY3JlYXRlRnVuQ29uY2F0LCBJbnRlcnZhbCgg
MiwgSW50ZXJ2YWw6OkluZiApIH0gfSwKKyAgICB7ICJzdGFydHMtd2l0aCIsIHsgJmNyZWF0ZUZ1
blN0YXJ0c1dpdGgsIDIgfSB9LAorICAgIHsgImNvbnRhaW5zIiwgeyAmY3JlYXRlRnVuQ29udGFp
bnMsIDIgfSB9LAorICAgIHsgInN1YnN0cmluZy1iZWZvcmUiLCB7ICZjcmVhdGVGdW5TdWJzdHJp
bmdCZWZvcmUsIDIgfSB9LAorICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgJmNyZWF0ZUZ1blN1
YnN0cmluZ0FmdGVyLCAyIH0gfSwKKyAgICB7ICJzdWJzdHJpbmciLCB7ICZjcmVhdGVGdW5TdWJz
dHJpbmcsIEludGVydmFsKCAyLCAzICkgfSB9LAorICAgIHsgInN0cmluZy1sZW5ndGgiLCB7ICZj
cmVhdGVGdW5TdHJpbmdMZW5ndGgsIDEgfSB9LAorICAgIHsgIm5vcm1hbGl6ZS1zcGFjZSIsIHsg
JmNyZWF0ZUZ1bk5vcm1hbGl6ZVNwYWNlLCAxIH0gfSwKKyAgICB7ICJ0cmFuc2xhdGUiLCB7ICZj
cmVhdGVGdW5UcmFuc2xhdGUsIDMgfSB9LAorICAgICAgICAKKyAgICB7ICJib29sZWFuIiwgeyAm
Y3JlYXRlRnVuQm9vbGVhbiwgMSB9IH0sCisgICAgeyAibm90IiwgeyAmY3JlYXRlRnVuTm90LCAx
IH0gfSwKKyAgICB7ICJ0cnVlIiwgeyAmY3JlYXRlRnVuVHJ1ZSwgMCB9IH0sCisgICAgeyAiZmFs
c2UiLCB7ICZjcmVhdGVGdW5GYWxzZSwgMCB9IH0sCisgICAgeyAibGFuZyIsIHsgJmNyZWF0ZUZ1
bkxhbmcsIDEgfSB9LAorICAgICAgICAKKyAgICB7ICJudW1iZXIiLCB7ICZjcmVhdGVGdW5OdW1i
ZXIsIDEgfSB9LAorICAgIHsgImZsb29yIiwgeyAmY3JlYXRlRnVuRmxvb3IsIDEgfSB9LAorICAg
IHsgImNlaWxpbmciLCB7ICZjcmVhdGVGdW5DZWlsaW5nLCAxIH0gfSwKKyAgICB7ICJyb3VuZCIs
IHsgJmNyZWF0ZUZ1blJvdW5kLCAxIH0gfQorICAgIH07CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCBudW1GdW5jdGlvbnMgPSBzaXplb2YoIGZ1bmN0aW9ucyApIC8gc2l6ZW9mKCBmdW5j
dGlvbnNbIDAgXSApOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
RnVuY3Rpb25zOyArK2kgKSB7CisgICAgICAgIG1fZnVuY3Rpb25EaWN0LnNldChmdW5jdGlvbnNb
aV0ubmFtZSwgZnVuY3Rpb25zW2ldLmZ1bmN0aW9uKTsKKyAgICB9Cit9CisKK0Z1bmN0aW9uICpG
dW5jdGlvbkxpYnJhcnk6OmdldEZ1bmN0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IFZlY3Rv
cjxFeHByZXNzaW9uKj4gJmFyZ3MpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Z1bmN0aW9uRGljdC5j
b250YWlucyhuYW1lKSkgeworICAgICAgICBMT0coWFBhdGgsICJGdW5jdGlvbiAnJXMnIG5vdCBz
dXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi5cbiIsIG5hbWUpOworICAgICAgICAKKyAg
ICAgICAgLy8gUmV0dXJuIGEgZHVtbXkgZnVuY3Rpb24gaW5zdGVhZCBvZiAwLgorICAgICAgICBG
dW5jdGlvbiAqZnVuY1RydWUgPSBtX2Z1bmN0aW9uRGljdC5nZXQoInRydWUiKS5mYWN0b3J5Rm4o
KTsKKyAgICAgICAgZnVuY1RydWUtPnNldE5hbWUoInRydWUiKTsKKyAgICAgICAgcmV0dXJuIGZ1
bmNUcnVlOworICAgIH0KKworICAgIEZ1bmN0aW9uUmVjIGZ1bmN0aW9uUmVjID0gbV9mdW5jdGlv
bkRpY3QuZ2V0KG5hbWUpOworICAgIGlmICghZnVuY3Rpb25SZWMuYXJncy5jb250YWlucyhhcmdz
LnNpemUoKSkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiRnVuY3Rpb24gJyVzJyByZXF1aXJlcyAl
ZCBhcmd1bWVudHMsIGJ1dCAlZCBnaXZlbi5cbiIsIG5hbWUsIGZ1bmN0aW9uUmVjLmFyZ3MuYXNT
dHJpbmcoKS5hc2NpaSgpLCBhcmdzLnNpemUoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIEZ1bmN0aW9uICpmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLmZhY3RvcnlGbigpOworICAg
IGZ1bmN0aW9uLT5zZXRBcmd1bWVudHMoYXJncyk7CisgICAgZnVuY3Rpb24tPnNldE5hbWUoIG5h
bWUgKTsKKyAgICAKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK30KK30KSW5kZXg6IFdlYkNv
cmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hw
YXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRo
L2ltcGwvcGFyc2Vkc3RhdGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBwYXJzZWRzdGF0ZW1lbnQuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJh
YWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgUEFSU0VEU1RBVEVNRU5UX0gKKyNk
ZWZpbmUgUEFSU0VEU1RBVEVNRU5UX0gKKworI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7CisgICAg
CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2NsYXNzIEV4cHJlc3Npb247CitjbGFzcyBW
YWx1ZTsKKworY2xhc3MgUGFyc2VkU3RhdGVtZW50Cit7CitwdWJsaWM6CisgICAgUGFyc2VkU3Rh
dGVtZW50KCk7CisgICAgflBhcnNlZFN0YXRlbWVudCgpOworCisgICAgYm9vbCBwYXJzZShjb25z
dCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgdm9pZCBvcHRp
bWl6ZSgpOworCisgICAgVmFsdWUgZXZhbHVhdGUoTm9kZSAqY29udGV4dCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgRXhwcmVzc2lvbiAqbV9leHByOworfTsKKworfQorfQorI2VuZGlmIC8vIFBB
UlNFRFNUQVRFTUVOVF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVy
ZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5j
ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJlbmNl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiB2YXJpYWJsZXJlZmVyZW5j
ZS5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgVkFSSUFCTEVSRUZFUkVOQ0VfSAorI2RlZmlu
ZSBWQVJJQUJMRVJFRkVSRU5DRV9ICisKKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitjbGFzcyBWYXJpYWJsZVJl
ZmVyZW5jZSA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgVmFyaWFibGVSZWZl
cmVuY2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7CisKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorfQorCisjZW5kaWYgLy8gVkFSSUFC
TEVSRUZFUkVOQ0VfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdG9rZW5pemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvdG9rZW5pemVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUwNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IE1ha3NpbSBPcmxvdmljaCA8bWFr
c2ltQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgInRva2VuaXplci5oIgorCisjaW5jbHVkZSAiWFBhdGhHcmFtbWFyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisKK3N0cnVjdCBUb2tlbgoreworICAgIGlu
dCAgICAgdHlwZTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHZhbHVlOworICAgIGludCAgICAgaW50
VmFsdWU7IC8vMCBpZiBub3Qgc2V0CisgICAgCisgICAgVG9rZW4oaW50IF90eXBlKTogdHlwZShf
dHlwZSksIGludFZhbHVlKDApIHt9CisgICAgVG9rZW4oRGVwcmVjYXRlZFN0cmluZyBfdmFsdWUp
OiB0eXBlKEVSUk9SKzEpLCB2YWx1ZShfdmFsdWUpLGludFZhbHVlKDApIHt9CisgICAgVG9rZW4o
aW50IF90eXBlLCBEZXByZWNhdGVkU3RyaW5nIF92YWx1ZSk6IHR5cGUoX3R5cGUpLCB2YWx1ZShf
dmFsdWUpIHt9CisgICAgVG9rZW4oaW50IF90eXBlLCBpbnQgICAgIF92YWx1ZSk6IHR5cGUoX3R5
cGUpLCBpbnRWYWx1ZShfdmFsdWUpIHt9Cit9OworCitjbGFzcyBUb2tlbml6ZXIKK3sKK3ByaXZh
dGU6CisgICAgdW5zaWduZWQgbV9uZXh0UG9zOworICAgIFN0cmluZyBtX2RhdGE7CisgICAgaW50
IG1fbGFzdFRva2VuVHlwZTsKKyAgICAKKyAgICBzdGF0aWMgSGFzaE1hcDxXZWJDb3JlOjpTdHJp
bmcsIFN0ZXA6OkF4aXNUeXBlPiogc19heGlzTmFtZXNEaWN0OworICAgIHN0YXRpYyBIYXNoU2V0
PFdlYkNvcmU6OlN0cmluZz4qIHNfbm9kZVR5cGVOYW1lc0RpY3Q7CisgICAgCisgICAgZW51bSBY
TUxDYXQgeworICAgICAgICBOYW1lU3RhcnQsCisgICAgICAgIE5hbWVDb250LAorICAgICAgICBO
b3RQYXJ0T2ZOYW1lCisgICAgfTsKKyAgICAKKyAgICBYTUxDYXQgY2hhckNhdChRQ2hhciBhQ2hh
cik7CisgICAgCisgICAgYm9vbCBpc0F4aXNOYW1lKERlcHJlY2F0ZWRTdHJpbmcgbmFtZSwgU3Rl
cDo6QXhpc1R5cGUgJnR5cGUpOworICAgIGJvb2wgaXNOb2RlVHlwZU5hbWUoRGVwcmVjYXRlZFN0
cmluZyBuYW1lKTsKKyAgICBib29sIGlzT3BlcmF0b3JDb250ZXh0KCk7CisgICAgCisgICAgdm9p
ZCAgc2tpcFdTKCk7CisgICAgVG9rZW4gbWFrZVRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50
IGFkdmFuY2UgPSAxKTsKKyAgICBUb2tlbiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKGludCBjb2Rl
LCBpbnQgdmFsLCBpbnQgYWR2YW5jZSA9IDEpOworICAgIGNoYXIgIHBlZWtBaGVhZEhlbHBlcigp
OworICAgIGNoYXIgIHBlZWtDdXJIZWxwZXIoKTsKKyAgICAKKyAgICBUb2tlbiBsZXhTdHJpbmco
KTsKKyAgICBUb2tlbiBsZXhOdW1iZXIoKTsKKyAgICBUb2tlbiBsZXhOQ05hbWUoKTsKKyAgICBU
b2tlbiBsZXhRTmFtZSgpOworICAgIAorICAgIFRva2VuIG5leHRUb2tlbkludGVybmFsKCk7Cisg
ICAgVG9rZW5pemVyKCk7CisgICAgVG9rZW5pemVyKGNvbnN0IFRva2VuaXplciAmcmhzKTsgICAg
ICAgICAgICAgICAgICAvLyBkaXNhYmxlZAorICAgIFRva2VuaXplciAmb3BlcmF0b3I9KGNvbnN0
IFRva2VuaXplciAmcmhzKTsgICAgICAgLy8gZGlzYWJsZWQKKyAgICB+VG9rZW5pemVyKCk7Citw
dWJsaWM6CisgICAgc3RhdGljIFRva2VuaXplciAmc2VsZigpOworICAgIAorICAgIHZvaWQgcmVz
ZXQoY29uc3QgU3RyaW5nJik7CisgICAgVG9rZW4gbmV4dFRva2VuKCk7Cit9OworCitzdHJ1Y3Qg
QXhpc05hbWVNYXBwaW5nCit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBTdGVwOjpBeGlz
VHlwZSB0eXBlOworfTsKKworc3RhdGljIEF4aXNOYW1lTWFwcGluZyBheGlzTmFtZXNbXSA9IHsK
KyAgICB7ICJhbmNlc3RvciIsIFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAorICAgIHsgImFuY2VzdG9y
LW9yLXNlbGYiLCBTdGVwOjpBbmNlc3Rvck9yU2VsZkF4aXMgfSwKKyAgICB7ICJhdHRyaWJ1dGUi
LCBTdGVwOjpBdHRyaWJ1dGVBeGlzIH0sCisgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGlsZEF4aXMg
fSwKKyAgICB7ICJkZXNjZW5kYW50IiwgU3RlcDo6RGVzY2VuZGFudEF4aXMgfSwKKyAgICB7ICJk
ZXNjZW5kYW50LW9yLXNlbGYiLCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcyB9LAorICAgIHsg
ImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKKyAgICB7ICJmb2xsb3dpbmctc2li
bGluZyIsIFN0ZXA6OkZvbGxvd2luZ1NpYmxpbmdBeGlzIH0sCisgICAgeyAibmFtZXNwYWNlIiwg
U3RlcDo6TmFtZXNwYWNlQXhpcyB9LAorICAgIHsgInBhcmVudCIsIFN0ZXA6OlBhcmVudEF4aXMg
fSwKKyAgICB7ICJwcmVjZWRpbmciLCBTdGVwOjpQcmVjZWRpbmdBeGlzIH0sCisgICAgeyAicHJl
Y2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJsaW5nQXhpcyB9LAorICAgIHsgInNl
bGYiLCBTdGVwOjpTZWxmQXhpcyB9Cit9Oworc3RhdGljIHVuc2lnbmVkIGludCBheGlzTmFtZXND
b3VudCA9IHNpemVvZihheGlzTmFtZXMpIC8gc2l6ZW9mKGF4aXNOYW1lc1swXSk7CitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3Qgbm9kZVR5cGVOYW1lc1tdID0geworICAgICJjb21tZW50IiwKKyAg
ICAidGV4dCIsCisgICAgInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iLAorICAgICJub2RlIiwKKyAg
ICAwCit9OworCitIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+KiBUb2tlbml6ZXI6OnNf
YXhpc05hbWVzRGljdCA9IDA7CitIYXNoU2V0PFN0cmluZz4qIFRva2VuaXplcjo6c19ub2RlVHlw
ZU5hbWVzRGljdCA9IDA7CisKK1Rva2VuaXplciAmVG9rZW5pemVyOjpzZWxmKCkKK3sKKyAgICBz
dGF0aWMgVG9rZW5pemVyIGluc3RhbmNlOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworVG9r
ZW5pemVyOjpYTUxDYXQgVG9rZW5pemVyOjpjaGFyQ2F0KFFDaGFyIGFDaGFyKQoreworICAgIC8v
IyMjIG1pZ2h0IG5lZWQgdG8gYWRkIHNvbWUgc3BlY2lhbCBjYXNlcyBmcm9tIHRoZSBYTUwgc3Bl
Yy4KKworICAgIGlmIChhQ2hhci51bmljb2RlKCkgPT0gJ18nKQorICAgICAgICByZXR1cm4gTmFt
ZVN0YXJ0OworCisgICAgaWYgKGFDaGFyLnVuaWNvZGUoKSA9PSAnLicgfHwgYUNoYXIudW5pY29k
ZSgpID09ICctJykKKyAgICAgICAgcmV0dXJuIE5hbWVDb250OworICAgIHN3aXRjaCAodV9jaGFy
VHlwZShhQ2hhci51bmljb2RlKCkpKSB7CisgICAgICAgIGNhc2UgVV9MT1dFUkNBU0VfTEVUVEVS
OiAvL0xsCisgICAgICAgIGNhc2UgVV9VUFBFUkNBU0VfTEVUVEVSOiAvL0x1CisgICAgICAgIGNh
c2UgVV9PVEhFUl9MRVRURVI6ICAgICAvL0xvCisgICAgICAgIGNhc2UgVV9USVRMRUNBU0VfTEVU
VEVSOiAvL0x0CisgICAgICAgIGNhc2UgVV9MRVRURVJfTlVNQkVSOiAgICAvL05sCisgICAgICAg
ICAgICByZXR1cm4gTmFtZVN0YXJ0OworICAgICAgICBjYXNlIFVfQ09NQklOSU5HX1NQQUNJTkdf
TUFSSzogLy9NYworICAgICAgICBjYXNlIFVfRU5DTE9TSU5HX01BUks6ICAgICAgICAgLy9NZQor
ICAgICAgICBjYXNlIFVfTk9OX1NQQUNJTkdfTUFSSzogICAgICAgLy9NbgorICAgICAgICBjYXNl
IFVfTU9ESUZJRVJfTEVUVEVSOiAgICAgICAgLy9MbQorICAgICAgICBjYXNlIFVfREVDSU1BTF9E
SUdJVF9OVU1CRVI6ICAgLy9OZAorICAgICAgICAgICAgcmV0dXJuIE5hbWVDb250OworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5vdFBhcnRPZk5hbWU7CisgICAgfQorfQor
Citib29sIFRva2VuaXplcjo6aXNBeGlzTmFtZShEZXByZWNhdGVkU3RyaW5nIG5hbWUsIFN0ZXA6
OkF4aXNUeXBlJiB0eXBlKQoreworICAgIGlmICghc19heGlzTmFtZXNEaWN0KSB7CisgICAgICAg
IHNfYXhpc05hbWVzRGljdCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+Owor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwID0gMDsgcCA8IGF4aXNOYW1lc0NvdW50OyArK3Ap
CisgICAgICAgICAgICBzX2F4aXNOYW1lc0RpY3QtPnNldChheGlzTmFtZXNbcF0ubmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXNOYW1lc1twXS50eXBlKTsKKyAgICB9
CisKKyAgICBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+OjppdGVyYXRvciBpdCA9IHNf
YXhpc05hbWVzRGljdC0+ZmluZChuYW1lKTsKKyAgICAKKyAgICBpZiAoaXQgIT0gc19heGlzTmFt
ZXNEaWN0LT5lbmQoKSkgeworICAgICAgICB0eXBlID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgVG9rZW5pemVyOjppc05vZGVUeXBlTmFtZShEZXByZWNhdGVkU3RyaW5nIG5hbWUpCit7Cisg
ICAgaWYgKCFzX25vZGVUeXBlTmFtZXNEaWN0KSB7CisgICAgICAgIHNfbm9kZVR5cGVOYW1lc0Rp
Y3QgPSBuZXcgSGFzaFNldDxTdHJpbmc+OworICAgICAgICBmb3IgKGludCBwID0gMDsgbm9kZVR5
cGVOYW1lc1twXTsgKytwKQorICAgICAgICAgICAgc19ub2RlVHlwZU5hbWVzRGljdC0+YWRkKG5v
ZGVUeXBlTmFtZXNbcF0pOworICAgIH0KKyAgICByZXR1cm4gc19ub2RlVHlwZU5hbWVzRGljdC0+
Y29udGFpbnMoU3RyaW5nKG5hbWUpKTsKK30KKworLyogUmV0dXJucyB3aGV0aGVyIHRoZSBsYXN0
IHBhcnNlZCB0b2tlbiBtYXRjaGVzIHRoZSBbMzJdIE9wZXJhdG9yIHJ1bGUKKyAqIChjaGVjayBo
dHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCNleHBybGV4KS4gTmVjZXNzYXJ5IHRvIGRpc2FtYmln
dWF0ZQorICogdGhlIHRva2Vucy4KKyAqLworYm9vbCBUb2tlbml6ZXI6OmlzT3BlcmF0b3JDb250
ZXh0KCkKK3sKKyAgICBpZiAoIG1fbmV4dFBvcyA9PSAwICkgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3dpdGNoICggbV9sYXN0VG9rZW5UeXBlICkgeworICAgICAgICBj
YXNlIEFORDogY2FzZSBPUjogY2FzZSBNVUxPUDoKKyAgICAgICAgY2FzZSAnLyc6IGNhc2UgU0xB
U0hTTEFTSDogY2FzZSAnfCc6IGNhc2UgUExVUzogY2FzZSBNSU5VUzoKKyAgICAgICAgY2FzZSBF
UU9QOiBjYXNlIFJFTE9QOgorICAgICAgICBjYXNlICdAJzogY2FzZSBBWElTTkFNRTogICBjYXNl
ICcoJzogY2FzZSAnWyc6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgVG9rZW5pemVy
Ojpza2lwV1MoKQoreworICAgIHdoaWxlIChtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYg
bV9kYXRhW21fbmV4dFBvc10uaXNTcGFjZSgpKQorICAgICAgICArK21fbmV4dFBvczsKK30KKwor
VG9rZW4gVG9rZW5pemVyOjptYWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgYWR2YW5j
ZSkKK3sKKyAgICBtX25leHRQb3MgKz0gYWR2YW5jZTsKKyAgICByZXR1cm4gVG9rZW4oY29kZSk7
Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwg
aW50IHZhbCwgaW50IGFkdmFuY2UpCit7CisgICAgbV9uZXh0UG9zICs9IGFkdmFuY2U7CisgICAg
cmV0dXJuIFRva2VuKGNvZGUsIHZhbCk7Cit9CisKKy8vUmV0dXJucyBuZXh0IGNoYXIgaWYgaXQn
cyB0aGVyZSBhbmQgaW50ZXJlc3RpbmcsIDAgb3RoZXJ3aXNlCitjaGFyIFRva2VuaXplcjo6cGVl
a0FoZWFkSGVscGVyKCkKK3sKKyAgICBpZiAobV9uZXh0UG9zICsgMSA+PSBtX2RhdGEubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIFFDaGFyIG5leHQgPSBtX2RhdGFbbV9uZXh0UG9z
ICsgMV07CisgICAgaWYgKG5leHQucm93KCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gbmV4dC5jZWxsKCk7Cit9CisKK2NoYXIgVG9rZW5pemVyOjpw
ZWVrQ3VySGVscGVyKCkKK3sKKyAgICBpZiAobV9uZXh0UG9zID49IG1fZGF0YS5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgUUNoYXIgbmV4dCA9IG1fZGF0YVttX25leHRQb3NdOwor
ICAgIGlmIChuZXh0LnJvdygpICE9IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIG5leHQuY2VsbCgpOworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleFN0cmlu
ZygpCit7CisgICAgUUNoYXIgZGVsaW1pdGVyID0gbV9kYXRhW21fbmV4dFBvc107CisgICAgaW50
ICAgc3RhcnRQb3MgID0gbV9uZXh0UG9zICsgMTsKKworICAgIGZvciAobV9uZXh0UG9zID0gc3Rh
cnRQb3M7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsKKyAgICAg
ICAgaWYgKG1fZGF0YVttX25leHRQb3NdID09IGRlbGltaXRlcikgeworICAgICAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0
UG9zLCBtX25leHRQb3MgLSBzdGFydFBvcyk7CisgICAgICAgICAgICArK21fbmV4dFBvczsgLy9D
b25zdW1lIHRoZSBjaGFyOworICAgICAgICAgICAgcmV0dXJuIFRva2VuKExJVEVSQUwsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vT3VjaCwgd2VudCBvZmYgdGhlIGVuZCAtLSBy
ZXBvcnQgZXJyb3IKKyAgICByZXR1cm4gVG9rZW4oRVJST1IpOworfQorCitUb2tlbiBUb2tlbml6
ZXI6OmxleE51bWJlcigpCit7CisgICAgaW50IHN0YXJ0UG9zID0gbV9uZXh0UG9zOworICAgIGJv
b2wgc2VlbkRvdCA9IGZhbHNlOworCisgICAgLy9HbyB1bnRpbCBlbmQgb3IgYSBub24tZGlnaXRz
IGNoYXJhY3RlcgorICAgIGZvciAoOyBtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCk7ICsrbV9u
ZXh0UG9zKSB7CisgICAgICAgIFFDaGFyIGFDaGFyID0gbV9kYXRhW21fbmV4dFBvc107CisgICAg
ICAgIGlmIChhQ2hhci5yb3coKSAhPSAwKSBicmVhazsKKworICAgICAgICBpZiAoYUNoYXIuY2Vs
bCgpIDwgJzAnIHx8IGFDaGFyLmNlbGwoKSA+ICc5JykgeworICAgICAgICAgICAgaWYgKGFDaGFy
LmNlbGwoKSA9PSAnLicgJiYgIXNlZW5Eb3QpCisgICAgICAgICAgICAgICAgc2VlbkRvdCA9IHRy
dWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBEZXByZWNhdGVkU3RyaW5nIHZhbHVlID0gbV9kYXRhLmRlcHJlY2F0ZWRT
dHJpbmcoKS5taWQoc3RhcnRQb3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9zKTsKKyAgICByZXR1cm4g
VG9rZW4oTlVNQkVSLCB2YWx1ZSk7Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bGV4TkNOYW1lKCkK
K3sKKyAgICBpbnQgc3RhcnRQb3MgPSBtX25leHRQb3M7CisgICAgaWYgKG1fbmV4dFBvcyA8IG1f
ZGF0YS5sZW5ndGgoKSAmJiBjaGFyQ2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOYW1lU3RhcnQp
CisgICAgeworICAgICAgICAvL0tlZXAgZ29pbmcgdW50aWwgd2UgZ2V0IGEgY2hhcmFjdGVyIHRo
YXQncyBub3QgZ29vZCBmb3IgbmFtZXMuCisgICAgICAgIGZvciAoOyBtX25leHRQb3MgPCBtX2Rh
dGEubGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CisgICAgICAgICAgICBpZiAoY2hhckNhdChtX2Rh
dGFbbV9uZXh0UG9zXSkgPT0gTm90UGFydE9mTmFtZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZSA9IG1f
ZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBv
cyk7CisgICAgICAgIHJldHVybiBUb2tlbih2YWx1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoRVJST1IpOworfQorCitUb2tlbiBUb2tlbml6
ZXI6OmxleFFOYW1lKCkKK3sKKyAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOworICAgIGlmICh0
MS50eXBlID09IEVSUk9SKSByZXR1cm4gdDE7CisgICAgc2tpcFdTKCk7CisgICAgLy9JZiB0aGUg
bmV4dCBjaGFyYWN0ZXIgaXMgOiwgd2hhdCB3ZSBqdXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBu
b3QsCisgICAgLy9pdCdzIHRoZSB3aG9sZSB0aGluZworICAgIGlmIChwZWVrQWhlYWRIZWxwZXIo
KSAhPSAnOicpCisgICAgICAgIHJldHVybiB0MTsKKworICAgIFRva2VuIHQyID0gbGV4TkNOYW1l
KCk7CisgICAgaWYgKHQyLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MjsKKworICAgIHJldHVybiBU
b2tlbih0MS52YWx1ZSArICI6IiArIHQyLnZhbHVlKTsKK30KKworVG9rZW4gVG9rZW5pemVyOjpu
ZXh0VG9rZW5JbnRlcm5hbCgpCit7CisgICAgc2tpcFdTKCk7CisKKyAgICBpZiAobV9uZXh0UG9z
ID49IG1fZGF0YS5sZW5ndGgoKSkgeworICAgICAgICByZXR1cm4gVG9rZW4oMCk7CisgICAgfQor
CisgICAgY2hhciBjb2RlID0gcGVla0N1ckhlbHBlcigpOworICAgIHN3aXRjaCAoY29kZSkgewor
ICAgICAgICBjYXNlICcoJzogY2FzZSAnKSc6IGNhc2UgJ1snOiBjYXNlICddJzoKKyAgICAgICAg
Y2FzZSAnQCc6IGNhc2UgJywnOiBjYXNlICd8JzoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW5BbmRBZHZhbmNlKGNvZGUpOworICAgICAgICBjYXNlICdcJyc6CisgICAgICAgIGNhc2UgJ1wi
JzoKKyAgICAgICAgICAgIHJldHVybiBsZXhTdHJpbmcoKTsKKyAgICAgICAgY2FzZSAnMCc6IGNh
c2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1Jzog
Y2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICAgICAgICByZXR1
cm4gbGV4TnVtYmVyKCk7CisgICAgICAgIGNhc2UgJy4nOiB7CisgICAgICAgICAgICBjaGFyIG5l
eHQgPSBwZWVrQWhlYWRIZWxwZXIoKTsKKyAgICAgICAgICAgIGlmIChuZXh0ID09ICcuJykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShET1RET1QsIDIpOworICAg
ICAgICAgICAgZWxzZSBpZiAobmV4dCA+PSAnMCcgJiYgbmV4dCA8PSAnOScpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGxleE51bWJlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcuJyk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSAnLyc6CisgICAgICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJy8nKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKFNMQVNIU0xBU0gsIDIpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZh
bmNlKCcvJyk7CisgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bkFuZEFkdmFuY2UoUExVUyk7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbkFuZEFkdmFuY2UoTUlOVVMpOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9FUSk7
CisgICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09
ICc9JykKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShFUU9Q
LCBFcVRlc3RPcDo6T1BfTkUsIDIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnPCc6
CisgICAgICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xF
LCAyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRv
a2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9MVCk7CisgICAgICAgIGNhc2UgJz4n
OgorICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9H
RSwgMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRU
b2tlbkFuZEFkdmFuY2UoUkVMT1AsIE51bWVyaWNPcDo6T1BfR1QpOworICAgICAgICBjYXNlICcq
JzoKKyAgICAgICAgICAgIGlmIChpc09wZXJhdG9yQ29udGV4dCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6Ok9QX011bCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICArK21fbmV4dFBvczsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVG9rZW4oTkFNRVRFU1QsICIqIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgJyQnOiB7Ly8kIFFOYW1lCisgICAgICAgICAgICBtX25leHRQb3MrKzsKKyAg
ICAgICAgICAgIFRva2VuIHBhciA9IGxleFFOYW1lKCk7CisgICAgICAgICAgICBpZiAocGFyLnR5
cGUgPT0gRVJST1IpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcjsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oVkFSSUFCTEVSRUZFUkVOQ0UsIHBhci52
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOwor
ICAgIGlmICh0MS50eXBlID09IEVSUk9SKSByZXR1cm4gdDE7CisKKyAgICBza2lwV1MoKTsKKyAg
ICAvL0lmIHdlJ3JlIGluIGFuIG9wZXJhdG9yIGNvbnRleHQsIGNoZWNrIGZvciBhbnkgb3BlcmF0
b3IgbmFtZXMKKyAgICBpZiAoaXNPcGVyYXRvckNvbnRleHQoKSkgeworICAgICAgICBpZiAodDEu
dmFsdWUgPT0gImFuZCIpIC8vIyMjIGhhc2g/CisgICAgICAgICAgICByZXR1cm4gVG9rZW4oQU5E
KTsKKyAgICAgICAgaWYgKHQxLnZhbHVlID09ICJvciIpCisgICAgICAgICAgICByZXR1cm4gVG9r
ZW4oT1IpOworICAgICAgICBpZiAodDEudmFsdWUgPT0gIm1vZCIpCisgICAgICAgICAgICByZXR1
cm4gVG9rZW4oTVVMT1AsIE51bWVyaWNPcDo6T1BfTW9kKTsKKyAgICAgICAgaWYgKHQxLnZhbHVl
ID09ICJkaXYiKQorICAgICAgICAgICAgcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1lcmljT3A6Ok9Q
X0Rpdik7CisgICAgfQorCisgICAgLy9TZWUgd2hldGhlciB3ZSBhcmUgYXQgYSA6CisgICAgaWYg
KHBlZWtDdXJIZWxwZXIoKSA9PSAnOicpIHsKKyAgICAgICAgbV9uZXh0UG9zKys7CisgICAgICAg
IC8vQW55IGNoYW5jZSBpdCdzIGFuIGF4aXMgbmFtZT8KKyAgICAgICAgaWYgKHBlZWtDdXJIZWxw
ZXIoKSA9PSAnOicpIHsKKyAgICAgICAgICAgIG1fbmV4dFBvcysrOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvL0l0IG1pZ2h0IGJlIGFuIGF4aXMgbmFtZS4KKyAgICAgICAgICAgIFN0ZXA6
OkF4aXNUeXBlIGF4aXNUeXBlOworICAgICAgICAgICAgaWYgKGlzQXhpc05hbWUodDEudmFsdWUs
IGF4aXNUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oQVhJU05BTUUsIGF4aXNU
eXBlKTsKKyAgICAgICAgICAgIC8vVWdoLCA6OiBpcyBvbmx5IHZhbGlkIGluIGF4aXMgbmFtZXMg
LT4gZXJyb3IKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihFUlJPUik7CisgICAgICAgIH0KKwor
ICAgICAgICAvL1NlZW1zIGxpa2UgdGhpcyBpcyBhIGZ1bGx5IHF1YWxpZmllZCBxbmFtZSwgb3Ig
cGVyaGFwcyB0aGUgKiBtb2RpZmllZCBvbmUgZnJvbSBOYW1lVGVzdAorICAgICAgICBza2lwV1Mo
KTsKKyAgICAgICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnKicpIHsKKyAgICAgICAgICAgIG1f
bmV4dFBvcysrOworICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCB0MS52YWx1ZSAr
ICI6KiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvL01ha2UgYSBmdWxsIHFuYW1l
Li4KKyAgICAgICAgVG9rZW4gdDIgPSBsZXhOQ05hbWUoKTsKKyAgICAgICAgaWYgKHQyLnR5cGUg
PT0gRVJST1IpIHJldHVybiB0MjsKKyAgICAgICAgCisgICAgICAgIHQxLnZhbHVlID0gdDEudmFs
dWUgKyAnOicgKyB0Mi52YWx1ZTsKKyAgICB9CisKKyAgICBza2lwV1MoKTsKKyAgICBpZiAocGVl
a0N1ckhlbHBlcigpID09ICcoJykgeworICAgICAgICAvL25vdGU6IHdlIGRvbid0IHN3YWxsb3cg
dGhlICggaGVyZSEKKyAgICAgICAgCisgICAgICAgIC8vZWl0aGVyIG5vZGUgdHlwZSBvZiBmdW5j
dGlvbiBuYW1lCisgICAgICAgIGlmIChpc05vZGVUeXBlTmFtZSh0MS52YWx1ZSkpIHsKKyAgICAg
ICAgICAgIGlmICh0MS52YWx1ZSA9PSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFRva2VuKFBJLCB0MS52YWx1ZSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5PREVUWVBFLCB0MS52YWx1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgLy9tdXN0IGJlIGEgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgcmV0dXJuIFRv
a2VuKEZVTkNUSU9OTkFNRSwgdDEudmFsdWUpOworICAgIH0KKworICAgIC8vQXQgdGhpcyBwb2lu
dCwgaXQgbXVzdCBiZSBOQU1FVEVTVAorICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgdDEudmFs
dWUpOworfQorCitUb2tlbiBUb2tlbml6ZXI6Om5leHRUb2tlbigpCit7CisgICAgVG9rZW4gdG9S
ZXQgPSBuZXh0VG9rZW5JbnRlcm5hbCgpOworICAgIG1fbGFzdFRva2VuVHlwZSA9IHRvUmV0LnR5
cGU7CisgICAgcmV0dXJuIHRvUmV0OworfQorCitUb2tlbml6ZXI6OlRva2VuaXplcigpCit7Cisg
ICAgcmVzZXQoU3RyaW5nKCkpOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworfQor
Cit2b2lkIFRva2VuaXplcjo6cmVzZXQoY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIG1fbmV4
dFBvcyA9IDA7CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBtX2xhc3RUb2tlblR5cGUgPSAwOwor
fQorCit9Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpYUGF0aDsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitpbnQgeHBhdGh5eWxleCgpCit7CisgICAgVG9rZW4gdG9rID0gVG9r
ZW5pemVyOjpzZWxmKCkubmV4dFRva2VuKCk7CisgICAgaWYgKCF0b2sudmFsdWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIHhwYXRoeXlsdmFsLnN0ciA9IG5ldyBEZXByZWNhdGVkU3RyaW5nKHRvay52
YWx1ZSk7CisgICAgfSBlbHNlIGlmICh0b2suaW50VmFsdWUpIHsKKyAgICAgICAgeHBhdGh5eWx2
YWwubnVtID0gdG9rLmludFZhbHVlOworICAgIH0KKyAgICByZXR1cm4gdG9rLnR5cGU7Cit9CisK
K3ZvaWQgaW5pdFRva2VuaXplcihjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBUb2tlbml6
ZXI6OnNlbGYoKS5yZXNldChzdHJpbmcpOworfQorCit2b2lkIHhwYXRoeXllcnJvcihjb25zdCBj
aGFyICpzdHIpCit7CisgICAgLy8gRklYTUUgQ2xlYW4geHBhdGh5eWx2YWwuc3RyIHVwIHRvIGF2
b2lkIGxlYWtpbmcgaXQuCit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwOCBA
QAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInN0ZXAuaCIKKwor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlN0
cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOb2RlLmgi
CisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworCitEZXByZWNhdGVkU3RyaW5nIFN0
ZXA6OmF4aXNBc1N0cmluZyggQXhpc1R5cGUgYXhpcyApCit7CisgICAgc3dpdGNoICggYXhpcyAp
IHsKKyAgICAgICAgY2FzZSBBbmNlc3RvckF4aXM6IHJldHVybiAiYW5jZXN0b3IiOworICAgICAg
ICBjYXNlIEFuY2VzdG9yT3JTZWxmQXhpczogcmV0dXJuICJhbmNlc3Rvci1vci1zZWxmIjsKKyAg
ICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOiByZXR1cm4gImF0dHJpYnV0ZSI7CisgICAgICAgIGNh
c2UgQ2hpbGRBeGlzOiByZXR1cm4gImNoaWxkIjsKKyAgICAgICAgY2FzZSBEZXNjZW5kYW50QXhp
czogcmV0dXJuICJkZXNjZW5kYW50IjsKKyAgICAgICAgY2FzZSBEZXNjZW5kYW50T3JTZWxmQXhp
czogcmV0dXJuICJkZXNjZW5kYW50LW9yLXNlbGYiOworICAgICAgICBjYXNlIEZvbGxvd2luZ0F4
aXM6IHJldHVybiAiZm9sbG93aW5nIjsKKyAgICAgICAgY2FzZSBGb2xsb3dpbmdTaWJsaW5nQXhp
czogcmV0dXJuICJmb2xsb3dpbmctc2libGluZyI7CisgICAgICAgIGNhc2UgTmFtZXNwYWNlQXhp
czogcmV0dXJuICJuYW1lc3BhY2UiOworICAgICAgICBjYXNlIFBhcmVudEF4aXM6IHJldHVybiAi
cGFyZW50IjsKKyAgICAgICAgY2FzZSBQcmVjZWRpbmdBeGlzOiByZXR1cm4gInByZWNlZGluZyI7
CisgICAgICAgIGNhc2UgUHJlY2VkaW5nU2libGluZ0F4aXM6IHJldHVybiAicHJlY2VkaW5nLXNp
YmxpbmciOworICAgICAgICBjYXNlIFNlbGZBeGlzOiByZXR1cm4gInNlbGYiOworICAgIH0KKyAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworfQorCitTdGVwOjpTdGVwKCkKK3sKK30KKwor
U3RlcDo6U3RlcChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJpbmcmIG5vZGVUZXN0LCBjb25zdCBW
ZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMpCisgICAgOiBtX2F4aXMoYXhpcyksCisgICAg
bV9ub2RlVGVzdChub2RlVGVzdCksCisgICAgbV9wcmVkaWNhdGVzKHByZWRpY2F0ZXMpCit7Cit9
CisKK1N0ZXA6On5TdGVwKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9wcmVkaWNhdGVzKTsK
K30KKworTm9kZVNldCBTdGVwOjpldmFsdWF0ZShOb2RlICpjb250ZXh0KSBjb25zdAoreworICAg
IExPRyhYUGF0aCwgIkV2YWx1YXRpbmcgc3RlcCwgYXhpcz0nJXMnLCBub2RldGVzdD0nJXMnLCAl
dSBwcmVkaWNhdGVzXG4iLAorICAgICAgICAgICAgYXhpc0FzU3RyaW5nKG1fYXhpcykuYXNjaWko
KSwgbV9ub2RlVGVzdC5hc2NpaSgpLCBtX3ByZWRpY2F0ZXMuc2l6ZSgpKTsKKyAgICBpZiAoIGNv
bnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFICkgeworICAgICAgICBMT0co
WFBhdGgsICJDb250ZXh0IG5vZGUgaXMgYW4gZWxlbWVudCBjYWxsZWQgJXNcbiIsIGNvbnRleHQt
Pm5vZGVOYW1lKCkuYXNjaWkoKSk7CisgICAgfSBlbHNlIGlmICggY29udGV4dC0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSApIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ29udGV4
dCBub2RlIGlzIGFuIGF0dHJpYnV0ZSBjYWxsZWQgJXMgd2l0aCB2YWx1ZSAlc1xuIiwgCisgICAg
ICAgICAgICAgICBjb250ZXh0LT5ub2RlTmFtZSgpLmFzY2lpKCksIAorICAgICAgICAgICAgICAg
Y29udGV4dC0+bm9kZVZhbHVlKCkuYXNjaWkoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9H
KFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIG9mIHVua25vd24gdHlwZSAlZFxuIiwgY29udGV4dC0+
bm9kZVR5cGUoKSk7CisgICAgfQorCisgICAgTm9kZVNldCBpbk5vZGVzID0gbm9kZXNJbkF4aXMo
Y29udGV4dCksIG91dE5vZGVzOworICAgIExPRyhYUGF0aCwgIkF4aXMgJXMgbWF0Y2hlcyAlZCBu
b2Rlcy5cbiIsIGF4aXNBc1N0cmluZyhtX2F4aXMpLmFzY2lpKCksIGluTm9kZXMuc2l6ZSgpKTsK
KworICAgIGluTm9kZXMgPSBub2RlVGVzdE1hdGNoZXMoaW5Ob2Rlcyk7CisgICAgTE9HKFhQYXRo
LCAiTm9kZXRlc3QgJXMgdHJpbXMgdGhpcyBudW1iZXIgdG8gJWRcbiIsIG1fbm9kZVRlc3QuYXNj
aWkoKSwgaW5Ob2Rlcy5zaXplKCkpOworICAgIAorICAgIG91dE5vZGVzID0gaW5Ob2RlczsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVkaWNhdGVzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIFByZWRpY2F0ZSogcHJlZGljYXRlID0gbV9wcmVkaWNhdGVzW2ldOworCisgICAgICAg
IG91dE5vZGVzLmNsZWFyKCk7CisgICAgICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0
KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOworICAgICAgICBFeHByZXNzaW9uOjpldmFsdWF0aW9u
Q29udGV4dCgpLnBvc2l0aW9uID0gMTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGluTm9kZXMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpbk5vZGVz
W2pdLmdldCgpOworCisgICAgICAgICAgICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgp
Lm5vZGUgPSBub2RlOworICAgICAgICAgICAgRXZhbHVhdGlvbkNvbnRleHQgYmFja3VwQ3R4ID0g
RXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmICggcHJlZGlj
YXRlLT5ldmFsdWF0ZSgpICkgeworICAgICAgICAgICAgICAgIG91dE5vZGVzLmFwcGVuZCggbm9k
ZSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNv
bnRleHQoKSA9IGJhY2t1cEN0eDsKKyAgICAgICAgICAgICsrRXhwcmVzc2lvbjo6ZXZhbHVhdGlv
bkNvbnRleHQoKS5wb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIExPRyhYUGF0aCwgIlx0
UHJlZGljYXRlIHRyaW1zIHRoaXMgbnVtYmVyIHRvICVkIiwgb3V0Tm9kZXMuc2l6ZSgpKTsKKwor
ICAgICAgICBpbk5vZGVzID0gb3V0Tm9kZXM7CisgICAgfQorICAgIHJldHVybiBvdXROb2RlczsK
K30KKworTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyggTm9kZSAqY29udGV4dCApIGNvbnN0Cit7
CisgICAgTm9kZVNldCBub2RlczsKKyAgICBzd2l0Y2ggKCBtX2F4aXMgKSB7CisgICAgICAgIGNh
c2UgQ2hpbGRBeGlzOiB7CisgICAgICAgICAgICBOb2RlICpuID0gY29udGV4dC0+Zmlyc3RDaGls
ZCgpOworICAgICAgICAgICAgd2hpbGUgKCBuICkgeworICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZCggbiApOworICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNh
c2UgRGVzY2VuZGFudEF4aXM6IAorICAgICAgICAgICAgcmV0dXJuIGdldENoaWxkcmVuUmVjdXJz
aXZlbHkoY29udGV4dCk7CisgICAgICAgIGNhc2UgUGFyZW50QXhpczoKKyAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChjb250ZXh0LT5wYXJlbnROb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG5v
ZGVzOworICAgICAgICBjYXNlIEFuY2VzdG9yQXhpczogeworICAgICAgICAgICAgTm9kZSAqbiA9
IGNvbnRleHQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIHdoaWxlICggbiApIHsKKyAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQoIG4gKTsKKyAgICAgICAgICAgICAgICBuID0gbi0+cGFy
ZW50Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgRm9sbG93aW5nU2libGluZ0F4aXM6IHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CisgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNF
X05PREUpIAorICAgICAgICAgICAgICAgIHJldHVybiBOb2RlU2V0KCk7CisKKyAgICAgICAgICAg
IE5vZGUgKm4gPSBjb250ZXh0LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgd2hpbGUgKCBu
ICkgeworICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZCggbiApOworICAgICAgICAgICAgICAg
IG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNhc2UgUHJlY2VkaW5nU2libGluZ0F4aXM6IHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9O
T0RFIHx8CisgICAgICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBB
VEhfTkFNRVNQQUNFX05PREUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVTZXQoKTsKKwor
ICAgICAgICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPnByZXZpb3VzU2libGluZygpOworICAgICAg
ICAgICAgd2hpbGUgKCBuICkgeworICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZCggbiApOwor
ICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZvbGxv
d2luZ0F4aXM6IHsKKyAgICAgICAgICAgIE5vZGUgKnAgPSBjb250ZXh0OworICAgICAgICAgICAg
d2hpbGUgKCAhaXNSb290RG9tTm9kZSggcCApICkgeworICAgICAgICAgICAgICAgIE5vZGUgKm4g
PSBwLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIHdoaWxlICggbiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKCBuICk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG4pKTsKKworICAgICAgICAgICAgICAg
ICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFByZWNlZGluZ0F4aXM6IHsKKyAg
ICAgICAgICAgIE5vZGUgKnAgPSBjb250ZXh0OworICAgICAgICAgICAgd2hpbGUgKCAhaXNSb290
RG9tTm9kZSggcCApICkgeworICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBwLT5wcmV2aW91c1Np
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIG4gKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZCggbiApOworICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
Z2V0Q2hpbGRyZW5SZWN1cnNpdmVseShuKSk7CisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcCA9
IHAtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2Rl
czsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF0dHJpYnV0ZUF4aXM6IHsKKyAgICAgICAgICAg
IGlmICggY29udGV4dC0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vZGVTZXQoKTsKKworICAgICAgICAgICAgTmFtZWRBdHRyTWFwICph
dHRycyA9IGNvbnRleHQtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmICghYXR0cnMpIHsK
KyAgICAgICAgICAgICAgICBMT0coWFBhdGgsICJOb2RlOjphdHRyaWJ1dGVzKCkgcmV0dXJuZWQg
TlVMTCEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgo
KTsgKytpKSAKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQgKGF0dHJzLT5pdGVtKGkpKTsK
KworICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNhc2UgTmFt
ZXNwYWNlQXhpczogeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVybiBOb2RlU2V0KCk7CisKKyAg
ICAgICAgICAgIGJvb2wgZm91bmRYbWxOc05vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIE5vZGUg
Km5vZGUgPSBjb250ZXh0OworICAgICAgICAgICAgd2hpbGUgKCBub2RlICkgeworICAgICAgICAg
ICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBub2RlLT5hdHRyaWJ1dGVzKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCAhYXR0cnMgKSB7CisgICAgICAgICAgICAgICAgICAgIExPRyhYUGF0aCwg
Ik5vZGU6OmF0dHJpYnV0ZXMoKSByZXR1cm5lZCBOVUxMISIpOworCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoIHVuc2lnbmVk
IGxvbmcgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSAqbiA9IGF0dHJzLT5pdGVtKGkpLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIG4tPm5vZGVOYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoICJ4bWxu
czoiICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoIG4gKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5ub2RlTmFtZSgpID09ICJ4bWxucyIgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm91bmRYbWxOc05vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kWG1sTnNOb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIW4tPm5vZGVWYWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5pc0VtcHR5
KCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKCBuICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFNlbGZBeGlzOgorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKCBjb250ZXh0ICk7Cisg
ICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIGNhc2UgRGVzY2VuZGFudE9yU2VsZkF4
aXM6CisgICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7CisgICAgICAgICAgICBub2Rl
cy5hcHBlbmQoZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShjb250ZXh0KSk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZXM7CisgICAgICAgIGNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOiB7CisgICAgICAg
ICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7CisgICAgICAgICAgICBOb2RlICpuID0gY29udGV4
dC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUgKCBuICkgeworICAgICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZCggbiApOworICAgICAgICAgICAgICAgIG4gPSBuLT5wYXJlbnROb2Rl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPRyhYUGF0aCwgIlVua25vd24gYXhpcyAl
cyBwYXNzZWQgdG8gU3RlcDo6bm9kZXNJbkF4aXMiLCBheGlzQXNTdHJpbmcobV9heGlzKS5hc2Np
aSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTm9kZVNldCgpOworfQorCisKK05vZGVTZXQgU3Rl
cDo6bm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVTZXQmIG5vZGVzKSBjb25zdAoreworICAgIFN0
cmluZyBucyA9IG5hbWVzcGFjZUZyb21Ob2RldGVzdCggbV9ub2RlVGVzdCApOworICAgIE5vZGVT
ZXQgbWF0Y2hlczsKKyAgICBpZiAoIG1fbm9kZVRlc3QgPT0gIioiICkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5v
ZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlw
ZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMpKSB7CisgICAgICAgICAgICAgICAgaWYgKCBu
cy5pc0VtcHR5KCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm5hbWVzcGFjZVVSSSgp
ID09IG5zICkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG5vZGVzOworICAgIH0gZWxzZSBpZiAoIG1fbm9kZVRlc3QgPT0gInRleHQoKSIgKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgTm9kZSAqbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKG5vZGUt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8CisgICAgICAgICAgICAgICAgbm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgKSAKKyAgICAgICAgICAgICAg
ICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0Y2hl
czsKKyAgICB9IGVsc2UgaWYgKCBtX25vZGVUZXN0ID09ICJjb21tZW50KCkiICkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
ICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5u
b2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkKKyAgICAgICAgICAgICAgICBtYXRjaGVz
LmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICB9
IGVsc2UgaWYgKCBtX25vZGVUZXN0LnN0YXJ0c1dpdGgoICJwcm9jZXNzaW5nLWluc3RydWN0aW9u
IiApICkgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHBhcmFtOworCisgICAgICAgIGNvbnN0
IGludCBzcGFjZSA9IG1fbm9kZVRlc3QuZmluZCggJyAnICk7CisgICAgICAgIGlmICggc3BhY2Ug
PiAtMSApIHsKKyAgICAgICAgICAgIHBhcmFtID0gbV9ub2RlVGVzdC5kZXByZWNhdGVkU3RyaW5n
KCkubWlkKHNwYWNlICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlICpub2RlID0gbm9k
ZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6
OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSAmJgorICAgICAgICAgICAgICAgIChwYXJhbS5p
c0VtcHR5KCkgfHwgbm9kZS0+bm9kZU5hbWUoKSA9PSBwYXJhbSkpCisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAgICB9ICAgIAorICAgICAgICByZXR1cm4g
bWF0Y2hlczsKKyAgICB9IGVsc2UgaWYgKCBtX25vZGVUZXN0ID09ICJub2RlKCkiICkgeworICAg
ICAgICByZXR1cm4gbm9kZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIHByZWZpeCwg
bG9jYWxOYW1lOworCisgICAgICAgIGNvbnN0IGludCBjb2xvbiA9IG1fbm9kZVRlc3QuZmluZCgg
JzonICk7CisgICAgICAgIGlmIChjb2xvbiA+IC0xKSB7CisgICAgICAgICAgICBwcmVmaXggPSBt
X25vZGVUZXN0LmxlZnQoIGNvbG9uICk7CisgICAgICAgICAgICBsb2NhbE5hbWUgPSBtX25vZGVU
ZXN0LmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoY29sb24gKyAxKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGxvY2FsTmFtZSA9IG1fbm9kZVRlc3Q7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXByZWZpeC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChFeHByZXNzaW9uOjpl
dmFsdWF0aW9uQ29udGV4dCgpLnJlc29sdmVyLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvKiBGSVhNRTogVGhyb3cgTkFNRVNQQUNFX0VS
UiBleGNlcHRpb24gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgg
bV9heGlzID09IEF0dHJpYnV0ZUF4aXMgKSB7CisgICAgICAgICAgICAvLyBJbiBYUGF0aCBsYW5k
LCBuYW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBhY2Nlc3NpYmxlCisgICAgICAgICAgICAvLyBvbiB0
aGUgYXR0cmlidXRlIGF4aXMuCisgICAgICAgICAgICBpZiAoIGxvY2FsTmFtZSA9PSAieG1sbnMi
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCBub2RlLT5ub2RlTmFtZSgpID09IGxvY2FsTmFt
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoIG5vZGUgKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZS4KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOwor
ICAgICAgICB9IGVsc2UgaWYgKCBtX2F4aXMgPT0gTmFtZXNwYWNlQXhpcyApIHsKKyAgICAgICAg
ICAgIExPRyhYUGF0aCwgIk5vZGUgdGVzdCAlcyBvbiBheGlzICVzIGlzIG5vdCBpbXBsZW1lbnRl
ZCB5ZXQuIiwKKyAgICAgICAgICAgICAgICBtX25vZGVUZXN0LmFzY2lpKCksIGF4aXNBc1N0cmlu
ZyhtX2F4aXMpLmFzY2lpKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAg
Tm9kZSAqbm9kZSA9IG5vZGVzW2ldLmdldCgpOworIAorICAgICAgICAgICAgICAgIC8vIFdlIHVz
ZSB0YWdRTmFtZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgZWxlbWVudCBuYW1lIGlu
IHVwcGVyY2FzZSAKKyAgICAgICAgICAgICAgICAvLyBsaWtlIHdlIGdldCB3aXRoIEhUTUwgZWxl
bWVudHMuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxF
TUVOVF9OT0RFICYmCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQgKj4o
bm9kZSktPnRhZ1FOYW1lKCkudG9TdHJpbmcoKSA9PSBsb2NhbE5hbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBMT0coWFBhdGgsICJOb2RlIHRlc3QgJXMgb24gYXhpcyAlcyBpcyBub3QgaW1w
bGVtZW50ZWQgeWV0LiIsCisgICAgICAgIG1fbm9kZVRlc3QuYXNjaWkoKSwgYXhpc0FzU3RyaW5n
KG1fYXhpcykuYXNjaWkoKSk7CisKKyAgICByZXR1cm4gbWF0Y2hlczsKK30KKwordm9pZCBTdGVw
OjpvcHRpbWl6ZSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlZGljYXRl
cy5zaXplKCk7IGkrKykKKyAgICAgICAgbV9wcmVkaWNhdGVzW2ldLT5vcHRpbWl6ZSgpOworfQor
CitTdHJpbmcgU3RlcDo6bmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0cmluZyYgbm9kZVRl
c3QpIGNvbnN0Cit7CisgICAgaW50IGkgPSBub2RlVGVzdC5maW5kKCAnOicgKTsKKyAgICBpZiAo
IGkgPT0gLTEgKSB7CisgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgfQor
CisgICAgU3RyaW5nIHByZWZpeChub2RlVGVzdC5sZWZ0KGkpKTsKKyAgICAKKyAgICBOb2RlICpj
dHhOb2RlID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworICAgIHJldHVy
biBjdHhOb2RlLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KTsKK30KKworTm9kZTo6Tm9kZVR5
cGUgU3RlcDo6cHJpbWFyeU5vZGVUeXBlKEF4aXNUeXBlIGF4aXMpIGNvbnN0Cit7CisgICAgc3dp
dGNoICggYXhpcyApIHsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOgorICAgICAgICAgICAg
cmV0dXJuIE5vZGU6OkFUVFJJQlVURV9OT0RFOworICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6
CisgICAgICAgICAgICByZXR1cm4gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTm9kZTo6RUxFTUVOVF9OT0RFOworICAgIH0K
K30KKworfQorfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS94cGF0aC9pbXBsL3V0aWwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvKgor
ICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFO
WSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICog
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUg
Ik5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAg
ICAgCitib29sIGlzUm9vdERvbU5vZGUoTm9kZSAqbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZSAm
JiAhbm9kZS0+cGFyZW50Tm9kZSgpOworfQorCitTdHJpbmcgc3RyaW5nVmFsdWUoIE5vZGUgKm5v
ZGUgKQoreworICAgIHN3aXRjaCAoIG5vZGUtPm5vZGVUeXBlKCkgKSB7CisgICAgICAgIGNhc2Ug
Tm9kZTo6QVRUUklCVVRFX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKKyAgICAgICAg
Y2FzZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVl
KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIGlzUm9vdERvbU5vZGUoIG5v
ZGUgKQorICAgICAgICAgICAgICAgICB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1F
TlRfTk9ERSApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RyOworICAgICAgICAgICAgICAg
IE5vZGVTZXQgbm9kZXMgPSBnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG5vZGUpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc3RyaW5nVmFsdWUobm9kZSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjsKKyAgICAg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitOb2RlU2V0
IGdldENoaWxkcmVuUmVjdXJzaXZlbHkoIE5vZGUgKm5vZGUgKQoreworICAgIE5vZGVTZXQgbm9k
ZXM7CisgICAgTm9kZSAqbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAobikgewor
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJl
blJlY3Vyc2l2ZWx5KG4pKTsKKyAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgfQor
ICAgIHJldHVybiBub2RlczsKK30KKworYm9vbCBpc1ZhbGlkQ29udGV4dE5vZGUoIE5vZGUgKm5v
ZGUgKQoreworICAgIHJldHVybiBub2RlICYmICggCisgICAgICAgICAgIG5vZGUtPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFIHx8CisgICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKKyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpURVhUX05PREUgfHwKKyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpDREFUQV9TRUNUSU9OX05PREUgfHwKKyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgfHwKKyAgICAgICAgICAgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUgfHwKKyAgICAgICAgICAgbm9kZS0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8CisgICAgICAgICAgIG5vZGUtPm5vZGVUeXBl
KCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpOworfQorCit9Cit9CisKSW5kZXg6IFdl
YkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L2ltcGwvZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvZnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBmdW5jdGlvbnMu
aCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB
TlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAq
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKyNpZm5kZWYgRlVOQ1RJT05TX0gKKyNkZWZpbmUgRlVOQ1RJT05TX0gKKworI2luY2x1
ZGUgImV4cHJlc3Npb24uaCIKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0
aCB7CisgICAgCitjbGFzcyBGdW5jdGlvbiA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6
CisgICAgdm9pZCBzZXRBcmd1bWVudHMoY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiAmYXJncyk7
CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyAmbmFtZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBFeHByZXNzaW9uICphcmcoaW50IHBvcyk7CisgICAgY29uc3QgRXhwcmVzc2lvbiAqYXJnKGlu
dCBwb3MpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBhcmdDb3VudCgpIGNvbnN0OworICAgIFN0
cmluZyBuYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbmFtZTsKK307CisK
K2NsYXNzIEZ1bmN0aW9uTGlicmFyeQoreworICAgIGZyaWVuZCBzdHJ1Y3QgRnVuY3Rpb25NYXBw
aW5nOworcHVibGljOgorICAgIHN0YXRpYyBGdW5jdGlvbkxpYnJhcnkgJnNlbGYoKTsKKworICAg
IEZ1bmN0aW9uICpnZXRGdW5jdGlvbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBWZWN0b3I8RXhw
cmVzc2lvbiAqPiAmYXJncyA9IFZlY3RvcjxFeHByZXNzaW9uKj4oKSkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgc3RydWN0IEZ1bmN0aW9uUmVjOworCisgICAgRnVuY3Rpb25MaWJyYXJ5KCk7Cisg
ICAgRnVuY3Rpb25MaWJyYXJ5KCBjb25zdCBGdW5jdGlvbkxpYnJhcnkgJnJocyApOworICAgIEZ1
bmN0aW9uTGlicmFyeSAmb3BlcmF0b3I9KCBjb25zdCBGdW5jdGlvbkxpYnJhcnkgJnJocyApOwor
CisgICAgSGFzaE1hcDxXZWJDb3JlOjpTdHJpbmcsIEZ1bmN0aW9uUmVjPiBtX2Z1bmN0aW9uRGlj
dDsKK307CisKK30KK30KKyNlbmRpZiAvLyBGVU5DVElPTlNfSAorCkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvdG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3Rv
a2VuaXplci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogdG9rZW5pemVyLmggLSBDb3B5
cmlnaHQgMjAwNSBNYWtzaW0gT3Jsb3ZpY2ggPG1ha3NpbUBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIFRPS0VOSVpFUl9ICisjZGVmaW5lIFRPS0VOSVpFUl9ICisKKyNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgInN0
ZXAuaCIKKyNpbmNsdWRlICJwYXRoLmgiCisjaW5jbHVkZSAicHJlZGljYXRlLmgiCisjaW5jbHVk
ZSAiZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworLy8gSW50ZXJmYWNlIHRvIHRo
ZSBwYXJzZXIKK2ludCB4cGF0aHl5bGV4KCk7Cit2b2lkIHhwYXRoeXllcnJvcihjb25zdCBjaGFy
ICpzdHIpOwordm9pZCBpbml0VG9rZW5pemVyKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc3RyaW5n
KTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hw
YXRoL2ltcGwvc3RlcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogc3Rl
cC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5E
IEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgor
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI2lmbmRlZiBTVEVQX0gKKyNkZWZpbmUgU1RFUF9ICisKKyNpbmNsdWRlICJwcmVk
aWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorY2xhc3MgU3RlcAor
eworcHVibGljOgorICAgIGVudW0gQXhpc1R5cGUgeworICAgICAgICBBbmNlc3RvckF4aXM9MSwg
QW5jZXN0b3JPclNlbGZBeGlzLCBBdHRyaWJ1dGVBeGlzLAorICAgICAgICBDaGlsZEF4aXMsIERl
c2NlbmRhbnRBeGlzLCBEZXNjZW5kYW50T3JTZWxmQXhpcywKKyAgICAgICAgRm9sbG93aW5nQXhp
cywgRm9sbG93aW5nU2libGluZ0F4aXMsIE5hbWVzcGFjZUF4aXMsCisgICAgICAgIFBhcmVudEF4
aXMsIFByZWNlZGluZ0F4aXMsIFByZWNlZGluZ1NpYmxpbmdBeGlzLAorICAgICAgICBTZWxmQXhp
cworICAgIH07CisKKyAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBheGlzQXNTdHJpbmcoIEF4
aXNUeXBlIGF4aXMgKTsKKworICAgIFN0ZXAoKTsKKyAgICBTdGVwKEF4aXNUeXBlIGF4aXMsIGNv
bnN0IFN0cmluZyAmbm9kZVRlc3QsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiAmcHJlZGljYXRl
cyA9IFZlY3RvcjxQcmVkaWNhdGUqPigpKTsKKyAgICB+U3RlcCgpOworCisgICAgTm9kZVNldCBl
dmFsdWF0ZShOb2RlICpjb250ZXh0KSBjb25zdDsKKworICAgIHZvaWQgb3B0aW1pemUoKTsKKwor
cHJpdmF0ZToKKyAgICBOb2RlU2V0IG5vZGVzSW5BeGlzKE5vZGUgKmNvbnRleHQpIGNvbnN0Owor
ICAgIE5vZGVTZXQgbm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVTZXQmIG5vZGVzKSBjb25zdDsK
KyAgICBTdHJpbmcgbmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0cmluZyYgbm9kZVRlc3Qp
IGNvbnN0OworICAgIE5vZGU6Ok5vZGVUeXBlIHByaW1hcnlOb2RlVHlwZSggQXhpc1R5cGUgYXhp
cyApIGNvbnN0OworCisgICAgQXhpc1R5cGUgbV9heGlzOworICAgIFN0cmluZyBtX25vZGVUZXN0
OworICAgIFZlY3RvcjxQcmVkaWNhdGUqPiBtX3ByZWRpY2F0ZXM7Cit9OworCit9Cit9CisKKyNl
bmRpZiAvLyBTVEVQX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NDggQEAKKyV7CisjaW5jbHVkZSAiY29uZmlnLmgiCisgICAgCisjaW5jbHVk
ZSAiZnVuY3Rpb25zLmgiCisjaW5jbHVkZSAieHBhdGgvaW1wbC9wYXRoLmgiCisjaW5jbHVkZSAi
c3RlcC5oIgorI2luY2x1ZGUgInByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNs
dWRlICJ2YXJpYWJsZXJlZmVyZW5jZS5oIgorICAgIAorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorCisjZGVmaW5lIFlZREVCVUcgMQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpYUGF0aDsKKyAgICAKK0V4cHJlc3Npb24gKnBhcnNlU3Rh
dGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRpb25Db2RlJiBjb2RlKTsKKyAg
ICAKK2V4dGVybiBpbnQgeHBhdGh5eWxleCgpOworZXh0ZXJuIHZvaWQgeHBhdGh5eWVycm9yKGNv
bnN0IGNoYXIgKnN0cik7CitleHRlcm4gdm9pZCBpbml0VG9rZW5pemVyKGNvbnN0IFN0cmluZyYg
c3RyaW5nKTsKKworc3RhdGljIEV4cHJlc3Npb24gKl90b3BFeHByOworc3RhdGljIGJvb2wgZ290
TmFtZXNwYWNlRXJyb3I7CisKKyV9CisKKyV1bmlvbgoreworICAgIFdlYkNvcmU6OlhQYXRoOjpT
dGVwOjpBeGlzVHlwZSBheGlzVHlwZTsKKyAgICBpbnQgICAgICAgIG51bTsKKyAgICBEZXByZWNh
dGVkU3RyaW5nICpzdHI7CisgICAgV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb24gKmV4cHI7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGUqPiAqcHJlZExpc3Q7CisgICAgVmVj
dG9yPFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uKj4gKmFyZ0xpc3Q7CisgICAgV2ViQ29yZTo6
WFBhdGg6OlN0ZXAgKnN0ZXA7CisgICAgV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aCAqbG9j
YXRpb25QYXRoOworfQorCislbGVmdCA8bnVtPiBNVUxPUCBSRUxPUCBFUU9QCislbGVmdCA8c3Ry
PiBQTFVTIE1JTlVTCislbGVmdCA8c3RyPiBPUiBBTkQKKyV0b2tlbiA8YXhpc1R5cGU+IEFYSVNO
QU1FCisldG9rZW4gPHN0cj4gTk9ERVRZUEUgUEkgRlVOQ1RJT05OQU1FIExJVEVSQUwKKyV0b2tl
biA8c3RyPiBWQVJJQUJMRVJFRkVSRU5DRSBOVU1CRVIKKyV0b2tlbiA8c3RyPiBET1RET1QgU0xB
U0hTTEFTSCBOQU1FVEVTVAorJXRva2VuIEVSUk9SCisKKyV0eXBlIDxsb2NhdGlvblBhdGg+IExv
Y2F0aW9uUGF0aAorJXR5cGUgPGxvY2F0aW9uUGF0aD4gQWJzb2x1dGVMb2NhdGlvblBhdGgKKyV0
eXBlIDxsb2NhdGlvblBhdGg+IFJlbGF0aXZlTG9jYXRpb25QYXRoCisldHlwZSA8c3RlcD4gU3Rl
cAorJXR5cGUgPGF4aXNUeXBlPiBBeGlzU3BlY2lmaWVyCisldHlwZSA8c3RlcD4gRGVzY2VuZGFu
dE9yU2VsZgorJXR5cGUgPHN0cj4gTm9kZVRlc3QKKyV0eXBlIDxleHByPiBQcmVkaWNhdGUKKyV0
eXBlIDxwcmVkTGlzdD4gUHJlZGljYXRlTGlzdAorJXR5cGUgPHN0ZXA+IEFiYnJldmlhdGVkU3Rl
cAorJXR5cGUgPGV4cHI+IEV4cHIKKyV0eXBlIDxleHByPiBQcmltYXJ5RXhwcgorJXR5cGUgPGV4
cHI+IEZ1bmN0aW9uQ2FsbAorJXR5cGUgPGFyZ0xpc3Q+IEFyZ3VtZW50TGlzdAorJXR5cGUgPGV4
cHI+IEFyZ3VtZW50CisldHlwZSA8ZXhwcj4gVW5pb25FeHByCisldHlwZSA8ZXhwcj4gUGF0aEV4
cHIKKyV0eXBlIDxleHByPiBGaWx0ZXJFeHByCisldHlwZSA8ZXhwcj4gT3JFeHByCisldHlwZSA8
ZXhwcj4gQW5kRXhwcgorJXR5cGUgPGV4cHI+IEVxdWFsaXR5RXhwcgorJXR5cGUgPGV4cHI+IFJl
bGF0aW9uYWxFeHByCisldHlwZSA8ZXhwcj4gQWRkaXRpdmVFeHByCisldHlwZSA8ZXhwcj4gTXVs
dGlwbGljYXRpdmVFeHByCisldHlwZSA8ZXhwcj4gVW5hcnlFeHByCisKKyUlCisKK0V4cHI6Cisg
ICAgT3JFeHByCisgICAgeworICAgICAgICBfdG9wRXhwciA9ICQxOworICAgIH0KKyAgICA7CisK
K0xvY2F0aW9uUGF0aDoKKyAgICBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAg
JCQtPm1fYWJzb2x1dGUgPSBmYWxzZTsKKyAgICB9CisgICAgfAorICAgIEFic29sdXRlTG9jYXRp
b25QYXRoCisgICAgeworICAgICAgICAkJC0+bV9hYnNvbHV0ZSA9IHRydWU7CisgICAgfQorICAg
IDsKKworQWJzb2x1dGVMb2NhdGlvblBhdGg6CisgICAgJy8nCisgICAgeworICAgICAgICAkJCA9
IG5ldyBMb2NhdGlvblBhdGg7CisgICAgfQorICAgIHwKKyAgICAnLycgUmVsYXRpdmVMb2NhdGlv
blBhdGgKKyAgICB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIHwKKyAgICBEZXNjZW5k
YW50T3JTZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRoCisgICAgeworICAgICAgICAkJCA9ICQyOwor
ICAgICAgICAkJC0+bV9zdGVwcy5pbnNlcnQoMCwgJDEpOworICAgIH0KKyAgICA7CisKK1JlbGF0
aXZlTG9jYXRpb25QYXRoOgorICAgIFN0ZXAKKyAgICB7CisgICAgICAgICQkID0gbmV3IExvY2F0
aW9uUGF0aDsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCAkMSApOworICAgIH0KKyAgICB8
CisgICAgUmVsYXRpdmVMb2NhdGlvblBhdGggJy8nIFN0ZXAKKyAgICB7CisgICAgICAgICQkLT5t
X3N0ZXBzLmFwcGVuZCggJDMgKTsKKyAgICB9CisgICAgfAorICAgIFJlbGF0aXZlTG9jYXRpb25Q
YXRoIERlc2NlbmRhbnRPclNlbGYgU3RlcAorICAgIHsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBw
ZW5kKCAkMiApOworICAgICAgICAkJC0+bV9zdGVwcy5hcHBlbmQoICQzICk7CisgICAgfQorICAg
IDsKKworU3RlcDoKKyAgICBOb2RlVGVzdAorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcCgg
U3RlcDo6Q2hpbGRBeGlzLCAqJDEgKTsKKyAgICAgICAgZGVsZXRlICQxOworICAgIH0KKyAgICB8
CisgICAgTm9kZVRlc3QgUHJlZGljYXRlTGlzdAorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3Rl
cChTdGVwOjpDaGlsZEF4aXMsICokMSwgKiQyICk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICAg
ICAgZGVsZXRlICQyOworICAgIH0KKyAgICB8CisgICAgQXhpc1NwZWNpZmllciBOb2RlVGVzdAor
ICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcCggJDEsICokMiApOworICAgICAgICBkZWxldGUg
JDI7CisgICAgfQorICAgIHwKKyAgICBBeGlzU3BlY2lmaWVyIE5vZGVUZXN0IFByZWRpY2F0ZUxp
c3QKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoICQxLCAqJDIsICAqJDMgKTsKKyAgICAg
ICAgZGVsZXRlICQyOworICAgICAgICBkZWxldGUgJDM7CisgICAgfQorICAgIHwKKyAgICBBYmJy
ZXZpYXRlZFN0ZXAKKyAgICA7CisKK0F4aXNTcGVjaWZpZXI6CisgICAgQVhJU05BTUUKKyAgICB8
CisgICAgJ0AnCisgICAgeworICAgICAgICAkJCA9IFN0ZXA6OkF0dHJpYnV0ZUF4aXM7CisgICAg
fQorICAgIDsKKworTm9kZVRlc3Q6CisgICAgTkFNRVRFU1QKKyAgICB7CisgICAgICAgIGNvbnN0
IGludCBjb2xvbiA9ICQxLT5maW5kKCc6Jyk7CisgICAgICAgIGlmIChjb2xvbiA+IC0xKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgcHJlZml4KCQxLT5sZWZ0KGNvbG9uKSk7CisgICAgICAgICAgICBY
UGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQo
KS5yZXNvbHZlcjsKKyAgICAgICAgICAgIGlmICghcmVzb2x2ZXIgfHwgcmVzb2x2ZXItPmxvb2t1
cE5hbWVzcGFjZVVSSShwcmVmaXgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgZ290TmFt
ZXNwYWNlRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfAorICAgIE5PREVUWVBFICcoJyAnKScKKyAgICB7
CisgICAgICAgICQkID0gbmV3IERlcHJlY2F0ZWRTdHJpbmcoICokMSArICIoKSIgKTsKKyAgICB9
CisgICAgfAorICAgIFBJICcoJyAnKScKKyAgICB8CisgICAgUEkgJygnIExJVEVSQUwgJyknCisg
ICAgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSAqJDEgKyAiICIgKyAqJDM7CisgICAg
ICAgIHMgPSBzLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAkJCA9IG5ldyBEZXByZWNhdGVk
U3RyaW5nKCBzICk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICAgICAgZGVsZXRlICQzOworICAg
IH0KKyAgICA7CisKK1ByZWRpY2F0ZUxpc3Q6CisgICAgUHJlZGljYXRlCisgICAgeworICAgICAg
ICAkJCA9IG5ldyBWZWN0b3I8UHJlZGljYXRlKj47CisgICAgICAgICQkLT5hcHBlbmQoIG5ldyBQ
cmVkaWNhdGUoICQxICkgKTsKKyAgICB9CisgICAgfAorICAgIFByZWRpY2F0ZUxpc3QgUHJlZGlj
YXRlCisgICAgeworICAgICAgICAkJC0+YXBwZW5kKCBuZXcgUHJlZGljYXRlKCAkMiApICk7Cisg
ICAgfQorICAgIDsKKworUHJlZGljYXRlOgorICAgICdbJyBFeHByICddJworICAgIHsKKyAgICAg
ICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworCitEZXNjZW5kYW50T3JTZWxmOgorICAgIFNMQVNI
U0xBU0gKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoIFN0ZXA6OkRlc2NlbmRhbnRPclNl
bGZBeGlzLCAibm9kZSgpIiApOworICAgIH0KKyAgICA7CisKK0FiYnJldmlhdGVkU3RlcDoKKyAg
ICAnLicKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoIFN0ZXA6OlNlbGZBeGlzLCAibm9k
ZSgpIiApOworICAgIH0KKyAgICB8CisgICAgRE9URE9UCisgICAgeworICAgICAgICAkJCA9IG5l
dyBTdGVwKCBTdGVwOjpQYXJlbnRBeGlzLCAibm9kZSgpIiApOworICAgIH0KKyAgICA7CisKK1By
aW1hcnlFeHByOgorICAgIFZBUklBQkxFUkVGRVJFTkNFCisgICAgeworICAgICAgICAkJCA9IG5l
dyBWYXJpYWJsZVJlZmVyZW5jZSggKiQxICk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICB9Cisg
ICAgfAorICAgICcoJyBFeHByICcpJworICAgIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cisg
ICAgfAorICAgIExJVEVSQUwKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0cmluZ0V4cHJlc3Np
b24oICokMSApOworICAgICAgICBkZWxldGUgJDE7CisgICAgfQorICAgIHwKKyAgICBOVU1CRVIK
KyAgICB7CisgICAgICAgICQkID0gbmV3IE51bWJlciggJDEtPnRvRG91YmxlKCkgKTsKKyAgICAg
ICAgZGVsZXRlICQxOworICAgIH0KKyAgICB8CisgICAgRnVuY3Rpb25DYWxsCisgICAgOworCitG
dW5jdGlvbkNhbGw6CisgICAgRlVOQ1RJT05OQU1FICcoJyAnKScKKyAgICB7CisgICAgICAgICQk
ID0gRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkuZ2V0RnVuY3Rpb24oICQxLT5sYXRpbjEoKSApOwor
ICAgICAgICBkZWxldGUgJDE7CisgICAgfQorICAgIHwKKyAgICBGVU5DVElPTk5BTUUgJygnIEFy
Z3VtZW50TGlzdCAnKScKKyAgICB7CisgICAgICAgICQkID0gRnVuY3Rpb25MaWJyYXJ5OjpzZWxm
KCkuZ2V0RnVuY3Rpb24oICQxLT5sYXRpbjEoKSwgKiQzICk7CisgICAgICAgIGRlbGV0ZSAkMTsK
KyAgICAgICAgZGVsZXRlICQzOworICAgIH0KKyAgICA7CisKK0FyZ3VtZW50TGlzdDoKKyAgICBB
cmd1bWVudAorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgVmVjdG9yPEV4cHJlc3Npb24qPjsKKyAg
ICAgICAgJCQtPmFwcGVuZCgkMSk7CisgICAgfQorICAgIHwKKyAgICBBcmd1bWVudExpc3QgJywn
IEFyZ3VtZW50CisgICAgeworICAgICAgICAkJC0+YXBwZW5kKCQzKTsKKyAgICB9CisgICAgOwor
CitBcmd1bWVudDoKKyAgICBFeHByCisgICAgOworCisKK1VuaW9uRXhwcjoKKyAgICBQYXRoRXhw
cgorICAgIHwKKyAgICBVbmlvbkV4cHIgJ3wnIFBhdGhFeHByCisgICAgeworICAgICAgICAkJCA9
IG5ldyBVbmlvbjsKKyAgICAgICAgJCQtPmFkZFN1YkV4cHJlc3Npb24oICQxICk7CisgICAgICAg
ICQkLT5hZGRTdWJFeHByZXNzaW9uKCAkMyApOworICAgIH0KKyAgICA7CisKK1BhdGhFeHByOgor
ICAgIExvY2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfAor
ICAgIEZpbHRlckV4cHIKKyAgICB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwKKyAg
ICBGaWx0ZXJFeHByICcvJyBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAgJDMt
Pm1fYWJzb2x1dGUgPSB0cnVlOworICAgICAgICAkJCA9IG5ldyBQYXRoKCBzdGF0aWNfY2FzdDxG
aWx0ZXIgKj4oICQxICksICQzICk7CisgICAgfQorICAgIHwKKyAgICBGaWx0ZXJFeHByIERlc2Nl
bmRhbnRPclNlbGYgUmVsYXRpdmVMb2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQzLT5tX3N0
ZXBzLmluc2VydCgwLCAkMik7CisgICAgICAgICQzLT5tX2Fic29sdXRlID0gdHJ1ZTsKKyAgICAg
ICAgJCQgPSBuZXcgUGF0aCggc3RhdGljX2Nhc3Q8RmlsdGVyICo+KCAkMSApLCAkMyApOworICAg
IH0KKyAgICA7CisKK0ZpbHRlckV4cHI6CisgICAgUHJpbWFyeUV4cHIKKyAgICB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwKKyAgICBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0Cisg
ICAgeworICAgICAgICAkJCA9IG5ldyBGaWx0ZXIoICQxLCAqJDIgKTsKKyAgICB9CisgICAgOwor
CitPckV4cHI6CisgICAgQW5kRXhwcgorICAgIHwKKyAgICBPckV4cHIgT1IgQW5kRXhwcgorICAg
IHsKKyAgICAgICAgJCQgPSBuZXcgTG9naWNhbE9wKCBMb2dpY2FsT3A6Ok9QX09yLCAkMSwgJDMg
KTsKKyAgICB9CisgICAgOworCitBbmRFeHByOgorICAgIEVxdWFsaXR5RXhwcgorICAgIHwKKyAg
ICBBbmRFeHByIEFORCBFcXVhbGl0eUV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IExvZ2lj
YWxPcCggTG9naWNhbE9wOjpPUF9BbmQsICQxLCAkMyApOworICAgIH0KKyAgICA7CisKK0VxdWFs
aXR5RXhwcjoKKyAgICBSZWxhdGlvbmFsRXhwcgorICAgIHwKKyAgICBFcXVhbGl0eUV4cHIgRVFP
UCBSZWxhdGlvbmFsRXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgRXFUZXN0T3AoICQyLCAk
MSwgJDMgKTsKKyAgICB9CisgICAgOworCitSZWxhdGlvbmFsRXhwcjoKKyAgICBBZGRpdGl2ZUV4
cHIKKyAgICB8CisgICAgUmVsYXRpb25hbEV4cHIgUkVMT1AgQWRkaXRpdmVFeHByCisgICAgewor
ICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoICQyLCAkMSwgJDMgKTsKKyAgICB9CisgICAgOwor
CitBZGRpdGl2ZUV4cHI6CisgICAgTXVsdGlwbGljYXRpdmVFeHByCisgICAgfAorICAgIEFkZGl0
aXZlRXhwciBQTFVTIE11bHRpcGxpY2F0aXZlRXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcg
TnVtZXJpY09wKCBOdW1lcmljT3A6Ok9QX0FkZCwgJDEsICQzICk7CisgICAgfQorICAgIHwKKyAg
ICBBZGRpdGl2ZUV4cHIgTUlOVVMgTXVsdGlwbGljYXRpdmVFeHByCisgICAgeworICAgICAgICAk
JCA9IG5ldyBOdW1lcmljT3AoIE51bWVyaWNPcDo6T1BfU3ViLCAkMSwgJDMgKTsKKyAgICB9Cisg
ICAgOworCitNdWx0aXBsaWNhdGl2ZUV4cHI6CisgICAgVW5hcnlFeHByCisgICAgfAorICAgIE11
bHRpcGxpY2F0aXZlRXhwciBNVUxPUCBVbmFyeUV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3
IE51bWVyaWNPcCggJDIsICQxLCAkMyApOworICAgIH0KKyAgICA7CisKK1VuYXJ5RXhwcjoKKyAg
ICBVbmlvbkV4cHIKKyAgICB8CisgICAgTUlOVVMgVW5hcnlFeHByCisgICAgeworICAgICAgICAk
JCA9IG5ldyBOZWdhdGl2ZTsKKyAgICAgICAgJCQtPmFkZFN1YkV4cHJlc3Npb24oICQyICk7Cisg
ICAgfQorICAgIDsKKworJSUKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRo
IHsKKyAgICAKK0V4cHJlc3Npb24qIHBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVt
ZW50LCBFeGNlcHRpb25Db2RlJiBjb2RlKQoreworICAgIGdvdE5hbWVzcGFjZUVycm9yID0gZmFs
c2U7CisKKyAgICBpbml0VG9rZW5pemVyKHN0YXRlbWVudCk7CisgICAgCisgICAgaW50IHBhcnNl
RXJyb3IgPSB5eXBhcnNlKCk7CisgICAgCisgICAgaWYgKHBhcnNlRXJyb3IpIHsKKyAgICAgICAg
aWYgKGdvdE5hbWVzcGFjZUVycm9yKQorICAgICAgICAgICAgY29kZSA9IE5BTUVTUEFDRV9FUlI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSBJTlZBTElEX0VYUFJFU1NJT05fRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIF90b3BFeHByOwor
fQorCit9Cit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBh
dGgvaW1wbC91dGlsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiB1dGls
LmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQg
QU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisg
KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaWZuZGVmIFVUSUxfSAorI2RlZmluZSBVVElMX0gKKworI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIk5v
ZGUuaCIKKworI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBYUGF0aCB7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxOb2RlPiA+
IE5vZGVTZXQ7CisgICAgCisvKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaXMgdGhl
IHJvb3Qgbm9kZS4KKyAqLworYm9vbCBpc1Jvb3REb21Ob2RlKE5vZGUgKm5vZGUpOworCisvKiBA
cmV0dXJuIHRoZSAnc3RyaW5nLXZhbHVlJyBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBzcGVjaWZpZWQg
YnkKKyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoCisgKi8KK1N0cmluZyBzdHJpbmdWYWx1
ZShOb2RlICpub2RlKTsKKworLyogQHJldHVybiBhbGwgYW5jZXN0b3Igbm9kZXMgb2YgdGhlIGdp
dmVuIG5vZGUsIGluIGRvY3VtZW50IG9yZGVyLgorICovCitOb2RlU2V0IGdldENoaWxkcmVuUmVj
dXJzaXZlbHkoTm9kZSAqbm9kZSk7CisKKy8qIEByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gbm9k
ZSBpcyBhIHZhbGlkIGNvbnRleHQgbm9kZQorICovCitib29sIGlzVmFsaWRDb250ZXh0Tm9kZSgg
V2ViQ29yZTo6Tm9kZSAqbm9kZSApOworCit9Cit9CisKKyNlbmRpZiAvLyBVVElMX0gKKwpJbmRl
eDogV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvaW1wbC9wYXRoLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXRo
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAw
NSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKKyNpbmNsdWRlICJwYXRoLmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitGaWx0ZXI6OkZpbHRlcihFeHBy
ZXNzaW9uICpleHByLCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMpCisgICAg
OiBtX2V4cHIoZXhwciksCisgICAgbV9wcmVkaWNhdGVzKHByZWRpY2F0ZXMpCit7Cit9CisKK0Zp
bHRlcjo6fkZpbHRlcigpCit7CisgICAgZGVsZXRlIG1fZXhwcjsKKyAgICBkZWxldGVBbGxWYWx1
ZXMobV9wcmVkaWNhdGVzKTsKK30KKworVmFsdWUgRmlsdGVyOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICBWYWx1ZSB2ID0gbV9leHByLT5ldmFsdWF0ZSgpOworICAgIAorICAgIGlmICghdi5p
c05vZGVzZXQoKSkgeworICAgICAgICBpZiAoIW1fcHJlZGljYXRlcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBMT0coWFBhdGgsICJJZ25vcmluZyBwcmVkaWNhdGVzIGZvciBmaWx0ZXIgc2luY2Ug
ZXhwcmVzc2lvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byBhIG5vZGVzZXQhIik7CisKKyAgICAgICAg
cmV0dXJuIHY7CisgICAgfQorCisgICAgTm9kZVNldCBpbk5vZGVzID0gdi50b05vZGVTZXQoKSwg
b3V0Tm9kZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlZGljYXRlcy5zaXpl
KCk7IGkrKykgeworICAgICAgICBvdXROb2Rlcy5jbGVhcigpOworICAgICAgICBFeHByZXNzaW9u
OjpldmFsdWF0aW9uQ29udGV4dCgpLnNpemUgPSBpbk5vZGVzLnNpemUoKTsKKyAgICAgICAgRXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbiA9IDA7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5Ob2Rlcy5zaXplKCk7IGorKykgeworICAg
ICAgICAgICAgTm9kZSAqbm9kZSA9IGluTm9kZXNbal0uZ2V0KCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICArK0V4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb247Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3ByZWRpY2F0ZXNbaV0tPmV2YWx1YXRlKCkp
CisgICAgICAgICAgICAgICAgb3V0Tm9kZXMuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAg
ICAgIGluTm9kZXMgPSBvdXROb2RlczsKKyAgICB9CisKKyAgICByZXR1cm4gVmFsdWUob3V0Tm9k
ZXMpOworfQorCitMb2NhdGlvblBhdGg6OkxvY2F0aW9uUGF0aCgpCisgICAgOiBtX2Fic29sdXRl
KCBmYWxzZSApCit7Cit9CisKK0xvY2F0aW9uUGF0aDo6fkxvY2F0aW9uUGF0aCgpCit7CisgICAg
ZGVsZXRlQWxsVmFsdWVzKG1fc3RlcHMpOworfQorCit2b2lkIExvY2F0aW9uUGF0aDo6b3B0aW1p
emUoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0ZXBzLnNpemUoKTsgaSsr
KQorICAgICAgICBtX3N0ZXBzW2ldLT5vcHRpbWl6ZSgpOworfQorCitWYWx1ZSBMb2NhdGlvblBh
dGg6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmIChtX2Fic29sdXRlKSB7CisgICAgICAg
IExPRyhYUGF0aCwgIkV2YWx1YXRpbmcgYWJzb2x1dGUgcGF0aCBleHByZXNzaW9uIHdpdGggJWkg
bG9jYXRpb24gc3RlcHMuXG4iLCBtX3N0ZXBzLnNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgTE9HKFhQYXRoLCAiRXZhbHVhdGluZyByZWxhdGl2ZSBwYXRoIGV4cHJlc3Npb24gd2l0aCAl
aSBsb2NhdGlvbiBzdGVwcy5cbiIsIG1fc3RlcHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBOb2Rl
U2V0IGluRG9tTm9kZXMsIG91dERvbU5vZGVzOworCisgICAgLyogRm9yIGFic29sdXRlIGxvY2F0
aW9uIHBhdGhzLCB0aGUgY29udGV4dCBub2RlIGlzIGlnbm9yZWQgLSB0aGUKKyAgICAgKiBkb2N1
bWVudCdzIHJvb3Qgbm9kZSBpcyB1c2VkIGluc3RlYWQuCisgICAgICovCisgICAgTm9kZSAqY29u
dGV4dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKyAgICBpZiAobV9h
YnNvbHV0ZSAmJiBjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpIAor
ICAgICAgICBjb250ZXh0ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgpOworCisgICAgaW5Eb21O
b2Rlcy5hcHBlbmQoY29udGV4dCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc3RlcHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RlcCAqc3RlcCA9IG1fc3RlcHNbaV07
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluRG9tTm9kZXMuc2l6ZSgpOyBq
KyspIHsKKyAgICAgICAgICAgIE5vZGVTZXQgbWF0Y2hlcyA9IHN0ZXAtPmV2YWx1YXRlKGluRG9t
Tm9kZXNbal0uZ2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXREb21Ob2Rlcy5h
cHBlbmQobWF0Y2hlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGluRG9tTm9kZXMg
PSBvdXREb21Ob2RlczsKKyAgICAgICAgb3V0RG9tTm9kZXMuY2xlYXIoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gVmFsdWUoaW5Eb21Ob2Rlcyk7Cit9CisKK1BhdGg6OlBhdGgoIEZpbHRlciAqZmls
dGVyLCBMb2NhdGlvblBhdGggKnBhdGggKQorICAgIDogbV9maWx0ZXIoIGZpbHRlciApLAorICAg
IG1fcGF0aCggcGF0aCApCit7Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9m
aWx0ZXI7CisgICAgZGVsZXRlIG1fcGF0aDsKK30KKworVmFsdWUgUGF0aDo6ZG9FdmFsdWF0ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKCk7Cit9CisKK30KK30KSW5kZXg6IFdlYkNvcmUv
eHBhdGgvWFBhdGhSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhS
ZXN1bHQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogWFBhdGhSZXN1bHQuY3BwIC0g
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNs
dWRlICJYUGF0aEV2YWx1YXRvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKworY2xhc3Mg
SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1Ymxp
YzoKKyAgICBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSAqbm9kZSwg
WFBhdGhSZXN1bHQgKnJlc3VsdCkgCisgICAgICAgIDogbV9ub2RlKG5vZGUpLCBtX3Jlc3VsdChy
ZXN1bHQpIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJv
b2wpIHsgbV9yZXN1bHQtPmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7IH0KK3ByaXZhdGU6Cisg
ICAgRXZlbnRUYXJnZXROb2RlICptX25vZGU7CisgICAgWFBhdGhSZXN1bHQgKm1fcmVzdWx0Owor
fTsKKworWFBhdGhSZXN1bHQ6OlhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJn
ZXQsIGNvbnN0IFZhbHVlICZ2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX2V2
ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0KQoreworICAgIG1fZXZlbnRMaXN0ZW5lciA9IG5ldyBJbnZh
bGlkYXRpbmdFdmVudExpc3RlbmVyKG1fZXZlbnRUYXJnZXQuZ2V0KCksIHRoaXMpOworICAgIG1f
ZXZlbnRUYXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlm
aWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOworICAgICAgICAKKyAgICBzd2l0Y2gg
KG1fdmFsdWUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgVmFsdWU6OkJvb2xlYW46CisgICAgICAg
ICAgICBtX3Jlc3VsdFR5cGUgPSBCT09MRUFOX1RZUEU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBWYWx1ZTo6TnVtYmVyOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gTlVN
QkVSX1RZUEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZTo6U3RyaW5n
OgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gU1RSSU5HX1RZUEU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZTo6Tm9kZXNldDoKKyAgICAgICAgICAgIG1fcmVzdWx0
VHlwZSA9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEU7CisgICAgICAgICAgICBtX25vZGVT
ZXRQb3NpdGlvbiA9IDA7CisgICAgICAgICAgICBtX25vZGVTZXQgPSBtX3ZhbHVlLnRvTm9kZVNl
dCgpOworICAgICAgICAgICAgbV9pbnZhbGlkSXRlcmF0b3JTdGF0ZSA9IGZhbHNlOworICAgIH0K
K30KKworWFBhdGhSZXN1bHQ6On5YUGF0aFJlc3VsdCgpCit7CisgICAgaWYgKG1fZXZlbnRUYXJn
ZXQpCisgICAgICAgIG1fZXZlbnRUYXJnZXQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnROYW1l
czo6RE9NU3VidHJlZU1vZGlmaWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2Up
OworfQorCit2b2lkIFhQYXRoUmVzdWx0Ojpjb252ZXJ0VG8oIHVuc2lnbmVkIHNob3J0IHR5cGUs
IGludCAmZXhjZXB0aW9uY29kZSApCit7CisgICAgc3dpdGNoICggdHlwZSApIHsKKyAgICAgICAg
Y2FzZSBBTllfVFlQRToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5VTUJFUl9U
WVBFOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIG1fdmFs
dWUgPSBWYWx1ZSggbV92YWx1ZS50b051bWJlcigpICk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTVFJJTkdfVFlQRToKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IHR5cGU7
CisgICAgICAgICAgICBtX3ZhbHVlID0gVmFsdWUoIG1fdmFsdWUudG9TdHJpbmcoKSApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQk9PTEVBTl9UWVBFOgorICAgICAgICAgICAg
bV9yZXN1bHRUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBWYWx1ZShtX3ZhbHVl
LnRvQm9vbGVhbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVOT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEU6CisgICAgICAgIGNhc2UgT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEU6CisgICAgICAgIGNhc2UgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRToKKyAgICAg
ICAgY2FzZSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRToKKyAgICAgICAgY2FzZSBBTllfVU5P
UkRFUkVEX05PREVfVFlQRToKKyAgICAgICAgY2FzZSBGSVJTVF9PUkRFUkVEX05PREVfVFlQRToK
KyAgICAgICAgICAgIGlmICghbV92YWx1ZS5pc05vZGVzZXQoKSkgeworICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX3Jlc3VsdFR5cGUgPSB0eXBlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90IGNvbnZlcnQgWFBhdGhSZXN1bHQg
dG8gdW5rbm93biB0eXBlICcldSchIiwgdHlwZSk7CisgICAgfQorfQorCit1bnNpZ25lZCBzaG9y
dCBYUGF0aFJlc3VsdDo6cmVzdWx0VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVzdWx0
VHlwZTsKK30KKworZG91YmxlIFhQYXRoUmVzdWx0OjpudW1iZXJWYWx1ZShpbnQgJmV4Y2VwdGlv
bmNvZGUpIGNvbnN0Cit7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBOVU1CRVJfVFlQRSkgewor
ICAgICAgICBleGNlcHRpb25jb2RlID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAwLjA7Cisg
ICAgfQorICAgIHJldHVybiBtX3ZhbHVlLnRvTnVtYmVyKCk7Cit9CisKK1N0cmluZyBYUGF0aFJl
c3VsdDo6c3RyaW5nVmFsdWUoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdAoreworICAgIGlmICgg
cmVzdWx0VHlwZSgpICE9IFNUUklOR19UWVBFICkgeworICAgICAgICBleGNlcHRpb25jb2RlID0g
VFlQRV9FUlI7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
dmFsdWUudG9TdHJpbmcoKTsKK30KKworYm9vbCBYUGF0aFJlc3VsdDo6Ym9vbGVhblZhbHVlKGlu
dCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sKKyAgICBpZiAoIHJlc3VsdFR5cGUoKSAhPSBCT09M
RUFOX1RZUEUgKSB7CisgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gbV92YWx1ZS50b0Jvb2xlYW4oKTsKK30K
KworTm9kZSAqWFBhdGhSZXN1bHQ6OnNpbmdsZU5vZGVWYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUp
IGNvbnN0Cit7CisgICAgaWYgKCByZXN1bHRUeXBlKCkgIT0gQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEUgJiYKKyAgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSAp
IHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgIAorICAgIE5vZGVTZXQgbm9kZXMgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOworICAg
IGlmIChub2Rlcy5zaXplICgpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIG5vZGVzWzBdLmdldCgpOworfQorCit2b2lkIFhQYXRoUmVzdWx0OjppbnZh
bGlkYXRlSXRlcmF0b3JTdGF0ZSgpCit7IAorICAgIG1faW52YWxpZEl0ZXJhdG9yU3RhdGUgPSB0
cnVlOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50VGFyZ2V0KTsKKyAgICBBU1NFUlQobV9ldmVu
dExpc3RlbmVyKTsKKyAgICAKKyAgICBtX2V2ZW50VGFyZ2V0LT5yZW1vdmVFdmVudExpc3RlbmVy
KEV2ZW50TmFtZXM6OkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCBtX2V2ZW50TGlzdGVuZXIuZ2V0
KCksIGZhbHNlKTsKKyAgICAKKyAgICBtX2V2ZW50VGFyZ2V0ID0gMDsKK30KKworYm9vbCBYUGF0
aFJlc3VsdDo6aW52YWxpZEl0ZXJhdG9yU3RhdGUoKSBjb25zdAoreworICAgIGlmIChyZXN1bHRU
eXBlKCkgIT0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAmJgorICAgICAgICByZXN1bHRU
eXBlKCkgIT0gT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gbV9pbnZhbGlkSXRlcmF0b3JTdGF0ZTsKK30KKwordW5zaWdu
ZWQgbG9uZyBYUGF0aFJlc3VsdDo6c25hcHNob3RMZW5ndGgoaW50ICZleGNlcHRpb25jb2RlKSBj
b25zdAoreworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRSAmJgorICAgICAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92YWx1ZS50b05vZGVTZXQoKS5zaXplKCk7Cit9CisK
K05vZGUgKlhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dChFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgJiYKKyAg
ICAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKSB7CisgICAg
ICAgIGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBp
ZiAobV9pbnZhbGlkSXRlcmF0b3JTdGF0ZSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKG1fbm9kZVNldFBv
c2l0aW9uICsgMSA+PSBtX25vZGVTZXQuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IE5vZGUgKm5vZGUgPSBtX25vZGVTZXRbbV9ub2RlU2V0UG9zaXRpb25dLmdldCgpOworICAgIAor
ICAgIG1fbm9kZVNldFBvc2l0aW9uKys7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworTm9kZSAq
WFBhdGhSZXN1bHQ6OnNuYXBzaG90SXRlbSggdW5zaWduZWQgbG9uZyBpbmRleCwgaW50ICZleGNl
cHRpb25jb2RlICkKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgJiYKKyAgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRSkgeworICAgICAgICBleGNlcHRpb25jb2RlID0gVFlQRV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBOb2RlU2V0IG5vZGVzID0gbV92YWx1ZS50b05v
ZGVTZXQoKTsKKyAgICBpZiAoaW5kZXggPj0gbm9kZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gbm9kZXNbaW5kZXhdLmdldCgpOworfQorCit9CisKSW5kZXg6
IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L1hQYXRoUmVzdWx0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBYUGF0aFJlc3VsdC5oIC0g
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBYUGF0aFJlc3VsdF9ICisjZGVmaW5lIFhQYXRoUmVzdWx0X0gKKworI2luY2x1
ZGUgIlNoYXJlZC5oIgorCisjaW5jbHVkZSAiaW1wbC9leHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBOb2RlOwor
Y2xhc3MgRXZlbnRUYXJnZXROb2RlOworY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKworY2xhc3MgWFBh
dGhSZXN1bHQgOiBwdWJsaWMgU2hhcmVkPFhQYXRoUmVzdWx0PgoreworcHVibGljOgorICAgIGVu
dW0gWFBhdGhSZXN1bHRUeXBlIHsKKyAgICAgICAgQU5ZX1RZUEUgPSAwLAorICAgICAgICBOVU1C
RVJfVFlQRSA9IDEsCisgICAgICAgIFNUUklOR19UWVBFID0gMiwKKyAgICAgICAgQk9PTEVBTl9U
WVBFID0gMywKKyAgICAgICAgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQsCisgICAg
ICAgIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNSwKKyAgICAgICAgVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSA9IDYsCisgICAgICAgIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
ID0gNywKKyAgICAgICAgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4LAorICAgICAgICBGSVJT
VF9PUkRFUkVEX05PREVfVFlQRSA9IDkKKyAgICB9OworICAgIAorICAgIFhQYXRoUmVzdWx0KEV2
ZW50VGFyZ2V0Tm9kZSAqZXZlbnRUYXJnZXQsIGNvbnN0IFhQYXRoOjpWYWx1ZSAmdmFsdWUpOwor
ICAgIH5YUGF0aFJlc3VsdCgpOworICAgIAorICAgIHZvaWQgY29udmVydFRvKHVuc2lnbmVkIHNo
b3J0IHR5cGUsIGludCAmZXhjZXB0aW9uY29kZSk7CisKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1
bHRUeXBlKCkgY29uc3Q7CisKKyAgICBkb3VibGUgbnVtYmVyVmFsdWUoIGludCAmZXhjZXB0aW9u
Y29kZSApIGNvbnN0OworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSggaW50ICZleGNlcHRpb25jb2Rl
ICkgY29uc3Q7CisgICAgYm9vbCBib29sZWFuVmFsdWUoIGludCAmZXhjZXB0aW9uY29kZSApIGNv
bnN0OworICAgIE5vZGUgKnNpbmdsZU5vZGVWYWx1ZSggaW50ICZleGNlcHRpb25jb2RlICkgY29u
c3Q7CisKKyAgICBib29sIGludmFsaWRJdGVyYXRvclN0YXRlKCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgbG9uZyBzbmFwc2hvdExlbmd0aChpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0OworICAgIE5v
ZGUgKml0ZXJhdGVOZXh0KGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgTm9kZSAqc25hcHNob3RJ
dGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisKKyAgICB2b2lk
IGludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7Citwcml2YXRlOgorICAgIFhQYXRoOjpWYWx1ZSBt
X3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbm9kZVNldFBvc2l0aW9uOworICAgIFhQYXRoOjpOb2Rl
U2V0IG1fbm9kZVNldDsKKyAgICB1bnNpZ25lZCBzaG9ydCBtX3Jlc3VsdFR5cGU7CisgICAgYm9v
bCBtX2ludmFsaWRJdGVyYXRvclN0YXRlOworICAgIFJlZlB0cjxFdmVudFRhcmdldE5vZGU+IG1f
ZXZlbnRUYXJnZXQ7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsK
K307CisKK30KKworI2VuZGlmIC8vIFhQYXRoUmVzdWx0X0gKKwpJbmRleDogV2ViQ29yZS94cGF0
aC9YUGF0aEV4cHJlc3Npb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhF
eHByZXNzaW9uLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNz
aW9uLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4cGF0aCB7CisKKyAgICBpbnRlcmZhY2Ug
WFBhdGhFeHByZXNzaW9uIHsKKyAgICAgICAgWFBhdGhSZXN1bHQgZXZhbHVhdGUoaW4gTm9kZSBj
b250ZXh0Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVuc2lnbmVkIHNo
b3J0IHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aFJlc3VsdCBp
blJlc3VsdCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgIH07Cit9Cklu
ZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBh
dGgvWFBhdGhFdmFsdWF0b3IuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIHhwYXRoIHsKKwor
ICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3RvciwgQ2FuQmVDb25zdHJ1Y3RlZF0gWFBh
dGhFdmFsdWF0b3IgeworICAgICAgICBYUGF0aEV4cHJlc3Npb24gY3JlYXRlRXhwcmVzc2lvbihp
biBET01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gWFBhdGhOU1Jlc29sdmVyIHJlc29sdmVyKQorICAgICAgICAgICAgcmFpc2Vz
KGNvcmU6OkRPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgWFBhdGhOU1Jlc29sdmVyIGNyZWF0ZU5T
UmVzb2x2ZXIoaW4gTm9kZSBub2RlUmVzb2x2ZXIpOworCisgICAgICAgIFhQYXRoUmVzdWx0IGV2
YWx1YXRlKGluIERPTVN0cmluZyBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBOb2RlIGNvbnRleHROb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gWFBhdGhOU1Jlc29sdmVyIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBYUGF0aFJlc3VsdCBpblJlc3VsdCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKwor
bW9kdWxlIHhwYXRoIHsKKworICAgIGludGVyZmFjZSBYUGF0aE5TUmVzb2x2ZXIgeworICAgICAg
ICBET01TdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKGluIERPTVN0cmluZyBwcmVmaXgpOworICAg
IH07Cit9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTQxODIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI4OCBAQAorMjAwNi0wNS0wNCAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAbWFjLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MzgKKyAgICAgICAgU3VwcG9ydCBNb3ppbGxhJ3MgWFBhdGhFdmFsdWF0b3Igb2JqZWN0LgorICAg
ICAgICAKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICBHZW5lcmF0ZSBY
UGF0aCBncmFtbWFyLCBhbmQgSmF2YVNjcmlwdCB3cmFwcGVycy4KKyAgICAgICAgCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZp
bGVzIHRvIHByb2plY3QKKyAgICAgICAgCisgICAgICAgICogYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwOgorICAgICAgICAoS0pTOjopOgorICAgICAgICAoS0pTOjpzZXRET01FeGNlcHRpb24p
OgorICAgICAgICBIYW5kbGUgc2V0dGluZyBYUGF0aCBleGNlcHRpb25zLgorICAgICAgICAKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgSnVzdCByZXR1cm4gbmlsIGZv
ciBub3cgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgd3JhcHBlciBmb3IgCisgICAgICAgIFhQYXRo
IG5hbWVzcGFjZSBub2Rlcy4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtOgorICAgICAgICBBZGQgWFBhdGggdHlwZXMuIEFsc28gYWRkIGEgIkNhbkJlQ29u
c3RydWN0ZWQiIGV4dGVuZGVkIGF0dHJpYnV0ZQorICAgICAgICBmb3IgaW50ZXJmYWNlcyB0aGF0
IGNhbiBiZSBjb25zdHJ1Y3RlZCBkaXJlY3RseS4KKyAgICAgICAgCisgICAgICAgICogYnJpZGdl
L21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbToKKyAgICAgICAgKGluaXRpYWxpemVMb2dnaW5nQ2hh
bm5lbHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIEluaXRpYWxpemUgTG9nWFBhdGggY2hhbm5lbC4K
KyAgICAgICAgCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpoYXNGZWF0dXJlKToKKyAgICAgICAgU3VwcG9y
dCAieHBhdGgiIHZlcnNpb24gIjMuMCIuCisgICAgICAgIAorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBvcnROb2RlKToKKyAgICAgICAgSWdub3Jl
IFhQYXRoIG5hbWVzcGFjZSBub2Rlcy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6Y3JlYXRlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3Jl
YXRlTlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZXZhbHVhdGUpOgor
ICAgICAgICBOZXcgZnVuY3Rpb25zIHdoaWNoIGNhbGwgZG93biB0byBhIGxhemlseSBjcmVhdGVk
IFhQYXRoRXZhbHVhdG9yLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIEFk
ZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5pZGw6CisgICAgICAgIEFkZCBYUGF0aCBtZXRob2RzLgorICAgICAgICAKKyAgICAgICAgKiBk
b20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6KToKKyAgICAgICAgQWRkIFhQQVRI
X05BTUVTUEFDRV9OT0RFIHR5cGUuCisgICAgICAgIAorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0TWFya3VwKToKKyAgICAgICAgSWdub3JlIFhQ
YXRoIG5hbWVzcGFjZSBub2Rlcy4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9ET01XaW5kb3cu
aWRsOgorICAgICAgICBBZGQgY29uc3RydWN0b3JzIGZvciBYUGF0aEV2YWx1YXRvciBhbmQgWFBh
dGhSZXN1bHQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFhQYXRoIGxvZyBjaGFubmVs
CisgICAgICAgIAorICAgICAgICAqIHhwYXRoOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0
aEV2YWx1YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6
OmNyZWF0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmNy
ZWF0ZU5TUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmV2YWx1
YXRlKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV2YWx1YXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aEV4cHJlc3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4
cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmlkbDog
QWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZlcik6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAg
ICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRo
TlNSZXNvbHZlci5pZGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTmFtZXNwYWNlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6WFBhdGhOYW1lc3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6On5YUGF0aE5hbWVzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpwcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhO
YW1lc3BhY2U6Om5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpu
YW1lc3BhY2VVUkkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBl
KToKKyAgICAgICAgKiB4cGF0aC9YUGF0aE5hbWVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiB4
cGF0aC9YUGF0aFJlc3VsdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW52YWxpZGF0
aW5nRXZlbnRMaXN0ZW5lcjo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6WFBhdGhSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGhSZXN1bHQ6On5YUGF0aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3Vs
dDo6Y29udmVydFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpyZXN1bHRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpudW1iZXJWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGhSZXN1bHQ6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3Vs
dDo6c2luZ2xlTm9kZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppbnZh
bGlkYXRlSXRlcmF0b3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aW52
YWxpZEl0ZXJhdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBz
aG90TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKToKKyAgICAgICAg
KiB4cGF0aC9YUGF0aFJlc3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVz
dWx0OjopOgorICAgICAgICAqIHhwYXRoL1hQYXRoUmVzdWx0LmlkbDogQWRkZWQuCisgICAgICAg
ICogeHBhdGgvaW1wbDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIu
eTogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9leHByZXNzaW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6Omlz
Tm9kZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzQm9vbGVhbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZh
bHVlOjp0b05vZGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b0Jvb2xl
YW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b051bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RXhwcmVzc2lvbjo6RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RXhwcmVzc2lvbjo6fkV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJl
c3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjph
ZGRTdWJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpv
cHRpbWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6c3ViRXhwckNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpzdWJFeHByKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjppc0NvbnN0YW50KToKKyAgICAgICAg
KiB4cGF0aC9pbXBsL2V4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RXZhbHVhdGlvbkNvbnRleHQ6OkV2YWx1YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYWx1ZTo6KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkludGVydmFsOjpJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6SW50ZXJ2YWw6OmNvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpJbnRlcnZhbDo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1bmN0aW9uOjpzZXRBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
bmN0aW9uOjpzZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJn
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJnQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5MYXN0Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5M
YXN0Ojppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Qb3NpdGlvbjo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuUG9zaXRpb246OmlzQ29u
c3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxvY2FsTmFtZTo6aXNDb25zdGFu
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTG9jYWxOYW1lOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lc3BhY2VVUkk6OmlzQ29uc3RhbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWVzcGFjZVVSSTo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZTo6aXNDb25zdGFudCk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuTmFtZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RnVuQ291bnQ6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
bkNvdW50Ojppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdHJpbmc6
OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbmNhdDo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3RhcnRzV2l0aDo6ZG9FdmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ29udGFpbnM6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0JlZm9yZTo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nQWZ0ZXI6OmRvRXZhbHVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZzo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3RyaW5nTGVuZ3RoOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Ob3JtYWxpemVTcGFjZTo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuVHJhbnNsYXRlOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Cb29sZWFuOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpGdW5Ob3Q6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1blRydWU6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blRy
dWU6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmRvRXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmlzQ29uc3RhbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkZhbHNlOjpkb0V2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5GYWxzZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuTnVtYmVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpGdW5TdW06OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkZsb29y
Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5DZWlsaW5nOjpkb0V2
YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Sb3VuZDo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpzZWxmKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbkxpYnJhcnk6OkZ1bmN0aW9uTGlicmFyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpnZXRGdW5jdGlvbik6Cisg
ICAgICAgICogeHBhdGgvaW1wbC9mdW5jdGlvbnMuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgv
aW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXJzZWRTdGF0ZW1lbnQ6OlBhcnNlZFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6UGFyc2VkU3RhdGVtZW50Ojp+UGFyc2VkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpQYXJzZWRTdGF0ZW1lbnQ6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpQYXJzZWRTdGF0ZW1lbnQ6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXJzZWRTdGF0ZW1lbnQ6OmV2YWx1YXRlKToKKyAgICAgICAgICogeHBhdGgvaW1wbC9wYXJz
ZWRzdGF0ZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9wYXRoLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZpbHRlcjo6fkZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RmlsdGVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlv
blBhdGg6OkxvY2F0aW9uUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25Q
YXRoOjp+TG9jYXRpb25QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBh
dGg6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6OmRv
RXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6OlBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpQYXRoOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3BhdGguaDogQWRkZWQu
CisgICAgICAgICogeHBhdGgvaW1wbC9wcmVkaWNhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpOdW1iZXI6Ok51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
TnVtYmVyOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1iZXI6OmRv
RXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Npb246OlN0
cmluZ0V4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Np
b246OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Np
b246OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5lZ2F0aXZlOjpkb0V2
YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Ok51bWVyaWNPcCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RXFUZXN0T3A6OkVxVGVzdE9wKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpF
cVRlc3RPcDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6
Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjpMb2dpY2FsT3Ap
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6c2hvcnRDaXJjdWl0T24pOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6aXNDb25zdGFudCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjpvcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OkxvZ2ljYWxPcDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
VW5pb246Om9wTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VW5pb246OmRvRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6UHJlZGljYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6On5QcmVkaWNhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlByZWRpY2F0ZTo6b3B0aW1pemUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvcHJlZGlj
YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFcVRlc3RPcDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpMb2dpY2FsT3A6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC9zdGVwLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6YXhpc0FzU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpT
dGVwOjp+U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6ZXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpTdGVwOjpub2RlVGVzdE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlN0ZXA6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpu
YW1lc3BhY2VGcm9tTm9kZXRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OnBy
aW1hcnlOb2RlVHlwZSk6CisgICAgICAgICogeHBhdGgvaW1wbC9zdGVwLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC90b2tl
bml6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbjo6VG9rZW4p
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6c2VsZik6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpjaGFyQ2F0KToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmlzQXhpc05hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlRva2VuaXplcjo6aXNOb2RlVHlwZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlRva2VuaXplcjo6aXNPcGVyYXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlRva2VuaXplcjo6c2tpcFdTKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tl
bml6ZXI6Om1ha2VUb2tlbkFuZEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRv
a2VuaXplcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VG9rZW5pemVyOjpwZWVrQWhlYWRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlRva2VuaXplcjo6cGVla0N1ckhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9r
ZW5pemVyOjpsZXhTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6
bGV4TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmxleE5DTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpsZXhRTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpuZXh0VG9rZW5JbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlRva2VuaXplcjo6VG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpUb2tlbml6ZXI6On5Ub2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRv
a2VuaXplcjo6cmVzZXQpOgorICAgICAgICAoeHBhdGh5eWxleCk6CisgICAgICAgIChpbml0VG9r
ZW5pemVyKToKKyAgICAgICAgKHhwYXRoeXllcnJvcik6CisgICAgICAgICogeHBhdGgvaW1wbC90
b2tlbml6ZXIuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC91dGlsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6aXNSb290RG9tTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmdldENo
aWxkcmVuUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzVmFsaWRDb250
ZXh0Tm9kZSk6CisgICAgICAgICogeHBhdGgvaW1wbC91dGlsLmg6IEFkZGVkLgorICAgICAgICAq
IHhwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6VmFyaWFibGVSZWZlcmVuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlZhcmlhYmxlUmVmZXJlbmNlOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSk6CisgICAg
ICAgICogeHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5oOiBBZGRlZC4KKwogMjAwNi0wNS0w
NCAgRXJpYyBTZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSB0aW1vLgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkocmV2
aXNpb24gMTQxNzkpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0J
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxv
Z2dpbmdDaGFubmVsc0lmTgogICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ0V2ZW50cyk7CiAg
ICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nRWRpdGluZyk7CiAgICAgaW5pdGlhbGl6ZUxvZ0No
YW5uZWwoTG9nVGV4dENvbnZlcnNpb24pOworICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ1hQ
YXRoKTsKIH0KIAogLSAoaWQpaW5pdApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDE0MTc5
KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBOb2RlQ29uc3RydWN0
b3IgTm9kZTsKICAgICAgICAgYXR0cmlidXRlIE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciBOb2RlRmls
dGVyOwogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKKyAgICAgICAg
YXR0cmlidXRlIFhQYXRoRXZhbHVhdG9yQ29uc3RydWN0b3IgWFBhdGhFdmFsdWF0b3I7CisgICAg
ICAgIGF0dHJpYnV0ZSBYUGF0aFJlc3VsdENvbnN0cnVjdG9yIFhQYXRoUmVzdWx0OwogICAgIH07
CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8117</attachid>
            <date>2006-05-04 16:54:51 -0700</date>
            <delta_ts>2006-05-05 01:37:06 -0700</delta_ts>
            <desc>Cleanup of misc fixes patch</desc>
            <filename>xpath.patch</filename>
            <type>text/plain</type>
            <size>214180</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQxODUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0IEBAIEtYQ0xvZ0No
YW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRz
ID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9OwogS1hDTG9nQ2hhbm5l
bCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGggPSAgICAgICAgICAg
ICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsT2ZmIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQxODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0xv
Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRlcm4gS1hDTG9nQ2hh
bm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRzOwog
ZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENMb2dDaGFubmVsIExv
Z1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBhdGg7CiAKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxNDE4NSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlwZSBlcSAiTm9kZUxp
c3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0eXBlIGVxICJUZXh0
IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFdmFs
dWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0gZWxzaWYgKCR0eXBl
IGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAkaW1w
bEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUwMSw3ICs1MDUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xhc3NOYW1lID0gIiR7
cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
Y29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFt
ZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigkY2xhc3NOYW1lLCAk
cHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAtIEFkZCBmdW5jdGlv
bnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC04MjQsNyArODI4
LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9y
CiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiRG9j
dW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7CisgICAgICAgICAg
ICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IikgewogICAgIHJldHVybiAi
JHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NzYsNiArODgyLDEyIEBAIHN1YiBUeXBl
Q2FuRmFpbENvbnZlcnNpb24KICAgICAgIHJldHVybiAwOwogICB9IGVsc2lmICgkdHlwZSBlcSAi
RE9NV2luZG93IikgewogICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0
aEV2YWx1YXRvciIpIHsKKyAgICAgIHJldHVybiAwOworICB9IGVsc2lmICgkdHlwZSBlcSAiWFBh
dGhOU1Jlc29sdmVyIikgeworICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJY
UGF0aFJlc3VsdCIpIHsKKyAgICAgIHJldHVybiAwOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9u
J3Qga25vdyB3aGV0aGVyIGEgSlMgdmFsdWUgY2FuIGZhaWwgY29udmVyc2lvbiB0byB0eXBlICR0
eXBlLiIKICAgfQpAQCAtOTM2LDcgKzk0OCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAg
cmV0dXJuICJ0b05vZGVGaWx0ZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01X
aW5kb3ciKSB7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwotICAgIHJl
dHVybiAidG9ET01XaW5kb3coJHZhbHVlKSI7CisgICAgcmV0dXJuICJ0b0RPTVdpbmRvdygkdmFs
dWUpIjsgCisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAg
ICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBl
LmgifSA9IDE7CisgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwogICB9IGVsc2UgewogICAg
IGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9mIHR5cGUgJHR5cGUu
IgogICB9CkBAIC05NTUsNyArOTcxLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAg
ICAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJzaG9y
dCIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IKLSAgICAgICAg
ICAgJHR5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAkdHlwZSBlcSAiZmxvYXQiIG9yIAor
ICAgICAgICAgICAkdHlwZSBlcSAiZG91YmxlIikgewogICAgIHJldHVybiAianNOdW1iZXIoJHZh
bHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgbXkgJGNvbnYg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxTdHJpbmdUbyJ9
OwpAQCAtMTA0Miw2ICsxMDU5LDExIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgfSBlbHNpZiAo
JHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVl
KSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iIG9yCisgICAgICAgICAg
ICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAgICAgICR0eXBlIGVxICJYUGF0
aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CisgICAgcmV0
dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25v
dyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBKUyBWYWx1ZSI7CiAg
IH0KQEAgLTEyNDksNiArMTI3MSw3IEBAIHN1YiBjb25zdHJ1Y3RvckZvcgogICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKICAgICBteSAkcHJvdG9DbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjYW5Db25zdHJ1Y3QgPSBzaGlmdDsKICAg
ICAKIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3MgJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNjEsNyArMTI4NCwxNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
RU9GCisKKyAgICBpZiAoJGNhbkNvbnN0cnVjdCkgeworJGltcGxDb250ZW50IC49IDw8ICJFT0Yi
OworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHRvSlMo
ZXhlYywgbmV3ICRpbnRlcmZhY2VOYW1lKSk7IH0KK0VPRgorICAgIH0KKworJGltcGxDb250ZW50
IC49IDw8ICJFT0YiOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjppbmZvID0geyAiJHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yIiwgMCwgJiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yVGFibGUsIDAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCShyZXZpc2lvbiAxNDE4NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1w
bC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CkBAIC0y
OTgsNiArMjk5LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRFeGNlcHRpb24K
ICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9OwogCitzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiSU5WQUxJRF9FWFBSRVNT
SU9OX0VSUiIsCisgICAgIlRZUEVfRVJSIgorfTsKKwogdm9pZCBzZXRET01FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjKQogewogICBpZiAoZWMgPT0gMCB8fCBleGVj
LT5oYWRFeGNlcHRpb24oKSkKQEAgLTMwNyw2ICszMTMsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAgY29uc3QgY2hhciAq
IGNvbnN0ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgCiAgIGludCBu
YW1lVGFibGVTaXplOwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9mZnNldCAmJiBjb2Rl
IDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFuZ2UiOwpAQCAtMzE4
LDEyICszMjYsMjQgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAog
ICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAgICAgbmFtZVRhYmxlID0gZXZlbnRF
eGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKGV2ZW50RXhjZXB0aW9u
TmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXNbMF0pOworI2lmIFhQQVRIX1NVUFBP
UlQKKyAgfSBlbHNlIGlmIChjb2RlID49IFhQYXRoRXhjZXB0aW9uT2Zmc2V0ICYmIGNvZGUgPD0g
WFBhdGhFeGNlcHRpb25NYXgpIHsKKyAgICAgIC8vIFhQYXRoIGV4Y2VwdGlvbiBjb2RlcyBzdGFy
dCB3aXRoIDUxIGFuZCB3ZSBkb24ndCB3YW50IDUxIGVtcHR5IGVsZW1lbnRzIGluIHRoZSBuYW1l
IGFycmF5CisgICAgaW50IG5hbWVJbmRleCA9IGNvZGUgLSBJTlZBTElEX0VYUFJFU1NJT05fRVJS
OworICAgIHR5cGUgPSAiRE9NIFhQYXRoIjsKKyAgICBjb2RlIC09IFhQYXRoRXhjZXB0aW9uT2Zm
c2V0OworICAgIG5hbWVUYWJsZSA9IHhwYXRoRXhjZXB0aW9uTmFtZXM7CisgICAgbmFtZVRhYmxl
U2l6ZSA9IHNpemVvZih4cGF0aEV4Y2VwdGlvbk5hbWVzKSAvIHNpemVvZih4cGF0aEV4Y2VwdGlv
bk5hbWVzWzBdKTsKKworICAgIG5hbWUgPSBuYW1lSW5kZXggPCBuYW1lVGFibGVTaXplID8gbmFt
ZVRhYmxlW25hbWVJbmRleF0gOiAwOworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKICAgfSBlbHNl
IHsKICAgICBuYW1lVGFibGUgPSBleGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0g
c2l6ZW9mKGV4Y2VwdGlvbk5hbWVzKSAvIHNpemVvZihleGNlcHRpb25OYW1lc1swXSk7CiAgIH0K
IAotICBjb25zdCBjaGFyKiBuYW1lID0gY29kZSA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVb
Y29kZV0gOiAwOworICBpZiAoIW5hbWUpCisgICAgICBuYW1lID0gY29kZSA8IG5hbWVUYWJsZVNp
emUgPyBuYW1lVGFibGVbY29kZV0gOiAwOwogCiAgIC8vIDEwMCBjaGFyYWN0ZXJzIGlzIGEgYmln
IGVub3VnaCBidWZmZXIsIGJlY2F1c2UgdGhlcmUgYXJlOgogICAvLyAgIDEzIGNoYXJhY3RlcnMg
aW4gdGhlIG1lc3NhZ2UKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTQxODUpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MzksNiAr
NjM5LDkgQEAgc3RhdGljIExpc3RlbmVyTWFwICpsaXN0ZW5lck1hcDsKICAgICAgICAgY2FzZSBO
b2RlOjpOT1RBVElPTl9OT0RFOgogICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTU5vdGF0
aW9uIGNsYXNzXTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OlhQQVRI
X05BTUVTUEFDRV9OT0RFOgorICAgICAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhbiBYUGF0aCBv
YmplY3RpdmUgQyB3cmFwcGVyCisgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICBy
ZXR1cm4gW1tbd3JhcHBlckNsYXNzIGFsbG9jXSBfaW5pdFdpdGhOb2RlOmltcGxdIGF1dG9yZWxl
YXNlXTsKIH0KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE0MTg1KQorKysgV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIFZQ
QVRIID0gXAogICAgICQoV2ViQ29yZSkvZG9tIFwKICAgICAkKFdlYkNvcmUpL2h0bWwgXAogICAg
ICQoV2ViQ29yZSkvcGFnZSBcCisgICAgJChXZWJDb3JlKS94cGF0aAogIwogCiAuUEhPTlkgOiBh
bGwKQEAgLTcyLDYgKzczLDEwIEBAIGFsbCA6IFwKICAgICBKU1JhbmdlLmggXAogICAgIEpTVGV4
dC5oIFwKICAgICBKU1VJRXZlbnQuaCBcCisgICAgSlNYUGF0aEV2YWx1YXRvci5oIFwKKyAgICBK
U1hQYXRoRXhwcmVzc2lvbi5oIFwKKyAgICBKU1hQYXRoTlNSZXNvbHZlci5oIFwKKyAgICBKU1hQ
YXRoUmVzdWx0LmggXAogICAgIEpTV2hlZWxFdmVudC5oIFwKICAgICBKU1hNTEh0dHBSZXF1ZXN0
Lmx1dC5oIFwKICAgICBKU1hNTFNlcmlhbGl6ZXIubHV0LmggXApAQCAtNzksNiArODQsNyBAQCBh
bGwgOiBcCiAgICAgU1ZHTmFtZXMuY3BwIFwKICAgICBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIFwK
ICAgICBYTGlua05hbWVzLmNwcCBcCisgICAgWFBhdGhHcmFtbWFyLmNwcCBcCiAgICAga2pzX2Nz
cy5sdXQuaCBcCiAgICAga2pzX2RvbS5sdXQuaCBcCiAgICAga2pzX2V2ZW50cy5sdXQuaCBcCkBA
IC0xMzAsNiArMTM2LDE1IEBAIENTU0dyYW1tYXIuY3BwIDogY3NzL0NTU0dyYW1tYXIueQogCWNh
dCBDU1NHcmFtbWFyLmNwcC5oIENTU0dyYW1tYXIuaHBwID4gQ1NTR3JhbW1hci5oCiAJcm0gLWYg
Q1NTR3JhbW1hci5jcHAuaCBDU1NHcmFtbWFyLmhwcAogCisjIFhQYXRoIGdyYW1tYXIKKworWFBh
dGhHcmFtbWFyLmNwcCA6IHhwYXRoL2ltcGwvWFBhdGhHcmFtbWFyLnkKKwliaXNvbiAtZCAtcCB4
cGF0aHl5ICQ8IC1vICRACisJdG91Y2ggWFBhdGhHcmFtbWFyLmNwcC5oCisJdG91Y2ggWFBhdGhH
cmFtbWFyLmhwcAorCWNhdCBYUGF0aEdyYW1tYXIuY3BwLmggWFBhdGhHcmFtbWFyLmhwcCA+IFhQ
YXRoR3JhbW1hci5oCisJcm0gLWYgWFBhdGhHcmFtbWFyLmNwcC5oIFhQYXRoR3JhbW1hci5ocHAK
KwogIyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cwogCiBVU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9
ICQoV2ViQ29yZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNvcmUpL2Nzcy9xdWlya3MuY3NzICQoV2Vi
Q29yZSkvY3NzL3N2Zy5jc3MgCkBAIC0xODMsNCArMTk4LDQgQEAgSlNfQklORElOR1NfU0NSSVBU
UyA9IFwKICMKIAogSlMlLmggOiAlLmlkbCAkKEpTX0JJTkRJTkdTX1NDUklQVFMpCi0JcGVybCAt
SSQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cyAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMv
Z2VuZXJhdGUtYmluZGluZ3MucGwgLS1nZW5lcmF0b3IgSlMgLS1pbmNsdWRlIGRvbSAtLWluY2x1
ZGUgaHRtbCAtLW91dHB1dGRpciAuICQ8CisJcGVybCAtSSQoV2ViQ29yZSkvYmluZGluZ3Mvc2Ny
aXB0cyAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwgLS1n
ZW5lcmF0b3IgSlMgLS1pbmNsdWRlIGRvbSAtLWluY2x1ZGUgaHRtbCAtLWluY2x1ZGUgeHBhdGgg
LS1vdXRwdXRkaXIgIC4gJDwKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDE0MTg1KQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDIwIEBA
IG1vZHVsZSBjb3JlIHsKICAgICAgICAgTm9kZSBhZG9wdE5vZGUoaW4gTm9kZSBzb3VyY2UpCiAg
ICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKKyAgICAgICAgLy8gRE9NIExldmVs
IDMgWFBhdGggKFhQYXRoRXZhbHVhdG9yIGludGVyZmFjZSkKKyAgICAgICAgWFBhdGhFeHByZXNz
aW9uIGNyZWF0ZUV4cHJlc3Npb24oaW4gRE9NU3RyaW5nIGV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoTlNSZXNvbHZlciByZXNvbHZl
cikKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisgICAgICAgIFhQYXRoTlNS
ZXNvbHZlciBjcmVhdGVOU1Jlc29sdmVyKGluIE5vZGUgbm9kZVJlc29sdmVyKTsKKyAgICAgICAg
CisgICAgICAgIFhQYXRoUmVzdWx0IGV2YWx1YXRlKGluIERPTVN0cmluZyBleHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBOb2RlIGNvbnRleHROb2RlLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhOU1Jlc29sdmVyIHJlc29sdmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aFJlc3VsdCBpblJlc3VsdCkKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCiAgICAgICAgIC8vIENvbW1vbiBleHRlbnNpb25z
CiAKICAgICAgICAgYm9vbGVhbiBleGVjQ29tbWFuZChpbiBET01TdHJpbmcgY29tbWFuZCwgCklu
ZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNDE4NSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTAgQEAKICNpbmNsdWRlICJ4bWxfdG9rZW5p
emVyLmgiCiAjaW5jbHVkZSAieG1saHR0cHJlcXVlc3QuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiWFBhdGhF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSAiWFBh
dGhSZXN1bHQuaCIKIAogI2lmZGVmIEtIVE1MX1hTTFQKICNpbmNsdWRlICJYU0xUUHJvY2Vzc29y
LmgiCkBAIC01MDksNiArNTEzLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6aW1wb3J0
Tm9kZShObwogICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAgY2FzZSBE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFOgogICAgICAgICBjYXNlIE5PVEFUSU9OX05PREU6CisgICAg
ICAgIGNhc2UgWFBBVEhfTkFNRVNQQUNFX05PREU6CiAgICAgICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTMxMTEsNCArMzExNiwzOSBAQCB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmco
KQogICAgICAgICBmLT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KIAorI2lmIFhQQVRIX1NVUFBPUlQK
KworUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IERvY3VtZW50OjpjcmVhdGVFeHByZXNzaW9u
KGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbV94cGF0aEV2YWx1YXRvcikKKyAgICAgICAgbV94
cGF0aEV2YWx1YXRvciA9IG5ldyBYUGF0aEV2YWx1YXRvcjsKKyAgICAKKyAgICByZXR1cm4gbV94
cGF0aEV2YWx1YXRvci0+Y3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciwgZWMp
OworfQorCitQYXNzUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gRG9jdW1lbnQ6OmNyZWF0ZU5TUmVz
b2x2ZXIoTm9kZSAqbm9kZVJlc29sdmVyKQoreworICAgIGlmICghbV94cGF0aEV2YWx1YXRvcikK
KyAgICAgICAgbV94cGF0aEV2YWx1YXRvciA9IG5ldyBYUGF0aEV2YWx1YXRvcjsKKyAgICAKKyAg
ICByZXR1cm4gbV94cGF0aEV2YWx1YXRvci0+Y3JlYXRlTlNSZXNvbHZlcihub2RlUmVzb2x2ZXIp
OworfQorCitQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBEb2N1bWVudDo6ZXZhbHVhdGUoY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3VsdCogcmVzdWx0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghbV94cGF0aEV2YWx1YXRvcikKKyAgICAgICAgbV94cGF0aEV2YWx1
YXRvciA9IG5ldyBYUGF0aEV2YWx1YXRvcjsKKyAgICAKKyAgICByZXR1cm4gbV94cGF0aEV2YWx1
YXRvci0+ZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dE5vZGUsIHJlc29sdmVyLCB0eXBlLCBy
ZXN1bHQsIGVjKTsKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKwogfQpJbmRleDogV2Vi
Q29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMTQxODUpCisrKyBXZWJDb3JlL2RvbS9E
T01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgYm9v
bCBET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVyZSAoY29ucwogICAgICAgICAgICAgfHwgbG93
ZXIgPT0gInVpZXZlbnRzIgogICAgICAgICAgICAgfHwgbG93ZXIgPT0gInZpZXdzIikKICAgICAg
ICAgcmV0dXJuIHZlcnNpb24uaXNFbXB0eSgpIHx8IHZlcnNpb24gPT0gIjIuMCI7CisgICAgaWYg
KGxvd2VyID09ICJ4cGF0aCIpCisgICAgICAgIHJldHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2
ZXJzaW9uID09ICIzLjAiOworICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxNDE4NSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDYgKzg5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0
OwogICAgIGNsYXNzIFRva2VuaXplcjsKICAgICBjbGFzcyBUcmVlV2Fsa2VyOworICAgIGNsYXNz
IFhQYXRoRXZhbHVhdG9yOworICAgIGNsYXNzIFhQYXRoRXhwcmVzc2lvbjsKKyAgICBjbGFzcyBY
UGF0aE5TUmVzb2x2ZXI7CisgICAgY2xhc3MgWFBhdGhSZXN1bHQ7CiAKICNpZiBfX0FQUExFX18K
ICAgICBzdHJ1Y3QgRGFzaGJvYXJkUmVnaW9uVmFsdWU7CkBAIC01NDEsNiArNTQ1LDE4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZmluaXNoZWRQYXJzaW5nKCk7CiAKKyAgICAvLyBYUGF0aEV2YWx1
YXRvciBtZXRob2RzCisgICAgUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJl
c3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSYgZWMpOworICAgIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVy
KE5vZGUgKm5vZGVSZXNvbHZlcik7CisgICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVh
dGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3VsdCogcmVzdWx0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKIHByb3RlY3RlZDoKICAgICBDU1NTdHlsZVNlbGVjdG9y
ICptX3N0eWxlU2VsZWN0b3I7CiAgICAgRnJhbWVWaWV3ICptX3ZpZXc7CkBAIC03MzgsNiArNzU0
LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8SFRNTEZvcm1FbGVtZW50KiwgTmFt
ZVRvSW5wdXRNYXAqPiBGb3JtVG9Hcm91cE1hcDsKICAgICBGb3JtVG9Hcm91cE1hcCBtX3NlbGVj
dGVkUmFkaW9CdXR0b25zOwogICAgIAorICAgIFJlZlB0cjxYUGF0aEV2YWx1YXRvcj4gbV94cGF0
aEV2YWx1YXRvcjsKKyAgICAKICNpZiBTVkdfU1VQUE9SVAogICAgIFNWR0RvY3VtZW50RXh0ZW5z
aW9ucyogbV9zdmdFeHRlbnNpb25zOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxNDE4NSkKKysrIFdl
YkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsOCBAQCBwdWJsaWM6
CiAgICAgICAgIERPQ1VNRU5UX05PREUgPSA5LAogICAgICAgICBET0NVTUVOVF9UWVBFX05PREUg
PSAxMCwKICAgICAgICAgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExLAotICAgICAgICBOT1RB
VElPTl9OT0RFID0gMTIKKyAgICAgICAgTk9UQVRJT05fTk9ERSA9IDEyLAorICAgICAgICBYUEFU
SF9OQU1FU1BBQ0VfTk9ERSA9IDEzCiAgICAgfTsKIAogICAgIE5vZGUoRG9jdW1lbnQqKTsKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NDE4NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSw0NCBAQAogCQkxNEU4Mzc4RTA5Rjg1RDRGMDBCODVBRTQg
LyogSlNFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRFODM3OEQwOUY4NUQ0RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCAqLzsgfTsKIAkJMTRFQzI2
N0YwOUNBMDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFQzI2N0QwOUNBMDdFMDAwRTFFRUVDIC8q
IEV2ZW50VGFyZ2V0Tm9kZS5oICovOyB9OwogCQkxNEVDMjY4MDA5Q0EwN0UwMDBFMUVFRUMgLyog
RXZlbnRUYXJnZXROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0RUMyNjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuY3Bw
ICovOyB9OworCQkxQTc2Mjk4MzBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk1OTBBMDc0
MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyOTg0MEEwNzQwQTAw
MDk4OUY1QiAvKiBleHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTc2Mjk1QTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oICov
OyB9OworCQkxQTc2Mjk4QTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTYxMEEwNzQwQTAw
MDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwICovOyB9OworCQkxQTc2Mjk4QjBBMDc0MEEwMDA5ODlG
NUIgLyogZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi87IH07CisJ
CTFBNzYyOThDMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjMwQTA3NDBBMDAw
OTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgKi87IH07CisJCTFBNzYyOThEMEEwNzQwQTAw
MDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY0MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0
ZW1lbnQuaCAqLzsgfTsKKwkJMUE3NjI5OEUwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjUwQTA3
NDBBMDAwOTg5RjVCIC8qIHBhdGguY3BwICovOyB9OworCQkxQTc2Mjk4RjBBMDc0MEEwMDA5ODlG
NUIgLyogcGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE3NjI5NjYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCAqLzsgfTsKKwkJMUE3NjI5OTAw
QTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2NzBBMDc0MEEwMDA5ODlGNUIgLyogcHJlZGlj
YXRlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OTEwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5Njgw
QTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICovOyB9OworCQkxQTc2Mjk5MjBBMDc0MEEw
MDA5ODlGNUIgLyogc3RlcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTc2Mjk2OTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5jcHAgKi87IH07CisJ
CTFBNzYyOTkzMEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2QTBBMDc0MEEwMDA5ODlGNUIgLyogc3Rl
cC5oICovOyB9OworCQkxQTc2Mjk5NTBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTZDMEEw
NzQwQTAwMDk4OUY1QiAvKiB0b2tlbml6ZXIuY3BwICovOyB9OworCQkxQTc2Mjk5NjBBMDc0MEEw
MDA5ODlGNUIgLyogdG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTc2Mjk2RDBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmggKi87
IH07CisJCTFBNzYyOTk3MEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1
QiAvKiB1dGlsLmNwcCAqLzsgfTsKKwkJMUE3NjI5OTgwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTZG
MEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmggKi87IH07CisJCTFBNzYyOTk5MEEwNzQwQTAwMDk4
OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3MDBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVy
ZWZlcmVuY2UuY3BwICovOyB9OworCQkxQTc2Mjk5QTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFi
bGVyZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNzYyOTcxMEEwNzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5oICovOyB9
OworCQkxQTc2Mjk5RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzUwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCAqLzsgfTsKKwkJMUE3NjI5OUUwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3NjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFs
dWF0b3IuaCAqLzsgfTsKKwkJMUE3NjI5QTAwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVz
c2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2Mjk3ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCAqLzsgfTsKKwkJ
MUE3NjI5QTEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzkwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5oICovOyB9OworCQkxQTc2MjlBMzBBMDc0MEEwMDA5ODlG
NUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNl
LmNwcCAqLzsgfTsKKwkJMUE3NjI5QTQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3
QzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCAqLzsgfTsKKwkJMUE3NjI5QTUw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhOU1Jlc29sdmVyLmNwcCAqLzsgfTsKKwkJMUE3NjI5QTYwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5N0UwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oICov
OyB9OworCQkxQTc2MjlBODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5ODAwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCAqLzsgfTsKKwkJMUE3NjI5QTkwQTA3NDBBMDAw
OTg5RjVCIC8qIFhQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTc2Mjk4MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCAq
LzsgfTsKKwkJMUE3NjI5RDUwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MjlEMzBBMDc0
MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmNwcCAqLzsgfTsKKwkJMUE3NjI5RDYwQTA3NDI1
MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5RDQwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1h
ci5oICovOyB9OworCQkxQTc2MkM3MzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2
MkM2QjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRvci5jcHAgKi87IH07CisJCTFB
NzYyQzc0MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM2QzBBMDc0RjI2MDA5ODlG
NUIgLyogSlNYUGF0aEV2YWx1YXRvci5oICovOyB9OworCQkxQTc2MkM3NTBBMDc0RjI2MDA5ODlG
NUIgLyogSlNYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkQwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHBy
ZXNzaW9uLmNwcCAqLzsgfTsKKwkJMUE3NjJDNzYwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhF
eHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTc2MkM2RTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uaCAqLzsgfTsK
KwkJMUE3NjJDNzcwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZGMEEwNzRG
MjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5jcHAgKi87IH07CisJCTFBNzYyQzc4MEEw
NzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNzAwQTA3NEYyNjAwOTg5RjVCIC8qIEpT
WFBhdGhOU1Jlc29sdmVyLmggKi87IH07CisJCTFBNzYyQzc5MEEwNzRGMjYwMDk4OUY1QiAvKiBK
U1hQYXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyQzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmNwcCAqLzsg
fTsKKwkJMUE3NjJDN0EwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzcyMEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggKi87IH07CiAJCTU1MEEwQkM5MDg1RjYwMzkwMDcz
NTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1l
LmNwcCAqLzsgfTsKIAkJNTUwQTBCQ0EwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4
MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi87IH07CiAJCTU1MEEwQkNEMDg1
RjYwNEQwMDczNTNENiAvKiBIVE1MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2IC8qIEhUTUxOYW1l
cy5jcHAgKi87IH07CkBAIC0xMjU2LDYgKzEyOTQsNDkgQEAKIAkJMTRFODM3OEQwOUY4NUQ0RjAw
Qjg1QUU0IC8qIEpTRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRFQzI2N0QwOUNBMDdFMDAw
RTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFdmVudFRhcmdldE5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRF
QzI2N0UwOUNBMDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFRhcmdldE5vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk1OTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZXhwcmVzc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTVBMEEwNzQwQTAwMDk4OUY1
QiAvKiBleHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBleHBy
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTYxMEEwNzQwQTAw
MDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IGZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYy
OTYyMEEwNzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2Mjk2MzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZWRzdGF0ZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2NDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vk
c3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwYXJzZWRzdGF0
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjUwQTA3NDBBMDAw
OTg5RjVCIC8qIHBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IHBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2NjBBMDc0MEEw
MDA5ODlGNUIgLyogcGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2NzBBMDc0MEEwMDA5ODlG
NUIgLyogcHJlZGljYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBwcmVkaWNhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2ODBB
MDc0MEEwMDA5ODlGNUIgLyogcHJlZGljYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcmVkaWNhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
NjkwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IHN0ZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2
Mjk2QTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc3RlcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2QzBB
MDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSB0b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQTc2Mjk2RDBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NkUwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQTc2Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQTc2Mjk3MDBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHZhcmlhYmxlcmVmZXJlbmNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzEwQTA3NDBBMDAwOTg5RjVCIC8q
IHZhcmlhYmxlcmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB2
YXJpYWJsZXJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3
MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLnkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS55YWNjOyBwYXRoID0gWFBhdGhHcmFtbWFyLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhFdmFsdWF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3NjBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoRXZh
bHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTc3MEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhQ
YXRoRXZhbHVhdG9yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5Nzgw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhFeHByZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhFeHByZXNzaW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdBMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aEV4cHJlc3Npb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aEV4cHJl
c3Npb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3QjBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhQYXRoTmFtZXNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0aE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jl
c29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aE5T
UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3RTBBMDc0
MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBYUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE3NjI5N0YwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFhQYXRoTlNSZXNvbHZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFBNzYyOTgwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhSZXN1bHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk4MTBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoUmVz
dWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTgyMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aFJlc3VsdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhQYXRoUmVz
dWx0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5RDMwQTA3NDI1MTAw
OTg5RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gWFBhdGhHcmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5RDQwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhHcmFtbWFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyQzZCMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoRXZhbHVhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNkMwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTWFBhdGhFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3
NjJDNkQwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoRXhwcmVzc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzZFMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0
aEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNkYwQTA3
NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoTlNSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBNzYyQzcwMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNzEwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTWFBhdGhSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2Fy
ZE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENs
aXBib2FyZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCTQ3NThDNDQzMDhDNUYyMTcwMDlCQUYwNSAvKiBLQ2FudmFzUGF0aC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEtDYW52YXNQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CkBAIC0yNjE5LDYgKzI3MDAsNyBAQAogCQkJCUY1MjNEMkYzMDJERTQ0
M0IwMTg2MzVDQSAvKiByZW5kZXJpbmcgKi8sCiAJCQkJQThDMEY2REMwODk3MDFGMTAwQkE1MTE0
IC8qIFdlYkNvcmUrU1ZHICovLAogCQkJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwg
Ki8sCisJCQkJMUE3NjI5NTcwQTA3NDBBMDAwOTg5RjVCIC8qIHhwYXRoICovLAogCQkJCTY1NjU4
MEVDMDlEMTJCMjAwMDBFNjFENyAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCiAJCQkJMDg5QzE2NjVG
RTg0MTE1OEMwMkFBQzA3IC8qIFJlc291cmNlcyAqLywKIAkJCQkwODY3RDY5QUZFODQwMjhGQzAy
QUFDMDcgLyogRnJhbWV3b3JrcyAqLywKQEAgLTI2NjIsNiArMjc0NCw1NCBAQAogCQkJcGF0aCA9
IFJlc291cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFBNzYyOTU3
MEEwNzQwQTAwMDk4OUY1QiAvKiB4cGF0aCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMUE3NjI5NTgwQTA3NDBBMDAwOTg5RjVCIC8qIGltcGwgKi8sCisJ
CQkJMUE3NjI5NzUwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCAqLywKKwkJ
CQkxQTc2Mjk3NjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaCAqLywKKwkJCQkx
QTc2Mjk3NzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaWRsICovLAorCQkJCTFB
NzYyOTc4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwICovLAorCQkJCTFB
NzYyOTc5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLywKKwkJCQkxQTc2
Mjk3QTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmlkbCAqLywKKwkJCQkxQTc2
Mjk3QjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwICovLAorCQkJCTFBNzYy
OTdDMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oICovLAorCQkJCTFBNzYyOTdE
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwICovLAorCQkJCTFBNzYyOTdF
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCAqLywKKwkJCQkxQTc2Mjk3RjBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmlkbCAqLywKKwkJCQkxQTc2Mjk4MDBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuY3BwICovLAorCQkJCTFBNzYyOTgxMEEwNzQw
QTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oICovLAorCQkJCTFBNzYyOTgyMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aFJlc3VsdC5pZGwgKi8sCisJCQkpOworCQkJcGF0aCA9IHhwYXRoOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMUE3NjI5NTgwQTA3NDBBMDAwOTg5RjVC
IC8qIGltcGwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTFBNzYyOTU5MEEwNzQwQTAwMDk4OUY1QiAvKiBleHByZXNzaW9uLmNwcCAqLywKKwkJCQkxQTc2
Mjk1QTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oICovLAorCQkJCTFBNzYyOTYxMEEw
NzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwICovLAorCQkJCTFBNzYyOTYyMEEwNzQwQTAw
MDk4OUY1QiAvKiBmdW5jdGlvbnMuaCAqLywKKwkJCQkxQTc2Mjk2MzBBMDc0MEEwMDA5ODlGNUIg
LyogcGFyc2Vkc3RhdGVtZW50LmNwcCAqLywKKwkJCQkxQTc2Mjk2NDBBMDc0MEEwMDA5ODlGNUIg
LyogcGFyc2Vkc3RhdGVtZW50LmggKi8sCisJCQkJMUE3NjI5NjUwQTA3NDBBMDAwOTg5RjVCIC8q
IHBhdGguY3BwICovLAorCQkJCTFBNzYyOTY2MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmggKi8s
CisJCQkJMUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi8sCisJCQkJ
MUE3NjI5NjgwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICovLAorCQkJCTFBNzYyOTY5
MEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCAqLywKKwkJCQkxQTc2Mjk2QTBBMDc0MEEwMDA5
ODlGNUIgLyogc3RlcC5oICovLAorCQkJCTFBNzYyOTZDMEEwNzQwQTAwMDk4OUY1QiAvKiB0b2tl
bml6ZXIuY3BwICovLAorCQkJCTFBNzYyOTZEMEEwNzQwQTAwMDk4OUY1QiAvKiB0b2tlbml6ZXIu
aCAqLywKKwkJCQkxQTc2Mjk2RTBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5jcHAgKi8sCisJCQkJ
MUE3NjI5NkYwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwuaCAqLywKKwkJCQkxQTc2Mjk3MDBBMDc0
MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwICovLAorCQkJCTFBNzYyOTcxMEEw
NzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5oICovLAorCQkJCTFBNzYyOTcyMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIueSAqLywKKwkJCSk7CisJCQlwYXRoID0gaW1w
bDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTU1OTk4QTU3MDUyQjU5OEYw
MDE3QTZDMSAvKiBBY2Nlc3NpYmlsaXR5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKQEAgLTI3NDcsNiArMjg3NywxNCBAQAogCQkJCTY1REYzMUYwMDlEMUNDNjAw
MDBCRTMyNSAvKiBKU1RleHQuaCAqLywKIAkJCQlBODY2MjlDQTA5REEyQjQ3MDA5NjMzQTUgLyog
SlNVSUV2ZW50LmNwcCAqLywKIAkJCQlBODY2MjlDOTA5REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2
ZW50LmggKi8sCisJCQkJMUE3NjJDNkIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0
b3IuY3BwICovLAorCQkJCTFBNzYyQzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVh
dG9yLmggKi8sCisJCQkJMUE3NjJDNkQwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNz
aW9uLmNwcCAqLywKKwkJCQkxQTc2MkM2RTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJl
c3Npb24uaCAqLywKKwkJCQkxQTc2MkM2RjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVz
b2x2ZXIuY3BwICovLAorCQkJCTFBNzYyQzcwMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNS
ZXNvbHZlci5oICovLAorCQkJCTFBNzYyQzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVz
dWx0LmNwcCAqLywKKwkJCQkxQTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3Vs
dC5oICovLAogCQkJCTY1REYzMUYxMDlEMUNDNjAwMDBCRTMyNSAvKiBKU1doZWVsRXZlbnQuY3Bw
ICovLAogCQkJCTY1REYzMUYyMDlEMUNDNjAwMDBCRTMyNSAvKiBKU1doZWVsRXZlbnQuaCAqLywK
IAkJCQk2NTY1ODFENzA5RDE1MDhEMDAwRTYxRDcgLyogSlNYTUxIdHRwUmVxdWVzdC5sdXQuaCAq
LywKQEAgLTI3NzYsNiArMjkxNCw4IEBACiAJCQkJNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8q
IFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxRUEwOUQxNTA4RDAw
MEU2MUQ3IC8qIFhMaW5rTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUVCMDlEMTUwOEQwMDBFNjFE
NyAvKiBYTGlua05hbWVzLmggKi8sCisJCQkJMUE3NjI5RDMwQTA3NDI1MTAwOTg5RjVCIC8qIFhQ
YXRoR3JhbW1hci5jcHAgKi8sCisJCQkJMUE3NjI5RDQwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRo
R3JhbW1hci5oICovLAogCQkJCTE0MjAxMUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxl
RGVjbGFyYXRpb24uaCAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7CkBA
IC00ODQ4LDYgKzQ5ODgsMjUgQEAKIAkJCQkxNERDMEQzODA5RkVEMDczMDA3QjAyMzUgLyogSlNO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwQzgyNTA5RkYwRUY1MDA2QjM2RDkgLyoga2pz
X2RvbW5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjAxMUI3MEEwMDMxMzMwMDgzMDNGOSAv
KiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTg0MEEw
NzQwQTAwMDk4OUY1QiAvKiBleHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk4
QjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2
Mjk4RDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQTc2Mjk4RjBBMDc0MEEwMDA5ODlGNUIgLyogcGF0aC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMUE3NjI5OTEwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMUE3NjI5OTMwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCBpbiBIZWFkZXJzICovLAor
CQkJCTFBNzYyOTk2MEEwNzQwQTAwMDk4OUY1QiAvKiB0b2tlbml6ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTFBNzYyOTk4MEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQTc2Mjk5QTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTFBNzYyOTlFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5QTEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
RXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5QTQwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlBNjBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlB
OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
NzYyOUQ2MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTFBNzYyQzc0MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkxQTc2MkM3NjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Np
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyQzc4MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjJDN0EwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTU2NSw2ICs1NzI0LDI1
IEBACiAJCQkJQkNGRThFMzIwQTAyQTFEMzAwMDlFNjFEIC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkxNERDMEQzNzA5RkVEMDczMDA3QjAyMzUgLyogSlNOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5ODMwQTA3NDBB
MDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OEEw
QTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2
Mjk4QzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyOThFMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyOTkwMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUE3NjI5OTIwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUE3NjI5OTUwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQTc2Mjk5NzBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQTc2Mjk5OTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZl
cmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OUQwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUEwMEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5
QTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTFBNzYyOUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUQ1MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdy
YW1tYXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJDNzMwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJDNzUwQTA3NEYy
NjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFB
NzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxQTc2MkM3OTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzZCREQxRDBBMDMxQUVCMDA0REY0QUIgLyogR3JhcGhpY3ND
b250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01NTkwLDYgKzU3NjgsNyBAQAogCQkJCUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCiAJCQkJCSIkKERFQlVHX0RFRklORVMpIiwKIAkJCQkJ
U1ZHX1NVUFBPUlQsCisJCQkJCVhQQVRIX1NVUFBPUlQsCiAJCQkJKTsKIAkJCQlIRUFERVJfU0VB
UkNIX1BBVEhTID0gKAogCQkJCQlGb3J3YXJkaW5nSGVhZGVycywKQEAgLTU2MjIsNiArNTgwMSw3
IEBACiAJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKIAkJCQkJIiQoREVCVUdf
REVGSU5FUykiLAogCQkJCQlTVkdfU1VQUE9SVCwKKwkJCQkJWFBBVEhfU1VQUE9SVCwKIAkJCQkp
OwogCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCiAJCQkJCUZvcndhcmRpbmdIZWFkZXJzLApA
QCAtNTY1NSw2ICs1ODM1LDcgQEAKIAkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0g
KAogCQkJCQkiJChERUJVR19ERUZJTkVTKSIsCiAJCQkJCVNWR19TVVBQT1JULAorCQkJCQlYUEFU
SF9TVVBQT1JULAogCQkJCSk7CiAJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKIAkJCQkJRm9y
d2FyZGluZ0hlYWRlcnMsCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTQxODUpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw3
IEBAIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAgY2Fz
ZSBOb2RlOjpFTlRJVFlfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNF
X05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgY2FzZSBO
b2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICByZXR1cm4gIiI7CkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDgwIEBACisvKgorICogWFBhdGhOYW1lc3BhY2UuY3BwIC0gQ29weXJpZ2h0IDIwMDUgRnJl
cmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlhQYXRoTmFtZXNwYWNlLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYUGF0aE5hbWVz
cGFjZTo6WFBhdGhOYW1lc3BhY2UoRG9jdW1lbnQgKnB0ciwgY29uc3QgU3RyaW5nJiBwcmVmaXgs
IGNvbnN0IFN0cmluZyYgdXJpKQorICAgIDogTm9kZShwdHIpLAorICAgIG1fb3duZXJEb2N1bWVu
dChwdHIpLAorICAgIG1fcHJlZml4KHByZWZpeCksCisgICAgbV91cmkodXJpKQoreworfQorCitY
UGF0aE5hbWVzcGFjZTo6flhQYXRoTmFtZXNwYWNlKCkKK3sKK30KKworRG9jdW1lbnQgKlhQYXRo
TmFtZXNwYWNlOjpvd25lckRvY3VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25lckRv
Y3VtZW50OworfQorCitFbGVtZW50ICpYUGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiAwOworfQorCitjb25zdCBBdG9taWNTdHJp
bmcgJlhQYXRoTmFtZXNwYWNlOjpwcmVmaXgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWZp
eDsKK30KKworU3RyaW5nIFhQYXRoTmFtZXNwYWNlOjpub2RlTmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJlZml4OworfQorCitjb25zdCBBdG9taWNTdHJpbmcgJlhQYXRoTmFtZXNwYWNl
OjpuYW1lc3BhY2VVUkkoKSBjb25zdAoreworICAgIHJldHVybiBtX3VyaTsKK30KKworV2ViQ29y
ZTo6Tm9kZTo6Tm9kZVR5cGUgWFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7Cit9CisKK30KKworI2VuZGlmIC8v
IFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFi
ZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAq
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFU
SF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJTdHJp
bmdJbXBsLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNp
bmNsdWRlICJYUGF0aFJlc3VsdC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2lu
Y2x1ZGUgImltcGwvZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgImltcGwvdXRpbC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKyAgICAKK1Bhc3NSZWZQ
dHI8WFBhdGhFeHByZXNzaW9uPiBYUGF0aEV4cHJlc3Npb246OmNyZWF0ZUV4cHJlc3Npb24oY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLCBpbnQmIGVj
KQoreworICAgIFhQYXRoRXhwcmVzc2lvbiAqZXhwciA9IG5ldyBYUGF0aEV4cHJlc3Npb247Cisg
ICAgCisgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5yZXNvbHZlciA9IHJlc29s
dmVyOworICAgIGlmICghZXhwci0+bV9zdGF0ZW1lbnQucGFyc2UoZXhwcmVzc2lvbi5kZXByZWNh
dGVkU3RyaW5nKCksIGVjKSkgeworICAgICAgICBkZWxldGUgZXhwcjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBleHByOworfQorCitQYXNzUmVmUHRyPFhQYXRo
UmVzdWx0PiBYUGF0aEV4cHJlc3Npb246OmV2YWx1YXRlKE5vZGUgKmNvbnRleHROb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYUGF0aFJlc3VsdCAqcmVzdWx0XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFpc1Zh
bGlkQ29udGV4dE5vZGUoY29udGV4dE5vZGUpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBOb2RlICpldmVudFRh
cmdldCA9IGNvbnRleHROb2RlLT5vd25lckRvY3VtZW50KCkgPyAKKyAgICAgICAgY29udGV4dE5v
ZGUtPm93bmVyRG9jdW1lbnQoKSA6IGNvbnRleHROb2RlOworICAgIAorICAgIFhQYXRoUmVzdWx0
KiByZXN1bHQgPSBuZXcgWFBhdGhSZXN1bHQoc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4o
ZXZlbnRUYXJnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZW1lbnQuZXZhbHVhdGUoY29udGV4dE5vZGUpKTsKKyAgICAKKyAgICBpZiAodHlwZSAh
PSBYUGF0aFJlc3VsdDo6QU5ZX1RZUEUpIHsKKyAgICAgICAgcmVzdWx0LT5jb252ZXJ0VG8odHlw
ZSwgZWMpOworCisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
SW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRo
L1hQYXRoTmFtZXNwYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBY
UGF0aE5hbWVzcGFjZS5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBB
UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBBVEhOYW1lc3BhY2VfSAorI2RlZmluZSBYUEFU
SE5hbWVzcGFjZV9ICisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitjbGFzcyBE
b2N1bWVudDsKK2NsYXNzIFN0cmluZ0ltcGw7CisKK2NsYXNzIFhQYXRoTmFtZXNwYWNlIDogcHVi
bGljIFdlYkNvcmU6Ok5vZGUKK3sKK3B1YmxpYzoKKyAgICBYUGF0aE5hbWVzcGFjZShEb2N1bWVu
dCAqcHRyLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBT
dHJpbmcmIHVyaSk7CisgICAgdmlydHVhbCB+WFBhdGhOYW1lc3BhY2UoKTsKKworICAgIHZpcnR1
YWwgRG9jdW1lbnQgKm93bmVyRG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVsZW1lbnQg
Km93bmVyRWxlbWVudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcg
JnByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcgJm5hbWVzcGFjZVVSSSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBXZWJDb3JlOjpOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIERvY3VtZW50ICptX293bmVyRG9jdW1lbnQ7CisgICAgQXRvbWljU3RyaW5n
IG1fcHJlZml4OworICAgIEF0b21pY1N0cmluZyBtX3VyaTsKK307CisKK30KKworI2VuZGlmIC8v
IFhQQVRIX1NVUFBPUlQKKyNlbmRpZiAvLyBYUEFUSE5hbWVzcGFjZV9ICisKSW5kZXg6IFdlYkNv
cmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgv
WFBhdGhFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV2
YWx1YXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
T1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisg
KiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0aEV2
YWx1YXRvci5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRo
TlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisKKyNpbmNsdWRlICJpbXBsL3V0aWwuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgWFBhdGg7CisgICAgCitQYXNzUmVmUHRyPFhQYXRoRXhw
cmVzc2lvbj4gWFBhdGhFdmFsdWF0b3I6OmNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSYgZXhjZXB0aW9uY29kZSkKK3sKKyAgICBSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBleHBy
ID0gWFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVy
LCBleGNlcHRpb25jb2RlKTsKKyAgICAKKyAgICByZXR1cm4gZXhwcjsKK30KKworUGFzc1JlZlB0
cjxYUGF0aE5TUmVzb2x2ZXI+IFhQYXRoRXZhbHVhdG9yOjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUg
Km5vZGVSZXNvbHZlcikKK3sKKyAgICByZXR1cm4gbmV3IFhQYXRoTlNSZXNvbHZlcihub2RlUmVz
b2x2ZXIpOworfQorCitQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBYUGF0aEV2YWx1YXRvcjo6ZXZh
bHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVz
b2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYUGF0aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZXhjZXB0aW9uY29kZSkKK3sKKyAgICBp
ZiAoIWlzVmFsaWRDb250ZXh0Tm9kZShjb250ZXh0Tm9kZSkpIHsKKyAgICAgICAgZXhjZXB0aW9u
Y29kZSA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBleHByID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNz
aW9uLCByZXNvbHZlciwgZXhjZXB0aW9uY29kZSk7CisgICAgaWYoZXhjZXB0aW9uY29kZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlKGNvbnRleHRO
b2RlLCB0eXBlLCByZXN1bHQsIGV4Y2VwdGlvbmNvZGUpOworfQorCit9CisKKyNlbmRpZiAvLyBY
UEFUSF9TVVBQT1JUCisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFi
ZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAq
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFU
SF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJOb2Rl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFBhdGhOU1Jlc29sdmVyOjpYUGF0aE5TUmVz
b2x2ZXIoTm9kZSAqbm9kZSkKKyAgICA6IG1fbm9kZShub2RlKQoreworfQorCitTdHJpbmcgWFBh
dGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkoY29uc3QgU3RyaW5nJiBwcmVmaXgpCit7
CisgICAgLy8gQXBwYXJlbnRseSBOb2RlOjpsb29rdXBOYW1lc3BhY2VVUkkgZG9lc24ndCBkbyB0
aGlzLgorICAgIGlmIChwcmVmaXggPT0gInhtbCIpCisgICAgICAgIHJldHVybiAiaHR0cDovL3d3
dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKKworICAgIHJldHVybiBtX25vZGUgPyBtX25v
ZGUtPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpIDogU3RyaW5nKCk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIFhQQVRIX1NVUFBPUlQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBX
ZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRo
RXhwcmVzc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJp
Z2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT
IE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAor
ICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lm
bmRlZiBYUEFUSEVYUFJFU1NJT05JTVBMX0gKKyNkZWZpbmUgWFBBVEhFWFBSRVNTSU9OSU1QTF9I
CisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiU2hhcmVkLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgImltcGwvcGFyc2Vkc3RhdGVtZW50LmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworY2xhc3MgTm9k
ZTsKK2NsYXNzIFhQYXRoTlNSZXNvbHZlcjsKK2NsYXNzIFhQYXRoUmVzdWx0OworCitjbGFzcyBY
UGF0aEV4cHJlc3Npb24gOiBwdWJsaWMgU2hhcmVkPFhQYXRoRXhwcmVzc2lvbj4KK3sKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Np
b24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBYUGF0aE5TUmVzb2x2ZXIqLCBFeGNlcHRpb25D
b2RlJik7CisKKyAgICBQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBldmFsdWF0ZShOb2RlKiBjb250
ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoUmVz
dWx0KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
Jik7CisgICAgICAgIAorcHJpdmF0ZToKKyAgICBYUGF0aDo6UGFyc2VkU3RhdGVtZW50IG1fc3Rh
dGVtZW50OworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorI2VuZGlmIC8vIFhQ
QVRIRVhQUkVTU0lPTklNUExfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmlkbAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9k
dWxlIHhwYXRoIHsKKworICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3Rvcl0gWFBhdGhS
ZXN1bHQgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBTllfVFlQRSAgICAgICAgICAg
ICAgICAgICAgICAgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOVU1CRVJfVFlQ
RSAgICAgICAgICAgICAgICAgICAgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBT
VFJJTkdfVFlQRSAgICAgICAgICAgICAgICAgICAgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBCT09MRUFOX1RZUEUgICAgICAgICAgICAgICAgICAgPSAzOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICAgPSA0OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAgICAg
PSA1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTk9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFICAgPSA2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBPUkRFUkVEX05PREVf
U05BUFNIT1RfVFlQRSAgICAgPSA3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBTllf
VU5PUkRFUkVEX05PREVfVFlQRSAgICAgICAgPSA4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSAgICAgICAgPSA5OworCisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCAgcmVzdWx0VHlwZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIGRvdWJsZSAgICAgICAgICBudW1iZXJWYWx1ZQorICAgICAgICAgICAgZ2V0
dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgIHN0cmluZ1ZhbHVlCisgICAgICAgICAgICBnZXR0
ZXIgcmFpc2VzIChET01FeGNlcHRpb24pOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBi
b29sZWFuICAgICAgICAgYm9vbGVhblZhbHVlCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChE
T01FeGNlcHRpb24pOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlICAgICAgICAg
ICAgc2luZ2xlTm9kZVZhbHVlCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChET01FeGNlcHRp
b24pOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgaW52YWxp
ZEl0ZXJhdG9yU3RhdGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
ICAgc25hcHNob3RMZW5ndGgKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgTm9kZSBpdGVyYXRlTmV4dCgpCisgICAgICAgICAg
ICByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGUgc25hcHNob3RJdGVtKGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgpCisgICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7Cisg
ICAgfTsKK30KSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
CisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIFhQQVRIRVZBTFVBVE9SX0gKKyNkZWZpbmUgWFBBVEhFVkFMVUFU
T1JfSAorI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlNoYXJlZC5oIgorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKK2NsYXNzIE5vZGU7
CisKK2NsYXNzIFhQYXRoRXhwcmVzc2lvbjsKK2NsYXNzIFhQYXRoTlNSZXNvbHZlcjsKK2NsYXNz
IFhQYXRoUmVzdWx0OworCitjb25zdCBpbnQgWFBhdGhFeGNlcHRpb25PZmZzZXQgPSA0MDA7Citj
b25zdCBpbnQgWFBhdGhFeGNlcHRpb25NYXggPSA0OTk7ICAgCisKK2VudW0gWFBhdGhFeGNlcHRp
b25Db2RlIHsgSU5WQUxJRF9FWFBSRVNTSU9OX0VSUiA9IFhQYXRoRXhjZXB0aW9uT2Zmc2V0ICsg
NTEsIFRZUEVfRVJSIH07CisKK2NsYXNzIFhQYXRoRXZhbHVhdG9yIDogcHVibGljIFNoYXJlZDxY
UGF0aEV2YWx1YXRvcj4KK3sKK3B1YmxpYzoKKyAgICBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lv
bj4gY3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciog
cmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCYgZXhjZXB0aW9uY29kZSk7CisgICAgUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+
IGNyZWF0ZU5TUmVzb2x2ZXIoTm9kZSAqbm9kZVJlc29sdmVyKTsKKyAgICBQYXNzUmVmUHRyPFhQ
YXRoUmVzdWx0PiBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqY29udGV4dE5vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0ICpyZXN1bHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZleGNlcHRpb25jb2Rl
KTsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKyNlbmRpZiAvLyBYUEFUSEVW
QUxVQVRPUklNUExfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogWFBhdGhOU1Jlc29sdmVyLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVy
aWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQQVRITlNS
RVNPTFZFUklNUExfSAorI2RlZmluZSBYUEFUSE5TUkVTT0xWRVJJTVBMX0gKKyNpZiBYUEFUSF9T
VVBQT1JUCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitjbGFzcyBOb2RlOworCitjbGFzcyBYUGF0aE5T
UmVzb2x2ZXIgOiBwdWJsaWMgU2hhcmVkPFhQYXRoTlNSZXNvbHZlcj4KK3sKKyAgICBwdWJsaWM6
CisgICAgICAgIFhQYXRoTlNSZXNvbHZlcihOb2RlICpub2RlKTsKKworICAgICAgICBTdHJpbmcg
bG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgcHJlZml4KTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIE5vZGUgKm1fbm9kZTsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKyNlbmRpZiAvLyBYUEFUSE5TUkVTT0xWRVJJTVBMX0gKKwpJbmRleDogV2ViQ29yZS94cGF0
aC9pbXBsL2V4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9l
eHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9leHByZXNz
aW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUg
PGNtYXRoPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgWFBhdGggeworICAgIAorVmFsdWU6OlZhbHVlKCkKK3sKK30KKworVmFsdWU6OlZh
bHVlKE5vZGUgKnZhbHVlKQorICAgIDogbV90eXBlKE5vZGVzZXQpCit7CisgICAgbV9ub2Rlc2V0
LmFwcGVuZCh2YWx1ZSk7Cit9CisKK1ZhbHVlOjpWYWx1ZShjb25zdCBOb2RlU2V0JiB2YWx1ZSkK
KyAgICA6IG1fdHlwZShOb2Rlc2V0KQorICAgICwgbV9ub2Rlc2V0KHZhbHVlKQoreworfQorCitW
YWx1ZTo6VmFsdWUoYm9vbCB2YWx1ZSkKKyAgICA6IG1fdHlwZShCb29sZWFuKSwKKyAgICBtX2Jv
b2wodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpWYWx1ZShkb3VibGUgdmFsdWUpCisgICAgOiBtX3R5
cGUoTnVtYmVyKSwKKyAgICBtX251bWJlcih2YWx1ZSkKK3sKK30KKworVmFsdWU6OlZhbHVlKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlKQorICAgIDogbV90eXBlKFN0cmluZyksCisgICAg
bV9zdHJpbmcodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpUeXBlIFZhbHVlOjp0eXBlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90eXBlOworfQorCitib29sIFZhbHVlOjppc05vZGVzZXQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3R5cGUgPT0gTm9kZXNldDsKK30KKworYm9vbCBWYWx1ZTo6aXNC
b29sZWFuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlID09IEJvb2xlYW47Cit9CisKK2Jv
b2wgVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlID09IE51bWJl
cjsKK30KKworYm9vbCBWYWx1ZTo6aXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5
cGUgPT0gU3RyaW5nOworfQorCitOb2RlU2V0JiBWYWx1ZTo6dG9Ob2RlU2V0KCkKK3sKKyAgICBp
ZiAobV90eXBlICE9IE5vZGVzZXQpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90IGNvbnZl
cnQgYW55dGhpbmcgdG8gYSBub2Rlc2V0LiIpOworICAgIH0KKyAgICByZXR1cm4gbV9ub2Rlc2V0
OworfQorCitjb25zdCBOb2RlU2V0JiBWYWx1ZTo6dG9Ob2RlU2V0KCkgY29uc3QKK3sKKyAgICBp
ZiAobV90eXBlICE9IE5vZGVzZXQpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90IGNvbnZl
cnQgYW55dGhpbmcgdG8gYSBub2Rlc2V0LiIpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV9u
b2Rlc2V0OyAgICAKK30gICAgCisKK2Jvb2wgVmFsdWU6OnRvQm9vbGVhbigpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBOb2Rlc2V0OgorICAgICAgICAgICAg
cmV0dXJuICFtX25vZGVzZXQuaXNFbXB0eSgpOworICAgICAgICBjYXNlIEJvb2xlYW46CisgICAg
ICAgICAgICByZXR1cm4gbV9ib29sOworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAg
IHJldHVybiBtX251bWJlciAhPSAwOworICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAg
IHJldHVybiAhbV9zdHJpbmcuaXNFbXB0eSgpOworICAgIH0KKyAgICByZXR1cm4gYm9vbCgpOwor
fQorCitkb3VibGUgVmFsdWU6OnRvTnVtYmVyKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgICAgICBjYXNlIE5vZGVzZXQ6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUodG9T
dHJpbmcoKSkudG9OdW1iZXIoKTsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBy
ZXR1cm4gbV9udW1iZXI7CisgICAgICAgIGNhc2UgU3RyaW5nOiB7CisgICAgICAgICAgICBib29s
IGNhbkNvbnZlcnQ7CisgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBtX3N0cmluZy5z
aW1wbGlmeVdoaXRlU3BhY2UoKTsKKworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gcy50b0Rv
dWJsZSgmY2FuQ29udmVydCk7CisgICAgICAgICAgICBpZiAoY2FuQ29udmVydCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuIE5BTjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAg
ICByZXR1cm4gbV9ib29sID8gMSA6IDA7CisgICAgfQorICAgIHJldHVybiBkb3VibGUoKTsKK30K
KworRGVwcmVjYXRlZFN0cmluZyBWYWx1ZTo6dG9TdHJpbmcoKSBjb25zdAoreworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgTm9kZXNldDoKKyAgICAgICAgICAgIGlmIChtX25v
ZGVzZXQuaXNFbXB0eSgpKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKG1fbm9kZXNldFswXS5n
ZXQoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAg
ICAgIHJldHVybiBtX3N0cmluZzsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBp
ZiAoaXNuYW4obV9udW1iZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiAiTmFOIjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1fbnVtYmVyID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICIw
IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzaW5mKG1fbnVtYmVyKSkgeworICAgICAgICAgICAg
ICAgIGlmIChzaWduYml0KG1fbnVtYmVyKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIkluZmluaXR5IjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiLUluZmluaXR5IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9udW1iZXIpOworICAgICAgICBjYXNlIEJvb2xlYW46
CisgICAgICAgICAgICByZXR1cm4gbV9ib29sID8gInRydWUiIDogImZhbHNlIjsKKyAgICB9Cisg
ICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKK30KKworRXZhbHVhdGlvbkNvbnRleHQgJkV4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkKK3sKKyAgICBzdGF0aWMgRXZhbHVhdGlvbkNv
bnRleHQgZXZhbHVhdGlvbkNvbnRleHQ7CisgICAgcmV0dXJuIGV2YWx1YXRpb25Db250ZXh0Owor
fQorCitFeHByZXNzaW9uOjpFeHByZXNzaW9uKCkKKyAgICA6IG1fY29uc3RhbnRWYWx1ZSgwKQor
eworfQorCitFeHByZXNzaW9uOjp+RXhwcmVzc2lvbigpCit7CisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fc3ViRXhwcmVzc2lvbnMpOworICAgIAorICAgIGRlbGV0ZSBtX2NvbnN0YW50VmFsdWU7Cit9
CisKK1ZhbHVlIEV4cHJlc3Npb246OmV2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBpZiAobV9jb25z
dGFudFZhbHVlKQorICAgICAgICByZXR1cm4gKm1fY29uc3RhbnRWYWx1ZTsKKyAgICByZXR1cm4g
ZG9FdmFsdWF0ZSgpOworfQorCit2b2lkIEV4cHJlc3Npb246OmFkZFN1YkV4cHJlc3Npb24oRXhw
cmVzc2lvbiAqZXhwcikKK3sKKyAgICBtX3N1YkV4cHJlc3Npb25zLmFwcGVuZChleHByKTsKK30K
Kwordm9pZCBFeHByZXNzaW9uOjpvcHRpbWl6ZSgpCit7CisgICAgYm9vbCBhbGxTdWJFeHByZXNz
aW9uc0NvbnN0YW50ID0gdHJ1ZTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zdWJFeHByZXNzaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9zdWJFeHByZXNz
aW9uc1tpXS0+aXNDb25zdGFudCgpKQorICAgICAgICAgICAgbV9zdWJFeHByZXNzaW9uc1tpXS0+
b3B0aW1pemUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWxsU3ViRXhwcmVzc2lvbnND
b25zdGFudCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChhbGxTdWJFeHByZXNzaW9uc0NvbnN0
YW50KSB7CisgICAgICAgIG1fY29uc3RhbnRWYWx1ZSA9IG5ldyBWYWx1ZShkb0V2YWx1YXRlKCkp
OworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9zdWJFeHByZXNzaW9ucyk7CisgICAgICAgIG1f
c3ViRXhwcmVzc2lvbnMuY2xlYXIoKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBFeHByZXNz
aW9uOjpzdWJFeHByQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1YkV4cHJlc3Npb25z
LnNpemUoKTsKK30KKworRXhwcmVzc2lvbiogRXhwcmVzc2lvbjo6c3ViRXhwcih1bnNpZ25lZCBp
KQoreworICAgIEFTU0VSVChpIDwgc3ViRXhwckNvdW50KCkpOworCisgICAgcmV0dXJuIG1fc3Vi
RXhwcmVzc2lvbnNbaV07Cit9CisKK2NvbnN0IEV4cHJlc3Npb24gKkV4cHJlc3Npb246OnN1YkV4
cHIodW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaSA8IHN1YkV4cHJDb3VudCgpKTsK
KyAgICAKKyAgICByZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKK30KKworYm9vbCBFeHByZXNz
aW9uOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zdWJFeHByZXNzaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fc3ViRXhwcmVz
c2lvbnNbaV0tPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9S
VApJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3hwYXRoL2ltcGwvcHJlZGljYXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
CisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNp
bmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisKKyNpbmNsdWRlICJO
b2RlLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBYUGF0aCB7CisgICAgICAgIAorTnVtYmVyOjpOdW1iZXIoZG91YmxlIHZhbHVlKQorICAg
IDogbV92YWx1ZSh2YWx1ZSkKK3sKK30KKworYm9vbCBOdW1iZXI6OmlzQ29uc3RhbnQoKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCitWYWx1ZSBOdW1iZXI6OmRvRXZhbHVhdGUoKSBj
b25zdAoreworICAgIHJldHVybiBWYWx1ZShtX3ZhbHVlKTsKK30KKworU3RyaW5nRXhwcmVzc2lv
bjo6U3RyaW5nRXhwcmVzc2lvbihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1ZSkKKyAgICA6
IG1fdmFsdWUodmFsdWUpCit7Cit9CisKK2Jvb2wgU3RyaW5nRXhwcmVzc2lvbjo6aXNDb25zdGFu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVlIFN0cmluZ0V4cHJlc3Np
b246OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1ZShtX3ZhbHVlKTsKK30K
KworVmFsdWUgTmVnYXRpdmU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVlIHAoc3Vi
RXhwcigwKS0+ZXZhbHVhdGUoKSk7CisgICAgaWYgKCFwLmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
TE9HKFhQYXRoLCAiVW5hcnkgbWludXMgaXMgdW5kZWZpbmVkIGZvciBub24tbnVtZXJpYyB0eXBl
cy4iKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCk7CisgICAgfQorICAgIHJldHVybiBWYWx1ZSgt
cC50b051bWJlcigpKTsKK30KKworTnVtZXJpY09wOjpOdW1lcmljT3AoaW50IF9vcENvZGUsIEV4
cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhzKSA6CisgICAgb3BDb2RlKF9vcENvZGUpCit7
CisgICAgYWRkU3ViRXhwcmVzc2lvbihsaHMpOworICAgIGFkZFN1YkV4cHJlc3Npb24ocmhzKTsK
K30KKworVmFsdWUgTnVtZXJpY09wOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBWYWx1ZSBs
aHMoc3ViRXhwcigwKS0+ZXZhbHVhdGUoKSk7CisgICAgVmFsdWUgcmhzKHN1YkV4cHIoMSktPmV2
YWx1YXRlKCkpOworICAgIAorICAgIGlmICghbGhzLmlzTnVtYmVyKCkgfHwgIXJocy5pc051bWJl
cigpKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkNhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBu
b24tbnVtZXJpYyB0eXBlcy4iKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCk7CisgICAgfQorCisg
ICAgZG91YmxlIGxlZnRWYWwgPSBsaHMudG9OdW1iZXIoKSwgcmlnaHRWYWwgPSByaHMudG9OdW1i
ZXIoKTsKKworICAgIHN3aXRjaCAob3BDb2RlKSB7CisgICAgICAgIGNhc2UgT1BfQWRkOgorICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlKGxlZnRWYWwgKyByaWdodFZhbCk7CisgICAgICAgIGNhc2Ug
T1BfU3ViOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlKGxlZnRWYWwgLSByaWdodFZhbCk7Cisg
ICAgICAgIGNhc2UgT1BfTXVsOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlKGxlZnRWYWwgKiBy
aWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfRGl2OgorICAgICAgICAgICAgaWYgKHJpZ2h0VmFs
ID09IDAuMCB8fCByaWdodFZhbCA9PSAtMC4wKQorICAgICAgICAgICAgICAgIHJldHVybiBWYWx1
ZSgpOyAvL0RpdmlkZSBieSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBWYWx1ZShsZWZ0VmFsIC8gcmlnaHRWYWwpOworICAgICAgICBjYXNlIE9QX01vZDoKKyAg
ICAgICAgICAgIGlmIChyaWdodFZhbCA9PSAwLjAgfHwgcmlnaHRWYWwgPT0gLTAuMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVmFsdWUoKTsgLy9EaXZpZGUgYnkgMDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWUocmVtYWluZGVyKGxlZnRWYWwsIHJpZ2h0
VmFsKSk7CisgICAgICAgIGNhc2UgT1BfR1Q6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUgKGxl
ZnRWYWwgPiByaWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfR0U6CisgICAgICAgICAgICByZXR1
cm4gVmFsdWUgKGxlZnRWYWwgPj0gcmlnaHRWYWwpOworICAgICAgICBjYXNlIE9QX0xUOgorICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlIChsZWZ0VmFsIDwgcmlnaHRWYWwpOworICAgICAgICBjYXNl
IE9QX0xFOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlIChsZWZ0VmFsIDw9IHJpZ2h0VmFsKTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgcmV0dXJu
IFZhbHVlKCk7CisgICAgfQorfQorCitEZXByZWNhdGVkU3RyaW5nIE51bWVyaWNPcDo6b3BOYW1l
KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wQ29kZSkgeworICAgICAgICBjYXNlIE9QX0FkZDoK
KyAgICAgICAgICAgIHJldHVybiAiYWRkaXRpb24iOworICAgICAgICBjYXNlIE9QX1N1YjoKKyAg
ICAgICAgICAgIHJldHVybiAic3VidHJhY3Rpb24iOworICAgICAgICBjYXNlIE9QX011bDoKKyAg
ICAgICAgICAgIHJldHVybiAibXVsdGlwbGljYXRpb24iOworICAgICAgICBjYXNlIE9QX0RpdjoK
KyAgICAgICAgICAgIHJldHVybiAiZGl2aXNpb24iOworICAgICAgICBjYXNlIE9QX01vZDoKKyAg
ICAgICAgICAgIHJldHVybiAibW9kdWxvIjsKKyAgICAgICAgY2FzZSBPUF9HVDoKKyAgICAgICAg
ICAgIHJldHVybiAicmVsYXRpb25HVCI7CisgICAgICAgIGNhc2UgT1BfR0U6CisgICAgICAgICAg
ICByZXR1cm4gInJlbGF0aW9uR0UiOworICAgICAgICBjYXNlIE9QX0xUOgorICAgICAgICAgICAg
cmV0dXJuICJyZWxhdGlvbkxUIjsKKyAgICAgICAgY2FzZSBPUF9MRToKKyAgICAgICAgICAgIHJl
dHVybiAicmVsYXRpb25MRSI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQo
MCk7CisgICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOworICAgIH0KK30KKwor
RXFUZXN0T3A6OkVxVGVzdE9wKGludCBfb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Np
b24qIHJocykgOgorICAgIG9wQ29kZShfb3BDb2RlKQoreworICAgIGFkZFN1YkV4cHJlc3Npb24o
bGhzKTsKKyAgICBhZGRTdWJFeHByZXNzaW9uKHJocyk7Cit9CisKK1ZhbHVlIEVxVGVzdE9wOjpk
b0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBWYWx1ZSBsaHMoc3ViRXhwcigwKS0+ZXZhbHVhdGUo
KSk7CisgICAgVmFsdWUgcmhzKHN1YkV4cHIoMSktPmV2YWx1YXRlKCkpOworCisgICAgYm9vbCBl
cXVhbDsKKyAgICBpZiAobGhzLmlzQm9vbGVhbigpIHx8IHJocy5pc0Jvb2xlYW4oKSkgeworICAg
ICAgICBlcXVhbCA9IChsaHMudG9Cb29sZWFuKCkgPT0gcmhzLnRvQm9vbGVhbigpKTsKKyAgICB9
IGVsc2UgaWYgKGxocy5pc051bWJlcigpIHx8IHJocy5pc051bWJlcigpKSB7CisgICAgICAgIGVx
dWFsID0gKGxocy50b051bWJlcigpID09IHJocy50b051bWJlcigpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBlcXVhbCA9IChsaHMudG9TdHJpbmcoKSA9PSByaHMudG9TdHJpbmcoKSk7CisgICAg
fQorCisgICAgaWYgKG9wQ29kZSA9PSBPUF9FUSkKKyAgICAgICAgcmV0dXJuIFZhbHVlKGVxdWFs
KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBWYWx1ZSghZXF1YWwpOworfQorCitEZXByZWNh
dGVkU3RyaW5nIEVxVGVzdE9wOjpvcE5hbWUoKSBjb25zdAoreworICAgIGlmIChvcENvZGUgPT0g
T1BfRVEpCisgICAgICAgIHJldHVybiAicmVsYXRpb25FUSI7CisgICAgZWxzZQorICAgICAgICBy
ZXR1cm4gInJlbGF0aW9uTkUiOworfQorCitMb2dpY2FsT3A6OkxvZ2ljYWxPcChpbnQgX29wQ29k
ZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpIDoKKyAgICBvcENvZGUoX29wQ29k
ZSkKK3sKKyAgICBhZGRTdWJFeHByZXNzaW9uKGxocyk7CisgICAgYWRkU3ViRXhwcmVzc2lvbihy
aHMpOworfQorCitib29sIExvZ2ljYWxPcDo6c2hvcnRDaXJjdWl0T24oKSBjb25zdAoreworICAg
IGlmIChvcENvZGUgPT0gT1BfQW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vZmFsc2UgYW5k
IGZvbworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHRydWU7ICAvL3RydWUgb3IgYmFyCit9CisK
K2Jvb2wgTG9naWNhbE9wOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViRXhw
cigwKS0+aXNDb25zdGFudCgpICYmCisgICAgICAgICAgIHN1YkV4cHIoMCktPmV2YWx1YXRlKCku
dG9Cb29sZWFuKCkgPT0gc2hvcnRDaXJjdWl0T24oKTsKK30KKworRGVwcmVjYXRlZFN0cmluZyBM
b2dpY2FsT3A6Om9wTmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG9wQ29kZSA9PSBPUF9BbmQpCisg
ICAgICAgIHJldHVybiAiY29uanVuY3Rpb24iOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICJk
aXNqdW5jdGlvbiI7Cit9CisKK1ZhbHVlIExvZ2ljYWxPcDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisgICAgVmFsdWUgbGhzKHN1YkV4cHIoMCktPmV2YWx1YXRlKCkpOworCisgICAgLy8gVGhpcyBp
cyBub3Qgb25seSBhbiBvcHRpbWl6YXRpb24sIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoCisg
ICAgLy8gZGljdGF0ZXMgdGhhdCB3ZSBtdXN0IGRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbgor
ICAgIGJvb2wgbGhzQm9vbCA9IGxocy50b0Jvb2xlYW4oKTsKKyAgICBpZiAobGhzQm9vbCA9PSBz
aG9ydENpcmN1aXRPbigpKSB7CisgICAgICAgIHJldHVybiBWYWx1ZShsaHNCb29sKTsKKyAgICB9
CisKKyAgICByZXR1cm4gVmFsdWUoc3ViRXhwcigxKS0+ZXZhbHVhdGUoKS50b0Jvb2xlYW4oKSk7
Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgVW5pb246Om9wTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICJ1bmlvbiI7Cit9CisKK1ZhbHVlIFVuaW9uOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAg
ICBWYWx1ZSBsaHMgPSBzdWJFeHByKDApLT5ldmFsdWF0ZSgpOworICAgIFZhbHVlIHJocyA9IHN1
YkV4cHIoMSktPmV2YWx1YXRlKCk7CisgICAgaWYgKCFsaHMuaXNOb2Rlc2V0KCkgfHwgIXJocy5p
c05vZGVzZXQoKSkgeworICAgICAgICBMT0coWFBhdGgsICJVbmlvbiBvcGVyYXRvciAnfCcgd29y
a3Mgb25seSB3aXRoIG5vZGVzZXRzLiIpOworICAgICAgICByZXR1cm4gVmFsdWUoTm9kZVNldCgp
KTsKKyAgICB9CisgICAgCisgICAgTm9kZVNldCBsaHNOb2RlcyA9IGxocy50b05vZGVTZXQoKTsK
KyAgICBOb2RlU2V0IHJoc05vZGVzID0gcmhzLnRvTm9kZVNldCgpOworICAgIE5vZGVTZXQgcmVz
dWx0ID0gbGhzTm9kZXM7CisgICAgCisgICAgSGFzaFNldDxOb2RlICo+IG5vZGVzOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByaHNOb2Rlcy5zaXplKCk7IGkrKykgeworICAg
ICAgICBOb2RlICpub2RlID0gcmhzTm9kZXNbaV0uZ2V0KCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoIW5vZGVzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5v
ZGUpOworICAgICAgICAgICAgbm9kZXMuYWRkKG5vZGUpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHJldHVybiBWYWx1ZShyZXN1bHQpOworfQorCitQcmVkaWNhdGU6OlByZWRpY2F0ZShF
eHByZXNzaW9uICpleHByKQorICAgIDogbV9leHByKGV4cHIpCit7Cit9CisKK1ByZWRpY2F0ZTo6
flByZWRpY2F0ZSgpCit7CisgICAgZGVsZXRlIG1fZXhwcjsKK30KKworYm9vbCBQcmVkaWNhdGU6
OmV2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9leHByICE9IDApOworCisgICAgVmFs
dWUgcmVzdWx0KG1fZXhwci0+ZXZhbHVhdGUoKSk7CisKKyAgICAvLyBmb29bM10gcmVhbGx5IG1l
YW5zIGZvb1twb3NpdGlvbigpPTNdCisgICAgaWYgKHJlc3VsdC5pc051bWJlcigpKSB7CisgICAg
ICAgIEV4cHJlc3Npb24gKnJlYWxFeHByID0gbmV3IEVxVGVzdE9wKEVxVGVzdE9wOjpPUF9FUSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0
aW9uKCJwb3NpdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlcihyZXN1
bHQudG9OdW1iZXIoKSkpOworICAgICAgICByZXN1bHQgPSByZWFsRXhwci0+ZXZhbHVhdGUoKTsK
KyAgICAgICAgZGVsZXRlIHJlYWxFeHByOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9C
b29sZWFuKCk7Cit9CisKK3ZvaWQgUHJlZGljYXRlOjpvcHRpbWl6ZSgpCit7CisgICAgbV9leHBy
LT5vcHRpbWl6ZSgpOworfQorCit9Cit9CisKKyNlbmRpZiBYUEFUSF9TVVBQT1JUCkluZGV4OiBX
ZWJDb3JlL3hwYXRoL2ltcGwvcGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1w
bC9wYXRoLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvcGF0aC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogcGF0aC5oIC0gQ29weXJpZ2h0IDIwMDUg
RnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUEFU
SF9QQVRIX0gKKyNkZWZpbmUgWFBBVEhfUEFUSF9ICisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5j
bHVkZSAiZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgInN0ZXAuaCIKKworI2luY2x1ZGUgPGt4bWxj
b3JlL1ZlY3Rvci5oPgorCitleHRlcm4gaW50IHhwYXRoeXlwYXJzZSgpOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworCitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRXhw
cmVzc2lvbgoreworcHVibGljOgorICAgIEZpbHRlcihFeHByZXNzaW9uKiBleHByLCBjb25zdCBW
ZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7Cisg
ICAgdmlydHVhbCB+RmlsdGVyKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7CisKKyAgICBFeHByZXNzaW9uICptX2V4cHI7CisgICAgVmVjdG9yPFBy
ZWRpY2F0ZSAqPiBtX3ByZWRpY2F0ZXM7Cit9OworCitjbGFzcyBMb2NhdGlvblBhdGggOiBwdWJs
aWMgRXhwcmVzc2lvbgoreworZnJpZW5kIGludCA6OnhwYXRoeXlwYXJzZSgpOworcHVibGljOgor
ICAgIExvY2F0aW9uUGF0aCgpOworICAgIHZpcnR1YWwgfkxvY2F0aW9uUGF0aCgpOworCisgICAg
dm9pZCBvcHRpbWl6ZSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0
ZSgpIGNvbnN0OworCisgICAgVmVjdG9yPFN0ZXAgKj4gbV9zdGVwczsKKyAgICBib29sIG1fYWJz
b2x1dGU7Cit9OworCitjbGFzcyBQYXRoIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoK
KyAgICBQYXRoKEZpbHRlciAqZmlsdGVyLCBMb2NhdGlvblBhdGggKnBhdGgpOworICAgIHZpcnR1
YWwgflBhdGgoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKKworICAgIEZpbHRlciAqbV9maWx0ZXI7CisgICAgTG9jYXRpb25QYXRoICptX3BhdGg7
Cit9OworCit9Cit9CisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorI2VuZGlmIC8vIFhQQVRIX1BB
VEhfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisg
KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAicGFyc2Vkc3RhdGVtZW50LmgiCisjaW5jbHVk
ZSAicGF0aC5oIgorCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworZXh0ZXJuIEV4
cHJlc3Npb24gKnBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBpbnQmIGVj
KTsKKworUGFyc2VkU3RhdGVtZW50OjpQYXJzZWRTdGF0ZW1lbnQoKQorICAgIDogbV9leHByKDAp
Cit7Cit9CisKK1BhcnNlZFN0YXRlbWVudDo6flBhcnNlZFN0YXRlbWVudCgpCit7CisgICAgZGVs
ZXRlIG1fZXhwcjsKK30KKworYm9vbCBQYXJzZWRTdGF0ZW1lbnQ6OnBhcnNlKGNvbnN0IFN0cmlu
ZyYgc3RhdGVtZW50LCBpbnQmIGVjKQoreworICAgIGRlbGV0ZSBtX2V4cHI7CisgICAgCisgICAg
bV9leHByID0gcGFyc2VTdGF0ZW1lbnQoc3RhdGVtZW50LCBlYyk7CisgICAgCisgICAgcmV0dXJu
IChtX2V4cHIgIT0gMCk7Cit9CisKK3ZvaWQgUGFyc2VkU3RhdGVtZW50OjpvcHRpbWl6ZSgpCit7
CisgICAgaWYgKCFtX2V4cHIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZXhwci0+b3B0aW1p
emUoKTsKK30KKworVmFsdWUgUGFyc2VkU3RhdGVtZW50OjpldmFsdWF0ZShOb2RlICpjb250ZXh0
KSBjb25zdAoreworICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IGNv
bnRleHQ7CisgICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGUoKTsKK30KKworfQorfQorCisjZW5k
aWYgLy8gWFBBVEhfU1VQUE9SVApJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVm
ZXJlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZl
cmVuY2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVm
ZXJlbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBP
UgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAq
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgInZhcmlhYmxl
cmVmZXJlbmNlLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgIAorVmFyaWFibGVSZWZlcmVuY2U6OlZh
cmlhYmxlUmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IG1fbmFtZShuYW1lKQor
eworfQorCitib29sIFZhcmlhYmxlUmVmZXJlbmNlOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIFZhcmlhYmxlUmVmZXJlbmNlOjpkb0V2YWx1YXRl
KCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiogYmluZGluZ3MgPSAmZXZh
bHVhdGlvbkNvbnRleHQoKS52YXJpYWJsZUJpbmRpbmdzOworICAgIGlmICghYmluZGluZ3MtPmNv
bnRhaW5zKG1fbmFtZSkpCisgICAgICAgIC8vIEZJWE1FIFdoYXQgdG8gZG8gaWYgYW4gdW5rbm93
biB2YXJpYWJsZSBpcyByZWZlcmVuY2VkPworICAgICAgICByZXR1cm4gVmFsdWUoIiIpOworICAg
IHJldHVybiBWYWx1ZShiaW5kaW5ncy0+Z2V0KG1fbmFtZSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
K30KKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVApJbmRleDogV2ViQ29yZS94cGF0
aC9pbXBsL2V4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZXhw
cmVzc2lvbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24u
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBleHByZXNzaW9uLmggLSBD
b3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIEVYUFJFU1NJT05fSAorI2RlZmluZSBFWFBSRVNTSU9OX0gKKyNpZiBYUEFUSF9T
VVBQT1JUCisKKyNpbmNsdWRlICJ1dGlsLmgiCisKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisj
aW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5o
PgorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBOb2RlOworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworCituYW1lc3BhY2UgWFBhdGgg
eworICAgICAgICAKK3N0cnVjdCBFdmFsdWF0aW9uQ29udGV4dAoreworICAgIEV2YWx1YXRpb25D
b250ZXh0KCkgOiBub2RlKDApLCBzaXplKDApLCBwb3NpdGlvbigwKSwgcmVzb2x2ZXIoMCkgeyB9
CisKKyAgICBXZWJDb3JlOjpOb2RlICpub2RlOworICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAg
ICB1bnNpZ25lZCBsb25nIHBvc2l0aW9uOworICAgIEhhc2hNYXA8V2ViQ29yZTo6U3RyaW5nLCBX
ZWJDb3JlOjpTdHJpbmc+IHZhcmlhYmxlQmluZGluZ3M7CisKKyAgICAvKiBUaGUgZnVuY3Rpb24g
bGlicmFyeSBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlIHRocm91Z2gKKyAgICAgKiBGdW5jdGlvbkxp
YnJhcnk6OnNlbGYoKQorICAgICAqLworICAgIFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlciAqcmVz
b2x2ZXI7Cit9OworCitjbGFzcyBWYWx1ZQoreworcHVibGljOgorICAgIGVudW0gVHlwZSB7Cisg
ICAgICAgIE5vZGVzZXQsIEJvb2xlYW4sIE51bWJlciwgU3RyaW5nCisgICAgfTsKKworICAgIFZh
bHVlKCk7CisgICAgZXhwbGljaXQgVmFsdWUoV2ViQ29yZTo6Tm9kZSAqdmFsdWUpOworICAgIGV4
cGxpY2l0IFZhbHVlKGNvbnN0IE5vZGVTZXQmIHZhbHVlKTsKKyAgICBleHBsaWNpdCBWYWx1ZShi
b29sIHZhbHVlKTsKKyAgICBleHBsaWNpdCBWYWx1ZShkb3VibGUgdmFsdWUpOworICAgIGV4cGxp
Y2l0IFZhbHVlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlKTsKKworICAgIFR5cGUgdHlw
ZSgpIGNvbnN0OworICAgIGJvb2wgaXNOb2Rlc2V0KCkgY29uc3Q7CisgICAgYm9vbCBpc0Jvb2xl
YW4oKSBjb25zdDsKKyAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1N0cmlu
ZygpIGNvbnN0OworCisgICAgTm9kZVNldCYgdG9Ob2RlU2V0KCk7CisgICAgY29uc3QgTm9kZVNl
dCYgdG9Ob2RlU2V0KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsK
KyAgICBkb3VibGUgdG9OdW1iZXIoKSBjb25zdDsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7CisgICAgTm9kZVNldCBt
X25vZGVzZXQ7CisgICAgYm9vbCBtX2Jvb2w7CisgICAgZG91YmxlIG1fbnVtYmVyOworICAgIERl
cHJlY2F0ZWRTdHJpbmcgbV9zdHJpbmc7Cit9OworCitjbGFzcyBFeHByZXNzaW9uCit7CitwdWJs
aWM6CisgICAgc3RhdGljIEV2YWx1YXRpb25Db250ZXh0ICZldmFsdWF0aW9uQ29udGV4dCgpOwor
CisgICAgRXhwcmVzc2lvbigpOworICAgIHZpcnR1YWwgfkV4cHJlc3Npb24oKTsKKyAgICB2aXJ0
dWFsIFZhbHVlIGV2YWx1YXRlKCkgY29uc3Q7CisKKyAgICB2b2lkIGFkZFN1YkV4cHJlc3Npb24o
RXhwcmVzc2lvbiAqZXhwcik7CisgICAgdm9pZCBvcHRpbWl6ZSgpOworICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBpbnQgc3Vi
RXhwckNvdW50KCkgY29uc3Q7CisgICAgRXhwcmVzc2lvbiAqc3ViRXhwcih1bnNpZ25lZCBpKTsK
KyAgICBjb25zdCBFeHByZXNzaW9uICpzdWJFeHByKHVuc2lnbmVkIGkpIGNvbnN0OworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0ID0gMDsKKworICAgIFZl
Y3RvcjxFeHByZXNzaW9uICo+IG1fc3ViRXhwcmVzc2lvbnM7CisgICAgVmFsdWUgKm1fY29uc3Rh
bnRWYWx1ZTsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKyNlbmRpZiAv
LyBFWFBSRVNTSU9OX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNTkgQEAKKy8qCisgKiBwcmVkaWNhdGUuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFh
YmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor
ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgUFJFRElDQVRFX0gKKyNk
ZWZpbmUgUFJFRElDQVRFX0gKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJleHByZXNz
aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAg
IAorY2xhc3MgTnVtYmVyIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKyAgICBOdW1i
ZXIoZG91YmxlIHZhbHVlKTsKKworICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgZG91Ymxl
IG1fdmFsdWU7Cit9OworCitjbGFzcyBTdHJpbmdFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Np
b24KK3sKK3B1YmxpYzoKKyAgICBTdHJpbmdFeHByZXNzaW9uKGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJnZhbHVlKTsKKworICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgRGVwcmVjYXRlZFN0
cmluZyBtX3ZhbHVlOworfTsKKworY2xhc3MgTmVnYXRpdmUgOiBwdWJsaWMgRXhwcmVzc2lvbgor
eworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEJpbmFyeUV4cHJCYXNlIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3QgPSAwOworfTsKKwor
Y2xhc3MgTnVtZXJpY09wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE9QX0FkZCA9IDEsCisgICAgICAgIE9QX1N1YiwKKyAgICAgICAgT1Bf
TXVsLAorICAgICAgICBPUF9EaXYsCisgICAgICAgIE9QX01vZCwKKyAgICAgICAgT1BfR1QsCisg
ICAgICAgIE9QX0xULAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfTEUKKyAgICB9OworCisg
ICAgTnVtZXJpY09wKGludCBvcENvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhz
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgaW50IG9wQ29k
ZTsKK307CisKK2NsYXNzIEVxVGVzdE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7CitwdWJs
aWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0VRID0gMSwKKyAgICAgICAgT1BfTkUKKyAgICB9
OworCisgICAgRXFUZXN0T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9u
KiByaHMpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBvcE5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICBpbnQg
b3BDb2RlOworfTsKKworY2xhc3MgTG9naWNhbE9wIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7
CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0FuZCA9IDEsCisgICAgICAgIE9QX09y
CisgICAgfTsKKworICAgIExvZ2ljYWxPcChpbnQgb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4
cHJlc3Npb24qIHJocyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGJvb2wgc2hvcnRDaXJjdWl0T24oKSBjb25zdDsKKyAgICB2aXJ0dWFs
IERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7CisgICAgaW50IG9wQ29kZTsKK307CisKK2NsYXNzIFVuaW9uIDogcHVi
bGljIEJpbmFyeUV4cHJCYXNlCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0
cmluZyBvcE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25z
dDsKK307CisKK2NsYXNzIFByZWRpY2F0ZQoreworcHVibGljOgorICAgIFByZWRpY2F0ZShFeHBy
ZXNzaW9uICpleHByKTsKKyAgICB+UHJlZGljYXRlKCk7CisKKyAgICBib29sIGV2YWx1YXRlKCkg
Y29uc3Q7CisKKyAgICB2b2lkIG9wdGltaXplKCk7CisKK3ByaXZhdGU6CisgICAgUHJlZGljYXRl
KGNvbnN0IFByZWRpY2F0ZSAmcmhzKTsKKyAgICBQcmVkaWNhdGUgJm9wZXJhdG9yPShjb25zdCBQ
cmVkaWNhdGUgJnJocyk7CisKKyAgICBFeHByZXNzaW9uICptX2V4cHI7Cit9OworCit9Cit9Cisj
ZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorI2VuZGlmIC8vIFBSRURJQ0FURV9ICisKSW5kZXg6IFdl
YkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvaW1wbC9mdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBs
L2Z1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODE2IEBACisvKgorICogQ29w
eXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBS
RVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiZnVu
Y3Rpb25zLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFw
LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKworI2luY2x1
ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAg
ICAgICAgCisjZGVmaW5lIERFRklORV9GVU5DVElPTl9DUkVBVE9SKENsYXNzKSBcCitzdGF0aWMg
RnVuY3Rpb24gKmNyZWF0ZSMjQ2xhc3MoKSB7IHJldHVybiBuZXcgQ2xhc3M7IH0KKworY2xhc3Mg
SW50ZXJ2YWwKK3sKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgSW5mID0t
MTsKKworICAgICAgICBJbnRlcnZhbCgpOworICAgICAgICBJbnRlcnZhbChpbnQgdmFsdWUpOwor
ICAgICAgICBJbnRlcnZhbChpbnQgbWluLCBpbnQgbWF4KTsKKworICAgICAgICBib29sIGNvbnRh
aW5zKGludCB2YWx1ZSkgY29uc3Q7CisKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBhc1N0cmlu
ZygpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fbWluOworICAgICAgICBp
bnQgbV9tYXg7Cit9OworCitjbGFzcyBGdW5MYXN0IDogcHVibGljIEZ1bmN0aW9uCit7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitjbGFzcyBGdW5Qb3NpdGlvbiA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVu
Q291bnQgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkxvY2FsTmFtZSA6IHB1
YmxpYyBGdW5jdGlvbgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29u
c3RhbnQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTmFtZXNwYWNlVVJJIDogcHVibGljIEZ1
bmN0aW9uCit7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgp
IGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5OYW1lIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitjbGFzcyBGdW5TdHJpbmcgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAg
ICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkNv
bmNhdCA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwg
VmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3RhcnRzV2l0aCA6IHB1
YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQ29udGFpbnMgOiBwdWJsaWMgRnVuY3Rp
b24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKK307CisKK2NsYXNzIEZ1blN1YnN0cmluZ0JlZm9yZSA6IHB1YmxpYyBGdW5jdGlvbgor
eworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OworfTsKKworY2xhc3MgRnVuU3Vic3RyaW5nQWZ0ZXIgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307
CisKK2NsYXNzIEZ1blN1YnN0cmluZyA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6
CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3Mg
RnVuU3RyaW5nTGVuZ3RoIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Ob3Jt
YWxpemVTcGFjZSA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuVHJhbnNsYXRl
IDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1
ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Cb29sZWFuIDogcHVibGljIEZ1
bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Ob3QgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1blRydWUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkZhbHNl
IDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNDb25zdGFudCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1
ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5MYW5nIDogcHVibGljIEZ1bmN0
aW9uCit7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkg
Y29uc3Q7Cit9OworCitjbGFzcyBGdW5OdW1iZXIgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1blN1bSA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuRmxvb3Ig
OiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVl
IGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkNlaWxpbmcgOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUo
KSBjb25zdDsKK307CisKK2NsYXNzIEZ1blJvdW5kIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5MYXN0KQorREVGSU5FX0ZVTkNUSU9OX0NSRUFU
T1IoRnVuUG9zaXRpb24pCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Db3VudCkKK0RFRklO
RV9GVU5DVElPTl9DUkVBVE9SKEZ1bkxvY2FsTmFtZSkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KEZ1bk5hbWVzcGFjZVVSSSkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bk5hbWUpCisKK0RF
RklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN0cmluZykKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KEZ1bkNvbmNhdCkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN0YXJ0c1dpdGgpCitERUZJ
TkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Db250YWlucykKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KEZ1blN1YnN0cmluZ0JlZm9yZSkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN1YnN0cmlu
Z0FmdGVyKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuU3Vic3RyaW5nKQorREVGSU5FX0ZV
TkNUSU9OX0NSRUFUT1IoRnVuU3RyaW5nTGVuZ3RoKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1Io
RnVuTm9ybWFsaXplU3BhY2UpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5UcmFuc2xhdGUp
CisKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkJvb2xlYW4pCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUihGdW5Ob3QpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5UcnVlKQorREVGSU5F
X0ZVTkNUSU9OX0NSRUFUT1IoRnVuRmFsc2UpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5M
YW5nKQorCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5OdW1iZXIpCitERUZJTkVfRlVOQ1RJ
T05fQ1JFQVRPUihGdW5TdW0pCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5GbG9vcikKK0RF
RklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkNlaWxpbmcpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRP
UihGdW5Sb3VuZCkKKworI3VuZGVmIERFRklORV9GVU5DVElPTl9DUkVBVE9SCisKK0ludGVydmFs
OjpJbnRlcnZhbCgpCisgICAgOiBtX21pbihJbmYpLAorICAgIG1fbWF4KEluZikKK3sKK30KKwor
SW50ZXJ2YWw6OkludGVydmFsKGludCB2YWx1ZSkKKyAgICA6IG1fbWluKHZhbHVlKSwKKyAgICBt
X21heCh2YWx1ZSkKK3sKK30KKworSW50ZXJ2YWw6OkludGVydmFsKGludCBtaW4sIGludCBtYXgp
CisgICAgOiBtX21pbihtaW4pLAorICAgIG1fbWF4KG1heCkKK3sKK30KKworYm9vbCBJbnRlcnZh
bDo6Y29udGFpbnMoaW50IHZhbHVlKSBjb25zdAoreworICAgIGlmIChtX21pbiA9PSBJbmYgJiYg
bV9tYXggPT0gSW5mKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICht
X21pbiA9PSBJbmYpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDw9IG1fbWF4OworICAgIH0KKwor
ICAgIGlmIChtX21heCA9PSBJbmYpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49IG1fbWluOwor
ICAgIH0KKworICAgIHJldHVybiB2YWx1ZSA+PSBtX21pbiAmJiB2YWx1ZSA8PSBtX21heDsKK30K
KworRGVwcmVjYXRlZFN0cmluZyBJbnRlcnZhbDo6YXNTdHJpbmcoKSBjb25zdAoreworICAgIERl
cHJlY2F0ZWRTdHJpbmcgcyA9ICJbIjsKKworICAgIGlmIChtX21pbiA9PSBJbmYpIHsKKyAgICAg
ICAgcyArPSAiLUluZmluaXR5IjsKKyAgICB9IGVsc2UgeworICAgICAgICBzICs9IERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcihtX21pbik7CisgICAgfQorCisgICAgcyArPSAiLi4iOworCisgICAg
aWYgKG1fbWF4ID09IEluZikgeworICAgICAgICBzICs9ICJJbmZpbml0eSI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcyArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9tYXgpOworICAgIH0K
KworICAgIHMgKz0gIl0iOworCisgICAgcmV0dXJuIHM7Cit9CisKK3ZvaWQgRnVuY3Rpb246OnNl
dEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8RXhwcmVzc2lvbio+ICZhcmdzKQoreworICAgIFZlY3Rv
cjxFeHByZXNzaW9uKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CisKKyAgICBm
b3IgKFZlY3RvcjxFeHByZXNzaW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigp
OyBpdCAhPSBlbmQ7IGl0KyspCisgICAgICAgIGFkZFN1YkV4cHJlc3Npb24oKml0KTsKK30KKwor
dm9pZCBGdW5jdGlvbjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9uYW1l
ID0gbmFtZTsKK30KKworRXhwcmVzc2lvbiAqRnVuY3Rpb246OmFyZyhpbnQgaSkKK3sKKyAgICBy
ZXR1cm4gc3ViRXhwcihpKTsKK30KKworY29uc3QgRXhwcmVzc2lvbiAqRnVuY3Rpb246OmFyZyhp
bnQgaSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViRXhwcihpKTsKK30KKwordW5zaWduZWQgaW50
IEZ1bmN0aW9uOjphcmdDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1YkV4cHJDb3VudCgp
OworfQorCitTdHJpbmcgRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25h
bWU7Cit9CisKK1ZhbHVlIEZ1bkxhc3Q6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVy
biBWYWx1ZShkb3VibGUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5zaXplKSk7Cit9
CisKK2Jvb2wgRnVuTGFzdDo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitWYWx1ZSBGdW5Qb3NpdGlvbjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFZhbHVlKGRvdWJsZShFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9u
KSk7Cit9CisKK2Jvb2wgRnVuUG9zaXRpb246OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBGdW5Mb2NhbE5hbWU6OmlzQ29uc3RhbnQoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVuTG9jYWxOYW1lOjpkb0V2YWx1YXRl
KCkgY29uc3QKK3sKKyAgICBOb2RlICpub2RlID0gMDsKKyAgICBpZiAoYXJnQ291bnQoKSA+IDAp
IHsKKyAgICAgICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAgICAgICAgaWYgKGEu
aXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgICAgIG5vZGUgPSBhLnRvTm9kZVNldCgpWzBdLmdldCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFub2RlKQorICAgICAgICBub2RlID0gZXZh
bHVhdGlvbkNvbnRleHQoKS5ub2RlOworCisgICAgcmV0dXJuIFZhbHVlKG5vZGUtPmxvY2FsTmFt
ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisKK2Jvb2wgRnVuTmFtZXNwYWNlVVJJOjppc0Nv
bnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1bk5hbWVz
cGFjZVVSSTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgTm9kZSAqbm9kZSA9IDA7CisgICAg
aWYgKGFyZ0NvdW50KCkgPiAwKSB7CisgICAgICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRl
KCk7CisgICAgICAgIGlmIChhLmlzTm9kZXNldCgpKSB7CisgICAgICAgICAgICBub2RlID0gYS50
b05vZGVTZXQoKVswXS5nZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbm9kZSkg
eworICAgICAgICBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworICAgIH0KKworICAg
IHJldHVybiBWYWx1ZShub2RlLT5uYW1lc3BhY2VVUkkoKS5kZXByZWNhdGVkU3RyaW5nKCkpOwor
fQorCitib29sIEZ1bk5hbWU6OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworVmFsdWUgRnVuTmFtZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgTm9kZSAq
bm9kZSA9IDA7CisgICAgaWYgKGFyZ0NvdW50KCkgPiAwKSB7CisgICAgICAgIFZhbHVlIGEgPSBh
cmcoMCktPmV2YWx1YXRlKCk7CisgICAgICAgIGlmIChhLmlzTm9kZXNldCgpKSB7CisgICAgICAg
ICAgICBub2RlID0gYS50b05vZGVTZXQoKVswXS5nZXQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghbm9kZSkgeworICAgICAgICBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2Rl
OworICAgIH0KKworICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IG5vZGUtPm5hbWVzcGFjZVVSSSgp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBzICs9ICI6IjsKKyAgICBzICs9IG5vZGUtPmxvY2Fs
TmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKworICAgIHJldHVybiBWYWx1ZShzKTsKK30KKwor
VmFsdWUgRnVuQ291bnQ6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVlIGEgPSBhcmco
MCktPmV2YWx1YXRlKCk7CisgICAgCisgICAgaWYgKCFhLmlzTm9kZXNldCgpKSB7CisgICAgICAg
IExPRyhYUGF0aCwgImNvdW50KCkgZXhwZWN0cyA8bm9kZXNldD5cbiIpOworCisgICAgICAgIHJl
dHVybiBWYWx1ZSgwLjApOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gVmFsdWUoZG91YmxlKGEu
dG9Ob2RlU2V0KCkuc2l6ZSgpKSk7Cit9CisKK2Jvb2wgRnVuQ291bnQ6OmlzQ29uc3RhbnQoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVuU3RyaW5nOjpkb0V2YWx1
YXRlKCkgY29uc3QKK3sKKyAgICBpZiAoYXJnQ291bnQoKSA9PSAwKSB7CisgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgcyA9IFZhbHVlKEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9k
ZSkudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlKHMpOworICAgIH0KKyAgICByZXR1
cm4gVmFsdWUoYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCkpOworfQorCitWYWx1ZSBGdW5D
b25jYXQ6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKSB7CisgICAg
ICAgIHN0ci5hcHBlbmQoYXJnKGkpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCkpOworICAgIH0KKyAg
ICByZXR1cm4gVmFsdWUoRGVwcmVjYXRlZFN0cmluZyhzdHIpKTsKK30KKworVmFsdWUgRnVuU3Rh
cnRzV2l0aDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMSA9
IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgczIg
PSBhcmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIGlmIChzMi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgcmV0dXJuIFZhbHVlKHRydWUpOworICAgIH0KKworICAgIHJldHVybiBWYWx1
ZShzMS5zdGFydHNXaXRoKHMyKSk7Cit9CisKK1ZhbHVlIEZ1bkNvbnRhaW5zOjpkb0V2YWx1YXRl
KCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDApLT5ldmFsdWF0ZSgp
LnRvU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygxKS0+ZXZhbHVhdGUo
KS50b1N0cmluZygpOworCisgICAgaWYgKHMyLmlzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4g
VmFsdWUodHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIFZhbHVlKHMxLmNvbnRhaW5zKHMyKSAh
PSAwKTsKK30KKworVmFsdWUgRnVuU3Vic3RyaW5nQmVmb3JlOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5n
KCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygxKS0+ZXZhbHVhdGUoKS50b1N0cmlu
ZygpOworCisgICAgaWYgKHMyLmlzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gVmFsdWUoIiIp
OworICAgIH0KKyAgICBpbnQgaSA9IHMxLmZpbmQoczIpOworCisgICAgaWYgKGkgPT0gLTEpIHsK
KyAgICAgICAgcmV0dXJuIFZhbHVlKCIiKTsKKyAgICB9CisKKyAgICByZXR1cm4gVmFsdWUoRGVw
cmVjYXRlZFN0cmluZyhzMS5sZWZ0KGkpKSk7Cit9CisKK1ZhbHVlIEZ1blN1YnN0cmluZ0FmdGVy
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDAp
LT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygx
KS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisgICAgaWYgKHMyLmlzRW1wdHkoKSkgeworICAg
ICAgICByZXR1cm4gVmFsdWUoczIpOworICAgIH0KKworICAgIGludCBpID0gczEuZmluZChzMik7
CisgICAgaWYgKGkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlKCIiKTsKKyAgICB9CisK
KyAgICByZXR1cm4gVmFsdWUoRGVwcmVjYXRlZFN0cmluZyhzMS5taWQoaSArIDEpKSk7Cit9CisK
K1ZhbHVlIEZ1blN1YnN0cmluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgRGVwcmVjYXRl
ZFN0cmluZyBzID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgbG9uZyBwb3Mg
PSBsb25nKHJvdW5kKGFyZygxKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKSk7CisgICAgYm9vbCBo
YXZlTGVuZ3RoID0gYXJnQ291bnQoKSA9PSAzOworICAgIGxvbmcgbGVuID0gLTE7CisgICAgaWYg
KGhhdmVMZW5ndGgpCisgICAgICAgIGxlbiA9IGxvbmcocm91bmQoYXJnKDIpLT5ldmFsdWF0ZSgp
LnRvTnVtYmVyKCkpKTsKKworICAgIGlmIChwb3MgPiBsb25nKHMubGVuZ3RoKCkpKSAKKyAgICAg
ICAgcmV0dXJuIFZhbHVlKCIiKTsKKworICAgIGlmIChoYXZlTGVuZ3RoICYmIHBvcyA8IDEpIHsK
KyAgICAgICAgbGVuIC09IDEgLSBwb3M7CisgICAgICAgIHBvcyA9IDE7CisgICAgICAgIGlmIChs
ZW4gPCAxKSB7CisgICAgICAgICAgICByZXR1cm4gVmFsdWUoIiIpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRTdHJpbmcocy5taWQocG9zIC0gMSwgbGVu
KSkpOworfQorCitWYWx1ZSBGdW5TdHJpbmdMZW5ndGg6OmRvRXZhbHVhdGUoKSBjb25zdAorewor
ICAgIGlmIChhcmdDb3VudCgpID09IDApIHsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0g
VmFsdWUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlKS50b1N0cmluZygpOwor
ICAgICAgICByZXR1cm4gVmFsdWUoZG91YmxlKHMubGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gVmFsdWUoZG91YmxlKGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpLmxlbmd0aCgp
KSk7Cit9CisKK1ZhbHVlIEZ1bk5vcm1hbGl6ZVNwYWNlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sK
KyAgICBpZiAoYXJnQ291bnQoKSA9PSAwKSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9
IFZhbHVlKEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSkudG9TdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRTdHJpbmcocy5zaW1wbGlmeVdoaXRlU3Bh
Y2UoKSkpOworICAgIH0KKworICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IGFyZygwKS0+ZXZhbHVh
dGUoKS50b1N0cmluZygpOworICAgIHMgPSBzLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworICAgIHJl
dHVybiBWYWx1ZShEZXByZWNhdGVkU3RyaW5nKHMpKTsKK30KKworVmFsdWUgRnVuVHJhbnNsYXRl
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDAp
LT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygx
KS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgczMgPSBhcmco
MiktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1N0cmlu
ZzsKKworICAgIGZvciAodW5zaWduZWQgaTEgPSAwOyBpMSA8IHMxLmxlbmd0aCgpOyArK2kxKSB7
CisgICAgICAgIFFDaGFyIGNoID0gczFbaTFdOworICAgICAgICBpbnQgaTIgPSBzMi5maW5kKGNo
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpMiA9PSAtMSkgCisgICAgICAgICAgICBuZXdTdHJp
bmcgKz0gY2g7CisgICAgICAgIGVsc2UgaWYgKCh1bnNpZ25lZClpMiA8IHMzLmxlbmd0aCgpKQor
ICAgICAgICAgICAgbmV3U3RyaW5nICs9IHMzWyBpMiBdOworICAgIH0KKworICAgIHJldHVybiBW
YWx1ZShEZXByZWNhdGVkU3RyaW5nKG5ld1N0cmluZykpOworfQorCitWYWx1ZSBGdW5Cb29sZWFu
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoYXJnKDApLT5ldmFsdWF0
ZSgpLnRvQm9vbGVhbigpKTsKK30KKworVmFsdWUgRnVuTm90Ojpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gVmFsdWUoIWFyZygwKS0+ZXZhbHVhdGUoKS50b0Jvb2xlYW4oKSk7Cit9
CisKK1ZhbHVlIEZ1blRydWU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1
ZSh0cnVlKTsKK30KKworYm9vbCBGdW5UcnVlOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgRnVuTGFuZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7Cisg
ICAgRGVwcmVjYXRlZFN0cmluZyBsYW5nID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7
CisKKyAgICBSZWZQdHI8Tm9kZT4gbGFuZ05vZGUgPSAwOworICAgIE5vZGUgKm5vZGUgPSBldmFs
dWF0aW9uQ29udGV4dCgpLm5vZGU7CisKKyAgICBTdHJpbmcgeG1zKCJ4bXMiKTsKKyAgICBTdHJp
bmcgeG1zbnNVUkkgPSBub2RlLT5sb29rdXBOYW1lc3BhY2VVUkkoeG1zKTsKKworICAgIHdoaWxl
IChub2RlKSB7CisgICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBub2RlLT5hdHRyaWJ1dGVz
KCk7CisgICAgICAgIFN0cmluZyBsKCJsYW5nIik7CisgICAgICAgIGxhbmdOb2RlID0gYXR0cnMt
PmdldE5hbWVkSXRlbU5TKHhtc25zVVJJLCBsKTsKKyAgICAgICAgaWYgKGxhbmdOb2RlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAg
fQorCisgICAgaWYgKCFsYW5nTm9kZSkKKyAgICAgICAgcmV0dXJuIFZhbHVlKGZhbHNlKTsKKwor
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlLT5ub2RlVmFsdWUo
KS5kZXByZWNhdGVkU3RyaW5nKCk7CisKKyAgICAvLyBleHRyYWN0ICdlbicgb3V0IG9mICdlbi11
cycKKyAgICBsYW5nTm9kZVZhbHVlID0gbGFuZ05vZGVWYWx1ZS5sZWZ0KGxhbmdOb2RlVmFsdWUu
ZmluZCgnLScpKTsKKworICAgIHJldHVybiBWYWx1ZShsYW5nTm9kZVZhbHVlLmxvd2VyKCkgPT0g
bGFuZy5sb3dlcigpKTsKK30KKworYm9vbCBGdW5MYW5nOjppc0NvbnN0YW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1bkZhbHNlOjpkb0V2YWx1YXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gVmFsdWUoZmFsc2UpOworfQorCitib29sIEZ1bkZhbHNlOjppc0Nv
bnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgRnVuTnVtYmVy
Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoYXJnKDApLT5ldmFsdWF0
ZSgpLnRvTnVtYmVyKCkpOworfQorCitWYWx1ZSBGdW5TdW06OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7CisgICAgaWYgKCFhLmlzTm9kZXNl
dCgpKSB7CisgICAgICAgIExPRyhYUGF0aCwgInN1bSgpIGV4cGVjdHMgPG5vZGVzZXQ+XG4iKTsK
KyAgICAgICAgcmV0dXJuIFZhbHVlKDAuMCk7CisgICAgfQorCisgICAgZG91YmxlIHN1bSA9IDAu
MDsKKyAgICBjb25zdCBOb2RlU2V0IG5vZGVzID0gYS50b05vZGVTZXQoKTsKKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIHN1bSAr
PSBWYWx1ZShzdHJpbmdWYWx1ZShub2Rlc1tpXS5nZXQoKSkuZGVwcmVjYXRlZFN0cmluZygpKS50
b051bWJlcigpOworICAgIAorICAgIHJldHVybiBWYWx1ZShzdW0pOworfQorCitWYWx1ZSBGdW5G
bG9vcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgY29uc3QgZG91YmxlIG51bSA9IGFyZygw
KS0+ZXZhbHVhdGUoKS50b051bWJlcigpOworCisgICAgaWYgKGlzbmFuKG51bSkgfHwgaXNpbmYo
bnVtKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlKG51bSk7CisKKyAgICByZXR1cm4gVmFsdWUoZmxv
b3IobnVtKSk7Cit9CisKK1ZhbHVlIEZ1bkNlaWxpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAorewor
ICAgIGNvbnN0IGRvdWJsZSBudW0gPSBhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKTsKKwor
ICAgIGlmIChpc25hbihudW0pIHx8IGlzaW5mKG51bSkpIAorICAgICAgICByZXR1cm4gVmFsdWUo
bnVtKTsKKworICAgIHJldHVybiBWYWx1ZShjZWlsKG51bSkpOworfQorCitWYWx1ZSBGdW5Sb3Vu
ZDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKGRvdWJsZShyb3VuZChh
cmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpKTsKK30KKworc3RydWN0IEZ1bmN0aW9uTGli
cmFyeTo6RnVuY3Rpb25SZWMKK3sKKyAgICB0eXBlZGVmIEZ1bmN0aW9uICooKkZhY3RvcnlGbiko
KTsKKworICAgIEZhY3RvcnlGbiBmYWN0b3J5Rm47CisgICAgSW50ZXJ2YWwgYXJnczsKK307CisK
K3N0cnVjdCBGdW5jdGlvbk1hcHBpbmcKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIEZ1
bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMgZnVuY3Rpb247Cit9OworCitGdW5jdGlvbkxpYnJh
cnkgJkZ1bmN0aW9uTGlicmFyeTo6c2VsZigpCit7CisgICAgc3RhdGljIEZ1bmN0aW9uTGlicmFy
eSBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK0Z1bmN0aW9uTGlicmFyeTo6
RnVuY3Rpb25MaWJyYXJ5KCkKK3sKKyAgICBzdGF0aWMgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9u
c1tdID0geworICAgIHsgImxhc3QiLCB7ICZjcmVhdGVGdW5MYXN0LCAwIH0gfSwKKyAgICB7ICJs
YXN0IiwgeyAmY3JlYXRlRnVuTGFzdCwgMCB9IH0sCisgICAgeyAicG9zaXRpb24iLCB7ICZjcmVh
dGVGdW5Qb3NpdGlvbiwgMCB9IH0sCisgICAgeyAiY291bnQiLCB7ICZjcmVhdGVGdW5Db3VudCwg
MSB9IH0sCisgICAgeyAic3VtIiwgeyAmY3JlYXRlRnVuU3VtLCAxIH0gfSwKKyAgICB7ICJsb2Nh
bC1uYW1lIiwgeyAmY3JlYXRlRnVuTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisgICAg
eyAibmFtZXNwYWNlLXVyaSIsIHsgJmNyZWF0ZUZ1bk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwg
MSkgfSB9LAorICAgIHsgIm5hbWUiLCB7ICZjcmVhdGVGdW5OYW1lLCBJbnRlcnZhbCgwLCAxKSB9
IH0sCisgICAgeyAic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3RyaW5nLCBJbnRlcnZhbCgwLCAxKSB9
IH0sCisgICAgeyAiY29uY2F0IiwgeyAmY3JlYXRlRnVuQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRl
cnZhbDo6SW5mKSB9IH0sCisgICAgeyAic3RhcnRzLXdpdGgiLCB7ICZjcmVhdGVGdW5TdGFydHNX
aXRoLCAyIH0gfSwKKyAgICB7ICJjb250YWlucyIsIHsgJmNyZWF0ZUZ1bkNvbnRhaW5zLCAyIH0g
fSwKKyAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nQmVmb3Jl
LCAyIH0gfSwKKyAgICB7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmdB
ZnRlciwgMiB9IH0sCisgICAgeyAic3Vic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nLCBJ
bnRlcnZhbCgyLCAzKSB9IH0sCisgICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgJmNyZWF0ZUZ1blN0
cmluZ0xlbmd0aCwgMSB9IH0sCisgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyAmY3JlYXRlRnVu
Tm9ybWFsaXplU3BhY2UsIDEgfSB9LAorICAgIHsgInRyYW5zbGF0ZSIsIHsgJmNyZWF0ZUZ1blRy
YW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIAorICAgIHsgImJvb2xlYW4iLCB7ICZjcmVhdGVGdW5C
b29sZWFuLCAxIH0gfSwKKyAgICB7ICJub3QiLCB7ICZjcmVhdGVGdW5Ob3QsIDEgfSB9LAorICAg
IHsgInRydWUiLCB7ICZjcmVhdGVGdW5UcnVlLCAwIH0gfSwKKyAgICB7ICJmYWxzZSIsIHsgJmNy
ZWF0ZUZ1bkZhbHNlLCAwIH0gfSwKKyAgICB7ICJsYW5nIiwgeyAmY3JlYXRlRnVuTGFuZywgMSB9
IH0sCisgICAgICAgIAorICAgIHsgIm51bWJlciIsIHsgJmNyZWF0ZUZ1bk51bWJlciwgMSB9IH0s
CisgICAgeyAiZmxvb3IiLCB7ICZjcmVhdGVGdW5GbG9vciwgMSB9IH0sCisgICAgeyAiY2VpbGlu
ZyIsIHsgJmNyZWF0ZUZ1bkNlaWxpbmcsIDEgfSB9LAorICAgIHsgInJvdW5kIiwgeyAmY3JlYXRl
RnVuUm91bmQsIDEgfSB9CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG51
bUZ1bmN0aW9ucyA9IHNpemVvZihmdW5jdGlvbnMpIC8gc2l6ZW9mKGZ1bmN0aW9uc1sgMCBdKTsK
KyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZ1bmN0aW9uczsgKytp
KSB7CisgICAgICAgIG1fZnVuY3Rpb25EaWN0LnNldChmdW5jdGlvbnNbaV0ubmFtZSwgZnVuY3Rp
b25zW2ldLmZ1bmN0aW9uKTsKKyAgICB9Cit9CisKK0Z1bmN0aW9uICpGdW5jdGlvbkxpYnJhcnk6
OmdldEZ1bmN0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4g
JmFyZ3MpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Z1bmN0aW9uRGljdC5jb250YWlucyhuYW1lKSkg
eworICAgICAgICBMT0coWFBhdGgsICJGdW5jdGlvbiAnJXMnIG5vdCBzdXBwb3J0ZWQgYnkgdGhp
cyBpbXBsZW1lbnRhdGlvbi5cbiIsIG5hbWUpOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJu
IGEgZHVtbXkgZnVuY3Rpb24gaW5zdGVhZCBvZiAwLgorICAgICAgICBGdW5jdGlvbiAqZnVuY1Ry
dWUgPSBtX2Z1bmN0aW9uRGljdC5nZXQoInRydWUiKS5mYWN0b3J5Rm4oKTsKKyAgICAgICAgZnVu
Y1RydWUtPnNldE5hbWUoInRydWUiKTsKKyAgICAgICAgcmV0dXJuIGZ1bmNUcnVlOworICAgIH0K
KworICAgIEZ1bmN0aW9uUmVjIGZ1bmN0aW9uUmVjID0gbV9mdW5jdGlvbkRpY3QuZ2V0KG5hbWUp
OworICAgIGlmICghZnVuY3Rpb25SZWMuYXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpIHsKKyAg
ICAgICAgTE9HKFhQYXRoLCAiRnVuY3Rpb24gJyVzJyByZXF1aXJlcyAlZCBhcmd1bWVudHMsIGJ1
dCAlZCBnaXZlbi5cbiIsIG5hbWUsIGZ1bmN0aW9uUmVjLmFyZ3MuYXNTdHJpbmcoKS5hc2NpaSgp
LCBhcmdzLnNpemUoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZ1bmN0aW9u
ICpmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLmZhY3RvcnlGbigpOworICAgIGZ1bmN0aW9uLT5zZXRB
cmd1bWVudHMoYXJncyk7CisgICAgZnVuY3Rpb24tPnNldE5hbWUobmFtZSk7CisgICAgCisgICAg
cmV0dXJuIGZ1bmN0aW9uOworfQorCit9Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCklu
ZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS94cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYxIEBACisvKgorICogcGFyc2Vkc3RhdGVtZW50LmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNo
IFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFBBUlNFRFNUQVRF
TUVOVF9ICisjZGVmaW5lIFBBUlNFRFNUQVRFTUVOVF9ICisjaWYgWFBBVEhfU1VQUE9SVAorCisj
aW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgTm9kZTsKKyAgICAKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAg
IAorY2xhc3MgRXhwcmVzc2lvbjsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQYXJzZWRTdGF0ZW1l
bnQKK3sKK3B1YmxpYzoKKyAgICBQYXJzZWRTdGF0ZW1lbnQoKTsKKyAgICB+UGFyc2VkU3RhdGVt
ZW50KCk7CisKKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRp
b25Db2RlJiBlYyk7CisKKyAgICB2b2lkIG9wdGltaXplKCk7CisKKyAgICBWYWx1ZSBldmFsdWF0
ZShOb2RlICpjb250ZXh0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBFeHByZXNzaW9uICptX2V4
cHI7Cit9OworCit9Cit9CisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorI2VuZGlmIC8vIFBBUlNF
RFNUQVRFTUVOVF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiB2YXJpYWJsZXJlZmVyZW5jZS5o
IC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBB
UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgVkFSSUFCTEVSRUZFUkVOQ0VfSAorI2RlZmluZSBW
QVJJQUJMRVJFRkVSRU5DRV9ICisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiZXhwcmVz
c2lvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgIAor
Y2xhc3MgVmFyaWFibGVSZWZlcmVuY2UgOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgor
ICAgIFZhcmlhYmxlUmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgU3RyaW5nIG1fbmFtZTsKK307CisKK30KK30KKwor
I2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKyNlbmRpZiAvLyBWQVJJQUJMRVJFRkVSRU5DRV9ICisK
SW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94
cGF0aC9pbXBsL3Rva2VuaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEwIEBACisv
KgorICogQ29weXJpZ2h0IDIwMDUgTWFrc2ltIE9ybG92aWNoIDxtYWtzaW1Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisj
aW5jbHVkZSAidG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJYUGF0aEdyYW1tYXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworc3RydWN0IFRva2VuCit7Cisg
ICAgaW50ICAgICB0eXBlOworICAgIERlcHJlY2F0ZWRTdHJpbmcgdmFsdWU7CisgICAgaW50ICAg
ICBpbnRWYWx1ZTsgLy8wIGlmIG5vdCBzZXQKKyAgICAKKyAgICBUb2tlbihpbnQgX3R5cGUpOiB0
eXBlKF90eXBlKSwgaW50VmFsdWUoMCkge30KKyAgICBUb2tlbihEZXByZWNhdGVkU3RyaW5nIF92
YWx1ZSk6IHR5cGUoRVJST1IrMSksIHZhbHVlKF92YWx1ZSksaW50VmFsdWUoMCkge30KKyAgICBU
b2tlbihpbnQgX3R5cGUsIERlcHJlY2F0ZWRTdHJpbmcgX3ZhbHVlKTogdHlwZShfdHlwZSksIHZh
bHVlKF92YWx1ZSkge30KKyAgICBUb2tlbihpbnQgX3R5cGUsIGludCAgICAgX3ZhbHVlKTogdHlw
ZShfdHlwZSksIGludFZhbHVlKF92YWx1ZSkge30KK307CisKK2NsYXNzIFRva2VuaXplcgorewor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX25leHRQb3M7CisgICAgU3RyaW5nIG1fZGF0YTsKKyAg
ICBpbnQgbV9sYXN0VG9rZW5UeXBlOworICAgIAorICAgIHN0YXRpYyBIYXNoTWFwPFdlYkNvcmU6
OlN0cmluZywgU3RlcDo6QXhpc1R5cGU+KiBzX2F4aXNOYW1lc0RpY3Q7CisgICAgc3RhdGljIEhh
c2hTZXQ8V2ViQ29yZTo6U3RyaW5nPiogc19ub2RlVHlwZU5hbWVzRGljdDsKKyAgICAKKyAgICBl
bnVtIFhNTENhdCB7CisgICAgICAgIE5hbWVTdGFydCwKKyAgICAgICAgTmFtZUNvbnQsCisgICAg
ICAgIE5vdFBhcnRPZk5hbWUKKyAgICB9OworICAgIAorICAgIFhNTENhdCBjaGFyQ2F0KFFDaGFy
IGFDaGFyKTsKKyAgICAKKyAgICBib29sIGlzQXhpc05hbWUoRGVwcmVjYXRlZFN0cmluZyBuYW1l
LCBTdGVwOjpBeGlzVHlwZSAmdHlwZSk7CisgICAgYm9vbCBpc05vZGVUeXBlTmFtZShEZXByZWNh
dGVkU3RyaW5nIG5hbWUpOworICAgIGJvb2wgaXNPcGVyYXRvckNvbnRleHQoKTsKKyAgICAKKyAg
ICB2b2lkICBza2lwV1MoKTsKKyAgICBUb2tlbiBtYWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2Rl
LCBpbnQgYWR2YW5jZSA9IDEpOworICAgIFRva2VuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoaW50
IGNvZGUsIGludCB2YWwsIGludCBhZHZhbmNlID0gMSk7CisgICAgY2hhciAgcGVla0FoZWFkSGVs
cGVyKCk7CisgICAgY2hhciAgcGVla0N1ckhlbHBlcigpOworICAgIAorICAgIFRva2VuIGxleFN0
cmluZygpOworICAgIFRva2VuIGxleE51bWJlcigpOworICAgIFRva2VuIGxleE5DTmFtZSgpOwor
ICAgIFRva2VuIGxleFFOYW1lKCk7CisgICAgCisgICAgVG9rZW4gbmV4dFRva2VuSW50ZXJuYWwo
KTsKKyAgICBUb2tlbml6ZXIoKTsKKyAgICBUb2tlbml6ZXIoY29uc3QgVG9rZW5pemVyICZyaHMp
OyAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkCisgICAgVG9rZW5pemVyICZvcGVyYXRvcj0o
Y29uc3QgVG9rZW5pemVyICZyaHMpOyAgICAgICAvLyBkaXNhYmxlZAorICAgIH5Ub2tlbml6ZXIo
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVG9rZW5pemVyICZzZWxmKCk7CisgICAgCisgICAgdm9p
ZCByZXNldChjb25zdCBTdHJpbmcmKTsKKyAgICBUb2tlbiBuZXh0VG9rZW4oKTsKK307CisKK3N0
cnVjdCBBeGlzTmFtZU1hcHBpbmcKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIFN0ZXA6
OkF4aXNUeXBlIHR5cGU7Cit9OworCitzdGF0aWMgQXhpc05hbWVNYXBwaW5nIGF4aXNOYW1lc1td
ID0geworICAgIHsgImFuY2VzdG9yIiwgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisgICAgeyAiYW5j
ZXN0b3Itb3Itc2VsZiIsIFN0ZXA6OkFuY2VzdG9yT3JTZWxmQXhpcyB9LAorICAgIHsgImF0dHJp
YnV0ZSIsIFN0ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKKyAgICB7ICJjaGlsZCIsIFN0ZXA6OkNoaWxk
QXhpcyB9LAorICAgIHsgImRlc2NlbmRhbnQiLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAorICAg
IHsgImRlc2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzIH0sCisg
ICAgeyAiZm9sbG93aW5nIiwgU3RlcDo6Rm9sbG93aW5nQXhpcyB9LAorICAgIHsgImZvbGxvd2lu
Zy1zaWJsaW5nIiwgU3RlcDo6Rm9sbG93aW5nU2libGluZ0F4aXMgfSwKKyAgICB7ICJuYW1lc3Bh
Y2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCisgICAgeyAicGFyZW50IiwgU3RlcDo6UGFyZW50
QXhpcyB9LAorICAgIHsgInByZWNlZGluZyIsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKKyAgICB7
ICJwcmVjZWRpbmctc2libGluZyIsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCisgICAg
eyAic2VsZiIsIFN0ZXA6OlNlbGZBeGlzIH0KK307CitzdGF0aWMgdW5zaWduZWQgaW50IGF4aXNO
YW1lc0NvdW50ID0gc2l6ZW9mKGF4aXNOYW1lcykgLyBzaXplb2YoYXhpc05hbWVzWzBdKTsKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBub2RlVHlwZU5hbWVzW10gPSB7CisgICAgImNvbW1lbnQi
LAorICAgICJ0ZXh0IiwKKyAgICAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIsCisgICAgIm5vZGUi
LAorICAgIDAKK307CisKK0hhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT4qIFRva2VuaXpl
cjo6c19heGlzTmFtZXNEaWN0ID0gMDsKK0hhc2hTZXQ8U3RyaW5nPiogVG9rZW5pemVyOjpzX25v
ZGVUeXBlTmFtZXNEaWN0ID0gMDsKKworVG9rZW5pemVyICZUb2tlbml6ZXI6OnNlbGYoKQorewor
ICAgIHN0YXRpYyBUb2tlbml6ZXIgaW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQor
CitUb2tlbml6ZXI6OlhNTENhdCBUb2tlbml6ZXI6OmNoYXJDYXQoUUNoYXIgYUNoYXIpCit7Cisg
ICAgLy8jIyMgbWlnaHQgbmVlZCB0byBhZGQgc29tZSBzcGVjaWFsIGNhc2VzIGZyb20gdGhlIFhN
TCBzcGVjLgorCisgICAgaWYgKGFDaGFyLnVuaWNvZGUoKSA9PSAnXycpCisgICAgICAgIHJldHVy
biBOYW1lU3RhcnQ7CisKKyAgICBpZiAoYUNoYXIudW5pY29kZSgpID09ICcuJyB8fCBhQ2hhci51
bmljb2RlKCkgPT0gJy0nKQorICAgICAgICByZXR1cm4gTmFtZUNvbnQ7CisgICAgc3dpdGNoICh1
X2NoYXJUeXBlKGFDaGFyLnVuaWNvZGUoKSkpIHsKKyAgICAgICAgY2FzZSBVX0xPV0VSQ0FTRV9M
RVRURVI6IC8vTGwKKyAgICAgICAgY2FzZSBVX1VQUEVSQ0FTRV9MRVRURVI6IC8vTHUKKyAgICAg
ICAgY2FzZSBVX09USEVSX0xFVFRFUjogICAgIC8vTG8KKyAgICAgICAgY2FzZSBVX1RJVExFQ0FT
RV9MRVRURVI6IC8vTHQKKyAgICAgICAgY2FzZSBVX0xFVFRFUl9OVU1CRVI6ICAgIC8vTmwKKyAg
ICAgICAgICAgIHJldHVybiBOYW1lU3RhcnQ7CisgICAgICAgIGNhc2UgVV9DT01CSU5JTkdfU1BB
Q0lOR19NQVJLOiAvL01jCisgICAgICAgIGNhc2UgVV9FTkNMT1NJTkdfTUFSSzogICAgICAgICAv
L01lCisgICAgICAgIGNhc2UgVV9OT05fU1BBQ0lOR19NQVJLOiAgICAgICAvL01uCisgICAgICAg
IGNhc2UgVV9NT0RJRklFUl9MRVRURVI6ICAgICAgICAvL0xtCisgICAgICAgIGNhc2UgVV9ERUNJ
TUFMX0RJR0lUX05VTUJFUjogICAvL05kCisgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnQ7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTm90UGFydE9mTmFtZTsKKyAgICB9
Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppc0F4aXNOYW1lKERlcHJlY2F0ZWRTdHJpbmcgbmFtZSwg
U3RlcDo6QXhpc1R5cGUmIHR5cGUpCit7CisgICAgaWYgKCFzX2F4aXNOYW1lc0RpY3QpIHsKKyAg
ICAgICAgc19heGlzTmFtZXNEaWN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlw
ZT47CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHAgPSAwOyBwIDwgYXhpc05hbWVzQ291bnQ7
ICsrcCkKKyAgICAgICAgICAgIHNfYXhpc05hbWVzRGljdC0+c2V0KGF4aXNOYW1lc1twXS5uYW1l
LCBheGlzTmFtZXNbcF0udHlwZSk7CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0ZXA6
OkF4aXNUeXBlPjo6aXRlcmF0b3IgaXQgPSBzX2F4aXNOYW1lc0RpY3QtPmZpbmQobmFtZSk7Cisg
ICAgCisgICAgaWYgKGl0ICE9IHNfYXhpc05hbWVzRGljdC0+ZW5kKCkpIHsKKyAgICAgICAgdHlw
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSAgICAKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRva2VuaXplcjo6aXNOb2RlVHlwZU5hbWUo
RGVwcmVjYXRlZFN0cmluZyBuYW1lKQoreworICAgIGlmICghc19ub2RlVHlwZU5hbWVzRGljdCkg
eworICAgICAgICBzX25vZGVUeXBlTmFtZXNEaWN0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPjsKKyAg
ICAgICAgZm9yIChpbnQgcCA9IDA7IG5vZGVUeXBlTmFtZXNbcF07ICsrcCkKKyAgICAgICAgICAg
IHNfbm9kZVR5cGVOYW1lc0RpY3QtPmFkZChub2RlVHlwZU5hbWVzW3BdKTsKKyAgICB9CisgICAg
cmV0dXJuIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmNvbnRhaW5zKFN0cmluZyhuYW1lKSk7Cit9CisK
Ky8qIFJldHVybnMgd2hldGhlciB0aGUgbGFzdCBwYXJzZWQgdG9rZW4gbWF0Y2hlcyB0aGUgWzMy
XSBPcGVyYXRvciBydWxlCisgKiAoY2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgjZXhw
cmxleCkuIE5lY2Vzc2FyeSB0byBkaXNhbWJpZ3VhdGUKKyAqIHRoZSB0b2tlbnMuCisgKi8KK2Jv
b2wgVG9rZW5pemVyOjppc09wZXJhdG9yQ29udGV4dCgpCit7CisgICAgaWYgKG1fbmV4dFBvcyA9
PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fbGFzdFRva2VuVHlw
ZSkgeworICAgICAgICBjYXNlIEFORDogY2FzZSBPUjogY2FzZSBNVUxPUDoKKyAgICAgICAgY2Fz
ZSAnLyc6IGNhc2UgU0xBU0hTTEFTSDogY2FzZSAnfCc6IGNhc2UgUExVUzogY2FzZSBNSU5VUzoK
KyAgICAgICAgY2FzZSBFUU9QOiBjYXNlIFJFTE9QOgorICAgICAgICBjYXNlICdAJzogY2FzZSBB
WElTTkFNRTogICBjYXNlICcoJzogY2FzZSAnWyc6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgVG9rZW5pemVyOjpza2lwV1MoKQoreworICAgIHdoaWxlIChtX25leHRQb3MgPCBtX2Rh
dGEubGVuZ3RoKCkgJiYgbV9kYXRhW21fbmV4dFBvc10uaXNTcGFjZSgpKQorICAgICAgICArK21f
bmV4dFBvczsKK30KKworVG9rZW4gVG9rZW5pemVyOjptYWtlVG9rZW5BbmRBZHZhbmNlKGludCBj
b2RlLCBpbnQgYWR2YW5jZSkKK3sKKyAgICBtX25leHRQb3MgKz0gYWR2YW5jZTsKKyAgICByZXR1
cm4gVG9rZW4oY29kZSk7Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bWFrZUludFRva2VuQW5kQWR2
YW5jZShpbnQgY29kZSwgaW50IHZhbCwgaW50IGFkdmFuY2UpCit7CisgICAgbV9uZXh0UG9zICs9
IGFkdmFuY2U7CisgICAgcmV0dXJuIFRva2VuKGNvZGUsIHZhbCk7Cit9CisKKy8vUmV0dXJucyBu
ZXh0IGNoYXIgaWYgaXQncyB0aGVyZSBhbmQgaW50ZXJlc3RpbmcsIDAgb3RoZXJ3aXNlCitjaGFy
IFRva2VuaXplcjo6cGVla0FoZWFkSGVscGVyKCkKK3sKKyAgICBpZiAobV9uZXh0UG9zICsgMSA+
PSBtX2RhdGEubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAgIFFDaGFyIG5leHQgPSBt
X2RhdGFbbV9uZXh0UG9zICsgMV07CisgICAgaWYgKG5leHQucm93KCkgIT0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbmV4dC5jZWxsKCk7Cit9CisKK2No
YXIgVG9rZW5pemVyOjpwZWVrQ3VySGVscGVyKCkKK3sKKyAgICBpZiAobV9uZXh0UG9zID49IG1f
ZGF0YS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUUNoYXIgbmV4dCA9IG1fZGF0
YVttX25leHRQb3NdOworICAgIGlmIChuZXh0LnJvdygpICE9IDApCisgICAgICAgIHJldHVybiAw
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG5leHQuY2VsbCgpOworfQorCitUb2tlbiBUb2tl
bml6ZXI6OmxleFN0cmluZygpCit7CisgICAgUUNoYXIgZGVsaW1pdGVyID0gbV9kYXRhW21fbmV4
dFBvc107CisgICAgaW50ICAgc3RhcnRQb3MgID0gbV9uZXh0UG9zICsgMTsKKworICAgIGZvciAo
bV9uZXh0UG9zID0gc3RhcnRQb3M7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25l
eHRQb3MpIHsKKyAgICAgICAgaWYgKG1fZGF0YVttX25leHRQb3NdID09IGRlbGltaXRlcikgewor
ICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3Ry
aW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBvcyk7CisgICAgICAgICAgICAr
K21fbmV4dFBvczsgLy9Db25zdW1lIHRoZSBjaGFyOworICAgICAgICAgICAgcmV0dXJuIFRva2Vu
KExJVEVSQUwsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vT3VjaCwgd2VudCBv
ZmYgdGhlIGVuZCAtLSByZXBvcnQgZXJyb3IKKyAgICByZXR1cm4gVG9rZW4oRVJST1IpOworfQor
CitUb2tlbiBUb2tlbml6ZXI6OmxleE51bWJlcigpCit7CisgICAgaW50IHN0YXJ0UG9zID0gbV9u
ZXh0UG9zOworICAgIGJvb2wgc2VlbkRvdCA9IGZhbHNlOworCisgICAgLy9HbyB1bnRpbCBlbmQg
b3IgYSBub24tZGlnaXRzIGNoYXJhY3RlcgorICAgIGZvciAoOyBtX25leHRQb3MgPCBtX2RhdGEu
bGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CisgICAgICAgIFFDaGFyIGFDaGFyID0gbV9kYXRhW21f
bmV4dFBvc107CisgICAgICAgIGlmIChhQ2hhci5yb3coKSAhPSAwKSBicmVhazsKKworICAgICAg
ICBpZiAoYUNoYXIuY2VsbCgpIDwgJzAnIHx8IGFDaGFyLmNlbGwoKSA+ICc5JykgeworICAgICAg
ICAgICAgaWYgKGFDaGFyLmNlbGwoKSA9PSAnLicgJiYgIXNlZW5Eb3QpCisgICAgICAgICAgICAg
ICAgc2VlbkRvdCA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEZXByZWNhdGVkU3RyaW5nIHZhbHVlID0gbV9k
YXRhLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoc3RhcnRQb3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9z
KTsKKyAgICByZXR1cm4gVG9rZW4oTlVNQkVSLCB2YWx1ZSk7Cit9CisKK1Rva2VuIFRva2VuaXpl
cjo6bGV4TkNOYW1lKCkKK3sKKyAgICBpbnQgc3RhcnRQb3MgPSBtX25leHRQb3M7CisgICAgaWYg
KG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKSAmJiBjaGFyQ2F0KG1fZGF0YVttX25leHRQb3Nd
KSA9PSBOYW1lU3RhcnQpCisgICAgeworICAgICAgICAvL0tlZXAgZ29pbmcgdW50aWwgd2UgZ2V0
IGEgY2hhcmFjdGVyIHRoYXQncyBub3QgZ29vZCBmb3IgbmFtZXMuCisgICAgICAgIGZvciAoOyBt
X25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CisgICAgICAgICAgICBp
ZiAoY2hhckNhdChtX2RhdGFbbV9uZXh0UG9zXSkgPT0gTm90UGFydE9mTmFtZSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRGVwcmVjYXRlZFN0
cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25l
eHRQb3MgLSBzdGFydFBvcyk7CisgICAgICAgIHJldHVybiBUb2tlbih2YWx1ZSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoRVJST1IpOworfQor
CitUb2tlbiBUb2tlbml6ZXI6OmxleFFOYW1lKCkKK3sKKyAgICBUb2tlbiB0MSA9IGxleE5DTmFt
ZSgpOworICAgIGlmICh0MS50eXBlID09IEVSUk9SKQorICAgICAgICByZXR1cm4gdDE7CisgICAg
c2tpcFdTKCk7CisgICAgLy9JZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgOiwgd2hhdCB3ZSBqdXN0
IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCisgICAgLy9pdCdzIHRoZSB3aG9sZSB0aGluZwor
ICAgIGlmIChwZWVrQWhlYWRIZWxwZXIoKSAhPSAnOicpCisgICAgICAgIHJldHVybiB0MTsKKwor
ICAgIFRva2VuIHQyID0gbGV4TkNOYW1lKCk7CisgICAgaWYgKHQyLnR5cGUgPT0gRVJST1IpCisg
ICAgICAgIHJldHVybiB0MjsKKworICAgIHJldHVybiBUb2tlbih0MS52YWx1ZSArICI6IiArIHQy
LnZhbHVlKTsKK30KKworVG9rZW4gVG9rZW5pemVyOjpuZXh0VG9rZW5JbnRlcm5hbCgpCit7Cisg
ICAgc2tpcFdTKCk7CisKKyAgICBpZiAobV9uZXh0UG9zID49IG1fZGF0YS5sZW5ndGgoKSkgewor
ICAgICAgICByZXR1cm4gVG9rZW4oMCk7CisgICAgfQorCisgICAgY2hhciBjb2RlID0gcGVla0N1
ckhlbHBlcigpOworICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICBjYXNlICcoJzogY2FzZSAn
KSc6IGNhc2UgJ1snOiBjYXNlICddJzoKKyAgICAgICAgY2FzZSAnQCc6IGNhc2UgJywnOiBjYXNl
ICd8JzoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKGNvZGUpOworICAg
ICAgICBjYXNlICdcJyc6CisgICAgICAgIGNhc2UgJ1wiJzoKKyAgICAgICAgICAgIHJldHVybiBs
ZXhTdHJpbmcoKTsKKyAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAn
Myc6IGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNl
ICc4JzogY2FzZSAnOSc6CisgICAgICAgICAgICByZXR1cm4gbGV4TnVtYmVyKCk7CisgICAgICAg
IGNhc2UgJy4nOiB7CisgICAgICAgICAgICBjaGFyIG5leHQgPSBwZWVrQWhlYWRIZWxwZXIoKTsK
KyAgICAgICAgICAgIGlmIChuZXh0ID09ICcuJykKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVRva2VuQW5kQWR2YW5jZShET1RET1QsIDIpOworICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA+
PSAnMCcgJiYgbmV4dCA8PSAnOScpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxleE51bWJlcigp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRB
ZHZhbmNlKCcuJyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBp
ZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJy8nKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VG9rZW5BbmRBZHZhbmNlKFNMQVNIU0xBU0gsIDIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcvJyk7CisgICAgICAgIGNhc2Ug
JysnOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoUExVUyk7CisgICAg
ICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoTUlO
VVMpOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5B
bmRBZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9FUSk7CisgICAgICAgIGNhc2UgJyEnOgorICAg
ICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RPcDo6T1BfTkUsIDIpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBpZiAocGVla0Fo
ZWFkSGVscGVyKCkgPT0gJz0nKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5B
bmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xFLCAyKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVt
ZXJpY09wOjpPUF9MVCk7CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgaWYgKHBlZWtB
aGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2Vu
QW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9HRSwgMik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIE51
bWVyaWNPcDo6T1BfR1QpOworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgIGlmIChpc09w
ZXJhdG9yQ29udGV4dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRB
ZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6Ok9QX011bCk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICArK21fbmV4dFBvczsKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4o
TkFNRVRFU1QsICIqIik7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyQnOiB7Ly8kIFFO
YW1lCisgICAgICAgICAgICBtX25leHRQb3MrKzsKKyAgICAgICAgICAgIFRva2VuIHBhciA9IGxl
eFFOYW1lKCk7CisgICAgICAgICAgICBpZiAocGFyLnR5cGUgPT0gRVJST1IpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gVG9rZW4oVkFSSUFCTEVSRUZFUkVOQ0UsIHBhci52YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOworICAgIGlmICh0MS50eXBlID09IEVSUk9S
KQorICAgICAgICByZXR1cm4gdDE7CisKKyAgICBza2lwV1MoKTsKKyAgICAvL0lmIHdlJ3JlIGlu
IGFuIG9wZXJhdG9yIGNvbnRleHQsIGNoZWNrIGZvciBhbnkgb3BlcmF0b3IgbmFtZXMKKyAgICBp
ZiAoaXNPcGVyYXRvckNvbnRleHQoKSkgeworICAgICAgICBpZiAodDEudmFsdWUgPT0gImFuZCIp
IC8vIyMjIGhhc2g/CisgICAgICAgICAgICByZXR1cm4gVG9rZW4oQU5EKTsKKyAgICAgICAgaWYg
KHQxLnZhbHVlID09ICJvciIpCisgICAgICAgICAgICByZXR1cm4gVG9rZW4oT1IpOworICAgICAg
ICBpZiAodDEudmFsdWUgPT0gIm1vZCIpCisgICAgICAgICAgICByZXR1cm4gVG9rZW4oTVVMT1As
IE51bWVyaWNPcDo6T1BfTW9kKTsKKyAgICAgICAgaWYgKHQxLnZhbHVlID09ICJkaXYiKQorICAg
ICAgICAgICAgcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1lcmljT3A6Ok9QX0Rpdik7CisgICAgfQor
CisgICAgLy9TZWUgd2hldGhlciB3ZSBhcmUgYXQgYSA6CisgICAgaWYgKHBlZWtDdXJIZWxwZXIo
KSA9PSAnOicpIHsKKyAgICAgICAgbV9uZXh0UG9zKys7CisgICAgICAgIC8vQW55IGNoYW5jZSBp
dCdzIGFuIGF4aXMgbmFtZT8KKyAgICAgICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnOicpIHsK
KyAgICAgICAgICAgIG1fbmV4dFBvcysrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvL0l0
IG1pZ2h0IGJlIGFuIGF4aXMgbmFtZS4KKyAgICAgICAgICAgIFN0ZXA6OkF4aXNUeXBlIGF4aXNU
eXBlOworICAgICAgICAgICAgaWYgKGlzQXhpc05hbWUodDEudmFsdWUsIGF4aXNUeXBlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oQVhJU05BTUUsIGF4aXNUeXBlKTsKKyAgICAgICAg
ICAgIC8vVWdoLCA6OiBpcyBvbmx5IHZhbGlkIGluIGF4aXMgbmFtZXMgLT4gZXJyb3IKKyAgICAg
ICAgICAgIHJldHVybiBUb2tlbihFUlJPUik7CisgICAgICAgIH0KKworICAgICAgICAvL1NlZW1z
IGxpa2UgdGhpcyBpcyBhIGZ1bGx5IHF1YWxpZmllZCBxbmFtZSwgb3IgcGVyaGFwcyB0aGUgKiBt
b2RpZmllZCBvbmUgZnJvbSBOYW1lVGVzdAorICAgICAgICBza2lwV1MoKTsKKyAgICAgICAgaWYg
KHBlZWtDdXJIZWxwZXIoKSA9PSAnKicpIHsKKyAgICAgICAgICAgIG1fbmV4dFBvcysrOworICAg
ICAgICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCB0MS52YWx1ZSArICI6KiIpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvL01ha2UgYSBmdWxsIHFuYW1lLi4KKyAgICAgICAgVG9r
ZW4gdDIgPSBsZXhOQ05hbWUoKTsKKyAgICAgICAgaWYgKHQyLnR5cGUgPT0gRVJST1IpCisgICAg
ICAgICAgICByZXR1cm4gdDI7CisgICAgICAgIAorICAgICAgICB0MS52YWx1ZSA9IHQxLnZhbHVl
ICsgJzonICsgdDIudmFsdWU7CisgICAgfQorCisgICAgc2tpcFdTKCk7CisgICAgaWYgKHBlZWtD
dXJIZWxwZXIoKSA9PSAnKCcpIHsKKyAgICAgICAgLy9ub3RlOiB3ZSBkb24ndCBzd2FsbG93IHRo
ZSAoaGVyZSEKKyAgICAgICAgCisgICAgICAgIC8vZWl0aGVyIG5vZGUgdHlwZSBvZiBmdW5jdGlv
biBuYW1lCisgICAgICAgIGlmIChpc05vZGVUeXBlTmFtZSh0MS52YWx1ZSkpIHsKKyAgICAgICAg
ICAgIGlmICh0MS52YWx1ZSA9PSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFRva2VuKFBJLCB0MS52YWx1ZSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5PREVUWVBFLCB0MS52YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgLy9tdXN0IGJlIGEgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgcmV0dXJuIFRva2Vu
KEZVTkNUSU9OTkFNRSwgdDEudmFsdWUpOworICAgIH0KKworICAgIC8vQXQgdGhpcyBwb2ludCwg
aXQgbXVzdCBiZSBOQU1FVEVTVAorICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgdDEudmFsdWUp
OworfQorCitUb2tlbiBUb2tlbml6ZXI6Om5leHRUb2tlbigpCit7CisgICAgVG9rZW4gdG9SZXQg
PSBuZXh0VG9rZW5JbnRlcm5hbCgpOworICAgIG1fbGFzdFRva2VuVHlwZSA9IHRvUmV0LnR5cGU7
CisgICAgcmV0dXJuIHRvUmV0OworfQorCitUb2tlbml6ZXI6OlRva2VuaXplcigpCit7CisgICAg
cmVzZXQoU3RyaW5nKCkpOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworfQorCit2
b2lkIFRva2VuaXplcjo6cmVzZXQoY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIG1fbmV4dFBv
cyA9IDA7CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBtX2xhc3RUb2tlblR5cGUgPSAwOworfQor
Cit9Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpYUGF0aDsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitpbnQgeHBhdGh5eWxleCgpCit7CisgICAgVG9rZW4gdG9rID0gVG9rZW5p
emVyOjpzZWxmKCkubmV4dFRva2VuKCk7CisgICAgaWYgKCF0b2sudmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICB4cGF0aHl5bHZhbC5zdHIgPSBuZXcgRGVwcmVjYXRlZFN0cmluZyh0b2sudmFsdWUp
OworICAgIGVsc2UgaWYgKHRvay5pbnRWYWx1ZSkKKyAgICAgICAgeHBhdGh5eWx2YWwubnVtID0g
dG9rLmludFZhbHVlOworICAgIHJldHVybiB0b2sudHlwZTsKK30KKwordm9pZCBpbml0VG9rZW5p
emVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFRva2VuaXplcjo6c2VsZigpLnJlc2V0
KHN0cmluZyk7Cit9CisKK3ZvaWQgeHBhdGh5eWVycm9yKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAg
ICAvLyBGSVhNRSBDbGVhbiB4cGF0aHl5bHZhbC5zdHIgdXAgdG8gYXZvaWQgbGVha2luZyBpdC4K
K30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9z
dGVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhf
U1VQUE9SVAorCisjaW5jbHVkZSAic3RlcC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIk5h
bWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5j
bHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBYUGF0aCB7CisKK0RlcHJlY2F0ZWRTdHJpbmcgU3RlcDo6YXhpc0FzU3RyaW5nKEF4aXNUeXBl
IGF4aXMpCit7CisgICAgc3dpdGNoIChheGlzKSB7CisgICAgICAgIGNhc2UgQW5jZXN0b3JBeGlz
OiByZXR1cm4gImFuY2VzdG9yIjsKKyAgICAgICAgY2FzZSBBbmNlc3Rvck9yU2VsZkF4aXM6IHJl
dHVybiAiYW5jZXN0b3Itb3Itc2VsZiI7CisgICAgICAgIGNhc2UgQXR0cmlidXRlQXhpczogcmV0
dXJuICJhdHRyaWJ1dGUiOworICAgICAgICBjYXNlIENoaWxkQXhpczogcmV0dXJuICJjaGlsZCI7
CisgICAgICAgIGNhc2UgRGVzY2VuZGFudEF4aXM6IHJldHVybiAiZGVzY2VuZGFudCI7CisgICAg
ICAgIGNhc2UgRGVzY2VuZGFudE9yU2VsZkF4aXM6IHJldHVybiAiZGVzY2VuZGFudC1vci1zZWxm
IjsKKyAgICAgICAgY2FzZSBGb2xsb3dpbmdBeGlzOiByZXR1cm4gImZvbGxvd2luZyI7CisgICAg
ICAgIGNhc2UgRm9sbG93aW5nU2libGluZ0F4aXM6IHJldHVybiAiZm9sbG93aW5nLXNpYmxpbmci
OworICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6IHJldHVybiAibmFtZXNwYWNlIjsKKyAgICAg
ICAgY2FzZSBQYXJlbnRBeGlzOiByZXR1cm4gInBhcmVudCI7CisgICAgICAgIGNhc2UgUHJlY2Vk
aW5nQXhpczogcmV0dXJuICJwcmVjZWRpbmciOworICAgICAgICBjYXNlIFByZWNlZGluZ1NpYmxp
bmdBeGlzOiByZXR1cm4gInByZWNlZGluZy1zaWJsaW5nIjsKKyAgICAgICAgY2FzZSBTZWxmQXhp
czogcmV0dXJuICJzZWxmIjsKKyAgICB9CisgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsK
K30KKworU3RlcDo6U3RlcCgpCit7Cit9CisKK1N0ZXA6OlN0ZXAoQXhpc1R5cGUgYXhpcywgY29u
c3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVz
KQorICAgIDogbV9heGlzKGF4aXMpLAorICAgIG1fbm9kZVRlc3Qobm9kZVRlc3QpLAorICAgIG1f
cHJlZGljYXRlcyhwcmVkaWNhdGVzKQoreworfQorCitTdGVwOjp+U3RlcCgpCit7CisgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fcHJlZGljYXRlcyk7Cit9CisKK05vZGVTZXQgU3RlcDo6ZXZhbHVhdGUo
Tm9kZSAqY29udGV4dCkgY29uc3QKK3sKKyAgICBMT0coWFBhdGgsICJFdmFsdWF0aW5nIHN0ZXAs
IGF4aXM9JyVzJywgbm9kZXRlc3Q9JyVzJywgJXUgcHJlZGljYXRlc1xuIiwKKyAgICAgICAgICAg
IGF4aXNBc1N0cmluZyhtX2F4aXMpLmFzY2lpKCksIG1fbm9kZVRlc3QuYXNjaWkoKSwgbV9wcmVk
aWNhdGVzLnNpemUoKSk7CisgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxF
TUVOVF9OT0RFKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkNvbnRleHQgbm9kZSBpcyBhbiBlbGVt
ZW50IGNhbGxlZCAlc1xuIiwgY29udGV4dC0+bm9kZU5hbWUoKS5hc2NpaSgpKTsKKyAgICB9IGVs
c2UgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUpIHsKKyAg
ICAgICAgTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIGFuIGF0dHJpYnV0ZSBjYWxsZWQgJXMg
d2l0aCB2YWx1ZSAlc1xuIiwgCisgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlTmFtZSgpLmFz
Y2lpKCksIAorICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZVZhbHVlKCkuYXNjaWkoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIG9mIHVua25v
d24gdHlwZSAlZFxuIiwgY29udGV4dC0+bm9kZVR5cGUoKSk7CisgICAgfQorCisgICAgTm9kZVNl
dCBpbk5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCksIG91dE5vZGVzOworICAgIExPRyhYUGF0
aCwgIkF4aXMgJXMgbWF0Y2hlcyAlZCBub2Rlcy5cbiIsIGF4aXNBc1N0cmluZyhtX2F4aXMpLmFz
Y2lpKCksIGluTm9kZXMuc2l6ZSgpKTsKKworICAgIGluTm9kZXMgPSBub2RlVGVzdE1hdGNoZXMo
aW5Ob2Rlcyk7CisgICAgTE9HKFhQYXRoLCAiTm9kZXRlc3QgJXMgdHJpbXMgdGhpcyBudW1iZXIg
dG8gJWRcbiIsIG1fbm9kZVRlc3QuYXNjaWkoKSwgaW5Ob2Rlcy5zaXplKCkpOworICAgIAorICAg
IG91dE5vZGVzID0gaW5Ob2RlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVk
aWNhdGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFByZWRpY2F0ZSogcHJlZGljYXRlID0gbV9w
cmVkaWNhdGVzW2ldOworCisgICAgICAgIG91dE5vZGVzLmNsZWFyKCk7CisgICAgICAgIEV4cHJl
c3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOworICAgICAg
ICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uID0gMTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluTm9kZXMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBpbk5vZGVzW2pdLmdldCgpOworCisgICAgICAgICAgICBFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgPSBub2RlOworICAgICAgICAgICAgRXZhbHVh
dGlvbkNvbnRleHQgYmFja3VwQ3R4ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKTsK
KyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUtPmV2YWx1YXRlKCkpCisgICAgICAgICAgICAgICAg
b3V0Tm9kZXMuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpID0gYmFja3VwQ3R4OworICAgICAgICAgICAgKytFeHBy
ZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uOworICAgICAgICB9CisKKyAgICAg
ICAgTE9HKFhQYXRoLCAiXHRQcmVkaWNhdGUgdHJpbXMgdGhpcyBudW1iZXIgdG8gJWQiLCBvdXRO
b2Rlcy5zaXplKCkpOworCisgICAgICAgIGluTm9kZXMgPSBvdXROb2RlczsKKyAgICB9CisgICAg
cmV0dXJuIG91dE5vZGVzOworfQorCitOb2RlU2V0IFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUgKmNv
bnRleHQpIGNvbnN0Cit7CisgICAgTm9kZVNldCBub2RlczsKKyAgICBzd2l0Y2ggKG1fYXhpcykg
eworICAgICAgICBjYXNlIENoaWxkQXhpczogeworICAgICAgICAgICAgTm9kZSAqbiA9IGNvbnRl
eHQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAg
ICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgRGVzY2VuZGFudEF4aXM6IAorICAgICAgICAgICAgcmV0dXJuIGdldENoaWxk
cmVuUmVjdXJzaXZlbHkoY29udGV4dCk7CisgICAgICAgIGNhc2UgUGFyZW50QXhpczoKKyAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0LT5wYXJlbnROb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOworICAgICAgICBjYXNlIEFuY2VzdG9yQXhpczogeworICAgICAgICAgICAg
Tm9kZSAqbiA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7
CisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgIG4gPSBu
LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGb2xsb3dpbmdTaWJsaW5nQXhpczogeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwK
KyAgICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpYUEFUSF9OQU1F
U1BBQ0VfTk9ERSkgCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVTZXQoKTsKKworICAgICAg
ICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICB3aGls
ZSAobikgeworICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAg
ICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFByZWNlZGluZ1NpYmxpbmdBeGlzOiB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVf
Tk9ERSB8fAorICAgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OlhQ
QVRIX05BTUVTUEFDRV9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVybiBOb2RlU2V0KCk7CisK
KyAgICAgICAgICAgIE5vZGUgKm4gPSBjb250ZXh0LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAg
ICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZvbGxvd2lu
Z0F4aXM6IHsKKyAgICAgICAgICAgIE5vZGUgKnAgPSBjb250ZXh0OworICAgICAgICAgICAgd2hp
bGUgKCFpc1Jvb3REb21Ob2RlKHApKSB7CisgICAgICAgICAgICAgICAgTm9kZSAqbiA9IHAtPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
Z2V0Q2hpbGRyZW5SZWN1cnNpdmVseShuKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4t
Pm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHAgPSBw
LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQcmVjZWRpbmdBeGlzOiB7CisgICAgICAgICAgICBO
b2RlICpwID0gY29udGV4dDsKKyAgICAgICAgICAgIHdoaWxlICghaXNSb290RG9tTm9kZShwKSkg
eworICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
bik7CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2
ZWx5KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQXR0cmlidXRlQXhpczogeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVU
eXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVybiBOb2Rl
U2V0KCk7CisKKyAgICAgICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBjb250ZXh0LT5hdHRy
aWJ1dGVzKCk7CisgICAgICAgICAgICBpZiAoIWF0dHJzKSB7CisgICAgICAgICAgICAgICAgTE9H
KFhQYXRoLCAiTm9kZTo6YXR0cmlidXRlcygpIHJldHVybmVkIE5VTEwhIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgCisgICAgICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kIChhdHRycy0+aXRlbShpKSk7CisKKyAgICAgICAgICAgIHJldHVy
biBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6IHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTm9kZVNldCgpOworCisgICAgICAgICAgICBib29sIGZvdW5k
WG1sTnNOb2RlID0gZmFsc2U7CisgICAgICAgICAgICBOb2RlICpub2RlID0gY29udGV4dDsKKyAg
ICAgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwICph
dHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWF0dHJzKSB7
CisgICAgICAgICAgICAgICAgICAgIExPRyhYUGF0aCwgIk5vZGU6OmF0dHJpYnV0ZXMoKSByZXR1
cm5lZCBOVUxMISIpOworCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGF0dHJzLT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBhdHRycy0+aXRl
bShpKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPm5vZGVOYW1lKCkuZGVwcmVj
YXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoInhtbG5zOiIpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuLT5ub2Rl
TmFtZSgpID09ICJ4bWxucyIgJiYgIWZvdW5kWG1sTnNOb2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3VuZFhtbE5zTm9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW4tPm5vZGVWYWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBTZWxmQXhpczoKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChj
b250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgY2FzZSBEZXNjZW5k
YW50T3JTZWxmQXhpczoKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KGNvbnRleHQpKTsKKyAg
ICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgY2FzZSBBbmNlc3Rvck9yU2VsZkF4aXM6
IHsKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAgICAgICAgIE5vZGUg
Km4gPSBjb250ZXh0LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB3aGlsZSAobikgeworICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBuID0gbi0+cGFy
ZW50Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0coWFBhdGgsICJVbmtub3du
IGF4aXMgJXMgcGFzc2VkIHRvIFN0ZXA6Om5vZGVzSW5BeGlzIiwgYXhpc0FzU3RyaW5nKG1fYXhp
cykuYXNjaWkoKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5vZGVTZXQoKTsKK30KKworCitOb2Rl
U2V0IFN0ZXA6Om5vZGVUZXN0TWF0Y2hlcyhjb25zdCBOb2RlU2V0JiBub2RlcykgY29uc3QKK3sK
KyAgICBTdHJpbmcgbnMgPSBuYW1lc3BhY2VGcm9tTm9kZXRlc3QobV9ub2RlVGVzdCk7CisgICAg
Tm9kZVNldCBtYXRjaGVzOworICAgIGlmIChtX25vZGVUZXN0ID09ICIqIikgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAg
IE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5ub2Rl
VHlwZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG5zLmlzRW1wdHkoKSB8fCBub2RlLT5uYW1lc3BhY2VVUkkoKSA9PSBucykKKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGVzOworICAgIH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAidGV4
dCgpIikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAgICAg
ICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSAKKyAg
ICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbWF0Y2hlczsKKyAgICB9IGVsc2UgaWYgKG1fbm9kZVRlc3QgPT0gImNvbW1lbnQoKSIp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7
CisgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCisgICAgICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1hdGNo
ZXM7CisgICAgfSBlbHNlIGlmIChtX25vZGVUZXN0LnN0YXJ0c1dpdGgoInByb2Nlc3NpbmctaW5z
dHJ1Y3Rpb24iKSkgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHBhcmFtOworCisgICAgICAg
IGNvbnN0IGludCBzcGFjZSA9IG1fbm9kZVRlc3QuZmluZCgnICcpOworICAgICAgICBpZiAoc3Bh
Y2UgPiAtMSkKKyAgICAgICAgICAgIHBhcmFtID0gbV9ub2RlVGVzdC5kZXByZWNhdGVkU3RyaW5n
KCkubWlkKHNwYWNlICsgMSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rl
c1tpXS5nZXQoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFICYmCisgICAgICAgICAgICAgICAgKHBhcmFtLmlz
RW1wdHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IHBhcmFtKSkKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0gICAgCisgICAgICAgIHJldHVybiBt
YXRjaGVzOworICAgIH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAibm9kZSgpIikKKyAgICAgICAg
cmV0dXJuIG5vZGVzOworICAgIGVsc2UgeworICAgICAgICBTdHJpbmcgcHJlZml4LCBsb2NhbE5h
bWU7CisKKyAgICAgICAgY29uc3QgaW50IGNvbG9uID0gbV9ub2RlVGVzdC5maW5kKCc6Jyk7Cisg
ICAgICAgIGlmIChjb2xvbiA+IC0xKSB7CisgICAgICAgICAgICBwcmVmaXggPSBtX25vZGVUZXN0
LmxlZnQoY29sb24pOworICAgICAgICAgICAgbG9jYWxOYW1lID0gbV9ub2RlVGVzdC5kZXByZWNh
dGVkU3RyaW5nKCkubWlkKGNvbG9uICsgMSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bG9jYWxOYW1lID0gbV9ub2RlVGVzdDsKKworICAgICAgICBpZiAoIXByZWZpeC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGlmIChFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnJlc29s
dmVyLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAvKiBGSVhNRTogVGhyb3cgTkFNRVNQQUNFX0VSUiBleGNlcHRpb24gKi8KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2F4aXMgPT0gQXR0cmlidXRlQXhpcykg
eworICAgICAgICAgICAgLy8gSW4gWFBhdGggbGFuZCwgbmFtZXNwYWNlIG5vZGVzIGFyZSBub3Qg
YWNjZXNzaWJsZQorICAgICAgICAgICAgLy8gb24gdGhlIGF0dHJpYnV0ZSBheGlzLgorICAgICAg
ICAgICAgaWYgKGxvY2FsTmFtZSA9PSAieG1sbnMiKQorICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVOYW1lKCkg
PT0gbG9jYWxOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lLgor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1h
dGNoZXM7CisgICAgICAgIH0gZWxzZSBpZiAobV9heGlzID09IE5hbWVzcGFjZUF4aXMpIHsKKyAg
ICAgICAgICAgIExPRyhYUGF0aCwgIk5vZGUgdGVzdCAlcyBvbiBheGlzICVzIGlzIG5vdCBpbXBs
ZW1lbnRlZCB5ZXQuIiwKKyAgICAgICAgICAgICAgICBtX25vZGVUZXN0LmFzY2lpKCksIGF4aXNB
c1N0cmluZyhtX2F4aXMpLmFzY2lpKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSAqbm9kZSA9IG5vZGVzW2ldLmdldCgpOworIAorICAgICAgICAgICAgICAgIC8v
IFdlIHVzZSB0YWdRTmFtZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgZWxlbWVudCBu
YW1lIGluIHVwcGVyY2FzZSAKKyAgICAgICAgICAgICAgICAvLyBsaWtlIHdlIGdldCB3aXRoIEhU
TUwgZWxlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RUxFTUVOVF9OT0RFICYmCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1l
bnQgKj4obm9kZSktPnRhZ1FOYW1lKCkudG9TdHJpbmcoKSA9PSBsb2NhbE5hbWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBMT0coWFBhdGgsICJOb2RlIHRlc3QgJXMgb24gYXhpcyAlcyBpcyBu
b3QgaW1wbGVtZW50ZWQgeWV0LiIsCisgICAgICAgIG1fbm9kZVRlc3QuYXNjaWkoKSwgYXhpc0Fz
U3RyaW5nKG1fYXhpcykuYXNjaWkoKSk7CisKKyAgICByZXR1cm4gbWF0Y2hlczsKK30KKwordm9p
ZCBTdGVwOjpvcHRpbWl6ZSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJl
ZGljYXRlcy5zaXplKCk7IGkrKykKKyAgICAgICAgbV9wcmVkaWNhdGVzW2ldLT5vcHRpbWl6ZSgp
OworfQorCitTdHJpbmcgU3RlcDo6bmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0cmluZyYg
bm9kZVRlc3QpIGNvbnN0Cit7CisgICAgaW50IGkgPSBub2RlVGVzdC5maW5kKCc6Jyk7CisgICAg
aWYgKGkgPT0gLTEpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisKKyAgICBT
dHJpbmcgcHJlZml4KG5vZGVUZXN0LmxlZnQoaSkpOworICAgIAorICAgIE5vZGUgKmN0eE5vZGUg
PSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisgICAgcmV0dXJuIGN0eE5v
ZGUtPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpOworfQorCitOb2RlOjpOb2RlVHlwZSBTdGVw
OjpwcmltYXJ5Tm9kZVR5cGUoQXhpc1R5cGUgYXhpcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGF4
aXMpIHsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOgorICAgICAgICAgICAgcmV0dXJuIE5v
ZGU6OkFUVFJJQlVURV9OT0RFOworICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6CisgICAgICAg
ICAgICByZXR1cm4gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gTm9kZTo6RUxFTUVOVF9OT0RFOworICAgIH0KK30KKworfQor
fQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
dXRpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhf
U1VQUE9SVAorCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitib29sIGlzUm9vdERv
bU5vZGUoTm9kZSAqbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZSAmJiAhbm9kZS0+cGFyZW50Tm9k
ZSgpOworfQorCitTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSAqbm9kZSkKK3sKKyAgICBzd2l0Y2gg
KG5vZGUtPm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToK
KyAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAg
IGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToK
KyAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2RlVmFsdWUoKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGlmIChpc1Jvb3REb21Ob2RlKG5vZGUpCisgICAgICAgICAgICAgICAgIHx8
IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CisgICAgICAgICAgICAg
ICAgU3RyaW5nIHN0cjsKKyAgICAgICAgICAgICAgICBOb2RlU2V0IG5vZGVzID0gZ2V0Q2hpbGRy
ZW5SZWN1cnNpdmVseShub2RlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSAqbm9k
ZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgc3RyICs9IHN0cmluZ1ZhbHVlKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworTm9kZVNldCBnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KE5v
ZGUgKm5vZGUpCit7CisgICAgTm9kZVNldCBub2RlczsKKyAgICBOb2RlICpuID0gbm9kZS0+Zmly
c3RDaGlsZCgpOworICAgIHdoaWxlIChuKSB7CisgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAg
ICAgICAgbm9kZXMuYXBwZW5kKGdldENoaWxkcmVuUmVjdXJzaXZlbHkobikpOworICAgICAgICBu
ID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGVzOworfQorCitib29s
IGlzVmFsaWRDb250ZXh0Tm9kZShOb2RlICpub2RlKQoreworICAgIHJldHVybiBub2RlICYmICgK
KyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgfHwKKyAg
ICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAorICAg
ICAgICAgICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAgICAg
ICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fAorICAgICAg
ICAgICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9E
RSB8fAorICAgICAgICAgICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSB8
fAorICAgICAgICAgICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwK
KyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9E
RSk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKwpJbmRleDogV2ViQ29y
ZS94cGF0aC9pbXBsL2Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1w
bC9mdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlv
bnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIGZ1bmN0aW9ucy5oIC0g
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBGVU5DVElPTlNfSAorI2RlZmluZSBGVU5DVElPTlNfSAorI2lmIFhQQVRIX1NV
UFBPUlQKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitjbGFzcyBGdW5jdGlvbiA6IHB1YmxpYyBFeHByZXNz
aW9uCit7CitwdWJsaWM6CisgICAgdm9pZCBzZXRBcmd1bWVudHMoY29uc3QgVmVjdG9yPEV4cHJl
c3Npb24qPiAmYXJncyk7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyAmbmFtZSk7CisK
K3Byb3RlY3RlZDoKKyAgICBFeHByZXNzaW9uICphcmcoaW50IHBvcyk7CisgICAgY29uc3QgRXhw
cmVzc2lvbiAqYXJnKGludCBwb3MpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBhcmdDb3VudCgp
IGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
IG1fbmFtZTsKK307CisKK2NsYXNzIEZ1bmN0aW9uTGlicmFyeQoreworICAgIGZyaWVuZCBzdHJ1
Y3QgRnVuY3Rpb25NYXBwaW5nOworcHVibGljOgorICAgIHN0YXRpYyBGdW5jdGlvbkxpYnJhcnkg
JnNlbGYoKTsKKworICAgIEZ1bmN0aW9uICpnZXRGdW5jdGlvbihjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvbiAqPiAmYXJncyA9IFZlY3RvcjxFeHByZXNzaW9uKj4oKSkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEZ1bmN0aW9uUmVjOworCisgICAgRnVuY3Rp
b25MaWJyYXJ5KCk7CisgICAgRnVuY3Rpb25MaWJyYXJ5KGNvbnN0IEZ1bmN0aW9uTGlicmFyeSAm
cmhzKTsKKyAgICBGdW5jdGlvbkxpYnJhcnkgJm9wZXJhdG9yPShjb25zdCBGdW5jdGlvbkxpYnJh
cnkgJnJocyk7CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgRnVuY3Rpb25SZWM+IG1f
ZnVuY3Rpb25EaWN0OworfTsKKworfQorfQorI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKyNlbmRp
ZiAvLyBGVU5DVElPTlNfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdG9rZW5pemVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogdG9rZW5pemVyLmggLSBDb3B5cmlnaHQgMjAwNSBNYWtzaW0gT3Js
b3ZpY2ggPG1ha3NpbUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFRPS0VOSVpFUl9I
CisjZGVmaW5lIFRPS0VOSVpFUl9ICisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJzdGVw
LmgiCisjaW5jbHVkZSAicGF0aC5oIgorI2luY2x1ZGUgInByZWRpY2F0ZS5oIgorI2luY2x1ZGUg
ImV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKKy8vIEludGVyZmFjZSB0byB0aGUg
cGFyc2VyCitpbnQgeHBhdGh5eWxleCgpOwordm9pZCB4cGF0aHl5ZXJyb3IoY29uc3QgY2hhciAq
c3RyKTsKK3ZvaWQgaW5pdFRva2VuaXplcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHN0cmluZyk7
CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUveHBhdGgv
aW1wbC9zdGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBzdGVwLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJl
IDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNURVBfSAorI2RlZmluZSBT
VEVQX0gKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNs
dWRlICJ1dGlsLmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorY2xhc3MgU3RlcAoreworcHVibGljOgorICAg
IGVudW0gQXhpc1R5cGUgeworICAgICAgICBBbmNlc3RvckF4aXM9MSwgQW5jZXN0b3JPclNlbGZB
eGlzLCBBdHRyaWJ1dGVBeGlzLAorICAgICAgICBDaGlsZEF4aXMsIERlc2NlbmRhbnRBeGlzLCBE
ZXNjZW5kYW50T3JTZWxmQXhpcywKKyAgICAgICAgRm9sbG93aW5nQXhpcywgRm9sbG93aW5nU2li
bGluZ0F4aXMsIE5hbWVzcGFjZUF4aXMsCisgICAgICAgIFBhcmVudEF4aXMsIFByZWNlZGluZ0F4
aXMsIFByZWNlZGluZ1NpYmxpbmdBeGlzLAorICAgICAgICBTZWxmQXhpcworICAgIH07CisKKyAg
ICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBheGlzQXNTdHJpbmcoQXhpc1R5cGUgYXhpcyk7CisK
KyAgICBTdGVwKCk7CisgICAgU3RlcChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJpbmcgJm5vZGVU
ZXN0LCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4gJnByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGlj
YXRlKj4oKSk7CisgICAgflN0ZXAoKTsKKworICAgIE5vZGVTZXQgZXZhbHVhdGUoTm9kZSAqY29u
dGV4dCkgY29uc3Q7CisKKyAgICB2b2lkIG9wdGltaXplKCk7CisKK3ByaXZhdGU6CisgICAgTm9k
ZVNldCBub2Rlc0luQXhpcyhOb2RlICpjb250ZXh0KSBjb25zdDsKKyAgICBOb2RlU2V0IG5vZGVU
ZXN0TWF0Y2hlcyhjb25zdCBOb2RlU2V0JiBub2RlcykgY29uc3Q7CisgICAgU3RyaW5nIG5hbWVz
cGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdDsKKyAgICBOb2Rl
OjpOb2RlVHlwZSBwcmltYXJ5Tm9kZVR5cGUoQXhpc1R5cGUgYXhpcykgY29uc3Q7CisKKyAgICBB
eGlzVHlwZSBtX2F4aXM7CisgICAgU3RyaW5nIG1fbm9kZVRlc3Q7CisgICAgVmVjdG9yPFByZWRp
Y2F0ZSo+IG1fcHJlZGljYXRlczsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKyNlbmRpZiAvLyBTVEVQX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3Jh
bW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NDggQEAKKyV7CisjaW5jbHVkZSAiY29uZmlnLmgiCisgICAgCisj
aW5jbHVkZSAiZnVuY3Rpb25zLmgiCisjaW5jbHVkZSAieHBhdGgvaW1wbC9wYXRoLmgiCisjaW5j
bHVkZSAic3RlcC5oIgorI2luY2x1ZGUgInByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWwuaCIK
KyNpbmNsdWRlICJ2YXJpYWJsZXJlZmVyZW5jZS5oIgorICAgIAorI2luY2x1ZGUgIlhQYXRoTlNS
ZXNvbHZlci5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorCisjZGVmaW5lIFlZREVCVUcgMQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpYUGF0aDsKKyAgICAKK0V4cHJlc3Npb24gKnBh
cnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRpb25Db2RlJiBjb2Rl
KTsKKyAgICAKK2V4dGVybiBpbnQgeHBhdGh5eWxleCgpOworZXh0ZXJuIHZvaWQgeHBhdGh5eWVy
cm9yKGNvbnN0IGNoYXIgKnN0cik7CitleHRlcm4gdm9pZCBpbml0VG9rZW5pemVyKGNvbnN0IFN0
cmluZyYgc3RyaW5nKTsKKworc3RhdGljIEV4cHJlc3Npb24gKl90b3BFeHByOworc3RhdGljIGJv
b2wgZ290TmFtZXNwYWNlRXJyb3I7CisKKyV9CisKKyV1bmlvbgoreworICAgIFdlYkNvcmU6OlhQ
YXRoOjpTdGVwOjpBeGlzVHlwZSBheGlzVHlwZTsKKyAgICBpbnQgICAgICAgIG51bTsKKyAgICBE
ZXByZWNhdGVkU3RyaW5nICpzdHI7CisgICAgV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb24gKmV4
cHI7CisgICAgVmVjdG9yPFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGUqPiAqcHJlZExpc3Q7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uKj4gKmFyZ0xpc3Q7CisgICAgV2Vi
Q29yZTo6WFBhdGg6OlN0ZXAgKnN0ZXA7CisgICAgV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0
aCAqbG9jYXRpb25QYXRoOworfQorCislbGVmdCA8bnVtPiBNVUxPUCBSRUxPUCBFUU9QCislbGVm
dCA8c3RyPiBQTFVTIE1JTlVTCislbGVmdCA8c3RyPiBPUiBBTkQKKyV0b2tlbiA8YXhpc1R5cGU+
IEFYSVNOQU1FCisldG9rZW4gPHN0cj4gTk9ERVRZUEUgUEkgRlVOQ1RJT05OQU1FIExJVEVSQUwK
KyV0b2tlbiA8c3RyPiBWQVJJQUJMRVJFRkVSRU5DRSBOVU1CRVIKKyV0b2tlbiA8c3RyPiBET1RE
T1QgU0xBU0hTTEFTSCBOQU1FVEVTVAorJXRva2VuIEVSUk9SCisKKyV0eXBlIDxsb2NhdGlvblBh
dGg+IExvY2F0aW9uUGF0aAorJXR5cGUgPGxvY2F0aW9uUGF0aD4gQWJzb2x1dGVMb2NhdGlvblBh
dGgKKyV0eXBlIDxsb2NhdGlvblBhdGg+IFJlbGF0aXZlTG9jYXRpb25QYXRoCisldHlwZSA8c3Rl
cD4gU3RlcAorJXR5cGUgPGF4aXNUeXBlPiBBeGlzU3BlY2lmaWVyCisldHlwZSA8c3RlcD4gRGVz
Y2VuZGFudE9yU2VsZgorJXR5cGUgPHN0cj4gTm9kZVRlc3QKKyV0eXBlIDxleHByPiBQcmVkaWNh
dGUKKyV0eXBlIDxwcmVkTGlzdD4gUHJlZGljYXRlTGlzdAorJXR5cGUgPHN0ZXA+IEFiYnJldmlh
dGVkU3RlcAorJXR5cGUgPGV4cHI+IEV4cHIKKyV0eXBlIDxleHByPiBQcmltYXJ5RXhwcgorJXR5
cGUgPGV4cHI+IEZ1bmN0aW9uQ2FsbAorJXR5cGUgPGFyZ0xpc3Q+IEFyZ3VtZW50TGlzdAorJXR5
cGUgPGV4cHI+IEFyZ3VtZW50CisldHlwZSA8ZXhwcj4gVW5pb25FeHByCisldHlwZSA8ZXhwcj4g
UGF0aEV4cHIKKyV0eXBlIDxleHByPiBGaWx0ZXJFeHByCisldHlwZSA8ZXhwcj4gT3JFeHByCisl
dHlwZSA8ZXhwcj4gQW5kRXhwcgorJXR5cGUgPGV4cHI+IEVxdWFsaXR5RXhwcgorJXR5cGUgPGV4
cHI+IFJlbGF0aW9uYWxFeHByCisldHlwZSA8ZXhwcj4gQWRkaXRpdmVFeHByCisldHlwZSA8ZXhw
cj4gTXVsdGlwbGljYXRpdmVFeHByCisldHlwZSA8ZXhwcj4gVW5hcnlFeHByCisKKyUlCisKK0V4
cHI6CisgICAgT3JFeHByCisgICAgeworICAgICAgICBfdG9wRXhwciA9ICQxOworICAgIH0KKyAg
ICA7CisKK0xvY2F0aW9uUGF0aDoKKyAgICBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAg
ICAgICAgJCQtPm1fYWJzb2x1dGUgPSBmYWxzZTsKKyAgICB9CisgICAgfAorICAgIEFic29sdXRl
TG9jYXRpb25QYXRoCisgICAgeworICAgICAgICAkJC0+bV9hYnNvbHV0ZSA9IHRydWU7CisgICAg
fQorICAgIDsKKworQWJzb2x1dGVMb2NhdGlvblBhdGg6CisgICAgJy8nCisgICAgeworICAgICAg
ICAkJCA9IG5ldyBMb2NhdGlvblBhdGg7CisgICAgfQorICAgIHwKKyAgICAnLycgUmVsYXRpdmVM
b2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIHwKKyAgICBE
ZXNjZW5kYW50T3JTZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRoCisgICAgeworICAgICAgICAkJCA9
ICQyOworICAgICAgICAkJC0+bV9zdGVwcy5pbnNlcnQoMCwgJDEpOworICAgIH0KKyAgICA7CisK
K1JlbGF0aXZlTG9jYXRpb25QYXRoOgorICAgIFN0ZXAKKyAgICB7CisgICAgICAgICQkID0gbmV3
IExvY2F0aW9uUGF0aDsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCQxKTsKKyAgICB9Cisg
ICAgfAorICAgIFJlbGF0aXZlTG9jYXRpb25QYXRoICcvJyBTdGVwCisgICAgeworICAgICAgICAk
JC0+bV9zdGVwcy5hcHBlbmQoJDMpOworICAgIH0KKyAgICB8CisgICAgUmVsYXRpdmVMb2NhdGlv
blBhdGggRGVzY2VuZGFudE9yU2VsZiBTdGVwCisgICAgeworICAgICAgICAkJC0+bV9zdGVwcy5h
cHBlbmQoJDIpOworICAgICAgICAkJC0+bV9zdGVwcy5hcHBlbmQoJDMpOworICAgIH0KKyAgICA7
CisKK1N0ZXA6CisgICAgTm9kZVRlc3QKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoU3Rl
cDo6Q2hpbGRBeGlzLCAqJDEpOworICAgICAgICBkZWxldGUgJDE7CisgICAgfQorICAgIHwKKyAg
ICBOb2RlVGVzdCBQcmVkaWNhdGVMaXN0CisgICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKFN0
ZXA6OkNoaWxkQXhpcywgKiQxLCAqJDIpOworICAgICAgICBkZWxldGUgJDE7CisgICAgICAgIGRl
bGV0ZSAkMjsKKyAgICB9CisgICAgfAorICAgIEF4aXNTcGVjaWZpZXIgTm9kZVRlc3QKKyAgICB7
CisgICAgICAgICQkID0gbmV3IFN0ZXAoJDEsICokMik7CisgICAgICAgIGRlbGV0ZSAkMjsKKyAg
ICB9CisgICAgfAorICAgIEF4aXNTcGVjaWZpZXIgTm9kZVRlc3QgUHJlZGljYXRlTGlzdAorICAg
IHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcCgkMSwgKiQyLCAgKiQzKTsKKyAgICAgICAgZGVsZXRl
ICQyOworICAgICAgICBkZWxldGUgJDM7CisgICAgfQorICAgIHwKKyAgICBBYmJyZXZpYXRlZFN0
ZXAKKyAgICA7CisKK0F4aXNTcGVjaWZpZXI6CisgICAgQVhJU05BTUUKKyAgICB8CisgICAgJ0An
CisgICAgeworICAgICAgICAkJCA9IFN0ZXA6OkF0dHJpYnV0ZUF4aXM7CisgICAgfQorICAgIDsK
KworTm9kZVRlc3Q6CisgICAgTkFNRVRFU1QKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBjb2xv
biA9ICQxLT5maW5kKCc6Jyk7CisgICAgICAgIGlmIChjb2xvbiA+IC0xKSB7CisgICAgICAgICAg
ICBTdHJpbmcgcHJlZml4KCQxLT5sZWZ0KGNvbG9uKSk7CisgICAgICAgICAgICBYUGF0aE5TUmVz
b2x2ZXIgKnJlc29sdmVyID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5yZXNvbHZl
cjsKKyAgICAgICAgICAgIGlmICghcmVzb2x2ZXIgfHwgcmVzb2x2ZXItPmxvb2t1cE5hbWVzcGFj
ZVVSSShwcmVmaXgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgZ290TmFtZXNwYWNlRXJy
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgfAorICAgIE5PREVUWVBFICcoJyAnKScKKyAgICB7CisgICAgICAg
ICQkID0gbmV3IERlcHJlY2F0ZWRTdHJpbmcoKiQxICsgIigpIik7CisgICAgfQorICAgIHwKKyAg
ICBQSSAnKCcgJyknCisgICAgfAorICAgIFBJICcoJyBMSVRFUkFMICcpJworICAgIHsKKyAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZyBzID0gKiQxICsgIiAiICsgKiQzOworICAgICAgICBzID0gcy5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgJCQgPSBuZXcgRGVwcmVjYXRlZFN0cmluZyhzKTsK
KyAgICAgICAgZGVsZXRlICQxOworICAgICAgICBkZWxldGUgJDM7CisgICAgfQorICAgIDsKKwor
UHJlZGljYXRlTGlzdDoKKyAgICBQcmVkaWNhdGUKKyAgICB7CisgICAgICAgICQkID0gbmV3IFZl
Y3RvcjxQcmVkaWNhdGUqPjsKKyAgICAgICAgJCQtPmFwcGVuZChuZXcgUHJlZGljYXRlKCQxKSk7
CisgICAgfQorICAgIHwKKyAgICBQcmVkaWNhdGVMaXN0IFByZWRpY2F0ZQorICAgIHsKKyAgICAg
ICAgJCQtPmFwcGVuZChuZXcgUHJlZGljYXRlKCQyKSk7CisgICAgfQorICAgIDsKKworUHJlZGlj
YXRlOgorICAgICdbJyBFeHByICddJworICAgIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cisg
ICAgOworCitEZXNjZW5kYW50T3JTZWxmOgorICAgIFNMQVNIU0xBU0gKKyAgICB7CisgICAgICAg
ICQkID0gbmV3IFN0ZXAoU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMsICJub2RlKCkiKTsKKyAg
ICB9CisgICAgOworCitBYmJyZXZpYXRlZFN0ZXA6CisgICAgJy4nCisgICAgeworICAgICAgICAk
JCA9IG5ldyBTdGVwKFN0ZXA6OlNlbGZBeGlzLCAibm9kZSgpIik7CisgICAgfQorICAgIHwKKyAg
ICBET1RET1QKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6UGFyZW50QXhpcywg
Im5vZGUoKSIpOworICAgIH0KKyAgICA7CisKK1ByaW1hcnlFeHByOgorICAgIFZBUklBQkxFUkVG
RVJFTkNFCisgICAgeworICAgICAgICAkJCA9IG5ldyBWYXJpYWJsZVJlZmVyZW5jZSgqJDEpOwor
ICAgICAgICBkZWxldGUgJDE7CisgICAgfQorICAgIHwKKyAgICAnKCcgRXhwciAnKScKKyAgICB7
CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIHwKKyAgICBMSVRFUkFMCisgICAgeworICAg
ICAgICAkJCA9IG5ldyBTdHJpbmdFeHByZXNzaW9uKCokMSk7CisgICAgICAgIGRlbGV0ZSAkMTsK
KyAgICB9CisgICAgfAorICAgIE5VTUJFUgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTnVtYmVy
KCQxLT50b0RvdWJsZSgpKTsKKyAgICAgICAgZGVsZXRlICQxOworICAgIH0KKyAgICB8CisgICAg
RnVuY3Rpb25DYWxsCisgICAgOworCitGdW5jdGlvbkNhbGw6CisgICAgRlVOQ1RJT05OQU1FICco
JyAnKScKKyAgICB7CisgICAgICAgICQkID0gRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkuZ2V0RnVu
Y3Rpb24oJDEtPmxhdGluMSgpKTsKKyAgICAgICAgZGVsZXRlICQxOworICAgIH0KKyAgICB8Cisg
ICAgRlVOQ1RJT05OQU1FICcoJyBBcmd1bWVudExpc3QgJyknCisgICAgeworICAgICAgICAkJCA9
IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0aW9uKCQxLT5sYXRpbjEoKSwgKiQzKTsK
KyAgICAgICAgZGVsZXRlICQxOworICAgICAgICBkZWxldGUgJDM7CisgICAgfQorICAgIDsKKwor
QXJndW1lbnRMaXN0OgorICAgIEFyZ3VtZW50CisgICAgeworICAgICAgICAkJCA9IG5ldyBWZWN0
b3I8RXhwcmVzc2lvbio+OworICAgICAgICAkJC0+YXBwZW5kKCQxKTsKKyAgICB9CisgICAgfAor
ICAgIEFyZ3VtZW50TGlzdCAnLCcgQXJndW1lbnQKKyAgICB7CisgICAgICAgICQkLT5hcHBlbmQo
JDMpOworICAgIH0KKyAgICA7CisKK0FyZ3VtZW50OgorICAgIEV4cHIKKyAgICA7CisKKworVW5p
b25FeHByOgorICAgIFBhdGhFeHByCisgICAgfAorICAgIFVuaW9uRXhwciAnfCcgUGF0aEV4cHIK
KyAgICB7CisgICAgICAgICQkID0gbmV3IFVuaW9uOworICAgICAgICAkJC0+YWRkU3ViRXhwcmVz
c2lvbigkMSk7CisgICAgICAgICQkLT5hZGRTdWJFeHByZXNzaW9uKCQzKTsKKyAgICB9CisgICAg
OworCitQYXRoRXhwcjoKKyAgICBMb2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIHwKKyAgICBGaWx0ZXJFeHByCisgICAgeworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICB8CisgICAgRmlsdGVyRXhwciAnLycgUmVsYXRpdmVMb2NhdGlvblBhdGgKKyAg
ICB7CisgICAgICAgICQzLT5tX2Fic29sdXRlID0gdHJ1ZTsKKyAgICAgICAgJCQgPSBuZXcgUGF0
aChzdGF0aWNfY2FzdDxGaWx0ZXIgKj4oJDEpLCAkMyk7CisgICAgfQorICAgIHwKKyAgICBGaWx0
ZXJFeHByIERlc2NlbmRhbnRPclNlbGYgUmVsYXRpdmVMb2NhdGlvblBhdGgKKyAgICB7CisgICAg
ICAgICQzLT5tX3N0ZXBzLmluc2VydCgwLCAkMik7CisgICAgICAgICQzLT5tX2Fic29sdXRlID0g
dHJ1ZTsKKyAgICAgICAgJCQgPSBuZXcgUGF0aChzdGF0aWNfY2FzdDxGaWx0ZXIgKj4oJDEpLCAk
Myk7CisgICAgfQorICAgIDsKKworRmlsdGVyRXhwcjoKKyAgICBQcmltYXJ5RXhwcgorICAgIHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfAorICAgIFByaW1hcnlFeHByIFByZWRpY2F0
ZUxpc3QKKyAgICB7CisgICAgICAgICQkID0gbmV3IEZpbHRlcigkMSwgKiQyKTsKKyAgICB9Cisg
ICAgOworCitPckV4cHI6CisgICAgQW5kRXhwcgorICAgIHwKKyAgICBPckV4cHIgT1IgQW5kRXhw
cgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9naWNhbE9wKExvZ2ljYWxPcDo6T1BfT3IsICQx
LCAkMyk7CisgICAgfQorICAgIDsKKworQW5kRXhwcjoKKyAgICBFcXVhbGl0eUV4cHIKKyAgICB8
CisgICAgQW5kRXhwciBBTkQgRXF1YWxpdHlFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBM
b2dpY2FsT3AoTG9naWNhbE9wOjpPUF9BbmQsICQxLCAkMyk7CisgICAgfQorICAgIDsKKworRXF1
YWxpdHlFeHByOgorICAgIFJlbGF0aW9uYWxFeHByCisgICAgfAorICAgIEVxdWFsaXR5RXhwciBF
UU9QIFJlbGF0aW9uYWxFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBFcVRlc3RPcCgkMiwg
JDEsICQzKTsKKyAgICB9CisgICAgOworCitSZWxhdGlvbmFsRXhwcjoKKyAgICBBZGRpdGl2ZUV4
cHIKKyAgICB8CisgICAgUmVsYXRpb25hbEV4cHIgUkVMT1AgQWRkaXRpdmVFeHByCisgICAgewor
ICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoJDIsICQxLCAkMyk7CisgICAgfQorICAgIDsKKwor
QWRkaXRpdmVFeHByOgorICAgIE11bHRpcGxpY2F0aXZlRXhwcgorICAgIHwKKyAgICBBZGRpdGl2
ZUV4cHIgUExVUyBNdWx0aXBsaWNhdGl2ZUV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IE51
bWVyaWNPcChOdW1lcmljT3A6Ok9QX0FkZCwgJDEsICQzKTsKKyAgICB9CisgICAgfAorICAgIEFk
ZGl0aXZlRXhwciBNSU5VUyBNdWx0aXBsaWNhdGl2ZUV4cHIKKyAgICB7CisgICAgICAgICQkID0g
bmV3IE51bWVyaWNPcChOdW1lcmljT3A6Ok9QX1N1YiwgJDEsICQzKTsKKyAgICB9CisgICAgOwor
CitNdWx0aXBsaWNhdGl2ZUV4cHI6CisgICAgVW5hcnlFeHByCisgICAgfAorICAgIE11bHRpcGxp
Y2F0aXZlRXhwciBNVUxPUCBVbmFyeUV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IE51bWVy
aWNPcCgkMiwgJDEsICQzKTsKKyAgICB9CisgICAgOworCitVbmFyeUV4cHI6CisgICAgVW5pb25F
eHByCisgICAgfAorICAgIE1JTlVTIFVuYXJ5RXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcg
TmVnYXRpdmU7CisgICAgICAgICQkLT5hZGRTdWJFeHByZXNzaW9uKCQyKTsKKyAgICB9CisgICAg
OworCislJQorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgIAor
RXhwcmVzc2lvbiogcGFyc2VTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIEV4Y2Vw
dGlvbkNvZGUmIGNvZGUpCit7CisgICAgZ290TmFtZXNwYWNlRXJyb3IgPSBmYWxzZTsKKworICAg
IGluaXRUb2tlbml6ZXIoc3RhdGVtZW50KTsKKyAgICAKKyAgICBpbnQgcGFyc2VFcnJvciA9IHl5
cGFyc2UoKTsKKyAgICAKKyAgICBpZiAocGFyc2VFcnJvcikgeworICAgICAgICBpZiAoZ290TmFt
ZXNwYWNlRXJyb3IpCisgICAgICAgICAgICBjb2RlID0gTkFNRVNQQUNFX0VSUjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY29kZSA9IElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gX3RvcEV4cHI7Cit9CisKK30KK30K
KwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3hwYXRoL2ltcGwvdXRpbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3V0
aWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIHV0aWwuaCAtIENvcHly
aWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
Zm5kZWYgVVRJTF9ICisjZGVmaW5lIFVUSUxfSAorI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1
ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBYUGF0aCB7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+IE5vZGVTZXQ7CisgICAgCisvKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5v
ZGUgaXMgdGhlIHJvb3Qgbm9kZS4KKyAqLworYm9vbCBpc1Jvb3REb21Ob2RlKE5vZGUgKm5vZGUp
OworCisvKiBAcmV0dXJuIHRoZSAnc3RyaW5nLXZhbHVlJyBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBz
cGVjaWZpZWQgYnkKKyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoCisgKi8KK1N0cmluZyBz
dHJpbmdWYWx1ZShOb2RlICpub2RlKTsKKworLyogQHJldHVybiBhbGwgYW5jZXN0b3Igbm9kZXMg
b2YgdGhlIGdpdmVuIG5vZGUsIGluIGRvY3VtZW50IG9yZGVyLgorICovCitOb2RlU2V0IGdldENo
aWxkcmVuUmVjdXJzaXZlbHkoTm9kZSAqbm9kZSk7CisKKy8qIEByZXR1cm4gd2hldGhlciB0aGUg
Z2l2ZW4gbm9kZSBpcyBhIHZhbGlkIGNvbnRleHQgbm9kZQorICovCitib29sIGlzVmFsaWRDb250
ZXh0Tm9kZShXZWJDb3JlOjpOb2RlICpub2RlKTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhf
U1VQUE9SVAorI2VuZGlmIC8vIFVUSUxfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGF0
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFhQQVRIX1NV
UFBPUlQKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2luY2x1ZGUgInBhdGguaCIKKworI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK0ZpbHRlcjo6RmlsdGVyKEV4cHJlc3Np
b24gKmV4cHIsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiYgcHJlZGljYXRlcykKKyAgICA6IG1f
ZXhwcihleHByKSwKKyAgICBtX3ByZWRpY2F0ZXMocHJlZGljYXRlcykKK3sKK30KKworRmlsdGVy
Ojp+RmlsdGVyKCkKK3sKKyAgICBkZWxldGUgbV9leHByOworICAgIGRlbGV0ZUFsbFZhbHVlcyht
X3ByZWRpY2F0ZXMpOworfQorCitWYWx1ZSBGaWx0ZXI6OmRvRXZhbHVhdGUoKSBjb25zdAorewor
ICAgIFZhbHVlIHYgPSBtX2V4cHItPmV2YWx1YXRlKCk7CisgICAgCisgICAgaWYgKCF2LmlzTm9k
ZXNldCgpKSB7CisgICAgICAgIGlmICghbV9wcmVkaWNhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIExPRyhYUGF0aCwgIklnbm9yaW5nIHByZWRpY2F0ZXMgZm9yIGZpbHRlciBzaW5jZSBleHBy
ZXNzaW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIGEgbm9kZXNldCEiKTsKKworICAgICAgICByZXR1
cm4gdjsKKyAgICB9CisKKyAgICBOb2RlU2V0IGluTm9kZXMgPSB2LnRvTm9kZVNldCgpLCBvdXRO
b2RlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVkaWNhdGVzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIG91dE5vZGVzLmNsZWFyKCk7CisgICAgICAgIEV4cHJlc3Npb246OmV2
YWx1YXRpb25Db250ZXh0KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOworICAgICAgICBFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uID0gMDsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbk5vZGVzLnNpemUoKTsgaisrKSB7CisgICAgICAg
ICAgICBOb2RlICpub2RlID0gaW5Ob2Rlc1tqXS5nZXQoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gbm9kZTsKKyAgICAg
ICAgICAgICsrRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbjsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG1fcHJlZGljYXRlc1tpXS0+ZXZhbHVhdGUoKSkKKyAg
ICAgICAgICAgICAgICBvdXROb2Rlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAg
aW5Ob2RlcyA9IG91dE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShvdXROb2Rlcyk7
Cit9CisKK0xvY2F0aW9uUGF0aDo6TG9jYXRpb25QYXRoKCkKKyAgICA6IG1fYWJzb2x1dGUoZmFs
c2UpCit7Cit9CisKK0xvY2F0aW9uUGF0aDo6fkxvY2F0aW9uUGF0aCgpCit7CisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fc3RlcHMpOworfQorCit2b2lkIExvY2F0aW9uUGF0aDo6b3B0aW1pemUoKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0ZXBzLnNpemUoKTsgaSsrKQorICAg
ICAgICBtX3N0ZXBzW2ldLT5vcHRpbWl6ZSgpOworfQorCitWYWx1ZSBMb2NhdGlvblBhdGg6OmRv
RXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmIChtX2Fic29sdXRlKSB7CisgICAgICAgIExPRyhY
UGF0aCwgIkV2YWx1YXRpbmcgYWJzb2x1dGUgcGF0aCBleHByZXNzaW9uIHdpdGggJWkgbG9jYXRp
b24gc3RlcHMuXG4iLCBtX3N0ZXBzLnNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9H
KFhQYXRoLCAiRXZhbHVhdGluZyByZWxhdGl2ZSBwYXRoIGV4cHJlc3Npb24gd2l0aCAlaSBsb2Nh
dGlvbiBzdGVwcy5cbiIsIG1fc3RlcHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBOb2RlU2V0IGlu
RG9tTm9kZXMsIG91dERvbU5vZGVzOworCisgICAgLyogRm9yIGFic29sdXRlIGxvY2F0aW9uIHBh
dGhzLCB0aGUgY29udGV4dCBub2RlIGlzIGlnbm9yZWQgLSB0aGUKKyAgICAgKiBkb2N1bWVudCdz
IHJvb3Qgbm9kZSBpcyB1c2VkIGluc3RlYWQuCisgICAgICovCisgICAgTm9kZSAqY29udGV4dCA9
IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKyAgICBpZiAobV9hYnNvbHV0
ZSAmJiBjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpIAorICAgICAg
ICBjb250ZXh0ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgpOworCisgICAgaW5Eb21Ob2Rlcy5h
cHBlbmQoY29udGV4dCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3Rl
cHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RlcCAqc3RlcCA9IG1fc3RlcHNbaV07CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluRG9tTm9kZXMuc2l6ZSgpOyBqKyspIHsK
KyAgICAgICAgICAgIE5vZGVTZXQgbWF0Y2hlcyA9IHN0ZXAtPmV2YWx1YXRlKGluRG9tTm9kZXNb
al0uZ2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXREb21Ob2Rlcy5hcHBlbmQo
bWF0Y2hlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGluRG9tTm9kZXMgPSBvdXRE
b21Ob2RlczsKKyAgICAgICAgb3V0RG9tTm9kZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gVmFsdWUoaW5Eb21Ob2Rlcyk7Cit9CisKK1BhdGg6OlBhdGgoRmlsdGVyICpmaWx0ZXIsIExv
Y2F0aW9uUGF0aCAqcGF0aCkKKyAgICA6IG1fZmlsdGVyKGZpbHRlciksCisgICAgbV9wYXRoKHBh
dGgpCit7Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9maWx0ZXI7CisgICAg
ZGVsZXRlIG1fcGF0aDsKK30KKworVmFsdWUgUGF0aDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFZhbHVlKCk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
SW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveHBhdGgvWFBhdGhSZXN1bHQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9Y
UGF0aFJlc3VsdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogWFBh
dGhSZXN1bHQuY3BwIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFT
IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9S
VAorCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5o
IgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKworY2xhc3MgSW52YWxpZGF0aW5nRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBJbnZhbGlkYXRpbmdF
dmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSAqbm9kZSwgWFBhdGhSZXN1bHQgKnJlc3VsdCkg
CisgICAgICAgIDogbV9ub2RlKG5vZGUpLCBtX3Jlc3VsdChyZXN1bHQpIHsgfQorICAgIAorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wpIHsgbV9yZXN1bHQtPmludmFs
aWRhdGVJdGVyYXRvclN0YXRlKCk7IH0KK3ByaXZhdGU6CisgICAgRXZlbnRUYXJnZXROb2RlICpt
X25vZGU7CisgICAgWFBhdGhSZXN1bHQgKm1fcmVzdWx0OworfTsKKworWFBhdGhSZXN1bHQ6OlhQ
YXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXQsIGNvbnN0IFZhbHVlICZ2YWx1
ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX2V2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0
KQoreworICAgIG1fZXZlbnRMaXN0ZW5lciA9IG5ldyBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVy
KG1fZXZlbnRUYXJnZXQuZ2V0KCksIHRoaXMpOworICAgIG1fZXZlbnRUYXJnZXQtPmFkZEV2ZW50
TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVkRXZlbnQsIG1fZXZlbnRMaXN0
ZW5lciwgZmFsc2UpOworICAgICAgICAKKyAgICBzd2l0Y2ggKG1fdmFsdWUudHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgVmFsdWU6OkJvb2xlYW46CisgICAgICAgICAgICBtX3Jlc3VsdFR5cGUgPSBC
T09MRUFOX1RZUEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZTo6TnVt
YmVyOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gTlVNQkVSX1RZUEU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZTo6U3RyaW5nOgorICAgICAgICAgICAgbV9yZXN1
bHRUeXBlID0gU1RSSU5HX1RZUEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBW
YWx1ZTo6Tm9kZXNldDoKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IFVOT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEU7CisgICAgICAgICAgICBtX25vZGVTZXRQb3NpdGlvbiA9IDA7CisgICAg
ICAgICAgICBtX25vZGVTZXQgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOworICAgICAgICAgICAgbV9p
bnZhbGlkSXRlcmF0b3JTdGF0ZSA9IGZhbHNlOworICAgIH0KK30KKworWFBhdGhSZXN1bHQ6On5Y
UGF0aFJlc3VsdCgpCit7CisgICAgaWYgKG1fZXZlbnRUYXJnZXQpCisgICAgICAgIG1fZXZlbnRU
YXJnZXQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVk
RXZlbnQsIG1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2UpOworfQorCit2b2lkIFhQYXRoUmVz
dWx0Ojpjb252ZXJ0VG8odW5zaWduZWQgc2hvcnQgdHlwZSwgaW50ICZleGNlcHRpb25jb2RlKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFOWV9UWVBFOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTlVNQkVSX1RZUEU6CisgICAgICAgICAgICBtX3Jlc3Vs
dFR5cGUgPSB0eXBlOworICAgICAgICAgICAgbV92YWx1ZSA9IFZhbHVlKG1fdmFsdWUudG9OdW1i
ZXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFJJTkdfVFlQRToKKyAg
ICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IHR5cGU7CisgICAgICAgICAgICBtX3ZhbHVlID0gVmFs
dWUobV92YWx1ZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEJPT0xFQU5fVFlQRToKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IHR5cGU7CisgICAgICAg
ICAgICBtX3ZhbHVlID0gVmFsdWUobV92YWx1ZS50b0Jvb2xlYW4oKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOgorICAgICAg
ICBjYXNlIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOgorICAgICAgICBjYXNlIFVOT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEU6CisgICAgICAgIGNhc2UgT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEU6CisgICAgICAgIGNhc2UgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEU6CisgICAgICAgIGNh
c2UgRklSU1RfT1JERVJFRF9OT0RFX1RZUEU6CisgICAgICAgICAgICBpZiAoIW1fdmFsdWUuaXNO
b2Rlc2V0KCkpIHsKKyAgICAgICAgICAgICAgICBleGNlcHRpb25jb2RlID0gVFlQRV9FUlI7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9yZXN1
bHRUeXBlID0gdHlwZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPRyhYUGF0aCwg
IkNhbm5vdCBjb252ZXJ0IFhQYXRoUmVzdWx0IHRvIHVua25vd24gdHlwZSAnJXUnISIsIHR5cGUp
OworICAgIH0KK30KKwordW5zaWduZWQgc2hvcnQgWFBhdGhSZXN1bHQ6OnJlc3VsdFR5cGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3Jlc3VsdFR5cGU7Cit9CisKK2RvdWJsZSBYUGF0aFJlc3Vs
dDo6bnVtYmVyVmFsdWUoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdAoreworICAgIGlmIChyZXN1
bHRUeXBlKCkgIT0gTlVNQkVSX1RZUEUpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IFRZUEVf
RVJSOworICAgICAgICByZXR1cm4gMC4wOworICAgIH0KKyAgICByZXR1cm4gbV92YWx1ZS50b051
bWJlcigpOworfQorCitTdHJpbmcgWFBhdGhSZXN1bHQ6OnN0cmluZ1ZhbHVlKGludCAmZXhjZXB0
aW9uY29kZSkgY29uc3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFNUUklOR19UWVBFKSB7
CisgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIH0KKyAgICByZXR1cm4gbV92YWx1ZS50b1N0cmluZygpOworfQorCitib29sIFhQ
YXRoUmVzdWx0Ojpib29sZWFuVmFsdWUoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdAoreworICAg
IGlmIChyZXN1bHRUeXBlKCkgIT0gQk9PTEVBTl9UWVBFKSB7CisgICAgICAgIGV4Y2VwdGlvbmNv
ZGUgPSBUWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
bV92YWx1ZS50b0Jvb2xlYW4oKTsKK30KKworTm9kZSAqWFBhdGhSZXN1bHQ6OnNpbmdsZU5vZGVW
YWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0Cit7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAh
PSBBTllfVU5PUkRFUkVEX05PREVfVFlQRSAmJgorICAgICAgICAgcmVzdWx0VHlwZSgpICE9IEZJ
UlNUX09SREVSRURfTk9ERV9UWVBFKSB7CisgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgICBOb2RlU2V0IG5vZGVzID0gbV92
YWx1ZS50b05vZGVTZXQoKTsKKyAgICBpZiAobm9kZXMuc2l6ZSAoKSA9PSAwKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBub2Rlc1swXS5nZXQoKTsKK30KKwor
dm9pZCBYUGF0aFJlc3VsdDo6aW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUoKQoreyAKKyAgICBtX2lu
dmFsaWRJdGVyYXRvclN0YXRlID0gdHJ1ZTsKKyAgICAKKyAgICBBU1NFUlQobV9ldmVudFRhcmdl
dCk7CisgICAgQVNTRVJUKG1fZXZlbnRMaXN0ZW5lcik7CisgICAgCisgICAgbV9ldmVudFRhcmdl
dC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVu
dCwgbV9ldmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7CisgICAgCisgICAgbV9ldmVudFRhcmdl
dCA9IDA7Cit9CisKK2Jvb2wgWFBhdGhSZXN1bHQ6OmludmFsaWRJdGVyYXRvclN0YXRlKCkgY29u
c3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUgJiYKKyAgICAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1faW52YWxpZEl0ZXJh
dG9yU3RhdGU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgWFBhdGhSZXN1bHQ6OnNuYXBzaG90TGVuZ3Ro
KGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVO
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgJiYKKyAgICAgICAgcmVzdWx0VHlwZSgpICE9IE9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKSB7CisgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBUWVBF
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG1fdmFsdWUudG9O
b2RlU2V0KCkuc2l6ZSgpOworfQorCitOb2RlICpYUGF0aFJlc3VsdDo6aXRlcmF0ZU5leHQoRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFICYmCisgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRSkgeworICAgICAgICBlYyA9IFRZUEVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgCisgICAgaWYgKG1faW52YWxpZEl0ZXJhdG9yU3RhdGUpIHsKKyAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IAorICAgIGlmIChtX25vZGVTZXRQb3NpdGlvbiArIDEgPj0gbV9ub2RlU2V0LnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlICpub2RlID0gbV9ub2RlU2V0W21fbm9kZVNldFBv
c2l0aW9uXS5nZXQoKTsKKyAgICAKKyAgICBtX25vZGVTZXRQb3NpdGlvbisrOworCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKK05vZGUgKlhQYXRoUmVzdWx0OjpzbmFwc2hvdEl0ZW0odW5zaWduZWQg
bG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlKQoreworICAgIGlmIChyZXN1bHRUeXBlKCkg
IT0gVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAmJgorICAgICAgICAgcmVzdWx0VHlwZSgp
ICE9IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKSB7CisgICAgICAgIGV4Y2VwdGlvbmNvZGUg
PSBUWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE5vZGVTZXQg
bm9kZXMgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOworICAgIGlmIChpbmRleCA+PSBub2Rlcy5zaXpl
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBub2Rlc1tpbmRleF0uZ2V0
KCk7Cit9CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBh
dGgvWFBhdGhSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBYUGF0aFJlc3VsdC5oIC0gQ29weXJpZ2h0IDIw
MDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBY
UGF0aFJlc3VsdF9ICisjZGVmaW5lIFhQYXRoUmVzdWx0X0gKKyNpZiBYUEFUSF9TVVBQT1JUCisK
KyNpbmNsdWRlICJTaGFyZWQuaCIKKworI2luY2x1ZGUgImltcGwvZXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Tm9kZTsKK2NsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsKK2NsYXNzIEV2ZW50TGlzdGVuZXI7CisKK2Ns
YXNzIFhQYXRoUmVzdWx0IDogcHVibGljIFNoYXJlZDxYUGF0aFJlc3VsdD4KK3sKK3B1YmxpYzoK
KyAgICBlbnVtIFhQYXRoUmVzdWx0VHlwZSB7CisgICAgICAgIEFOWV9UWVBFID0gMCwKKyAgICAg
ICAgTlVNQkVSX1RZUEUgPSAxLAorICAgICAgICBTVFJJTkdfVFlQRSA9IDIsCisgICAgICAgIEJP
T0xFQU5fVFlQRSA9IDMsCisgICAgICAgIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0
LAorICAgICAgICBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDUsCisgICAgICAgIFVOT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2LAorICAgICAgICBPUkRFUkVEX05PREVfU05BUFNI
T1RfVFlQRSA9IDcsCisgICAgICAgIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gOCwKKyAgICAg
ICAgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5CisgICAgfTsKKyAgICAKKyAgICBYUGF0aFJl
c3VsdChFdmVudFRhcmdldE5vZGUgKmV2ZW50VGFyZ2V0LCBjb25zdCBYUGF0aDo6VmFsdWUgJnZh
bHVlKTsKKyAgICB+WFBhdGhSZXN1bHQoKTsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUbyh1bnNp
Z25lZCBzaG9ydCB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB1bnNpZ25lZCBzaG9ydCBy
ZXN1bHRUeXBlKCkgY29uc3Q7CisKKyAgICBkb3VibGUgbnVtYmVyVmFsdWUoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OworICAgIFN0cmluZyBzdHJpbmdWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7
CisgICAgYm9vbCBib29sZWFuVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIE5vZGUg
KnNpbmdsZU5vZGVWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CisKKyAgICBib29sIGludmFs
aWRJdGVyYXRvclN0YXRlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBzbmFwc2hvdExlbmd0
aChFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgTm9kZSAqaXRlcmF0ZU5leHQoRXhjZXB0aW9u
Q29kZSYpOworICAgIE5vZGUgKnNuYXBzaG90SXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7Citwcml2
YXRlOgorICAgIFhQYXRoOjpWYWx1ZSBtX3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbm9kZVNldFBv
c2l0aW9uOworICAgIFhQYXRoOjpOb2RlU2V0IG1fbm9kZVNldDsKKyAgICB1bnNpZ25lZCBzaG9y
dCBtX3Jlc3VsdFR5cGU7CisgICAgYm9vbCBtX2ludmFsaWRJdGVyYXRvclN0YXRlOworICAgIFJl
ZlB0cjxFdmVudFRhcmdldE5vZGU+IG1fZXZlbnRUYXJnZXQ7CisgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IG1fZXZlbnRMaXN0ZW5lcjsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKyNlbmRpZiAvLyBYUGF0aFJlc3VsdF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhF
eHByZXNzaW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lv
bi5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5pZGwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggeworCisgICAgaW50ZXJmYWNlIFhQYXRoRXhw
cmVzc2lvbiB7CisgICAgICAgIFhQYXRoUmVzdWx0IGV2YWx1YXRlKGluIE5vZGUgY29udGV4dE5v
ZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1bnNpZ25lZCBzaG9ydCB0eXBl
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5SZXN1bHQp
CisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRleDogV2Vi
Q29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0
aC9YUGF0aEV2YWx1YXRvci5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRo
RXZhbHVhdG9yLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4cGF0aCB7CisKKyAgICBpbnRl
cmZhY2UgW0dlbmVyYXRlQ29uc3RydWN0b3IsIENhbkJlQ29uc3RydWN0ZWRdIFhQYXRoRXZhbHVh
dG9yIHsKKyAgICAgICAgWFBhdGhFeHByZXNzaW9uIGNyZWF0ZUV4cHJlc3Npb24oaW4gRE9NU3Ry
aW5nIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIFhQYXRoTlNSZXNvbHZlciByZXNvbHZlcikKKyAgICAgICAgICAgIHJhaXNlcyhjb3JlOjpE
T01FeGNlcHRpb24pOworCisgICAgICAgIFhQYXRoTlNSZXNvbHZlciBjcmVhdGVOU1Jlc29sdmVy
KGluIE5vZGUgbm9kZVJlc29sdmVyKTsKKworICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShp
biBET01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
Tm9kZSBjb250ZXh0Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRo
TlNSZXNvbHZlciByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5z
aWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhS
ZXN1bHQgaW5SZXN1bHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9
OworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4
cGF0aCB7CisKKyAgICBpbnRlcmZhY2UgWFBhdGhOU1Jlc29sdmVyIHsKKyAgICAgICAgRE9NU3Ry
aW5nIGxvb2t1cE5hbWVzcGFjZVVSSShpbiBET01TdHJpbmcgcHJlZml4KTsKKyAgICB9OworfQpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9XZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIFhQYXRoTmFtZXNwYWNlLmNwcCAtIENvcHlyaWdo
dCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aE5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFBhdGhOYW1lc3BhY2U6OlhQYXRo
TmFtZXNwYWNlKERvY3VtZW50ICpwdHIsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJp
bmcmIHVyaSkKKyAgICA6IE5vZGUoIHB0ciApLAorICAgIG1fb3duZXJEb2N1bWVudCggcHRyICks
CisgICAgbV9wcmVmaXgoIHByZWZpeCApLAorICAgIG1fdXJpKCB1cmkgKQoreworfQorCitYUGF0
aE5hbWVzcGFjZTo6flhQYXRoTmFtZXNwYWNlKCkKK3sKK30KKworRG9jdW1lbnQgKlhQYXRoTmFt
ZXNwYWNlOjpvd25lckRvY3VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25lckRvY3Vt
ZW50OworfQorCitFbGVtZW50ICpYUGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiAwOworfQorCitjb25zdCBBdG9taWNTdHJpbmcg
JlhQYXRoTmFtZXNwYWNlOjpwcmVmaXgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWZpeDsK
K30KKworU3RyaW5nIFhQYXRoTmFtZXNwYWNlOjpub2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJlZml4OworfQorCitjb25zdCBBdG9taWNTdHJpbmcgJlhQYXRoTmFtZXNwYWNlOjpu
YW1lc3BhY2VVUkkoKSBjb25zdAoreworICAgIHJldHVybiBtX3VyaTsKK30KKworV2ViQ29yZTo6
Tm9kZTo6Tm9kZVR5cGUgWFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7Cit9CisKK30KKwpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL1dlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIFhQYXRoRXhwcmVzc2lvbkltcGwuY3BwIC0gQ29weXJpZ2h0IDIw
MDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSW1wbC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisj
aW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNp
bmNsdWRlICJpbXBsL2V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJpbXBsL3V0aWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgWFBhdGg7CisgICAgCitQYXNzUmVm
UHRyPFhQYXRoRXhwcmVzc2lvbj4gWFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNzaW9uKGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwgaW50JiBl
YykKK3sKKyAgICBYUGF0aEV4cHJlc3Npb24gKmV4cHIgPSBuZXcgWFBhdGhFeHByZXNzaW9uOwor
ICAgIAorICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucmVzb2x2ZXIgPSByZXNv
bHZlcjsKKyAgICBpZiAoIWV4cHItPm1fc3RhdGVtZW50LnBhcnNlKGV4cHJlc3Npb24uZGVwcmVj
YXRlZFN0cmluZygpLCBlYykpIHsKKyAgICAgICAgZGVsZXRlIGV4cHI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZXhwcjsKK30KKworUGFzc1JlZlB0cjxYUGF0
aFJlc3VsdD4gWFBhdGhFeHByZXNzaW9uOjpldmFsdWF0ZShOb2RlICpjb250ZXh0Tm9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWFBhdGhSZXN1bHQgKnJlc3VsdF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghaXNW
YWxpZENvbnRleHROb2RlKGNvbnRleHROb2RlKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JU
RURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgTm9kZSAqZXZlbnRU
YXJnZXQgPSBjb250ZXh0Tm9kZS0+b3duZXJEb2N1bWVudCgpID8gCisgICAgICAgIGNvbnRleHRO
b2RlLT5vd25lckRvY3VtZW50KCkgOiBjb250ZXh0Tm9kZTsKKyAgICAKKyAgICBYUGF0aFJlc3Vs
dCogcmVzdWx0ID0gbmV3IFhQYXRoUmVzdWx0KHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+
KGV2ZW50VGFyZ2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGVtZW50LmV2YWx1YXRlKGNvbnRleHROb2RlKSk7CisgICAgCisgICAgaWYgKHR5cGUg
IT0gWFBhdGhSZXN1bHQ6OkFOWV9UWVBFKSB7CisgICAgICAgIHJlc3VsdC0+Y29udmVydFRvKHR5
cGUsIGVjKTsKKworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUveHBh
dGgvWFBhdGhOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUveHBhdGgv
WFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvV2ViQ29yZS94cGF0aC9Y
UGF0aE5hbWVzcGFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogWFBh
dGhOYW1lc3BhY2UuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQQVRITmFtZXNwYWNlX0gKKyNkZWZpbmUgWFBBVEhO
YW1lc3BhY2VfSAorCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFN0cmlu
Z0ltcGw7CisKK2NsYXNzIFhQYXRoTmFtZXNwYWNlIDogcHVibGljIFdlYkNvcmU6Ok5vZGUKK3sK
K3B1YmxpYzoKKyAgICBYUGF0aE5hbWVzcGFjZShEb2N1bWVudCAqcHRyLAorICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcmIHVyaSk7CisgICAgdmly
dHVhbCB+WFBhdGhOYW1lc3BhY2UoKTsKKworICAgIHZpcnR1YWwgRG9jdW1lbnQgKm93bmVyRG9j
dW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVsZW1lbnQgKm93bmVyRWxlbWVudCgpIGNvbnN0
OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcgJnByZWZpeCgpIGNvbnN0OworICAg
IHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcgJm5hbWVzcGFjZVVSSSgpIGNvbnN0OworCisgICAgdmlydHVhbCBXZWJDb3JlOjpO
b2RlOjpOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERvY3VtZW50
ICptX293bmVyRG9jdW1lbnQ7CisgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4OworICAgIEF0b21p
Y1N0cmluZyBtX3VyaTsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRITmFtZXNwYWNlX0gKKwpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9XZWJDb3JlL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIFhQYXRoRXZhbHVhdG9ySW1wbC5jcHAgLSBDb3B5
cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
CisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1
ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2lu
Y2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNp
bmNsdWRlICJpbXBsL3V0aWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgWFBhdGg7CisgICAgCitQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gWFBhdGhFdmFs
dWF0b3I6OmNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQ
YXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9uY29k
ZSkKK3sKKyAgICBSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBleHByID0gWFBhdGhFeHByZXNzaW9u
OjpjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVyLCBleGNlcHRpb25jb2RlKTsK
KyAgICAKKyAgICByZXR1cm4gZXhwcjsKK30KKworUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+
IFhQYXRoRXZhbHVhdG9yOjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcikKK3sK
KyAgICByZXR1cm4gbmV3IFhQYXRoTlNSZXNvbHZlcihub2RlUmVzb2x2ZXIpOworfQorCitQYXNz
UmVmUHRyPFhQYXRoUmVzdWx0PiBYUGF0aEV2YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0
aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgZXhjZXB0aW9uY29kZSkKK3sKKyAgICBpZiAoIWlzVmFsaWRDb250ZXh0
Tm9kZShjb250ZXh0Tm9kZSkpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IE5PVF9TVVBQT1JU
RURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8WFBhdGhFeHBy
ZXNzaW9uPiBleHByID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciwgZXhj
ZXB0aW9uY29kZSk7CisgICAgaWYoZXhjZXB0aW9uY29kZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlKGNvbnRleHROb2RlLCB0eXBlLCByZXN1bHQs
IGV4Y2VwdGlvbmNvZGUpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS94cGF0aC9Y
UGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS94cGF0aC9Y
UGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9XZWJDb3JlL3hwYXRo
L1hQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBYUGF0aE5TUmVzb2x2ZXJJbXBsLmNwcCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUg
PHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICog
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitYUGF0aE5TUmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZlcihOb2RlICpub2Rl
KQorICAgIDogbV9ub2RlKCBub2RlICkKK3sKK30KKworU3RyaW5nIFhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgcHJlZml4KQoreworICAgIC8vIEFwcGFy
ZW50bHkgTm9kZTo6bG9va3VwTmFtZXNwYWNlVVJJIGRvZXNuJ3QgZG8gdGhpcy4KKyAgICBpZiAo
cHJlZml4ID09ICJ4bWwiKSB7CisgICAgICAgIHJldHVybiAiaHR0cDovL3d3dy53My5vcmcvWE1M
LzE5OTgvbmFtZXNwYWNlIjsKKyAgICB9CisKKyAgICByZXR1cm4gbV9ub2RlID8gbV9ub2RlLT5s
b29rdXBOYW1lc3BhY2VVUkkocHJlZml4KSA6IFN0cmluZygpOworfQorCit9CisKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL1dlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBYUGF0aEV4cHJlc3Npb25JbXBsLmggLSBDb3B5cmlnaHQgMjAwNSBG
cmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQQVRI
RVhQUkVTU0lPTklNUExfSAorI2RlZmluZSBYUEFUSEVYUFJFU1NJT05JTVBMX0gKKworI2luY2x1
ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJp
bXBsL3BhcnNlZHN0YXRlbWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUKK3sKK2NsYXNzIE5vZGU7CitjbGFzcyBTdHJpbmdJbXBsOworCitjbGFz
cyBYUGF0aE5TUmVzb2x2ZXI7CitjbGFzcyBYUGF0aFJlc3VsdDsKKworY2xhc3MgWFBhdGhFeHBy
ZXNzaW9uIDogcHVibGljIFNoYXJlZDxYUGF0aEV4cHJlc3Npb24+Cit7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSYgZWMpOworCisgICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoTm9kZSAq
Y29udGV4dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0
aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgCitwcml2YXRlOgorICAgIFhQYXRoOjpQYXJzZWRT
dGF0ZW1lbnQgbV9zdGF0ZW1lbnQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBYUEFUSEVYUFJFU1NJ
T05JTVBMX0gKKwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTg1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyOTAgQEAKKzw8PDw8PDwgLm1pbmUKKzIwMDYtMDUtMDQgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NjM4CisgICAgICAgIFN1cHBvcnQgTW96aWxsYSdzIFhQYXRoRXZh
bHVhdG9yIG9iamVjdC4KKyAgICAgICAgCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgR2VuZXJhdGUgWFBhdGggZ3JhbW1hciwgYW5kIEphdmFTY3JpcHQgd3JhcHBlcnMu
CisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBwcm9qZWN0CisgICAgICAgIAorICAgICAgICAqIGJp
bmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcDoKKyAgICAgICAgKEtKUzo6KToKKyAgICAgICAgKEtK
Uzo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgSGFuZGxlIHNldHRpbmcgWFBhdGggZXhjZXB0
aW9ucy4KKyAgICAgICAgCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAgICAg
IEp1c3QgcmV0dXJuIG5pbCBmb3Igbm93IHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBhIHdyYXBwZXIg
Zm9yIAorICAgICAgICBYUGF0aCBuYW1lc3BhY2Ugbm9kZXMuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgQWRkIFhQYXRoIHR5cGVzLiBB
bHNvIGFkZCBhICJDYW5CZUNvbnN0cnVjdGVkIiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAgICAgICAg
Zm9yIGludGVyZmFjZXMgdGhhdCBjYW4gYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkuCisgICAgICAg
IAorICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW06CisgICAgICAgIChp
bml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkpOgorICAgICAgICBJbml0aWFsaXpl
IExvZ1hQYXRoIGNoYW5uZWwuCisgICAgICAgIAorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVy
ZSk6CisgICAgICAgIFN1cHBvcnQgInhwYXRoIiB2ZXJzaW9uICIzLjAiLgorICAgICAgICAKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRv
Y3VtZW50KToKKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9k
ZSk6CisgICAgICAgIElnbm9yZSBYUGF0aCBuYW1lc3BhY2Ugbm9kZXMuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmNyZWF0ZU5TUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmV2YWx1YXRlKToKKyAgICAgICAgTmV3IGZ1bmN0aW9ucyB3aGljaCBjYWxsIGRvd24g
dG8gYSBsYXppbHkgY3JlYXRlZCBYUGF0aEV2YWx1YXRvci4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICBBZGQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorICAgICAgICAKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAgICAgICBBZGQgWFBhdGggbWV0aG9kcy4KKyAg
ICAgICAgCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Oik6
CisgICAgICAgIEFkZCBYUEFUSF9OQU1FU1BBQ0VfTk9ERSB0eXBlLgorICAgICAgICAKKyAgICAg
ICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE1hcmt1cCk6
CisgICAgICAgIElnbm9yZSBYUGF0aCBuYW1lc3BhY2Ugbm9kZXMuCisgICAgICAgIAorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgQWRkIGNvbnN0cnVjdG9ycyBmb3IgWFBh
dGhFdmFsdWF0b3IgYW5kIFhQYXRoUmVzdWx0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9y
bS9Mb2dnaW5nLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgIEFk
ZCBYUGF0aCBsb2cgY2hhbm5lbAorICAgICAgICAKKyAgICAgICAgKiB4cGF0aDogQWRkZWQuCisg
ICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoRXZhbHVhdG9yOjpjcmVhdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoRXZhbHVhdG9yOjpjcmVhdGVOU1Jlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoRXZhbHVhdG9yOjpldmFsdWF0ZSk6CisgICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3Iu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHhwYXRoL1hQYXRoRXZh
bHVhdG9yLmlkbDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb246OmNyZWF0ZUV4cHJlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uOjpldmFsdWF0ZSk6CisgICAg
ICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQ
YXRoRXhwcmVzc2lvbi5pZGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTlNSZXNvbHZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyOjpYUGF0aE5T
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1l
c3BhY2VVUkkpOgorICAgICAgICAqIHhwYXRoL1hQYXRoTlNSZXNvbHZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKiB4cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0
aC9YUGF0aE5hbWVzcGFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1l
c3BhY2U6OlhQYXRoTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNl
Ojp+WFBhdGhOYW1lc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om93
bmVyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om93bmVyRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6cHJlZml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpub2RlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aE5hbWVzcGFjZTo6bmFtZXNwYWNlVVJJKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
TmFtZXNwYWNlOjpub2RlVHlwZSk6CisgICAgICAgICogeHBhdGgvWFBhdGhOYW1lc3BhY2UuaDog
QWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXI6OkludmFsaWRhdGluZ0V2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OlhQYXRoUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0Ojp+WFBhdGhSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGhSZXN1bHQ6OmNvbnZlcnRUbyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aFJlc3VsdDo6cmVzdWx0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6bnVt
YmVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnN0cmluZ1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0Ojpib29sZWFuVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNpbmdsZU5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aFJlc3VsdDo6aW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhSZXN1bHQ6OmludmFsaWRJdGVyYXRvclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoUmVzdWx0OjpzbmFwc2hvdExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJl
c3VsdDo6aXRlcmF0ZU5leHQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBz
aG90SXRlbSk6CisgICAgICAgICogeHBhdGgvWFBhdGhSZXN1bHQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6KToKKyAgICAgICAgKiB4cGF0aC9YUGF0aFJlc3VsdC5p
ZGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRo
L2ltcGwvWFBhdGhHcmFtbWFyLnk6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwvZXhwcmVz
c2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjpWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlZhbHVlOjppc05vZGVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZh
bHVlOjppc0Jvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjppc051bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9Ob2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpWYWx1ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6
dG9OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OkV4cHJlc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246On5FeHByZXNzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RXhwcmVzc2lvbjo6YWRkU3ViRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RXhwcmVzc2lvbjo6b3B0aW1pemUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4
cHJlc3Npb246OnN1YkV4cHJDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVz
c2lvbjo6c3ViRXhwcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6aXND
b25zdGFudCk6CisgICAgICAgICogeHBhdGgvaW1wbC9leHByZXNzaW9uLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkV2YWx1YXRpb25Db250ZXh0OjpFdmFsdWF0aW9uQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6Oik6CisgICAgICAgICogeHBhdGgv
aW1wbC9mdW5jdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpJbnRl
cnZhbDo6SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkludGVydmFsOjpjb250
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6SW50ZXJ2YWw6OmFzU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6c2V0QXJndW1lbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6c2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RnVuY3Rpb246OmFyZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb246
OmFyZ0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6bmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFzdDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuTGFzdDo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RnVuUG9zaXRpb246OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkZ1blBvc2l0aW9uOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5M
b2NhbE5hbWU6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxvY2Fs
TmFtZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZXNwYWNl
VVJJOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lc3BhY2VV
Ukk6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWU6OmlzQ29u
c3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWU6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvdW50Ojpkb0V2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5Db3VudDo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuU3RyaW5nOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpGdW5Db25jYXQ6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN0
YXJ0c1dpdGg6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbnRh
aW5zOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJpbmdC
ZWZvcmU6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmlu
Z0FmdGVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJp
bmc6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN0cmluZ0xlbmd0
aDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTm9ybWFsaXplU3Bh
Y2U6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blRyYW5zbGF0ZTo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQm9vbGVhbjo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTm90Ojpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5UcnVlOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpGdW5UcnVlOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5MYW5nOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5M
YW5nOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5GYWxzZTo6ZG9F
dmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuRmFsc2U6OmlzQ29uc3RhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk51bWJlcjo6ZG9FdmFsdWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3VtOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpGdW5GbG9vcjo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RnVuQ2VpbGluZzo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVu
Um91bmQ6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uTGli
cmFyeTo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpG
dW5jdGlvbkxpYnJhcnkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uTGlicmFy
eTo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAqIHhwYXRoL2ltcGwvZnVuY3Rpb25zLmg6IEFkZGVk
LgorICAgICAgICAqIHhwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VkU3RhdGVtZW50OjpQYXJzZWRTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlZFN0YXRlbWVudDo6flBhcnNlZFN0YXRlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VkU3RhdGVtZW50OjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VkU3RhdGVtZW50OjpvcHRpbWl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VkU3RhdGVtZW50OjpldmFsdWF0ZSk6CisgICAgICAg
ICAqIHhwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRo
L2ltcGwvcGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZpbHRlcjo6
RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGaWx0ZXI6On5GaWx0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkZpbHRlcjo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjpMb2NhdGlvblBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6fkxvY2F0aW9uUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6TG9jYXRpb25QYXRoOjpvcHRpbWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6TG9jYXRpb25QYXRoOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQ
YXRoOjpQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXRoOjp+UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6UGF0aDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgICogeHBhdGgv
aW1wbC9wYXRoLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwvcHJlZGljYXRlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtYmVyOjpOdW1iZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6Ok51bWJlcjo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6TnVtYmVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpT
dHJpbmdFeHByZXNzaW9uOjpTdHJpbmdFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpTdHJpbmdFeHByZXNzaW9uOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpTdHJpbmdFeHByZXNzaW9uOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpOZWdhdGl2ZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVt
ZXJpY09wOjpOdW1lcmljT3ApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpvcE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkVxVGVzdE9wOjpFcVRlc3RPcCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkVxVGVzdE9wOjpvcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Okxv
Z2ljYWxPcDo6TG9naWNhbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6
OnNob3J0Q2lyY3VpdE9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6Omlz
Q29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6b3BOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OmRvRXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlVuaW9uOjpvcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OlVuaW9uOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNh
dGU6OlByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UHJlZGljYXRlOjp+UHJl
ZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6OmV2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6Om9wdGltaXplKToKKyAgICAgICAg
KiB4cGF0aC9pbXBsL3ByZWRpY2F0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpOdW1lcmljT3A6Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjopOgorICAgICAgICAqIHhwYXRoL2lt
cGwvc3RlcC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OmF4aXNB
c1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6U3RlcCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6flN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlN0ZXA6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0lu
QXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZVRlc3RNYXRjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpvcHRpbWl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6U3RlcDo6bmFtZXNwYWNlRnJvbU5vZGV0ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpTdGVwOjpwcmltYXJ5Tm9kZVR5cGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwv
c3RlcC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjopOgorICAgICAg
ICAqIHhwYXRoL2ltcGwvdG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6VG9rZW46OlRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6
Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpUb2tlbml6ZXI6OnNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6
Y2hhckNhdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjppc0F4aXNOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmlzTm9kZVR5cGVOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmlzT3BlcmF0b3JDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OnNraXBXUyk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjptYWtlVG9rZW5BbmRBZHZhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6Om1ha2VJbnRUb2tlbkFuZEFkdmFuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6cGVla0FoZWFkSGVscGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OnBlZWtDdXJIZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6bGV4U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpUb2tlbml6ZXI6OmxleE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
VG9rZW5pemVyOjpsZXhOQ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXpl
cjo6bGV4UU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6bmV4dFRv
a2VuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6bmV4dFRv
a2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OlRva2VuaXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjp+VG9rZW5pemVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OnJlc2V0KToKKyAgICAgICAgKHhwYXRoeXlsZXgp
OgorICAgICAgICAoaW5pdFRva2VuaXplcik6CisgICAgICAgICh4cGF0aHl5ZXJyb3IpOgorICAg
ICAgICAqIHhwYXRoL2ltcGwvdG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2lt
cGwvdXRpbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzUm9vdERvbU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjppc1ZhbGlkQ29udGV4dE5vZGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvdXRpbC5o
OiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFyaWFibGVSZWZlcmVuY2U6OlZhcmlhYmxl
UmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6
aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFyaWFibGVSZWZlcmVuY2U6
OmRvRXZhbHVhdGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuaDog
QWRkZWQuCisKKz09PT09PT0KIDIwMDYtMDUtMDQgIFRpbSBPbWVybmljayAgPHRpbW9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkBAIC0xOCw2ICszMDUs
NyBAQAogICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmxvYWRQbHVnaW4pOgogICAgICAgICBHZXQg
dGhlIHBsdWdpbidzIERPTSBlbGVtZW50IGFuZCBwYXNzIHRvIGNyZWF0ZVBsdWdpbigpLgogCis+
Pj4+Pj4+IC5yMTQxODUKIDIwMDYtMDUtMDQgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgdGltby4KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21h
Yy9XZWJDb3JlUGFnZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMv
V2ViQ29yZVBhZ2VCcmlkZ2UubW0JKHJldmlzaW9uIDE0MTg1KQorKysgV2ViQ29yZS9icmlkZ2Uv
bWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBA
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk4KICAgICBpbml0aWFsaXpl
TG9nQ2hhbm5lbChMb2dFdmVudHMpOwogICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ0VkaXRp
bmcpOwogICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ1RleHRDb252ZXJzaW9uKTsKKyAgICBp
bml0aWFsaXplTG9nQ2hhbm5lbChMb2dYUGF0aCk7CiB9CiAKIC0gKGlkKWluaXQKSW5kZXg6IFdl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCShyZXZpc2lvbiAxNDE4NSkKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAg
ICBhdHRyaWJ1dGUgTm9kZUNvbnN0cnVjdG9yIE5vZGU7CiAgICAgICAgIGF0dHJpYnV0ZSBOb2Rl
RmlsdGVyQ29uc3RydWN0b3IgTm9kZUZpbHRlcjsKICAgICAgICAgYXR0cmlidXRlIFJhbmdlQ29u
c3RydWN0b3IgUmFuZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBYUGF0aEV2YWx1YXRvckNvbnN0cnVj
dG9yIFhQYXRoRXZhbHVhdG9yOworICAgICAgICBhdHRyaWJ1dGUgWFBhdGhSZXN1bHRDb25zdHJ1
Y3RvciBYUGF0aFJlc3VsdDsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8121</attachid>
            <date>2006-05-05 01:37:06 -0700</date>
            <delta_ts>2006-05-05 07:57:34 -0700</delta_ts>
            <desc>Incorporate changes</desc>
            <filename>xpath-support-3.txt</filename>
            <type>text/plain</type>
            <size>196644</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0IEBAIEtYQ0xvZ0No
YW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRz
ID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9OwogS1hDTG9nQ2hhbm5l
bCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGggPSAgICAgICAgICAg
ICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsT2ZmIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0xv
Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRlcm4gS1hDTG9nQ2hh
bm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRzOwog
ZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENMb2dDaGFubmVsIExv
Z1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBhdGg7CiAKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxNDIwMikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlwZSBlcSAiTm9kZUxp
c3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0eXBlIGVxICJUZXh0
IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFdmFs
dWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0gZWxzaWYgKCR0eXBl
IGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAkaW1w
bEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUwMSw3ICs1MDUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xhc3NOYW1lID0gIiR7
cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
Y29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFt
ZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigkY2xhc3NOYW1lLCAk
cHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAtIEFkZCBmdW5jdGlv
bnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC04MjQsNyArODI4
LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9y
CiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiRG9j
dW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7CisgICAgICAgICAg
ICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IikgewogICAgIHJldHVybiAi
JHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NzYsNiArODgyLDEyIEBAIHN1YiBUeXBl
Q2FuRmFpbENvbnZlcnNpb24KICAgICAgIHJldHVybiAwOwogICB9IGVsc2lmICgkdHlwZSBlcSAi
RE9NV2luZG93IikgewogICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0
aEV2YWx1YXRvciIpIHsKKyAgICAgIHJldHVybiAwOworICB9IGVsc2lmICgkdHlwZSBlcSAiWFBh
dGhOU1Jlc29sdmVyIikgeworICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJY
UGF0aFJlc3VsdCIpIHsKKyAgICAgIHJldHVybiAwOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9u
J3Qga25vdyB3aGV0aGVyIGEgSlMgdmFsdWUgY2FuIGZhaWwgY29udmVyc2lvbiB0byB0eXBlICR0
eXBlLiIKICAgfQpAQCAtOTM2LDcgKzk0OCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAg
cmV0dXJuICJ0b05vZGVGaWx0ZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01X
aW5kb3ciKSB7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwotICAgIHJl
dHVybiAidG9ET01XaW5kb3coJHZhbHVlKSI7CisgICAgcmV0dXJuICJ0b0RPTVdpbmRvdygkdmFs
dWUpIjsgCisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAg
ICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBl
LmgifSA9IDE7CisgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwogICB9IGVsc2UgewogICAg
IGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9mIHR5cGUgJHR5cGUu
IgogICB9CkBAIC05NTUsNyArOTcxLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAg
ICAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJzaG9y
dCIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IKLSAgICAgICAg
ICAgJHR5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAkdHlwZSBlcSAiZmxvYXQiIG9yIAor
ICAgICAgICAgICAkdHlwZSBlcSAiZG91YmxlIikgewogICAgIHJldHVybiAianNOdW1iZXIoJHZh
bHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgbXkgJGNvbnYg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxTdHJpbmdUbyJ9
OwpAQCAtMTA0Miw2ICsxMDU5LDExIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgfSBlbHNpZiAo
JHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVl
KSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iIG9yCisgICAgICAgICAg
ICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAgICAgICR0eXBlIGVxICJYUGF0
aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CisgICAgcmV0
dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25v
dyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBKUyBWYWx1ZSI7CiAg
IH0KQEAgLTEyNDksNiArMTI3MSw3IEBAIHN1YiBjb25zdHJ1Y3RvckZvcgogICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKICAgICBteSAkcHJvdG9DbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjYW5Db25zdHJ1Y3QgPSBzaGlmdDsKICAg
ICAKIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3MgJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNjEsNyArMTI4NCwxNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
RU9GCisKKyAgICBpZiAoJGNhbkNvbnN0cnVjdCkgeworJGltcGxDb250ZW50IC49IDw8ICJFT0Yi
OworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHRvSlMo
ZXhlYywgbmV3ICRpbnRlcmZhY2VOYW1lKSk7IH0KK0VPRgorICAgIH0KKworJGltcGxDb250ZW50
IC49IDw8ICJFT0YiOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjppbmZvID0geyAiJHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yIiwgMCwgJiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yVGFibGUsIDAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCShyZXZpc2lvbiAxNDIwMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1w
bC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CkBAIC0y
OTgsNiArMjk5LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRFeGNlcHRpb24K
ICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9OwogCitzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiSU5WQUxJRF9FWFBSRVNT
SU9OX0VSUiIsCisgICAgIlRZUEVfRVJSIgorfTsKKwogdm9pZCBzZXRET01FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjKQogewogICBpZiAoZWMgPT0gMCB8fCBleGVj
LT5oYWRFeGNlcHRpb24oKSkKQEAgLTMwNyw2ICszMTMsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAgY29uc3QgY2hhciAq
IGNvbnN0ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgCiAgIGludCBu
YW1lVGFibGVTaXplOwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9mZnNldCAmJiBjb2Rl
IDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFuZ2UiOwpAQCAtMzE4
LDEyICszMjYsMjIgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAog
ICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAgICAgbmFtZVRhYmxlID0gZXZlbnRF
eGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKGV2ZW50RXhjZXB0aW9u
TmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXNbMF0pOworICB9IGVsc2UgaWYgKGNv
ZGUgPj0gWFBhdGhFeGNlcHRpb25PZmZzZXQgJiYgY29kZSA8PSBYUGF0aEV4Y2VwdGlvbk1heCkg
eworICAgICAgLy8gWFBhdGggZXhjZXB0aW9uIGNvZGVzIHN0YXJ0IHdpdGggNTEgYW5kIHdlIGRv
bid0IHdhbnQgNTEgZW1wdHkgZWxlbWVudHMgaW4gdGhlIG5hbWUgYXJyYXkKKyAgICBpbnQgbmFt
ZUluZGV4ID0gY29kZSAtIElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAgdHlwZSA9ICJET00g
WFBhdGgiOworICAgIGNvZGUgLT0gWFBhdGhFeGNlcHRpb25PZmZzZXQ7CisgICAgbmFtZVRhYmxl
ID0geHBhdGhFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHhwYXRo
RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXNbMF0pOworCisgICAg
bmFtZSA9IG5hbWVJbmRleCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVbbmFtZUluZGV4XSA6
IDA7CiAgIH0gZWxzZSB7CiAgICAgbmFtZVRhYmxlID0gZXhjZXB0aW9uTmFtZXM7CiAgICAgbmFt
ZVRhYmxlU2l6ZSA9IHNpemVvZihleGNlcHRpb25OYW1lcykgLyBzaXplb2YoZXhjZXB0aW9uTmFt
ZXNbMF0pOwogICB9CiAKLSAgY29uc3QgY2hhciogbmFtZSA9IGNvZGUgPCBuYW1lVGFibGVTaXpl
ID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKKyAgaWYgKCFuYW1lKQorICAgICAgbmFtZSA9IGNvZGUg
PCBuYW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKIAogICAvLyAxMDAgY2hhcmFj
dGVycyBpcyBhIGJpZyBlbm91Z2ggYnVmZmVyLCBiZWNhdXNlIHRoZXJlIGFyZToKICAgLy8gICAx
MyBjaGFyYWN0ZXJzIGluIHRoZSBtZXNzYWdlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlz
aW9uIDE0MjAyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjM5LDYgKzYzOSw5IEBAIHN0YXRpYyBMaXN0ZW5lck1hcCAqbGlzdGVuZXJNYXA7CiAg
ICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01Ob3RhdGlvbiBjbGFzc107CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDcmVh
dGUgYW4gWFBhdGggb2JqZWN0aXZlIEMgd3JhcHBlcgorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxvY10gX2luaXRXaXRoTm9kZTpp
bXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNDIw
MikKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3Jl
KS9odG1sIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkveHBhdGgKICMK
IAogLlBIT05ZIDogYWxsCkBAIC03Miw2ICs3MywxMCBAQCBhbGwgOiBcCiAgICAgSlNSYW5nZS5o
IFwKICAgICBKU1RleHQuaCBcCiAgICAgSlNVSUV2ZW50LmggXAorICAgIEpTWFBhdGhFdmFsdWF0
b3IuaCBcCisgICAgSlNYUGF0aEV4cHJlc3Npb24uaCBcCisgICAgSlNYUGF0aE5TUmVzb2x2ZXIu
aCBcCisgICAgSlNYUGF0aFJlc3VsdC5oIFwKICAgICBKU1doZWVsRXZlbnQuaCBcCiAgICAgSlNY
TUxIdHRwUmVxdWVzdC5sdXQuaCBcCiAgICAgSlNYTUxTZXJpYWxpemVyLmx1dC5oIFwKQEAgLTc5
LDYgKzg0LDcgQEAgYWxsIDogXAogICAgIFNWR05hbWVzLmNwcCBcCiAgICAgVXNlckFnZW50U3R5
bGVTaGVldHMuaCBcCiAgICAgWExpbmtOYW1lcy5jcHAgXAorICAgIFhQYXRoR3JhbW1hci5jcHAg
XAogICAgIGtqc19jc3MubHV0LmggXAogICAgIGtqc19kb20ubHV0LmggXAogICAgIGtqc19ldmVu
dHMubHV0LmggXApAQCAtMTMwLDYgKzEzNiwxNSBAQCBDU1NHcmFtbWFyLmNwcCA6IGNzcy9DU1NH
cmFtbWFyLnkKIAljYXQgQ1NTR3JhbW1hci5jcHAuaCBDU1NHcmFtbWFyLmhwcCA+IENTU0dyYW1t
YXIuaAogCXJtIC1mIENTU0dyYW1tYXIuY3BwLmggQ1NTR3JhbW1hci5ocHAKIAorIyBYUGF0aCBn
cmFtbWFyCisKK1hQYXRoR3JhbW1hci5jcHAgOiB4cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55CisJ
Ymlzb24gLWQgLXAgeHBhdGh5eSAkPCAtbyAkQAorCXRvdWNoIFhQYXRoR3JhbW1hci5jcHAuaAor
CXRvdWNoIFhQYXRoR3JhbW1hci5ocHAKKwljYXQgWFBhdGhHcmFtbWFyLmNwcC5oIFhQYXRoR3Jh
bW1hci5ocHAgPiBYUGF0aEdyYW1tYXIuaAorCXJtIC1mIFhQYXRoR3JhbW1hci5jcHAuaCBYUGF0
aEdyYW1tYXIuaHBwCisKICMgdXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAogVVNFUl9BR0VOVF9T
VFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVp
cmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIApAQCAtMTgzLDQgKzE5OCw0IEBAIEpTX0JJ
TkRJTkdTX1NDUklQVFMgPSBcCiAjCiAKIEpTJS5oIDogJS5pZGwgJChKU19CSU5ESU5HU19TQ1JJ
UFRTKQotCXBlcmwgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5k
aW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVk
ZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1vdXRwdXRkaXIgLiAkPAorCXBlcmwgLUkkKFdlYkNvcmUp
L2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVkZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1p
bmNsdWRlIHhwYXRoIC0tb3V0cHV0ZGlyICAuICQ8CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAx
NDIwMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDYgKzExNCwyMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIE5vZGUgYWRvcHROb2RlKGluIE5v
ZGUgc291cmNlKQogICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAg
IC8vIERPTSBMZXZlbCAzIFhQYXRoIChYUGF0aEV2YWx1YXRvciBpbnRlcmZhY2UpCisgICAgICAg
IFhQYXRoRXhwcmVzc2lvbiBjcmVhdGVFeHByZXNzaW9uKGluIERPTVN0cmluZyBleHByZXNzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aE5TUmVz
b2x2ZXIgcmVzb2x2ZXIpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAg
ICAgICBYUGF0aE5TUmVzb2x2ZXIgY3JlYXRlTlNSZXNvbHZlcihpbiBOb2RlIG5vZGVSZXNvbHZl
cik7CisgICAgICAgIAorICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShpbiBET01TdHJpbmcg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTm9kZSBjb250ZXh0
Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoTlNSZXNvbHZlciBy
ZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQgc2hvcnQg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5SZXN1
bHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAgICAvLyBDb21t
b24gZXh0ZW5zaW9ucwogCiAgICAgICAgIGJvb2xlYW4gZXhlY0NvbW1hbmQoaW4gRE9NU3RyaW5n
IGNvbW1hbmQsIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBACiAjaW5jbHVk
ZSAieG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2lu
Y2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgor
I2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCiAKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAi
WFNMVFByb2Nlc3Nvci5oIgpAQCAtNTA5LDYgKzUxMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9j
dW1lbnQ6OmltcG9ydE5vZGUoTm8KICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFX05PREU6CiAg
ICAgICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBOT1RBVElP
Tl9OT0RFOgorICAgICAgICBjYXNlIFhQQVRIX05BTUVTUEFDRV9OT0RFOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zMTExLDQgKzMxMTYsMzUgQEAgdm9pZCBEb2N1bWVudDo6Zmlu
aXNoZWRQYXJzaW5nKCkKICAgICAgICAgZi0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKK1Bhc3NS
ZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBEb2N1bWVudDo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFs
dWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFs
dWF0b3ItPmNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IERvY3VtZW50OjpjcmVhdGVOU1Jlc29sdmVyKE5v
ZGUgKm5vZGVSZXNvbHZlcikKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAg
IG1feHBhdGhFdmFsdWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJu
IG1feHBhdGhFdmFsdWF0b3ItPmNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKTsKK30KKwor
UGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gRG9jdW1lbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3IgPSBu
ZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3ItPmV2
YWx1YXRlKGV4cHJlc3Npb24sIGNvbnRleHROb2RlLCByZXNvbHZlciwgdHlwZSwgcmVzdWx0LCBl
Yyk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDE0
MjAyKQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSw5IEBAIGJvb2wgRE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUgKGNv
bnMKICAgICAgICAgICAgIHx8IGxvd2VyID09ICJ1aWV2ZW50cyIKICAgICAgICAgICAgIHx8IGxv
d2VyID09ICJ2aWV3cyIpCiAgICAgICAgIHJldHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJz
aW9uID09ICIyLjAiOworICAgIGlmIChsb3dlciA9PSAieHBhdGgiKQorICAgICAgICByZXR1cm4g
dmVyc2lvbi5pc0VtcHR5KCkgfHwgdmVyc2lvbiA9PSAiMy4wIjsKKyAgICAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgVGV4dDsKICAgICBjbGFzcyBUb2tlbml6ZXI7CiAgICAgY2xhc3Mg
VHJlZVdhbGtlcjsKKyAgICBjbGFzcyBYUGF0aEV2YWx1YXRvcjsKKyAgICBjbGFzcyBYUGF0aEV4
cHJlc3Npb247CisgICAgY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworICAgIGNsYXNzIFhQYXRoUmVz
dWx0OwogCiAjaWYgX19BUFBMRV9fCiAgICAgc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlOwpA
QCAtNTQxLDYgKzU0NSwxOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygp
OwogCisgICAgLy8gWFBhdGhFdmFsdWF0b3IgbWV0aG9kcworICAgIFBhc3NSZWZQdHI8WFBhdGhF
eHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVz
b2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBQYXNzUmVmUHRyPFhQYXRoTlNSZXNv
bHZlcj4gY3JlYXRlTlNSZXNvbHZlcihOb2RlICpub2RlUmVzb2x2ZXIpOworICAgIFBhc3NSZWZQ
dHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBjb250ZXh0Tm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJl
c3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
JiBlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiBwcm90ZWN0ZWQ6
CiAgICAgQ1NTU3R5bGVTZWxlY3RvciAqbV9zdHlsZVNlbGVjdG9yOwogICAgIEZyYW1lVmlldyAq
bV92aWV3OwpAQCAtNzM4LDYgKzc1NCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFw
PEhUTUxGb3JtRWxlbWVudCosIE5hbWVUb0lucHV0TWFwKj4gRm9ybVRvR3JvdXBNYXA7CiAgICAg
Rm9ybVRvR3JvdXBNYXAgbV9zZWxlY3RlZFJhZGlvQnV0dG9uczsKICAgICAKKyAgICBSZWZQdHI8
WFBhdGhFdmFsdWF0b3I+IG1feHBhdGhFdmFsdWF0b3I7CisgICAgCiAjaWYgU1ZHX1NVUFBPUlQK
ICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIG1fc3ZnRXh0ZW5zaW9uczsKICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAko
cmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDggQEAgcHVibGljOgogICAgICAgICBET0NVTUVOVF9OT0RFID0gOSwKICAgICAg
ICAgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTAsCiAgICAgICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05P
REUgPSAxMSwKLSAgICAgICAgTk9UQVRJT05fTk9ERSA9IDEyCisgICAgICAgIE5PVEFUSU9OX05P
REUgPSAxMiwKKyAgICAgICAgWFBBVEhfTkFNRVNQQUNFX05PREUgPSAxMwogICAgIH07CiAKICAg
ICBOb2RlKERvY3VtZW50Kik7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNDQgQEAKIAkJMTRF
ODM3OEUwOUY4NUQ0RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2
ZW50LmggKi87IH07CiAJCTE0RUMyNjdGMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUMy
NjdEMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLzsgfTsKIAkJMTRFQzI2
ODAwOUNBMDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVDMjY3RTA5Q0EwN0UwMDBFMUVFRUMg
LyogRXZlbnRUYXJnZXROb2RlLmNwcCAqLzsgfTsKKwkJMUE3NjI5ODMwQTA3NDBBMDAwOTg5RjVC
IC8qIGV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5NTkwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwICovOyB9
OworCQkxQTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NUEwQTA3NDBBMDAwOTg5
RjVCIC8qIGV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMUE3NjI5OEEwQTA3NDBBMDAwOTg5RjVCIC8q
IGZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJ
MUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjIwQTA3NDBBMDAwOTg5RjVCIC8q
IGZ1bmN0aW9ucy5oICovOyB9OworCQkxQTc2Mjk4QzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vk
c3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNzYyOTYzMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuY3BwICovOyB9
OworCQkxQTc2Mjk4RDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2NDBBMDc0MEEw
MDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggKi87IH07CisJCTFBNzYyOThFMEEwNzQwQTAw
MDk4OUY1QiAvKiBwYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLzsgfTsKKwkJ
MUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY2MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRo
LmggKi87IH07CisJCTFBNzYyOTkwMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjcwQTA3
NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi87IH07CisJCTFBNzYyOTkxMEEwNzQwQTAw
MDk4OUY1QiAvKiBwcmVkaWNhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCAqLzsg
fTsKKwkJMUE3NjI5OTIwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjkwQTA3NDBBMDAwOTg5RjVC
IC8qIHN0ZXAuY3BwICovOyB9OworCQkxQTc2Mjk5MzBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkEw
QTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLzsgfTsKKwkJMUE3NjI5OTUwQTA3NDBBMDAwOTg5
RjVCIC8qIHRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTc2Mjk2QzBBMDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLzsg
fTsKKwkJMUE3NjI5OTYwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkQwQTA3NDBBMDAwOTg5
RjVCIC8qIHRva2VuaXplci5oICovOyB9OworCQkxQTc2Mjk5NzBBMDc0MEEwMDA5ODlGNUIgLyog
dXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2Mjk2RTBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5jcHAgKi87IH07CisJCTFBNzYyOTk4MEEw
NzQwQTAwMDk4OUY1QiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTc2Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oICovOyB9Owor
CQkxQTc2Mjk5OTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzAwQTA3NDBB
MDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OUEwQTA3
NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFy
aWFibGVyZWZlcmVuY2UuaCAqLzsgfTsKKwkJMUE3NjI5OUQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQ
YXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi87
IH07CisJCTFBNzYyOTlFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzYwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi87IH07CisJCTFBNzYyOUEwMEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NzgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhw
cmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyOUExMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4
cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNzYyOTc5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLzsgfTsKKwkJ
MUE3NjI5QTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdCMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5jcHAgKi87IH07CisJCTFBNzYyOUE0MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNl
LmggKi87IH07CisJCTFBNzYyOUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5
N0QwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi87IH07CisJCTFBNzYy
OUE2MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdFMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aE5TUmVzb2x2ZXIuaCAqLzsgfTsKKwkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNzYyOTgwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgKi87IH07
CisJCTFBNzYyOUE5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5ODEwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoUmVzdWx0LmggKi87IH07CisJCTFBNzYyOUQ1MEEwNzQyNTEwMDk4OUY1QiAv
KiBYUGF0aEdyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5RDMwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgKi87
IH07CisJCTFBNzYyOUQ2MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOUQ0MEEwNzQyNTEw
MDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCAqLzsgfTsKKwkJMUE3NjJDNzMwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFs
dWF0b3IuY3BwICovOyB9OworCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2
YWx1YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE3NjJDNkMwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCAqLzsgfTsKKwkJ
MUE3NjJDNzUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZEMEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi87IH07CisJCTFBNzYyQzc2MEEwNzRG
MjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBh
dGhFeHByZXNzaW9uLmggKi87IH07CisJCTFBNzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2MkM2RjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuY3Bw
ICovOyB9OworCQkxQTc2MkM3ODBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzcw
MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oICovOyB9OworCQkxQTc2MkM3
OTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIgLyog
SlNYUGF0aFJlc3VsdC5jcHAgKi87IH07CisJCTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBK
U1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovOyB9Owog
CQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5MDA3
MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkwMDcz
NTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5o
ICovOyB9OwogCQk1NTBBMEJDRDA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkNCMDg1RjYw
NEQwMDczNTNENiAvKiBIVE1MTmFtZXMuY3BwICovOyB9OwpAQCAtMTI1Niw2ICsxMjk0LDQ5IEBA
CiAJCTE0RTgzNzhEMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0RUMyNjdEMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdldE5vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRUYXJnZXROb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0RUMyNjdFMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRhcmdl
dE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJn
ZXROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NTkwQTA3NDBB
MDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IGV4cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QTc2Mjk1QTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gZXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmdW5jdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0
YXRlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2Vk
c3RhdGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjQwQTA3
NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gcGFyc2Vkc3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NjYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcHJlZGljYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUE3NjI5NjgwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHJlZGljYXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBNzYyOTY5MEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBzdGVwLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN0ZXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUE3NjI5NkMwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2VuaXplci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdG9rZW5pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkQwQTA3NDBBMDAwOTg5RjVCIC8qIHRva2Vu
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5pemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1QiAvKiB1
dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NkYwQTA3NDBBMDAwOTg5RjVCIC8q
IHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlh
YmxlcmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB2
YXJpYWJsZXJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYy
OTcxMEEwNzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gdmFyaWFibGVyZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci55
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IFhQYXRoR3JhbW1hci55OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3NTBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhFdmFsdWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQ
YXRoRXZhbHVhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzYw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBYUGF0aEV2YWx1YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQTc2Mjk3NzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aEV2YWx1YXRvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFBNzYyOTc4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTc5MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFhQYXRoRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2
Mjk3QTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gWFBhdGhFeHByZXNzaW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aE5hbWVzcGFjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdDMEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aE5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhO
YW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5N0QwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUE3NjI5N0UwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aE5TUmVzb2x2ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aE5TUmVzb2x2ZXIu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk4MDBBMDc0MEEwMDA5ODlG
NUIgLyogWFBhdGhSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhQYXRoUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
ODEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBYUGF0aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQTc2Mjk4MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBYUGF0aFJlc3VsdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOUQzMEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoR3JhbW1hci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOUQ0MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdy
YW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoR3JhbW1hci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2QjBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aEV2YWx1YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNYUGF0aEV2YWx1YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBNzYyQzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoRXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzZEMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhw
cmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0
aEV4cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2RTBB
MDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyQzZGMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM3MDBBMDc0RjI2MDA5
ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBNzYyQzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoUmVzdWx0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhS
ZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWFBhdGhSZXN1bHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFB
IC8qIENsaXBib2FyZE1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAv
KiBDbGlwYm9hcmRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDbGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk0NzU4QzQ0MzA4QzVGMjE3MDA5
QkFGMDUgLyogS0NhbnZhc1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMjYxOSw2ICsyNzAwLDcg
QEAKIAkJCQlGNTIzRDJGMzAyREU0NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovLAogCQkJCUE4
QzBGNkRDMDg5NzAxRjEwMEJBNTExNCAvKiBXZWJDb3JlK1NWRyAqLywKIAkJCQlFMUYwNDI0MzA5
ODM5Mzg5MDA2Njk0RUEgLyogeG1sICovLAorCQkJCTFBNzYyOTU3MEEwNzQwQTAwMDk4OUY1QiAv
KiB4cGF0aCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3Vy
Y2VzICovLAogCQkJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8sCiAJ
CQkJMDg2N0Q2OUFGRTg0MDI4RkMwMkFBQzA3IC8qIEZyYW1ld29ya3MgKi8sCkBAIC0yNjYyLDYg
KzI3NDQsNTQgQEAKIAkJCXBhdGggPSBSZXNvdXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQkxQTc2Mjk1NzBBMDc0MEEwMDA5ODlGNUIgLyogeHBhdGggKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBNzYyOTU4MEEwNzQwQTAw
MDk4OUY1QiAvKiBpbXBsICovLAorCQkJCTFBNzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aEV2YWx1YXRvci5jcHAgKi8sCisJCQkJMUE3NjI5NzYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
RXZhbHVhdG9yLmggKi8sCisJCQkJMUE3NjI5NzcwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZh
bHVhdG9yLmlkbCAqLywKKwkJCQkxQTc2Mjk3ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHBy
ZXNzaW9uLmNwcCAqLywKKwkJCQkxQTc2Mjk3OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHBy
ZXNzaW9uLmggKi8sCisJCQkJMUE3NjI5N0EwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVz
c2lvbi5pZGwgKi8sCisJCQkJMUE3NjI5N0IwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNw
YWNlLmNwcCAqLywKKwkJCQkxQTc2Mjk3QzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3Bh
Y2UuaCAqLywKKwkJCQkxQTc2Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVy
LmNwcCAqLywKKwkJCQkxQTc2Mjk3RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVy
LmggKi8sCisJCQkJMUE3NjI5N0YwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5p
ZGwgKi8sCisJCQkJMUE3NjI5ODAwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCAq
LywKKwkJCQkxQTc2Mjk4MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCAqLywKKwkJ
CQkxQTc2Mjk4MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaWRsICovLAorCQkJKTsK
KwkJCXBhdGggPSB4cGF0aDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFB
NzYyOTU4MEEwNzQwQTAwMDk4OUY1QiAvKiBpbXBsICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQTc2Mjk1OTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVz
c2lvbi5jcHAgKi8sCisJCQkJMUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24u
aCAqLywKKwkJCQkxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNwcCAqLywK
KwkJCQkxQTc2Mjk2MjBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmggKi8sCisJCQkJMUE3
NjI5NjMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5jcHAgKi8sCisJCQkJMUE3
NjI5NjQwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRlbWVudC5oICovLAorCQkJCTFBNzYy
OTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCAqLywKKwkJCQkxQTc2Mjk2NjBBMDc0MEEw
MDA5ODlGNUIgLyogcGF0aC5oICovLAorCQkJCTFBNzYyOTY3MEEwNzQwQTAwMDk4OUY1QiAvKiBw
cmVkaWNhdGUuY3BwICovLAorCQkJCTFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNh
dGUuaCAqLywKKwkJCQkxQTc2Mjk2OTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5jcHAgKi8sCisJ
CQkJMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLywKKwkJCQkxQTc2Mjk2QzBB
MDc0MEEwMDA5ODlGNUIgLyogdG9rZW5pemVyLmNwcCAqLywKKwkJCQkxQTc2Mjk2RDBBMDc0MEEw
MDA5ODlGNUIgLyogdG9rZW5pemVyLmggKi8sCisJCQkJMUE3NjI5NkUwQTA3NDBBMDAwOTg5RjVC
IC8qIHV0aWwuY3BwICovLAorCQkJCTFBNzYyOTZGMEEwNzQwQTAwMDk4OUY1QiAvKiB1dGlsLmgg
Ki8sCisJCQkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNw
cCAqLywKKwkJCQkxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2Uu
aCAqLywKKwkJCQkxQTc2Mjk3MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLnkgKi8s
CisJCQkpOworCQkJcGF0aCA9IGltcGw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQk1NTk5OEE1NzA1MkI1OThGMDAxN0E2QzEgLyogQWNjZXNzaWJpbGl0eSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNzQ3LDYgKzI4NzcsMTQgQEAK
IAkJCQk2NURGMzFGMDA5RDFDQzYwMDAwQkUzMjUgLyogSlNUZXh0LmggKi8sCiAJCQkJQTg2NjI5
Q0EwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgKi8sCiAJCQkJQTg2NjI5QzkwOURB
MkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovLAorCQkJCTFBNzYyQzZCMEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCAqLywKKwkJCQkxQTc2MkM2QzBBMDc0RjI2MDA5
ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRvci5oICovLAorCQkJCTFBNzYyQzZEMEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgKi8sCisJCQkJMUE3NjJDNkUwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmggKi8sCisJCQkJMUE3NjJDNkYwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCAqLywKKwkJCQkxQTc2MkM3MDBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLywKKwkJCQkxQTc2MkM3MTBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgKi8sCisJCQkJMUE3NjJDNzIwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCAqLywKIAkJCQk2NURGMzFGMTA5RDFDQzYwMDAwQkUz
MjUgLyogSlNXaGVlbEV2ZW50LmNwcCAqLywKIAkJCQk2NURGMzFGMjA5RDFDQzYwMDAwQkUzMjUg
LyogSlNXaGVlbEV2ZW50LmggKi8sCiAJCQkJNjU2NTgxRDcwOUQxNTA4RDAwMEU2MUQ3IC8qIEpT
WE1MSHR0cFJlcXVlc3QubHV0LmggKi8sCkBAIC0yNzc2LDYgKzI5MTQsOCBAQAogCQkJCTY1NjU4
MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovLAog
CQkJCTY1NjU4MUVBMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmNwcCAqLywKIAkJCQk2
NTY1ODFFQjA5RDE1MDhEMDAwRTYxRDcgLyogWExpbmtOYW1lcy5oICovLAorCQkJCTFBNzYyOUQz
MEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovLAorCQkJCTFBNzYyOUQ0MEEw
NzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuaCAqLywKIAkJCQkxNDIwMTFCNTBBMDAzMTMz
MDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
ICJEZXJpdmVkIFNvdXJjZXMiOwpAQCAtNDg0OCw2ICs0OTg4LDI1IEBACiAJCQkJMTREQzBEMzgw
OUZFRDA3MzAwN0IwMjM1IC8qIEpTTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMEM4MjUw
OUZGMEVGNTAwNkIzNkQ5IC8qIGtqc19kb21ub2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDIw
MTFCNzBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxQTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OEQwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBh
dGguaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVk
aWNhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkzMEEwNzQwQTAwMDk4OUY1QiAvKiBz
dGVwLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5NjBBMDc0MEEwMDA5ODlGNUIgLyogdG9r
ZW5pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5ODBBMDc0MEEwMDA5ODlGNUIgLyog
dXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5RjVCIC8qIHZh
cmlhYmxlcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5RTBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUExMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
NzYyOUE0MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMUE3NjI5QTYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUE3NjI5QTkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlENjBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFt
bWFyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3NDBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aEV2YWx1YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjJDNzYwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3ODBB
MDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTFBNzYyQzdBMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTU1NjUsNiArNTcyNCwyNSBAQAogCQkJCUJDRkU4RTMyMEEwMkExRDMwMDA5RTYxRCAv
KiBXZWJDb3JlVGV4dFJlbmRlcmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREQzBEMzcwOUZF
RDA3MzAwN0IwMjM1IC8qIEpTTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIwMTFCNjBB
MDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyOTgzMEEwNzQwQTAwMDk4OUY1QiAvKiBleHByZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBNzYyOThBMEEwNzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OEMwQTA3NDBBMDAwOTg5RjVCIC8qIHBhcnNlZHN0YXRl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk4RTBBMDc0MEEwMDA5ODlGNUIgLyog
cGF0aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5MDBBMDc0MEEwMDA5ODlGNUIgLyog
cHJlZGljYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTkyMEEwNzQwQTAwMDk4OUY1
QiAvKiBzdGVwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTk1MEEwNzQwQTAwMDk4OUY1
QiAvKiB0b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTcwQTA3NDBBMDAw
OTg5RjVCIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTkwQTA3NDBBMDAw
OTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYy
OTlEMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxQTc2MjlBMDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFBNzYyOUEzMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlBNTBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUE4MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MjlENTBBMDc0
MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYy
QzczMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTFBNzYyQzc1MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxQTc2MkM3NzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5T
UmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJDNzkwQTA3NEYyNjAwOTg5RjVC
IC8qIEpTWFBhdGhSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM2QkREMUQwQTAzMUFF
QjAwNERGNEFCIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAJKHJldmlzaW9uIDE0MjAyKQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAsNyBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBz
dGFydE1hcmt1cChjb25zCiAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CiAgICAgICAg
IGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6Ok5P
VEFUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuICIiOwpJbmRleDogV2ViQ29yZS94
cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0
aE5hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNw
YWNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAy
MDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aE5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFBhdGhOYW1lc3BhY2U6OlhQYXRoTmFt
ZXNwYWNlKERvY3VtZW50ICpwdHIsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcm
IHVyaSkKKyAgICA6IE5vZGUocHRyKSwKKyAgICBtX293bmVyRG9jdW1lbnQocHRyKSwKKyAgICBt
X3ByZWZpeChwcmVmaXgpLAorICAgIG1fdXJpKHVyaSkKK3sKK30KKworWFBhdGhOYW1lc3BhY2U6
On5YUGF0aE5hbWVzcGFjZSgpCit7Cit9CisKK0RvY3VtZW50ICpYUGF0aE5hbWVzcGFjZTo6b3du
ZXJEb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXJEb2N1bWVudDsKK30KKwor
RWxlbWVudCAqWFBhdGhOYW1lc3BhY2U6Om93bmVyRWxlbWVudCgpIGNvbnN0Cit7CisgICAgLy8g
RklYTUUKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQXRvbWljU3RyaW5nICZYUGF0aE5hbWVz
cGFjZTo6cHJlZml4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVmaXg7Cit9CisKK1N0cmlu
ZyBYUGF0aE5hbWVzcGFjZTo6bm9kZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWZp
eDsKK30KKworY29uc3QgQXRvbWljU3RyaW5nICZYUGF0aE5hbWVzcGFjZTo6bmFtZXNwYWNlVVJJ
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmk7Cit9CisKK1dlYkNvcmU6Ok5vZGU6Ok5vZGVU
eXBlIFhQYXRoTmFtZXNwYWNlOjpub2RlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5vZGU6
OlhQQVRIX05BTUVTUEFDRV9OT0RFOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBh
dGhFeHByZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVz
c2lvbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBG
cmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJTdHJpbmdJ
bXBsLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNs
dWRlICJYUGF0aFJlc3VsdC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2luY2x1
ZGUgImltcGwvZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgImltcGwvdXRpbC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKyAgICAKK1Bhc3NSZWZQdHI8
WFBhdGhFeHByZXNzaW9uPiBYUGF0aEV4cHJlc3Npb246OmNyZWF0ZUV4cHJlc3Npb24oY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLCBpbnQmIGVjKQor
eworICAgIFhQYXRoRXhwcmVzc2lvbiAqZXhwciA9IG5ldyBYUGF0aEV4cHJlc3Npb247CisgICAg
CisgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5yZXNvbHZlciA9IHJlc29sdmVy
OworICAgIGlmICghZXhwci0+bV9zdGF0ZW1lbnQucGFyc2UoZXhwcmVzc2lvbi5kZXByZWNhdGVk
U3RyaW5nKCksIGVjKSkgeworICAgICAgICBkZWxldGUgZXhwcjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHJldHVybiBleHByOworfQorCitQYXNzUmVmUHRyPFhQYXRoUmVz
dWx0PiBYUGF0aEV4cHJlc3Npb246OmV2YWx1YXRlKE5vZGUgKmNvbnRleHROb2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYUGF0aFJlc3VsdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWlzVmFsaWRDb250ZXh0
Tm9kZShjb250ZXh0Tm9kZSkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE5vZGUgKmV2ZW50VGFyZ2V0ID0gY29u
dGV4dE5vZGUtPm93bmVyRG9jdW1lbnQoKSA/IAorICAgICAgICBjb250ZXh0Tm9kZS0+b3duZXJE
b2N1bWVudCgpIDogY29udGV4dE5vZGU7CisgICAgCisgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCA9
IG5ldyBYUGF0aFJlc3VsdChzdGF0aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihldmVudFRhcmdl
dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlbWVu
dC5ldmFsdWF0ZShjb250ZXh0Tm9kZSkpOworICAgIAorICAgIGlmICh0eXBlICE9IFhQYXRoUmVz
dWx0OjpBTllfVFlQRSkgeworICAgICAgICByZXN1bHQtPmNvbnZlcnRUbyh0eXBlLCBlYyk7CisK
KyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQQVRITmFtZXNwYWNlX0gKKyNkZWZpbmUgWFBB
VEhOYW1lc3BhY2VfSAorCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmlu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZQoreworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFN0
cmluZ0ltcGw7CisKK2NsYXNzIFhQYXRoTmFtZXNwYWNlIDogcHVibGljIFdlYkNvcmU6Ok5vZGUK
K3sKK3B1YmxpYzoKKyAgICBYUGF0aE5hbWVzcGFjZShEb2N1bWVudCAqcHRyLAorICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcmIHVyaSk7CisgICAg
dmlydHVhbCB+WFBhdGhOYW1lc3BhY2UoKTsKKworICAgIHZpcnR1YWwgRG9jdW1lbnQgKm93bmVy
RG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVsZW1lbnQgKm93bmVyRWxlbWVudCgpIGNv
bnN0OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcgJnByZWZpeCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcgJm5hbWVzcGFjZVVSSSgpIGNvbnN0OworCisgICAgdmlydHVhbCBXZWJDb3Jl
OjpOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERvY3Vt
ZW50ICptX293bmVyRG9jdW1lbnQ7CisgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4OworICAgIEF0
b21pY1N0cmluZyBtX3VyaTsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRITmFtZXNwYWNlX0gK
KwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4K
KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9y
LmgiCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29s
dmVyLmgiCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKworI2luY2x1ZGUgImltcGwvdXRpbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKyAgICAKK1Bhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9u
PiBYUGF0aEV2YWx1YXRvcjo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBl
eGNlcHRpb25jb2RlKQoreworICAgIHJldHVybiBYUGF0aEV4cHJlc3Npb246OmNyZWF0ZUV4cHJl
c3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGV4Y2VwdGlvbmNvZGUpOworfQorCitQYXNzUmVm
UHRyPFhQYXRoTlNSZXNvbHZlcj4gWFBhdGhFdmFsdWF0b3I6OmNyZWF0ZU5TUmVzb2x2ZXIoTm9k
ZSAqbm9kZVJlc29sdmVyKQoreworICAgIHJldHVybiBuZXcgWFBhdGhOU1Jlc29sdmVyKG5vZGVS
ZXNvbHZlcik7Cit9CisKK1Bhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IFhQYXRoRXZhbHVhdG9yOjpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqY29udGV4dE5vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyICpy
ZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBleGNlcHRpb25jb2RlKQoreworICAg
IGlmICghaXNWYWxpZENvbnRleHROb2RlKGNvbnRleHROb2RlKSkgeworICAgICAgICBleGNlcHRp
b25jb2RlID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIFJlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGV4cHIgPSBjcmVhdGVFeHByZXNzaW9uKGV4cHJl
c3Npb24sIHJlc29sdmVyLCBleGNlcHRpb25jb2RlKTsKKyAgICBpZihleGNlcHRpb25jb2RlKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGUoY29udGV4
dE5vZGUsIHR5cGUsIHJlc3VsdCwgZXhjZXB0aW9uY29kZSk7Cit9CisKK30KKwpJbmRleDogV2Vi
Q29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBh
dGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQ
UkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2lu
Y2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYUGF0aE5TUmVzb2x2ZXI6
OlhQYXRoTlNSZXNvbHZlcihOb2RlICpub2RlKQorICAgIDogbV9ub2RlKG5vZGUpCit7Cit9CisK
K1N0cmluZyBYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcm
IHByZWZpeCkKK3sKKyAgICAvLyBBcHBhcmVudGx5IE5vZGU6Omxvb2t1cE5hbWVzcGFjZVVSSSBk
b2Vzbid0IGRvIHRoaXMuCisgICAgaWYgKHByZWZpeCA9PSAieG1sIikgeworICAgICAgICByZXR1
cm4gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7CisgICAgfQorCisgICAg
cmV0dXJuIG1fbm9kZSA/IG1fbm9kZS0+bG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCkgOiBTdHJp
bmcoKTsKK30KKworfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUEFUSEVYUFJFU1NJT05JTVBMX0gKKyNkZWZp
bmUgWFBBVEhFWFBSRVNTSU9OSU1QTF9ICisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAiaW1wbC9wYXJzZWRzdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CitjbGFz
cyBOb2RlOworY2xhc3MgU3RyaW5nSW1wbDsKKworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworY2xh
c3MgWFBhdGhSZXN1bHQ7CisKK2NsYXNzIFhQYXRoRXhwcmVzc2lvbiA6IHB1YmxpYyBTaGFyZWQ8
WFBhdGhFeHByZXNzaW9uPgoreworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhQYXRo
RXhwcmVzc2lvbj4gY3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQ
YXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworICAgIFBhc3NS
ZWZQdHI8WFBhdGhSZXN1bHQ+IGV2YWx1YXRlKE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQgKnJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAg
ICAgIAorcHJpdmF0ZToKKyAgICBYUGF0aDo6UGFyc2VkU3RhdGVtZW50IG1fc3RhdGVtZW50Owor
fTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhFWFBSRVNTSU9OSU1QTF9ICisKSW5kZXg6IFdlYkNv
cmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBh
dGhSZXN1bHQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5p
ZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggeworCisgICAgaW50ZXJmYWNlIFtHZW5l
cmF0ZUNvbnN0cnVjdG9yXSBYUGF0aFJlc3VsdCB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEFOWV9UWVBFICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IE5VTUJFUl9UWVBFICAgICAgICAgICAgICAgICAgICA9IDE7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUUklOR19UWVBFICAgICAgICAgICAgICAgICAgICA9IDI7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEJPT0xFQU5fVFlQRSAgICAgICAgICAgICAg
ICAgICA9IDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUgICA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURf
Tk9ERV9JVEVSQVRPUl9UWVBFICAgICA9IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgICA9IDY7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICAgICA9IDc7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IEFOWV9VTk9SREVSRURfTk9ERV9UWVBFICAgICAgICA9IDg7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZJUlNUX09SREVSRURfTk9ERV9UWVBFICAgICAg
ICA9IDk7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0ICByZXN1
bHRUeXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlICAgICAgICAgIG51bWJl
clZhbHVlCisgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgc3RyaW5n
VmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBib29sZWFuVmFsdWUKKyAgICAg
ICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIE5vZGUgICAgICAgICAgICBzaW5nbGVOb2RlVmFsdWUKKyAgICAgICAgICAgIGdl
dHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGJvb2xlYW4gICAgICAgICBpbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgICBzbmFwc2hvdExlbmd0aAorICAgICAgICAgICAgZ2V0
dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBOb2RlIGl0
ZXJhdGVOZXh0KCkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAg
Tm9kZSBzbmFwc2hvdEl0ZW0oaW4gdW5zaWduZWQgbG9uZyBpbmRleCkKKyAgICAgICAgICAgIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0
aEV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFh
YmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor
ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBBVEhFVkFMVUFUT1Jf
SAorI2RlZmluZSBYUEFUSEVWQUxVQVRPUl9ICisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CitjbGFzcyBO
b2RlOworCitjbGFzcyBYUGF0aEV4cHJlc3Npb247CitjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7Citj
bGFzcyBYUGF0aFJlc3VsdDsKKworY29uc3QgaW50IFhQYXRoRXhjZXB0aW9uT2Zmc2V0ID0gNDAw
OworY29uc3QgaW50IFhQYXRoRXhjZXB0aW9uTWF4ID0gNDk5OyAgIAorCitlbnVtIFhQYXRoRXhj
ZXB0aW9uQ29kZSB7IElOVkFMSURfRVhQUkVTU0lPTl9FUlIgPSBYUGF0aEV4Y2VwdGlvbk9mZnNl
dCArIDUxLCBUWVBFX0VSUiB9OworCitjbGFzcyBYUGF0aEV2YWx1YXRvciA6IHB1YmxpYyBTaGFy
ZWQ8WFBhdGhFdmFsdWF0b3I+Cit7CitwdWJsaWM6CisgICAgUGFzc1JlZlB0cjxYUGF0aEV4cHJl
c3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2
ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGV4Y2VwdGlvbmNvZGUpOworICAgIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29s
dmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcik7CisgICAgUGFzc1JlZlB0
cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3VsdCAqcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZXhjZXB0aW9u
Y29kZSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBYUEFUSEVWQUxVQVRPUklNUExfSAorCkluZGV4
OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQ
YXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBS
RVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2lmbmRlZiBYUEFUSE5TUkVTT0xWRVJJTVBMX0gKKyNkZWZpbmUgWFBBVEhOU1JFU09MVkVSSU1Q
TF9ICisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZQoreworCitjbGFzcyBOb2RlOworCitjbGFzcyBYUGF0aE5TUmVz
b2x2ZXIgOiBwdWJsaWMgU2hhcmVkPFhQYXRoTlNSZXNvbHZlcj4KK3sKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFhQYXRoTlNSZXNvbHZlcihOb2RlICpub2RlKTsKKworICAgICAgICBTdHJpbmcgbG9v
a3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgcHJlZml4KTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIE5vZGUgKm1fbm9kZTsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRITlNSRVNPTFZF
UklNUExfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvZXhwcmVzc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCisj
aW5jbHVkZSA8Y21hdGg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitWYWx1ZTo6VmFsdWUoKQoreworfQorCitW
YWx1ZTo6VmFsdWUoTm9kZSAqdmFsdWUpCisgICAgOiBtX3R5cGUoTm9kZXNldCkKK3sKKyAgICBt
X25vZGVzZXQuYXBwZW5kKHZhbHVlKTsKK30KKworVmFsdWU6OlZhbHVlKGNvbnN0IE5vZGVTZXQm
IHZhbHVlKQorICAgIDogbV90eXBlKE5vZGVzZXQpCisgICAgLCBtX25vZGVzZXQodmFsdWUpCit7
Cit9CisKK1ZhbHVlOjpWYWx1ZShib29sIHZhbHVlKQorICAgIDogbV90eXBlKEJvb2xlYW4pLAor
ICAgIG1fYm9vbCh2YWx1ZSkKK3sKK30KKworVmFsdWU6OlZhbHVlKGRvdWJsZSB2YWx1ZSkKKyAg
ICA6IG1fdHlwZShOdW1iZXIpLAorICAgIG1fbnVtYmVyKHZhbHVlKQoreworfQorCitWYWx1ZTo6
VmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdmFsdWUpCisgICAgOiBtX3R5cGUoU3RyaW5n
KSwKKyAgICBtX3N0cmluZyh2YWx1ZSkKK3sKK30KKworVmFsdWU6OlR5cGUgVmFsdWU6OnR5cGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGU7Cit9CisKK2Jvb2wgVmFsdWU6OmlzTm9kZXNl
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZSA9PSBOb2Rlc2V0OworfQorCitib29sIFZh
bHVlOjppc0Jvb2xlYW4oKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGUgPT0gQm9vbGVhbjsK
K30KKworYm9vbCBWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGUg
PT0gTnVtYmVyOworfQorCitib29sIFZhbHVlOjppc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdHlwZSA9PSBTdHJpbmc7Cit9CisKK05vZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKQor
eworICAgIGlmIChtX3R5cGUgIT0gTm9kZXNldCkgeworICAgICAgICBMT0coWFBhdGgsICJDYW5u
b3QgY29udmVydCBhbnl0aGluZyB0byBhIG5vZGVzZXQuIik7CisgICAgfQorICAgIHJldHVybiBt
X25vZGVzZXQ7Cit9CisKK2NvbnN0IE5vZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKSBjb25zdAor
eworICAgIGlmIChtX3R5cGUgIT0gTm9kZXNldCkgeworICAgICAgICBMT0coWFBhdGgsICJDYW5u
b3QgY29udmVydCBhbnl0aGluZyB0byBhIG5vZGVzZXQuIik7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBtX25vZGVzZXQ7ICAgIAorfSAgICAKKworYm9vbCBWYWx1ZTo6dG9Cb29sZWFuKCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIE5vZGVzZXQ6CisgICAg
ICAgICAgICByZXR1cm4gIW1fbm9kZXNldC5pc0VtcHR5KCk7CisgICAgICAgIGNhc2UgQm9vbGVh
bjoKKyAgICAgICAgICAgIHJldHVybiBtX2Jvb2w7CisgICAgICAgIGNhc2UgTnVtYmVyOgorICAg
ICAgICAgICAgcmV0dXJuIG1fbnVtYmVyICE9IDA7CisgICAgICAgIGNhc2UgU3RyaW5nOgorICAg
ICAgICAgICAgcmV0dXJuICFtX3N0cmluZy5pc0VtcHR5KCk7CisgICAgfQorICAgIHJldHVybiBi
b29sKCk7Cit9CisKK2RvdWJsZSBWYWx1ZTo6dG9OdW1iZXIoKSBjb25zdAoreworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgTm9kZXNldDoKKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZSh0b1N0cmluZygpKS50b051bWJlcigpOworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAg
ICAgICAgIHJldHVybiBtX251bWJlcjsKKyAgICAgICAgY2FzZSBTdHJpbmc6IHsKKyAgICAgICAg
ICAgIGJvb2wgY2FuQ29udmVydDsKKyAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9IG1f
c3RyaW5nLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworCisgICAgICAgICAgICBkb3VibGUgdmFsdWUg
PSBzLnRvRG91YmxlKCZjYW5Db252ZXJ0KTsKKyAgICAgICAgICAgIGlmIChjYW5Db252ZXJ0KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTkFOOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBtX2Jvb2wgPyAxIDogMDsKKyAg
ICB9CisgICAgcmV0dXJuIGRvdWJsZSgpOworfQorCitEZXByZWNhdGVkU3RyaW5nIFZhbHVlOjp0
b1N0cmluZygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBO
b2Rlc2V0OgorICAgICAgICAgICAgaWYgKG1fbm9kZXNldC5pc0VtcHR5KCkpIAorICAgICAgICAg
ICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RyaW5nVmFsdWUobV9ub2Rlc2V0WzBdLmdldCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7Cisg
ICAgICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgICAg
ICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIGlmIChpc25hbihtX251bWJlcikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJOYU4iOworICAgICAgICAgICAgZWxzZSBpZiAobV9udW1iZXIgPT0g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIjAiOworICAgICAgICAgICAgZWxzZSBpZiAoaXNp
bmYobV9udW1iZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNpZ25iaXQobV9udW1iZXIpID09
IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiSW5maW5pdHkiOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICItSW5maW5pdHkiOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX251
bWJlcik7CisgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBtX2Jvb2wg
PyAidHJ1ZSIgOiAiZmFsc2UiOworICAgIH0KKyAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygp
OworfQorCitFdmFsdWF0aW9uQ29udGV4dCAmRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQo
KQoreworICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29udGV4dCBldmFsdWF0aW9uQ29udGV4dDsKKyAg
ICByZXR1cm4gZXZhbHVhdGlvbkNvbnRleHQ7Cit9CisKK0V4cHJlc3Npb246OkV4cHJlc3Npb24o
KQorICAgIDogbV9jb25zdGFudFZhbHVlKDApCit7Cit9CisKK0V4cHJlc3Npb246On5FeHByZXNz
aW9uKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zdWJFeHByZXNzaW9ucyk7CisgICAgCisg
ICAgZGVsZXRlIG1fY29uc3RhbnRWYWx1ZTsKK30KKworVmFsdWUgRXhwcmVzc2lvbjo6ZXZhbHVh
dGUoKSBjb25zdAoreworICAgIGlmIChtX2NvbnN0YW50VmFsdWUpIHsKKyAgICAgICAgcmV0dXJu
ICptX2NvbnN0YW50VmFsdWU7CisgICAgfQorICAgIHJldHVybiBkb0V2YWx1YXRlKCk7Cit9CisK
K3ZvaWQgRXhwcmVzc2lvbjo6YWRkU3ViRXhwcmVzc2lvbihFeHByZXNzaW9uICpleHByKQorewor
ICAgIG1fc3ViRXhwcmVzc2lvbnMuYXBwZW5kKGV4cHIpOworfQorCit2b2lkIEV4cHJlc3Npb246
Om9wdGltaXplKCkKK3sKKyAgICBib29sIGFsbFN1YkV4cHJlc3Npb25zQ29uc3RhbnQgPSB0cnVl
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N1YkV4cHJlc3Npb25zLnNp
emUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3N1YkV4cHJlc3Npb25zW2ldLT5pc0NvbnN0YW50
KCkpCisgICAgICAgICAgICBtX3N1YkV4cHJlc3Npb25zW2ldLT5vcHRpbWl6ZSgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBhbGxTdWJFeHByZXNzaW9uc0NvbnN0YW50ID0gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGFsbFN1YkV4cHJlc3Npb25zQ29uc3RhbnQpIHsKKyAgICAgICAgbV9j
b25zdGFudFZhbHVlID0gbmV3IFZhbHVlKGRvRXZhbHVhdGUoKSk7CisgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhtX3N1YkV4cHJlc3Npb25zKTsKKyAgICAgICAgbV9zdWJFeHByZXNzaW9ucy5jbGVh
cigpOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEV4cHJlc3Npb246OnN1YkV4cHJDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3ViRXhwcmVzc2lvbnMuc2l6ZSgpOworfQorCitFeHBy
ZXNzaW9uKiBFeHByZXNzaW9uOjpzdWJFeHByKHVuc2lnbmVkIGkpCit7CisgICAgQVNTRVJUKGkg
PCBzdWJFeHByQ291bnQoKSk7CisKKyAgICByZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKK30K
KworY29uc3QgRXhwcmVzc2lvbiAqRXhwcmVzc2lvbjo6c3ViRXhwcih1bnNpZ25lZCBpKSBjb25z
dAoreworICAgIEFTU0VSVChpIDwgc3ViRXhwckNvdW50KCkpOworICAgIAorICAgIHJldHVybiBt
X3N1YkV4cHJlc3Npb25zW2ldOworfQorCitib29sIEV4cHJlc3Npb246OmlzQ29uc3RhbnQoKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N1YkV4cHJlc3Npb25zLnNp
emUoKTsgaSsrKSB7CisgICAgICAgIGlmICghbV9zdWJFeHByZXNzaW9uc1tpXS0+aXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit9Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcHJlZGljYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvcHJlZGljYXRlLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInBy
ZWRpY2F0ZS5oIgorI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KworI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKwor
I2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRo
IHsKKyAgICAgICAgCitOdW1iZXI6Ok51bWJlcihkb3VibGUgdmFsdWUpCisgICAgOiBtX3ZhbHVl
KHZhbHVlKQoreworfQorCitib29sIE51bWJlcjo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1ZhbHVlIE51bWJlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFZhbHVlKG1fdmFsdWUpOworfQorCitTdHJpbmdFeHByZXNzaW9uOjpTdHJpbmdF
eHByZXNzaW9uKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlKQorICAgIDogbV92YWx1ZSh2
YWx1ZSkKK3sKK30KKworYm9vbCBTdHJpbmdFeHByZXNzaW9uOjppc0NvbnN0YW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgU3RyaW5nRXhwcmVzc2lvbjo6ZG9FdmFs
dWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKG1fdmFsdWUpOworfQorCitWYWx1ZSBO
ZWdhdGl2ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgcChzdWJFeHByKDApLT5l
dmFsdWF0ZSgpKTsKKyAgICBpZiAoIXAuaXNOdW1iZXIoKSkgeworICAgICAgICBMT0coWFBhdGgs
ICJVbmFyeSBtaW51cyBpcyB1bmRlZmluZWQgZm9yIG5vbi1udW1lcmljIHR5cGVzLiIpOworICAg
ICAgICByZXR1cm4gVmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIFZhbHVlKC1wLnRvTnVtYmVy
KCkpOworfQorCitOdW1lcmljT3A6Ok51bWVyaWNPcChpbnQgX29wQ29kZSwgRXhwcmVzc2lvbiog
bGhzLCBFeHByZXNzaW9uKiByaHMpIDoKKyAgICBvcENvZGUoX29wQ29kZSkKK3sKKyAgICBhZGRT
dWJFeHByZXNzaW9uKGxocyk7CisgICAgYWRkU3ViRXhwcmVzc2lvbihyaHMpOworfQorCitWYWx1
ZSBOdW1lcmljT3A6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVlIGxocyhzdWJFeHBy
KDApLT5ldmFsdWF0ZSgpKTsKKyAgICBWYWx1ZSByaHMoc3ViRXhwcigxKS0+ZXZhbHVhdGUoKSk7
CisgICAgCisgICAgaWYgKCFsaHMuaXNOdW1iZXIoKSB8fCAhcmhzLmlzTnVtYmVyKCkpIHsKKyAg
ICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIG5vbi1udW1lcmlj
IHR5cGVzLiIpOworICAgICAgICByZXR1cm4gVmFsdWUoKTsKKyAgICB9CisKKyAgICBkb3VibGUg
bGVmdFZhbCA9IGxocy50b051bWJlcigpLCByaWdodFZhbCA9IHJocy50b051bWJlcigpOworCisg
ICAgc3dpdGNoIChvcENvZGUpIHsKKyAgICAgICAgY2FzZSBPUF9BZGQ6CisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWUobGVmdFZhbCArIHJpZ2h0VmFsKTsKKyAgICAgICAgY2FzZSBPUF9TdWI6Cisg
ICAgICAgICAgICByZXR1cm4gVmFsdWUobGVmdFZhbCAtIHJpZ2h0VmFsKTsKKyAgICAgICAgY2Fz
ZSBPUF9NdWw6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUobGVmdFZhbCAqIHJpZ2h0VmFsKTsK
KyAgICAgICAgY2FzZSBPUF9EaXY6CisgICAgICAgICAgICBpZiAocmlnaHRWYWwgPT0gMC4wIHx8
IHJpZ2h0VmFsID09IC0wLjApCisgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlKCk7IC8vRGl2
aWRlIGJ5IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVl
KGxlZnRWYWwgLyByaWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfTW9kOgorICAgICAgICAgICAg
aWYgKHJpZ2h0VmFsID09IDAuMCB8fCByaWdodFZhbCA9PSAtMC4wKQorICAgICAgICAgICAgICAg
IHJldHVybiBWYWx1ZSgpOyAvL0RpdmlkZSBieSAwOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJldHVybiBWYWx1ZShyZW1haW5kZXIobGVmdFZhbCwgcmlnaHRWYWwpKTsKKyAg
ICAgICAgY2FzZSBPUF9HVDoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZSAobGVmdFZhbCA+IHJp
Z2h0VmFsKTsKKyAgICAgICAgY2FzZSBPUF9HRToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZSAo
bGVmdFZhbCA+PSByaWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfTFQ6CisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWUgKGxlZnRWYWwgPCByaWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfTEU6Cisg
ICAgICAgICAgICByZXR1cm4gVmFsdWUgKGxlZnRWYWwgPD0gcmlnaHRWYWwpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICByZXR1cm4gVmFsdWUoKTsK
KyAgICB9Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgTnVtZXJpY09wOjpvcE5hbWUoKSBjb25zdAor
eworICAgIHN3aXRjaCAob3BDb2RlKSB7CisgICAgICAgIGNhc2UgT1BfQWRkOgorICAgICAgICAg
ICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoImFkZGl0aW9uIik7CisgICAgICAgIGNhc2UgT1Bf
U3ViOgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoInN1YnRyYWN0aW9uIik7
CisgICAgICAgIGNhc2UgT1BfTXVsOgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJp
bmcoIm11bHRpcGxpY2F0aW9uIik7CisgICAgICAgIGNhc2UgT1BfRGl2OgorICAgICAgICAgICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoImRpdmlzaW9uIik7CisgICAgICAgIGNhc2UgT1BfTW9k
OgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoIm1vZHVsbyIpOworICAgICAg
ICBjYXNlIE9QX0dUOgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoInJlbGF0
aW9uR1QiKTsKKyAgICAgICAgY2FzZSBPUF9HRToKKyAgICAgICAgICAgIHJldHVybiBEZXByZWNh
dGVkU3RyaW5nKCJyZWxhdGlvbkdFIik7CisgICAgICAgIGNhc2UgT1BfTFQ6CisgICAgICAgICAg
ICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygicmVsYXRpb25MVCIpOworICAgICAgICBjYXNlIE9Q
X0xFOgorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoInJlbGF0aW9uTEUiKTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgICAgIHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgfQorfQorCitFcVRlc3RPcDo6RXFUZXN0T3Ao
aW50IF9vcENvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhzKSA6CisgICAgb3BD
b2RlKF9vcENvZGUpCit7CisgICAgYWRkU3ViRXhwcmVzc2lvbihsaHMpOworICAgIGFkZFN1YkV4
cHJlc3Npb24ocmhzKTsKK30KKworVmFsdWUgRXFUZXN0T3A6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIFZhbHVlIGxocyhzdWJFeHByKDApLT5ldmFsdWF0ZSgpKTsKKyAgICBWYWx1ZSByaHMo
c3ViRXhwcigxKS0+ZXZhbHVhdGUoKSk7CisKKyAgICBib29sIGVxdWFsOworICAgIGlmIChsaHMu
aXNCb29sZWFuKCkgfHwgcmhzLmlzQm9vbGVhbigpKSB7CisgICAgICAgIGVxdWFsID0gKGxocy50
b0Jvb2xlYW4oKSA9PSByaHMudG9Cb29sZWFuKCkpOworICAgIH0gZWxzZSBpZiAobGhzLmlzTnVt
YmVyKCkgfHwgcmhzLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZXF1YWwgPSAobGhzLnRvTnVtYmVy
KCkgPT0gcmhzLnRvTnVtYmVyKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVxdWFsID0gKGxo
cy50b1N0cmluZygpID09IHJocy50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBpZiAob3BDb2Rl
ID09IE9QX0VRKQorICAgICAgICByZXR1cm4gVmFsdWUoZXF1YWwpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIFZhbHVlKCFlcXVhbCk7Cit9CisKK0RlcHJlY2F0ZWRTdHJpbmcgRXFUZXN0T3A6
Om9wTmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG9wQ29kZSA9PSBPUF9FUSkKKyAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcoInJlbGF0aW9uRVEiKTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nKCJyZWxhdGlvbk5FIik7Cit9CisKK0xvZ2ljYWxPcDo6TG9n
aWNhbE9wKGludCBfb3BDb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocykgOgor
ICAgIG9wQ29kZShfb3BDb2RlKQoreworICAgIGFkZFN1YkV4cHJlc3Npb24obGhzKTsKKyAgICBh
ZGRTdWJFeHByZXNzaW9uKHJocyk7Cit9CisKK2Jvb2wgTG9naWNhbE9wOjpzaG9ydENpcmN1aXRP
bigpIGNvbnN0Cit7CisgICAgaWYgKG9wQ29kZSA9PSBPUF9BbmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsgLy9mYWxzZSBhbmQgZm9vCisgICAgZWxzZQorICAgICAgICByZXR1cm4gdHJ1ZTsgIC8v
dHJ1ZSBvciBiYXIKK30KKworYm9vbCBMb2dpY2FsT3A6OmlzQ29uc3RhbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBzdWJFeHByKDApLT5pc0NvbnN0YW50KCkgJiYKKyAgICAgICAgICAgc3ViRXhw
cigwKS0+ZXZhbHVhdGUoKS50b0Jvb2xlYW4oKSA9PSBzaG9ydENpcmN1aXRPbigpOworfQorCitE
ZXByZWNhdGVkU3RyaW5nIExvZ2ljYWxPcDo6b3BOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAob3BD
b2RlID09IE9QX0FuZCkKKyAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoImNvbmp1bmN0
aW9uIik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygiZGlzanVu
Y3Rpb24iKTsKK30KKworVmFsdWUgTG9naWNhbE9wOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAg
ICBWYWx1ZSBsaHMoc3ViRXhwcigwKS0+ZXZhbHVhdGUoKSk7CisKKyAgICAvLyBUaGlzIGlzIG5v
dCBvbmx5IGFuIG9wdGltaXphdGlvbiwgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgKKyAgICAv
LyBkaWN0YXRlcyB0aGF0IHdlIG11c3QgZG8gc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uCisgICAg
Ym9vbCBsaHNCb29sID0gbGhzLnRvQm9vbGVhbigpOworICAgIGlmIChsaHNCb29sID09IHNob3J0
Q2lyY3VpdE9uKCkpIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlKGxoc0Jvb2wpOworICAgIH0KKwor
ICAgIHJldHVybiBWYWx1ZShzdWJFeHByKDEpLT5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpKTsKK30K
KworRGVwcmVjYXRlZFN0cmluZyBVbmlvbjo6b3BOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RGVwcmVjYXRlZFN0cmluZygidW5pb24iKTsKK30KKworVmFsdWUgVW5pb246OmRvRXZhbHVhdGUo
KSBjb25zdAoreworICAgIFZhbHVlIGxocyA9IHN1YkV4cHIoMCktPmV2YWx1YXRlKCk7CisgICAg
VmFsdWUgcmhzID0gc3ViRXhwcigxKS0+ZXZhbHVhdGUoKTsKKyAgICBpZiAoIWxocy5pc05vZGVz
ZXQoKSB8fCAhcmhzLmlzTm9kZXNldCgpKSB7CisgICAgICAgIExPRyhYUGF0aCwgIlVuaW9uIG9w
ZXJhdG9yICd8JyB3b3JrcyBvbmx5IHdpdGggbm9kZXNldHMuIik7CisgICAgICAgIHJldHVybiBW
YWx1ZShOb2RlU2V0KCkpOworICAgIH0KKyAgICAKKyAgICBOb2RlU2V0IGxoc05vZGVzID0gbGhz
LnRvTm9kZVNldCgpOworICAgIE5vZGVTZXQgcmhzTm9kZXMgPSByaHMudG9Ob2RlU2V0KCk7Cisg
ICAgTm9kZVNldCByZXN1bHQgPSBsaHNOb2RlczsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUgKj4g
bm9kZXM7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJoc05vZGVzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIE5vZGUgKm5vZGUgPSByaHNOb2Rlc1tpXS5nZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghbm9kZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICBub2Rlcy5hZGQobm9kZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIFZhbHVlKHJlc3VsdCk7Cit9CisKK1ByZWRpY2F0
ZTo6UHJlZGljYXRlKEV4cHJlc3Npb24gKmV4cHIpCisgICAgOiBtX2V4cHIoZXhwcikKK3sKK30K
KworUHJlZGljYXRlOjp+UHJlZGljYXRlKCkKK3sKKyAgICBkZWxldGUgbV9leHByOworfQorCiti
b29sIFByZWRpY2F0ZTo6ZXZhbHVhdGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2V4cHIgIT0g
MCk7CisKKyAgICBWYWx1ZSByZXN1bHQobV9leHByLT5ldmFsdWF0ZSgpKTsKKworICAgIC8vIGZv
b1szXSByZWFsbHkgbWVhbnMgZm9vW3Bvc2l0aW9uKCk9M10KKyAgICBpZiAocmVzdWx0LmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgRXhwcmVzc2lvbiAqcmVhbEV4cHIgPSBuZXcgRXFUZXN0T3AoRXFU
ZXN0T3A6Ok9QX0VRLAorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25MaWJyYXJ5Ojpz
ZWxmKCkuZ2V0RnVuY3Rpb24oInBvc2l0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXcgTnVtYmVyKHJlc3VsdC50b051bWJlcigpKSk7CisgICAgICAgIHJlc3VsdCA9IHJlYWxFeHBy
LT5ldmFsdWF0ZSgpOworICAgICAgICBkZWxldGUgcmVhbEV4cHI7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdC50b0Jvb2xlYW4oKTsKK30KKwordm9pZCBQcmVkaWNhdGU6Om9wdGltaXplKCkK
K3sKKyAgICBtX2V4cHItPm9wdGltaXplKCk7Cit9CisKK30KK30KSW5kZXg6IFdlYkNvcmUveHBh
dGgvaW1wbC9wYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBwYXRoLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFBBVEhfSAorI2RlZmlu
ZSBQQVRIX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJzdGVwLmgiCisK
KyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworZXh0ZXJuIGludCB4cGF0aHl5cGFyc2Uo
KTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitj
bGFzcyBGaWx0ZXIgOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgorICAgIEZpbHRlcihF
eHByZXNzaW9uKiBleHByLCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBW
ZWN0b3I8UHJlZGljYXRlKj4oKSk7CisgICAgdmlydHVhbCB+RmlsdGVyKCk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKyAgICBFeHByZXNzaW9u
ICptX2V4cHI7CisgICAgVmVjdG9yPFByZWRpY2F0ZSAqPiBtX3ByZWRpY2F0ZXM7Cit9OworCitj
bGFzcyBMb2NhdGlvblBhdGggOiBwdWJsaWMgRXhwcmVzc2lvbgoreworZnJpZW5kIGludCA6Onhw
YXRoeXlwYXJzZSgpOworcHVibGljOgorICAgIExvY2F0aW9uUGF0aCgpOworICAgIHZpcnR1YWwg
fkxvY2F0aW9uUGF0aCgpOworCisgICAgdm9pZCBvcHRpbWl6ZSgpOworCitwcml2YXRlOgorICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgVmVjdG9yPFN0ZXAgKj4g
bV9zdGVwczsKKyAgICBib29sIG1fYWJzb2x1dGU7Cit9OworCitjbGFzcyBQYXRoIDogcHVibGlj
IEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKyAgICBQYXRoKEZpbHRlciAqZmlsdGVyLCBMb2NhdGlv
blBhdGggKnBhdGgpOworICAgIHZpcnR1YWwgflBhdGgoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKworICAgIEZpbHRlciAqbV9maWx0ZXI7Cisg
ICAgTG9jYXRpb25QYXRoICptX3BhdGg7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBQQVRIX0gK
KwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJh
YWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgInBhcnNlZHN0YXRlbWVudC5oIgorI2luY2x1ZGUgInBhdGguaCIKKworI2luY2x1ZGUgIk5v
ZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBYUGF0aCB7CisKK2V4dGVybiBFeHByZXNzaW9uICpwYXJzZVN0YXRlbWVudChj
b25zdCBTdHJpbmcmIHN0YXRlbWVudCwgaW50JiBlYyk7CisKK1BhcnNlZFN0YXRlbWVudDo6UGFy
c2VkU3RhdGVtZW50KCkKKyAgICA6IG1fZXhwcigwKQoreworfQorCitQYXJzZWRTdGF0ZW1lbnQ6
On5QYXJzZWRTdGF0ZW1lbnQoKQoreworICAgIGRlbGV0ZSBtX2V4cHI7Cit9CisKK2Jvb2wgUGFy
c2VkU3RhdGVtZW50OjpwYXJzZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgaW50JiBlYykKK3sK
KyAgICBkZWxldGUgbV9leHByOworICAgIAorICAgIG1fZXhwciA9IHBhcnNlU3RhdGVtZW50KHN0
YXRlbWVudCwgZWMpOworICAgIAorICAgIHJldHVybiAobV9leHByICE9IDApOworfQorCit2b2lk
IFBhcnNlZFN0YXRlbWVudDo6b3B0aW1pemUoKQoreworICAgIGlmICghbV9leHByKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2V4cHItPm9wdGltaXplKCk7Cit9CisKK1ZhbHVlIFBhcnNlZFN0
YXRlbWVudDo6ZXZhbHVhdGUoTm9kZSAqY29udGV4dCkgY29uc3QKK3sKKyAgICBFeHByZXNzaW9u
OjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgPSBjb250ZXh0OworICAgIHJldHVybiBtX2V4cHIt
PmV2YWx1YXRlKCk7Cit9CisKK30KK30KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJs
ZXJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxl
cmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJs
ZXJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
CisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ2YXJpYWJsZXJlZmVyZW5jZS5oIgorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIFhQYXRoIHsKKyAgICAKK1ZhcmlhYmxlUmVmZXJlbmNlOjpWYXJpYWJsZVJlZmVyZW5jZShj
b25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBtX25hbWUobmFtZSkKK3sKK30KKworYm9vbCBWYXJp
YWJsZVJlZmVyZW5jZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitWYWx1ZSBWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4qIGJpbmRpbmdzID0gJmV2YWx1YXRpb25Db250ZXh0KCku
dmFyaWFibGVCaW5kaW5nczsKKyAgICBpZiAoIWJpbmRpbmdzLT5jb250YWlucyhtX25hbWUpKSB7
CisgICAgICAgIC8vIEZJWE1FIFdoYXQgdG8gZG8gaWYgYW4gdW5rbm93biB2YXJpYWJsZSBpcyBy
ZWZlcmVuY2VkPworICAgICAgICByZXR1cm4gVmFsdWUoIiIpOworICAgIH0KKyAgICByZXR1cm4g
VmFsdWUoYmluZGluZ3MtPmdldChtX25hbWUpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisKK30K
K30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3hwYXRoL2ltcGwvZXhwcmVzc2lvbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjIgQEAK
Ky8qCisgKiBleHByZXNzaW9uLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFi
ZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAq
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIEVYUFJFU1NJT05fSAorI2RlZmluZSBF
WFBSRVNTSU9OX0gKKworI2luY2x1ZGUgInV0aWwuaCIKKworI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVj
dG9yLmg+CisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIE5vZGU7CitjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7CisKK25hbWVzcGFjZSBY
UGF0aCB7CisgICAgICAgIAorc3RydWN0IEV2YWx1YXRpb25Db250ZXh0Cit7CisgICAgRXZhbHVh
dGlvbkNvbnRleHQoKSA6IG5vZGUoMCksIHNpemUoMCksIHBvc2l0aW9uKDApLCByZXNvbHZlcigw
KSB7IH0KKworICAgIFdlYkNvcmU6Ok5vZGUgKm5vZGU7CisgICAgdW5zaWduZWQgbG9uZyBzaXpl
OworICAgIHVuc2lnbmVkIGxvbmcgcG9zaXRpb247CisgICAgSGFzaE1hcDxXZWJDb3JlOjpTdHJp
bmcsIFdlYkNvcmU6OlN0cmluZz4gdmFyaWFibGVCaW5kaW5nczsKKworICAgIC8qIFRoZSBmdW5j
dGlvbiBsaWJyYXJ5IGlzIGdsb2JhbGx5IGFjY2Vzc2libGUgdGhyb3VnaAorICAgICAqIEZ1bmN0
aW9uTGlicmFyeTo6c2VsZigpCisgICAgICovCisgICAgV2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVy
ICpyZXNvbHZlcjsKK307CisKK2NsYXNzIFZhbHVlCit7CitwdWJsaWM6CisgICAgZW51bSBUeXBl
IHsKKyAgICAgICAgTm9kZXNldCwgQm9vbGVhbiwgTnVtYmVyLCBTdHJpbmcKKyAgICB9OworCisg
ICAgVmFsdWUoKTsKKyAgICBleHBsaWNpdCBWYWx1ZShXZWJDb3JlOjpOb2RlICp2YWx1ZSk7Cisg
ICAgZXhwbGljaXQgVmFsdWUoY29uc3QgTm9kZVNldCYgdmFsdWUpOworICAgIGV4cGxpY2l0IFZh
bHVlKGJvb2wgdmFsdWUpOworICAgIGV4cGxpY2l0IFZhbHVlKGRvdWJsZSB2YWx1ZSk7CisgICAg
ZXhwbGljaXQgVmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdmFsdWUpOworCisgICAgVHlw
ZSB0eXBlKCkgY29uc3Q7CisgICAgYm9vbCBpc05vZGVzZXQoKSBjb25zdDsKKyAgICBib29sIGlz
Qm9vbGVhbigpIGNvbnN0OworICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKKyAgICBib29sIGlz
U3RyaW5nKCkgY29uc3Q7CisKKyAgICBOb2RlU2V0JiB0b05vZGVTZXQoKTsKKyAgICBjb25zdCBO
b2RlU2V0JiB0b05vZGVTZXQoKSBjb25zdDsKKyAgICAKKyAgICBib29sIHRvQm9vbGVhbigpIGNv
bnN0OworICAgIGRvdWJsZSB0b051bWJlcigpIGNvbnN0OworICAgIERlcHJlY2F0ZWRTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBOb2Rl
U2V0IG1fbm9kZXNldDsKKyAgICBib29sIG1fYm9vbDsKKyAgICBkb3VibGUgbV9udW1iZXI7Cisg
ICAgRGVwcmVjYXRlZFN0cmluZyBtX3N0cmluZzsKK307CisKK2NsYXNzIEV4cHJlc3Npb24KK3sK
K3B1YmxpYzoKKyAgICBzdGF0aWMgRXZhbHVhdGlvbkNvbnRleHQgJmV2YWx1YXRpb25Db250ZXh0
KCk7CisKKyAgICBFeHByZXNzaW9uKCk7CisgICAgdmlydHVhbCB+RXhwcmVzc2lvbigpOworICAg
IHZpcnR1YWwgVmFsdWUgZXZhbHVhdGUoKSBjb25zdDsKKworICAgIHZvaWQgYWRkU3ViRXhwcmVz
c2lvbihFeHByZXNzaW9uICpleHByKTsKKyAgICB2b2lkIG9wdGltaXplKCk7CisgICAgdmlydHVh
bCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHVuc2lnbmVkIGlu
dCBzdWJFeHByQ291bnQoKSBjb25zdDsKKyAgICBFeHByZXNzaW9uICpzdWJFeHByKHVuc2lnbmVk
IGkpOworICAgIGNvbnN0IEV4cHJlc3Npb24gKnN1YkV4cHIodW5zaWduZWQgaSkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3QgPSAwOworCisg
ICAgVmVjdG9yPEV4cHJlc3Npb24gKj4gbV9zdWJFeHByZXNzaW9uczsKKyAgICBWYWx1ZSAqbV9j
b25zdGFudFZhbHVlOworfTsKKworfQorfQorCisjZW5kaWYgLy8gRVhQUkVTU0lPTl9ICisKSW5k
ZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wcmVkaWNhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3hwYXRoL2ltcGwvcHJlZGljYXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2lt
cGwvcHJlZGljYXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogcHJl
ZGljYXRlLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIFBSRURJQ0FURV9ICisjZGVmaW5lIFBSRURJQ0FURV9ICisK
KyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBYUGF0aCB7CisgICAgICAgIAorY2xhc3MgTnVtYmVyIDogcHVibGljIEV4cHJlc3Npb24KK3sK
K3B1YmxpYzoKKyAgICBOdW1iZXIoZG91YmxlIHZhbHVlKTsKKworICAgIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OworCisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCitjbGFzcyBTdHJpbmdFeHByZXNzaW9u
IDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKyAgICBTdHJpbmdFeHByZXNzaW9uKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJnZhbHVlKTsKKworICAgIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
CisgICAgRGVwcmVjYXRlZFN0cmluZyBtX3ZhbHVlOworfTsKKworY2xhc3MgTmVnYXRpdmUgOiBw
dWJsaWMgRXhwcmVzc2lvbgoreworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVh
dGUoKSBjb25zdDsKK307CisKK2NsYXNzIEJpbmFyeUV4cHJCYXNlIDogcHVibGljIEV4cHJlc3Np
b24KK3sKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkg
Y29uc3QgPSAwOworfTsKKworY2xhc3MgTnVtZXJpY09wIDogcHVibGljIEJpbmFyeUV4cHJCYXNl
Cit7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0FkZCA9IDEsCisgICAgICAgIE9Q
X1N1YiwKKyAgICAgICAgT1BfTXVsLAorICAgICAgICBPUF9EaXYsCisgICAgICAgIE9QX01vZCwK
KyAgICAgICAgT1BfR1QsCisgICAgICAgIE9QX0xULAorICAgICAgICBPUF9HRSwKKyAgICAgICAg
T1BfTEUKKyAgICB9OworCisgICAgTnVtZXJpY09wKGludCBvcENvZGUsIEV4cHJlc3Npb24qIGxo
cywgRXhwcmVzc2lvbiogcmhzKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRT
dHJpbmcgb3BOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7CisgICAgaW50IG9wQ29kZTsKK307CisKK2NsYXNzIEVxVGVzdE9wIDogcHVibGljIEJpbmFy
eUV4cHJCYXNlCit7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0VRID0gMSwKKyAg
ICAgICAgT1BfTkUKKyAgICB9OworCisgICAgRXFUZXN0T3AoaW50IG9wQ29kZSwgRXhwcmVzc2lv
biogbGhzLCBFeHByZXNzaW9uKiByaHMpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgRGVwcmVj
YXRlZFN0cmluZyBvcE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUo
KSBjb25zdDsKKyAgICBpbnQgb3BDb2RlOworfTsKKworY2xhc3MgTG9naWNhbE9wIDogcHVibGlj
IEJpbmFyeUV4cHJCYXNlCit7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0FuZCA9
IDEsCisgICAgICAgIE9QX09yCisgICAgfTsKKworICAgIExvZ2ljYWxPcChpbnQgb3BDb2RlLCBF
eHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXND
b25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgc2hvcnRDaXJjdWl0T24oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgb3BOYW1lKCkgY29uc3Q7CisgICAg
dmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgaW50IG9wQ29kZTsKK307CisK
K2NsYXNzIFVuaW9uIDogcHVibGljIEJpbmFyeUV4cHJCYXNlCit7Citwcml2YXRlOgorICAgIHZp
cnR1YWwgRGVwcmVjYXRlZFN0cmluZyBvcE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVl
IGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIFByZWRpY2F0ZQoreworcHVibGljOgor
ICAgIFByZWRpY2F0ZShFeHByZXNzaW9uICpleHByKTsKKyAgICB+UHJlZGljYXRlKCk7CisKKyAg
ICBib29sIGV2YWx1YXRlKCkgY29uc3Q7CisKKyAgICB2b2lkIG9wdGltaXplKCk7CisKK3ByaXZh
dGU6CisgICAgUHJlZGljYXRlKGNvbnN0IFByZWRpY2F0ZSAmcmhzKTsKKyAgICBQcmVkaWNhdGUg
Jm9wZXJhdG9yPShjb25zdCBQcmVkaWNhdGUgJnJocyk7CisKKyAgICBFeHByZXNzaW9uICptX2V4
cHI7Cit9OworCit9Cit9CisjZW5kaWYgLy8gUFJFRElDQVRFX0gKKwpJbmRleDogV2ViQ29yZS94
cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBs
L2Z1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rp
b25zLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiU3RyaW5nSW1wbC5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKKyNkZWZpbmUgREVGSU5FX0ZVTkNU
SU9OX0NSRUFUT1IoQ2xhc3MpIFwKK3N0YXRpYyBGdW5jdGlvbiAqY3JlYXRlIyNDbGFzcygpIHsg
cmV0dXJuIG5ldyBDbGFzczsgfQorCitjbGFzcyBJbnRlcnZhbAoreworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBJbmYgPS0xOworCisgICAgICAgIEludGVydmFsKCk7Cisg
ICAgICAgIEludGVydmFsKGludCB2YWx1ZSk7CisgICAgICAgIEludGVydmFsKGludCBtaW4sIGlu
dCBtYXgpOworCisgICAgICAgIGJvb2wgY29udGFpbnMoaW50IHZhbHVlKSBjb25zdDsKKworICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIGFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBpbnQgbV9taW47CisgICAgICAgIGludCBtX21heDsKK307CisKK2NsYXNzIEZ1bkxh
c3QgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZh
bHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blBvc2l0aW9uIDogcHVibGlj
IEZ1bmN0aW9uCit7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1
YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Db3VudCA6IHB1YmxpYyBGdW5jdGlvbgorewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
fTsKKworY2xhc3MgRnVuTG9jYWxOYW1lIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFz
cyBGdW5OYW1lc3BhY2VVUkkgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bk5h
bWUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZh
bHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blN0cmluZyA6IHB1YmxpYyBG
dW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0
ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQ29uY2F0IDogcHVibGljIEZ1bmN0aW9uCit7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9
OworCitjbGFzcyBGdW5TdGFydHNXaXRoIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFz
cyBGdW5Db250YWlucyA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAg
IHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3Vic3Ry
aW5nQmVmb3JlIDogcHVibGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmly
dHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdWJzdHJpbmdB
ZnRlciA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwg
VmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3Vic3RyaW5nIDogcHVi
bGljIEZ1bmN0aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdHJpbmdMZW5ndGggOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUo
KSBjb25zdDsKK307CisKK2NsYXNzIEZ1bk5vcm1hbGl6ZVNwYWNlIDogcHVibGljIEZ1bmN0aW9u
Cit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7Cit9OworCitjbGFzcyBGdW5UcmFuc2xhdGUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1bkJvb2xlYW4gOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAg
ICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bk5v
dCA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFs
dWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuVHJ1ZSA6IHB1YmxpYyBGdW5j
dGlvbgoreworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBj
b25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OworfTsKKworY2xhc3MgRnVuRmFsc2UgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1bkxhbmcgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bk51bWJl
ciA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFs
dWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3VtIDogcHVibGljIEZ1bmN0
aW9uCit7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkg
Y29uc3Q7Cit9OworCitjbGFzcyBGdW5GbG9vciA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHBy
aXZhdGU6CisgICAgICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKwor
Y2xhc3MgRnVuQ2VpbGluZyA6IHB1YmxpYyBGdW5jdGlvbgoreworICAgIHByaXZhdGU6CisgICAg
ICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuUm91
bmQgOiBwdWJsaWMgRnVuY3Rpb24KK3sKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIFZh
bHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1
bkxhc3QpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Qb3NpdGlvbikKK0RFRklORV9GVU5D
VElPTl9DUkVBVE9SKEZ1bkNvdW50KQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuTG9jYWxO
YW1lKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuTmFtZXNwYWNlVVJJKQorREVGSU5FX0ZV
TkNUSU9OX0NSRUFUT1IoRnVuTmFtZSkKKworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuU3Ry
aW5nKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuQ29uY2F0KQorREVGSU5FX0ZVTkNUSU9O
X0NSRUFUT1IoRnVuU3RhcnRzV2l0aCkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkNvbnRh
aW5zKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuU3Vic3RyaW5nQmVmb3JlKQorREVGSU5F
X0ZVTkNUSU9OX0NSRUFUT1IoRnVuU3Vic3RyaW5nQWZ0ZXIpCitERUZJTkVfRlVOQ1RJT05fQ1JF
QVRPUihGdW5TdWJzdHJpbmcpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5TdHJpbmdMZW5n
dGgpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Ob3JtYWxpemVTcGFjZSkKK0RFRklORV9G
VU5DVElPTl9DUkVBVE9SKEZ1blRyYW5zbGF0ZSkKKworREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1Io
RnVuQm9vbGVhbikKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bk5vdCkKK0RFRklORV9GVU5D
VElPTl9DUkVBVE9SKEZ1blRydWUpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5GYWxzZSkK
K0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkxhbmcpCisKK0RFRklORV9GVU5DVElPTl9DUkVB
VE9SKEZ1bk51bWJlcikKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN1bSkKK0RFRklORV9G
VU5DVElPTl9DUkVBVE9SKEZ1bkZsb29yKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuQ2Vp
bGluZykKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blJvdW5kKQorCisjdW5kZWYgREVGSU5F
X0ZVTkNUSU9OX0NSRUFUT1IKKworSW50ZXJ2YWw6OkludGVydmFsKCkKKyAgICA6IG1fbWluKElu
ZiksCisgICAgbV9tYXgoSW5mKQoreworfQorCitJbnRlcnZhbDo6SW50ZXJ2YWwoaW50IHZhbHVl
KQorICAgIDogbV9taW4odmFsdWUpLAorICAgIG1fbWF4KHZhbHVlKQoreworfQorCitJbnRlcnZh
bDo6SW50ZXJ2YWwoaW50IG1pbiwgaW50IG1heCkKKyAgICA6IG1fbWluKG1pbiksCisgICAgbV9t
YXgobWF4KQoreworfQorCitib29sIEludGVydmFsOjpjb250YWlucyhpbnQgdmFsdWUpIGNvbnN0
Cit7CisgICAgaWYgKG1fbWluID09IEluZiAmJiBtX21heCA9PSBJbmYpIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbWluID09IEluZikgeworICAgICAgICByZXR1
cm4gdmFsdWUgPD0gbV9tYXg7CisgICAgfQorCisgICAgaWYgKG1fbWF4ID09IEluZikgeworICAg
ICAgICByZXR1cm4gdmFsdWUgPj0gbV9taW47CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlID49
IG1fbWluICYmIHZhbHVlIDw9IG1fbWF4OworfQorCitEZXByZWNhdGVkU3RyaW5nIEludGVydmFs
Ojphc1N0cmluZygpIGNvbnN0Cit7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gIlsiOworCisg
ICAgaWYgKG1fbWluID09IEluZikgeworICAgICAgICBzICs9ICItSW5maW5pdHkiOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHMgKz0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fbWluKTsKKyAg
ICB9CisKKyAgICBzICs9ICIuLiI7CisKKyAgICBpZiAobV9tYXggPT0gSW5mKSB7CisgICAgICAg
IHMgKz0gIkluZmluaXR5IjsKKyAgICB9IGVsc2UgeworICAgICAgICBzICs9IERlcHJlY2F0ZWRT
dHJpbmc6Om51bWJlcihtX21heCk7CisgICAgfQorCisgICAgcyArPSAiXSI7CisKKyAgICByZXR1
cm4gczsKK30KKwordm9pZCBGdW5jdGlvbjo6c2V0QXJndW1lbnRzKGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uKj4gJmFyZ3MpCit7CisgICAgVmVjdG9yPEV4cHJlc3Npb24qPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gYXJncy5lbmQoKTsKKworICAgIGZvciAoVmVjdG9yPEV4cHJlc3Npb24qPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgaXQrKykKKyAgICAgICAg
YWRkU3ViRXhwcmVzc2lvbigqaXQpOworfQorCit2b2lkIEZ1bmN0aW9uOjpzZXROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX25hbWUgPSBuYW1lOworfQorCitFeHByZXNzaW9uICpG
dW5jdGlvbjo6YXJnKGludCBpKQoreworICAgIHJldHVybiBzdWJFeHByKGkpOworfQorCitjb25z
dCBFeHByZXNzaW9uICpGdW5jdGlvbjo6YXJnKGludCBpKSBjb25zdAoreworICAgIHJldHVybiBz
dWJFeHByKGkpOworfQorCit1bnNpZ25lZCBpbnQgRnVuY3Rpb246OmFyZ0NvdW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3ViRXhwckNvdW50KCk7Cit9CisKK1N0cmluZyBGdW5jdGlvbjo6bmFt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmFtZTsKK30KKworVmFsdWUgRnVuTGFzdDo6ZG9F
dmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKGRvdWJsZShFeHByZXNzaW9uOjpl
dmFsdWF0aW9uQ29udGV4dCgpLnNpemUpKTsKK30KKworYm9vbCBGdW5MYXN0Ojppc0NvbnN0YW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1blBvc2l0aW9uOjpk
b0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoZG91YmxlKEV4cHJlc3Npb246
OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb24pKTsKK30KKworYm9vbCBGdW5Qb3NpdGlvbjo6
aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZ1bkxv
Y2FsTmFtZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitW
YWx1ZSBGdW5Mb2NhbE5hbWU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIE5vZGUgKm5vZGUg
PSAwOworICAgIGlmIChhcmdDb3VudCgpID4gMCkgeworICAgICAgICBWYWx1ZSBhID0gYXJnKDAp
LT5ldmFsdWF0ZSgpOworICAgICAgICBpZiAoYS5pc05vZGVzZXQoKSkgeworICAgICAgICAgICAg
bm9kZSA9IGEudG9Ob2RlU2V0KClbMF0uZ2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisKKyAg
ICByZXR1cm4gVmFsdWUobm9kZS0+bG9jYWxOYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKK30K
KworYm9vbCBGdW5OYW1lc3BhY2VVUkk6OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworVmFsdWUgRnVuTmFtZXNwYWNlVVJJOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICBOb2RlICpub2RlID0gMDsKKyAgICBpZiAoYXJnQ291bnQoKSA+IDApIHsKKyAgICAg
ICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAgICAgICAgaWYgKGEuaXNOb2Rlc2V0
KCkpIHsKKyAgICAgICAgICAgIG5vZGUgPSBhLnRvTm9kZVNldCgpWzBdLmdldCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBldmFsdWF0aW9u
Q29udGV4dCgpLm5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIFZhbHVlKG5vZGUtPm5hbWVzcGFj
ZVVSSSgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisKK2Jvb2wgRnVuTmFtZTo6aXNDb25zdGFu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWYWx1ZSBGdW5OYW1lOjpkb0V2
YWx1YXRlKCkgY29uc3QKK3sKKyAgICBOb2RlICpub2RlID0gMDsKKyAgICBpZiAoYXJnQ291bnQo
KSA+IDApIHsKKyAgICAgICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAgICAgICAg
aWYgKGEuaXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgICAgIG5vZGUgPSBhLnRvTm9kZVNldCgpWzBd
LmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5v
ZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGU7CisgICAgfQorCisgICAgRGVwcmVjYXRlZFN0
cmluZyBzID0gbm9kZS0+bmFtZXNwYWNlVVJJKCkuZGVwcmVjYXRlZFN0cmluZygpOworICAgIHMg
Kz0gIjoiOworICAgIHMgKz0gbm9kZS0+bG9jYWxOYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpOwor
CisgICAgcmV0dXJuIFZhbHVlKHMpOworfQorCitWYWx1ZSBGdW5Db3VudDo6ZG9FdmFsdWF0ZSgp
IGNvbnN0Cit7CisgICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAgICAKKyAgICBp
ZiAoIWEuaXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiY291bnQoKSBleHBlY3Rz
IDxub2Rlc2V0PlxuIik7CisKKyAgICAgICAgcmV0dXJuIFZhbHVlKDAuMCk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBWYWx1ZShkb3VibGUoYS50b05vZGVTZXQoKS5zaXplKCkpKTsKK30KKwor
Ym9vbCBGdW5Db3VudDo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitWYWx1ZSBGdW5TdHJpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmIChhcmdD
b3VudCgpID09IDApIHsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gVmFsdWUoRXhwcmVz
c2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlKS50b1N0cmluZygpOworICAgICAgICByZXR1
cm4gVmFsdWUocyk7CisgICAgfQorICAgIHJldHVybiBWYWx1ZShhcmcoMCktPmV2YWx1YXRlKCku
dG9TdHJpbmcoKSk7Cit9CisKK1ZhbHVlIEZ1bkNvbmNhdDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisgICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBhcmdDb3VudCgpOyArK2kpIHsKKyAgICAgICAgc3RyLmFwcGVuZChhcmcoaSktPmV2YWx1
YXRlKCkudG9TdHJpbmcoKSk7CisgICAgfQorICAgIHJldHVybiBWYWx1ZShEZXByZWNhdGVkU3Ry
aW5nKHN0cikpOworfQorCitWYWx1ZSBGdW5TdGFydHNXaXRoOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMxID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5n
KCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBzMiA9IGFyZygxKS0+ZXZhbHVhdGUoKS50b1N0cmlu
ZygpOworCisgICAgaWYgKHMyLmlzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gVmFsdWUodHJ1
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIFZhbHVlKHMxLnN0YXJ0c1dpdGgoczIpKTsKK30KKwor
VmFsdWUgRnVuQ29udGFpbnM6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIERlcHJlY2F0ZWRT
dHJpbmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBEZXByZWNhdGVk
U3RyaW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisKKyAgICBpZiAoczIu
aXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBWYWx1ZSh0cnVlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gVmFsdWUoczEuY29udGFpbnMoczIpICE9IDApOworfQorCitWYWx1ZSBGdW5TdWJzdHJp
bmdCZWZvcmU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgczEg
PSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMy
ID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisKKyAgICBpZiAoczIuaXNFbXB0eSgp
KSB7CisgICAgICAgIHJldHVybiBWYWx1ZSgiIik7CisgICAgfQorICAgIGludCBpID0gczEuZmlu
ZChzMik7CisKKyAgICBpZiAoaSA9PSAtMSkgeworICAgICAgICByZXR1cm4gVmFsdWUoIiIpOwor
ICAgIH0KKworICAgIHJldHVybiBWYWx1ZShEZXByZWNhdGVkU3RyaW5nKHMxLmxlZnQoaSkpKTsK
K30KKworVmFsdWUgRnVuU3Vic3RyaW5nQWZ0ZXI6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IERlcHJlY2F0ZWRTdHJpbmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAg
ICBEZXByZWNhdGVkU3RyaW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisK
KyAgICBpZiAoczIuaXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBWYWx1ZShzMik7CisgICAg
fQorCisgICAgaW50IGkgPSBzMS5maW5kKHMyKTsKKyAgICBpZiAoaSA9PSAtMSkgeworICAgICAg
ICByZXR1cm4gVmFsdWUoIiIpOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShEZXByZWNhdGVk
U3RyaW5nKHMxLm1pZChpICsgMSkpKTsKK30KKworVmFsdWUgRnVuU3Vic3RyaW5nOjpkb0V2YWx1
YXRlKCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBhcmcoMCktPmV2YWx1YXRl
KCkudG9TdHJpbmcoKTsKKyAgICBsb25nIHBvcyA9IGxvbmcocm91bmQoYXJnKDEpLT5ldmFsdWF0
ZSgpLnRvTnVtYmVyKCkpKTsKKyAgICBib29sIGhhdmVMZW5ndGggPSBhcmdDb3VudCgpID09IDM7
CisgICAgbG9uZyBsZW4gPSAtMTsKKyAgICBpZiAoaGF2ZUxlbmd0aCkKKyAgICAgICAgbGVuID0g
bG9uZyhyb3VuZChhcmcoMiktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpOworCisgICAgaWYgKHBv
cyA+IGxvbmcocy5sZW5ndGgoKSkpIAorICAgICAgICByZXR1cm4gVmFsdWUoIiIpOworCisgICAg
aWYgKGhhdmVMZW5ndGggJiYgcG9zIDwgMSkgeworICAgICAgICBsZW4gLT0gMSAtIHBvczsKKyAg
ICAgICAgcG9zID0gMTsKKyAgICAgICAgaWYgKGxlbiA8IDEpIHsKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZSgiIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gVmFsdWUoRGVwcmVj
YXRlZFN0cmluZyhzLm1pZChwb3MgLSAxLCBsZW4pKSk7Cit9CisKK1ZhbHVlIEZ1blN0cmluZ0xl
bmd0aDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKGFyZ0NvdW50KCkgPT0gMCkgewor
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBWYWx1ZShFeHByZXNzaW9uOjpldmFsdWF0aW9u
Q29udGV4dCgpLm5vZGUpLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBWYWx1ZShkb3VibGUo
cy5sZW5ndGgoKSkpOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShkb3VibGUoYXJnKDApLT5l
dmFsdWF0ZSgpLnRvU3RyaW5nKCkubGVuZ3RoKCkpKTsKK30KKworVmFsdWUgRnVuTm9ybWFsaXpl
U3BhY2U6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmIChhcmdDb3VudCgpID09IDApIHsK
KyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzID0gVmFsdWUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlv
bkNvbnRleHQoKS5ub2RlKS50b1N0cmluZygpOworICAgICAgICByZXR1cm4gVmFsdWUoRGVwcmVj
YXRlZFN0cmluZyhzLnNpbXBsaWZ5V2hpdGVTcGFjZSgpKSk7CisgICAgfQorCisgICAgRGVwcmVj
YXRlZFN0cmluZyBzID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgcyA9IHMu
c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CisgICAgcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRTdHJpbmco
cykpOworfQorCitWYWx1ZSBGdW5UcmFuc2xhdGU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IERlcHJlY2F0ZWRTdHJpbmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAg
ICBEZXByZWNhdGVkU3RyaW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7Cisg
ICAgRGVwcmVjYXRlZFN0cmluZyBzMyA9IGFyZygyKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOwor
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3U3RyaW5nOworCisgICAgZm9yICh1bnNpZ25lZCBpMSA9
IDA7IGkxIDwgczEubGVuZ3RoKCk7ICsraTEpIHsKKyAgICAgICAgUUNoYXIgY2ggPSBzMVtpMV07
CisgICAgICAgIGludCBpMiA9IHMyLmZpbmQoY2gpOworICAgICAgICAKKyAgICAgICAgaWYgKGky
ID09IC0xKSAKKyAgICAgICAgICAgIG5ld1N0cmluZyArPSBjaDsKKyAgICAgICAgZWxzZSBpZiAo
KHVuc2lnbmVkKWkyIDwgczMubGVuZ3RoKCkpCisgICAgICAgICAgICBuZXdTdHJpbmcgKz0gczNb
IGkyIF07CisgICAgfQorCisgICAgcmV0dXJuIFZhbHVlKERlcHJlY2F0ZWRTdHJpbmcobmV3U3Ry
aW5nKSk7Cit9CisKK1ZhbHVlIEZ1bkJvb2xlYW46OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IHJldHVybiBWYWx1ZShhcmcoMCktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkpOworfQorCitWYWx1
ZSBGdW5Ob3Q6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1ZSghYXJnKDAp
LT5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpKTsKK30KKworVmFsdWUgRnVuVHJ1ZTo6ZG9FdmFsdWF0
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKHRydWUpOworfQorCitib29sIEZ1blRydWU6
OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitWYWx1ZSBGdW5M
YW5nOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIGxhbmcgPSBh
cmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIFJlZlB0cjxOb2RlPiBsYW5nTm9k
ZSA9IDA7CisgICAgTm9kZSAqbm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKworICAg
IFN0cmluZyB4bXMoInhtcyIpOworICAgIFN0cmluZyB4bXNuc1VSSSA9IG5vZGUtPmxvb2t1cE5h
bWVzcGFjZVVSSSh4bXMpOworCisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgTmFtZWRBdHRy
TWFwICphdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgU3RyaW5nIGwoImxhbmci
KTsKKyAgICAgICAgbGFuZ05vZGUgPSBhdHRycy0+Z2V0TmFtZWRJdGVtTlMoeG1zbnNVUkksIGwp
OworICAgICAgICBpZiAobGFuZ05vZGUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgfQorCisgICAgaWYgKCFs
YW5nTm9kZSkgeworICAgICAgICByZXR1cm4gVmFsdWUoZmFsc2UpOworICAgIH0KKworICAgIERl
cHJlY2F0ZWRTdHJpbmcgbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlLT5ub2RlVmFsdWUoKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CisKKyAgICAvLyBleHRyYWN0ICdlbicgb3V0IG9mICdlbi11cycKKyAg
ICBsYW5nTm9kZVZhbHVlID0gbGFuZ05vZGVWYWx1ZS5sZWZ0KGxhbmdOb2RlVmFsdWUuZmluZCgn
LScpKTsKKworICAgIHJldHVybiBWYWx1ZShsYW5nTm9kZVZhbHVlLmxvd2VyKCkgPT0gbGFuZy5s
b3dlcigpKTsKK30KKworYm9vbCBGdW5MYW5nOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1bkZhbHNlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gVmFsdWUoZmFsc2UpOworfQorCitib29sIEZ1bkZhbHNlOjppc0NvbnN0YW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgRnVuTnVtYmVyOjpkb0V2
YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoYXJnKDApLT5ldmFsdWF0ZSgpLnRv
TnVtYmVyKCkpOworfQorCitWYWx1ZSBGdW5TdW06OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7CisgICAgaWYgKCFhLmlzTm9kZXNldCgpKSB7
CisgICAgICAgIExPRyhYUGF0aCwgInN1bSgpIGV4cGVjdHMgPG5vZGVzZXQ+XG4iKTsKKyAgICAg
ICAgcmV0dXJuIFZhbHVlKDAuMCk7CisgICAgfQorCisgICAgZG91YmxlIHN1bSA9IDAuMDsKKyAg
ICBjb25zdCBOb2RlU2V0IG5vZGVzID0gYS50b05vZGVTZXQoKTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIHN1bSArPSBWYWx1
ZShzdHJpbmdWYWx1ZShub2Rlc1tpXS5nZXQoKSkuZGVwcmVjYXRlZFN0cmluZygpKS50b051bWJl
cigpOworICAgIAorICAgIHJldHVybiBWYWx1ZShzdW0pOworfQorCitWYWx1ZSBGdW5GbG9vcjo6
ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgY29uc3QgZG91YmxlIG51bSA9IGFyZygwKS0+ZXZh
bHVhdGUoKS50b051bWJlcigpOworCisgICAgaWYgKGlzbmFuKG51bSkgfHwgaXNpbmYobnVtKSkg
eworICAgICAgICByZXR1cm4gVmFsdWUobnVtKTsKKyAgICB9CisKKyAgICByZXR1cm4gVmFsdWUo
Zmxvb3IobnVtKSk7Cit9CisKK1ZhbHVlIEZ1bkNlaWxpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIGNvbnN0IGRvdWJsZSBudW0gPSBhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKTsK
KworICAgIGlmIChpc25hbihudW0pIHx8IGlzaW5mKG51bSkpIAorICAgICAgICByZXR1cm4gVmFs
dWUobnVtKTsKKworICAgIHJldHVybiBWYWx1ZShjZWlsKG51bSkpOworfQorCitWYWx1ZSBGdW5S
b3VuZDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKGRvdWJsZShyb3Vu
ZChhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpKTsKK30KKworc3RydWN0IEZ1bmN0aW9u
TGlicmFyeTo6RnVuY3Rpb25SZWMKK3sKKyAgICB0eXBlZGVmIEZ1bmN0aW9uICooKkZhY3RvcnlG
bikoKTsKKworICAgIEZhY3RvcnlGbiBmYWN0b3J5Rm47CisgICAgSW50ZXJ2YWwgYXJnczsKK307
CisKK3N0cnVjdCBGdW5jdGlvbk1hcHBpbmcKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAg
IEZ1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMgZnVuY3Rpb247Cit9OworCitGdW5jdGlvbkxp
YnJhcnkgJkZ1bmN0aW9uTGlicmFyeTo6c2VsZigpCit7CisgICAgc3RhdGljIEZ1bmN0aW9uTGli
cmFyeSBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK0Z1bmN0aW9uTGlicmFy
eTo6RnVuY3Rpb25MaWJyYXJ5KCkKK3sKKyAgICBzdGF0aWMgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0
aW9uc1tdID0geworICAgIHsgImxhc3QiLCB7ICZjcmVhdGVGdW5MYXN0LCAwIH0gfSwKKyAgICB7
ICJsYXN0IiwgeyAmY3JlYXRlRnVuTGFzdCwgMCB9IH0sCisgICAgeyAicG9zaXRpb24iLCB7ICZj
cmVhdGVGdW5Qb3NpdGlvbiwgMCB9IH0sCisgICAgeyAiY291bnQiLCB7ICZjcmVhdGVGdW5Db3Vu
dCwgMSB9IH0sCisgICAgeyAic3VtIiwgeyAmY3JlYXRlRnVuU3VtLCAxIH0gfSwKKyAgICB7ICJs
b2NhbC1uYW1lIiwgeyAmY3JlYXRlRnVuTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgeyAibmFtZXNwYWNlLXVyaSIsIHsgJmNyZWF0ZUZ1bk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwo
MCwgMSkgfSB9LAorICAgIHsgIm5hbWUiLCB7ICZjcmVhdGVGdW5OYW1lLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCisgICAgeyAic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3RyaW5nLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCisgICAgeyAiY29uY2F0IiwgeyAmY3JlYXRlRnVuQ29uY2F0LCBJbnRlcnZhbCgyLCBJ
bnRlcnZhbDo6SW5mKSB9IH0sCisgICAgeyAic3RhcnRzLXdpdGgiLCB7ICZjcmVhdGVGdW5TdGFy
dHNXaXRoLCAyIH0gfSwKKyAgICB7ICJjb250YWlucyIsIHsgJmNyZWF0ZUZ1bkNvbnRhaW5zLCAy
IH0gfSwKKyAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5nQmVm
b3JlLCAyIH0gfSwKKyAgICB7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7ICZjcmVhdGVGdW5TdWJzdHJp
bmdBZnRlciwgMiB9IH0sCisgICAgeyAic3Vic3RyaW5nIiwgeyAmY3JlYXRlRnVuU3Vic3RyaW5n
LCBJbnRlcnZhbCgyLCAzKSB9IH0sCisgICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgJmNyZWF0ZUZ1
blN0cmluZ0xlbmd0aCwgMSB9IH0sCisgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyAmY3JlYXRl
RnVuTm9ybWFsaXplU3BhY2UsIDEgfSB9LAorICAgIHsgInRyYW5zbGF0ZSIsIHsgJmNyZWF0ZUZ1
blRyYW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIAorICAgIHsgImJvb2xlYW4iLCB7ICZjcmVhdGVG
dW5Cb29sZWFuLCAxIH0gfSwKKyAgICB7ICJub3QiLCB7ICZjcmVhdGVGdW5Ob3QsIDEgfSB9LAor
ICAgIHsgInRydWUiLCB7ICZjcmVhdGVGdW5UcnVlLCAwIH0gfSwKKyAgICB7ICJmYWxzZSIsIHsg
JmNyZWF0ZUZ1bkZhbHNlLCAwIH0gfSwKKyAgICB7ICJsYW5nIiwgeyAmY3JlYXRlRnVuTGFuZywg
MSB9IH0sCisgICAgICAgIAorICAgIHsgIm51bWJlciIsIHsgJmNyZWF0ZUZ1bk51bWJlciwgMSB9
IH0sCisgICAgeyAiZmxvb3IiLCB7ICZjcmVhdGVGdW5GbG9vciwgMSB9IH0sCisgICAgeyAiY2Vp
bGluZyIsIHsgJmNyZWF0ZUZ1bkNlaWxpbmcsIDEgfSB9LAorICAgIHsgInJvdW5kIiwgeyAmY3Jl
YXRlRnVuUm91bmQsIDEgfSB9CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IG51bUZ1bmN0aW9ucyA9IHNpemVvZihmdW5jdGlvbnMpIC8gc2l6ZW9mKGZ1bmN0aW9uc1sgMCBd
KTsKKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZ1bmN0aW9uczsg
KytpKSB7CisgICAgICAgIG1fZnVuY3Rpb25EaWN0LnNldChmdW5jdGlvbnNbaV0ubmFtZSwgZnVu
Y3Rpb25zW2ldLmZ1bmN0aW9uKTsKKyAgICB9Cit9CisKK0Z1bmN0aW9uICpGdW5jdGlvbkxpYnJh
cnk6OmdldEZ1bmN0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
Kj4gJmFyZ3MpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Z1bmN0aW9uRGljdC5jb250YWlucyhuYW1l
KSkgeworICAgICAgICBMT0coWFBhdGgsICJGdW5jdGlvbiAnJXMnIG5vdCBzdXBwb3J0ZWQgYnkg
dGhpcyBpbXBsZW1lbnRhdGlvbi5cbiIsIG5hbWUpOworICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJuIGEgZHVtbXkgZnVuY3Rpb24gaW5zdGVhZCBvZiAwLgorICAgICAgICBGdW5jdGlvbiAqZnVu
Y1RydWUgPSBtX2Z1bmN0aW9uRGljdC5nZXQoInRydWUiKS5mYWN0b3J5Rm4oKTsKKyAgICAgICAg
ZnVuY1RydWUtPnNldE5hbWUoInRydWUiKTsKKyAgICAgICAgcmV0dXJuIGZ1bmNUcnVlOworICAg
IH0KKworICAgIEZ1bmN0aW9uUmVjIGZ1bmN0aW9uUmVjID0gbV9mdW5jdGlvbkRpY3QuZ2V0KG5h
bWUpOworICAgIGlmICghZnVuY3Rpb25SZWMuYXJncy5jb250YWlucyhhcmdzLnNpemUoKSkpIHsK
KyAgICAgICAgTE9HKFhQYXRoLCAiRnVuY3Rpb24gJyVzJyByZXF1aXJlcyAlZCBhcmd1bWVudHMs
IGJ1dCAlZCBnaXZlbi5cbiIsIG5hbWUsIGZ1bmN0aW9uUmVjLmFyZ3MuYXNTdHJpbmcoKS5hc2Np
aSgpLCBhcmdzLnNpemUoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZ1bmN0
aW9uICpmdW5jdGlvbiA9IGZ1bmN0aW9uUmVjLmZhY3RvcnlGbigpOworICAgIGZ1bmN0aW9uLT5z
ZXRBcmd1bWVudHMoYXJncyk7CisgICAgZnVuY3Rpb24tPnNldE5hbWUobmFtZSk7CisgICAgCisg
ICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCit9Cit9CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
cGFyc2Vkc3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNl
ZHN0YXRlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlZHN0
YXRlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogcGFyc2Vkc3Rh
dGVtZW50LmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIFBBUlNFRFNUQVRFTUVOVF9ICisjZGVmaW5lIFBBUlNFRFNU
QVRFTUVOVF9ICisKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOworICAgIAorbmFtZXNwYWNlIFhQ
YXRoIHsKKyAgICAgICAgCitjbGFzcyBFeHByZXNzaW9uOworY2xhc3MgVmFsdWU7CisKK2NsYXNz
IFBhcnNlZFN0YXRlbWVudAoreworcHVibGljOgorICAgIFBhcnNlZFN0YXRlbWVudCgpOworICAg
IH5QYXJzZWRTdGF0ZW1lbnQoKTsKKworICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiBzdGF0
ZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworICAgIHZvaWQgb3B0aW1pemUoKTsKKworICAg
IFZhbHVlIGV2YWx1YXRlKE5vZGUgKmNvbnRleHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIEV4
cHJlc3Npb24gKm1fZXhwcjsKK307CisKK30KK30KKyNlbmRpZiAvLyBQQVJTRURTVEFURU1FTlRf
SAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogdmFyaWFibGVyZWZlcmVuY2UuaCAtIENvcHlyaWdo
dCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQg
QU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisg
KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaWZuZGVmIFZBUklBQkxFUkVGRVJFTkNFX0gKKyNkZWZpbmUgVkFSSUFCTEVSRUZF
UkVOQ0VfSAorCisjaW5jbHVkZSAiZXhwcmVzc2lvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgWFBhdGggeworICAgIAorY2xhc3MgVmFyaWFibGVSZWZlcmVuY2UgOiBwdWJs
aWMgRXhwcmVzc2lvbgoreworcHVibGljOgorICAgIFZhcmlhYmxlUmVmZXJlbmNlKGNvbnN0IFN0
cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgU3Ry
aW5nIG1fbmFtZTsKK307CisKK30KK30KKworI2VuZGlmIC8vIFZBUklBQkxFUkVGRVJFTkNFX0gK
KwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94cGF0aC9pbXBsL3Rva2VuaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3hwYXRoL2ltcGwvdG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwNSBNYWtzaW0gT3Jsb3ZpY2ggPG1ha3NpbUBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ0b2tlbml6ZXIu
aCIKKworI2luY2x1ZGUgIlhQYXRoR3JhbW1hci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgWFBhdGggeworCitzdHJ1Y3QgVG9rZW4KK3sKKyAgICBpbnQgICAgIHR5cGU7Cisg
ICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZTsKKyAgICBpbnQgICAgIGludFZhbHVlOyAvLzAgaWYg
bm90IHNldAorICAgIAorICAgIFRva2VuKGludCBfdHlwZSk6IHR5cGUoX3R5cGUpLCBpbnRWYWx1
ZSgwKSB7fQorICAgIFRva2VuKERlcHJlY2F0ZWRTdHJpbmcgX3ZhbHVlKTogdHlwZShFUlJPUisx
KSwgdmFsdWUoX3ZhbHVlKSxpbnRWYWx1ZSgwKSB7fQorICAgIFRva2VuKGludCBfdHlwZSwgRGVw
cmVjYXRlZFN0cmluZyBfdmFsdWUpOiB0eXBlKF90eXBlKSwgdmFsdWUoX3ZhbHVlKSB7fQorICAg
IFRva2VuKGludCBfdHlwZSwgaW50ICAgICBfdmFsdWUpOiB0eXBlKF90eXBlKSwgaW50VmFsdWUo
X3ZhbHVlKSB7fQorfTsKKworY2xhc3MgVG9rZW5pemVyCit7Citwcml2YXRlOgorICAgIHVuc2ln
bmVkIG1fbmV4dFBvczsKKyAgICBTdHJpbmcgbV9kYXRhOworICAgIGludCBtX2xhc3RUb2tlblR5
cGU7CisgICAgCisgICAgc3RhdGljIEhhc2hNYXA8V2ViQ29yZTo6U3RyaW5nLCBTdGVwOjpBeGlz
VHlwZT4qIHNfYXhpc05hbWVzRGljdDsKKyAgICBzdGF0aWMgSGFzaFNldDxXZWJDb3JlOjpTdHJp
bmc+KiBzX25vZGVUeXBlTmFtZXNEaWN0OworICAgIAorICAgIGVudW0gWE1MQ2F0IHsKKyAgICAg
ICAgTmFtZVN0YXJ0LAorICAgICAgICBOYW1lQ29udCwKKyAgICAgICAgTm90UGFydE9mTmFtZQor
ICAgIH07CisgICAgCisgICAgWE1MQ2F0IGNoYXJDYXQoUUNoYXIgYUNoYXIpOworICAgIAorICAg
IGJvb2wgaXNBeGlzTmFtZShEZXByZWNhdGVkU3RyaW5nIG5hbWUsIFN0ZXA6OkF4aXNUeXBlICZ0
eXBlKTsKKyAgICBib29sIGlzTm9kZVR5cGVOYW1lKERlcHJlY2F0ZWRTdHJpbmcgbmFtZSk7Cisg
ICAgYm9vbCBpc09wZXJhdG9yQ29udGV4dCgpOworICAgIAorICAgIHZvaWQgIHNraXBXUygpOwor
ICAgIFRva2VuIG1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUsIGludCBhZHZhbmNlID0gMSk7
CisgICAgVG9rZW4gbWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50IHZhbCwgaW50
IGFkdmFuY2UgPSAxKTsKKyAgICBjaGFyICBwZWVrQWhlYWRIZWxwZXIoKTsKKyAgICBjaGFyICBw
ZWVrQ3VySGVscGVyKCk7CisgICAgCisgICAgVG9rZW4gbGV4U3RyaW5nKCk7CisgICAgVG9rZW4g
bGV4TnVtYmVyKCk7CisgICAgVG9rZW4gbGV4TkNOYW1lKCk7CisgICAgVG9rZW4gbGV4UU5hbWUo
KTsKKyAgICAKKyAgICBUb2tlbiBuZXh0VG9rZW5JbnRlcm5hbCgpOworICAgIFRva2VuaXplcigp
OworICAgIFRva2VuaXplcihjb25zdCBUb2tlbml6ZXIgJnJocyk7ICAgICAgICAgICAgICAgICAg
Ly8gZGlzYWJsZWQKKyAgICBUb2tlbml6ZXIgJm9wZXJhdG9yPShjb25zdCBUb2tlbml6ZXIgJnJo
cyk7ICAgICAgIC8vIGRpc2FibGVkCisgICAgflRva2VuaXplcigpOworcHVibGljOgorICAgIHN0
YXRpYyBUb2tlbml6ZXIgJnNlbGYoKTsKKyAgICAKKyAgICB2b2lkIHJlc2V0KGNvbnN0IFN0cmlu
ZyYpOworICAgIFRva2VuIG5leHRUb2tlbigpOworfTsKKworc3RydWN0IEF4aXNOYW1lTWFwcGlu
ZworeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgU3RlcDo6QXhpc1R5cGUgdHlwZTsKK307
CisKK3N0YXRpYyBBeGlzTmFtZU1hcHBpbmcgYXhpc05hbWVzW10gPSB7CisgICAgeyAiYW5jZXN0
b3IiLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3Rl
cDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCisgICAgeyAiYXR0cmlidXRlIiwgU3RlcDo6QXR0cmli
dXRlQXhpcyB9LAorICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgeyAiZGVz
Y2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCisgICAgeyAiZGVzY2VuZGFudC1vci1z
ZWxmIiwgU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICB7ICJmb2xsb3dpbmciLCBT
dGVwOjpGb2xsb3dpbmdBeGlzIH0sCisgICAgeyAiZm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpG
b2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgIHsgIm5hbWVzcGFjZSIsIFN0ZXA6Ok5hbWVzcGFj
ZUF4aXMgfSwKKyAgICB7ICJwYXJlbnQiLCBTdGVwOjpQYXJlbnRBeGlzIH0sCisgICAgeyAicHJl
Y2VkaW5nIiwgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAorICAgIHsgInByZWNlZGluZy1zaWJsaW5n
IiwgU3RlcDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKKyAgICB7ICJzZWxmIiwgU3RlcDo6U2Vs
ZkF4aXMgfQorfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXhpc05hbWVzQ291bnQgPSBzaXplb2Yo
YXhpc05hbWVzKSAvIHNpemVvZihheGlzTmFtZXNbMF0pOworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IG5vZGVUeXBlTmFtZXNbXSA9IHsKKyAgICAiY29tbWVudCIsCisgICAgInRleHQiLAorICAg
ICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIiwKKyAgICAibm9kZSIsCisgICAgMAorfTsKKworSGFz
aE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXNUeXBlPiogVG9rZW5pemVyOjpzX2F4aXNOYW1lc0RpY3Qg
PSAwOworSGFzaFNldDxTdHJpbmc+KiBUb2tlbml6ZXI6OnNfbm9kZVR5cGVOYW1lc0RpY3QgPSAw
OworCitUb2tlbml6ZXIgJlRva2VuaXplcjo6c2VsZigpCit7CisgICAgc3RhdGljIFRva2VuaXpl
ciBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK1Rva2VuaXplcjo6WE1MQ2F0
IFRva2VuaXplcjo6Y2hhckNhdChRQ2hhciBhQ2hhcikKK3sKKyAgICAvLyMjIyBtaWdodCBuZWVk
IHRvIGFkZCBzb21lIHNwZWNpYWwgY2FzZXMgZnJvbSB0aGUgWE1MIHNwZWMuCisKKyAgICBpZiAo
YUNoYXIudW5pY29kZSgpID09ICdfJykKKyAgICAgICAgcmV0dXJuIE5hbWVTdGFydDsKKworICAg
IGlmIChhQ2hhci51bmljb2RlKCkgPT0gJy4nIHx8IGFDaGFyLnVuaWNvZGUoKSA9PSAnLScpCisg
ICAgICAgIHJldHVybiBOYW1lQ29udDsKKyAgICBzd2l0Y2ggKHVfY2hhclR5cGUoYUNoYXIudW5p
Y29kZSgpKSkgeworICAgICAgICBjYXNlIFVfTE9XRVJDQVNFX0xFVFRFUjogLy9MbAorICAgICAg
ICBjYXNlIFVfVVBQRVJDQVNFX0xFVFRFUjogLy9MdQorICAgICAgICBjYXNlIFVfT1RIRVJfTEVU
VEVSOiAgICAgLy9MbworICAgICAgICBjYXNlIFVfVElUTEVDQVNFX0xFVFRFUjogLy9MdAorICAg
ICAgICBjYXNlIFVfTEVUVEVSX05VTUJFUjogICAgLy9ObAorICAgICAgICAgICAgcmV0dXJuIE5h
bWVTdGFydDsKKyAgICAgICAgY2FzZSBVX0NPTUJJTklOR19TUEFDSU5HX01BUks6IC8vTWMKKyAg
ICAgICAgY2FzZSBVX0VOQ0xPU0lOR19NQVJLOiAgICAgICAgIC8vTWUKKyAgICAgICAgY2FzZSBV
X05PTl9TUEFDSU5HX01BUks6ICAgICAgIC8vTW4KKyAgICAgICAgY2FzZSBVX01PRElGSUVSX0xF
VFRFUjogICAgICAgIC8vTG0KKyAgICAgICAgY2FzZSBVX0RFQ0lNQUxfRElHSVRfTlVNQkVSOiAg
IC8vTmQKKyAgICAgICAgICAgIHJldHVybiBOYW1lQ29udDsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBOb3RQYXJ0T2ZOYW1lOworICAgIH0KK30KKworYm9vbCBUb2tlbml6
ZXI6OmlzQXhpc05hbWUoRGVwcmVjYXRlZFN0cmluZyBuYW1lLCBTdGVwOjpBeGlzVHlwZSYgdHlw
ZSkKK3sKKyAgICBpZiAoIXNfYXhpc05hbWVzRGljdCkgeworICAgICAgICBzX2F4aXNOYW1lc0Rp
Y3QgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXNUeXBlPjsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgcCA9IDA7IHAgPCBheGlzTmFtZXNDb3VudDsgKytwKQorICAgICAgICAgICAg
c19heGlzTmFtZXNEaWN0LT5zZXQoYXhpc05hbWVzW3BdLm5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBheGlzTmFtZXNbcF0udHlwZSk7CisgICAgfQorCisgICAgSGFzaE1h
cDxTdHJpbmcsIFN0ZXA6OkF4aXNUeXBlPjo6aXRlcmF0b3IgaXQgPSBzX2F4aXNOYW1lc0RpY3Qt
PmZpbmQobmFtZSk7CisgICAgCisgICAgaWYgKGl0ICE9IHNfYXhpc05hbWVzRGljdC0+ZW5kKCkp
IHsKKyAgICAgICAgdHlwZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0gZWxzZSAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRva2VuaXplcjo6
aXNOb2RlVHlwZU5hbWUoRGVwcmVjYXRlZFN0cmluZyBuYW1lKQoreworICAgIGlmICghc19ub2Rl
VHlwZU5hbWVzRGljdCkgeworICAgICAgICBzX25vZGVUeXBlTmFtZXNEaWN0ID0gbmV3IEhhc2hT
ZXQ8U3RyaW5nPjsKKyAgICAgICAgZm9yIChpbnQgcCA9IDA7IG5vZGVUeXBlTmFtZXNbcF07ICsr
cCkKKyAgICAgICAgICAgIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmFkZChub2RlVHlwZU5hbWVzW3Bd
KTsKKyAgICB9CisgICAgcmV0dXJuIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmNvbnRhaW5zKFN0cmlu
ZyhuYW1lKSk7Cit9CisKKy8qIFJldHVybnMgd2hldGhlciB0aGUgbGFzdCBwYXJzZWQgdG9rZW4g
bWF0Y2hlcyB0aGUgWzMyXSBPcGVyYXRvciBydWxlCisgKiAoY2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIveHBhdGgjZXhwcmxleCkuIE5lY2Vzc2FyeSB0byBkaXNhbWJpZ3VhdGUKKyAqIHRoZSB0
b2tlbnMuCisgKi8KK2Jvb2wgVG9rZW5pemVyOjppc09wZXJhdG9yQ29udGV4dCgpCit7CisgICAg
aWYgKG1fbmV4dFBvcyA9PSAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKG1fbGFzdFRva2VuVHlwZSkgeworICAgICAgICBjYXNlIEFORDogY2FzZSBPUjog
Y2FzZSBNVUxPUDoKKyAgICAgICAgY2FzZSAnLyc6IGNhc2UgU0xBU0hTTEFTSDogY2FzZSAnfCc6
IGNhc2UgUExVUzogY2FzZSBNSU5VUzoKKyAgICAgICAgY2FzZSBFUU9QOiBjYXNlIFJFTE9QOgor
ICAgICAgICBjYXNlICdAJzogY2FzZSBBWElTTkFNRTogICBjYXNlICcoJzogY2FzZSAnWyc6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpza2lwV1MoKQoreworICAg
IHdoaWxlIChtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYgbV9kYXRhW21fbmV4dFBvc10u
aXNTcGFjZSgpKQorICAgICAgICArK21fbmV4dFBvczsKK30KKworVG9rZW4gVG9rZW5pemVyOjpt
YWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgYWR2YW5jZSkKK3sKKyAgICBtX25leHRQ
b3MgKz0gYWR2YW5jZTsKKyAgICByZXR1cm4gVG9rZW4oY29kZSk7Cit9CisKK1Rva2VuIFRva2Vu
aXplcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50IHZhbCwgaW50IGFkdmFu
Y2UpCit7CisgICAgbV9uZXh0UG9zICs9IGFkdmFuY2U7CisgICAgcmV0dXJuIFRva2VuKGNvZGUs
IHZhbCk7Cit9CisKKy8vUmV0dXJucyBuZXh0IGNoYXIgaWYgaXQncyB0aGVyZSBhbmQgaW50ZXJl
c3RpbmcsIDAgb3RoZXJ3aXNlCitjaGFyIFRva2VuaXplcjo6cGVla0FoZWFkSGVscGVyKCkKK3sK
KyAgICBpZiAobV9uZXh0UG9zICsgMSA+PSBtX2RhdGEubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIFFDaGFyIG5leHQgPSBtX2RhdGFbbV9uZXh0UG9zICsgMV07CisgICAgaWYgKG5l
eHQucm93KCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gbmV4dC5jZWxsKCk7Cit9CisKK2NoYXIgVG9rZW5pemVyOjpwZWVrQ3VySGVscGVyKCkKK3sK
KyAgICBpZiAobV9uZXh0UG9zID49IG1fZGF0YS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgUUNoYXIgbmV4dCA9IG1fZGF0YVttX25leHRQb3NdOworICAgIGlmIChuZXh0LnJvdygp
ICE9IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG5leHQu
Y2VsbCgpOworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleFN0cmluZygpCit7CisgICAgUUNoYXIg
ZGVsaW1pdGVyID0gbV9kYXRhW21fbmV4dFBvc107CisgICAgaW50ICAgc3RhcnRQb3MgID0gbV9u
ZXh0UG9zICsgMTsKKworICAgIGZvciAobV9uZXh0UG9zID0gc3RhcnRQb3M7IG1fbmV4dFBvcyA8
IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsKKyAgICAgICAgaWYgKG1fZGF0YVttX25l
eHRQb3NdID09IGRlbGltaXRlcikgeworICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1
ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBz
dGFydFBvcyk7CisgICAgICAgICAgICArK21fbmV4dFBvczsgLy9Db25zdW1lIHRoZSBjaGFyOwor
ICAgICAgICAgICAgcmV0dXJuIFRva2VuKExJVEVSQUwsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vT3VjaCwgd2VudCBvZmYgdGhlIGVuZCAtLSByZXBvcnQgZXJyb3IKKyAgICBy
ZXR1cm4gVG9rZW4oRVJST1IpOworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleE51bWJlcigpCit7
CisgICAgaW50IHN0YXJ0UG9zID0gbV9uZXh0UG9zOworICAgIGJvb2wgc2VlbkRvdCA9IGZhbHNl
OworCisgICAgLy9HbyB1bnRpbCBlbmQgb3IgYSBub24tZGlnaXRzIGNoYXJhY3RlcgorICAgIGZv
ciAoOyBtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCk7ICsrbV9uZXh0UG9zKSB7CisgICAgICAg
IFFDaGFyIGFDaGFyID0gbV9kYXRhW21fbmV4dFBvc107CisgICAgICAgIGlmIChhQ2hhci5yb3co
KSAhPSAwKSBicmVhazsKKworICAgICAgICBpZiAoYUNoYXIuY2VsbCgpIDwgJzAnIHx8IGFDaGFy
LmNlbGwoKSA+ICc5JykgeworICAgICAgICAgICAgaWYgKGFDaGFyLmNlbGwoKSA9PSAnLicgJiYg
IXNlZW5Eb3QpCisgICAgICAgICAgICAgICAgc2VlbkRvdCA9IHRydWU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEZXBy
ZWNhdGVkU3RyaW5nIHZhbHVlID0gbV9kYXRhLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoc3RhcnRQ
b3MsIG1fbmV4dFBvcyAtIHN0YXJ0UG9zKTsKKyAgICByZXR1cm4gVG9rZW4oTlVNQkVSLCB2YWx1
ZSk7Cit9CisKK1Rva2VuIFRva2VuaXplcjo6bGV4TkNOYW1lKCkKK3sKKyAgICBpbnQgc3RhcnRQ
b3MgPSBtX25leHRQb3M7CisgICAgaWYgKG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKSAmJiBj
aGFyQ2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOYW1lU3RhcnQpCisgICAgeworICAgICAgICAv
L0tlZXAgZ29pbmcgdW50aWwgd2UgZ2V0IGEgY2hhcmFjdGVyIHRoYXQncyBub3QgZ29vZCBmb3Ig
bmFtZXMuCisgICAgICAgIGZvciAoOyBtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCk7ICsrbV9u
ZXh0UG9zKSB7CisgICAgICAgICAgICBpZiAoY2hhckNhdChtX2RhdGFbbV9uZXh0UG9zXSkgPT0g
Tm90UGFydE9mTmFtZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3Ry
aW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBvcyk7CisgICAgICAgIHJldHVy
biBUb2tlbih2YWx1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bkFuZEFkdmFuY2UoRVJST1IpOworfQorCitUb2tlbiBUb2tlbml6ZXI6OmxleFFOYW1lKCkKK3sK
KyAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOworICAgIGlmICh0MS50eXBlID09IEVSUk9SKSBy
ZXR1cm4gdDE7CisgICAgc2tpcFdTKCk7CisgICAgLy9JZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMg
Oiwgd2hhdCB3ZSBqdXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCisgICAgLy9pdCdzIHRo
ZSB3aG9sZSB0aGluZworICAgIGlmIChwZWVrQWhlYWRIZWxwZXIoKSAhPSAnOicpCisgICAgICAg
IHJldHVybiB0MTsKKworICAgIFRva2VuIHQyID0gbGV4TkNOYW1lKCk7CisgICAgaWYgKHQyLnR5
cGUgPT0gRVJST1IpIHJldHVybiB0MjsKKworICAgIHJldHVybiBUb2tlbih0MS52YWx1ZSArICI6
IiArIHQyLnZhbHVlKTsKK30KKworVG9rZW4gVG9rZW5pemVyOjpuZXh0VG9rZW5JbnRlcm5hbCgp
Cit7CisgICAgc2tpcFdTKCk7CisKKyAgICBpZiAobV9uZXh0UG9zID49IG1fZGF0YS5sZW5ndGgo
KSkgeworICAgICAgICByZXR1cm4gVG9rZW4oMCk7CisgICAgfQorCisgICAgY2hhciBjb2RlID0g
cGVla0N1ckhlbHBlcigpOworICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICBjYXNlICcoJzog
Y2FzZSAnKSc6IGNhc2UgJ1snOiBjYXNlICddJzoKKyAgICAgICAgY2FzZSAnQCc6IGNhc2UgJywn
OiBjYXNlICd8JzoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKGNvZGUp
OworICAgICAgICBjYXNlICdcJyc6CisgICAgICAgIGNhc2UgJ1wiJzoKKyAgICAgICAgICAgIHJl
dHVybiBsZXhTdHJpbmcoKTsKKyAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzog
Y2FzZSAnMyc6IGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcn
OiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICAgICAgICByZXR1cm4gbGV4TnVtYmVyKCk7Cisg
ICAgICAgIGNhc2UgJy4nOiB7CisgICAgICAgICAgICBjaGFyIG5leHQgPSBwZWVrQWhlYWRIZWxw
ZXIoKTsKKyAgICAgICAgICAgIGlmIChuZXh0ID09ICcuJykKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVRva2VuQW5kQWR2YW5jZShET1RET1QsIDIpOworICAgICAgICAgICAgZWxzZSBpZiAo
bmV4dCA+PSAnMCcgJiYgbmV4dCA8PSAnOScpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxleE51
bWJlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW5BbmRBZHZhbmNlKCcuJyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAg
ICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJy8nKQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVG9rZW5BbmRBZHZhbmNlKFNMQVNIU0xBU0gsIDIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcvJyk7CisgICAgICAg
IGNhc2UgJysnOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoUExVUyk7
CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFu
Y2UoTUlOVVMpOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIHJldHVybiBtYWtlSW50
VG9rZW5BbmRBZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9FUSk7CisgICAgICAgIGNhc2UgJyEn
OgorICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RPcDo6T1BfTkUs
IDIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVS
Uk9SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBpZiAo
cGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50
VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xFLCAyKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxP
UCwgTnVtZXJpY09wOjpPUF9MVCk7CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgaWYg
KHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUlu
dFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9HRSwgMik7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVM
T1AsIE51bWVyaWNPcDo6T1BfR1QpOworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgIGlm
IChpc09wZXJhdG9yQ29udGV4dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9r
ZW5BbmRBZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6Ok9QX011bCk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICArK21fbmV4dFBvczsKKyAgICAgICAgICAgICAgICByZXR1cm4g
VG9rZW4oTkFNRVRFU1QsICIqIik7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyQnOiB7
Ly8kIFFOYW1lCisgICAgICAgICAgICBtX25leHRQb3MrKzsKKyAgICAgICAgICAgIFRva2VuIHBh
ciA9IGxleFFOYW1lKCk7CisgICAgICAgICAgICBpZiAocGFyLnR5cGUgPT0gRVJST1IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVG9rZW4oVkFSSUFCTEVSRUZFUkVOQ0UsIHBhci52YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOworICAgIGlmICh0MS50eXBlID09
IEVSUk9SKSByZXR1cm4gdDE7CisKKyAgICBza2lwV1MoKTsKKyAgICAvL0lmIHdlJ3JlIGluIGFu
IG9wZXJhdG9yIGNvbnRleHQsIGNoZWNrIGZvciBhbnkgb3BlcmF0b3IgbmFtZXMKKyAgICBpZiAo
aXNPcGVyYXRvckNvbnRleHQoKSkgeworICAgICAgICBpZiAodDEudmFsdWUgPT0gImFuZCIpIC8v
IyMjIGhhc2g/CisgICAgICAgICAgICByZXR1cm4gVG9rZW4oQU5EKTsKKyAgICAgICAgaWYgKHQx
LnZhbHVlID09ICJvciIpCisgICAgICAgICAgICByZXR1cm4gVG9rZW4oT1IpOworICAgICAgICBp
ZiAodDEudmFsdWUgPT0gIm1vZCIpCisgICAgICAgICAgICByZXR1cm4gVG9rZW4oTVVMT1AsIE51
bWVyaWNPcDo6T1BfTW9kKTsKKyAgICAgICAgaWYgKHQxLnZhbHVlID09ICJkaXYiKQorICAgICAg
ICAgICAgcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1lcmljT3A6Ok9QX0Rpdik7CisgICAgfQorCisg
ICAgLy9TZWUgd2hldGhlciB3ZSBhcmUgYXQgYSA6CisgICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9
PSAnOicpIHsKKyAgICAgICAgbV9uZXh0UG9zKys7CisgICAgICAgIC8vQW55IGNoYW5jZSBpdCdz
IGFuIGF4aXMgbmFtZT8KKyAgICAgICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnOicpIHsKKyAg
ICAgICAgICAgIG1fbmV4dFBvcysrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvL0l0IG1p
Z2h0IGJlIGFuIGF4aXMgbmFtZS4KKyAgICAgICAgICAgIFN0ZXA6OkF4aXNUeXBlIGF4aXNUeXBl
OworICAgICAgICAgICAgaWYgKGlzQXhpc05hbWUodDEudmFsdWUsIGF4aXNUeXBlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVG9rZW4oQVhJU05BTUUsIGF4aXNUeXBlKTsKKyAgICAgICAgICAg
IC8vVWdoLCA6OiBpcyBvbmx5IHZhbGlkIGluIGF4aXMgbmFtZXMgLT4gZXJyb3IKKyAgICAgICAg
ICAgIHJldHVybiBUb2tlbihFUlJPUik7CisgICAgICAgIH0KKworICAgICAgICAvL1NlZW1zIGxp
a2UgdGhpcyBpcyBhIGZ1bGx5IHF1YWxpZmllZCBxbmFtZSwgb3IgcGVyaGFwcyB0aGUgKiBtb2Rp
ZmllZCBvbmUgZnJvbSBOYW1lVGVzdAorICAgICAgICBza2lwV1MoKTsKKyAgICAgICAgaWYgKHBl
ZWtDdXJIZWxwZXIoKSA9PSAnKicpIHsKKyAgICAgICAgICAgIG1fbmV4dFBvcysrOworICAgICAg
ICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCB0MS52YWx1ZSArICI6KiIpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvL01ha2UgYSBmdWxsIHFuYW1lLi4KKyAgICAgICAgVG9rZW4g
dDIgPSBsZXhOQ05hbWUoKTsKKyAgICAgICAgaWYgKHQyLnR5cGUgPT0gRVJST1IpIHJldHVybiB0
MjsKKyAgICAgICAgCisgICAgICAgIHQxLnZhbHVlID0gdDEudmFsdWUgKyAnOicgKyB0Mi52YWx1
ZTsKKyAgICB9CisKKyAgICBza2lwV1MoKTsKKyAgICBpZiAocGVla0N1ckhlbHBlcigpID09ICco
JykgeworICAgICAgICAvL25vdGU6IHdlIGRvbid0IHN3YWxsb3cgdGhlIChoZXJlIQorICAgICAg
ICAKKyAgICAgICAgLy9laXRoZXIgbm9kZSB0eXBlIG9mIGZ1bmN0aW9uIG5hbWUKKyAgICAgICAg
aWYgKGlzTm9kZVR5cGVOYW1lKHQxLnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKHQxLnZhbHVl
ID09ICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIikKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9r
ZW4oUEksIHQxLnZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gVG9rZW4oTk9ERVRZUEUsIHQxLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAvL211c3Qg
YmUgYSBmdW5jdGlvbiBuYW1lLgorICAgICAgICByZXR1cm4gVG9rZW4oRlVOQ1RJT05OQU1FLCB0
MS52YWx1ZSk7CisgICAgfQorCisgICAgLy9BdCB0aGlzIHBvaW50LCBpdCBtdXN0IGJlIE5BTUVU
RVNUCisgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCB0MS52YWx1ZSk7Cit9CisKK1Rva2VuIFRv
a2VuaXplcjo6bmV4dFRva2VuKCkKK3sKKyAgICBUb2tlbiB0b1JldCA9IG5leHRUb2tlbkludGVy
bmFsKCk7CisgICAgbV9sYXN0VG9rZW5UeXBlID0gdG9SZXQudHlwZTsKKyAgICByZXR1cm4gdG9S
ZXQ7Cit9CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKCkKK3sKKyAgICByZXNldChTdHJpbmcoKSk7
Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpy
ZXNldChjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgbV9uZXh0UG9zID0gMDsKKyAgICBtX2Rh
dGEgPSBkYXRhOworICAgIG1fbGFzdFRva2VuVHlwZSA9IDA7Cit9CisKK30KK30KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OlhQYXRoOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2lu
dCB4cGF0aHl5bGV4KCkKK3sKKyAgICBUb2tlbiB0b2sgPSBUb2tlbml6ZXI6OnNlbGYoKS5uZXh0
VG9rZW4oKTsKKyAgICBpZiAoIXRvay52YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgeHBhdGh5
eWx2YWwuc3RyID0gbmV3IERlcHJlY2F0ZWRTdHJpbmcodG9rLnZhbHVlKTsKKyAgICB9IGVsc2Ug
aWYgKHRvay5pbnRWYWx1ZSkgeworICAgICAgICB4cGF0aHl5bHZhbC5udW0gPSB0b2suaW50VmFs
dWU7CisgICAgfQorICAgIHJldHVybiB0b2sudHlwZTsKK30KKwordm9pZCBpbml0VG9rZW5pemVy
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFRva2VuaXplcjo6c2VsZigpLnJlc2V0KHN0
cmluZyk7Cit9CisKK3ZvaWQgeHBhdGh5eWVycm9yKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICAv
LyBGSVhNRSBDbGVhbiB4cGF0aHl5bHZhbC5zdHIgdXAgdG8gYXZvaWQgbGVha2luZyBpdC4KK30K
SW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3hwYXRoL2ltcGwvc3RlcC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwv
c3RlcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJpZ2h0
IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAic3RlcC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1
ZGUgIk5hbWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJUZXh0Lmgi
CisjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBYUGF0aCB7CisKK0RlcHJlY2F0ZWRTdHJpbmcgU3RlcDo6YXhpc0FzU3RyaW5nKEF4
aXNUeXBlIGF4aXMpCit7CisgICAgc3dpdGNoIChheGlzKSB7CisgICAgICAgIGNhc2UgQW5jZXN0
b3JBeGlzOiByZXR1cm4gImFuY2VzdG9yIjsKKyAgICAgICAgY2FzZSBBbmNlc3Rvck9yU2VsZkF4
aXM6IHJldHVybiAiYW5jZXN0b3Itb3Itc2VsZiI7CisgICAgICAgIGNhc2UgQXR0cmlidXRlQXhp
czogcmV0dXJuICJhdHRyaWJ1dGUiOworICAgICAgICBjYXNlIENoaWxkQXhpczogcmV0dXJuICJj
aGlsZCI7CisgICAgICAgIGNhc2UgRGVzY2VuZGFudEF4aXM6IHJldHVybiAiZGVzY2VuZGFudCI7
CisgICAgICAgIGNhc2UgRGVzY2VuZGFudE9yU2VsZkF4aXM6IHJldHVybiAiZGVzY2VuZGFudC1v
ci1zZWxmIjsKKyAgICAgICAgY2FzZSBGb2xsb3dpbmdBeGlzOiByZXR1cm4gImZvbGxvd2luZyI7
CisgICAgICAgIGNhc2UgRm9sbG93aW5nU2libGluZ0F4aXM6IHJldHVybiAiZm9sbG93aW5nLXNp
YmxpbmciOworICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6IHJldHVybiAibmFtZXNwYWNlIjsK
KyAgICAgICAgY2FzZSBQYXJlbnRBeGlzOiByZXR1cm4gInBhcmVudCI7CisgICAgICAgIGNhc2Ug
UHJlY2VkaW5nQXhpczogcmV0dXJuICJwcmVjZWRpbmciOworICAgICAgICBjYXNlIFByZWNlZGlu
Z1NpYmxpbmdBeGlzOiByZXR1cm4gInByZWNlZGluZy1zaWJsaW5nIjsKKyAgICAgICAgY2FzZSBT
ZWxmQXhpczogcmV0dXJuICJzZWxmIjsKKyAgICB9CisgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJp
bmcoKTsKK30KKworU3RlcDo6U3RlcCgpCit7Cit9CisKK1N0ZXA6OlN0ZXAoQXhpc1R5cGUgYXhp
cywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVk
aWNhdGVzKQorICAgIDogbV9heGlzKGF4aXMpLAorICAgIG1fbm9kZVRlc3Qobm9kZVRlc3QpLAor
ICAgIG1fcHJlZGljYXRlcyhwcmVkaWNhdGVzKQoreworfQorCitTdGVwOjp+U3RlcCgpCit7Cisg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcHJlZGljYXRlcyk7Cit9CisKK05vZGVTZXQgU3RlcDo6ZXZh
bHVhdGUoTm9kZSAqY29udGV4dCkgY29uc3QKK3sKKyAgICBMT0coWFBhdGgsICJFdmFsdWF0aW5n
IHN0ZXAsIGF4aXM9JyVzJywgbm9kZXRlc3Q9JyVzJywgJXUgcHJlZGljYXRlc1xuIiwKKyAgICAg
ICAgICAgIGF4aXNBc1N0cmluZyhtX2F4aXMpLmFzY2lpKCksIG1fbm9kZVRlc3QuYXNjaWkoKSwg
bV9wcmVkaWNhdGVzLnNpemUoKSk7CisgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkNvbnRleHQgbm9kZSBpcyBh
biBlbGVtZW50IGNhbGxlZCAlc1xuIiwgY29udGV4dC0+bm9kZU5hbWUoKS5hc2NpaSgpKTsKKyAg
ICB9IGVsc2UgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUp
IHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIGFuIGF0dHJpYnV0ZSBjYWxs
ZWQgJXMgd2l0aCB2YWx1ZSAlc1xuIiwgCisgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlTmFt
ZSgpLmFzY2lpKCksIAorICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZVZhbHVlKCkuYXNjaWko
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIG9m
IHVua25vd24gdHlwZSAlZFxuIiwgY29udGV4dC0+bm9kZVR5cGUoKSk7CisgICAgfQorCisgICAg
Tm9kZVNldCBpbk5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCksIG91dE5vZGVzOworICAgIExP
RyhYUGF0aCwgIkF4aXMgJXMgbWF0Y2hlcyAlZCBub2Rlcy5cbiIsIGF4aXNBc1N0cmluZyhtX2F4
aXMpLmFzY2lpKCksIGluTm9kZXMuc2l6ZSgpKTsKKworICAgIGluTm9kZXMgPSBub2RlVGVzdE1h
dGNoZXMoaW5Ob2Rlcyk7CisgICAgTE9HKFhQYXRoLCAiTm9kZXRlc3QgJXMgdHJpbXMgdGhpcyBu
dW1iZXIgdG8gJWRcbiIsIG1fbm9kZVRlc3QuYXNjaWkoKSwgaW5Ob2Rlcy5zaXplKCkpOworICAg
IAorICAgIG91dE5vZGVzID0gaW5Ob2RlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9wcmVkaWNhdGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFByZWRpY2F0ZSogcHJlZGljYXRl
ID0gbV9wcmVkaWNhdGVzW2ldOworCisgICAgICAgIG91dE5vZGVzLmNsZWFyKCk7CisgICAgICAg
IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOwor
ICAgICAgICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uID0gMTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluTm9kZXMuc2l6ZSgpOyBqKyspIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBpbk5vZGVzW2pdLmdldCgpOworCisgICAgICAgICAgICBF
eHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgPSBub2RlOworICAgICAgICAgICAg
RXZhbHVhdGlvbkNvbnRleHQgYmFja3VwQ3R4ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUtPmV2YWx1YXRlKCkpIHsKKyAgICAgICAg
ICAgICAgICBvdXROb2Rlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpID0gYmFja3VwQ3R4OworICAgICAgICAg
ICAgKytFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uOworICAgICAgICB9
CisKKyAgICAgICAgTE9HKFhQYXRoLCAiXHRQcmVkaWNhdGUgdHJpbXMgdGhpcyBudW1iZXIgdG8g
JWQiLCBvdXROb2Rlcy5zaXplKCkpOworCisgICAgICAgIGluTm9kZXMgPSBvdXROb2RlczsKKyAg
ICB9CisgICAgcmV0dXJuIG91dE5vZGVzOworfQorCitOb2RlU2V0IFN0ZXA6Om5vZGVzSW5BeGlz
KE5vZGUgKmNvbnRleHQpIGNvbnN0Cit7CisgICAgTm9kZVNldCBub2RlczsKKyAgICBzd2l0Y2gg
KG1fYXhpcykgeworICAgICAgICBjYXNlIENoaWxkQXhpczogeworICAgICAgICAgICAgTm9kZSAq
biA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAg
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgRGVzY2VuZGFudEF4aXM6IAorICAgICAgICAgICAgcmV0dXJu
IGdldENoaWxkcmVuUmVjdXJzaXZlbHkoY29udGV4dCk7CisgICAgICAgIGNhc2UgUGFyZW50QXhp
czoKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0LT5wYXJlbnROb2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICBjYXNlIEFuY2VzdG9yQXhpczogeworICAg
ICAgICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIHdo
aWxlIChuKSB7CisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAg
ICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGb2xsb3dpbmdTaWJsaW5nQXhpczog
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRF
X05PREUgfHwKKyAgICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpY
UEFUSF9OQU1FU1BBQ0VfTk9ERSkgCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVTZXQoKTsK
KworICAgICAgICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPm5leHRTaWJsaW5nKCk7CisgICAgICAg
ICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAg
ICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFByZWNlZGluZ1NpYmxp
bmdBeGlzOiB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpB
VFRSSUJVVEVfTk9ERSB8fAorICAgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlVHlwZSgpID09
IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVybiBOb2Rl
U2V0KCk7CisKKyAgICAgICAgICAgIE5vZGUgKm4gPSBjb250ZXh0LT5wcmV2aW91c1NpYmxpbmco
KTsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5k
KG4pOworICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEZvbGxvd2luZ0F4aXM6IHsKKyAgICAgICAgICAgIE5vZGUgKnAgPSBjb250ZXh0OworICAgICAg
ICAgICAgd2hpbGUgKCFpc1Jvb3REb21Ob2RlKHApKSB7CisgICAgICAgICAgICAgICAgTm9kZSAq
biA9IHAtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQoZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShuKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQcmVjZWRpbmdBeGlzOiB7CisgICAg
ICAgICAgICBOb2RlICpwID0gY29udGV4dDsKKyAgICAgICAgICAgIHdoaWxlICghaXNSb290RG9t
Tm9kZShwKSkgeworICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBwLT5wcmV2aW91c1NpYmxpbmco
KTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJl
blJlY3Vyc2l2ZWx5KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2li
bGluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwID0gcC0+cGFyZW50
Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQXR0cmlidXRlQXhpczogeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgIHJl
dHVybiBOb2RlU2V0KCk7CisKKyAgICAgICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBjb250
ZXh0LT5hdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICBpZiAoIWF0dHJzKSB7CisgICAgICAgICAg
ICAgICAgTE9HKFhQYXRoLCAiTm9kZTo6YXR0cmlidXRlcygpIHJldHVybmVkIE5VTEwhIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgCisg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kIChhdHRycy0+aXRlbShpKSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRf
Tk9ERSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9kZVNldCgpOworCisgICAgICAgICAgICBi
b29sIGZvdW5kWG1sTnNOb2RlID0gZmFsc2U7CisgICAgICAgICAgICBOb2RlICpub2RlID0gY29u
dGV4dDsKKyAgICAgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICAgICAgTmFtZWRB
dHRyTWFwICphdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWF0dHJzKSB7CisgICAgICAgICAgICAgICAgICAgIExPRyhYUGF0aCwgIk5vZGU6OmF0dHJpYnV0
ZXMoKSByZXR1cm5lZCBOVUxMISIpOworCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8
IGF0dHJzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBh
dHRycy0+aXRlbShpKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPm5vZGVOYW1l
KCkuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoInhtbG5zOiIpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobi0+bm9kZU5hbWUoKSA9PSAieG1sbnMiICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIWZvdW5kWG1sTnNOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZFhtbE5zTm9kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPm5vZGVW
YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFNlbGZBeGlzOgorICAgICAgICAg
ICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAg
ICAgICBjYXNlIERlc2NlbmRhbnRPclNlbGZBeGlzOgorICAgICAgICAgICAgbm9kZXMuYXBwZW5k
KGNvbnRleHQpOworICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGdldENoaWxkcmVuUmVjdXJzaXZl
bHkoY29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICBjYXNlIEFu
Y2VzdG9yT3JTZWxmQXhpczogeworICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOwor
ICAgICAgICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAg
IHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAg
ICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExP
RyhYUGF0aCwgIlVua25vd24gYXhpcyAlcyBwYXNzZWQgdG8gU3RlcDo6bm9kZXNJbkF4aXMiLCBh
eGlzQXNTdHJpbmcobV9heGlzKS5hc2NpaSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTm9kZVNl
dCgpOworfQorCisKK05vZGVTZXQgU3RlcDo6bm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVTZXQm
IG5vZGVzKSBjb25zdAoreworICAgIFN0cmluZyBucyA9IG5hbWVzcGFjZUZyb21Ob2RldGVzdCht
X25vZGVUZXN0KTsKKyAgICBOb2RlU2V0IG1hdGNoZXM7CisgICAgaWYgKG1fbm9kZVRlc3QgPT0g
IioiKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkr
KykgeworICAgICAgICAgICAgTm9kZSAqbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAg
ICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gcHJpbWFyeU5vZGVUeXBlKG1fYXhpcykpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobnMuaXNFbXB0eSgpIHx8CisgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5uYW1lc3BhY2VVUkkoKSA9PSBucykgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVz
LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG5vZGVzOworICAgIH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAi
dGV4dCgpIikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAg
ICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSAK
KyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbWF0Y2hlczsKKyAgICB9IGVsc2UgaWYgKG1fbm9kZVRlc3QgPT0gImNvbW1lbnQo
KSIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsr
KSB7CisgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCisgICAgICAgICAg
ICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1h
dGNoZXM7CisgICAgfSBlbHNlIGlmIChtX25vZGVUZXN0LnN0YXJ0c1dpdGgoInByb2Nlc3Npbmct
aW5zdHJ1Y3Rpb24iKSkgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHBhcmFtOworCisgICAg
ICAgIGNvbnN0IGludCBzcGFjZSA9IG1fbm9kZVRlc3QuZmluZCgnICcpOworICAgICAgICBpZiAo
c3BhY2UgPiAtMSkgeworICAgICAgICAgICAgcGFyYW0gPSBtX25vZGVUZXN0LmRlcHJlY2F0ZWRT
dHJpbmcoKS5taWQoc3BhY2UgKyAxKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUg
PSBub2Rlc1tpXS5nZXQoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFICYmCisgICAgICAgICAgICAgICAgKHBh
cmFtLmlzRW1wdHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IHBhcmFtKSkKKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0gICAgCisgICAgICAgIHJl
dHVybiBtYXRjaGVzOworICAgIH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAibm9kZSgpIikgewor
ICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIHByZWZp
eCwgbG9jYWxOYW1lOworCisgICAgICAgIGNvbnN0IGludCBjb2xvbiA9IG1fbm9kZVRlc3QuZmlu
ZCgnOicpOworICAgICAgICBpZiAoY29sb24gPiAtMSkgeworICAgICAgICAgICAgcHJlZml4ID0g
bV9ub2RlVGVzdC5sZWZ0KGNvbG9uKTsKKyAgICAgICAgICAgIGxvY2FsTmFtZSA9IG1fbm9kZVRl
c3QuZGVwcmVjYXRlZFN0cmluZygpLm1pZChjb2xvbiArIDEpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbG9jYWxOYW1lID0gbV9ub2RlVGVzdDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghcHJlZml4LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKEV4cHJlc3Npb246OmV2
YWx1YXRpb25Db250ZXh0KCkucmVzb2x2ZXItPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBUaHJvdyBOQU1FU1BBQ0VfRVJS
IGV4Y2VwdGlvbiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
YXhpcyA9PSBBdHRyaWJ1dGVBeGlzKSB7CisgICAgICAgICAgICAvLyBJbiBYUGF0aCBsYW5kLCBu
YW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBhY2Nlc3NpYmxlCisgICAgICAgICAgICAvLyBvbiB0aGUg
YXR0cmlidXRlIGF4aXMuCisgICAgICAgICAgICBpZiAobG9jYWxOYW1lID09ICJ4bWxucyIpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgTm9kZSAqbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5ub2RlTmFtZSgpID09IGxvY2FsTmFtZSkgewor
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7IC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZS4KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICB9
IGVsc2UgaWYgKG1fYXhpcyA9PSBOYW1lc3BhY2VBeGlzKSB7CisgICAgICAgICAgICBMT0coWFBh
dGgsICJOb2RlIHRlc3QgJXMgb24gYXhpcyAlcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIsCisg
ICAgICAgICAgICAgICAgbV9ub2RlVGVzdC5hc2NpaSgpLCBheGlzQXNTdHJpbmcobV9heGlzKS5h
c2NpaSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIE5vZGUgKm5vZGUg
PSBub2Rlc1tpXS5nZXQoKTsKKyAKKyAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGFnUU5hbWUg
aGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGVsZW1lbnQgbmFtZSBpbiB1cHBlcmNhc2Ug
CisgICAgICAgICAgICAgICAgLy8gbGlrZSB3ZSBnZXQgd2l0aCBIVE1MIGVsZW1lbnRzLgorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSAm
JgorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KG5vZGUpLT50YWdR
TmFtZSgpLnRvU3RyaW5nKCkgPT0gbG9jYWxOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
TE9HKFhQYXRoLCAiTm9kZSB0ZXN0ICVzIG9uIGF4aXMgJXMgaXMgbm90IGltcGxlbWVudGVkIHll
dC4iLAorICAgICAgICBtX25vZGVUZXN0LmFzY2lpKCksIGF4aXNBc1N0cmluZyhtX2F4aXMpLmFz
Y2lpKCkpOworCisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisKK3ZvaWQgU3RlcDo6b3B0aW1pemUo
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6ZSgpOyBp
KyspCisgICAgICAgIG1fcHJlZGljYXRlc1tpXS0+b3B0aW1pemUoKTsKK30KKworU3RyaW5nIFN0
ZXA6Om5hbWVzcGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdAor
eworICAgIGludCBpID0gbm9kZVRlc3QuZmluZCgnOicpOworICAgIGlmIChpID09IC0xKSB7Cisg
ICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7CisgICAgfQorCisgICAgU3RyaW5nIHBy
ZWZpeChub2RlVGVzdC5sZWZ0KGkpKTsKKyAgICAKKyAgICBOb2RlICpjdHhOb2RlID0gRXhwcmVz
c2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworICAgIHJldHVybiBjdHhOb2RlLT5sb29r
dXBOYW1lc3BhY2VVUkkocHJlZml4KTsKK30KKworTm9kZTo6Tm9kZVR5cGUgU3RlcDo6cHJpbWFy
eU5vZGVUeXBlKEF4aXNUeXBlIGF4aXMpIGNvbnN0Cit7CisgICAgc3dpdGNoIChheGlzKSB7Cisg
ICAgICAgIGNhc2UgQXR0cmlidXRlQXhpczoKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpBVFRS
SUJVVEVfTk9ERTsKKyAgICAgICAgY2FzZSBOYW1lc3BhY2VBeGlzOgorICAgICAgICAgICAgcmV0
dXJuIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIE5vZGU6OkVMRU1FTlRfTk9ERTsKKyAgICB9Cit9CisKK30KK30KKwpJbmRl
eDogV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvaW1wbC91dGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC91dGls
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1
IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICog
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorYm9vbCBpc1Jvb3RE
b21Ob2RlKE5vZGUgKm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUgJiYgIW5vZGUtPnBhcmVudE5v
ZGUoKTsKK30KKworU3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUgKm5vZGUpCit7CisgICAgc3dpdGNo
IChub2RlLT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6
CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICAgICAg
ICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBpZiAoaXNSb290RG9tTm9kZShub2RlKQorICAgICAgICAgICAgICAgICB8
fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAg
ICAgIFN0cmluZyBzdHI7CisgICAgICAgICAgICAgICAgTm9kZVNldCBub2RlcyA9IGdldENoaWxk
cmVuUmVjdXJzaXZlbHkobm9kZSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgKm5v
ZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIHN0ciArPSBzdHJpbmdWYWx1ZShub2RlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyOworICAgICAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK05vZGVTZXQgZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShO
b2RlICpub2RlKQoreworICAgIE5vZGVTZXQgbm9kZXM7CisgICAgTm9kZSAqbiA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAobikgeworICAgICAgICBub2Rlcy5hcHBlbmQobik7Cisg
ICAgICAgIG5vZGVzLmFwcGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG4pKTsKKyAgICAgICAg
biA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgfQorICAgIHJldHVybiBub2RlczsKK30KKworYm9v
bCBpc1ZhbGlkQ29udGV4dE5vZGUoTm9kZSAqbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZSAmJiAo
CisgICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFIHx8Cisg
ICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKKyAg
ICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwKKyAgICAgICAg
ICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwKKyAgICAg
ICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05P
REUgfHwKKyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUg
fHwKKyAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8
CisgICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05P
REUpOworfQorCit9Cit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzUgQEAKKy8qCisgKiBmdW5jdGlvbnMuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFh
YmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor
ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRlVOQ1RJT05TX0gKKyNk
ZWZpbmUgRlVOQ1RJT05TX0gKKworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitjbGFzcyBGdW5jdGlvbiA6IHB1
YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgdm9pZCBzZXRBcmd1bWVudHMoY29uc3Qg
VmVjdG9yPEV4cHJlc3Npb24qPiAmYXJncyk7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyAmbmFtZSk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHByZXNzaW9uICphcmcoaW50IHBvcyk7Cisg
ICAgY29uc3QgRXhwcmVzc2lvbiAqYXJnKGludCBwb3MpIGNvbnN0OworICAgIHVuc2lnbmVkIGlu
dCBhcmdDb3VudCgpIGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fbmFtZTsKK307CisKK2NsYXNzIEZ1bmN0aW9uTGlicmFyeQoreworICAg
IGZyaWVuZCBzdHJ1Y3QgRnVuY3Rpb25NYXBwaW5nOworcHVibGljOgorICAgIHN0YXRpYyBGdW5j
dGlvbkxpYnJhcnkgJnNlbGYoKTsKKworICAgIEZ1bmN0aW9uICpnZXRGdW5jdGlvbihjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvbiAqPiAmYXJncyA9IFZlY3RvcjxFeHBy
ZXNzaW9uKj4oKSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEZ1bmN0aW9uUmVjOwor
CisgICAgRnVuY3Rpb25MaWJyYXJ5KCk7CisgICAgRnVuY3Rpb25MaWJyYXJ5KGNvbnN0IEZ1bmN0
aW9uTGlicmFyeSAmcmhzKTsKKyAgICBGdW5jdGlvbkxpYnJhcnkgJm9wZXJhdG9yPShjb25zdCBG
dW5jdGlvbkxpYnJhcnkgJnJocyk7CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgRnVu
Y3Rpb25SZWM+IG1fZnVuY3Rpb25EaWN0OworfTsKKworfQorfQorI2VuZGlmIC8vIEZVTkNUSU9O
U19ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC90b2tlbml6ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3hwYXRoL2ltcGwvdG9rZW5pemVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3hwYXRoL2ltcGwvdG9rZW5pemVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8q
CisgKiB0b2tlbml6ZXIuaCAtIENvcHlyaWdodCAyMDA1IE1ha3NpbSBPcmxvdmljaCA8bWFrc2lt
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgVE9LRU5JWkVSX0gKKyNkZWZpbmUgVE9L
RU5JWkVSX0gKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCisjaW5jbHVkZSAic3RlcC5oIgorI2luY2x1ZGUgInBhdGguaCIKKyNpbmNsdWRl
ICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisjaW5jbHVkZSAidXRpbC5o
IgorCisvLyBJbnRlcmZhY2UgdG8gdGhlIHBhcnNlcgoraW50IHhwYXRoeXlsZXgoKTsKK3ZvaWQg
eHBhdGh5eWVycm9yKGNvbnN0IGNoYXIgKnN0cik7Cit2b2lkIGluaXRUb2tlbml6ZXIoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBzdHJpbmcpOworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUveHBhdGgv
aW1wbC9zdGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9zdGVwLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBzdGVwLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJl
IDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNURVBfSAorI2RlZmluZSBT
VEVQX0gKKworI2luY2x1ZGUgInByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworI2lu
Y2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsK
KyAgICAgICAgCitjbGFzcyBTdGVwCit7CitwdWJsaWM6CisgICAgZW51bSBBeGlzVHlwZSB7Cisg
ICAgICAgIEFuY2VzdG9yQXhpcz0xLCBBbmNlc3Rvck9yU2VsZkF4aXMsIEF0dHJpYnV0ZUF4aXMs
CisgICAgICAgIENoaWxkQXhpcywgRGVzY2VuZGFudEF4aXMsIERlc2NlbmRhbnRPclNlbGZBeGlz
LAorICAgICAgICBGb2xsb3dpbmdBeGlzLCBGb2xsb3dpbmdTaWJsaW5nQXhpcywgTmFtZXNwYWNl
QXhpcywKKyAgICAgICAgUGFyZW50QXhpcywgUHJlY2VkaW5nQXhpcywgUHJlY2VkaW5nU2libGlu
Z0F4aXMsCisgICAgICAgIFNlbGZBeGlzCisgICAgfTsKKworICAgIHN0YXRpYyBEZXByZWNhdGVk
U3RyaW5nIGF4aXNBc1N0cmluZyhBeGlzVHlwZSBheGlzKTsKKworICAgIFN0ZXAoKTsKKyAgICBT
dGVwKEF4aXNUeXBlIGF4aXMsIGNvbnN0IFN0cmluZyAmbm9kZVRlc3QsIGNvbnN0IFZlY3RvcjxQ
cmVkaWNhdGUqPiAmcHJlZGljYXRlcyA9IFZlY3RvcjxQcmVkaWNhdGUqPigpKTsKKyAgICB+U3Rl
cCgpOworCisgICAgTm9kZVNldCBldmFsdWF0ZShOb2RlICpjb250ZXh0KSBjb25zdDsKKworICAg
IHZvaWQgb3B0aW1pemUoKTsKKworcHJpdmF0ZToKKyAgICBOb2RlU2V0IG5vZGVzSW5BeGlzKE5v
ZGUgKmNvbnRleHQpIGNvbnN0OworICAgIE5vZGVTZXQgbm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5v
ZGVTZXQmIG5vZGVzKSBjb25zdDsKKyAgICBTdHJpbmcgbmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNv
bnN0IFN0cmluZyYgbm9kZVRlc3QpIGNvbnN0OworICAgIE5vZGU6Ok5vZGVUeXBlIHByaW1hcnlO
b2RlVHlwZShBeGlzVHlwZSBheGlzKSBjb25zdDsKKworICAgIEF4aXNUeXBlIG1fYXhpczsKKyAg
ICBTdHJpbmcgbV9ub2RlVGVzdDsKKyAgICBWZWN0b3I8UHJlZGljYXRlKj4gbV9wcmVkaWNhdGVz
OworfTsKKworfQorfQorCisjZW5kaWYgLy8gU1RFUF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgv
aW1wbC9YUGF0aEdyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBh
dGhHcmFtbWFyLnkJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhHcmFt
bWFyLnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ4IEBACisleworI2luY2x1ZGUgImNvbmZp
Zy5oIgorICAgIAorI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgInhwYXRoL2ltcGwv
cGF0aC5oIgorI2luY2x1ZGUgInN0ZXAuaCIKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNs
dWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidmFyaWFibGVyZWZlcmVuY2UuaCIKKyAgICAKKyNpbmNs
dWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2RlZmluZSBZWURFQlVHIDEKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6WFBhdGg7CisgICAgCitF
eHByZXNzaW9uICpwYXJzZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0
aW9uQ29kZSYgY29kZSk7CisgICAgCitleHRlcm4gaW50IHhwYXRoeXlsZXgoKTsKK2V4dGVybiB2
b2lkIHhwYXRoeXllcnJvcihjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHZvaWQgaW5pdFRva2Vu
aXplcihjb25zdCBTdHJpbmcmIHN0cmluZyk7CisKK3N0YXRpYyBFeHByZXNzaW9uICpfdG9wRXhw
cjsKK3N0YXRpYyBib29sIGdvdE5hbWVzcGFjZUVycm9yOworCislfQorCisldW5pb24KK3sKKyAg
ICBXZWJDb3JlOjpYUGF0aDo6U3RlcDo6QXhpc1R5cGUgYXhpc1R5cGU7CisgICAgaW50ICAgICAg
ICBudW07CisgICAgRGVwcmVjYXRlZFN0cmluZyAqc3RyOworICAgIFdlYkNvcmU6OlhQYXRoOjpF
eHByZXNzaW9uICpleHByOworICAgIFZlY3RvcjxXZWJDb3JlOjpYUGF0aDo6UHJlZGljYXRlKj4g
KnByZWRMaXN0OworICAgIFZlY3RvcjxXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbio+ICphcmdM
aXN0OworICAgIFdlYkNvcmU6OlhQYXRoOjpTdGVwICpzdGVwOworICAgIFdlYkNvcmU6OlhQYXRo
OjpMb2NhdGlvblBhdGggKmxvY2F0aW9uUGF0aDsKK30KKworJWxlZnQgPG51bT4gTVVMT1AgUkVM
T1AgRVFPUAorJWxlZnQgPHN0cj4gUExVUyBNSU5VUworJWxlZnQgPHN0cj4gT1IgQU5ECisldG9r
ZW4gPGF4aXNUeXBlPiBBWElTTkFNRQorJXRva2VuIDxzdHI+IE5PREVUWVBFIFBJIEZVTkNUSU9O
TkFNRSBMSVRFUkFMCisldG9rZW4gPHN0cj4gVkFSSUFCTEVSRUZFUkVOQ0UgTlVNQkVSCisldG9r
ZW4gPHN0cj4gRE9URE9UIFNMQVNIU0xBU0ggTkFNRVRFU1QKKyV0b2tlbiBFUlJPUgorCisldHlw
ZSA8bG9jYXRpb25QYXRoPiBMb2NhdGlvblBhdGgKKyV0eXBlIDxsb2NhdGlvblBhdGg+IEFic29s
dXRlTG9jYXRpb25QYXRoCisldHlwZSA8bG9jYXRpb25QYXRoPiBSZWxhdGl2ZUxvY2F0aW9uUGF0
aAorJXR5cGUgPHN0ZXA+IFN0ZXAKKyV0eXBlIDxheGlzVHlwZT4gQXhpc1NwZWNpZmllcgorJXR5
cGUgPHN0ZXA+IERlc2NlbmRhbnRPclNlbGYKKyV0eXBlIDxzdHI+IE5vZGVUZXN0CisldHlwZSA8
ZXhwcj4gUHJlZGljYXRlCisldHlwZSA8cHJlZExpc3Q+IFByZWRpY2F0ZUxpc3QKKyV0eXBlIDxz
dGVwPiBBYmJyZXZpYXRlZFN0ZXAKKyV0eXBlIDxleHByPiBFeHByCisldHlwZSA8ZXhwcj4gUHJp
bWFyeUV4cHIKKyV0eXBlIDxleHByPiBGdW5jdGlvbkNhbGwKKyV0eXBlIDxhcmdMaXN0PiBBcmd1
bWVudExpc3QKKyV0eXBlIDxleHByPiBBcmd1bWVudAorJXR5cGUgPGV4cHI+IFVuaW9uRXhwcgor
JXR5cGUgPGV4cHI+IFBhdGhFeHByCisldHlwZSA8ZXhwcj4gRmlsdGVyRXhwcgorJXR5cGUgPGV4
cHI+IE9yRXhwcgorJXR5cGUgPGV4cHI+IEFuZEV4cHIKKyV0eXBlIDxleHByPiBFcXVhbGl0eUV4
cHIKKyV0eXBlIDxleHByPiBSZWxhdGlvbmFsRXhwcgorJXR5cGUgPGV4cHI+IEFkZGl0aXZlRXhw
cgorJXR5cGUgPGV4cHI+IE11bHRpcGxpY2F0aXZlRXhwcgorJXR5cGUgPGV4cHI+IFVuYXJ5RXhw
cgorCislJQorCitFeHByOgorICAgIE9yRXhwcgorICAgIHsKKyAgICAgICAgX3RvcEV4cHIgPSAk
MTsKKyAgICB9CisgICAgOworCitMb2NhdGlvblBhdGg6CisgICAgUmVsYXRpdmVMb2NhdGlvblBh
dGgKKyAgICB7CisgICAgICAgICQkLT5tX2Fic29sdXRlID0gZmFsc2U7CisgICAgfQorICAgIHwK
KyAgICBBYnNvbHV0ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAgJCQtPm1fYWJzb2x1dGUg
PSB0cnVlOworICAgIH0KKyAgICA7CisKK0Fic29sdXRlTG9jYXRpb25QYXRoOgorICAgICcvJwor
ICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9jYXRpb25QYXRoOworICAgIH0KKyAgICB8CisgICAg
Jy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoCisgICAgeworICAgICAgICAkJCA9ICQyOworICAgIH0K
KyAgICB8CisgICAgRGVzY2VuZGFudE9yU2VsZiBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorICAgIHsK
KyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQtPm1fc3RlcHMuaW5zZXJ0KDAsICQxKTsKKyAg
ICB9CisgICAgOworCitSZWxhdGl2ZUxvY2F0aW9uUGF0aDoKKyAgICBTdGVwCisgICAgeworICAg
ICAgICAkJCA9IG5ldyBMb2NhdGlvblBhdGg7CisgICAgICAgICQkLT5tX3N0ZXBzLmFwcGVuZCgk
MSk7CisgICAgfQorICAgIHwKKyAgICBSZWxhdGl2ZUxvY2F0aW9uUGF0aCAnLycgU3RlcAorICAg
IHsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCQzKTsKKyAgICB9CisgICAgfAorICAgIFJl
bGF0aXZlTG9jYXRpb25QYXRoIERlc2NlbmRhbnRPclNlbGYgU3RlcAorICAgIHsKKyAgICAgICAg
JCQtPm1fc3RlcHMuYXBwZW5kKCQyKTsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCQzKTsK
KyAgICB9CisgICAgOworCitTdGVwOgorICAgIE5vZGVUZXN0CisgICAgeworICAgICAgICAkJCA9
IG5ldyBTdGVwKFN0ZXA6OkNoaWxkQXhpcywgKiQxKTsKKyAgICAgICAgZGVsZXRlICQxOworICAg
IH0KKyAgICB8CisgICAgTm9kZVRlc3QgUHJlZGljYXRlTGlzdAorICAgIHsKKyAgICAgICAgJCQg
PSBuZXcgU3RlcChTdGVwOjpDaGlsZEF4aXMsICokMSwgKiQyKTsKKyAgICAgICAgZGVsZXRlICQx
OworICAgICAgICBkZWxldGUgJDI7CisgICAgfQorICAgIHwKKyAgICBBeGlzU3BlY2lmaWVyIE5v
ZGVUZXN0CisgICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKCQxLCAqJDIpOworICAgICAgICBk
ZWxldGUgJDI7CisgICAgfQorICAgIHwKKyAgICBBeGlzU3BlY2lmaWVyIE5vZGVUZXN0IFByZWRp
Y2F0ZUxpc3QKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoJDEsICokMiwgICokMyk7Cisg
ICAgICAgIGRlbGV0ZSAkMjsKKyAgICAgICAgZGVsZXRlICQzOworICAgIH0KKyAgICB8CisgICAg
QWJicmV2aWF0ZWRTdGVwCisgICAgOworCitBeGlzU3BlY2lmaWVyOgorICAgIEFYSVNOQU1FCisg
ICAgfAorICAgICdAJworICAgIHsKKyAgICAgICAgJCQgPSBTdGVwOjpBdHRyaWJ1dGVBeGlzOwor
ICAgIH0KKyAgICA7CisKK05vZGVUZXN0OgorICAgIE5BTUVURVNUCisgICAgeworICAgICAgICBj
b25zdCBpbnQgY29sb24gPSAkMS0+ZmluZCgnOicpOworICAgICAgICBpZiAoY29sb24gPiAtMSkg
eworICAgICAgICAgICAgU3RyaW5nIHByZWZpeCgkMS0+bGVmdChjb2xvbikpOworICAgICAgICAg
ICAgWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250
ZXh0KCkucmVzb2x2ZXI7CisgICAgICAgICAgICBpZiAoIXJlc29sdmVyIHx8IHJlc29sdmVyLT5s
b29rdXBOYW1lc3BhY2VVUkkocHJlZml4KS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIGdv
dE5hbWVzcGFjZUVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBZWUFCT1JUOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwKKyAgICBOT0RFVFlQRSAnKCcgJyknCisg
ICAgeworICAgICAgICAkJCA9IG5ldyBEZXByZWNhdGVkU3RyaW5nKCokMSArICIoKSIpOworICAg
IH0KKyAgICB8CisgICAgUEkgJygnICcpJworICAgIHwKKyAgICBQSSAnKCcgTElURVJBTCAnKScK
KyAgICB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9ICokMSArICIgIiArICokMzsKKyAg
ICAgICAgcyA9IHMuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICQkID0gbmV3IERlcHJlY2F0
ZWRTdHJpbmcocyk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICAgICAgZGVsZXRlICQzOworICAg
IH0KKyAgICA7CisKK1ByZWRpY2F0ZUxpc3Q6CisgICAgUHJlZGljYXRlCisgICAgeworICAgICAg
ICAkJCA9IG5ldyBWZWN0b3I8UHJlZGljYXRlKj47CisgICAgICAgICQkLT5hcHBlbmQobmV3IFBy
ZWRpY2F0ZSgkMSkpOworICAgIH0KKyAgICB8CisgICAgUHJlZGljYXRlTGlzdCBQcmVkaWNhdGUK
KyAgICB7CisgICAgICAgICQkLT5hcHBlbmQobmV3IFByZWRpY2F0ZSgkMikpOworICAgIH0KKyAg
ICA7CisKK1ByZWRpY2F0ZToKKyAgICAnWycgRXhwciAnXScKKyAgICB7CisgICAgICAgICQkID0g
JDI7CisgICAgfQorICAgIDsKKworRGVzY2VuZGFudE9yU2VsZjoKKyAgICBTTEFTSFNMQVNICisg
ICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzLCAi
bm9kZSgpIik7CisgICAgfQorICAgIDsKKworQWJicmV2aWF0ZWRTdGVwOgorICAgICcuJworICAg
IHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVwOjpTZWxmQXhpcywgIm5vZGUoKSIpOworICAg
IH0KKyAgICB8CisgICAgRE9URE9UCisgICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKFN0ZXA6
OlBhcmVudEF4aXMsICJub2RlKCkiKTsKKyAgICB9CisgICAgOworCitQcmltYXJ5RXhwcjoKKyAg
ICBWQVJJQUJMRVJFRkVSRU5DRQorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgVmFyaWFibGVSZWZl
cmVuY2UoKiQxKTsKKyAgICAgICAgZGVsZXRlICQxOworICAgIH0KKyAgICB8CisgICAgJygnIEV4
cHIgJyknCisgICAgeworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICB8CisgICAgTElURVJB
TAorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RyaW5nRXhwcmVzc2lvbigqJDEpOworICAgICAg
ICBkZWxldGUgJDE7CisgICAgfQorICAgIHwKKyAgICBOVU1CRVIKKyAgICB7CisgICAgICAgICQk
ID0gbmV3IE51bWJlcigkMS0+dG9Eb3VibGUoKSk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICB9
CisgICAgfAorICAgIEZ1bmN0aW9uQ2FsbAorICAgIDsKKworRnVuY3Rpb25DYWxsOgorICAgIEZV
TkNUSU9OTkFNRSAnKCcgJyknCisgICAgeworICAgICAgICAkJCA9IEZ1bmN0aW9uTGlicmFyeTo6
c2VsZigpLmdldEZ1bmN0aW9uKCQxLT5sYXRpbjEoKSk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAg
ICB9CisgICAgfAorICAgIEZVTkNUSU9OTkFNRSAnKCcgQXJndW1lbnRMaXN0ICcpJworICAgIHsK
KyAgICAgICAgJCQgPSBGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKS5nZXRGdW5jdGlvbigkMS0+bGF0
aW4xKCksICokMyk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICAgICAgZGVsZXRlICQzOworICAg
IH0KKyAgICA7CisKK0FyZ3VtZW50TGlzdDoKKyAgICBBcmd1bWVudAorICAgIHsKKyAgICAgICAg
JCQgPSBuZXcgVmVjdG9yPEV4cHJlc3Npb24qPjsKKyAgICAgICAgJCQtPmFwcGVuZCgkMSk7Cisg
ICAgfQorICAgIHwKKyAgICBBcmd1bWVudExpc3QgJywnIEFyZ3VtZW50CisgICAgeworICAgICAg
ICAkJC0+YXBwZW5kKCQzKTsKKyAgICB9CisgICAgOworCitBcmd1bWVudDoKKyAgICBFeHByCisg
ICAgOworCisKK1VuaW9uRXhwcjoKKyAgICBQYXRoRXhwcgorICAgIHwKKyAgICBVbmlvbkV4cHIg
J3wnIFBhdGhFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBVbmlvbjsKKyAgICAgICAgJCQt
PmFkZFN1YkV4cHJlc3Npb24oJDEpOworICAgICAgICAkJC0+YWRkU3ViRXhwcmVzc2lvbigkMyk7
CisgICAgfQorICAgIDsKKworUGF0aEV4cHI6CisgICAgTG9jYXRpb25QYXRoCisgICAgeworICAg
ICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8CisgICAgRmlsdGVyRXhwcgorICAgIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICB9CisgICAgfAorICAgIEZpbHRlckV4cHIgJy8nIFJlbGF0aXZlTG9j
YXRpb25QYXRoCisgICAgeworICAgICAgICAkMy0+bV9hYnNvbHV0ZSA9IHRydWU7CisgICAgICAg
ICQkID0gbmV3IFBhdGgoc3RhdGljX2Nhc3Q8RmlsdGVyICo+KCQxKSwgJDMpOworICAgIH0KKyAg
ICB8CisgICAgRmlsdGVyRXhwciBEZXNjZW5kYW50T3JTZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRo
CisgICAgeworICAgICAgICAkMy0+bV9zdGVwcy5pbnNlcnQoMCwgJDIpOworICAgICAgICAkMy0+
bV9hYnNvbHV0ZSA9IHRydWU7CisgICAgICAgICQkID0gbmV3IFBhdGgoc3RhdGljX2Nhc3Q8Rmls
dGVyICo+KCQxKSwgJDMpOworICAgIH0KKyAgICA7CisKK0ZpbHRlckV4cHI6CisgICAgUHJpbWFy
eUV4cHIKKyAgICB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwKKyAgICBQcmltYXJ5
RXhwciBQcmVkaWNhdGVMaXN0CisgICAgeworICAgICAgICAkJCA9IG5ldyBGaWx0ZXIoJDEsICok
Mik7CisgICAgfQorICAgIDsKKworT3JFeHByOgorICAgIEFuZEV4cHIKKyAgICB8CisgICAgT3JF
eHByIE9SIEFuZEV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IExvZ2ljYWxPcChMb2dpY2Fs
T3A6Ok9QX09yLCAkMSwgJDMpOworICAgIH0KKyAgICA7CisKK0FuZEV4cHI6CisgICAgRXF1YWxp
dHlFeHByCisgICAgfAorICAgIEFuZEV4cHIgQU5EIEVxdWFsaXR5RXhwcgorICAgIHsKKyAgICAg
ICAgJCQgPSBuZXcgTG9naWNhbE9wKExvZ2ljYWxPcDo6T1BfQW5kLCAkMSwgJDMpOworICAgIH0K
KyAgICA7CisKK0VxdWFsaXR5RXhwcjoKKyAgICBSZWxhdGlvbmFsRXhwcgorICAgIHwKKyAgICBF
cXVhbGl0eUV4cHIgRVFPUCBSZWxhdGlvbmFsRXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcg
RXFUZXN0T3AoJDIsICQxLCAkMyk7CisgICAgfQorICAgIDsKKworUmVsYXRpb25hbEV4cHI6Cisg
ICAgQWRkaXRpdmVFeHByCisgICAgfAorICAgIFJlbGF0aW9uYWxFeHByIFJFTE9QIEFkZGl0aXZl
RXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTnVtZXJpY09wKCQyLCAkMSwgJDMpOworICAg
IH0KKyAgICA7CisKK0FkZGl0aXZlRXhwcjoKKyAgICBNdWx0aXBsaWNhdGl2ZUV4cHIKKyAgICB8
CisgICAgQWRkaXRpdmVFeHByIFBMVVMgTXVsdGlwbGljYXRpdmVFeHByCisgICAgeworICAgICAg
ICAkJCA9IG5ldyBOdW1lcmljT3AoTnVtZXJpY09wOjpPUF9BZGQsICQxLCAkMyk7CisgICAgfQor
ICAgIHwKKyAgICBBZGRpdGl2ZUV4cHIgTUlOVVMgTXVsdGlwbGljYXRpdmVFeHByCisgICAgewor
ICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoTnVtZXJpY09wOjpPUF9TdWIsICQxLCAkMyk7Cisg
ICAgfQorICAgIDsKKworTXVsdGlwbGljYXRpdmVFeHByOgorICAgIFVuYXJ5RXhwcgorICAgIHwK
KyAgICBNdWx0aXBsaWNhdGl2ZUV4cHIgTVVMT1AgVW5hcnlFeHByCisgICAgeworICAgICAgICAk
JCA9IG5ldyBOdW1lcmljT3AoJDIsICQxLCAkMyk7CisgICAgfQorICAgIDsKKworVW5hcnlFeHBy
OgorICAgIFVuaW9uRXhwcgorICAgIHwKKyAgICBNSU5VUyBVbmFyeUV4cHIKKyAgICB7CisgICAg
ICAgICQkID0gbmV3IE5lZ2F0aXZlOworICAgICAgICAkJC0+YWRkU3ViRXhwcmVzc2lvbigkMik7
CisgICAgfQorICAgIDsKKworJSUKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQ
YXRoIHsKKyAgICAKK0V4cHJlc3Npb24qIHBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3Rh
dGVtZW50LCBFeGNlcHRpb25Db2RlJiBjb2RlKQoreworICAgIGdvdE5hbWVzcGFjZUVycm9yID0g
ZmFsc2U7CisKKyAgICBpbml0VG9rZW5pemVyKHN0YXRlbWVudCk7CisgICAgCisgICAgaW50IHBh
cnNlRXJyb3IgPSB5eXBhcnNlKCk7CisgICAgCisgICAgaWYgKHBhcnNlRXJyb3IpIHsKKyAgICAg
ICAgaWYgKGdvdE5hbWVzcGFjZUVycm9yKQorICAgICAgICAgICAgY29kZSA9IE5BTUVTUEFDRV9F
UlI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSBJTlZBTElEX0VYUFJFU1NJT05f
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIF90b3BFeHBy
OworfQorCit9Cit9CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
eHBhdGgvaW1wbC91dGlsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiB1
dGlsLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
CisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIFVUSUxfSAorI2RlZmluZSBVVElMX0gKKworI2luY2x1ZGUgIkRl
cHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
Ik5vZGUuaCIKKworI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBYUGF0aCB7CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxOb2Rl
PiA+IE5vZGVTZXQ7CisgICAgCisvKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaXMg
dGhlIHJvb3Qgbm9kZS4KKyAqLworYm9vbCBpc1Jvb3REb21Ob2RlKE5vZGUgKm5vZGUpOworCisv
KiBAcmV0dXJuIHRoZSAnc3RyaW5nLXZhbHVlJyBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBzcGVjaWZp
ZWQgYnkKKyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoCisgKi8KK1N0cmluZyBzdHJpbmdW
YWx1ZShOb2RlICpub2RlKTsKKworLyogQHJldHVybiBhbGwgYW5jZXN0b3Igbm9kZXMgb2YgdGhl
IGdpdmVuIG5vZGUsIGluIGRvY3VtZW50IG9yZGVyLgorICovCitOb2RlU2V0IGdldENoaWxkcmVu
UmVjdXJzaXZlbHkoTm9kZSAqbm9kZSk7CisKKy8qIEByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4g
bm9kZSBpcyBhIHZhbGlkIGNvbnRleHQgbm9kZQorICovCitib29sIGlzVmFsaWRDb250ZXh0Tm9k
ZShXZWJDb3JlOjpOb2RlICpub2RlKTsKKworfQorfQorCisjZW5kaWYgLy8gVVRJTF9ICisKSW5k
ZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hw
YXRoL2ltcGwvcGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvcGF0
aC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IDIw
MDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjaW5jbHVkZSAicGF0aC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorRmlsdGVyOjpGaWx0ZXIoRXhw
cmVzc2lvbiAqZXhwciwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzKQorICAg
IDogbV9leHByKGV4cHIpLAorICAgIG1fcHJlZGljYXRlcyhwcmVkaWNhdGVzKQoreworfQorCitG
aWx0ZXI6On5GaWx0ZXIoKQoreworICAgIGRlbGV0ZSBtX2V4cHI7CisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fcHJlZGljYXRlcyk7Cit9CisKK1ZhbHVlIEZpbHRlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0
Cit7CisgICAgVmFsdWUgdiA9IG1fZXhwci0+ZXZhbHVhdGUoKTsKKyAgICAKKyAgICBpZiAoIXYu
aXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgaWYgKCFtX3ByZWRpY2F0ZXMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgTE9HKFhQYXRoLCAiSWdub3JpbmcgcHJlZGljYXRlcyBmb3IgZmlsdGVyIHNpbmNl
IGV4cHJlc3Npb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gYSBub2Rlc2V0ISIpOworCisgICAgICAg
IHJldHVybiB2OworICAgIH0KKworICAgIE5vZGVTZXQgaW5Ob2RlcyA9IHYudG9Ob2RlU2V0KCks
IG91dE5vZGVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgb3V0Tm9kZXMuY2xlYXIoKTsKKyAgICAgICAgRXhwcmVzc2lv
bjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5zaXplID0gaW5Ob2Rlcy5zaXplKCk7CisgICAgICAgIEV4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb24gPSAwOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluTm9kZXMuc2l6ZSgpOyBqKyspIHsKKyAg
ICAgICAgICAgIE5vZGUgKm5vZGUgPSBpbk5vZGVzW2pdLmdldCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgPSBub2RlOwor
ICAgICAgICAgICAgKytFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9wcmVkaWNhdGVzW2ldLT5ldmFsdWF0ZSgp
KQorICAgICAgICAgICAgICAgIG91dE5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAg
ICAgICBpbk5vZGVzID0gb3V0Tm9kZXM7CisgICAgfQorCisgICAgcmV0dXJuIFZhbHVlKG91dE5v
ZGVzKTsKK30KKworTG9jYXRpb25QYXRoOjpMb2NhdGlvblBhdGgoKQorICAgIDogbV9hYnNvbHV0
ZShmYWxzZSkKK3sKK30KKworTG9jYXRpb25QYXRoOjp+TG9jYXRpb25QYXRoKCkKK3sKKyAgICBk
ZWxldGVBbGxWYWx1ZXMobV9zdGVwcyk7Cit9CisKK3ZvaWQgTG9jYXRpb25QYXRoOjpvcHRpbWl6
ZSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RlcHMuc2l6ZSgpOyBpKysp
CisgICAgICAgIG1fc3RlcHNbaV0tPm9wdGltaXplKCk7Cit9CisKK1ZhbHVlIExvY2F0aW9uUGF0
aDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWJzb2x1dGUpIHsKKyAgICAgICAg
TE9HKFhQYXRoLCAiRXZhbHVhdGluZyBhYnNvbHV0ZSBwYXRoIGV4cHJlc3Npb24gd2l0aCAlaSBs
b2NhdGlvbiBzdGVwcy5cbiIsIG1fc3RlcHMuc2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBMT0coWFBhdGgsICJFdmFsdWF0aW5nIHJlbGF0aXZlIHBhdGggZXhwcmVzc2lvbiB3aXRoICVp
IGxvY2F0aW9uIHN0ZXBzLlxuIiwgbV9zdGVwcy5zaXplKCkpOworICAgIH0KKworICAgIE5vZGVT
ZXQgaW5Eb21Ob2Rlcywgb3V0RG9tTm9kZXM7CisKKyAgICAvKiBGb3IgYWJzb2x1dGUgbG9jYXRp
b24gcGF0aHMsIHRoZSBjb250ZXh0IG5vZGUgaXMgaWdub3JlZCAtIHRoZQorICAgICAqIGRvY3Vt
ZW50J3Mgcm9vdCBub2RlIGlzIHVzZWQgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBOb2RlICpjb250
ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworICAgIGlmIChtX2Fi
c29sdXRlICYmIGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgCisg
ICAgICAgIGNvbnRleHQgPSBjb250ZXh0LT5vd25lckRvY3VtZW50KCk7CisKKyAgICBpbkRvbU5v
ZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zdGVwcy5zaXplKCk7IGkrKykgeworICAgICAgICBTdGVwICpzdGVwID0gbV9zdGVwc1tpXTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5Eb21Ob2Rlcy5zaXplKCk7IGor
KykgeworICAgICAgICAgICAgTm9kZVNldCBtYXRjaGVzID0gc3RlcC0+ZXZhbHVhdGUoaW5Eb21O
b2Rlc1tqXS5nZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dERvbU5vZGVzLmFw
cGVuZChtYXRjaGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5Eb21Ob2RlcyA9
IG91dERvbU5vZGVzOworICAgICAgICBvdXREb21Ob2Rlcy5jbGVhcigpOworICAgIH0KKworICAg
IHJldHVybiBWYWx1ZShpbkRvbU5vZGVzKTsKK30KKworUGF0aDo6UGF0aChGaWx0ZXIgKmZpbHRl
ciwgTG9jYXRpb25QYXRoICpwYXRoKQorICAgIDogbV9maWx0ZXIoZmlsdGVyKSwKKyAgICBtX3Bh
dGgocGF0aCkKK3sKK30KKworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBtX2ZpbHRlcjsK
KyAgICBkZWxldGUgbV9wYXRoOworfQorCitWYWx1ZSBQYXRoOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gVmFsdWUoKTsKK30KKworfQorfQpJbmRleDogV2ViQ29yZS94cGF0aC9Y
UGF0aFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJYUGF0aFJlc3VsdC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIFhQYXRoOworCitjbGFzcyBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVy
IDogcHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIEludmFsaWRhdGluZ0V2ZW50
TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlICpub2RlLCBYUGF0aFJlc3VsdCAqcmVzdWx0KSAKKyAg
ICAgICAgOiBtX25vZGUobm9kZSksIG1fcmVzdWx0KHJlc3VsdCkgeyB9CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiwgYm9vbCkgeyBtX3Jlc3VsdC0+aW52YWxpZGF0
ZUl0ZXJhdG9yU3RhdGUoKTsgfQorcHJpdmF0ZToKKyAgICBFdmVudFRhcmdldE5vZGUgKm1fbm9k
ZTsKKyAgICBYUGF0aFJlc3VsdCAqbV9yZXN1bHQ7Cit9OworCitYUGF0aFJlc3VsdDo6WFBhdGhS
ZXN1bHQoRXZlbnRUYXJnZXROb2RlKiBldmVudFRhcmdldCwgY29uc3QgVmFsdWUgJnZhbHVlKQor
ICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fZXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpCit7
CisgICAgbV9ldmVudExpc3RlbmVyID0gbmV3IEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIobV9l
dmVudFRhcmdldC5nZXQoKSwgdGhpcyk7CisgICAgbV9ldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0
ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVy
LCBmYWxzZSk7CisgICAgICAgIAorICAgIHN3aXRjaCAobV92YWx1ZS50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBWYWx1ZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IEJPT0xF
QU5fVFlQRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlOjpOdW1iZXI6
CisgICAgICAgICAgICBtX3Jlc3VsdFR5cGUgPSBOVU1CRVJfVFlQRTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZhbHVlOjpTdHJpbmc6CisgICAgICAgICAgICBtX3Jlc3VsdFR5
cGUgPSBTVFJJTkdfVFlQRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVl
OjpOb2Rlc2V0OgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gVU5PUkRFUkVEX05PREVfSVRF
UkFUT1JfVFlQRTsKKyAgICAgICAgICAgIG1fbm9kZVNldFBvc2l0aW9uID0gMDsKKyAgICAgICAg
ICAgIG1fbm9kZVNldCA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7CisgICAgICAgICAgICBtX2ludmFs
aWRJdGVyYXRvclN0YXRlID0gZmFsc2U7CisgICAgfQorfQorCitYUGF0aFJlc3VsdDo6flhQYXRo
UmVzdWx0KCkKK3sKKyAgICBpZiAobV9ldmVudFRhcmdldCkKKyAgICAgICAgbV9ldmVudFRhcmdl
dC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5hbWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVu
dCwgbV9ldmVudExpc3RlbmVyLmdldCgpLCBmYWxzZSk7Cit9CisKK3ZvaWQgWFBhdGhSZXN1bHQ6
OmNvbnZlcnRUbyh1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQU5ZX1RZUEU6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBOVU1CRVJfVFlQRToKKyAgICAgICAgICAgIG1fcmVzdWx0VHlw
ZSA9IHR5cGU7CisgICAgICAgICAgICBtX3ZhbHVlID0gVmFsdWUobV92YWx1ZS50b051bWJlcigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUUklOR19UWVBFOgorICAgICAg
ICAgICAgbV9yZXN1bHRUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBWYWx1ZSht
X3ZhbHVlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQk9P
TEVBTl9UWVBFOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gdHlwZTsKKyAgICAgICAgICAg
IG1fdmFsdWUgPSBWYWx1ZShtX3ZhbHVlLnRvQm9vbGVhbigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEU6CisgICAgICAgIGNh
c2UgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEU6CisgICAgICAgIGNhc2UgVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRToKKyAgICAgICAgY2FzZSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RToKKyAgICAgICAgY2FzZSBBTllfVU5PUkRFUkVEX05PREVfVFlQRToKKyAgICAgICAgY2FzZSBG
SVJTVF9PUkRFUkVEX05PREVfVFlQRToKKyAgICAgICAgICAgIGlmICghbV92YWx1ZS5pc05vZGVz
ZXQoKSkgeworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBUWVBFX0VSUjsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3Jlc3VsdFR5
cGUgPSB0eXBlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HKFhQYXRoLCAiQ2Fu
bm90IGNvbnZlcnQgWFBhdGhSZXN1bHQgdG8gdW5rbm93biB0eXBlICcldSchIiwgdHlwZSk7Cisg
ICAgfQorfQorCit1bnNpZ25lZCBzaG9ydCBYUGF0aFJlc3VsdDo6cmVzdWx0VHlwZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmVzdWx0VHlwZTsKK30KKworZG91YmxlIFhQYXRoUmVzdWx0Ojpu
dW1iZXJWYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0Cit7CisgICAgaWYgKHJlc3VsdFR5
cGUoKSAhPSBOVU1CRVJfVFlQRSkgeworICAgICAgICBleGNlcHRpb25jb2RlID0gVFlQRV9FUlI7
CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQorICAgIHJldHVybiBtX3ZhbHVlLnRvTnVtYmVy
KCk7Cit9CisKK1N0cmluZyBYUGF0aFJlc3VsdDo6c3RyaW5nVmFsdWUoaW50ICZleGNlcHRpb25j
b2RlKSBjb25zdAoreworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gU1RSSU5HX1RZUEUpIHsKKyAg
ICAgICAgZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgfQorICAgIHJldHVybiBtX3ZhbHVlLnRvU3RyaW5nKCk7Cit9CisKK2Jvb2wgWFBhdGhS
ZXN1bHQ6OmJvb2xlYW5WYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0Cit7CisgICAgaWYg
KHJlc3VsdFR5cGUoKSAhPSBCT09MRUFOX1RZUEUpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9
IFRZUEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBtX3Zh
bHVlLnRvQm9vbGVhbigpOworfQorCitOb2RlICpYUGF0aFJlc3VsdDo6c2luZ2xlTm9kZVZhbHVl
KGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IEFO
WV9VTk9SREVSRURfTk9ERV9UWVBFICYmCisgICAgICAgICByZXN1bHRUeXBlKCkgIT0gRklSU1Rf
T1JERVJFRF9OT0RFX1RZUEUpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIAorICAgIE5vZGVTZXQgbm9kZXMgPSBtX3ZhbHVl
LnRvTm9kZVNldCgpOworICAgIGlmIChub2Rlcy5zaXplICgpID09IDApCisgICAgICAgIHJldHVy
biAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG5vZGVzWzBdLmdldCgpOworfQorCit2b2lk
IFhQYXRoUmVzdWx0OjppbnZhbGlkYXRlSXRlcmF0b3JTdGF0ZSgpCit7IAorICAgIG1faW52YWxp
ZEl0ZXJhdG9yU3RhdGUgPSB0cnVlOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50VGFyZ2V0KTsK
KyAgICBBU1NFUlQobV9ldmVudExpc3RlbmVyKTsKKyAgICAKKyAgICBtX2V2ZW50VGFyZ2V0LT5y
ZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50TmFtZXM6OkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCBt
X2V2ZW50TGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKKyAgICAKKyAgICBtX2V2ZW50VGFyZ2V0ID0g
MDsKK30KKworYm9vbCBYUGF0aFJlc3VsdDo6aW52YWxpZEl0ZXJhdG9yU3RhdGUoKSBjb25zdAor
eworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAm
JgorICAgICAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9pbnZhbGlkSXRlcmF0b3JT
dGF0ZTsKK30KKwordW5zaWduZWQgbG9uZyBYUGF0aFJlc3VsdDo6c25hcHNob3RMZW5ndGgoaW50
ICZleGNlcHRpb25jb2RlKSBjb25zdAoreworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRSAmJgorICAgICAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IFRZUEVfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92YWx1ZS50b05vZGVT
ZXQoKS5zaXplKCk7Cit9CisKK05vZGUgKlhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dChFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lU
RVJBVE9SX1RZUEUgJiYKKyAgICAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFKSB7CisgICAgICAgIGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobV9pbnZhbGlkSXRlcmF0b3JTdGF0ZSkgeworICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgaWYgKG1fbm9kZVNldFBvc2l0aW9uICsgMSA+PSBtX25vZGVTZXQuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIE5vZGUgKm5vZGUgPSBtX25vZGVTZXRbbV9ub2RlU2V0UG9zaXRp
b25dLmdldCgpOworICAgIAorICAgIG1fbm9kZVNldFBvc2l0aW9uKys7CisKKyAgICByZXR1cm4g
bm9kZTsKK30KKworTm9kZSAqWFBhdGhSZXN1bHQ6OnNuYXBzaG90SXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCit7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBV
Tk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICYmCisgICAgICAgICByZXN1bHRUeXBlKCkgIT0g
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IFRZ
UEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgTm9kZVNldCBub2Rl
cyA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7CisgICAgaWYgKGluZGV4ID49IG5vZGVzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIG5vZGVzW2luZGV4XS5nZXQoKTsK
K30KKworfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoUmVzdWx0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94
cGF0aC9YUGF0aFJlc3VsdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICog
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBYUGF0aFJlc3VsdF9ICisjZGVmaW5lIFhQYXRoUmVzdWx0X0gKKworI2luY2x1
ZGUgIlNoYXJlZC5oIgorCisjaW5jbHVkZSAiaW1wbC9leHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBOb2RlOwor
Y2xhc3MgRXZlbnRUYXJnZXROb2RlOworY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKworY2xhc3MgWFBh
dGhSZXN1bHQgOiBwdWJsaWMgU2hhcmVkPFhQYXRoUmVzdWx0PgoreworcHVibGljOgorICAgIGVu
dW0gWFBhdGhSZXN1bHRUeXBlIHsKKyAgICAgICAgQU5ZX1RZUEUgPSAwLAorICAgICAgICBOVU1C
RVJfVFlQRSA9IDEsCisgICAgICAgIFNUUklOR19UWVBFID0gMiwKKyAgICAgICAgQk9PTEVBTl9U
WVBFID0gMywKKyAgICAgICAgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQsCisgICAg
ICAgIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNSwKKyAgICAgICAgVU5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSA9IDYsCisgICAgICAgIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
ID0gNywKKyAgICAgICAgQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4LAorICAgICAgICBGSVJT
VF9PUkRFUkVEX05PREVfVFlQRSA9IDkKKyAgICB9OworICAgIAorICAgIFhQYXRoUmVzdWx0KEV2
ZW50VGFyZ2V0Tm9kZSAqZXZlbnRUYXJnZXQsIGNvbnN0IFhQYXRoOjpWYWx1ZSAmdmFsdWUpOwor
ICAgIH5YUGF0aFJlc3VsdCgpOworICAgIAorICAgIHZvaWQgY29udmVydFRvKHVuc2lnbmVkIHNo
b3J0IHR5cGUsIGludCAmZXhjZXB0aW9uY29kZSk7CisKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1
bHRUeXBlKCkgY29uc3Q7CisKKyAgICBkb3VibGUgbnVtYmVyVmFsdWUoaW50ICZleGNlcHRpb25j
b2RlKSBjb25zdDsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUoaW50ICZleGNlcHRpb25jb2RlKSBj
b25zdDsKKyAgICBib29sIGJvb2xlYW5WYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0Owor
ICAgIE5vZGUgKnNpbmdsZU5vZGVWYWx1ZShpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0OworCisg
ICAgYm9vbCBpbnZhbGlkSXRlcmF0b3JTdGF0ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxvbmcg
c25hcHNob3RMZW5ndGgoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdDsKKyAgICBOb2RlICppdGVy
YXRlTmV4dChpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIE5vZGUgKnNuYXBzaG90SXRlbSh1bnNp
Z25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworCisgICAgdm9pZCBpbnZhbGlk
YXRlSXRlcmF0b3JTdGF0ZSgpOworcHJpdmF0ZToKKyAgICBYUGF0aDo6VmFsdWUgbV92YWx1ZTsK
KyAgICB1bnNpZ25lZCBtX25vZGVTZXRQb3NpdGlvbjsKKyAgICBYUGF0aDo6Tm9kZVNldCBtX25v
ZGVTZXQ7CisgICAgdW5zaWduZWQgc2hvcnQgbV9yZXN1bHRUeXBlOworICAgIGJvb2wgbV9pbnZh
bGlkSXRlcmF0b3JTdGF0ZTsKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX2V2ZW50VGFy
Z2V0OworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX2V2ZW50TGlzdGVuZXI7Cit9OworCit9
CisKKyNlbmRpZiAvLyBYUGF0aFJlc3VsdF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhF
eHByZXNzaW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lv
bi5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5pZGwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggeworCisgICAgaW50ZXJmYWNlIFhQYXRoRXhw
cmVzc2lvbiB7CisgICAgICAgIFhQYXRoUmVzdWx0IGV2YWx1YXRlKGluIE5vZGUgY29udGV4dE5v
ZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1bnNpZ25lZCBzaG9ydCB0eXBl
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5SZXN1bHQp
CisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRleDogV2Vi
Q29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0
aC9YUGF0aEV2YWx1YXRvci5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRo
RXZhbHVhdG9yLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4cGF0aCB7CisKKyAgICBpbnRl
cmZhY2UgW0dlbmVyYXRlQ29uc3RydWN0b3IsIENhbkJlQ29uc3RydWN0ZWRdIFhQYXRoRXZhbHVh
dG9yIHsKKyAgICAgICAgWFBhdGhFeHByZXNzaW9uIGNyZWF0ZUV4cHJlc3Npb24oaW4gRE9NU3Ry
aW5nIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIFhQYXRoTlNSZXNvbHZlciByZXNvbHZlcikKKyAgICAgICAgICAgIHJhaXNlcyhjb3JlOjpE
T01FeGNlcHRpb24pOworCisgICAgICAgIFhQYXRoTlNSZXNvbHZlciBjcmVhdGVOU1Jlc29sdmVy
KGluIE5vZGUgbm9kZVJlc29sdmVyKTsKKworICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShp
biBET01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
Tm9kZSBjb250ZXh0Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRo
TlNSZXNvbHZlciByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5z
aWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhS
ZXN1bHQgaW5SZXN1bHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9
OworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4
cGF0aCB7CisKKyAgICBpbnRlcmZhY2UgWFBhdGhOU1Jlc29sdmVyIHsKKyAgICAgICAgRE9NU3Ry
aW5nIGxvb2t1cE5hbWVzcGFjZVVSSShpbiBET01TdHJpbmcgcHJlZml4KTsKKyAgICB9OworfQpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MjAyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyODggQEAKKzIwMDYtMDUtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1h
Yy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM4CisgICAg
ICAgIFN1cHBvcnQgTW96aWxsYSdzIFhQYXRoRXZhbHVhdG9yIG9iamVjdC4KKyAgICAgICAgCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgR2VuZXJhdGUgWFBhdGggZ3Jh
bW1hciwgYW5kIEphdmFTY3JpcHQgd3JhcHBlcnMuCisgICAgICAgIAorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBw
cm9qZWN0CisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcDoK
KyAgICAgICAgKEtKUzo6KToKKyAgICAgICAgKEtKUzo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAg
ICAgSGFuZGxlIHNldHRpbmcgWFBhdGggZXhjZXB0aW9ucy4KKyAgICAgICAgCisgICAgICAgICog
YmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAgICAgIEp1c3QgcmV0dXJuIG5pbCBmb3Igbm93IHdo
ZW4gdHJ5aW5nIHRvIGNyZWF0ZSBhIHdyYXBwZXIgZm9yIAorICAgICAgICBYUGF0aCBuYW1lc3Bh
Y2Ugbm9kZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgQWRkIFhQYXRoIHR5cGVzLiBBbHNvIGFkZCBhICJDYW5CZUNvbnN0cnVjdGVk
IiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAgICAgICAgZm9yIGludGVyZmFjZXMgdGhhdCBjYW4gYmUg
Y29uc3RydWN0ZWQgZGlyZWN0bHkuCisgICAgICAgIAorICAgICAgICAqIGJyaWRnZS9tYWMvV2Vi
Q29yZVBhZ2VCcmlkZ2UubW06CisgICAgICAgIChpbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZO
ZWNlc3NhcnkpOgorICAgICAgICBJbml0aWFsaXplIExvZ1hQYXRoIGNoYW5uZWwuCisgICAgICAg
IAorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVyZSk6CisgICAgICAgIFN1cHBvcnQgInhwYXRo
IiB2ZXJzaW9uICIzLjAiLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgIElnbm9yZSBYUGF0aCBu
YW1lc3BhY2Ugbm9kZXMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNy
ZWF0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZU5TUmVz
b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmV2YWx1YXRlKToKKyAgICAgICAg
TmV3IGZ1bmN0aW9ucyB3aGljaCBjYWxsIGRvd24gdG8gYSBsYXppbHkgY3JlYXRlZCBYUGF0aEV2
YWx1YXRvci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICBBZGQgZnVuY3Rp
b24gZGVjbGFyYXRpb25zLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgor
ICAgICAgICBBZGQgWFBhdGggbWV0aG9kcy4KKyAgICAgICAgCisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Oik6CisgICAgICAgIEFkZCBYUEFUSF9OQU1FU1BB
Q0VfTk9ERSB0eXBlLgorICAgICAgICAKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzdGFydE1hcmt1cCk6CisgICAgICAgIElnbm9yZSBYUGF0aCBuYW1l
c3BhY2Ugbm9kZXMuCisgICAgICAgIAorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAg
ICAgICAgQWRkIGNvbnN0cnVjdG9ycyBmb3IgWFBhdGhFdmFsdWF0b3IgYW5kIFhQYXRoUmVzdWx0
LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgIEFkZCBYUGF0aCBsb2cgY2hhbm5lbAorICAgICAg
ICAKKyAgICAgICAgKiB4cGF0aDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0
b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoRXZhbHVhdG9yOjpjcmVhdGVF
eHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoRXZhbHVhdG9yOjpjcmVhdGVOU1Jl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoRXZhbHVhdG9yOjpldmFsdWF0ZSk6Cisg
ICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjopOgorICAgICAgICAqIHhwYXRoL1hQYXRoRXZhbHVhdG9yLmlkbDogQWRkZWQuCisgICAgICAg
ICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpY
UGF0aEV4cHJlc3Npb246OmNyZWF0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGhFeHByZXNzaW9uOjpldmFsdWF0ZSk6CisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9u
Lmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoRXhwcmVzc2lvbi5pZGw6IEFkZGVkLgor
ICAgICAgICAqIHhwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGhOU1Jlc29sdmVyOjpYUGF0aE5TUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIHhwYXRo
L1hQYXRoTlNSZXNvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0aE5TUmVzb2x2
ZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6OlhQYXRoTmFtZXNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjp+WFBhdGhOYW1lc3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om93bmVyRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGhOYW1lc3BhY2U6Om93bmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aE5hbWVzcGFjZTo6cHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNl
Ojpub2RlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6bmFtZXNwYWNl
VVJJKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpub2RlVHlwZSk6CisgICAg
ICAgICogeHBhdGgvWFBhdGhOYW1lc3BhY2UuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBh
dGhSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludmFsaWRhdGluZ0V2ZW50
TGlzdGVuZXI6OkludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhSZXN1bHQ6OlhQYXRoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVz
dWx0Ojp+WFBhdGhSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OmNvbnZl
cnRUbyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6cmVzdWx0VHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6bnVtYmVyVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhSZXN1bHQ6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVz
dWx0Ojpib29sZWFuVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNpbmds
ZU5vZGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aW52YWxpZGF0ZUl0
ZXJhdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OmludmFsaWRJdGVy
YXRvclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpzbmFwc2hvdExlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aXRlcmF0ZU5leHQpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBzaG90SXRlbSk6CisgICAgICAgICogeHBhdGgv
WFBhdGhSZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6KToK
KyAgICAgICAgKiB4cGF0aC9YUGF0aFJlc3VsdC5pZGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRo
L2ltcGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhHcmFtbWFyLnk6IEFkZGVk
LgorICAgICAgICAqIHhwYXRoL2ltcGwvZXhwcmVzc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlZhbHVlOjpWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
VmFsdWU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjppc05vZGVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjppc0Jvb2xlYW4pOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlZhbHVlOjppc051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VmFsdWU6OmlzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9O
b2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9Cb29sZWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9OdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlZhbHVlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4
cHJlc3Npb246OkV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Np
b246On5FeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpl
dmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6YWRkU3ViRXhw
cmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6b3B0aW1pemUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OnN1YkV4cHJDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6c3ViRXhwcik6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6aXNDb25zdGFudCk6CisgICAgICAgICogeHBhdGgv
aW1wbC9leHByZXNzaW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV2YWx1
YXRpb25Db250ZXh0OjpFdmFsdWF0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VmFsdWU6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC9mdW5jdGlvbnMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpJbnRlcnZhbDo6SW50ZXJ2YWwpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkludGVydmFsOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6SW50ZXJ2YWw6OmFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5j
dGlvbjo6c2V0QXJndW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6
c2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb246OmFyZyk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb246OmFyZ0NvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpGdW5jdGlvbjo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVu
TGFzdDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFzdDo6aXND
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuUG9zaXRpb246OmRvRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blBvc2l0aW9uOjppc0NvbnN0YW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Mb2NhbE5hbWU6OmlzQ29uc3RhbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxvY2FsTmFtZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZXNwYWNlVVJJOjppc0NvbnN0YW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lc3BhY2VVUkk6OmRvRXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWU6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OkZ1bk5hbWU6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1
bkNvdW50Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Db3VudDo6
aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3RyaW5nOjpkb0V2YWx1
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Db25jYXQ6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN0YXJ0c1dpdGg6OmRvRXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbnRhaW5zOjpkb0V2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJpbmdCZWZvcmU6OmRvRXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0FmdGVyOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJpbmc6OmRvRXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1blN0cmluZ0xlbmd0aDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuTm9ybWFsaXplU3BhY2U6OmRvRXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1blRyYW5zbGF0ZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuQm9vbGVhbjo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RnVuTm90Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5U
cnVlOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5UcnVlOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5MYW5nOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5MYW5nOjppc0NvbnN0YW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpGdW5GYWxzZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuRmFsc2U6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkZ1bk51bWJlcjo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vt
Ojpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5GbG9vcjo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ2VpbGluZzo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuUm91bmQ6OmRvRXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uTGlicmFyeTo6c2VsZik6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvbkxpYnJhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uTGlicmFyeTo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAq
IHhwYXRoL2ltcGwvZnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwvcGFy
c2Vkc3RhdGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2Vk
U3RhdGVtZW50OjpQYXJzZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBh
cnNlZFN0YXRlbWVudDo6flBhcnNlZFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6UGFyc2VkU3RhdGVtZW50OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFy
c2VkU3RhdGVtZW50OjpvcHRpbWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2Vk
U3RhdGVtZW50OjpldmFsdWF0ZSk6CisgICAgICAgICAqIHhwYXRoL2ltcGwvcGFyc2Vkc3RhdGVt
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwvcGF0aC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGaWx0ZXI6On5GaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZpbHRl
cjo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjpM
b2NhdGlvblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6fkxv
Y2F0aW9uUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjpvcHRp
bWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjpkb0V2YWx1YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXRoOjpQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpQYXRoOjp+UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGF0aDo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgICogeHBhdGgvaW1wbC9wYXRoLmg6IEFkZGVkLgorICAgICAg
ICAqIHhwYXRoL2ltcGwvcHJlZGljYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6TnVtYmVyOjpOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWJlcjo6
aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtYmVyOjpkb0V2YWx1YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdHJpbmdFeHByZXNzaW9uOjpTdHJpbmdFeHBy
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdHJpbmdFeHByZXNzaW9uOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdHJpbmdFeHByZXNzaW9uOjpkb0V2
YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOZWdhdGl2ZTo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpOdW1lcmljT3ApOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6TnVtZXJpY09wOjpvcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkVxVGVzdE9wOjpFcVRlc3RPcCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6
OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkVxVGVzdE9wOjpvcE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6TG9naWNhbE9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OnNob3J0Q2lyY3VpdE9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkxvZ2ljYWxPcDo6b3BOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpM
b2dpY2FsT3A6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlVuaW9uOjpv
cE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlVuaW9uOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6OlByZWRpY2F0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6UHJlZGljYXRlOjp+UHJlZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpQcmVkaWNhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQ
cmVkaWNhdGU6Om9wdGltaXplKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3ByZWRpY2F0ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RXFUZXN0T3A6Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9n
aWNhbE9wOjopOgorICAgICAgICAqIHhwYXRoL2ltcGwvc3RlcC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OmF4aXNBc1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6U3RlcDo6U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6flN0
ZXApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OmV2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6U3RlcDo6bm9kZVRlc3RNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpT
dGVwOjpvcHRpbWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bmFtZXNwYWNl
RnJvbU5vZGV0ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpwcmltYXJ5Tm9k
ZVR5cGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvc3RlcC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpTdGVwOjopOgorICAgICAgICAqIHhwYXRoL2ltcGwvdG9rZW5pemVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW46OlRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OnNlbGYpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6Y2hhckNhdCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6VG9rZW5pemVyOjppc0F4aXNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpUb2tlbml6ZXI6OmlzTm9kZVR5cGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpU
b2tlbml6ZXI6OmlzT3BlcmF0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpU
b2tlbml6ZXI6OnNraXBXUyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpt
YWtlVG9rZW5BbmRBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6
Om1ha2VJbnRUb2tlbkFuZEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2Vu
aXplcjo6cGVla0FoZWFkSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6
ZXI6OnBlZWtDdXJIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6
bGV4U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6OmxleE51bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW5pemVyOjpsZXhOQ05hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlRva2VuaXplcjo6bGV4UU5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlRva2VuaXplcjo6bmV4dFRva2VuSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpUb2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9r
ZW5pemVyOjp+VG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpUb2tlbml6ZXI6
OnJlc2V0KToKKyAgICAgICAgKHhwYXRoeXlsZXgpOgorICAgICAgICAoaW5pdFRva2VuaXplcik6
CisgICAgICAgICh4cGF0aHl5ZXJyb3IpOgorICAgICAgICAqIHhwYXRoL2ltcGwvdG9rZW5pemVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwvdXRpbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OmlzUm9vdERvbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpnZXRDaGlsZHJlblJl
Y3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjppc1ZhbGlkQ29udGV4dE5vZGUp
OgorICAgICAgICAqIHhwYXRoL2ltcGwvdXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9p
bXBsL3ZhcmlhYmxlcmVmZXJlbmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VmFyaWFibGVSZWZlcmVuY2U6OlZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6VmFyaWFibGVSZWZlcmVuY2U6OmRvRXZhbHVhdGUpOgorICAgICAgICAqIHhw
YXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuaDogQWRkZWQuCisKIDIwMDYtMDUtMDQgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBPbWVy
bmljay4KQEAgLTg0LDYgKzM2OSw3IEBACiAgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6bG9hZFBs
dWdpbik6CiAgICAgICAgIEdldCB0aGUgcGx1Z2luJ3MgRE9NIGVsZW1lbnQgYW5kIHBhc3MgdG8g
Y3JlYXRlUGx1Z2luKCkuCiAKKz4+Pj4+Pj4gLnIxNDIwMgogMjAwNi0wNS0wNCAgRXJpYyBTZWlk
ZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSB0aW1vLgpJbmRl
eDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkocmV2aXNpb24gMTQyMDIp
CisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVs
c0lmTgogICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ0V2ZW50cyk7CiAgICAgaW5pdGlhbGl6
ZUxvZ0NoYW5uZWwoTG9nRWRpdGluZyk7CiAgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nVGV4
dENvbnZlcnNpb24pOworICAgIGluaXRpYWxpemVMb2dDaGFubmVsKExvZ1hQYXRoKTsKIH0KIAog
LSAoaWQpaW5pdApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDE0MjAyKQorKysgV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgbW9k
dWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBOb2RlQ29uc3RydWN0b3IgTm9kZTsKICAg
ICAgICAgYXR0cmlidXRlIE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciBOb2RlRmlsdGVyOwogICAgICAg
ICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIFhQ
YXRoRXZhbHVhdG9yQ29uc3RydWN0b3IgWFBhdGhFdmFsdWF0b3I7CisgICAgICAgIGF0dHJpYnV0
ZSBYUGF0aFJlc3VsdENvbnN0cnVjdG9yIFhQYXRoUmVzdWx0OwogICAgIH07CiAKIH0K
</data>
<flag name="review"
          id="2256"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8124</attachid>
            <date>2006-05-05 07:57:34 -0700</date>
            <delta_ts>2006-05-08 01:43:25 -0700</delta_ts>
            <desc>New iteration</desc>
            <filename>xpath-support-4.txt</filename>
            <type>text/plain</type>
            <size>195164</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0IEBAIEtYQ0xvZ0No
YW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRz
ID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9OwogS1hDTG9nQ2hhbm5l
bCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGggPSAgICAgICAgICAg
ICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsT2ZmIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0xv
Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRlcm4gS1hDTG9nQ2hh
bm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRzOwog
ZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENMb2dDaGFubmVsIExv
Z1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBhdGg7CiAKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxNDIwMikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlwZSBlcSAiTm9kZUxp
c3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0eXBlIGVxICJUZXh0
IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFdmFs
dWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0gZWxzaWYgKCR0eXBl
IGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAkaW1w
bEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUwMSw3ICs1MDUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xhc3NOYW1lID0gIiR7
cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
Y29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFt
ZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigkY2xhc3NOYW1lLCAk
cHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAtIEFkZCBmdW5jdGlv
bnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC04MjQsNyArODI4
LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9y
CiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiRG9j
dW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7CisgICAgICAgICAg
ICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IikgewogICAgIHJldHVybiAi
JHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NzYsNiArODgyLDEyIEBAIHN1YiBUeXBl
Q2FuRmFpbENvbnZlcnNpb24KICAgICAgIHJldHVybiAwOwogICB9IGVsc2lmICgkdHlwZSBlcSAi
RE9NV2luZG93IikgewogICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0
aEV2YWx1YXRvciIpIHsKKyAgICAgIHJldHVybiAwOworICB9IGVsc2lmICgkdHlwZSBlcSAiWFBh
dGhOU1Jlc29sdmVyIikgeworICAgICAgcmV0dXJuIDA7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJY
UGF0aFJlc3VsdCIpIHsKKyAgICAgIHJldHVybiAwOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9u
J3Qga25vdyB3aGV0aGVyIGEgSlMgdmFsdWUgY2FuIGZhaWwgY29udmVyc2lvbiB0byB0eXBlICR0
eXBlLiIKICAgfQpAQCAtOTM2LDcgKzk0OCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAg
cmV0dXJuICJ0b05vZGVGaWx0ZXIoJHZhbHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01X
aW5kb3ciKSB7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwotICAgIHJl
dHVybiAidG9ET01XaW5kb3coJHZhbHVlKSI7CisgICAgcmV0dXJuICJ0b0RPTVdpbmRvdygkdmFs
dWUpIjsgCisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAg
ICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBl
LmgifSA9IDE7CisgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwogICB9IGVsc2UgewogICAg
IGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIEpTIHZhbHVlIG9mIHR5cGUgJHR5cGUu
IgogICB9CkBAIC05NTUsNyArOTcxLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAg
ICAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJzaG9y
dCIgb3IgCiAgICAgICAgICAgICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IKLSAgICAgICAg
ICAgJHR5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAkdHlwZSBlcSAiZmxvYXQiIG9yIAor
ICAgICAgICAgICAkdHlwZSBlcSAiZG91YmxlIikgewogICAgIHJldHVybiAianNOdW1iZXIoJHZh
bHVlKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgbXkgJGNvbnYg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxTdHJpbmdUbyJ9
OwpAQCAtMTA0Miw2ICsxMDU5LDExIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgfSBlbHNpZiAo
JHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVl
KSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iIG9yCisgICAgICAgICAg
ICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCisgICAgICAgICAgICR0eXBlIGVxICJYUGF0
aFJlc3VsdCIpIHsKKyAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CisgICAgcmV0
dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25v
dyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBKUyBWYWx1ZSI7CiAg
IH0KQEAgLTEyNDksNiArMTI3MSw3IEBAIHN1YiBjb25zdHJ1Y3RvckZvcgogICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKICAgICBteSAkcHJvdG9DbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjYW5Db25zdHJ1Y3QgPSBzaGlmdDsKICAg
ICAKIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3MgJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTEyNjEsNyArMTI4NCwxNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
RU9GCisKKyAgICBpZiAoJGNhbkNvbnN0cnVjdCkgeworJGltcGxDb250ZW50IC49IDw8ICJFT0Yi
OworICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHRvSlMo
ZXhlYywgbmV3ICRpbnRlcmZhY2VOYW1lKSk7IH0KK0VPRgorICAgIH0KKworJGltcGxDb250ZW50
IC49IDw8ICJFT0YiOwogfTsKIAogY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfUNvbnN0cnVj
dG9yOjppbmZvID0geyAiJHtpbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yIiwgMCwgJiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yVGFibGUsIDAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCShyZXZpc2lvbiAxNDIwMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1w
bC5oIgorI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CkBAIC0y
OTgsNiArMjk5LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRFeGNlcHRpb24K
ICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9OwogCitzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiSU5WQUxJRF9FWFBSRVNT
SU9OX0VSUiIsCisgICAgIlRZUEVfRVJSIgorfTsKKwogdm9pZCBzZXRET01FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjKQogewogICBpZiAoZWMgPT0gMCB8fCBleGVj
LT5oYWRFeGNlcHRpb24oKSkKQEAgLTMwNyw2ICszMTMsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAgY29uc3QgY2hhciAq
IGNvbnN0ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgCiAgIGludCBu
YW1lVGFibGVTaXplOwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9mZnNldCAmJiBjb2Rl
IDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFuZ2UiOwpAQCAtMzE4
LDEyICszMjYsMjIgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAog
ICAgIGNvZGUgLT0gRXZlbnRFeGNlcHRpb25PZmZzZXQ7CiAgICAgbmFtZVRhYmxlID0gZXZlbnRF
eGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKGV2ZW50RXhjZXB0aW9u
TmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXNbMF0pOworICB9IGVsc2UgaWYgKGNv
ZGUgPj0gWFBhdGhFeGNlcHRpb25PZmZzZXQgJiYgY29kZSA8PSBYUGF0aEV4Y2VwdGlvbk1heCkg
eworICAgICAgLy8gWFBhdGggZXhjZXB0aW9uIGNvZGVzIHN0YXJ0IHdpdGggNTEgYW5kIHdlIGRv
bid0IHdhbnQgNTEgZW1wdHkgZWxlbWVudHMgaW4gdGhlIG5hbWUgYXJyYXkKKyAgICBpbnQgbmFt
ZUluZGV4ID0gY29kZSAtIElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAgdHlwZSA9ICJET00g
WFBhdGgiOworICAgIGNvZGUgLT0gWFBhdGhFeGNlcHRpb25PZmZzZXQ7CisgICAgbmFtZVRhYmxl
ID0geHBhdGhFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHhwYXRo
RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXNbMF0pOworCisgICAg
bmFtZSA9IG5hbWVJbmRleCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVbbmFtZUluZGV4XSA6
IDA7CiAgIH0gZWxzZSB7CiAgICAgbmFtZVRhYmxlID0gZXhjZXB0aW9uTmFtZXM7CiAgICAgbmFt
ZVRhYmxlU2l6ZSA9IHNpemVvZihleGNlcHRpb25OYW1lcykgLyBzaXplb2YoZXhjZXB0aW9uTmFt
ZXNbMF0pOwogICB9CiAKLSAgY29uc3QgY2hhciogbmFtZSA9IGNvZGUgPCBuYW1lVGFibGVTaXpl
ID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKKyAgaWYgKCFuYW1lKQorICAgICAgbmFtZSA9IGNvZGUg
PCBuYW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKIAogICAvLyAxMDAgY2hhcmFj
dGVycyBpcyBhIGJpZyBlbm91Z2ggYnVmZmVyLCBiZWNhdXNlIHRoZXJlIGFyZToKICAgLy8gICAx
MyBjaGFyYWN0ZXJzIGluIHRoZSBtZXNzYWdlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlz
aW9uIDE0MjAyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjM5LDYgKzYzOSw5IEBAIHN0YXRpYyBMaXN0ZW5lck1hcCAqbGlzdGVuZXJNYXA7CiAg
ICAgICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01Ob3RhdGlvbiBjbGFzc107CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDcmVh
dGUgYW4gWFBhdGggb2JqZWN0aXZlIEMgd3JhcHBlcgorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxvY10gX2luaXRXaXRoTm9kZTpp
bXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNDIw
MikKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3Jl
KS9odG1sIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkveHBhdGgKICMK
IAogLlBIT05ZIDogYWxsCkBAIC03Miw2ICs3MywxMCBAQCBhbGwgOiBcCiAgICAgSlNSYW5nZS5o
IFwKICAgICBKU1RleHQuaCBcCiAgICAgSlNVSUV2ZW50LmggXAorICAgIEpTWFBhdGhFdmFsdWF0
b3IuaCBcCisgICAgSlNYUGF0aEV4cHJlc3Npb24uaCBcCisgICAgSlNYUGF0aE5TUmVzb2x2ZXIu
aCBcCisgICAgSlNYUGF0aFJlc3VsdC5oIFwKICAgICBKU1doZWVsRXZlbnQuaCBcCiAgICAgSlNY
TUxIdHRwUmVxdWVzdC5sdXQuaCBcCiAgICAgSlNYTUxTZXJpYWxpemVyLmx1dC5oIFwKQEAgLTc5
LDYgKzg0LDcgQEAgYWxsIDogXAogICAgIFNWR05hbWVzLmNwcCBcCiAgICAgVXNlckFnZW50U3R5
bGVTaGVldHMuaCBcCiAgICAgWExpbmtOYW1lcy5jcHAgXAorICAgIFhQYXRoR3JhbW1hci5jcHAg
XAogICAgIGtqc19jc3MubHV0LmggXAogICAgIGtqc19kb20ubHV0LmggXAogICAgIGtqc19ldmVu
dHMubHV0LmggXApAQCAtMTMwLDYgKzEzNiwxNSBAQCBDU1NHcmFtbWFyLmNwcCA6IGNzcy9DU1NH
cmFtbWFyLnkKIAljYXQgQ1NTR3JhbW1hci5jcHAuaCBDU1NHcmFtbWFyLmhwcCA+IENTU0dyYW1t
YXIuaAogCXJtIC1mIENTU0dyYW1tYXIuY3BwLmggQ1NTR3JhbW1hci5ocHAKIAorIyBYUGF0aCBn
cmFtbWFyCisKK1hQYXRoR3JhbW1hci5jcHAgOiB4cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55CisJ
Ymlzb24gLWQgLXAgeHBhdGh5eSAkPCAtbyAkQAorCXRvdWNoIFhQYXRoR3JhbW1hci5jcHAuaAor
CXRvdWNoIFhQYXRoR3JhbW1hci5ocHAKKwljYXQgWFBhdGhHcmFtbWFyLmNwcC5oIFhQYXRoR3Jh
bW1hci5ocHAgPiBYUGF0aEdyYW1tYXIuaAorCXJtIC1mIFhQYXRoR3JhbW1hci5jcHAuaCBYUGF0
aEdyYW1tYXIuaHBwCisKICMgdXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAogVVNFUl9BR0VOVF9T
VFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVp
cmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIApAQCAtMTgzLDQgKzE5OCw0IEBAIEpTX0JJ
TkRJTkdTX1NDUklQVFMgPSBcCiAjCiAKIEpTJS5oIDogJS5pZGwgJChKU19CSU5ESU5HU19TQ1JJ
UFRTKQotCXBlcmwgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5k
aW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVk
ZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1vdXRwdXRkaXIgLiAkPAorCXBlcmwgLUkkKFdlYkNvcmUp
L2JpbmRpbmdzL3NjcmlwdHMgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsIC0tZ2VuZXJhdG9yIEpTIC0taW5jbHVkZSBkb20gLS1pbmNsdWRlIGh0bWwgLS1p
bmNsdWRlIHhwYXRoIC0tb3V0cHV0ZGlyICAuICQ8CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAx
NDIwMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDYgKzExNCwyMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIE5vZGUgYWRvcHROb2RlKGluIE5v
ZGUgc291cmNlKQogICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisjaWYgWFBB
VEhfU1VQUE9SVAorICAgICAgICAvLyBET00gTGV2ZWwgMyBYUGF0aCAoWFBhdGhFdmFsdWF0b3Ig
aW50ZXJmYWNlKQorICAgICAgICBYUGF0aEV4cHJlc3Npb24gY3JlYXRlRXhwcmVzc2lvbihpbiBE
T01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gWFBhdGhOU1Jlc29sdmVyIHJlc29sdmVyKQorICAgICAgICAgICAgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisKKyAgICAgICAgWFBhdGhOU1Jlc29sdmVyIGNyZWF0ZU5TUmVzb2x2ZXIo
aW4gTm9kZSBub2RlUmVzb2x2ZXIpOworICAgICAgICAKKyAgICAgICAgWFBhdGhSZXN1bHQgZXZh
bHVhdGUoaW4gRE9NU3RyaW5nIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIE5vZGUgY29udGV4dE5vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBYUGF0aE5TUmVzb2x2ZXIgcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFhQYXRoUmVzdWx0IGluUmVzdWx0KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CisKKyNlbmRpZgogICAgICAgICAvLyBDb21tb24gZXh0ZW5zaW9ucwogCiAgICAgICAgIGJvb2xl
YW4gZXhlY0NvbW1hbmQoaW4gRE9NU3RyaW5nIGNvbW1hbmQsIApJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDEwIEBACiAjaW5jbHVkZSAieG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUg
InhtbGh0dHByZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJYUGF0aEV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCiAKICNp
ZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgpAQCAtNTA5LDYgKzUx
Myw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmltcG9ydE5vZGUoTm8KICAgICAgICAg
Y2FzZSBET0NVTUVOVF9UWVBFX05PREU6CiAgICAgICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRf
Tk9ERToKICAgICAgICAgY2FzZSBOT1RBVElPTl9OT0RFOgorICAgICAgICBjYXNlIFhQQVRIX05B
TUVTUEFDRV9OT0RFOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMTExLDQgKzMx
MTYsMzcgQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKICAgICAgICAgZi0+Zmlu
aXNoZWRQYXJzaW5nKCk7CiB9CiAKKyNpZiBYUEFUSF9TVVBQT1JUCitQYXNzUmVmUHRyPFhQYXRo
RXhwcmVzc2lvbj4gRG9jdW1lbnQ6OmNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKCFtX3hwYXRoRXZhbHVhdG9yKQorICAgICAgICBtX3hwYXRoRXZhbHVhdG9yID0gbmV3
IFhQYXRoRXZhbHVhdG9yOworICAgIAorICAgIHJldHVybiBtX3hwYXRoRXZhbHVhdG9yLT5jcmVh
dGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVyLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8
WFBhdGhOU1Jlc29sdmVyPiBEb2N1bWVudDo6Y3JlYXRlTlNSZXNvbHZlcihOb2RlICpub2RlUmVz
b2x2ZXIpCit7CisgICAgaWYgKCFtX3hwYXRoRXZhbHVhdG9yKQorICAgICAgICBtX3hwYXRoRXZh
bHVhdG9yID0gbmV3IFhQYXRoRXZhbHVhdG9yOworICAgIAorICAgIHJldHVybiBtX3hwYXRoRXZh
bHVhdG9yLT5jcmVhdGVOU1Jlc29sdmVyKG5vZGVSZXNvbHZlcik7Cit9CisKK1Bhc3NSZWZQdHI8
WFBhdGhSZXN1bHQ+IERvY3VtZW50OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY29udGV4
dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhO
U1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0KiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFt
X3hwYXRoRXZhbHVhdG9yKQorICAgICAgICBtX3hwYXRoRXZhbHVhdG9yID0gbmV3IFhQYXRoRXZh
bHVhdG9yOworICAgIAorICAgIHJldHVybiBtX3hwYXRoRXZhbHVhdG9yLT5ldmFsdWF0ZShleHBy
ZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2ZXIsIHR5cGUsIHJlc3VsdCwgZWMpOworfQorCisj
ZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAogfQpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNw
cAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6
aGFzRmVhdHVyZSAoY29ucwogICAgICAgICAgICAgfHwgbG93ZXIgPT0gInVpZXZlbnRzIgogICAg
ICAgICAgICAgfHwgbG93ZXIgPT0gInZpZXdzIikKICAgICAgICAgcmV0dXJuIHZlcnNpb24uaXNF
bXB0eSgpIHx8IHZlcnNpb24gPT0gIjIuMCI7CisgICAgaWYgKGxvd2VyID09ICJ4cGF0aCIpCisg
ICAgICAgIHJldHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJzaW9uID09ICIzLjAiOworICAg
IAogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNDIwMikKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0OwogICAgIGNsYXNzIFRva2VuaXpl
cjsKICAgICBjbGFzcyBUcmVlV2Fsa2VyOwotCisjaWYgWFBBVEhfU1VQUE9SVAorICAgIGNsYXNz
IFhQYXRoRXZhbHVhdG9yOworICAgIGNsYXNzIFhQYXRoRXhwcmVzc2lvbjsKKyAgICBjbGFzcyBY
UGF0aE5TUmVzb2x2ZXI7CisgICAgY2xhc3MgWFBhdGhSZXN1bHQ7CisjZW5kaWYKKyAgICAKICNp
ZiBfX0FQUExFX18KICAgICBzdHJ1Y3QgRGFzaGJvYXJkUmVnaW9uVmFsdWU7CiAjZW5kaWYKQEAg
LTU0MSw2ICs1NDcsMjAgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsK
IAorI2lmIFhQQVRIX1NVUFBPUlQKKyAgICAvLyBYUGF0aEV2YWx1YXRvciBtZXRob2RzCisgICAg
UGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIFBhc3NS
ZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZl
cik7CisgICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNv
bnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNS
ZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYUGF0aFJlc3VsdCogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisgICAgCiBw
cm90ZWN0ZWQ6CiAgICAgQ1NTU3R5bGVTZWxlY3RvciAqbV9zdHlsZVNlbGVjdG9yOwogICAgIEZy
YW1lVmlldyAqbV92aWV3OwpAQCAtNzM4LDYgKzc1OCwxMCBAQCBwcml2YXRlOgogICAgIHR5cGVk
ZWYgSGFzaE1hcDxIVE1MRm9ybUVsZW1lbnQqLCBOYW1lVG9JbnB1dE1hcCo+IEZvcm1Ub0dyb3Vw
TWFwOwogICAgIEZvcm1Ub0dyb3VwTWFwIG1fc2VsZWN0ZWRSYWRpb0J1dHRvbnM7CiAgICAgCisj
aWYgWFBBVEhfU1VQUE9SVAorICAgIFJlZlB0cjxYUGF0aEV2YWx1YXRvcj4gbV94cGF0aEV2YWx1
YXRvcjsKKyNlbmRpZgorICAgIAogI2lmIFNWR19TVVBQT1JUCiAgICAgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zKiBtX3N2Z0V4dGVuc2lvbnM7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE0MjAyKQorKysg
V2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHB1Ymxp
YzoKICAgICAgICAgRE9DVU1FTlRfTk9ERSA9IDksCiAgICAgICAgIERPQ1VNRU5UX1RZUEVfTk9E
RSA9IDEwLAogICAgICAgICBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTEsCi0gICAgICAgIE5P
VEFUSU9OX05PREUgPSAxMgorICAgICAgICBOT1RBVElPTl9OT0RFID0gMTIsCisgICAgICAgIFhQ
QVRIX05BTUVTUEFDRV9OT0RFID0gMTMKICAgICB9OwogCiAgICAgTm9kZShEb2N1bWVudCopOwpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE0MjAyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDQ0IEBACiAJCTE0RTgzNzhFMDlGODVENEYwMEI4NUFF
NCAvKiBKU0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEU4Mzc4RDA5Rjg1RDRGMDBCODVBRTQgLyogSlNFdmVudC5oICovOyB9OwogCQkxNEVD
MjY3RjA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVDMjY3RDA5Q0EwN0UwMDBFMUVFRUMg
LyogRXZlbnRUYXJnZXROb2RlLmggKi87IH07CiAJCTE0RUMyNjgwMDlDQTA3RTAwMEUxRUVFQyAv
KiBFdmVudFRhcmdldE5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRFQzI2N0UwOUNBMDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5j
cHAgKi87IH07CisJCTFBNUQ5MzhFMEEwQjlBQ0MwMEIxMTIxRiAvKiBwYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1RDkzOEMwQTBCOUFD
QzAwQjExMjFGIC8qIHBhcnNlci5jcHAgKi87IH07CisJCTFBNUQ5MzhGMEEwQjlBQ0MwMEIxMTIx
RiAvKiBwYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNUQ5MzhEMEEwQjlBQ0MwMEIxMTIxRiAvKiBwYXJzZXIuaCAqLzsgfTsKKwkJMUE3NjI5
ODMwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NTkwQTA3NDBBMDAwOTg5RjVCIC8qIGV4
cHJlc3Npb24uY3BwICovOyB9OworCQkxQTc2Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVz
c2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3
NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMUE3NjI5OEEw
QTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2MTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rp
b25zLmNwcCAqLzsgfTsKKwkJMUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjIw
QTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5oICovOyB9OworCQkxQTc2Mjk4QzBBMDc0MEEw
MDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTYzMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRz
dGF0ZW1lbnQuY3BwICovOyB9OworCQkxQTc2Mjk4RDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vk
c3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTc2Mjk2NDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmggKi87IH07CisJ
CTFBNzYyOThFMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY1MEEwNzQwQTAwMDk4OUY1QiAvKiBw
YXRoLmNwcCAqLzsgfTsKKwkJMUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIHBhdGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY2MEEwNzQw
QTAwMDk4OUY1QiAvKiBwYXRoLmggKi87IH07CisJCTFBNzYyOTkwMEEwNzQwQTAwMDk4OUY1QiAv
KiBwcmVkaWNhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5jcHAgKi87IH07CisJ
CTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBwcmVkaWNhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTY4MEEwNzQwQTAwMDk4OUY1QiAv
KiBwcmVkaWNhdGUuaCAqLzsgfTsKKwkJMUE3NjI5OTIwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5
NjkwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwICovOyB9OworCQkxQTc2Mjk5MzBBMDc0MEEw
MDA5ODlGNUIgLyogc3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIHN0ZXAuaCAqLzsgfTsKKwkJMUE3
NjI5OTcwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkUwQTA3NDBBMDAwOTg5RjVCIC8qIHV0aWwu
Y3BwICovOyB9OworCQkxQTc2Mjk5ODBBMDc0MEEwMDA5ODlGNUIgLyogdXRpbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NkYwQTA3NDBBMDAw
OTg5RjVCIC8qIHV0aWwuaCAqLzsgfTsKKwkJMUE3NjI5OTkwQTA3NDBBMDAwOTg5RjVCIC8qIHZh
cmlhYmxlcmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNzYyOTcwMEEwNzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5j
cHAgKi87IH07CisJCTFBNzYyOTlBMEEwNzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5j
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5
NzEwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVmZXJlbmNlLmggKi87IH07CisJCTFBNzYy
OTlEMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3NTBBMDc0MEEwMDA5ODlGNUIg
LyogWFBhdGhFdmFsdWF0b3IuY3BwICovOyB9OworCQkxQTc2Mjk5RTBBMDc0MEEwMDA5ODlGNUIg
LyogWFBhdGhFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNzYyOTc2MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oICov
OyB9OworCQkxQTc2MjlBMDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTc4MEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwICovOyB9OworCQkxQTc2MjlBMTBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhFeHByZXNzaW9uLmggKi87IH07CisJCTFBNzYyOUEzMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aE5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTc2Mjk3QjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwICovOyB9
OworCQkxQTc2MjlBNDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdDMEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oICovOyB9OworCQkxQTc2MjlBNTBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdEMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVz
b2x2ZXIuY3BwICovOyB9OworCQkxQTc2MjlBNjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jl
c29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2Mjk3RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggKi87IH07CisJCTFB
NzYyOUE4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk4MDBBMDc0MEEwMDA5ODlGNUIg
LyogWFBhdGhSZXN1bHQuY3BwICovOyB9OworCQkxQTc2MjlBOTBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNzYyOTgxMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oICovOyB9OworCQkx
QTc2MjlENTBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOUQzMEEwNzQyNTEwMDk4OUY1
QiAvKiBYUGF0aEdyYW1tYXIuY3BwICovOyB9OworCQkxQTc2MjlENjBBMDc0MjUxMDA5ODlGNUIg
LyogWFBhdGhHcmFtbWFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2MjlENDBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmggKi87IH07
CisJCTFBNzYyQzczMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZCMEEwNzRG
MjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCAqLzsgfTsKKwkJMUE3NjJDNzQwQTA3
NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoRXZhbHVhdG9yLmggKi87IH07CisJCTFBNzYyQzc1MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoRXhwcmVzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2MkM2RDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uY3Bw
ICovOyB9OworCQkxQTc2MkM3NjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZF
MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5oICovOyB9OworCQkxQTc2MkM3
NzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNkYwQTA3NEYyNjAwOTg5RjVC
IC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCAqLzsgfTsKKwkJMUE3NjJDNzgwQTA3NEYyNjAwOTg5
RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3MDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVz
b2x2ZXIuaCAqLzsgfTsKKwkJMUE3NjJDNzkwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3
NjJDNzEwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuY3BwICovOyB9OworCQkxQTc2
MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhSZXN1bHQuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9
OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgfTsKIAkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1
M0Q2IC8qIEhUTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTBBMEJDQjA4NUY2MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmNwcCAqLzsg
fTsKQEAgLTEyNTYsNiArMTI5NCw0OSBAQAogCQkxNEU4Mzc4RDA5Rjg1RDRGMDBCODVBRTQgLyog
SlNFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEVDMjY3RDA5Q0EwN0UwMDBFMUVFRUMgLyog
RXZlbnRUYXJnZXROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50
VGFyZ2V0Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEVDMjY3RTA5Q0Ew
N0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV2ZW50VGFyZ2V0Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNUQ5MzhDMEEwQjlBQ0MwMEIxMTIxRiAvKiBwYXJzZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBNUQ5MzhEMEEwQjlBQ0MwMEIxMTIxRiAvKiBwYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQTc2Mjk1OTBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZXhwcmVzc2lvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTVBMEEwNzQwQTAwMDk4OUY1QiAvKiBl
eHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBleHByZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTYxMEEwNzQwQTAwMDk4OUY1
QiAvKiBmdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IGZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTYyMEEw
NzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2
MzBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZWRzdGF0ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTc2Mjk2NDBBMDc0MEEwMDA5ODlGNUIgLyogcGFyc2Vkc3RhdGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwYXJzZWRzdGF0ZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjUwQTA3NDBBMDAwOTg5RjVC
IC8qIHBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhdGgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2NjBBMDc0MEEwMDA5ODlG
NUIgLyogcGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGF0aC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2NzBBMDc0MEEwMDA5ODlGNUIgLyog
cHJlZGljYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwcmVk
aWNhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2ODBBMDc0MEEw
MDA5ODlGNUIgLyogcHJlZGljYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBwcmVkaWNhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjkwQTA3
NDBBMDAwOTg5RjVCIC8qIHN0ZXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHN0ZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2QTBB
MDc0MEEwMDA5ODlGNUIgLyogc3RlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gc3RlcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2RTBBMDc0MEEw
MDA5ODlGNUIgLyogdXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gdXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTZGMEEwNzQw
QTAwMDk4OUY1QiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTcwMEEwNzQwQTAwMDk4
OUY1QiAvKiB2YXJpYWJsZXJlZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gdmFyaWFibGVyZWZlcmVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHZhcmlhYmxlcmVmZXJlbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTcyMEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aEdyYW1tYXIueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBYUGF0aEdy
YW1tYXIueTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzUwQTA3NDBBMDAw
OTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBYUGF0aEV2YWx1YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyOTc2MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzcwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVh
dG9yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gWFBhdGhFdmFsdWF0b3IuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBh
dGhFeHByZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBY
UGF0aEV4cHJlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3
OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYUGF0aEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUE3NjI5N0EwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lvbi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdCMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVz
cGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhOYW1l
c3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3QzBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFhQYXRoTmFtZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
NzYyOTdEMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoTlNSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5T
UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoTlNSZXNv
bHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3RjBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gWFBh
dGhOU1Jlc29sdmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5ODAw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBYUGF0aFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFBNzYyOTgxMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE3NjI5ODIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gWFBhdGhSZXN1bHQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTc2MjlEMzBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aEdyYW1tYXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MjlENDBBMDc0MjUxMDA5ODlG
NUIgLyogWFBhdGhHcmFtbWFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBY
UGF0aEdyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNkIwQTA3
NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFBhdGhFdmFsdWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQTc2MkM2QzBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0aEV2YWx1YXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2RDBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aEV4cHJlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTWFBhdGhFeHByZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE3NjJDNkUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoRXhwcmVzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM2RjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0
aE5TUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
WFBhdGhOU1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJD
NzAwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoTlNSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQTc2MkM3MTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aFJlc3VsdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzcyMEEwNzRGMjYwMDk4OUY1
QiAvKiBKU1hQYXRoUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1hQYXRoUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOTA2NjBCMDY2
NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJkTWFjLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkyRDkwNjYwQzA2NjVE
OTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2xpcGJvYXJkTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNDc1OEM0
NDMwOEM1RjIxNzAwOUJBRjA1IC8qIEtDYW52YXNQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZhc1BhdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTI2
MTksNiArMjcwMCw3IEBACiAJCQkJRjUyM0QyRjMwMkRFNDQzQjAxODYzNUNBIC8qIHJlbmRlcmlu
ZyAqLywKIAkJCQlBOEMwRjZEQzA4OTcwMUYxMDBCQTUxMTQgLyogV2ViQ29yZStTVkcgKi8sCiAJ
CQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbCAqLywKKwkJCQkxQTc2Mjk1NzBBMDc0
MEEwMDA5ODlGNUIgLyogeHBhdGggKi8sCiAJCQkJNjU2NTgwRUMwOUQxMkIyMDAwMEU2MUQ3IC8q
IERlcml2ZWQgU291cmNlcyAqLywKIAkJCQkwODlDMTY2NUZFODQxMTU4QzAyQUFDMDcgLyogUmVz
b3VyY2VzICovLAogCQkJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdvcmtzICov
LApAQCAtMjY2Miw2ICsyNzQ0LDU0IEBACiAJCQlwYXRoID0gUmVzb3VyY2VzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUE3NjI5NTcwQTA3NDBBMDAwOTg5RjVCIC8qIHhw
YXRoICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQTc2
Mjk1ODBBMDc0MEEwMDA5ODlGNUIgLyogaW1wbCAqLywKKwkJCQkxQTc2Mjk3NTBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuY3BwICovLAorCQkJCTFBNzYyOTc2MEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oICovLAorCQkJCTFBNzYyOTc3MEEwNzQwQTAwMDk4OUY1
QiAvKiBYUGF0aEV2YWx1YXRvci5pZGwgKi8sCisJCQkJMUE3NjI5NzgwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoRXhwcmVzc2lvbi5jcHAgKi8sCisJCQkJMUE3NjI5NzkwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoRXhwcmVzc2lvbi5oICovLAorCQkJCTFBNzYyOTdBMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aEV4cHJlc3Npb24uaWRsICovLAorCQkJCTFBNzYyOTdCMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aE5hbWVzcGFjZS5jcHAgKi8sCisJCQkJMUE3NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoTmFtZXNwYWNlLmggKi8sCisJCQkJMUE3NjI5N0QwQTA3NDBBMDAwOTg5RjVCIC8qIFhQ
YXRoTlNSZXNvbHZlci5jcHAgKi8sCisJCQkJMUE3NjI5N0UwQTA3NDBBMDAwOTg5RjVCIC8qIFhQ
YXRoTlNSZXNvbHZlci5oICovLAorCQkJCTFBNzYyOTdGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aE5TUmVzb2x2ZXIuaWRsICovLAorCQkJCTFBNzYyOTgwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aFJlc3VsdC5jcHAgKi8sCisJCQkJMUE3NjI5ODEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVz
dWx0LmggKi8sCisJCQkJMUE3NjI5ODIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUmVzdWx0Lmlk
bCAqLywKKwkJCSk7CisJCQlwYXRoID0geHBhdGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQkxQTc2Mjk1ODBBMDc0MEEwMDA5ODlGNUIgLyogaW1wbCAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUE3NjI5NTkwQTA3NDBBMDAwOTg5
RjVCIC8qIGV4cHJlc3Npb24uY3BwICovLAorCQkJCTFBNzYyOTVBMEEwNzQwQTAwMDk4OUY1QiAv
KiBleHByZXNzaW9uLmggKi8sCisJCQkJMUE3NjI5NjEwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0
aW9ucy5jcHAgKi8sCisJCQkJMUE3NjI5NjIwQTA3NDBBMDAwOTg5RjVCIC8qIGZ1bmN0aW9ucy5o
ICovLAorCQkJCTFBNzYyOTYzMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuY3Bw
ICovLAorCQkJCTFBNzYyOTY0MEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRzdGF0ZW1lbnQuaCAq
LywKKwkJCQkxQTVEOTM4QzBBMEI5QUNDMDBCMTEyMUYgLyogcGFyc2VyLmNwcCAqLywKKwkJCQkx
QTVEOTM4RDBBMEI5QUNDMDBCMTEyMUYgLyogcGFyc2VyLmggKi8sCisJCQkJMUE3NjI5NjUwQTA3
NDBBMDAwOTg5RjVCIC8qIHBhdGguY3BwICovLAorCQkJCTFBNzYyOTY2MEEwNzQwQTAwMDk4OUY1
QiAvKiBwYXRoLmggKi8sCisJCQkJMUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0
ZS5jcHAgKi8sCisJCQkJMUE3NjI5NjgwQTA3NDBBMDAwOTg5RjVCIC8qIHByZWRpY2F0ZS5oICov
LAorCQkJCTFBNzYyOTY5MEEwNzQwQTAwMDk4OUY1QiAvKiBzdGVwLmNwcCAqLywKKwkJCQkxQTc2
Mjk2QTBBMDc0MEEwMDA5ODlGNUIgLyogc3RlcC5oICovLAorCQkJCTFBNzYyOTZFMEEwNzQwQTAw
MDk4OUY1QiAvKiB1dGlsLmNwcCAqLywKKwkJCQkxQTc2Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyog
dXRpbC5oICovLAorCQkJCTFBNzYyOTcwMEEwNzQwQTAwMDk4OUY1QiAvKiB2YXJpYWJsZXJlZmVy
ZW5jZS5jcHAgKi8sCisJCQkJMUE3NjI5NzEwQTA3NDBBMDAwOTg5RjVCIC8qIHZhcmlhYmxlcmVm
ZXJlbmNlLmggKi8sCisJCQkJMUE3NjI5NzIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoR3JhbW1h
ci55ICovLAorCQkJKTsKKwkJCXBhdGggPSBpbXBsOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIAkJNTU5OThBNTcwNTJCNTk4RjAwMTdBNkMxIC8qIEFjY2Vzc2liaWxpdHkgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjc0Nyw2ICsyODc3
LDE0IEBACiAJCQkJNjVERjMxRjAwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTVGV4dC5oICovLAogCQkJ
CUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwICovLAogCQkJCUE4NjYy
OUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLywKKwkJCQkxQTc2MkM2QjBBMDc0
RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV2YWx1YXRvci5jcHAgKi8sCisJCQkJMUE3NjJDNkMwQTA3
NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuaCAqLywKKwkJCQkxQTc2MkM2RDBBMDc0
RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uY3BwICovLAorCQkJCTFBNzYyQzZFMEEw
NzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5oICovLAorCQkJCTFBNzYyQzZGMEEw
NzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5jcHAgKi8sCisJCQkJMUE3NjJDNzAw
QTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmggKi8sCisJCQkJMUE3NjJDNzEw
QTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuY3BwICovLAorCQkJCTFBNzYyQzcyMEEw
NzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggKi8sCiAJCQkJNjVERjMxRjEwOUQxQ0M2
MDAwMEJFMzI1IC8qIEpTV2hlZWxFdmVudC5jcHAgKi8sCiAJCQkJNjVERjMxRjIwOUQxQ0M2MDAw
MEJFMzI1IC8qIEpTV2hlZWxFdmVudC5oICovLAogCQkJCTY1NjU4MUQ3MDlEMTUwOEQwMDBFNjFE
NyAvKiBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oICovLApAQCAtMjc3Niw2ICsyOTE0LDggQEAKIAkJ
CQk2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNw
cCAqLywKIAkJCQk2NTY1ODFFQTA5RDE1MDhEMDAwRTYxRDcgLyogWExpbmtOYW1lcy5jcHAgKi8s
CiAJCQkJNjU2NTgxRUIwOUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCAqLywKKwkJCQkx
QTc2MjlEMzBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmNwcCAqLywKKwkJCQkxQTc2
MjlENDBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmggKi8sCiAJCQkJMTQyMDExQjUw
QTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSAiRGVyaXZlZCBTb3VyY2VzIjsKQEAgLTQ4NDgsNiArNDk4OCwyNSBAQAogCQkJCTE0
REMwRDM4MDlGRUQwNzMwMDdCMDIzNSAvKiBKU05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
RDBDODI1MDlGRjBFRjUwMDZCMzZEOSAvKiBranNfZG9tbm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyMDExQjcwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5ODQwQTA3NDBBMDAwOTg5RjVCIC8qIGV4cHJlc3Npb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOThCMEEwNzQwQTAwMDk4OUY1QiAvKiBmdW5jdGlv
bnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOThEMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJz
ZWRzdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOThGMEEwNzQwQTAwMDk4OUY1
QiAvKiBwYXRoLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5MTBBMDc0MEEwMDA5ODlGNUIg
LyogcHJlZGljYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2Mjk5MzBBMDc0MEEwMDA5ODlG
NUIgLyogc3RlcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OTgwQTA3NDBBMDAwOTg5RjVC
IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTlBMEEwNzQwQTAwMDk4OUY1QiAv
KiB2YXJpYWJsZXJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OUUwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlB
MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxQTc2MjlBNDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTFBNzYyOUE2MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTFBNzYyOUE5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5RDYwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRo
R3JhbW1hci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjJDNzQwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyQzc2MEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjJD
NzgwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQTc2MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUE1RDkzOEYwQTBCOUFDQzAwQjExMjFGIC8qIHBhcnNlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC01NTY1LDcgKzU3MjQsMjYgQEAKIAkJCQlCQ0ZFOEUzMjBBMDJBMUQzMDAwOUU2
MUQgLyogV2ViQ29yZVRleHRSZW5kZXJlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0REMwRDM3
MDlGRUQwNzMwMDdCMDIzNSAvKiBKU05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMDEx
QjYwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxQTc2Mjk4MzBBMDc0MEEwMDA5ODlGNUIgLyogZXhwcmVzc2lvbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQTc2Mjk4QTBBMDc0MEEwMDA5ODlGNUIgLyogZnVuY3Rpb25zLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOThDMEEwNzQwQTAwMDk4OUY1QiAvKiBwYXJzZWRz
dGF0ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OEUwQTA3NDBBMDAwOTg5RjVC
IC8qIHBhdGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTAwQTA3NDBBMDAwOTg5RjVC
IC8qIHByZWRpY2F0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5MjBBMDc0MEEwMDA5
ODlGNUIgLyogc3RlcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5NzBBMDc0MEEwMDA5
ODlGNUIgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5OTBBMDc0MEEwMDA5
ODlGNUIgLyogdmFyaWFibGVyZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5
OUQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTFBNzYyOUEwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMUE3NjI5QTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUQ1MEEwNzQy
NTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJD
NzMwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUE3NjJDNzUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTFBNzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNS
ZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MkM3OTBBMDc0RjI2MDA5ODlGNUIg
LyogSlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzZCREQxRDBBMDMxQUVC
MDA0REY0QUIgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE1
RDkzOEUwQTBCOUFDQzAwQjExMjFGIC8qIHBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU1
OTAsNiArNTc2OCw3IEBACiAJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKIAkJ
CQkJIiQoREVCVUdfREVGSU5FUykiLAogCQkJCQlTVkdfU1VQUE9SVCwKKwkJCQkJWFBBVEhfU1VQ
UE9SVCwKIAkJCQkpOwogCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCiAJCQkJCUZvcndhcmRp
bmdIZWFkZXJzLApAQCAtNTYyMiw2ICs1ODAxLDcgQEAKIAkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RF
RklOSVRJT05TID0gKAogCQkJCQkiJChERUJVR19ERUZJTkVTKSIsCiAJCQkJCVNWR19TVVBQT1JU
LAorCQkJCQlYUEFUSF9TVVBQT1JULAogCQkJCSk7CiAJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9
ICgKIAkJCQkJRm9yd2FyZGluZ0hlYWRlcnMsCkBAIC01NjU1LDYgKzU4MzUsNyBAQAogCQkJCUdD
Q19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCiAJCQkJCSIkKERFQlVHX0RFRklORVMpIiwK
IAkJCQkJU1ZHX1NVUFBPUlQsCisJCQkJCVhQQVRIX1NVUFBPUlQsCiAJCQkJKTsKIAkJCQlIRUFE
RVJfU0VBUkNIX1BBVEhTID0gKAogCQkJCQlGb3J3YXJkaW5nSGVhZGVycywKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCShyZXZpc2lvbiAxNDIwMikKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDcgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcg
c3RhcnRNYXJrdXAoY29ucwogICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgogICAgICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9SRUZFUkVOQ0VfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpO
T1RBVElPTl9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiAiIjsKSW5kZXg6IFdlYkNvcmUv
eHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBh
dGhOYW1lc3BhY2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVz
cGFjZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhOYW1lc3Bh
Y2UuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1hQ
YXRoTmFtZXNwYWNlOjpYUGF0aE5hbWVzcGFjZShEb2N1bWVudCAqcHRyLCBjb25zdCBTdHJpbmcm
IHByZWZpeCwgY29uc3QgU3RyaW5nJiB1cmkpCisgICAgOiBOb2RlKHB0ciksCisgICAgbV9vd25l
ckRvY3VtZW50KHB0ciksCisgICAgbV9wcmVmaXgocHJlZml4KSwKKyAgICBtX3VyaSh1cmkpCit7
Cit9CisKK1hQYXRoTmFtZXNwYWNlOjp+WFBhdGhOYW1lc3BhY2UoKQoreworfQorCitEb2N1bWVu
dCAqWFBhdGhOYW1lc3BhY2U6Om93bmVyRG9jdW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X293bmVyRG9jdW1lbnQ7Cit9CisKK0VsZW1lbnQgKlhQYXRoTmFtZXNwYWNlOjpvd25lckVsZW1l
bnQoKSBjb25zdAoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IEF0
b21pY1N0cmluZyYgWFBhdGhOYW1lc3BhY2U6OnByZWZpeCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJlZml4OworfQorCitTdHJpbmcgWFBhdGhOYW1lc3BhY2U6Om5vZGVOYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcmVmaXg7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgWFBhdGhO
YW1lc3BhY2U6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJpOworfQor
CitXZWJDb3JlOjpOb2RlOjpOb2RlVHlwZSBYUGF0aE5hbWVzcGFjZTo6bm9kZVR5cGUoKSBjb25z
dAoreworICAgIHJldHVybiBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERTsKK30KKworI2VuZGlm
IC8vIFhQQVRIX1NVUFBPUlQKKworfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVz
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBS
YWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
CisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29s
dmVyLmgiCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisKKyNpbmNsdWRlICJpbXBsL2V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJpbXBsL3V0aWwu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgWFBhdGg7CisgICAg
CitQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gWFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHBy
ZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZl
ciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgWFBhdGhFeHByZXNzaW9uKiBleHByID0gbmV3
IFhQYXRoRXhwcmVzc2lvbjsKKyAgICAKKyAgICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4
dCgpLnJlc29sdmVyID0gcmVzb2x2ZXI7CisgICAgaWYgKCFleHByLT5tX3N0YXRlbWVudC5wYXJz
ZShleHByZXNzaW9uLmRlcHJlY2F0ZWRTdHJpbmcoKSwgZWMpKSB7CisgICAgICAgIGRlbGV0ZSBl
eHByOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGV4cHI7Cit9
CisKK1Bhc3NSZWZQdHI8WFBhdGhSZXN1bHQ+IFhQYXRoRXhwcmVzc2lvbjo6ZXZhbHVhdGUoTm9k
ZSAqY29udGV4dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0ICosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGlmICghaXNWYWxpZENvbnRleHROb2RlKGNvbnRleHROb2RlKSkgeworICAgICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
Tm9kZSAqZXZlbnRUYXJnZXQgPSBjb250ZXh0Tm9kZS0+b3duZXJEb2N1bWVudCgpID8gCisgICAg
ICAgIGNvbnRleHROb2RlLT5vd25lckRvY3VtZW50KCkgOiBjb250ZXh0Tm9kZTsKKyAgICAKKyAg
ICBYUGF0aFJlc3VsdCogcmVzdWx0ID0gbmV3IFhQYXRoUmVzdWx0KHN0YXRpY19jYXN0PEV2ZW50
VGFyZ2V0Tm9kZSo+KGV2ZW50VGFyZ2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGVtZW50LmV2YWx1YXRlKGNvbnRleHROb2RlKSk7CisgICAgCisg
ICAgaWYgKHR5cGUgIT0gWFBhdGhSZXN1bHQ6OkFOWV9UWVBFKSB7CisgICAgICAgIHJlc3VsdC0+
Y29udmVydFRvKHR5cGUsIGVjKTsKKworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CisKKyNlbmRpZiAvLyBY
UEFUSF9TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhOYW1lc3BhY2VfSAorI2RlZmluZSBYUGF0aE5hbWVz
cGFjZV9ICisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVk
ZSAiQXRvbWljU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKK2NsYXNzIERvY3Vt
ZW50OworY2xhc3MgU3RyaW5nSW1wbDsKKworY2xhc3MgWFBhdGhOYW1lc3BhY2UgOiBwdWJsaWMg
V2ViQ29yZTo6Tm9kZQoreworcHVibGljOgorICAgIFhQYXRoTmFtZXNwYWNlKERvY3VtZW50ICpw
dHIsCisgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFN0cmlu
ZyYgdXJpKTsKKyAgICB2aXJ0dWFsIH5YUGF0aE5hbWVzcGFjZSgpOworCisgICAgdmlydHVhbCBE
b2N1bWVudCAqb3duZXJEb2N1bWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgRWxlbWVudCAqb3du
ZXJFbGVtZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6Ok5vZGU6Ok5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgRG9jdW1lbnQgKm1fb3duZXJEb2N1bWVudDsKKyAgICBBdG9taWNTdHJpbmcgbV9w
cmVmaXg7CisgICAgQXRvbWljU3RyaW5nIG1fdXJpOworfTsKKworfQorCisjZW5kaWYgLy8gWFBB
VEhfU1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhOYW1lc3BhY2VfSAorCkluZGV4OiBXZWJDb3Jl
L3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFs
dWF0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhFdmFs
dWF0b3IuaCIKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJYUGF0aE5T
UmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJYUGF0aFJlc3VsdC5oIgorCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorCisjaW5jbHVkZSAiaW1wbC91dGlsLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFhQYXRoOworICAgIAorUGFzc1JlZlB0cjxYUGF0aEV4cHJl
c3Npb24+IFhQYXRoRXZhbHVhdG9yOjpjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHJldHVybiBYUGF0aEV4cHJlc3Npb246OmNyZWF0ZUV4cHJlc3Npb24o
ZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVjKTsKK30KKworUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2
ZXI+IFhQYXRoRXZhbHVhdG9yOjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcikK
K3sKKyAgICByZXR1cm4gbmV3IFhQYXRoTlNSZXNvbHZlcihub2RlUmVzb2x2ZXIpOworfQorCitQ
YXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBYUGF0aEV2YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
UGF0aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghaXNWYWxpZENvbnRl
eHROb2RlKGNvbnRleHROb2RlKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBl
eHByID0gY3JlYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlciwgZWMpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGV4cHItPmV2YWx1YXRl
KGNvbnRleHROb2RlLCB0eXBlLCByZXN1bHQsIGVjKTsKK30KKworfQorCisjZW5kaWYgLy8gWFBB
VEhfU1VQUE9SVApJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFhQQVRIX1NV
UFBPUlQKKworI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIk5vZGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYUGF0aE5TUmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZl
cihOb2RlICpub2RlKQorICAgIDogbV9ub2RlKG5vZGUpCit7Cit9CisKK1N0cmluZyBYUGF0aE5T
UmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcmIHByZWZpeCkKK3sKKyAg
ICAvLyBBcHBhcmVudGx5IE5vZGU6Omxvb2t1cE5hbWVzcGFjZVVSSSBkb2Vzbid0IGRvIHRoaXMu
CisgICAgaWYgKHByZWZpeCA9PSAieG1sIikKKyAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3Lncz
Lm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiOworCisgICAgcmV0dXJuIG1fbm9kZSA/IG1fbm9kZS0+
bG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCkgOiBTdHJpbmcoKTsKK30KKworI2VuZGlmIC8vIFhQ
QVRIX1NVUFBPUlQKKworfQorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aEV4cHJlc3Npb25fSAorI2RlZmlu
ZSBYUGF0aEV4cHJlc3Npb25fSAorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiU2hh
cmVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgImltcGwvcGFy
c2Vkc3RhdGVtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZQoreworY2xhc3MgTm9kZTsKK2NsYXNzIFN0cmluZ0ltcGw7CisKK2NsYXNzIFhQYXRo
TlNSZXNvbHZlcjsKK2NsYXNzIFhQYXRoUmVzdWx0OworCitjbGFzcyBYUGF0aEV4cHJlc3Npb24g
OiBwdWJsaWMgU2hhcmVkPFhQYXRoRXhwcmVzc2lvbj4KK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBl
Yyk7CisKKyAgICBQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBldmFsdWF0ZShOb2RlICpjb250ZXh0
Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0
ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSYgZWMpOworICAgICAgICAKK3ByaXZhdGU6CisgICAgWFBhdGg6OlBhcnNlZFN0YXRlbWVu
dCBtX3N0YXRlbWVudDsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKworI2Vu
ZGlmIC8vIFhQYXRoRXhwcmVzc2lvbl9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1
bHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5pZGwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLwor
Cittb2R1bGUgeHBhdGggeworCisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yXSBY
UGF0aFJlc3VsdCB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFOWV9UWVBFICAgICAg
ICAgICAgICAgICAgICAgICA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5VTUJF
Ul9UWVBFICAgICAgICAgICAgICAgICAgICA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFNUUklOR19UWVBFICAgICAgICAgICAgICAgICAgICA9IDI7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IEJPT0xFQU5fVFlQRSAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgICA9IDQ7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
ICAgICA9IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgICA9IDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFICAgICA9IDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IEFOWV9VTk9SREVSRURfTk9ERV9UWVBFICAgICAgICA9IDg7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IEZJUlNUX09SREVSRURfTk9ERV9UWVBFICAgICAgICA9IDk7CisKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0ICByZXN1bHRUeXBlOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlICAgICAgICAgIG51bWJlclZhbHVlCisgICAgICAgICAg
ICBnZXR0ZXIgcmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAgICAgICAgCisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgc3RyaW5nVmFsdWUKKyAgICAgICAgICAg
IGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGJvb2xlYW4gICAgICAgICBib29sZWFuVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgICAg
ICAgICAgICBzaW5nbGVOb2RlVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBp
bnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgICBzbmFwc2hvdExlbmd0aAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBOb2RlIGl0ZXJhdGVOZXh0KCkKKyAgICAg
ICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgTm9kZSBzbmFwc2hvdEl0ZW0o
aW4gdW5zaWduZWQgbG9uZyBpbmRleCkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJ
UycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhFdmFsdWF0b3JfSAorI2RlZmluZSBYUGF0aEV2
YWx1YXRvcl9ICisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZQoreworY2xhc3MgTm9kZTsKKworY2xhc3MgWFBhdGhFeHByZXNz
aW9uOworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworY2xhc3MgWFBhdGhSZXN1bHQ7CisKK2NvbnN0
IGludCBYUGF0aEV4Y2VwdGlvbk9mZnNldCA9IDQwMDsKK2NvbnN0IGludCBYUGF0aEV4Y2VwdGlv
bk1heCA9IDQ5OTsgICAKKworZW51bSBYUGF0aEV4Y2VwdGlvbkNvZGUgeyBJTlZBTElEX0VYUFJF
U1NJT05fRVJSID0gWFBhdGhFeGNlcHRpb25PZmZzZXQgKyA1MSwgVFlQRV9FUlIgfTsKKworY2xh
c3MgWFBhdGhFdmFsdWF0b3IgOiBwdWJsaWMgU2hhcmVkPFhQYXRoRXZhbHVhdG9yPgoreworcHVi
bGljOgorICAgIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMp
OworICAgIFBhc3NSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUg
Km5vZGVSZXNvbHZlcik7CisgICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUgKmNvbnRleHROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhQYXRoTlNSZXNvbHZlciAqcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYUGF0aFJlc3VsdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKTsKK307CisKK30KKworI2VuZGlmIC8v
IFhQQVRIX1NVUFBPUlQKKworI2VuZGlmIC8vIFhQYXRoRXZhbHVhdG9yX0gKKwpJbmRleDogV2Vi
Q29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L1hQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aE5T
UmVzb2x2ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBP
UgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAq
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5k
ZWYgWFBhdGhOU1Jlc29sdmVyX0gKKyNkZWZpbmUgWFBhdGhOU1Jlc29sdmVyX0gKKworI2lmIFhQ
QVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKK2NsYXNzIE5vZGU7CisKK2NsYXNzIFhQ
YXRoTlNSZXNvbHZlciA6IHB1YmxpYyBTaGFyZWQ8WFBhdGhOU1Jlc29sdmVyPgoreworICAgIHB1
YmxpYzoKKyAgICAgICAgWFBhdGhOU1Jlc29sdmVyKE5vZGUgKm5vZGUpOworCisgICAgICAgIFN0
cmluZyBsb29rdXBOYW1lc3BhY2VVUkkoY29uc3QgU3RyaW5nJiBwcmVmaXgpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgTm9kZSAqbV9ub2RlOworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhf
U1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhOU1Jlc29sdmVyX0gKKwpJbmRleDogV2ViQ29yZS94
cGF0aC9pbXBsL2V4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1w
bC9leHByZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9leHBy
ZXNzaW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
T1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisg
KiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiZXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1
ZGUgPGNtYXRoPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgWFBhdGggeworICAgIAorVmFsdWU6OlZhbHVlKCkKK3sKK30KKworVmFsdWU6
OlZhbHVlKE5vZGUgKnZhbHVlKQorICAgIDogbV90eXBlKE5vZGVzZXQpCit7CisgICAgbV9ub2Rl
c2V0LmFwcGVuZCh2YWx1ZSk7Cit9CisKK1ZhbHVlOjpWYWx1ZShjb25zdCBOb2RlU2V0JiB2YWx1
ZSkKKyAgICA6IG1fdHlwZShOb2Rlc2V0KQorICAgICwgbV9ub2Rlc2V0KHZhbHVlKQoreworfQor
CitWYWx1ZTo6VmFsdWUoYm9vbCB2YWx1ZSkKKyAgICA6IG1fdHlwZShCb29sZWFuKSwKKyAgICBt
X2Jvb2wodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpWYWx1ZShkb3VibGUgdmFsdWUpCisgICAgOiBt
X3R5cGUoTnVtYmVyKSwKKyAgICBtX251bWJlcih2YWx1ZSkKK3sKK30KKworVmFsdWU6OlZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgOiBtX3R5cGUoU3RyaW5nXyksCisgICAgbV9zdHJp
bmcodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpUeXBlIFZhbHVlOjp0eXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV90eXBlOworfQorCitib29sIFZhbHVlOjppc05vZGVzZXQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3R5cGUgPT0gTm9kZXNldDsKK30KKworYm9vbCBWYWx1ZTo6aXNCb29sZWFu
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlID09IEJvb2xlYW47Cit9CisKK2Jvb2wgVmFs
dWU6OmlzTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlID09IE51bWJlcjsKK30K
KworYm9vbCBWYWx1ZTo6aXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGUgPT0g
U3RyaW5nXzsKK30KKworTm9kZVNldCYgVmFsdWU6OnRvTm9kZVNldCgpCit7CisgICAgaWYgKG1f
dHlwZSAhPSBOb2Rlc2V0KSB7CisgICAgICAgIExPRyhYUGF0aCwgIkNhbm5vdCBjb252ZXJ0IGFu
eXRoaW5nIHRvIGEgbm9kZXNldC4iKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbm9kZXNldDsKK30K
KworY29uc3QgTm9kZVNldCYgVmFsdWU6OnRvTm9kZVNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1f
dHlwZSAhPSBOb2Rlc2V0KSB7CisgICAgICAgIExPRyhYUGF0aCwgIkNhbm5vdCBjb252ZXJ0IGFu
eXRoaW5nIHRvIGEgbm9kZXNldC4iKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1fbm9kZXNl
dDsgICAgCit9ICAgIAorCitib29sIFZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAoreworICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgTm9kZXNldDoKKyAgICAgICAgICAgIHJldHVy
biAhbV9ub2Rlc2V0LmlzRW1wdHkoKTsKKyAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAg
ICAgcmV0dXJuIG1fYm9vbDsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICByZXR1
cm4gbV9udW1iZXIgIT0gMDsKKyAgICAgICAgY2FzZSBTdHJpbmdfOgorICAgICAgICAgICAgcmV0
dXJuICFtX3N0cmluZy5pc0VtcHR5KCk7CisgICAgfQorICAgIHJldHVybiBib29sKCk7Cit9CisK
K2RvdWJsZSBWYWx1ZTo6dG9OdW1iZXIoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7
CisgICAgICAgIGNhc2UgTm9kZXNldDoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZSh0b1N0cmlu
ZygpKS50b051bWJlcigpOworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIHJldHVy
biBtX251bWJlcjsKKyAgICAgICAgY2FzZSBTdHJpbmdfOiB7CisgICAgICAgICAgICBib29sIGNh
bkNvbnZlcnQ7CisgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSBtX3N0cmluZy5kZXBy
ZWNhdGVkU3RyaW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7CisKKyAgICAgICAgICAgIGRvdWJs
ZSB2YWx1ZSA9IHMudG9Eb3VibGUoJmNhbkNvbnZlcnQpOworICAgICAgICAgICAgaWYgKGNhbkNv
bnZlcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiBOQU47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBCb29s
ZWFuOgorICAgICAgICAgICAgcmV0dXJuIG1fYm9vbCA/IDEgOiAwOworICAgIH0KKyAgICByZXR1
cm4gZG91YmxlKCk7Cit9CisKK1N0cmluZyBWYWx1ZTo6dG9TdHJpbmcoKSBjb25zdAoreworICAg
IHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgTm9kZXNldDoKKyAgICAgICAgICAgIGlm
IChtX25vZGVzZXQuaXNFbXB0eSgpKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKG1fbm9kZXNl
dFswXS5nZXQoKSk7CisgICAgICAgIGNhc2UgU3RyaW5nXzoKKyAgICAgICAgICAgIHJldHVybiBt
X3N0cmluZzsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBpZiAoaXNuYW4obV9u
dW1iZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiAiTmFOIjsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1fbnVtYmVyID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuICIwIjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzaW5mKG1fbnVtYmVyKSkgeworICAgICAgICAgICAgICAgIGlmIChzaWdu
Yml0KG1fbnVtYmVyKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkluZmluaXR5
IjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLUlu
ZmluaXR5IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIobV9udW1iZXIpOworICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAg
ICByZXR1cm4gbV9ib29sID8gInRydWUiIDogImZhbHNlIjsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitFdmFsdWF0aW9uQ29udGV4dCYgRXhwcmVzc2lvbjo6ZXZhbHVh
dGlvbkNvbnRleHQoKQoreworICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29udGV4dCBldmFsdWF0aW9u
Q29udGV4dDsKKyAgICByZXR1cm4gZXZhbHVhdGlvbkNvbnRleHQ7Cit9CisKK0V4cHJlc3Npb246
OkV4cHJlc3Npb24oKQorICAgIDogbV9jb25zdGFudFZhbHVlKDApCit7Cit9CisKK0V4cHJlc3Np
b246On5FeHByZXNzaW9uKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9zdWJFeHByZXNzaW9u
cyk7CisgICAgCisgICAgZGVsZXRlIG1fY29uc3RhbnRWYWx1ZTsKK30KKworVmFsdWUgRXhwcmVz
c2lvbjo6ZXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmIChtX2NvbnN0YW50VmFsdWUpCisgICAg
ICAgIHJldHVybiAqbV9jb25zdGFudFZhbHVlOworCisgICAgcmV0dXJuIGRvRXZhbHVhdGUoKTsK
K30KKwordm9pZCBFeHByZXNzaW9uOjphZGRTdWJFeHByZXNzaW9uKEV4cHJlc3Npb24qIGV4cHIp
Cit7CisgICAgbV9zdWJFeHByZXNzaW9ucy5hcHBlbmQoZXhwcik7Cit9CisKK3ZvaWQgRXhwcmVz
c2lvbjo6b3B0aW1pemUoKQoreworICAgIGJvb2wgYWxsU3ViRXhwcmVzc2lvbnNDb25zdGFudCA9
IHRydWU7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3ViRXhwcmVzc2lv
bnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc3ViRXhwcmVzc2lvbnNbaV0tPmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIG1fc3ViRXhwcmVzc2lvbnNbaV0tPm9wdGltaXplKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsbFN1YkV4cHJlc3Npb25zQ29uc3RhbnQgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoYWxsU3ViRXhwcmVzc2lvbnNDb25zdGFudCkgeworICAgICAg
ICBtX2NvbnN0YW50VmFsdWUgPSBuZXcgVmFsdWUoZG9FdmFsdWF0ZSgpKTsKKyAgICAgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fc3ViRXhwcmVzc2lvbnMpOworICAgICAgICBtX3N1YkV4cHJlc3Npb25z
LmNsZWFyKCk7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgRXhwcmVzc2lvbjo6c3ViRXhwckNv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdWJFeHByZXNzaW9ucy5zaXplKCk7Cit9CisK
K0V4cHJlc3Npb24qIEV4cHJlc3Npb246OnN1YkV4cHIodW5zaWduZWQgaSkKK3sKKyAgICBBU1NF
UlQoaSA8IHN1YkV4cHJDb3VudCgpKTsKKworICAgIHJldHVybiBtX3N1YkV4cHJlc3Npb25zW2ld
OworfQorCitjb25zdCBFeHByZXNzaW9uKiBFeHByZXNzaW9uOjpzdWJFeHByKHVuc2lnbmVkIGkp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGkgPCBzdWJFeHByQ291bnQoKSk7CisgICAgCisgICAgcmV0
dXJuIG1fc3ViRXhwcmVzc2lvbnNbaV07Cit9CisKK2Jvb2wgRXhwcmVzc2lvbjo6aXNDb25zdGFu
dCgpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3ViRXhwcmVzc2lv
bnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKCFtX3N1YkV4cHJlc3Npb25zW2ldLT5pc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKwpJbmRleDogV2Vi
Q29yZS94cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0
aC9pbXBsL3ByZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwv
cHJlZGljYXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
U1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
CisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJwcmVk
aWNhdGUuaCIKKyNpbmNsdWRlICJmdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisK
KyNpbmNsdWRlICJOb2RlLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAgIAorTnVtYmVyOjpOdW1iZXIoZG91Ymxl
IHZhbHVlKQorICAgIDogbV92YWx1ZSh2YWx1ZSkKK3sKK30KKworYm9vbCBOdW1iZXI6OmlzQ29u
c3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitWYWx1ZSBOdW1iZXI6OmRv
RXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1ZShtX3ZhbHVlKTsKK30KKworU3Ry
aW5nRXhwcmVzc2lvbjo6U3RyaW5nRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IDogbV92YWx1ZSh2YWx1ZSkKK3sKK30KKworYm9vbCBTdHJpbmdFeHByZXNzaW9uOjppc0NvbnN0
YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgU3RyaW5nRXhwcmVz
c2lvbjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKG1fdmFsdWUpOwor
fQorCitWYWx1ZSBOZWdhdGl2ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgcChz
dWJFeHByKDApLT5ldmFsdWF0ZSgpKTsKKyAgICBpZiAoIXAuaXNOdW1iZXIoKSkgeworICAgICAg
ICBMT0coWFBhdGgsICJVbmFyeSBtaW51cyBpcyB1bmRlZmluZWQgZm9yIG5vbi1udW1lcmljIHR5
cGVzLiIpOworICAgICAgICByZXR1cm4gVmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIFZhbHVl
KC1wLnRvTnVtYmVyKCkpOworfQorCitOdW1lcmljT3A6Ok51bWVyaWNPcChpbnQgX29wQ29kZSwg
RXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpIDoKKyAgICBvcENvZGUoX29wQ29kZSkK
K3sKKyAgICBhZGRTdWJFeHByZXNzaW9uKGxocyk7CisgICAgYWRkU3ViRXhwcmVzc2lvbihyaHMp
OworfQorCitWYWx1ZSBOdW1lcmljT3A6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVl
IGxocyhzdWJFeHByKDApLT5ldmFsdWF0ZSgpKTsKKyAgICBWYWx1ZSByaHMoc3ViRXhwcigxKS0+
ZXZhbHVhdGUoKSk7CisgICAgCisgICAgaWYgKCFsaHMuaXNOdW1iZXIoKSB8fCAhcmhzLmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9u
IG5vbi1udW1lcmljIHR5cGVzLiIpOworICAgICAgICByZXR1cm4gVmFsdWUoKTsKKyAgICB9CisK
KyAgICBkb3VibGUgbGVmdFZhbCA9IGxocy50b051bWJlcigpLCByaWdodFZhbCA9IHJocy50b051
bWJlcigpOworCisgICAgc3dpdGNoIChvcENvZGUpIHsKKyAgICAgICAgY2FzZSBPUF9BZGQ6Cisg
ICAgICAgICAgICByZXR1cm4gVmFsdWUobGVmdFZhbCArIHJpZ2h0VmFsKTsKKyAgICAgICAgY2Fz
ZSBPUF9TdWI6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUobGVmdFZhbCAtIHJpZ2h0VmFsKTsK
KyAgICAgICAgY2FzZSBPUF9NdWw6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUobGVmdFZhbCAq
IHJpZ2h0VmFsKTsKKyAgICAgICAgY2FzZSBPUF9EaXY6CisgICAgICAgICAgICBpZiAocmlnaHRW
YWwgPT0gMC4wIHx8IHJpZ2h0VmFsID09IC0wLjApCisgICAgICAgICAgICAgICAgcmV0dXJuIFZh
bHVlKCk7IC8vRGl2aWRlIGJ5IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuIFZhbHVlKGxlZnRWYWwgLyByaWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfTW9kOgor
ICAgICAgICAgICAgaWYgKHJpZ2h0VmFsID09IDAuMCB8fCByaWdodFZhbCA9PSAtMC4wKQorICAg
ICAgICAgICAgICAgIHJldHVybiBWYWx1ZSgpOyAvL0RpdmlkZSBieSAwOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZShyZW1haW5kZXIobGVmdFZhbCwgcmln
aHRWYWwpKTsKKyAgICAgICAgY2FzZSBPUF9HVDoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZSAo
bGVmdFZhbCA+IHJpZ2h0VmFsKTsKKyAgICAgICAgY2FzZSBPUF9HRToKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZSAobGVmdFZhbCA+PSByaWdodFZhbCk7CisgICAgICAgIGNhc2UgT1BfTFQ6Cisg
ICAgICAgICAgICByZXR1cm4gVmFsdWUgKGxlZnRWYWwgPCByaWdodFZhbCk7CisgICAgICAgIGNh
c2UgT1BfTEU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWUgKGxlZnRWYWwgPD0gcmlnaHRWYWwp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICByZXR1
cm4gVmFsdWUoKTsKKyAgICB9Cit9CisKK0VxVGVzdE9wOjpFcVRlc3RPcChpbnQgX29wQ29kZSwg
RXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpIDoKKyAgICBvcENvZGUoX29wQ29kZSkK
K3sKKyAgICBhZGRTdWJFeHByZXNzaW9uKGxocyk7CisgICAgYWRkU3ViRXhwcmVzc2lvbihyaHMp
OworfQorCitWYWx1ZSBFcVRlc3RPcDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUg
bGhzKHN1YkV4cHIoMCktPmV2YWx1YXRlKCkpOworICAgIFZhbHVlIHJocyhzdWJFeHByKDEpLT5l
dmFsdWF0ZSgpKTsKKworICAgIGJvb2wgZXF1YWw7CisgICAgaWYgKGxocy5pc0Jvb2xlYW4oKSB8
fCByaHMuaXNCb29sZWFuKCkpIHsKKyAgICAgICAgZXF1YWwgPSAobGhzLnRvQm9vbGVhbigpID09
IHJocy50b0Jvb2xlYW4oKSk7CisgICAgfSBlbHNlIGlmIChsaHMuaXNOdW1iZXIoKSB8fCByaHMu
aXNOdW1iZXIoKSkgeworICAgICAgICBlcXVhbCA9IChsaHMudG9OdW1iZXIoKSA9PSByaHMudG9O
dW1iZXIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXF1YWwgPSAobGhzLnRvU3RyaW5nKCkg
PT0gcmhzLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIGlmIChvcENvZGUgPT0gT1BfRVEpCisg
ICAgICAgIHJldHVybiBWYWx1ZShlcXVhbCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gVmFs
dWUoIWVxdWFsKTsKK30KKworTG9naWNhbE9wOjpMb2dpY2FsT3AoaW50IF9vcENvZGUsIEV4cHJl
c3Npb24qIGxocywgRXhwcmVzc2lvbiogcmhzKSA6CisgICAgb3BDb2RlKF9vcENvZGUpCit7Cisg
ICAgYWRkU3ViRXhwcmVzc2lvbihsaHMpOworICAgIGFkZFN1YkV4cHJlc3Npb24ocmhzKTsKK30K
KworYm9vbCBMb2dpY2FsT3A6OnNob3J0Q2lyY3VpdE9uKCkgY29uc3QKK3sKKyAgICBpZiAob3BD
b2RlID09IE9QX0FuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvL2ZhbHNlIGFuZCBmb28KKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiB0cnVlOyAgLy90cnVlIG9yIGJhcgorfQorCitib29sIExv
Z2ljYWxPcDo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1YkV4cHIoMCktPmlz
Q29uc3RhbnQoKSAmJgorICAgICAgICAgICBzdWJFeHByKDApLT5ldmFsdWF0ZSgpLnRvQm9vbGVh
bigpID09IHNob3J0Q2lyY3VpdE9uKCk7Cit9CisKK1ZhbHVlIExvZ2ljYWxPcDo6ZG9FdmFsdWF0
ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgbGhzKHN1YkV4cHIoMCktPmV2YWx1YXRlKCkpOworCisg
ICAgLy8gVGhpcyBpcyBub3Qgb25seSBhbiBvcHRpbWl6YXRpb24sIGh0dHA6Ly93d3cudzMub3Jn
L1RSL3hwYXRoCisgICAgLy8gZGljdGF0ZXMgdGhhdCB3ZSBtdXN0IGRvIHNob3J0LWNpcmN1aXQg
ZXZhbHVhdGlvbgorICAgIGJvb2wgbGhzQm9vbCA9IGxocy50b0Jvb2xlYW4oKTsKKyAgICBpZiAo
bGhzQm9vbCA9PSBzaG9ydENpcmN1aXRPbigpKSB7CisgICAgICAgIHJldHVybiBWYWx1ZShsaHNC
b29sKTsKKyAgICB9CisKKyAgICByZXR1cm4gVmFsdWUoc3ViRXhwcigxKS0+ZXZhbHVhdGUoKS50
b0Jvb2xlYW4oKSk7Cit9CisKK1ZhbHVlIFVuaW9uOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAg
ICBWYWx1ZSBsaHMgPSBzdWJFeHByKDApLT5ldmFsdWF0ZSgpOworICAgIFZhbHVlIHJocyA9IHN1
YkV4cHIoMSktPmV2YWx1YXRlKCk7CisgICAgaWYgKCFsaHMuaXNOb2Rlc2V0KCkgfHwgIXJocy5p
c05vZGVzZXQoKSkgeworICAgICAgICBMT0coWFBhdGgsICJVbmlvbiBvcGVyYXRvciAnfCcgd29y
a3Mgb25seSB3aXRoIG5vZGVzZXRzLiIpOworICAgICAgICByZXR1cm4gVmFsdWUoTm9kZVNldCgp
KTsKKyAgICB9CisgICAgCisgICAgTm9kZVNldCBsaHNOb2RlcyA9IGxocy50b05vZGVTZXQoKTsK
KyAgICBOb2RlU2V0IHJoc05vZGVzID0gcmhzLnRvTm9kZVNldCgpOworICAgIE5vZGVTZXQgcmVz
dWx0ID0gbGhzTm9kZXM7CisgICAgCisgICAgSGFzaFNldDxOb2RlKj4gbm9kZXM7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJoc05vZGVzLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIE5vZGUgKm5vZGUgPSByaHNOb2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghbm9kZXMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9k
ZSk7CisgICAgICAgICAgICBub2Rlcy5hZGQobm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgcmV0dXJuIFZhbHVlKHJlc3VsdCk7Cit9CisKK1ByZWRpY2F0ZTo6UHJlZGljYXRlKEV4
cHJlc3Npb24qIGV4cHIpCisgICAgOiBtX2V4cHIoZXhwcikKK3sKK30KKworUHJlZGljYXRlOjp+
UHJlZGljYXRlKCkKK3sKKyAgICBkZWxldGUgbV9leHByOworfQorCitib29sIFByZWRpY2F0ZTo6
ZXZhbHVhdGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2V4cHIgIT0gMCk7CisKKyAgICBWYWx1
ZSByZXN1bHQobV9leHByLT5ldmFsdWF0ZSgpKTsKKworICAgIC8vIGZvb1szXSByZWFsbHkgbWVh
bnMgZm9vW3Bvc2l0aW9uKCk9M10KKyAgICBpZiAocmVzdWx0LmlzTnVtYmVyKCkpIHsKKyAgICAg
ICAgRXhwcmVzc2lvbiogcmVhbEV4cHIgPSBuZXcgRXFUZXN0T3AoRXFUZXN0T3A6Ok9QX0VRLAor
ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkuZ2V0RnVuY3Rp
b24oInBvc2l0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTnVtYmVyKHJlc3Vs
dC50b051bWJlcigpKSk7CisgICAgICAgIHJlc3VsdCA9IHJlYWxFeHByLT5ldmFsdWF0ZSgpOwor
ICAgICAgICBkZWxldGUgcmVhbEV4cHI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC50b0Jv
b2xlYW4oKTsKK30KKwordm9pZCBQcmVkaWNhdGU6Om9wdGltaXplKCkKK3sKKyAgICBtX2V4cHIt
Pm9wdGltaXplKCk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6
IFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9p
bXBsL3BhdGguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9wYXRoLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBwYXRoLmggLSBDb3B5cmlnaHQgMjAw
NSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQ
YXRoX1BhdGhfSAorI2RlZmluZSBYUGF0aF9QYXRoX0gKKworI2lmIFhQQVRIX1NVUFBPUlQKKwor
I2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJzdGVwLmgiCisKKyNpbmNsdWRlIDxr
eG1sY29yZS9WZWN0b3IuaD4KKworZXh0ZXJuIGludCB4cGF0aHl5cGFyc2Uodm9pZCopOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2NsYXNzIEZp
bHRlciA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgRmlsdGVyKEV4cHJlc3Np
b24qIGV4cHIsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiYgcHJlZGljYXRlcyA9IFZlY3RvcjxQ
cmVkaWNhdGUqPigpKTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXIoKTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKworICAgIEV4cHJlc3Npb24qIG1fZXhw
cjsKKyAgICBWZWN0b3I8UHJlZGljYXRlKj4gbV9wcmVkaWNhdGVzOworfTsKKworY2xhc3MgTG9j
YXRpb25QYXRoIDogcHVibGljIEV4cHJlc3Npb24KK3sKK2ZyaWVuZCBpbnQgOjp4cGF0aHl5cGFy
c2Uodm9pZCopOworcHVibGljOgorICAgIExvY2F0aW9uUGF0aCgpOworICAgIHZpcnR1YWwgfkxv
Y2F0aW9uUGF0aCgpOworCisgICAgdm9pZCBvcHRpbWl6ZSgpOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgVmVjdG9yPFN0ZXAqPiBtX3N0
ZXBzOworICAgIGJvb2wgbV9hYnNvbHV0ZTsKK307CisKK2NsYXNzIFBhdGggOiBwdWJsaWMgRXhw
cmVzc2lvbgoreworcHVibGljOgorICAgIFBhdGgoRmlsdGVyICpmaWx0ZXIsIExvY2F0aW9uUGF0
aCAqcGF0aCk7CisgICAgdmlydHVhbCB+UGF0aCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwg
VmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworCisgICAgRmlsdGVyICptX2ZpbHRlcjsKKyAgICBM
b2NhdGlvblBhdGggKm1fcGF0aDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKworI2VuZGlmIC8vIFhQYXRoX1BhdGhfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
cGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlci5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IE1ha3NpbSBPcmxvdmljaCA8bWFr
c2ltQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhfUGFyc2VyX0gKKyNkZWZp
bmUgWFBhdGhfUGFyc2VyX0gKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAic3RlcC5o
IgorI2luY2x1ZGUgInBhdGguaCIKKyNpbmNsdWRlICJwcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJl
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgWFBhdGggeworCitzdHJ1Y3QgVG9rZW4KK3sKKyAgICBpbnQgICAgIHR5cGU7Cisg
ICAgU3RyaW5nIHZhbHVlOworICAgIGludCAgICAgaW50VmFsdWU7IC8vMCBpZiBub3Qgc2V0Cisg
ICAgCisgICAgVG9rZW4oaW50IF90eXBlKTogdHlwZShfdHlwZSksIGludFZhbHVlKDApIHt9Cisg
ICAgVG9rZW4oaW50IF90eXBlLCBTdHJpbmcgX3ZhbHVlKTogdHlwZShfdHlwZSksIHZhbHVlKF92
YWx1ZSkge30KKyAgICBUb2tlbihpbnQgX3R5cGUsIGludCAgICAgX3ZhbHVlKTogdHlwZShfdHlw
ZSksIGludFZhbHVlKF92YWx1ZSkge30KK307CisKK2NsYXNzIFBhcnNlcgoreworcHJpdmF0ZToK
KyAgICBzdGF0aWMgUGFyc2VyKiBjdXJyZW50UGFyc2VyOworICAgIAorICAgIHVuc2lnbmVkIG1f
bmV4dFBvczsKKyAgICBTdHJpbmcgbV9kYXRhOworICAgIGludCBtX2xhc3RUb2tlblR5cGU7Cisg
ICAgCisgICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT4qIHNfYXhpc05h
bWVzRGljdDsKKyAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+KiBzX25vZGVUeXBlTmFtZXNEaWN0
OworICAgIAorICAgIGVudW0gWE1MQ2F0IHsKKyAgICAgICAgTmFtZVN0YXJ0LAorICAgICAgICBO
YW1lQ29udCwKKyAgICAgICAgTm90UGFydE9mTmFtZQorICAgIH07CisgICAgCisgICAgWE1MQ2F0
IGNoYXJDYXQoUUNoYXIgYUNoYXIpOworICAgIAorICAgIGJvb2wgaXNBeGlzTmFtZShTdHJpbmcg
bmFtZSwgU3RlcDo6QXhpc1R5cGUgJnR5cGUpOworICAgIGJvb2wgaXNOb2RlVHlwZU5hbWUoU3Ry
aW5nIG5hbWUpOworICAgIGJvb2wgaXNPcGVyYXRvckNvbnRleHQoKTsKKyAgICAKKyAgICB2b2lk
ICBza2lwV1MoKTsKKyAgICBUb2tlbiBtYWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQg
YWR2YW5jZSA9IDEpOworICAgIFRva2VuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUs
IGludCB2YWwsIGludCBhZHZhbmNlID0gMSk7CisgICAgY2hhciAgcGVla0FoZWFkSGVscGVyKCk7
CisgICAgY2hhciAgcGVla0N1ckhlbHBlcigpOworICAgIAorICAgIFRva2VuIGxleFN0cmluZygp
OworICAgIFRva2VuIGxleE51bWJlcigpOworICAgIFRva2VuIGxleE5DTmFtZSgpOworICAgIFRv
a2VuIGxleFFOYW1lKCk7CisgICAgCisgICAgVG9rZW4gbmV4dFRva2VuKCk7CisgICAgVG9rZW4g
bmV4dFRva2VuSW50ZXJuYWwoKTsKKyAgICAKKyAgICBQYXJzZXIoY29uc3QgUGFyc2VyICZyaHMp
OyAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkCisgICAgUGFyc2VyICZvcGVyYXRvcj0oY29u
c3QgUGFyc2VyICZyaHMpOyAgICAgICAvLyBkaXNhYmxlZAorICAgIAorICAgIHZvaWQgcmVzZXQo
Y29uc3QgU3RyaW5nJiBkYXRhKTsKK3B1YmxpYzoKKyAgICBQYXJzZXIoKTsKKyAgICAKKyAgICBF
eHByZXNzaW9uKiBwYXJzZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0
aW9uQ29kZSYgY29kZSk7CisKKyAgICBzdGF0aWMgUGFyc2VyKiBjdXJyZW50KCkgeyByZXR1cm4g
Y3VycmVudFBhcnNlcjsgfQorICAgICAgICAgIAorICAgIGludCBsZXgodm9pZCogX3l5bHZhbCk7
CisKKyAgICBFeHByZXNzaW9uKiBtX3RvcEV4cHI7CisgICAgYm9vbCBtX2dvdE5hbWVzcGFjZUVy
cm9yOworfTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS94cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9T
VVBQT1JUCisKKyNpbmNsdWRlICJwYXJzZWRzdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJwYXRoLmgi
CisjaW5jbHVkZSAicGFyc2VyLmgiCisKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggewor
CitQYXJzZWRTdGF0ZW1lbnQ6OlBhcnNlZFN0YXRlbWVudCgpCisgICAgOiBtX2V4cHIoMCkKK3sK
K30KKworUGFyc2VkU3RhdGVtZW50Ojp+UGFyc2VkU3RhdGVtZW50KCkKK3sKKyAgICBkZWxldGUg
bV9leHByOworfQorCitib29sIFBhcnNlZFN0YXRlbWVudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBz
dGF0ZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFBhcnNlciB0OworICAgIAorICAg
IGRlbGV0ZSBtX2V4cHI7CisgICAgCisgICAgbV9leHByID0gdC5wYXJzZVN0YXRlbWVudChzdGF0
ZW1lbnQsIGVjKTsKKyAgICAKKyAgICByZXR1cm4gKG1fZXhwciAhPSAwKTsKK30KKwordm9pZCBQ
YXJzZWRTdGF0ZW1lbnQ6Om9wdGltaXplKCkKK3sKKyAgICBpZiAoIW1fZXhwcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9leHByLT5vcHRpbWl6ZSgpOworfQorCitWYWx1ZSBQYXJzZWRTdGF0
ZW1lbnQ6OmV2YWx1YXRlKE5vZGUgKmNvbnRleHQpIGNvbnN0Cit7CisgICAgRXhwcmVzc2lvbjo6
ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gY29udGV4dDsKKyAgICByZXR1cm4gbV9leHByLT5l
dmFsdWF0ZSgpOworfQorCit9Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCkluZGV4OiBX
ZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhf
U1VQUE9SVAorCisjaW5jbHVkZSAidmFyaWFibGVyZWZlcmVuY2UuaCIKKworI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7
CisgICAgCitWYXJpYWJsZVJlZmVyZW5jZTo6VmFyaWFibGVSZWZlcmVuY2UoY29uc3QgU3RyaW5n
JiBuYW1lKQorICAgIDogbV9uYW1lKG5hbWUpCit7Cit9CisKK2Jvb2wgVmFyaWFibGVSZWZlcmVu
Y2U6OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUg
VmFyaWFibGVSZWZlcmVuY2U6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+KiBiaW5kaW5ncyA9ICZldmFsdWF0aW9uQ29udGV4dCgpLnZhcmlhYmxlQmlu
ZGluZ3M7CisgICAgaWYgKCFiaW5kaW5ncy0+Y29udGFpbnMobV9uYW1lKSkKKyAgICAgICAgLy8g
RklYTUUgV2hhdCB0byBkbyBpZiBhbiB1bmtub3duIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQ/Cisg
ICAgICAgIHJldHVybiBWYWx1ZSgiIik7CisKKyAgICByZXR1cm4gVmFsdWUoYmluZGluZ3MtPmdl
dChtX25hbWUpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIFhQ
QVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9leHByZXNzaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL2V4cHJlc3Npb24uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUveHBhdGgvaW1wbC9leHByZXNzaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogZXhwcmVzc2lvbi5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisg
KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aF9FeHByZXNzaW9u
X0gKKyNkZWZpbmUgWFBhdGhfRXhwcmVzc2lvbl9ICisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNp
bmNsdWRlICJ1dGlsLmgiCisKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8a3ht
bGNvcmUvSGFzaE1hcC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworCituYW1l
c3BhY2UgWFBhdGggeworICAgICAgICAKK3N0cnVjdCBFdmFsdWF0aW9uQ29udGV4dAoreworICAg
IEV2YWx1YXRpb25Db250ZXh0KCkgOiBub2RlKDApLCBzaXplKDApLCBwb3NpdGlvbigwKSwgcmVz
b2x2ZXIoMCkgeyB9CisKKyAgICBXZWJDb3JlOjpOb2RlICpub2RlOworICAgIHVuc2lnbmVkIGxv
bmcgc2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nIHBvc2l0aW9uOworICAgIEhhc2hNYXA8V2ViQ29y
ZTo6U3RyaW5nLCBXZWJDb3JlOjpTdHJpbmc+IHZhcmlhYmxlQmluZGluZ3M7CisKKyAgICAvKiBU
aGUgZnVuY3Rpb24gbGlicmFyeSBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlIHRocm91Z2gKKyAgICAg
KiBGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKQorICAgICAqLworICAgIFdlYkNvcmU6OlhQYXRoTlNS
ZXNvbHZlciAqcmVzb2x2ZXI7Cit9OworCitjbGFzcyBWYWx1ZQoreworcHVibGljOgorICAgIGVu
dW0gVHlwZSB7CisgICAgICAgIE5vZGVzZXQsIEJvb2xlYW4sIE51bWJlciwgU3RyaW5nXworICAg
IH07CisKKyAgICBWYWx1ZSgpOworICAgIGV4cGxpY2l0IFZhbHVlKE5vZGUgKnZhbHVlKTsKKyAg
ICBleHBsaWNpdCBWYWx1ZShjb25zdCBOb2RlU2V0JiB2YWx1ZSk7CisgICAgZXhwbGljaXQgVmFs
dWUoYm9vbCB2YWx1ZSk7CisgICAgZXhwbGljaXQgVmFsdWUoZG91YmxlIHZhbHVlKTsKKyAgICBl
eHBsaWNpdCBWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworICAgIFR5cGUgdHlwZSgpIGNv
bnN0OworICAgIGJvb2wgaXNOb2Rlc2V0KCkgY29uc3Q7CisgICAgYm9vbCBpc0Jvb2xlYW4oKSBj
b25zdDsKKyAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1N0cmluZygpIGNv
bnN0OworCisgICAgTm9kZVNldCYgdG9Ob2RlU2V0KCk7CisgICAgY29uc3QgTm9kZVNldCYgdG9O
b2RlU2V0KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKKyAgICBk
b3VibGUgdG9OdW1iZXIoKSBjb25zdDsKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBOb2RlU2V0IG1fbm9kZXNldDsKKyAgICBi
b29sIG1fYm9vbDsKKyAgICBkb3VibGUgbV9udW1iZXI7CisgICAgU3RyaW5nIG1fc3RyaW5nOwor
fTsKKworY2xhc3MgRXhwcmVzc2lvbgoreworcHVibGljOgorICAgIHN0YXRpYyBFdmFsdWF0aW9u
Q29udGV4dCYgZXZhbHVhdGlvbkNvbnRleHQoKTsKKworICAgIEV4cHJlc3Npb24oKTsKKyAgICB2
aXJ0dWFsIH5FeHByZXNzaW9uKCk7CisgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0
OworCisgICAgdm9pZCBhZGRTdWJFeHByZXNzaW9uKEV4cHJlc3Npb24qIGV4cHIpOworICAgIHZv
aWQgb3B0aW1pemUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitw
cm90ZWN0ZWQ6CisgICAgdW5zaWduZWQgaW50IHN1YkV4cHJDb3VudCgpIGNvbnN0OworICAgIEV4
cHJlc3Npb24qIHN1YkV4cHIodW5zaWduZWQgaSk7CisgICAgY29uc3QgRXhwcmVzc2lvbiogc3Vi
RXhwcih1bnNpZ25lZCBpKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdCA9IDA7CisKKyAgICBWZWN0b3I8RXhwcmVzc2lvbio+IG1fc3ViRXhw
cmVzc2lvbnM7CisgICAgVmFsdWUgKm1fY29uc3RhbnRWYWx1ZTsKK307CisKK30KK30KKworI2Vu
ZGlmIC8vIFhQQVRIX1NVUFBPUlQKKworI2VuZGlmIC8vIEVYUFJFU1NJT05fSAorCkluZGV4OiBX
ZWJDb3JlL3hwYXRoL2ltcGwvcHJlZGljYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0
aC9pbXBsL3ByZWRpY2F0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3By
ZWRpY2F0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIHByZWRpY2F0
ZS5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5E
IEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgor
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI2lmbmRlZiBYUGF0aF9QcmVkaWNhdGVfSAorI2RlZmluZSBYUGF0aF9QcmVkaWNh
dGVfSAorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiZXhwcmVzc2lvbi5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2NsYXNzIE51
bWJlciA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgTnVtYmVyKGRvdWJsZSB2
YWx1ZSk7CisKKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKworICAgIGRvdWJsZSBtX3ZhbHVlOwor
fTsKKworY2xhc3MgU3RyaW5nRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJs
aWM6CisgICAgU3RyaW5nRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworICAgIGJv
b2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworCisgICAgU3RyaW5nIG1fdmFsdWU7Cit9OworCitjbGFzcyBOZWdh
dGl2ZSA6IHB1YmxpYyBFeHByZXNzaW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUg
ZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgQmluYXJ5RXhwckJhc2UgOiBwdWJsaWMg
RXhwcmVzc2lvbgoreworfTsKKworY2xhc3MgTnVtZXJpY09wIDogcHVibGljIEJpbmFyeUV4cHJC
YXNlCit7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0FkZCA9IDEsCisgICAgICAg
IE9QX1N1YiwKKyAgICAgICAgT1BfTXVsLAorICAgICAgICBPUF9EaXYsCisgICAgICAgIE9QX01v
ZCwKKyAgICAgICAgT1BfR1QsCisgICAgICAgIE9QX0xULAorICAgICAgICBPUF9HRSwKKyAgICAg
ICAgT1BfTEUKKyAgICB9OworCisgICAgTnVtZXJpY09wKGludCBvcENvZGUsIEV4cHJlc3Npb24q
IGxocywgRXhwcmVzc2lvbiogcmhzKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKKyAgICBpbnQgb3BDb2RlOworfTsKKworY2xhc3MgRXFUZXN0T3Ag
OiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKK3sKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAg
T1BfRVEgPSAxLAorICAgICAgICBPUF9ORQorICAgIH07CisKKyAgICBFcVRlc3RPcChpbnQgb3BD
b2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocyk7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisgICAgaW50IG9wQ29kZTsKK307CisK
K2NsYXNzIExvZ2ljYWxPcCA6IHB1YmxpYyBCaW5hcnlFeHByQmFzZQoreworcHVibGljOgorICAg
IGVudW0geworICAgICAgICBPUF9BbmQgPSAxLAorICAgICAgICBPUF9PcgorICAgIH07CisKKyAg
ICBMb2dpY2FsT3AoaW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMp
OworCisgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBib29sIHNob3J0Q2lyY3VpdE9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1
YXRlKCkgY29uc3Q7CisgICAgaW50IG9wQ29kZTsKK307CisKK2NsYXNzIFVuaW9uIDogcHVibGlj
IEJpbmFyeUV4cHJCYXNlCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0
ZSgpIGNvbnN0OworfTsKKworY2xhc3MgUHJlZGljYXRlCit7CitwdWJsaWM6CisgICAgUHJlZGlj
YXRlKEV4cHJlc3Npb24qIGV4cHIpOworICAgIH5QcmVkaWNhdGUoKTsKKworICAgIGJvb2wgZXZh
bHVhdGUoKSBjb25zdDsKKworICAgIHZvaWQgb3B0aW1pemUoKTsKKworcHJpdmF0ZToKKyAgICBQ
cmVkaWNhdGUoY29uc3QgUHJlZGljYXRlICZyaHMpOworICAgIFByZWRpY2F0ZSAmb3BlcmF0b3I9
KGNvbnN0IFByZWRpY2F0ZSAmcmhzKTsKKworICAgIEV4cHJlc3Npb24qIG1fZXhwcjsKK307CisK
K30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKworI2VuZGlmIC8vIFBSRURJQ0FURV9I
CisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveHBhdGgvaW1wbC9mdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS94cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAwIEBA
CisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisj
aW5jbHVkZSAiZnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
TmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwu
aCIKKworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IFhQYXRoIHsKKyAgICAgICAgCisjZGVmaW5lIERFRklORV9GVU5DVElPTl9DUkVBVE9SKENsYXNz
KSBcCitzdGF0aWMgRnVuY3Rpb24gKmNyZWF0ZSMjQ2xhc3MoKSB7IHJldHVybiBuZXcgQ2xhc3M7
IH0KKworY2xhc3MgSW50ZXJ2YWwKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgaW50IElu
ZiA9LTE7CisKKyAgICBJbnRlcnZhbCgpOworICAgIEludGVydmFsKGludCB2YWx1ZSk7CisgICAg
SW50ZXJ2YWwoaW50IG1pbiwgaW50IG1heCk7CisKKyAgICBib29sIGNvbnRhaW5zKGludCB2YWx1
ZSkgY29uc3Q7CisKKyAgICBTdHJpbmcgYXNTdHJpbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBpbnQgbV9taW47CisgICAgaW50IG1fbWF4OworfTsKKworY2xhc3MgRnVuTGFzdCA6IHB1Ymxp
YyBGdW5jdGlvbgoreworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9
OworCitjbGFzcyBGdW5Qb3NpdGlvbiA6IHB1YmxpYyBGdW5jdGlvbgoreworcHVibGljOgorICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Db3VudCA6IHB1Ymxp
YyBGdW5jdGlvbgoreworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9
OworCitjbGFzcyBGdW5Mb2NhbE5hbWUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1
YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTmFtZXNwYWNlVVJJ
IDogcHVibGljIEZ1bmN0aW9uCit7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzQ29uc3Rh
bnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKK307CisKK2NsYXNzIEZ1bk5hbWUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3RyaW5nIDog
cHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0
ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuQ29uY2F0IDogcHVibGljIEZ1bmN0aW9uCit7Citw
cml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xh
c3MgRnVuU3RhcnRzV2l0aCA6IHB1YmxpYyBGdW5jdGlvbgoreworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkNvbnRhaW5zIDog
cHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0
ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3Vic3RyaW5nQmVmb3JlIDogcHVibGljIEZ1bmN0
aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
fTsKKworY2xhc3MgRnVuU3Vic3RyaW5nQWZ0ZXIgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBG
dW5TdWJzdHJpbmcgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBW
YWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdHJpbmdMZW5ndGggOiBw
dWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRl
KCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Ob3JtYWxpemVTcGFjZSA6IHB1YmxpYyBGdW5jdGlv
bgoreworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307
CisKK2NsYXNzIEZ1blRyYW5zbGF0ZSA6IHB1YmxpYyBGdW5jdGlvbgoreworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkJvb2xl
YW4gOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2
YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Ob3QgOiBwdWJsaWMgRnVuY3Rpb24KK3sK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitj
bGFzcyBGdW5UcnVlIDogcHVibGljIEZ1bmN0aW9uCit7CitwdWJsaWM6CisgICAgdmlydHVhbCBi
b29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRv
RXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkZhbHNlIDogcHVibGljIEZ1bmN0aW9u
Cit7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNz
IEZ1bkxhbmcgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDb25zdGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFs
dWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuTnVtYmVyIDogcHVibGljIEZ1bmN0aW9uCit7
Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKwor
Y2xhc3MgRnVuU3VtIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwg
VmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuRmxvb3IgOiBwdWJsaWMg
RnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7Cit9OworCitjbGFzcyBGdW5DZWlsaW5nIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRl
OgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVu
Um91bmQgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBk
b0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5MYXN0
KQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuUG9zaXRpb24pCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUihGdW5Db3VudCkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkxvY2FsTmFtZSkK
K0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bk5hbWVzcGFjZVVSSSkKK0RFRklORV9GVU5DVElP
Tl9DUkVBVE9SKEZ1bk5hbWUpCisKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN0cmluZykK
K0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkNvbmNhdCkKK0RFRklORV9GVU5DVElPTl9DUkVB
VE9SKEZ1blN0YXJ0c1dpdGgpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Db250YWlucykK
K0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN1YnN0cmluZ0JlZm9yZSkKK0RFRklORV9GVU5D
VElPTl9DUkVBVE9SKEZ1blN1YnN0cmluZ0FmdGVyKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1Io
RnVuU3Vic3RyaW5nKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuU3RyaW5nTGVuZ3RoKQor
REVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuTm9ybWFsaXplU3BhY2UpCitERUZJTkVfRlVOQ1RJ
T05fQ1JFQVRPUihGdW5UcmFuc2xhdGUpCisKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkJv
b2xlYW4pCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Ob3QpCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUihGdW5UcnVlKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuRmFsc2UpCitERUZJ
TkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5MYW5nKQorCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihG
dW5OdW1iZXIpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5TdW0pCitERUZJTkVfRlVOQ1RJ
T05fQ1JFQVRPUihGdW5GbG9vcikKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkNlaWxpbmcp
CitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Sb3VuZCkKKworI3VuZGVmIERFRklORV9GVU5D
VElPTl9DUkVBVE9SCisKK0ludGVydmFsOjpJbnRlcnZhbCgpCisgICAgOiBtX21pbihJbmYpLAor
ICAgIG1fbWF4KEluZikKK3sKK30KKworSW50ZXJ2YWw6OkludGVydmFsKGludCB2YWx1ZSkKKyAg
ICA6IG1fbWluKHZhbHVlKSwKKyAgICBtX21heCh2YWx1ZSkKK3sKK30KKworSW50ZXJ2YWw6Oklu
dGVydmFsKGludCBtaW4sIGludCBtYXgpCisgICAgOiBtX21pbihtaW4pLAorICAgIG1fbWF4KG1h
eCkKK3sKK30KKworYm9vbCBJbnRlcnZhbDo6Y29udGFpbnMoaW50IHZhbHVlKSBjb25zdAorewor
ICAgIGlmIChtX21pbiA9PSBJbmYgJiYgbV9tYXggPT0gSW5mKSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmIChtX21pbiA9PSBJbmYpCisgICAgICAgIHJldHVybiB2YWx1
ZSA8PSBtX21heDsKKworICAgIGlmIChtX21heCA9PSBJbmYpCisgICAgICAgIHJldHVybiB2YWx1
ZSA+PSBtX21pbjsKKworICAgIHJldHVybiB2YWx1ZSA+PSBtX21pbiAmJiB2YWx1ZSA8PSBtX21h
eDsKK30KKworU3RyaW5nIEludGVydmFsOjphc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5n
IHMgPSAiWyI7CisKKyAgICBpZiAobV9taW4gPT0gSW5mKQorICAgICAgICBzICs9ICItSW5maW5p
dHkiOworICAgIGVsc2UKKyAgICAgICAgcyArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9t
aW4pOworCisgICAgcyArPSAiLi4iOworCisgICAgaWYgKG1fbWF4ID09IEluZikKKyAgICAgICAg
cyArPSAiSW5maW5pdHkiOworICAgIGVsc2UKKyAgICAgICAgcyArPSBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIobV9tYXgpOworCisgICAgcyArPSAiXSI7CisKKyAgICByZXR1cm4gczsKK30KKwor
dm9pZCBGdW5jdGlvbjo6c2V0QXJndW1lbnRzKGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFy
Z3MpCit7CisgICAgVmVjdG9yPEV4cHJlc3Npb24qPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJn
cy5lbmQoKTsKKworICAgIGZvciAoVmVjdG9yPEV4cHJlc3Npb24qPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgaXQrKykKKyAgICAgICAgYWRkU3ViRXhwcmVz
c2lvbigqaXQpOworfQorCit2b2lkIEZ1bmN0aW9uOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBtX25hbWUgPSBuYW1lOworfQorCitFeHByZXNzaW9uKiBGdW5jdGlvbjo6YXJn
KGludCBpKQoreworICAgIHJldHVybiBzdWJFeHByKGkpOworfQorCitjb25zdCBFeHByZXNzaW9u
KiBGdW5jdGlvbjo6YXJnKGludCBpKSBjb25zdAoreworICAgIHJldHVybiBzdWJFeHByKGkpOwor
fQorCit1bnNpZ25lZCBpbnQgRnVuY3Rpb246OmFyZ0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3ViRXhwckNvdW50KCk7Cit9CisKK1N0cmluZyBGdW5jdGlvbjo6bmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbmFtZTsKK30KKworVmFsdWUgRnVuTGFzdDo6ZG9FdmFsdWF0ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFZhbHVlKGRvdWJsZShFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29u
dGV4dCgpLnNpemUpKTsKK30KKworYm9vbCBGdW5MYXN0Ojppc0NvbnN0YW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZhbHVlIEZ1blBvc2l0aW9uOjpkb0V2YWx1YXRlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoZG91YmxlKEV4cHJlc3Npb246OmV2YWx1YXRpb25D
b250ZXh0KCkucG9zaXRpb24pKTsKK30KKworYm9vbCBGdW5Qb3NpdGlvbjo6aXNDb25zdGFudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZ1bkxvY2FsTmFtZTo6aXND
b25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWYWx1ZSBGdW5Mb2Nh
bE5hbWU6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIE5vZGUgKm5vZGUgPSAwOworICAgIGlm
IChhcmdDb3VudCgpID4gMCkgeworICAgICAgICBWYWx1ZSBhID0gYXJnKDApLT5ldmFsdWF0ZSgp
OworICAgICAgICBpZiAoYS5pc05vZGVzZXQoKSkKKyAgICAgICAgICAgIG5vZGUgPSBhLnRvTm9k
ZVNldCgpWzBdLmdldCgpOworICAgIH0KKworICAgIGlmICghbm9kZSkKKyAgICAgICAgbm9kZSA9
IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKworICAgIHJldHVybiBWYWx1ZShub2RlLT5sb2Nh
bE5hbWUoKS5kZXByZWNhdGVkU3RyaW5nKCkpOworfQorCitib29sIEZ1bk5hbWVzcGFjZVVSSTo6
aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWYWx1ZSBGdW5O
YW1lc3BhY2VVUkk6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIE5vZGUgKm5vZGUgPSAwOwor
ICAgIGlmIChhcmdDb3VudCgpID4gMCkgeworICAgICAgICBWYWx1ZSBhID0gYXJnKDApLT5ldmFs
dWF0ZSgpOworICAgICAgICBpZiAoYS5pc05vZGVzZXQoKSkKKyAgICAgICAgICAgIG5vZGUgPSBh
LnRvTm9kZVNldCgpWzBdLmdldCgpOworICAgIH0KKworICAgIGlmICghbm9kZSkKKyAgICAgICAg
bm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKworICAgIHJldHVybiBWYWx1ZShub2Rl
LT5uYW1lc3BhY2VVUkkoKS5kZXByZWNhdGVkU3RyaW5nKCkpOworfQorCitib29sIEZ1bk5hbWU6
OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVu
TmFtZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgTm9kZSAqbm9kZSA9IDA7CisgICAgaWYg
KGFyZ0NvdW50KCkgPiAwKSB7CisgICAgICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7
CisgICAgICAgIGlmIChhLmlzTm9kZXNldCgpKQorICAgICAgICAgICAgbm9kZSA9IGEudG9Ob2Rl
U2V0KClbMF0uZ2V0KCk7CisgICAgfQorCisgICAgaWYgKCFub2RlKQorICAgICAgICBub2RlID0g
ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworCisgICAgcmV0dXJuIFZhbHVlKG5vZGUtPnByZWZp
eCgpICsgIjoiICsgbm9kZS0+bG9jYWxOYW1lKCkpOworfQorCitWYWx1ZSBGdW5Db3VudDo6ZG9F
dmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsKKyAg
ICAKKyAgICBpZiAoIWEuaXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiY291bnQo
KSBleHBlY3RzIDxub2Rlc2V0PlxuIik7CisKKyAgICAgICAgcmV0dXJuIFZhbHVlKDAuMCk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBWYWx1ZShkb3VibGUoYS50b05vZGVTZXQoKS5zaXplKCkp
KTsKK30KKworYm9vbCBGdW5Db3VudDo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitWYWx1ZSBGdW5TdHJpbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IGlmIChhcmdDb3VudCgpID09IDApIHsKKyAgICAgICAgU3RyaW5nIHMgPSBWYWx1ZShFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUpLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVy
biBWYWx1ZShzKTsKKyAgICB9CisgICAgcmV0dXJuIFZhbHVlKGFyZygwKS0+ZXZhbHVhdGUoKS50
b1N0cmluZygpKTsKK30KKworVmFsdWUgRnVuQ29uY2F0Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sK
KyAgICBTdHJpbmcgc3RyOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmdD
b3VudCgpOyArK2kpCisgICAgICAgIHN0ciArPSBhcmcoaSktPmV2YWx1YXRlKCkudG9TdHJpbmco
KTsKKworICAgIHJldHVybiBWYWx1ZShzdHIpOworfQorCitWYWx1ZSBGdW5TdGFydHNXaXRoOjpk
b0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCku
dG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgczIgPSBhcmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmco
KTsKKworICAgIGlmIChzMi5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlKHRydWUp
OworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShzMS5zdGFydHNXaXRoKHMyKSk7Cit9CisKK1Zh
bHVlIEZ1bkNvbnRhaW5zOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgczEgPSBh
cmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgczIgPSBhcmcoMSktPmV2
YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIGlmIChzMi5pc0VtcHR5KCkpIAorICAgICAgICBy
ZXR1cm4gVmFsdWUodHJ1ZSk7CisKKyAgICByZXR1cm4gVmFsdWUoczEuY29udGFpbnMoczIpICE9
IDApOworfQorCitWYWx1ZSBGdW5TdWJzdHJpbmdCZWZvcmU6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIFN0cmluZyBzMSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAgIFN0
cmluZyBzMiA9IGFyZygxKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisgICAgaWYgKHMyLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlKCIiKTsKKworICAgIGludCBpID0gczEuZmlu
ZChzMik7CisKKyAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFZhbHVlKCIiKTsKKwor
CisgICAgcmV0dXJuIFZhbHVlKHMxLmxlZnQoaSkpOworfQorCitWYWx1ZSBGdW5TdWJzdHJpbmdB
ZnRlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIHMxID0gYXJnKDApLT5ldmFs
dWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgU3RyaW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRv
U3RyaW5nKCk7CisKKyAgICBpZiAoczIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gVmFsdWUo
czIpOworCisgICAgaW50IGkgPSBzMS5maW5kKHMyKTsKKyAgICBpZiAoaSA9PSAtMSkKKyAgICAg
ICAgcmV0dXJuIFZhbHVlKCIiKTsKKworICAgIHJldHVybiBWYWx1ZShzMS5kZXByZWNhdGVkU3Ry
aW5nKCkubWlkKGkgKyAxKSk7Cit9CisKK1ZhbHVlIEZ1blN1YnN0cmluZzo6ZG9FdmFsdWF0ZSgp
IGNvbnN0Cit7CisgICAgU3RyaW5nIHMgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsK
KyAgICBsb25nIHBvcyA9IGxvbmcocm91bmQoYXJnKDEpLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCkp
KTsKKyAgICBib29sIGhhdmVMZW5ndGggPSBhcmdDb3VudCgpID09IDM7CisgICAgbG9uZyBsZW4g
PSAtMTsKKyAgICBpZiAoaGF2ZUxlbmd0aCkKKyAgICAgICAgbGVuID0gbG9uZyhyb3VuZChhcmco
MiktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpOworCisgICAgaWYgKHBvcyA+IGxvbmcocy5sZW5n
dGgoKSkpIAorICAgICAgICByZXR1cm4gVmFsdWUoIiIpOworCisgICAgaWYgKGhhdmVMZW5ndGgg
JiYgcG9zIDwgMSkgeworICAgICAgICBsZW4gLT0gMSAtIHBvczsKKyAgICAgICAgcG9zID0gMTsK
KyAgICAgICAgaWYgKGxlbiA8IDEpCisgICAgICAgICAgICByZXR1cm4gVmFsdWUoIiIpOworICAg
IH0KKworICAgIHJldHVybiBWYWx1ZShzLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQocG9zIC0gMSwg
bGVuKSk7Cit9CisKK1ZhbHVlIEZ1blN0cmluZ0xlbmd0aDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisgICAgaWYgKGFyZ0NvdW50KCkgPT0gMCkgeworICAgICAgICBTdHJpbmcgcyA9IFZhbHVlKEV4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSkudG9TdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIFZhbHVlKGRvdWJsZShzLmxlbmd0aCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIFZh
bHVlKGRvdWJsZShhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKS5sZW5ndGgoKSkpOworfQor
CitWYWx1ZSBGdW5Ob3JtYWxpemVTcGFjZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgaWYg
KGFyZ0NvdW50KCkgPT0gMCkgeworICAgICAgICBTdHJpbmcgcyA9IFZhbHVlKEV4cHJlc3Npb246
OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSkudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFZh
bHVlKHMuZGVwcmVjYXRlZFN0cmluZygpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgcyA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAgIHJldHVy
biBWYWx1ZShzLmRlcHJlY2F0ZWRTdHJpbmcoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKSk7Cit9CisK
K1ZhbHVlIEZ1blRyYW5zbGF0ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIHMx
ID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgU3RyaW5nIHMyID0gYXJnKDEp
LT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgU3RyaW5nIHMzID0gYXJnKDIpLT5ldmFsdWF0
ZSgpLnRvU3RyaW5nKCk7CisgICAgU3RyaW5nIG5ld1N0cmluZzsKKworICAgIGZvciAodW5zaWdu
ZWQgaTEgPSAwOyBpMSA8IHMxLmxlbmd0aCgpOyArK2kxKSB7CisgICAgICAgIFFDaGFyIGNoID0g
czFbaTFdOworICAgICAgICBpbnQgaTIgPSBzMi5maW5kKGNoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpMiA9PSAtMSkgCisgICAgICAgICAgICBuZXdTdHJpbmcgKz0gY2g7CisgICAgICAgIGVs
c2UgaWYgKCh1bnNpZ25lZClpMiA8IHMzLmxlbmd0aCgpKQorICAgICAgICAgICAgbmV3U3RyaW5n
ICs9IHMzWyBpMiBdOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShuZXdTdHJpbmcpOworfQor
CitWYWx1ZSBGdW5Cb29sZWFuOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFs
dWUoYXJnKDApLT5ldmFsdWF0ZSgpLnRvQm9vbGVhbigpKTsKK30KKworVmFsdWUgRnVuTm90Ojpk
b0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoIWFyZygwKS0+ZXZhbHVhdGUo
KS50b0Jvb2xlYW4oKSk7Cit9CisKK1ZhbHVlIEZ1blRydWU6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBWYWx1ZSh0cnVlKTsKK30KKworYm9vbCBGdW5UcnVlOjppc0NvbnN0YW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgRnVuTGFuZzo6ZG9FdmFs
dWF0ZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIGxhbmcgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9T
dHJpbmcoKTsKKworICAgIFJlZlB0cjxOb2RlPiBsYW5nTm9kZSA9IDA7CisgICAgTm9kZSAqbm9k
ZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKworICAgIFN0cmluZyB4bXMoInhtcyIpOwor
ICAgIFN0cmluZyB4bXNuc1VSSSA9IG5vZGUtPmxvb2t1cE5hbWVzcGFjZVVSSSh4bXMpOworCisg
ICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgTmFtZWRBdHRyTWFwICphdHRycyA9IG5vZGUtPmF0
dHJpYnV0ZXMoKTsKKyAgICAgICAgU3RyaW5nIGwoImxhbmciKTsKKyAgICAgICAgbGFuZ05vZGUg
PSBhdHRycy0+Z2V0TmFtZWRJdGVtTlMoeG1zbnNVUkksIGwpOworICAgICAgICBpZiAobGFuZ05v
ZGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgIH0KKworICAgIGlmICghbGFuZ05vZGUpCisgICAgICAgIHJldHVybiBWYWx1ZShm
YWxzZSk7CisKKyAgICBTdHJpbmcgbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlLT5ub2RlVmFsdWUo
KTsKKworICAgIC8vIGV4dHJhY3QgJ2VuJyBvdXQgb2YgJ2VuLXVzJworICAgIGxhbmdOb2RlVmFs
dWUgPSBsYW5nTm9kZVZhbHVlLmxlZnQobGFuZ05vZGVWYWx1ZS5maW5kKCctJykpOworCisgICAg
cmV0dXJuIFZhbHVlKGxhbmdOb2RlVmFsdWUubG93ZXIoKSA9PSBsYW5nLmxvd2VyKCkpOworfQor
Citib29sIEZ1bkxhbmc6OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworVmFsdWUgRnVuRmFsc2U6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBW
YWx1ZShmYWxzZSk7Cit9CisKK2Jvb2wgRnVuRmFsc2U6OmlzQ29uc3RhbnQoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCitWYWx1ZSBGdW5OdW1iZXI6OmRvRXZhbHVhdGUoKSBjb25z
dAoreworICAgIHJldHVybiBWYWx1ZShhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSk7Cit9
CisKK1ZhbHVlIEZ1blN1bTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgYSA9IGFy
ZygwKS0+ZXZhbHVhdGUoKTsKKyAgICBpZiAoIWEuaXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgTE9H
KFhQYXRoLCAic3VtKCkgZXhwZWN0cyA8bm9kZXNldD5cbiIpOworICAgICAgICByZXR1cm4gVmFs
dWUoMC4wKTsKKyAgICB9CisKKyAgICBkb3VibGUgc3VtID0gMC4wOworICAgIGNvbnN0IE5vZGVT
ZXQgbm9kZXMgPSBhLnRvTm9kZVNldCgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBub2Rlcy5zaXplKCk7IGkrKykKKyAgICAgICAgc3VtICs9IFZhbHVlKHN0cmluZ1ZhbHVl
KG5vZGVzW2ldLmdldCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpLnRvTnVtYmVyKCk7CisgICAgCisg
ICAgcmV0dXJuIFZhbHVlKHN1bSk7Cit9CisKK1ZhbHVlIEZ1bkZsb29yOjpkb0V2YWx1YXRlKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBkb3VibGUgbnVtID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvTnVt
YmVyKCk7CisKKyAgICBpZiAoaXNuYW4obnVtKSB8fCBpc2luZihudW0pKSB7CisgICAgICAgIHJl
dHVybiBWYWx1ZShudW0pOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShmbG9vcihudW0pKTsK
K30KKworVmFsdWUgRnVuQ2VpbGluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgY29uc3Qg
ZG91YmxlIG51bSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpOworCisgICAgaWYgKGlz
bmFuKG51bSkgfHwgaXNpbmYobnVtKSkgCisgICAgICAgIHJldHVybiBWYWx1ZShudW0pOworCisg
ICAgcmV0dXJuIFZhbHVlKGNlaWwobnVtKSk7Cit9CisKK1ZhbHVlIEZ1blJvdW5kOjpkb0V2YWx1
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVmFsdWUoZG91YmxlKHJvdW5kKGFyZygwKS0+ZXZh
bHVhdGUoKS50b051bWJlcigpKSkpOworfQorCitzdHJ1Y3QgRnVuY3Rpb25MaWJyYXJ5OjpGdW5j
dGlvblJlYworeworICAgIHR5cGVkZWYgRnVuY3Rpb24gKigqRmFjdG9yeUZuKSgpOworCisgICAg
RmFjdG9yeUZuIGZhY3RvcnlGbjsKKyAgICBJbnRlcnZhbCBhcmdzOworfTsKKworc3RydWN0IEZ1
bmN0aW9uTWFwcGluZworeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgRnVuY3Rpb25MaWJy
YXJ5OjpGdW5jdGlvblJlYyBmdW5jdGlvbjsKK307CisKK0Z1bmN0aW9uTGlicmFyeSYgRnVuY3Rp
b25MaWJyYXJ5OjpzZWxmKCkKK3sKKyAgICBzdGF0aWMgRnVuY3Rpb25MaWJyYXJ5IGluc3RhbmNl
OworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworRnVuY3Rpb25MaWJyYXJ5OjpGdW5jdGlvbkxp
YnJhcnkoKQoreworICAgIHN0YXRpYyBGdW5jdGlvbk1hcHBpbmcgZnVuY3Rpb25zW10gPSB7Cisg
ICAgeyAibGFzdCIsIHsgJmNyZWF0ZUZ1bkxhc3QsIDAgfSB9LAorICAgIHsgImxhc3QiLCB7ICZj
cmVhdGVGdW5MYXN0LCAwIH0gfSwKKyAgICB7ICJwb3NpdGlvbiIsIHsgJmNyZWF0ZUZ1blBvc2l0
aW9uLCAwIH0gfSwKKyAgICB7ICJjb3VudCIsIHsgJmNyZWF0ZUZ1bkNvdW50LCAxIH0gfSwKKyAg
ICB7ICJzdW0iLCB7ICZjcmVhdGVGdW5TdW0sIDEgfSB9LAorICAgIHsgImxvY2FsLW5hbWUiLCB7
ICZjcmVhdGVGdW5Mb2NhbE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICB7ICJuYW1lc3Bh
Y2UtdXJpIiwgeyAmY3JlYXRlRnVuTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgeyAibmFtZSIsIHsgJmNyZWF0ZUZ1bk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICB7
ICJzdHJpbmciLCB7ICZjcmVhdGVGdW5TdHJpbmcsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICB7
ICJjb25jYXQiLCB7ICZjcmVhdGVGdW5Db25jYXQsIEludGVydmFsKDIsIEludGVydmFsOjpJbmYp
IH0gfSwKKyAgICB7ICJzdGFydHMtd2l0aCIsIHsgJmNyZWF0ZUZ1blN0YXJ0c1dpdGgsIDIgfSB9
LAorICAgIHsgImNvbnRhaW5zIiwgeyAmY3JlYXRlRnVuQ29udGFpbnMsIDIgfSB9LAorICAgIHsg
InN1YnN0cmluZy1iZWZvcmUiLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmdCZWZvcmUsIDIgfSB9LAor
ICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgJmNyZWF0ZUZ1blN1YnN0cmluZ0FmdGVyLCAyIH0g
fSwKKyAgICB7ICJzdWJzdHJpbmciLCB7ICZjcmVhdGVGdW5TdWJzdHJpbmcsIEludGVydmFsKDIs
IDMpIH0gfSwKKyAgICB7ICJzdHJpbmctbGVuZ3RoIiwgeyAmY3JlYXRlRnVuU3RyaW5nTGVuZ3Ro
LCAxIH0gfSwKKyAgICB7ICJub3JtYWxpemUtc3BhY2UiLCB7ICZjcmVhdGVGdW5Ob3JtYWxpemVT
cGFjZSwgMSB9IH0sCisgICAgeyAidHJhbnNsYXRlIiwgeyAmY3JlYXRlRnVuVHJhbnNsYXRlLCAz
IH0gfSwKKyAgICAgICAgCisgICAgeyAiYm9vbGVhbiIsIHsgJmNyZWF0ZUZ1bkJvb2xlYW4sIDEg
fSB9LAorICAgIHsgIm5vdCIsIHsgJmNyZWF0ZUZ1bk5vdCwgMSB9IH0sCisgICAgeyAidHJ1ZSIs
IHsgJmNyZWF0ZUZ1blRydWUsIDAgfSB9LAorICAgIHsgImZhbHNlIiwgeyAmY3JlYXRlRnVuRmFs
c2UsIDAgfSB9LAorICAgIHsgImxhbmciLCB7ICZjcmVhdGVGdW5MYW5nLCAxIH0gfSwKKyAgICAg
ICAgCisgICAgeyAibnVtYmVyIiwgeyAmY3JlYXRlRnVuTnVtYmVyLCAxIH0gfSwKKyAgICB7ICJm
bG9vciIsIHsgJmNyZWF0ZUZ1bkZsb29yLCAxIH0gfSwKKyAgICB7ICJjZWlsaW5nIiwgeyAmY3Jl
YXRlRnVuQ2VpbGluZywgMSB9IH0sCisgICAgeyAicm91bmQiLCB7ICZjcmVhdGVGdW5Sb3VuZCwg
MSB9IH0KKyAgICB9OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbnVtRnVuY3Rpb25z
ID0gc2l6ZW9mKGZ1bmN0aW9ucykgLyBzaXplb2YoZnVuY3Rpb25zWyAwIF0pOworICAgICAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnVuY3Rpb25zOyArK2kpCisgICAgICAg
IG1fZnVuY3Rpb25EaWN0LnNldChmdW5jdGlvbnNbaV0ubmFtZSwgZnVuY3Rpb25zW2ldLmZ1bmN0
aW9uKTsKK30KKworRnVuY3Rpb24gKkZ1bmN0aW9uTGlicmFyeTo6Z2V0RnVuY3Rpb24oY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiAmYXJncykgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZnVuY3Rpb25EaWN0LmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIExPRyhYUGF0
aCwgIkZ1bmN0aW9uICclcycgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLlxu
IiwgbmFtZSk7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm4gYSBkdW1teSBmdW5jdGlvbiBp
bnN0ZWFkIG9mIDAuCisgICAgICAgIEZ1bmN0aW9uICpmdW5jVHJ1ZSA9IG1fZnVuY3Rpb25EaWN0
LmdldCgidHJ1ZSIpLmZhY3RvcnlGbigpOworICAgICAgICBmdW5jVHJ1ZS0+c2V0TmFtZSgidHJ1
ZSIpOworICAgICAgICByZXR1cm4gZnVuY1RydWU7CisgICAgfQorCisgICAgRnVuY3Rpb25SZWMg
ZnVuY3Rpb25SZWMgPSBtX2Z1bmN0aW9uRGljdC5nZXQobmFtZSk7CisgICAgaWYgKCFmdW5jdGlv
blJlYy5hcmdzLmNvbnRhaW5zKGFyZ3Muc2l6ZSgpKSkgeworICAgICAgICBMT0coWFBhdGgsICJG
dW5jdGlvbiAnJXMnIHJlcXVpcmVzICVkIGFyZ3VtZW50cywgYnV0ICVkIGdpdmVuLlxuIiwgbmFt
ZSwgZnVuY3Rpb25SZWMuYXJncy5hc1N0cmluZygpLmFzY2lpKCksIGFyZ3Muc2l6ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRnVuY3Rpb24gKmZ1bmN0aW9uID0gZnVuY3Rp
b25SZWMuZmFjdG9yeUZuKCk7CisgICAgZnVuY3Rpb24tPnNldEFyZ3VtZW50cyhhcmdzKTsKKyAg
ICBmdW5jdGlvbi0+c2V0TmFtZShuYW1lKTsKKyAgICAKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9
CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgv
aW1wbC9wYXJzZWRzdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwv
cGFyc2Vkc3RhdGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvcGFy
c2Vkc3RhdGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBwYXJz
ZWRzdGF0ZW1lbnQuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBB
UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhfUGFyc2VkU3RhdGVtZW50X0gKKyNkZWZp
bmUgWFBhdGhfUGFyc2VkU3RhdGVtZW50X0gKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1
ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIE5vZGU7CisgICAgCituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2Ns
YXNzIEV4cHJlc3Npb247CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUGFyc2VkU3RhdGVtZW50Cit7
CitwdWJsaWM6CisgICAgUGFyc2VkU3RhdGVtZW50KCk7CisgICAgflBhcnNlZFN0YXRlbWVudCgp
OworCisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpOworCisgICAgdm9pZCBvcHRpbWl6ZSgpOworCisgICAgVmFsdWUgZXZhbHVhdGUoTm9k
ZSAqY29udGV4dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRXhwcmVzc2lvbiogbV9leHByOwor
fTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhf
UGFyc2VkU3RhdGVtZW50X0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVm
ZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3ZhcmlhYmxlcmVmZXJl
bmNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVu
Y2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIHZhcmlhYmxlcmVmZXJl
bmNlLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aF9WYXJpYWJsZVJlZmVyZW5jZV9I
CisjZGVmaW5lIFhQYXRoX1ZhcmlhYmxlUmVmZXJlbmNlX0gKKworI2lmIFhQQVRIX1NVUFBPUlQK
KworI2luY2x1ZGUgImV4cHJlc3Npb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIFhQYXRoIHsKKyAgICAKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlIDogcHVibGljIEV4cHJl
c3Npb24KK3sKK3B1YmxpYzoKKyAgICBWYXJpYWJsZVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIG5h
bWUpOworCisgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKworICAgIFN0cmluZyBtX25h
bWU7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisKKyNlbmRpZiAvLyBY
UGF0aF9WYXJpYWJsZVJlZmVyZW5jZV9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9zdGVw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDA2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQ
UE9SVAorCisjaW5jbHVkZSAic3RlcC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIk5hbWVk
QXR0ck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVk
ZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBY
UGF0aCB7CisKK1N0cmluZyBTdGVwOjpheGlzQXNTdHJpbmcoQXhpc1R5cGUgYXhpcykKK3sKKyAg
ICBzd2l0Y2ggKGF4aXMpIHsKKyAgICAgICAgY2FzZSBBbmNlc3RvckF4aXM6IHJldHVybiAiYW5j
ZXN0b3IiOworICAgICAgICBjYXNlIEFuY2VzdG9yT3JTZWxmQXhpczogcmV0dXJuICJhbmNlc3Rv
ci1vci1zZWxmIjsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOiByZXR1cm4gImF0dHJpYnV0
ZSI7CisgICAgICAgIGNhc2UgQ2hpbGRBeGlzOiByZXR1cm4gImNoaWxkIjsKKyAgICAgICAgY2Fz
ZSBEZXNjZW5kYW50QXhpczogcmV0dXJuICJkZXNjZW5kYW50IjsKKyAgICAgICAgY2FzZSBEZXNj
ZW5kYW50T3JTZWxmQXhpczogcmV0dXJuICJkZXNjZW5kYW50LW9yLXNlbGYiOworICAgICAgICBj
YXNlIEZvbGxvd2luZ0F4aXM6IHJldHVybiAiZm9sbG93aW5nIjsKKyAgICAgICAgY2FzZSBGb2xs
b3dpbmdTaWJsaW5nQXhpczogcmV0dXJuICJmb2xsb3dpbmctc2libGluZyI7CisgICAgICAgIGNh
c2UgTmFtZXNwYWNlQXhpczogcmV0dXJuICJuYW1lc3BhY2UiOworICAgICAgICBjYXNlIFBhcmVu
dEF4aXM6IHJldHVybiAicGFyZW50IjsKKyAgICAgICAgY2FzZSBQcmVjZWRpbmdBeGlzOiByZXR1
cm4gInByZWNlZGluZyI7CisgICAgICAgIGNhc2UgUHJlY2VkaW5nU2libGluZ0F4aXM6IHJldHVy
biAicHJlY2VkaW5nLXNpYmxpbmciOworICAgICAgICBjYXNlIFNlbGZBeGlzOiByZXR1cm4gInNl
bGYiOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0ZXA6OlN0ZXAoKQorewor
fQorCitTdGVwOjpTdGVwKEF4aXNUeXBlIGF4aXMsIGNvbnN0IFN0cmluZyYgbm9kZVRlc3QsIGNv
bnN0IFZlY3RvcjxQcmVkaWNhdGUqPiYgcHJlZGljYXRlcykKKyAgICA6IG1fYXhpcyhheGlzKSwK
KyAgICBtX25vZGVUZXN0KG5vZGVUZXN0KSwKKyAgICBtX3ByZWRpY2F0ZXMocHJlZGljYXRlcykK
K3sKK30KKworU3RlcDo6flN0ZXAoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3ByZWRpY2F0
ZXMpOworfQorCitOb2RlU2V0IFN0ZXA6OmV2YWx1YXRlKE5vZGUgKmNvbnRleHQpIGNvbnN0Cit7
CisgICAgTE9HKFhQYXRoLCAiRXZhbHVhdGluZyBzdGVwLCBheGlzPSclcycsIG5vZGV0ZXN0PScl
cycsICV1IHByZWRpY2F0ZXNcbiIsCisgICAgICAgICAgICBheGlzQXNTdHJpbmcobV9heGlzKS5h
c2NpaSgpLCBtX25vZGVUZXN0LmFzY2lpKCksIG1fcHJlZGljYXRlcy5zaXplKCkpOworICAgIGlm
IChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgTE9H
KFhQYXRoLCAiQ29udGV4dCBub2RlIGlzIGFuIGVsZW1lbnQgY2FsbGVkICVzXG4iLCBjb250ZXh0
LT5ub2RlTmFtZSgpLmFzY2lpKCkpOworICAgIGVsc2UgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6QVRUUklCVVRFX05PREUpCisgICAgICAgIExPRyhYUGF0aCwgIkNvbnRleHQgbm9k
ZSBpcyBhbiBhdHRyaWJ1dGUgY2FsbGVkICVzIHdpdGggdmFsdWUgJXNcbiIsIAorICAgICAgICAg
ICAgICAgY29udGV4dC0+bm9kZU5hbWUoKS5hc2NpaSgpLCAKKyAgICAgICAgICAgICAgIGNvbnRl
eHQtPm5vZGVWYWx1ZSgpLmFzY2lpKCkpOworICAgIGVsc2UKKyAgICAgICAgTE9HKFhQYXRoLCAi
Q29udGV4dCBub2RlIGlzIG9mIHVua25vd24gdHlwZSAlZFxuIiwgY29udGV4dC0+bm9kZVR5cGUo
KSk7CisKKyAgICBOb2RlU2V0IGluTm9kZXMgPSBub2Rlc0luQXhpcyhjb250ZXh0KSwgb3V0Tm9k
ZXM7CisgICAgTE9HKFhQYXRoLCAiQXhpcyAlcyBtYXRjaGVzICVkIG5vZGVzLlxuIiwgYXhpc0Fz
U3RyaW5nKG1fYXhpcykuYXNjaWkoKSwgaW5Ob2Rlcy5zaXplKCkpOworCisgICAgaW5Ob2RlcyA9
IG5vZGVUZXN0TWF0Y2hlcyhpbk5vZGVzKTsKKyAgICBMT0coWFBhdGgsICJOb2RldGVzdCAlcyB0
cmltcyB0aGlzIG51bWJlciB0byAlZFxuIiwgbV9ub2RlVGVzdC5hc2NpaSgpLCBpbk5vZGVzLnNp
emUoKSk7CisgICAgCisgICAgb3V0Tm9kZXMgPSBpbk5vZGVzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgUHJlZGljYXRl
KiBwcmVkaWNhdGUgPSBtX3ByZWRpY2F0ZXNbaV07CisKKyAgICAgICAgb3V0Tm9kZXMuY2xlYXIo
KTsKKyAgICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5zaXplID0gaW5Ob2Rl
cy5zaXplKCk7CisgICAgICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRp
b24gPSAxOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5Ob2Rlcy5zaXplKCk7
IGorKykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGluTm9kZXNbal0uZ2V0KCk7CisKKyAg
ICAgICAgICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICBFdmFsdWF0aW9uQ29udGV4dCBiYWNrdXBDdHggPSBFeHByZXNzaW9uOjpldmFs
dWF0aW9uQ29udGV4dCgpOworICAgICAgICAgICAgaWYgKHByZWRpY2F0ZS0+ZXZhbHVhdGUoKSkK
KyAgICAgICAgICAgICAgICBvdXROb2Rlcy5hcHBlbmQobm9kZSk7CisKKyAgICAgICAgICAgIEV4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkgPSBiYWNrdXBDdHg7CisgICAgICAgICAgICAr
K0V4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb247CisgICAgICAgIH0KKwor
ICAgICAgICBMT0coWFBhdGgsICJcdFByZWRpY2F0ZSB0cmltcyB0aGlzIG51bWJlciB0byAlZCIs
IG91dE5vZGVzLnNpemUoKSk7CisKKyAgICAgICAgaW5Ob2RlcyA9IG91dE5vZGVzOworICAgIH0K
KyAgICByZXR1cm4gb3V0Tm9kZXM7Cit9CisKK05vZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoTm9k
ZSAqY29udGV4dCkgY29uc3QKK3sKKyAgICBOb2RlU2V0IG5vZGVzOworICAgIHN3aXRjaCAobV9h
eGlzKSB7CisgICAgICAgIGNhc2UgQ2hpbGRBeGlzOiB7CisgICAgICAgICAgICBOb2RlICpuID0g
Y29udGV4dC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBEZXNjZW5kYW50QXhpczogCisgICAgICAgICAgICByZXR1cm4gZ2V0
Q2hpbGRyZW5SZWN1cnNpdmVseShjb250ZXh0KTsKKyAgICAgICAgY2FzZSBQYXJlbnRBeGlzOgor
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQtPnBhcmVudE5vZGUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIGNhc2UgQW5jZXN0b3JBeGlzOiB7CisgICAgICAg
ICAgICBOb2RlICpuID0gY29udGV4dC0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgd2hpbGUg
KG4pIHsKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAg
biA9IG4tPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBu
b2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZvbGxvd2luZ1NpYmxpbmdBeGlzOiB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9E
RSB8fAorICAgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OlhQQVRI
X05BTUVTUEFDRV9OT0RFKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9kZVNldCgpOworCisg
ICAgICAgICAgICBOb2RlICpuID0gY29udGV4dC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAg
IHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAg
ICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNhc2UgUHJlY2VkaW5nU2libGluZ0F4
aXM6IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJ
QlVURV9OT0RFIHx8CisgICAgICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVTZXQo
KTsKKworICAgICAgICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7
CisgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNhc2UgRm9s
bG93aW5nQXhpczogeworICAgICAgICAgICAgTm9kZSAqcCA9IGNvbnRleHQ7CisgICAgICAgICAg
ICB3aGlsZSAoIWlzUm9vdERvbU5vZGUocCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlICpuID0g
cC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZChnZXRDaGlsZHJlblJlY3Vyc2l2ZWx5KG4pKTsKKworICAgICAgICAgICAgICAgICAgICBu
ID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cCA9IHAtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBu
b2RlczsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFByZWNlZGluZ0F4aXM6IHsKKyAgICAgICAg
ICAgIE5vZGUgKnAgPSBjb250ZXh0OworICAgICAgICAgICAgd2hpbGUgKCFpc1Jvb3REb21Ob2Rl
KHApKSB7CisgICAgICAgICAgICAgICAgTm9kZSAqbiA9IHAtPnByZXZpb3VzU2libGluZygpOwor
ICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZChuKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGdldENoaWxkcmVuUmVj
dXJzaXZlbHkobikpOworICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHAgPSBwLT5wYXJlbnROb2Rl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOiB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vZGVTZXQoKTsKKworICAgICAgICAgICAgTmFtZWRBdHRyTWFwICphdHRycyA9IGNvbnRleHQt
PmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmICghYXR0cnMpIHsKKyAgICAgICAgICAgICAg
ICBMT0coWFBhdGgsICJOb2RlOjphdHRyaWJ1dGVzKCkgcmV0dXJuZWQgTlVMTCEiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgKytpKSAKKyAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQgKGF0dHJzLT5pdGVtKGkpKTsKKworICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNhc2UgTmFtZXNwYWNlQXhpczogewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RF
KQorICAgICAgICAgICAgICAgIHJldHVybiBOb2RlU2V0KCk7CisKKyAgICAgICAgICAgIGJvb2wg
Zm91bmRYbWxOc05vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBjb250ZXh0
OworICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICBOYW1lZEF0dHJN
YXAgKmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOworICAgICAgICAgICAgICAgIGlmICghYXR0
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HKFhQYXRoLCAiTm9kZTo6YXR0cmlidXRlcygp
IHJldHVybmVkIE5VTEwhIik7CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgYXR0
cnMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSAqbiA9IGF0dHJz
LT5pdGVtKGkpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobi0+bm9kZU5hbWUoKS5k
ZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgieG1sbnM6IikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChuLT5ub2RlTmFtZSgpID09ICJ4bWxucyIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhZm91bmRYbWxOc05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kWG1s
TnNOb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbi0+bm9kZVZhbHVl
KCkuZGVwcmVjYXRlZFN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFNlbGZBeGlzOgorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICBjYXNlIERlc2NlbmRhbnRPclNlbGZBeGlzOgor
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAgICAgICAgICAgbm9kZXMuYXBw
ZW5kKGdldENoaWxkcmVuUmVjdXJzaXZlbHkoY29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJu
IG5vZGVzOworICAgICAgICBjYXNlIEFuY2VzdG9yT3JTZWxmQXhpczogeworICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAgICAgICAgICAgTm9kZSAqbiA9IGNvbnRleHQtPnBh
cmVudE5vZGUoKTsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgbm9k
ZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIExPRyhYUGF0aCwgIlVua25vd24gYXhpcyAlcyBwYXNzZWQg
dG8gU3RlcDo6bm9kZXNJbkF4aXMiLCBheGlzQXNTdHJpbmcobV9heGlzKS5hc2NpaSgpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gTm9kZVNldCgpOworfQorCisKK05vZGVTZXQgU3RlcDo6bm9kZVRl
c3RNYXRjaGVzKGNvbnN0IE5vZGVTZXQmIG5vZGVzKSBjb25zdAoreworICAgIFN0cmluZyBucyA9
IG5hbWVzcGFjZUZyb21Ob2RldGVzdChtX25vZGVUZXN0KTsKKyAgICBOb2RlU2V0IG1hdGNoZXM7
CisgICAgaWYgKG1fbm9kZVRlc3QgPT0gIioiKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgTm9kZSAqbm9kZSA9IG5v
ZGVzW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gcHJpbWFy
eU5vZGVUeXBlKG1fYXhpcykpIHsKKyAgICAgICAgICAgICAgICBpZiAobnMuaXNFbXB0eSgpIHx8
CisgICAgICAgICAgICAgICAgICAgICBub2RlLT5uYW1lc3BhY2VVUkkoKSA9PSBucykgeworICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGVzOworICAgIH0g
ZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAidGV4dCgpIikgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5vZGUg
PSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5v
ZGU6OlRFWFRfTk9ERSB8fAorICAgICAgICAgICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSAKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChu
b2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICB9IGVsc2UgaWYg
KG1fbm9kZVRlc3QgPT0gImNvbW1lbnQoKSIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlICpub2RlID0gbm9k
ZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpD
T01NRU5UX05PREUpCisgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisgICAgfSBlbHNlIGlmIChtX25vZGVUZXN0
LnN0YXJ0c1dpdGgoInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iKSkgeworICAgICAgICBTdHJpbmcg
cGFyYW07CisKKyAgICAgICAgY29uc3QgaW50IHNwYWNlID0gbV9ub2RlVGVzdC5maW5kKCcgJyk7
CisgICAgICAgIGlmIChzcGFjZSA+IC0xKQorICAgICAgICAgICAgcGFyYW0gPSBtX25vZGVUZXN0
LmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoc3BhY2UgKyAxKTsKKworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgKm5v
ZGUgPSBub2Rlc1tpXS5nZXQoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFICYmCisgICAgICAgICAgICAgICAg
KHBhcmFtLmlzRW1wdHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IHBhcmFtKSkKKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0gICAgCisgICAgICAg
IHJldHVybiBtYXRjaGVzOworICAgIH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAibm9kZSgpIikK
KyAgICAgICAgcmV0dXJuIG5vZGVzOworICAgIGVsc2UgeworICAgICAgICBTdHJpbmcgcHJlZml4
LCBsb2NhbE5hbWU7CisKKyAgICAgICAgY29uc3QgaW50IGNvbG9uID0gbV9ub2RlVGVzdC5maW5k
KCc6Jyk7CisgICAgICAgIGlmIChjb2xvbiA+IC0xKSB7CisgICAgICAgICAgICBwcmVmaXggPSBt
X25vZGVUZXN0LmxlZnQoY29sb24pOworICAgICAgICAgICAgbG9jYWxOYW1lID0gbV9ub2RlVGVz
dC5kZXByZWNhdGVkU3RyaW5nKCkubWlkKGNvbG9uICsgMSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsb2NhbE5hbWUgPSBtX25vZGVUZXN0OworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFwcmVmaXguaXNFbXB0eSgpICYmCisgICAgICAgICAgICBFeHByZXNzaW9uOjpldmFsdWF0
aW9uQ29udGV4dCgpLnJlc29sdmVyLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAvKiBGSVhNRTogVGhyb3cgTkFNRVNQQUNFX0VSUiBleGNl
cHRpb24gKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2F4aXMgPT0gQXR0cmlidXRlQXhp
cykgeworICAgICAgICAgICAgLy8gSW4gWFBhdGggbGFuZCwgbmFtZXNwYWNlIG5vZGVzIGFyZSBu
b3QgYWNjZXNzaWJsZQorICAgICAgICAgICAgLy8gb24gdGhlIGF0dHJpYnV0ZSBheGlzLgorICAg
ICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSAieG1sbnMiKQorICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNbaV0uZ2V0
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVOYW1l
KCkgPT0gbG9jYWxOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25l
LgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IG1hdGNoZXM7CisgICAgICAgIH0gZWxzZSBpZiAobV9heGlzID09IE5hbWVzcGFjZUF4aXMpIHsK
KyAgICAgICAgICAgIExPRyhYUGF0aCwgIk5vZGUgdGVzdCAlcyBvbiBheGlzICVzIGlzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQuIiwKKyAgICAgICAgICAgICAgICBtX25vZGVUZXN0LmFzY2lpKCksIGF4
aXNBc1N0cmluZyhtX2F4aXMpLmFzY2lpKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgTm9kZSAqbm9kZSA9IG5vZGVzW2ldLmdldCgpOworIAorICAgICAgICAgICAgICAg
IC8vIFdlIHVzZSB0YWdRTmFtZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgZWxlbWVu
dCBuYW1lIGluIHVwcGVyY2FzZSAKKyAgICAgICAgICAgICAgICAvLyBsaWtlIHdlIGdldCB3aXRo
IEhUTUwgZWxlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RUxFTUVOVF9OT0RFICYmCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+dGFnUU5hbWUoKS50b1N0cmluZygpID09IGxvY2FsTmFtZSkgeworICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIExPRyhYUGF0aCwgIk5vZGUgdGVzdCAlcyBvbiBheGlzICVzIGlz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQuIiwKKyAgICAgICAgbV9ub2RlVGVzdC5hc2NpaSgpLCBheGlz
QXNTdHJpbmcobV9heGlzKS5hc2NpaSgpKTsKKworICAgIHJldHVybiBtYXRjaGVzOworfQorCit2
b2lkIFN0ZXA6Om9wdGltaXplKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
cmVkaWNhdGVzLnNpemUoKTsgaSsrKQorICAgICAgICBtX3ByZWRpY2F0ZXNbaV0tPm9wdGltaXpl
KCk7Cit9CisKK1N0cmluZyBTdGVwOjpuYW1lc3BhY2VGcm9tTm9kZXRlc3QoY29uc3QgU3RyaW5n
JiBub2RlVGVzdCkgY29uc3QKK3sKKyAgICBpbnQgaSA9IG5vZGVUZXN0LmZpbmQoJzonKTsKKyAg
ICBpZiAoaSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHBy
ZWZpeChub2RlVGVzdC5sZWZ0KGkpKTsKKyAgICAKKyAgICBOb2RlICpjdHhOb2RlID0gRXhwcmVz
c2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOworICAgIHJldHVybiBjdHhOb2RlLT5sb29r
dXBOYW1lc3BhY2VVUkkocHJlZml4KTsKK30KKworTm9kZTo6Tm9kZVR5cGUgU3RlcDo6cHJpbWFy
eU5vZGVUeXBlKEF4aXNUeXBlIGF4aXMpIGNvbnN0Cit7CisgICAgc3dpdGNoIChheGlzKSB7Cisg
ICAgICAgIGNhc2UgQXR0cmlidXRlQXhpczoKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpBVFRS
SUJVVEVfTk9ERTsKKyAgICAgICAgY2FzZSBOYW1lc3BhY2VBeGlzOgorICAgICAgICAgICAgcmV0
dXJuIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIE5vZGU6OkVMRU1FTlRfTk9ERTsKKyAgICB9Cit9CisKK30KK30KKworI2Vu
ZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisK
KyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2Jvb2wgaXNSb290RG9tTm9kZShOb2Rl
ICpub2RlKQoreworICAgIHJldHVybiBub2RlICYmICFub2RlLT5wYXJlbnROb2RlKCk7Cit9CisK
K1N0cmluZyBzdHJpbmdWYWx1ZShOb2RlICpub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+bm9k
ZVR5cGUoKSkgeworICAgICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgICAgICBj
YXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgY2FzZSBOb2Rl
OjpDT01NRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPm5vZGVWYWx1ZSgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgaWYgKGlzUm9vdERvbU5vZGUobm9kZSkKKyAgICAgICAgICAgICAgICAgfHwgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
c3RyOworICAgICAgICAgICAgICAgIE5vZGVTZXQgbm9kZXMgPSBnZXRDaGlsZHJlblJlY3Vyc2l2
ZWx5KG5vZGUpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rl
cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBOb2RlICpub2RlID0gbm9kZXNb
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gc3RyaW5nVmFsdWUobm9kZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0cjsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitOb2RlU2V0IGdldENoaWxkcmVuUmVjdXJzaXZlbHkoTm9kZSAqbm9kZSkK
K3sKKyAgICBOb2RlU2V0IG5vZGVzOworICAgIE5vZGUgKm4gPSBub2RlLT5maXJzdENoaWxkKCk7
CisgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICBub2Rl
cy5hcHBlbmQoZ2V0Q2hpbGRyZW5SZWN1cnNpdmVseShuKSk7CisgICAgICAgIG4gPSBuLT5uZXh0
U2libGluZygpOworICAgIH0KKyAgICByZXR1cm4gbm9kZXM7Cit9CisKK2Jvb2wgaXNWYWxpZENv
bnRleHROb2RlKE5vZGUgKm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUgJiYgKAorICAgICAgICAg
ICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSB8fAorICAgICAgICAgICBu
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CisgICAgICAgICAgIG5v
ZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8CisgICAgICAgICAgIG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFIHx8CisgICAgICAgICAgIG5vZGUt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFIHx8CisgICAg
ICAgICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFIHx8CisgICAgICAg
ICAgIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSB8fAorICAgICAgICAg
ICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKTsKK30KKwor
fQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2lt
cGwvZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL2Z1bmN0aW9u
cy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL2Z1bmN0aW9ucy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisvKgorICogZnVuY3Rpb25zLmggLSBDb3B5cmlnaHQg
MjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm
IFhQYXRoX0Z1bmN0aW9uc19ICisjZGVmaW5lIFhQYXRoX0Z1bmN0aW9uc19ICisKKyNpZiBYUEFU
SF9TVVBQT1JUCisKKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisKKyNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgIAorY2xhc3MgRnVuY3Rpb24gOiBwdWJsaWMgRXhw
cmVzc2lvbgoreworcHVibGljOgorICAgIHZvaWQgc2V0QXJndW1lbnRzKGNvbnN0IFZlY3RvcjxF
eHByZXNzaW9uKj4mIGFyZ3MpOworICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
OworCitwcm90ZWN0ZWQ6CisgICAgRXhwcmVzc2lvbiogYXJnKGludCBwb3MpOworICAgIGNvbnN0
IEV4cHJlc3Npb24qIGFyZyhpbnQgcG9zKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgYXJnQ291
bnQoKSBjb25zdDsKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0
cmluZyBtX25hbWU7Cit9OworCitjbGFzcyBGdW5jdGlvbkxpYnJhcnkKK3sKKyAgICBmcmllbmQg
c3RydWN0IEZ1bmN0aW9uTWFwcGluZzsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRnVuY3Rpb25MaWJy
YXJ5ICZzZWxmKCk7CisKKyAgICBGdW5jdGlvbiAqZ2V0RnVuY3Rpb24oY29uc3QgY2hhciAqbmFt
ZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiAmYXJncyA9IFZlY3RvcjxFeHByZXNzaW9uKj4o
KSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEZ1bmN0aW9uUmVjOworCisgICAgRnVu
Y3Rpb25MaWJyYXJ5KCk7CisgICAgRnVuY3Rpb25MaWJyYXJ5KGNvbnN0IEZ1bmN0aW9uTGlicmFy
eSAmcmhzKTsKKyAgICBGdW5jdGlvbkxpYnJhcnkgJm9wZXJhdG9yPShjb25zdCBGdW5jdGlvbkxp
YnJhcnkgJnJocyk7CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlN0cmluZywgRnVuY3Rpb25SZWM+
IG1fZnVuY3Rpb25EaWN0OworfTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAor
CisjZW5kaWYgLy8gWFBhdGhfRnVuY3Rpb25zX0gKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBs
L3N0ZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvc3RlcC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3N0ZXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3NyBAQAorLyoKKyAqIHN0ZXAuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJh
YWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhfU3RlcF9ICisjZGVmaW5l
IFhQYXRoX1N0ZXBfSAorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAicHJlZGljYXRl
LmgiCisjaW5jbHVkZSAidXRpbC5oIgorCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2NsYXNzIFN0ZXAKK3sKK3B1
YmxpYzoKKyAgICBlbnVtIEF4aXNUeXBlIHsKKyAgICAgICAgQW5jZXN0b3JBeGlzPTEsIEFuY2Vz
dG9yT3JTZWxmQXhpcywgQXR0cmlidXRlQXhpcywKKyAgICAgICAgQ2hpbGRBeGlzLCBEZXNjZW5k
YW50QXhpcywgRGVzY2VuZGFudE9yU2VsZkF4aXMsCisgICAgICAgIEZvbGxvd2luZ0F4aXMsIEZv
bGxvd2luZ1NpYmxpbmdBeGlzLCBOYW1lc3BhY2VBeGlzLAorICAgICAgICBQYXJlbnRBeGlzLCBQ
cmVjZWRpbmdBeGlzLCBQcmVjZWRpbmdTaWJsaW5nQXhpcywKKyAgICAgICAgU2VsZkF4aXMKKyAg
ICB9OworCisgICAgc3RhdGljIFN0cmluZyBheGlzQXNTdHJpbmcoQXhpc1R5cGUgYXhpcyk7CisK
KyAgICBTdGVwKCk7CisgICAgU3RlcChBeGlzVHlwZSBheGlzLCBjb25zdCBTdHJpbmcmIG5vZGVU
ZXN0LCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4gJnByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGlj
YXRlKj4oKSk7CisgICAgflN0ZXAoKTsKKworICAgIE5vZGVTZXQgZXZhbHVhdGUoTm9kZSAqY29u
dGV4dCkgY29uc3Q7CisKKyAgICB2b2lkIG9wdGltaXplKCk7CisKK3ByaXZhdGU6CisgICAgTm9k
ZVNldCBub2Rlc0luQXhpcyhOb2RlICpjb250ZXh0KSBjb25zdDsKKyAgICBOb2RlU2V0IG5vZGVU
ZXN0TWF0Y2hlcyhjb25zdCBOb2RlU2V0JiBub2RlcykgY29uc3Q7CisgICAgU3RyaW5nIG5hbWVz
cGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdDsKKyAgICBOb2Rl
OjpOb2RlVHlwZSBwcmltYXJ5Tm9kZVR5cGUoQXhpc1R5cGUgYXhpcykgY29uc3Q7CisKKyAgICBB
eGlzVHlwZSBtX2F4aXM7CisgICAgU3RyaW5nIG1fbm9kZVRlc3Q7CisgICAgVmVjdG9yPFByZWRp
Y2F0ZSo+IG1fcHJlZGljYXRlczsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKworI2VuZGlmIC8vIFhQYXRoX1N0ZXBfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
WFBhdGhHcmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3Jh
bW1hci55CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyMyBAQAorJXsKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgorI2luY2x1ZGUg
InhwYXRoL2ltcGwvcGF0aC5oIgorI2luY2x1ZGUgInN0ZXAuaCIKKyNpbmNsdWRlICJwcmVkaWNh
dGUuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidmFyaWFibGVyZWZlcmVuY2UuaCIK
KyAgICAKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1
YXRvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2RlZmluZSBZWURFQlVHIDAK
KyNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZXIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6WFBhdGg7CisKKyV9CisKKyVwdXJlX3BhcnNlcgor
CisldW5pb24KK3sKKyAgICBTdGVwOjpBeGlzVHlwZSBheGlzVHlwZTsKKyAgICBpbnQgICAgICAg
IG51bTsKKyAgICBTdHJpbmcgKnN0cjsKKyAgICBFeHByZXNzaW9uKiBleHByOworICAgIFZlY3Rv
cjxQcmVkaWNhdGUqPiAqcHJlZExpc3Q7CisgICAgVmVjdG9yPEV4cHJlc3Npb24qPiAqYXJnTGlz
dDsKKyAgICBTdGVwKiBzdGVwOworICAgIExvY2F0aW9uUGF0aCAqbG9jYXRpb25QYXRoOworfQor
CisleworCitpbnQgeHBhdGh5eWxleChZWVNUWVBFICp5eWx2YWwpIHsgcmV0dXJuIFBhcnNlcjo6
Y3VycmVudCgpLT5sZXgoeXlsdmFsKTsgfQordm9pZCB4cGF0aHl5ZXJyb3IoY29uc3QgY2hhciAq
c3RyKSB7IC8qIEZJWE1FIENsZWFuIHhwYXRoeXlsdmFsLnN0ciB1cCB0byBhdm9pZCBsZWFraW5n
IGl0LiAqLyB9CisgICAgCislfQorCislbGVmdCA8bnVtPiBNVUxPUCBSRUxPUCBFUU9QCislbGVm
dCA8c3RyPiBQTFVTIE1JTlVTCislbGVmdCA8c3RyPiBPUiBBTkQKKyV0b2tlbiA8YXhpc1R5cGU+
IEFYSVNOQU1FCisldG9rZW4gPHN0cj4gTk9ERVRZUEUgUEkgRlVOQ1RJT05OQU1FIExJVEVSQUwK
KyV0b2tlbiA8c3RyPiBWQVJJQUJMRVJFRkVSRU5DRSBOVU1CRVIKKyV0b2tlbiA8c3RyPiBET1RE
T1QgU0xBU0hTTEFTSCBOQU1FVEVTVAorJXRva2VuIEVSUk9SCisKKyV0eXBlIDxsb2NhdGlvblBh
dGg+IExvY2F0aW9uUGF0aAorJXR5cGUgPGxvY2F0aW9uUGF0aD4gQWJzb2x1dGVMb2NhdGlvblBh
dGgKKyV0eXBlIDxsb2NhdGlvblBhdGg+IFJlbGF0aXZlTG9jYXRpb25QYXRoCisldHlwZSA8c3Rl
cD4gU3RlcAorJXR5cGUgPGF4aXNUeXBlPiBBeGlzU3BlY2lmaWVyCisldHlwZSA8c3RlcD4gRGVz
Y2VuZGFudE9yU2VsZgorJXR5cGUgPHN0cj4gTm9kZVRlc3QKKyV0eXBlIDxleHByPiBQcmVkaWNh
dGUKKyV0eXBlIDxwcmVkTGlzdD4gUHJlZGljYXRlTGlzdAorJXR5cGUgPHN0ZXA+IEFiYnJldmlh
dGVkU3RlcAorJXR5cGUgPGV4cHI+IEV4cHIKKyV0eXBlIDxleHByPiBQcmltYXJ5RXhwcgorJXR5
cGUgPGV4cHI+IEZ1bmN0aW9uQ2FsbAorJXR5cGUgPGFyZ0xpc3Q+IEFyZ3VtZW50TGlzdAorJXR5
cGUgPGV4cHI+IEFyZ3VtZW50CisldHlwZSA8ZXhwcj4gVW5pb25FeHByCisldHlwZSA8ZXhwcj4g
UGF0aEV4cHIKKyV0eXBlIDxleHByPiBGaWx0ZXJFeHByCisldHlwZSA8ZXhwcj4gT3JFeHByCisl
dHlwZSA8ZXhwcj4gQW5kRXhwcgorJXR5cGUgPGV4cHI+IEVxdWFsaXR5RXhwcgorJXR5cGUgPGV4
cHI+IFJlbGF0aW9uYWxFeHByCisldHlwZSA8ZXhwcj4gQWRkaXRpdmVFeHByCisldHlwZSA8ZXhw
cj4gTXVsdGlwbGljYXRpdmVFeHByCisldHlwZSA8ZXhwcj4gVW5hcnlFeHByCisKKyUlCisKK0V4
cHI6CisgICAgT3JFeHByCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJz
ZXIpLT5tX3RvcEV4cHIgPSAkMTsKKyAgICB9CisgICAgOworCitMb2NhdGlvblBhdGg6CisgICAg
UmVsYXRpdmVMb2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQkLT5tX2Fic29sdXRlID0gZmFs
c2U7CisgICAgfQorICAgIHwKKyAgICBBYnNvbHV0ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAgICAg
ICAgJCQtPm1fYWJzb2x1dGUgPSB0cnVlOworICAgIH0KKyAgICA7CisKK0Fic29sdXRlTG9jYXRp
b25QYXRoOgorICAgICcvJworICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9jYXRpb25QYXRoOwor
ICAgIH0KKyAgICB8CisgICAgJy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoCisgICAgeworICAgICAg
ICAkJCA9ICQyOworICAgIH0KKyAgICB8CisgICAgRGVzY2VuZGFudE9yU2VsZiBSZWxhdGl2ZUxv
Y2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQtPm1fc3RlcHMu
aW5zZXJ0KDAsICQxKTsKKyAgICB9CisgICAgOworCitSZWxhdGl2ZUxvY2F0aW9uUGF0aDoKKyAg
ICBTdGVwCisgICAgeworICAgICAgICAkJCA9IG5ldyBMb2NhdGlvblBhdGg7CisgICAgICAgICQk
LT5tX3N0ZXBzLmFwcGVuZCgkMSk7CisgICAgfQorICAgIHwKKyAgICBSZWxhdGl2ZUxvY2F0aW9u
UGF0aCAnLycgU3RlcAorICAgIHsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCQzKTsKKyAg
ICB9CisgICAgfAorICAgIFJlbGF0aXZlTG9jYXRpb25QYXRoIERlc2NlbmRhbnRPclNlbGYgU3Rl
cAorICAgIHsKKyAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCQyKTsKKyAgICAgICAgJCQtPm1f
c3RlcHMuYXBwZW5kKCQzKTsKKyAgICB9CisgICAgOworCitTdGVwOgorICAgIE5vZGVUZXN0Cisg
ICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKFN0ZXA6OkNoaWxkQXhpcywgKiQxKTsKKyAgICAg
ICAgZGVsZXRlICQxOworICAgIH0KKyAgICB8CisgICAgTm9kZVRlc3QgUHJlZGljYXRlTGlzdAor
ICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVwOjpDaGlsZEF4aXMsICokMSwgKiQyKTsK
KyAgICAgICAgZGVsZXRlICQxOworICAgICAgICBkZWxldGUgJDI7CisgICAgfQorICAgIHwKKyAg
ICBBeGlzU3BlY2lmaWVyIE5vZGVUZXN0CisgICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKCQx
LCAqJDIpOworICAgICAgICBkZWxldGUgJDI7CisgICAgfQorICAgIHwKKyAgICBBeGlzU3BlY2lm
aWVyIE5vZGVUZXN0IFByZWRpY2F0ZUxpc3QKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAo
JDEsICokMiwgICokMyk7CisgICAgICAgIGRlbGV0ZSAkMjsKKyAgICAgICAgZGVsZXRlICQzOwor
ICAgIH0KKyAgICB8CisgICAgQWJicmV2aWF0ZWRTdGVwCisgICAgOworCitBeGlzU3BlY2lmaWVy
OgorICAgIEFYSVNOQU1FCisgICAgfAorICAgICdAJworICAgIHsKKyAgICAgICAgJCQgPSBTdGVw
OjpBdHRyaWJ1dGVBeGlzOworICAgIH0KKyAgICA7CisKK05vZGVUZXN0OgorICAgIE5BTUVURVNU
CisgICAgeworICAgICAgICBjb25zdCBpbnQgY29sb24gPSAkMS0+ZmluZCgnOicpOworICAgICAg
ICBpZiAoY29sb24gPiAtMSkgeworICAgICAgICAgICAgU3RyaW5nIHByZWZpeCgkMS0+bGVmdChj
b2xvbikpOworICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyICpyZXNvbHZlciA9IEV4cHJlc3Np
b246OmV2YWx1YXRpb25Db250ZXh0KCkucmVzb2x2ZXI7CisgICAgICAgICAgICBpZiAoIXJlc29s
dmVyIHx8IHJlc29sdmVyLT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KS5pc051bGwoKSkgewor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPm1fZ290TmFtZXNw
YWNlRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgfAorICAgIE5PREVUWVBFICcoJyAnKScKKyAgICB7Cisg
ICAgICAgICQkID0gbmV3IFN0cmluZygqJDEgKyAiKCkiKTsKKyAgICB9CisgICAgfAorICAgIFBJ
ICcoJyAnKScKKyAgICB8CisgICAgUEkgJygnIExJVEVSQUwgJyknCisgICAgeworICAgICAgICBT
dHJpbmcgcyA9ICokMSArICIgIiArICokMzsKKyAgICAgICAgJCQgPSBuZXcgU3RyaW5nKHMuZGVw
cmVjYXRlZFN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICAgICAgZGVsZXRlICQxOwor
ICAgICAgICBkZWxldGUgJDM7CisgICAgfQorICAgIDsKKworUHJlZGljYXRlTGlzdDoKKyAgICBQ
cmVkaWNhdGUKKyAgICB7CisgICAgICAgICQkID0gbmV3IFZlY3RvcjxQcmVkaWNhdGUqPjsKKyAg
ICAgICAgJCQtPmFwcGVuZChuZXcgUHJlZGljYXRlKCQxKSk7CisgICAgfQorICAgIHwKKyAgICBQ
cmVkaWNhdGVMaXN0IFByZWRpY2F0ZQorICAgIHsKKyAgICAgICAgJCQtPmFwcGVuZChuZXcgUHJl
ZGljYXRlKCQyKSk7CisgICAgfQorICAgIDsKKworUHJlZGljYXRlOgorICAgICdbJyBFeHByICdd
JworICAgIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworCitEZXNjZW5kYW50T3JT
ZWxmOgorICAgIFNMQVNIU0xBU0gKKyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6
RGVzY2VuZGFudE9yU2VsZkF4aXMsICJub2RlKCkiKTsKKyAgICB9CisgICAgOworCitBYmJyZXZp
YXRlZFN0ZXA6CisgICAgJy4nCisgICAgeworICAgICAgICAkJCA9IG5ldyBTdGVwKFN0ZXA6OlNl
bGZBeGlzLCAibm9kZSgpIik7CisgICAgfQorICAgIHwKKyAgICBET1RET1QKKyAgICB7CisgICAg
ICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6UGFyZW50QXhpcywgIm5vZGUoKSIpOworICAgIH0KKyAg
ICA7CisKK1ByaW1hcnlFeHByOgorICAgIFZBUklBQkxFUkVGRVJFTkNFCisgICAgeworICAgICAg
ICAkJCA9IG5ldyBWYXJpYWJsZVJlZmVyZW5jZSgqJDEpOworICAgICAgICBkZWxldGUgJDE7Cisg
ICAgfQorICAgIHwKKyAgICAnKCcgRXhwciAnKScKKyAgICB7CisgICAgICAgICQkID0gJDI7Cisg
ICAgfQorICAgIHwKKyAgICBMSVRFUkFMCisgICAgeworICAgICAgICAkJCA9IG5ldyBTdHJpbmdF
eHByZXNzaW9uKCokMSk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICB9CisgICAgfAorICAgIE5V
TUJFUgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTnVtYmVyKCQxLT5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIGRlbGV0ZSAkMTsKKyAgICB9CisgICAgfAorICAgIEZ1
bmN0aW9uQ2FsbAorICAgIDsKKworRnVuY3Rpb25DYWxsOgorICAgIEZVTkNUSU9OTkFNRSAnKCcg
JyknCisgICAgeworICAgICAgICAkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmdldEZ1bmN0
aW9uKCQxLT5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4xKCkpOworICAgICAgICBkZWxldGUgJDE7
CisgICAgfQorICAgIHwKKyAgICBGVU5DVElPTk5BTUUgJygnIEFyZ3VtZW50TGlzdCAnKScKKyAg
ICB7CisgICAgICAgICQkID0gRnVuY3Rpb25MaWJyYXJ5OjpzZWxmKCkuZ2V0RnVuY3Rpb24oJDEt
PmRlcHJlY2F0ZWRTdHJpbmcoKS5sYXRpbjEoKSwgKiQzKTsKKyAgICAgICAgZGVsZXRlICQxOwor
ICAgICAgICBkZWxldGUgJDM7CisgICAgfQorICAgIDsKKworQXJndW1lbnRMaXN0OgorICAgIEFy
Z3VtZW50CisgICAgeworICAgICAgICAkJCA9IG5ldyBWZWN0b3I8RXhwcmVzc2lvbio+OworICAg
ICAgICAkJC0+YXBwZW5kKCQxKTsKKyAgICB9CisgICAgfAorICAgIEFyZ3VtZW50TGlzdCAnLCcg
QXJndW1lbnQKKyAgICB7CisgICAgICAgICQkLT5hcHBlbmQoJDMpOworICAgIH0KKyAgICA7CisK
K0FyZ3VtZW50OgorICAgIEV4cHIKKyAgICA7CisKKworVW5pb25FeHByOgorICAgIFBhdGhFeHBy
CisgICAgfAorICAgIFVuaW9uRXhwciAnfCcgUGF0aEV4cHIKKyAgICB7CisgICAgICAgICQkID0g
bmV3IFVuaW9uOworICAgICAgICAkJC0+YWRkU3ViRXhwcmVzc2lvbigkMSk7CisgICAgICAgICQk
LT5hZGRTdWJFeHByZXNzaW9uKCQzKTsKKyAgICB9CisgICAgOworCitQYXRoRXhwcjoKKyAgICBM
b2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwKKyAgICBG
aWx0ZXJFeHByCisgICAgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8CisgICAgRmls
dGVyRXhwciAnLycgUmVsYXRpdmVMb2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQzLT5tX2Fi
c29sdXRlID0gdHJ1ZTsKKyAgICAgICAgJCQgPSBuZXcgUGF0aChzdGF0aWNfY2FzdDxGaWx0ZXIq
PigkMSksICQzKTsKKyAgICB9CisgICAgfAorICAgIEZpbHRlckV4cHIgRGVzY2VuZGFudE9yU2Vs
ZiBSZWxhdGl2ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAgJDMtPm1fc3RlcHMuaW5zZXJ0
KDAsICQyKTsKKyAgICAgICAgJDMtPm1fYWJzb2x1dGUgPSB0cnVlOworICAgICAgICAkJCA9IG5l
dyBQYXRoKHN0YXRpY19jYXN0PEZpbHRlcio+KCQxKSwgJDMpOworICAgIH0KKyAgICA7CisKK0Zp
bHRlckV4cHI6CisgICAgUHJpbWFyeUV4cHIKKyAgICB7CisgICAgICAgICQkID0gJDE7CisgICAg
fQorICAgIHwKKyAgICBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0CisgICAgeworICAgICAgICAk
JCA9IG5ldyBGaWx0ZXIoJDEsICokMik7CisgICAgfQorICAgIDsKKworT3JFeHByOgorICAgIEFu
ZEV4cHIKKyAgICB8CisgICAgT3JFeHByIE9SIEFuZEV4cHIKKyAgICB7CisgICAgICAgICQkID0g
bmV3IExvZ2ljYWxPcChMb2dpY2FsT3A6Ok9QX09yLCAkMSwgJDMpOworICAgIH0KKyAgICA7CisK
K0FuZEV4cHI6CisgICAgRXF1YWxpdHlFeHByCisgICAgfAorICAgIEFuZEV4cHIgQU5EIEVxdWFs
aXR5RXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9naWNhbE9wKExvZ2ljYWxPcDo6T1Bf
QW5kLCAkMSwgJDMpOworICAgIH0KKyAgICA7CisKK0VxdWFsaXR5RXhwcjoKKyAgICBSZWxhdGlv
bmFsRXhwcgorICAgIHwKKyAgICBFcXVhbGl0eUV4cHIgRVFPUCBSZWxhdGlvbmFsRXhwcgorICAg
IHsKKyAgICAgICAgJCQgPSBuZXcgRXFUZXN0T3AoJDIsICQxLCAkMyk7CisgICAgfQorICAgIDsK
KworUmVsYXRpb25hbEV4cHI6CisgICAgQWRkaXRpdmVFeHByCisgICAgfAorICAgIFJlbGF0aW9u
YWxFeHByIFJFTE9QIEFkZGl0aXZlRXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTnVtZXJp
Y09wKCQyLCAkMSwgJDMpOworICAgIH0KKyAgICA7CisKK0FkZGl0aXZlRXhwcjoKKyAgICBNdWx0
aXBsaWNhdGl2ZUV4cHIKKyAgICB8CisgICAgQWRkaXRpdmVFeHByIFBMVVMgTXVsdGlwbGljYXRp
dmVFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoTnVtZXJpY09wOjpPUF9B
ZGQsICQxLCAkMyk7CisgICAgfQorICAgIHwKKyAgICBBZGRpdGl2ZUV4cHIgTUlOVVMgTXVsdGlw
bGljYXRpdmVFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoTnVtZXJpY09w
OjpPUF9TdWIsICQxLCAkMyk7CisgICAgfQorICAgIDsKKworTXVsdGlwbGljYXRpdmVFeHByOgor
ICAgIFVuYXJ5RXhwcgorICAgIHwKKyAgICBNdWx0aXBsaWNhdGl2ZUV4cHIgTVVMT1AgVW5hcnlF
eHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoJDIsICQxLCAkMyk7CisgICAg
fQorICAgIDsKKworVW5hcnlFeHByOgorICAgIFVuaW9uRXhwcgorICAgIHwKKyAgICBNSU5VUyBV
bmFyeUV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IE5lZ2F0aXZlOworICAgICAgICAkJC0+
YWRkU3ViRXhwcmVzc2lvbigkMik7CisgICAgfQorICAgIDsKKworCkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvdXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC91dGlsLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvdXRpbC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogdXRpbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBS
YWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
CisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aF9VdGlsX0gK
KyNkZWZpbmUgWFBhdGhfVXRpbF9ICisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJE
ZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgWFBhdGggeworCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiBOb2RlU2V0OworICAgIAorLyogQHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGlz
IHRoZSByb290IG5vZGUuCisgKi8KK2Jvb2wgaXNSb290RG9tTm9kZShOb2RlICpub2RlKTsKKwor
LyogQHJldHVybiB0aGUgJ3N0cmluZy12YWx1ZScgb2YgdGhlIGdpdmVuIG5vZGUgYXMgc3BlY2lm
aWVkIGJ5CisgICBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aAorICovCitTdHJpbmcgc3RyaW5n
VmFsdWUoTm9kZSAqbm9kZSk7CisKKy8qIEByZXR1cm4gYWxsIGFuY2VzdG9yIG5vZGVzIG9mIHRo
ZSBnaXZlbiBub2RlLCBpbiBkb2N1bWVudCBvcmRlci4KKyAqLworTm9kZVNldCBnZXRDaGlsZHJl
blJlY3Vyc2l2ZWx5KE5vZGUgKm5vZGUpOworCisvKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVu
IG5vZGUgaXMgYSB2YWxpZCBjb250ZXh0IG5vZGUKKyAqLworYm9vbCBpc1ZhbGlkQ29udGV4dE5v
ZGUoV2ViQ29yZTo6Tm9kZSAqbm9kZSk7CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKworI2VuZGlmIC8vIFhQYXRoX1V0aWxfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwv
cGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL3BhdGguY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJl
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFhQQVRI
X1NVUFBPUlQKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2luY2x1ZGUgInBhdGguaCIKKwor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK0ZpbHRlcjo6RmlsdGVyKEV4cHJl
c3Npb24qIGV4cHIsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiYgcHJlZGljYXRlcykKKyAgICA6
IG1fZXhwcihleHByKSwKKyAgICBtX3ByZWRpY2F0ZXMocHJlZGljYXRlcykKK3sKK30KKworRmls
dGVyOjp+RmlsdGVyKCkKK3sKKyAgICBkZWxldGUgbV9leHByOworICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX3ByZWRpY2F0ZXMpOworfQorCitWYWx1ZSBGaWx0ZXI6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIFZhbHVlIHYgPSBtX2V4cHItPmV2YWx1YXRlKCk7CisgICAgCisgICAgaWYgKCF2Lmlz
Tm9kZXNldCgpKSB7CisgICAgICAgIGlmICghbV9wcmVkaWNhdGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIExPRyhYUGF0aCwgIklnbm9yaW5nIHByZWRpY2F0ZXMgZm9yIGZpbHRlciBzaW5jZSBl
eHByZXNzaW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIGEgbm9kZXNldCEiKTsKKworICAgICAgICBy
ZXR1cm4gdjsKKyAgICB9CisKKyAgICBOb2RlU2V0IGluTm9kZXMgPSB2LnRvTm9kZVNldCgpLCBv
dXROb2RlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVkaWNhdGVzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIG91dE5vZGVzLmNsZWFyKCk7CisgICAgICAgIEV4cHJlc3Npb246
OmV2YWx1YXRpb25Db250ZXh0KCkuc2l6ZSA9IGluTm9kZXMuc2l6ZSgpOworICAgICAgICBFeHBy
ZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uID0gMDsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbk5vZGVzLnNpemUoKTsgaisrKSB7CisgICAg
ICAgICAgICBOb2RlICpub2RlID0gaW5Ob2Rlc1tqXS5nZXQoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gbm9kZTsKKyAg
ICAgICAgICAgICsrRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fcHJlZGljYXRlc1tpXS0+ZXZhbHVhdGUoKSkK
KyAgICAgICAgICAgICAgICBvdXROb2Rlcy5hcHBlbmQobm9kZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaW5Ob2RlcyA9IG91dE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBWYWx1ZShvdXROb2Rl
cyk7Cit9CisKK0xvY2F0aW9uUGF0aDo6TG9jYXRpb25QYXRoKCkKKyAgICA6IG1fYWJzb2x1dGUo
ZmFsc2UpCit7Cit9CisKK0xvY2F0aW9uUGF0aDo6fkxvY2F0aW9uUGF0aCgpCit7CisgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fc3RlcHMpOworfQorCit2b2lkIExvY2F0aW9uUGF0aDo6b3B0aW1pemUo
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0ZXBzLnNpemUoKTsgaSsrKQor
ICAgICAgICBtX3N0ZXBzW2ldLT5vcHRpbWl6ZSgpOworfQorCitWYWx1ZSBMb2NhdGlvblBhdGg6
OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIGlmIChtX2Fic29sdXRlKSB7CisgICAgICAgIExP
RyhYUGF0aCwgIkV2YWx1YXRpbmcgYWJzb2x1dGUgcGF0aCBleHByZXNzaW9uIHdpdGggJWkgbG9j
YXRpb24gc3RlcHMuXG4iLCBtX3N0ZXBzLnNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
TE9HKFhQYXRoLCAiRXZhbHVhdGluZyByZWxhdGl2ZSBwYXRoIGV4cHJlc3Npb24gd2l0aCAlaSBs
b2NhdGlvbiBzdGVwcy5cbiIsIG1fc3RlcHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBOb2RlU2V0
IGluRG9tTm9kZXMsIG91dERvbU5vZGVzOworCisgICAgLyogRm9yIGFic29sdXRlIGxvY2F0aW9u
IHBhdGhzLCB0aGUgY29udGV4dCBub2RlIGlzIGlnbm9yZWQgLSB0aGUKKyAgICAgKiBkb2N1bWVu
dCdzIHJvb3Qgbm9kZSBpcyB1c2VkIGluc3RlYWQuCisgICAgICovCisgICAgTm9kZSAqY29udGV4
dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZTsKKyAgICBpZiAobV9hYnNv
bHV0ZSAmJiBjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpIAorICAg
ICAgICBjb250ZXh0ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgpOworCisgICAgaW5Eb21Ob2Rl
cy5hcHBlbmQoY29udGV4dCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c3RlcHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RlcCAqc3RlcCA9IG1fc3RlcHNbaV07CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGluRG9tTm9kZXMuc2l6ZSgpOyBqKysp
IHsKKyAgICAgICAgICAgIE5vZGVTZXQgbWF0Y2hlcyA9IHN0ZXAtPmV2YWx1YXRlKGluRG9tTm9k
ZXNbal0uZ2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXREb21Ob2Rlcy5hcHBl
bmQobWF0Y2hlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGluRG9tTm9kZXMgPSBv
dXREb21Ob2RlczsKKyAgICAgICAgb3V0RG9tTm9kZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gVmFsdWUoaW5Eb21Ob2Rlcyk7Cit9CisKK1BhdGg6OlBhdGgoRmlsdGVyICpmaWx0ZXIs
IExvY2F0aW9uUGF0aCAqcGF0aCkKKyAgICA6IG1fZmlsdGVyKGZpbHRlciksCisgICAgbV9wYXRo
KHBhdGgpCit7Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9maWx0ZXI7Cisg
ICAgZGVsZXRlIG1fcGF0aDsKK30KKworVmFsdWUgUGF0aDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFZhbHVlKCk7Cit9CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvaW1wbC9wYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0
aC9pbXBsL3BhcnNlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDU1IEBACisvKgorICog
Q29weXJpZ2h0IDIwMDUgTWFrc2ltIE9ybG92aWNoIDxtYWtzaW1Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFO
WSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICog
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVk
ZSAicGFyc2VyLmgiCisjaW5jbHVkZSAiWFBhdGhFdmFsdWF0b3IuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworI2luY2x1ZGUgIlhQYXRoR3JhbW1hci5oIiAg
ICAKKworc3RydWN0IEF4aXNOYW1lTWFwcGluZworeworICAgIGNvbnN0IGNoYXIgKm5hbWU7Cisg
ICAgU3RlcDo6QXhpc1R5cGUgdHlwZTsKK307CisKK3N0YXRpYyBBeGlzTmFtZU1hcHBpbmcgYXhp
c05hbWVzW10gPSB7CisgICAgeyAiYW5jZXN0b3IiLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAg
ICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCisgICAg
eyAiYXR0cmlidXRlIiwgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgIHsgImNoaWxkIiwgU3Rl
cDo6Q2hpbGRBeGlzIH0sCisgICAgeyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlz
IH0sCisgICAgeyAiZGVzY2VuZGFudC1vci1zZWxmIiwgU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4
aXMgfSwKKyAgICB7ICJmb2xsb3dpbmciLCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCisgICAgeyAi
Zm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgIHsg
Im5hbWVzcGFjZSIsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMgfSwKKyAgICB7ICJwYXJlbnQiLCBTdGVw
OjpQYXJlbnRBeGlzIH0sCisgICAgeyAicHJlY2VkaW5nIiwgU3RlcDo6UHJlY2VkaW5nQXhpcyB9
LAorICAgIHsgInByZWNlZGluZy1zaWJsaW5nIiwgU3RlcDo6UHJlY2VkaW5nU2libGluZ0F4aXMg
fSwKKyAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMgfQorfTsKKworc3RhdGljIHVuc2lnbmVk
IGludCBheGlzTmFtZXNDb3VudCA9IHNpemVvZihheGlzTmFtZXMpIC8gc2l6ZW9mKGF4aXNOYW1l
c1swXSk7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgbm9kZVR5cGVOYW1lc1tdID0geworICAg
ICJjb21tZW50IiwKKyAgICAidGV4dCIsCisgICAgInByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iLAor
ICAgICJub2RlIiwKKyAgICAwCit9OworCitIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpc1R5cGU+
KiBQYXJzZXI6OnNfYXhpc05hbWVzRGljdCA9IDA7CitIYXNoU2V0PFN0cmluZz4qIFBhcnNlcjo6
c19ub2RlVHlwZU5hbWVzRGljdCA9IDA7CisKK1BhcnNlciogUGFyc2VyOjpjdXJyZW50UGFyc2Vy
ID0gMDsKKworUGFyc2VyOjpYTUxDYXQgUGFyc2VyOjpjaGFyQ2F0KFFDaGFyIGFDaGFyKQorewor
ICAgIC8vIyMjIG1pZ2h0IG5lZWQgdG8gYWRkIHNvbWUgc3BlY2lhbCBjYXNlcyBmcm9tIHRoZSBY
TUwgc3BlYy4KKworICAgIGlmIChhQ2hhci51bmljb2RlKCkgPT0gJ18nKQorICAgICAgICByZXR1
cm4gTmFtZVN0YXJ0OworCisgICAgaWYgKGFDaGFyLnVuaWNvZGUoKSA9PSAnLicgfHwgYUNoYXIu
dW5pY29kZSgpID09ICctJykKKyAgICAgICAgcmV0dXJuIE5hbWVDb250OworICAgIHN3aXRjaCAo
dV9jaGFyVHlwZShhQ2hhci51bmljb2RlKCkpKSB7CisgICAgICAgIGNhc2UgVV9MT1dFUkNBU0Vf
TEVUVEVSOiAvL0xsCisgICAgICAgIGNhc2UgVV9VUFBFUkNBU0VfTEVUVEVSOiAvL0x1CisgICAg
ICAgIGNhc2UgVV9PVEhFUl9MRVRURVI6ICAgICAvL0xvCisgICAgICAgIGNhc2UgVV9USVRMRUNB
U0VfTEVUVEVSOiAvL0x0CisgICAgICAgIGNhc2UgVV9MRVRURVJfTlVNQkVSOiAgICAvL05sCisg
ICAgICAgICAgICByZXR1cm4gTmFtZVN0YXJ0OworICAgICAgICBjYXNlIFVfQ09NQklOSU5HX1NQ
QUNJTkdfTUFSSzogLy9NYworICAgICAgICBjYXNlIFVfRU5DTE9TSU5HX01BUks6ICAgICAgICAg
Ly9NZQorICAgICAgICBjYXNlIFVfTk9OX1NQQUNJTkdfTUFSSzogICAgICAgLy9NbgorICAgICAg
ICBjYXNlIFVfTU9ESUZJRVJfTEVUVEVSOiAgICAgICAgLy9MbQorICAgICAgICBjYXNlIFVfREVD
SU1BTF9ESUdJVF9OVU1CRVI6ICAgLy9OZAorICAgICAgICAgICAgcmV0dXJuIE5hbWVDb250Owor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5vdFBhcnRPZk5hbWU7CisgICAg
fQorfQorCitib29sIFBhcnNlcjo6aXNBeGlzTmFtZShTdHJpbmcgbmFtZSwgU3RlcDo6QXhpc1R5
cGUmIHR5cGUpCit7CisgICAgaWYgKCFzX2F4aXNOYW1lc0RpY3QpIHsKKyAgICAgICAgc19heGlz
TmFtZXNEaWN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT47CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IHAgPSAwOyBwIDwgYXhpc05hbWVzQ291bnQ7ICsrcCkKKyAgICAg
ICAgICAgIHNfYXhpc05hbWVzRGljdC0+c2V0KGF4aXNOYW1lc1twXS5uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXhpc05hbWVzW3BdLnR5cGUpOworICAgIH0KKworICAg
IEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT46Oml0ZXJhdG9yIGl0ID0gc19heGlzTmFt
ZXNEaWN0LT5maW5kKG5hbWUpOworICAgIAorICAgIGlmIChpdCAhPSBzX2F4aXNOYW1lc0RpY3Qt
PmVuZCgpKSB7CisgICAgICAgIHR5cGUgPSBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYXJz
ZXI6OmlzTm9kZVR5cGVOYW1lKFN0cmluZyBuYW1lKQoreworICAgIGlmICghc19ub2RlVHlwZU5h
bWVzRGljdCkgeworICAgICAgICBzX25vZGVUeXBlTmFtZXNEaWN0ID0gbmV3IEhhc2hTZXQ8U3Ry
aW5nPjsKKyAgICAgICAgZm9yIChpbnQgcCA9IDA7IG5vZGVUeXBlTmFtZXNbcF07ICsrcCkKKyAg
ICAgICAgICAgIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmFkZChub2RlVHlwZU5hbWVzW3BdKTsKKyAg
ICB9CisgICAgcmV0dXJuIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmNvbnRhaW5zKFN0cmluZyhuYW1l
KSk7Cit9CisKKy8qIFJldHVybnMgd2hldGhlciB0aGUgbGFzdCBwYXJzZWQgdG9rZW4gbWF0Y2hl
cyB0aGUgWzMyXSBPcGVyYXRvciBydWxlCisgKiAoY2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIv
eHBhdGgjZXhwcmxleCkuIE5lY2Vzc2FyeSB0byBkaXNhbWJpZ3VhdGUKKyAqIHRoZSB0b2tlbnMu
CisgKi8KK2Jvb2wgUGFyc2VyOjppc09wZXJhdG9yQ29udGV4dCgpCit7CisgICAgaWYgKG1fbmV4
dFBvcyA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fbGFzdFRv
a2VuVHlwZSkgeworICAgICAgICBjYXNlIEFORDogY2FzZSBPUjogY2FzZSBNVUxPUDoKKyAgICAg
ICAgY2FzZSAnLyc6IGNhc2UgU0xBU0hTTEFTSDogY2FzZSAnfCc6IGNhc2UgUExVUzogY2FzZSBN
SU5VUzoKKyAgICAgICAgY2FzZSBFUU9QOiBjYXNlIFJFTE9QOgorICAgICAgICBjYXNlICdAJzog
Y2FzZSBBWElTTkFNRTogICBjYXNlICcoJzogY2FzZSAnWyc6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9CisKK3ZvaWQgUGFyc2VyOjpza2lwV1MoKQoreworICAgIHdoaWxlIChtX25leHRQb3MgPCBt
X2RhdGEubGVuZ3RoKCkgJiYgbV9kYXRhW21fbmV4dFBvc10uaXNTcGFjZSgpKQorICAgICAgICAr
K21fbmV4dFBvczsKK30KKworVG9rZW4gUGFyc2VyOjptYWtlVG9rZW5BbmRBZHZhbmNlKGludCBj
b2RlLCBpbnQgYWR2YW5jZSkKK3sKKyAgICBtX25leHRQb3MgKz0gYWR2YW5jZTsKKyAgICByZXR1
cm4gVG9rZW4oY29kZSk7Cit9CisKK1Rva2VuIFBhcnNlcjo6bWFrZUludFRva2VuQW5kQWR2YW5j
ZShpbnQgY29kZSwgaW50IHZhbCwgaW50IGFkdmFuY2UpCit7CisgICAgbV9uZXh0UG9zICs9IGFk
dmFuY2U7CisgICAgcmV0dXJuIFRva2VuKGNvZGUsIHZhbCk7Cit9CisKKy8vUmV0dXJucyBuZXh0
IGNoYXIgaWYgaXQncyB0aGVyZSBhbmQgaW50ZXJlc3RpbmcsIDAgb3RoZXJ3aXNlCitjaGFyIFBh
cnNlcjo6cGVla0FoZWFkSGVscGVyKCkKK3sKKyAgICBpZiAobV9uZXh0UG9zICsgMSA+PSBtX2Rh
dGEubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAgIFFDaGFyIG5leHQgPSBtX2RhdGFb
bV9uZXh0UG9zICsgMV07CisgICAgaWYgKG5leHQucm93KCkgIT0gMCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbmV4dC5jZWxsKCk7Cit9CisKK2NoYXIgUGFy
c2VyOjpwZWVrQ3VySGVscGVyKCkKK3sKKyAgICBpZiAobV9uZXh0UG9zID49IG1fZGF0YS5sZW5n
dGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUUNoYXIgbmV4dCA9IG1fZGF0YVttX25leHRQ
b3NdOworICAgIGlmIChuZXh0LnJvdygpICE9IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIG5leHQuY2VsbCgpOworfQorCitUb2tlbiBQYXJzZXI6OmxleFN0
cmluZygpCit7CisgICAgUUNoYXIgZGVsaW1pdGVyID0gbV9kYXRhW21fbmV4dFBvc107CisgICAg
aW50ICAgc3RhcnRQb3MgID0gbV9uZXh0UG9zICsgMTsKKworICAgIGZvciAobV9uZXh0UG9zID0g
c3RhcnRQb3M7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsKKyAg
ICAgICAgaWYgKG1fZGF0YVttX25leHRQb3NdID09IGRlbGltaXRlcikgeworICAgICAgICAgICAg
U3RyaW5nIHZhbHVlID0gbV9kYXRhLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoc3RhcnRQb3MsIG1f
bmV4dFBvcyAtIHN0YXJ0UG9zKTsKKyAgICAgICAgICAgICsrbV9uZXh0UG9zOyAvL0NvbnN1bWUg
dGhlIGNoYXI7CisgICAgICAgICAgICByZXR1cm4gVG9rZW4oTElURVJBTCwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy9PdWNoLCB3ZW50IG9mZiB0aGUgZW5kIC0tIHJlcG9ydCBl
cnJvcgorICAgIHJldHVybiBUb2tlbihFUlJPUik7Cit9CisKK1Rva2VuIFBhcnNlcjo6bGV4TnVt
YmVyKCkKK3sKKyAgICBpbnQgc3RhcnRQb3MgPSBtX25leHRQb3M7CisgICAgYm9vbCBzZWVuRG90
ID0gZmFsc2U7CisKKyAgICAvL0dvIHVudGlsIGVuZCBvciBhIG5vbi1kaWdpdHMgY2hhcmFjdGVy
CisgICAgZm9yICg7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsK
KyAgICAgICAgUUNoYXIgYUNoYXIgPSBtX2RhdGFbbV9uZXh0UG9zXTsKKyAgICAgICAgaWYgKGFD
aGFyLnJvdygpICE9IDApIGJyZWFrOworCisgICAgICAgIGlmIChhQ2hhci5jZWxsKCkgPCAnMCcg
fHwgYUNoYXIuY2VsbCgpID4gJzknKSB7CisgICAgICAgICAgICBpZiAoYUNoYXIuY2VsbCgpID09
ICcuJyAmJiAhc2VlbkRvdCkKKyAgICAgICAgICAgICAgICBzZWVuRG90ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFN0cmluZyB2YWx1ZSA9IG1fZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9z
LCBtX25leHRQb3MgLSBzdGFydFBvcyk7CisgICAgcmV0dXJuIFRva2VuKE5VTUJFUiwgdmFsdWUp
OworfQorCitUb2tlbiBQYXJzZXI6OmxleE5DTmFtZSgpCit7CisgICAgaW50IHN0YXJ0UG9zID0g
bV9uZXh0UG9zOworICAgIGlmIChtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYgY2hhckNh
dChtX2RhdGFbbV9uZXh0UG9zXSkgPT0gTmFtZVN0YXJ0KSB7CisgICAgICAgIC8vS2VlcCBnb2lu
ZyB1bnRpbCB3ZSBnZXQgYSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBnb29kIGZvciBuYW1lcy4KKyAg
ICAgICAgZm9yICg7IG1fbmV4dFBvcyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsK
KyAgICAgICAgICAgIGlmIChjaGFyQ2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOb3RQYXJ0T2ZO
YW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBTdHJpbmcgdmFsdWUgPSBtX2RhdGEuZGVwcmVjYXRlZFN0cmluZygpLm1pZChzdGFydFBvcywg
bV9uZXh0UG9zIC0gc3RhcnRQb3MpOworICAgICAgICByZXR1cm4gVG9rZW4oRVJST1IgKyAxLCB2
YWx1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFu
Y2UoRVJST1IpOworfQorCitUb2tlbiBQYXJzZXI6OmxleFFOYW1lKCkKK3sKKyAgICBUb2tlbiB0
MSA9IGxleE5DTmFtZSgpOworICAgIGlmICh0MS50eXBlID09IEVSUk9SKSByZXR1cm4gdDE7Cisg
ICAgc2tpcFdTKCk7CisgICAgLy9JZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgOiwgd2hhdCB3ZSBq
dXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCisgICAgLy9pdCdzIHRoZSB3aG9sZSB0aGlu
ZworICAgIGlmIChwZWVrQWhlYWRIZWxwZXIoKSAhPSAnOicpCisgICAgICAgIHJldHVybiB0MTsK
KworICAgIFRva2VuIHQyID0gbGV4TkNOYW1lKCk7CisgICAgaWYgKHQyLnR5cGUgPT0gRVJST1Ip
IHJldHVybiB0MjsKKworICAgIHJldHVybiBUb2tlbihFUlJPUiArIDEsIHQxLnZhbHVlICsgIjoi
ICsgdDIudmFsdWUpOworfQorCitUb2tlbiBQYXJzZXI6Om5leHRUb2tlbkludGVybmFsKCkKK3sK
KyAgICBza2lwV1MoKTsKKworICAgIGlmIChtX25leHRQb3MgPj0gbV9kYXRhLmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gVG9rZW4oMCk7CisKKyAgICBjaGFyIGNvZGUgPSBwZWVrQ3VySGVscGVy
KCk7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgIGNhc2UgJygnOiBjYXNlICcpJzogY2Fz
ZSAnWyc6IGNhc2UgJ10nOgorICAgICAgICBjYXNlICdAJzogY2FzZSAnLCc6IGNhc2UgJ3wnOgor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoY29kZSk7CisgICAgICAgIGNh
c2UgJ1wnJzoKKyAgICAgICAgY2FzZSAnXCInOgorICAgICAgICAgICAgcmV0dXJuIGxleFN0cmlu
ZygpOworICAgICAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2Fz
ZSAnNCc6CisgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBj
YXNlICc5JzoKKyAgICAgICAgICAgIHJldHVybiBsZXhOdW1iZXIoKTsKKyAgICAgICAgY2FzZSAn
Lic6IHsKKyAgICAgICAgICAgIGNoYXIgbmV4dCA9IHBlZWtBaGVhZEhlbHBlcigpOworICAgICAg
ICAgICAgaWYgKG5leHQgPT0gJy4nKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5B
bmRBZHZhbmNlKERPVERPVCwgMik7CisgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID49ICcwJyAm
JiBuZXh0IDw9ICc5JykKKyAgICAgICAgICAgICAgICByZXR1cm4gbGV4TnVtYmVyKCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2Uo
Jy4nKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgIGlmIChwZWVr
QWhlYWRIZWxwZXIoKSA9PSAnLycpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFu
ZEFkdmFuY2UoU0xBU0hTTEFTSCwgMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoJy8nKTsKKyAgICAgICAgY2FzZSAnKyc6Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShQTFVTKTsKKyAgICAgICAgY2Fz
ZSAnLSc6CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShNSU5VUyk7Cisg
ICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFu
Y2UoRVFPUCwgRXFUZXN0T3A6Ok9QX0VRKTsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAg
ICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQorICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlSW50VG9rZW5BbmRBZHZhbmNlKEVRT1AsIEVxVGVzdE9wOjpPUF9ORSwgMik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKKyAgICAgICAg
Y2FzZSAnPCc6CisgICAgICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmlj
T3A6Ok9QX0xFLCAyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJpY09wOjpPUF9MVCk7CisgICAgICAg
IGNhc2UgJz4nOgorICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVtZXJp
Y09wOjpPUF9HRSwgMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIE51bWVyaWNPcDo6T1BfR1QpOworICAgICAg
ICBjYXNlICcqJzoKKyAgICAgICAgICAgIGlmIChpc09wZXJhdG9yQ29udGV4dCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6
Ok9QX011bCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICArK21fbmV4dFBv
czsKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oTkFNRVRFU1QsICIqIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIGNhc2UgJyQnOiB7Ly8kIFFOYW1lCisgICAgICAgICAgICBtX25leHRQ
b3MrKzsKKyAgICAgICAgICAgIFRva2VuIHBhciA9IGxleFFOYW1lKCk7CisgICAgICAgICAgICBp
ZiAocGFyLnR5cGUgPT0gRVJST1IpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcjsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oVkFSSUFCTEVSRUZFUkVO
Q0UsIHBhci52YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUb2tlbiB0MSA9IGxleE5D
TmFtZSgpOworICAgIGlmICh0MS50eXBlID09IEVSUk9SKSByZXR1cm4gdDE7CisKKyAgICBza2lw
V1MoKTsKKyAgICAvL0lmIHdlJ3JlIGluIGFuIG9wZXJhdG9yIGNvbnRleHQsIGNoZWNrIGZvciBh
bnkgb3BlcmF0b3IgbmFtZXMKKyAgICBpZiAoaXNPcGVyYXRvckNvbnRleHQoKSkgeworICAgICAg
ICBpZiAodDEudmFsdWUgPT0gImFuZCIpIC8vIyMjIGhhc2g/CisgICAgICAgICAgICByZXR1cm4g
VG9rZW4oQU5EKTsKKyAgICAgICAgaWYgKHQxLnZhbHVlID09ICJvciIpCisgICAgICAgICAgICBy
ZXR1cm4gVG9rZW4oT1IpOworICAgICAgICBpZiAodDEudmFsdWUgPT0gIm1vZCIpCisgICAgICAg
ICAgICByZXR1cm4gVG9rZW4oTVVMT1AsIE51bWVyaWNPcDo6T1BfTW9kKTsKKyAgICAgICAgaWYg
KHQxLnZhbHVlID09ICJkaXYiKQorICAgICAgICAgICAgcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1l
cmljT3A6Ok9QX0Rpdik7CisgICAgfQorCisgICAgLy9TZWUgd2hldGhlciB3ZSBhcmUgYXQgYSA6
CisgICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnOicpIHsKKyAgICAgICAgbV9uZXh0UG9zKys7
CisgICAgICAgIC8vQW55IGNoYW5jZSBpdCdzIGFuIGF4aXMgbmFtZT8KKyAgICAgICAgaWYgKHBl
ZWtDdXJIZWxwZXIoKSA9PSAnOicpIHsKKyAgICAgICAgICAgIG1fbmV4dFBvcysrOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvL0l0IG1pZ2h0IGJlIGFuIGF4aXMgbmFtZS4KKyAgICAgICAg
ICAgIFN0ZXA6OkF4aXNUeXBlIGF4aXNUeXBlOworICAgICAgICAgICAgaWYgKGlzQXhpc05hbWUo
dDEudmFsdWUsIGF4aXNUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oQVhJU05B
TUUsIGF4aXNUeXBlKTsKKyAgICAgICAgICAgIC8vVWdoLCA6OiBpcyBvbmx5IHZhbGlkIGluIGF4
aXMgbmFtZXMgLT4gZXJyb3IKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihFUlJPUik7CisgICAg
ICAgIH0KKworICAgICAgICAvL1NlZW1zIGxpa2UgdGhpcyBpcyBhIGZ1bGx5IHF1YWxpZmllZCBx
bmFtZSwgb3IgcGVyaGFwcyB0aGUgKiBtb2RpZmllZCBvbmUgZnJvbSBOYW1lVGVzdAorICAgICAg
ICBza2lwV1MoKTsKKyAgICAgICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnKicpIHsKKyAgICAg
ICAgICAgIG1fbmV4dFBvcysrOworICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCB0
MS52YWx1ZSArICI6KiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvL01ha2UgYSBm
dWxsIHFuYW1lLi4KKyAgICAgICAgVG9rZW4gdDIgPSBsZXhOQ05hbWUoKTsKKyAgICAgICAgaWYg
KHQyLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MjsKKyAgICAgICAgCisgICAgICAgIHQxLnZhbHVl
ID0gdDEudmFsdWUgKyAnOicgKyB0Mi52YWx1ZTsKKyAgICB9CisKKyAgICBza2lwV1MoKTsKKyAg
ICBpZiAocGVla0N1ckhlbHBlcigpID09ICcoJykgeworICAgICAgICAvL25vdGU6IHdlIGRvbid0
IHN3YWxsb3cgdGhlIChoZXJlIQorICAgICAgICAKKyAgICAgICAgLy9laXRoZXIgbm9kZSB0eXBl
IG9mIGZ1bmN0aW9uIG5hbWUKKyAgICAgICAgaWYgKGlzTm9kZVR5cGVOYW1lKHQxLnZhbHVlKSkg
eworICAgICAgICAgICAgaWYgKHQxLnZhbHVlID09ICJwcm9jZXNzaW5nLWluc3RydWN0aW9uIikK
KyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oUEksIHQxLnZhbHVlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oTk9ERVRZUEUsIHQxLnZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICAvL211c3QgYmUgYSBmdW5jdGlvbiBuYW1lLgorICAgICAgICBy
ZXR1cm4gVG9rZW4oRlVOQ1RJT05OQU1FLCB0MS52YWx1ZSk7CisgICAgfQorCisgICAgLy9BdCB0
aGlzIHBvaW50LCBpdCBtdXN0IGJlIE5BTUVURVNUCisgICAgcmV0dXJuIFRva2VuKE5BTUVURVNU
LCB0MS52YWx1ZSk7Cit9CisKK1Rva2VuIFBhcnNlcjo6bmV4dFRva2VuKCkKK3sKKyAgICBUb2tl
biB0b1JldCA9IG5leHRUb2tlbkludGVybmFsKCk7CisgICAgbV9sYXN0VG9rZW5UeXBlID0gdG9S
ZXQudHlwZTsKKyAgICByZXR1cm4gdG9SZXQ7Cit9CisKK1BhcnNlcjo6UGFyc2VyKCkKK3sKKyAg
ICByZXNldChTdHJpbmcoKSk7Cit9CisKK3ZvaWQgUGFyc2VyOjpyZXNldChjb25zdCBTdHJpbmcm
IGRhdGEpCit7CisgICAgbV9uZXh0UG9zID0gMDsKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIG1f
bGFzdFRva2VuVHlwZSA9IDA7CisgICAgCisgICAgbV90b3BFeHByID0gMDsKKyAgICBtX2dvdE5h
bWVzcGFjZUVycm9yID0gZmFsc2U7Cit9CisKK2ludCBQYXJzZXI6OmxleCh2b2lkKiBfeXlsdmFs
KQoreworICAgIFlZU1RZUEUgKnl5bHZhbCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPihfeXlsdmFs
KTsKKyAgICBUb2tlbiB0b2sgPSBuZXh0VG9rZW4oKTsKKyAKKyAgICBpZiAoIXRvay52YWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgIHl5bHZhbC0+c3RyID0gbmV3IFN0cmluZyh0b2sudmFsdWUpOwor
ICAgIGVsc2UgaWYgKHRvay5pbnRWYWx1ZSkKKyAgICAgICAgeXlsdmFsLT5udW0gPSB0b2suaW50
VmFsdWU7CisgICAgCisgICAgcmV0dXJuIHRvay50eXBlOworfQorCitFeHByZXNzaW9uKiBQYXJz
ZXI6OnBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBFeGNlcHRpb25Db2Rl
JiBjb2RlKQoreworICAgIHJlc2V0KHN0YXRlbWVudCk7CisgICAgCisgICAgUGFyc2VyKiBvbGRQ
YXJzZXIgPSBjdXJyZW50UGFyc2VyOworICAgIGN1cnJlbnRQYXJzZXIgPSB0aGlzOworICAgIGlu
dCBwYXJzZUVycm9yID0geHBhdGh5eXBhcnNlKHRoaXMpOworICAgIGN1cnJlbnRQYXJzZXIgPSBv
bGRQYXJzZXI7CisgICAgCisgICAgaWYgKHBhcnNlRXJyb3IpIHsKKyAgICAgICAgaWYgKG1fZ290
TmFtZXNwYWNlRXJyb3IpCisgICAgICAgICAgICBjb2RlID0gTkFNRVNQQUNFX0VSUjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV90b3BFeHByOworfQorCit9
Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBh
dGhSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisg
KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRlICJY
UGF0aEV2YWx1YXRvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKworY2xhc3MgSW52YWxp
ZGF0aW5nRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAg
ICBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSAqbm9kZSwgWFBhdGhS
ZXN1bHQgKnJlc3VsdCkgCisgICAgICAgIDogbV9ub2RlKG5vZGUpLCBtX3Jlc3VsdChyZXN1bHQp
IHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wpIHsg
bV9yZXN1bHQtPmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7IH0KK3ByaXZhdGU6CisgICAgRXZl
bnRUYXJnZXROb2RlICptX25vZGU7CisgICAgWFBhdGhSZXN1bHQgKm1fcmVzdWx0OworfTsKKwor
WFBhdGhSZXN1bHQ6OlhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXQsIGNv
bnN0IFZhbHVlICZ2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX2V2ZW50VGFy
Z2V0KGV2ZW50VGFyZ2V0KQoreworICAgIG1fZXZlbnRMaXN0ZW5lciA9IG5ldyBJbnZhbGlkYXRp
bmdFdmVudExpc3RlbmVyKG1fZXZlbnRUYXJnZXQuZ2V0KCksIHRoaXMpOworICAgIG1fZXZlbnRU
YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVkRXZl
bnQsIG1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOworICAgICAgICAKKyAgICBzd2l0Y2ggKG1fdmFs
dWUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgVmFsdWU6OkJvb2xlYW46CisgICAgICAgICAgICBt
X3Jlc3VsdFR5cGUgPSBCT09MRUFOX1RZUEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWYWx1ZTo6TnVtYmVyOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gTlVNQkVSX1RZ
UEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZTo6U3RyaW5nXzoKKyAg
ICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IFNUUklOR19UWVBFOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmFsdWU6Ok5vZGVzZXQ6CisgICAgICAgICAgICBtX3Jlc3VsdFR5cGUg
PSBVTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOworICAgICAgICAgICAgbV9ub2RlU2V0UG9z
aXRpb24gPSAwOworICAgICAgICAgICAgbV9ub2RlU2V0ID0gbV92YWx1ZS50b05vZGVTZXQoKTsK
KyAgICAgICAgICAgIG1faW52YWxpZEl0ZXJhdG9yU3RhdGUgPSBmYWxzZTsKKyAgICB9Cit9CisK
K1hQYXRoUmVzdWx0Ojp+WFBhdGhSZXN1bHQoKQoreworICAgIGlmIChtX2V2ZW50VGFyZ2V0KQor
ICAgICAgICBtX2V2ZW50VGFyZ2V0LT5yZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50TmFtZXM6OkRP
TVN1YnRyZWVNb2RpZmllZEV2ZW50LCBtX2V2ZW50TGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKK30K
Kwordm9pZCBYUGF0aFJlc3VsdDo6Y29udmVydFRvKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFOWV9U
WVBFOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTlVNQkVSX1RZUEU6CisgICAg
ICAgICAgICBtX3Jlc3VsdFR5cGUgPSB0eXBlOworICAgICAgICAgICAgbV92YWx1ZSA9IFZhbHVl
KG1fdmFsdWUudG9OdW1iZXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
VFJJTkdfVFlQRToKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IHR5cGU7CisgICAgICAgICAg
ICBtX3ZhbHVlID0gVmFsdWUobV92YWx1ZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJPT0xFQU5fVFlQRToKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9
IHR5cGU7CisgICAgICAgICAgICBtX3ZhbHVlID0gVmFsdWUobV92YWx1ZS50b0Jvb2xlYW4oKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVTk9SREVSRURfTk9ERV9JVEVSQVRP
Ul9UWVBFOgorICAgICAgICBjYXNlIE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOgorICAgICAg
ICBjYXNlIFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEU6CisgICAgICAgIGNhc2UgT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEU6CisgICAgICAgIGNhc2UgQU5ZX1VOT1JERVJFRF9OT0RFX1RZ
UEU6CisgICAgICAgIGNhc2UgRklSU1RfT1JERVJFRF9OT0RFX1RZUEU6CisgICAgICAgICAgICBp
ZiAoIW1fdmFsdWUuaXNOb2Rlc2V0KCkpIHsKKyAgICAgICAgICAgICAgICBlYyA9IFRZUEVfRVJS
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
cmVzdWx0VHlwZSA9IHR5cGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0coWFBh
dGgsICJDYW5ub3QgY29udmVydCBYUGF0aFJlc3VsdCB0byB1bmtub3duIHR5cGUgJyV1JyEiLCB0
eXBlKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIHNob3J0IFhQYXRoUmVzdWx0OjpyZXN1bHRUeXBl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXN1bHRUeXBlOworfQorCitkb3VibGUgWFBhdGhS
ZXN1bHQ6Om51bWJlclZhbHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChy
ZXN1bHRUeXBlKCkgIT0gTlVNQkVSX1RZUEUpIHsKKyAgICAgICAgZWMgPSBUWVBFX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDAuMDsKKyAgICB9CisgICAgcmV0dXJuIG1fdmFsdWUudG9OdW1iZXIoKTsK
K30KKworU3RyaW5nIFhQYXRoUmVzdWx0OjpzdHJpbmdWYWx1ZShFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFNUUklOR19UWVBFKSB7CisgICAgICAg
IGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fdmFsdWUudG9TdHJpbmcoKTsKK30KKworYm9vbCBYUGF0aFJlc3VsdDo6Ym9vbGVhblZh
bHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0g
Qk9PTEVBTl9UWVBFKSB7CisgICAgICAgIGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1fdmFsdWUudG9Cb29sZWFuKCk7Cit9CisKK05vZGUg
KlhQYXRoUmVzdWx0OjpzaW5nbGVOb2RlVmFsdWUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7
CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBBTllfVU5PUkRFUkVEX05PREVfVFlQRSAmJgorICAg
ICAgICAgcmVzdWx0VHlwZSgpICE9IEZJUlNUX09SREVSRURfTk9ERV9UWVBFKSB7CisgICAgICAg
IGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgCisgICAgTm9kZVNl
dCBub2RlcyA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7CisgICAgaWYgKG5vZGVzLnNpemUgKCkgPT0g
MCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbm9kZXNbMF0u
Z2V0KCk7Cit9CisKK3ZvaWQgWFBhdGhSZXN1bHQ6OmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCkK
K3sgCisgICAgbV9pbnZhbGlkSXRlcmF0b3JTdGF0ZSA9IHRydWU7CisgICAgCisgICAgQVNTRVJU
KG1fZXZlbnRUYXJnZXQpOworICAgIEFTU0VSVChtX2V2ZW50TGlzdGVuZXIpOworICAgIAorICAg
IG1fZXZlbnRUYXJnZXQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJl
ZU1vZGlmaWVkRXZlbnQsIG1fZXZlbnRMaXN0ZW5lci5nZXQoKSwgZmFsc2UpOworICAgIAorICAg
IG1fZXZlbnRUYXJnZXQgPSAwOworfQorCitib29sIFhQYXRoUmVzdWx0OjppbnZhbGlkSXRlcmF0
b3JTdGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFICYmCisgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBt
X2ludmFsaWRJdGVyYXRvclN0YXRlOworfQorCit1bnNpZ25lZCBsb25nIFhQYXRoUmVzdWx0Ojpz
bmFwc2hvdExlbmd0aChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAocmVzdWx0
VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgJiYKKyAgICAgICAgcmVzdWx0
VHlwZSgpICE9IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKSB7CisgICAgICAgIGVjID0gVFlQ
RV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBtX3ZhbHVlLnRv
Tm9kZVNldCgpLnNpemUoKTsKK30KKworTm9kZSAqWFBhdGhSZXN1bHQ6Oml0ZXJhdGVOZXh0KEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRSAmJgorICAgICAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RF
X0lURVJBVE9SX1RZUEUpIHsKKyAgICAgICAgZWMgPSBUWVBFX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX2ludmFsaWRJdGVyYXRvclN0YXRlKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICAKKyAgICBpZiAobV9ub2RlU2V0UG9zaXRpb24gKyAxID49IG1fbm9kZVNldC5zaXplKCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSAqbm9kZSA9IG1fbm9kZVNldFttX25vZGVTZXRQ
b3NpdGlvbl0uZ2V0KCk7CisgICAgCisgICAgbV9ub2RlU2V0UG9zaXRpb24rKzsKKworICAgIHJl
dHVybiBub2RlOworfQorCitOb2RlICpYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChyZXN1bHRUeXBlKCkg
IT0gVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAmJgorICAgICAgICAgcmVzdWx0VHlwZSgp
ICE9IE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKSB7CisgICAgICAgIGVjID0gVFlQRV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBOb2RlU2V0IG5vZGVzID0gbV92
YWx1ZS50b05vZGVTZXQoKTsKKyAgICBpZiAoaW5kZXggPj0gbm9kZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbm9kZXNbaW5kZXhdLmdldCgpOworfQorCit9
CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoUmVz
dWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aFJlc3VsdF9ICisjZGVmaW5lIFhQYXRo
UmVzdWx0X0gKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlNoYXJlZC5oIgorCisj
aW5jbHVkZSAiaW1wbC9leHByZXNzaW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBOb2RlOworY2xhc3MgRXZlbnRUYXJnZXRO
b2RlOworY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKworY2xhc3MgWFBhdGhSZXN1bHQgOiBwdWJsaWMg
U2hhcmVkPFhQYXRoUmVzdWx0PgoreworcHVibGljOgorICAgIGVudW0gWFBhdGhSZXN1bHRUeXBl
IHsKKyAgICAgICAgQU5ZX1RZUEUgPSAwLAorICAgICAgICBOVU1CRVJfVFlQRSA9IDEsCisgICAg
ICAgIFNUUklOR19UWVBFID0gMiwKKyAgICAgICAgQk9PTEVBTl9UWVBFID0gMywKKyAgICAgICAg
VU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQsCisgICAgICAgIE9SREVSRURfTk9ERV9J
VEVSQVRPUl9UWVBFID0gNSwKKyAgICAgICAgVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9
IDYsCisgICAgICAgIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNywKKyAgICAgICAgQU5Z
X1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4LAorICAgICAgICBGSVJTVF9PUkRFUkVEX05PREVfVFlQ
RSA9IDkKKyAgICB9OworICAgIAorICAgIFhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSAqZXZl
bnRUYXJnZXQsIGNvbnN0IFhQYXRoOjpWYWx1ZSAmdmFsdWUpOworICAgIH5YUGF0aFJlc3VsdCgp
OworICAgIAorICAgIHZvaWQgY29udmVydFRvKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKworICAgIHVuc2lnbmVkIHNob3J0IHJlc3VsdFR5cGUoKSBjb25zdDsKKwor
ICAgIGRvdWJsZSBudW1iZXJWYWx1ZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3Q7CisgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKKyAgICBib29sIGJvb2xl
YW5WYWx1ZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3Q7CisgICAgTm9kZSAqc2luZ2xlTm9kZVZh
bHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKKworICAgIGJvb2wgaW52YWxpZEl0ZXJhdG9y
U3RhdGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsb25nIHNuYXBzaG90TGVuZ3RoKEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdDsKKyAgICBOb2RlICppdGVyYXRlTmV4dChFeGNlcHRpb25Db2RlJiBl
Yyk7CisgICAgTm9kZSAqc25hcHNob3RJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9yU3RhdGUoKTsKK3ByaXZh
dGU6CisgICAgWFBhdGg6OlZhbHVlIG1fdmFsdWU7CisgICAgdW5zaWduZWQgbV9ub2RlU2V0UG9z
aXRpb247CisgICAgWFBhdGg6Ok5vZGVTZXQgbV9ub2RlU2V0OworICAgIHVuc2lnbmVkIHNob3J0
IG1fcmVzdWx0VHlwZTsKKyAgICBib29sIG1faW52YWxpZEl0ZXJhdG9yU3RhdGU7CisgICAgUmVm
UHRyPEV2ZW50VGFyZ2V0Tm9kZT4gbV9ldmVudFRhcmdldDsKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbV9ldmVudExpc3RlbmVyOworfTsKKworfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9S
VAorCisjZW5kaWYgLy8gWFBhdGhSZXN1bHRfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRo
RXhwcmVzc2lvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Np
b24uaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaWRs
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKi8KKworbW9kdWxlIHhwYXRoIHsKKworICAgIGludGVyZmFjZSBYUGF0aEV4
cHJlc3Npb24geworICAgICAgICBYUGF0aFJlc3VsdCBldmFsdWF0ZShpbiBOb2RlIGNvbnRleHRO
b2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQgc2hvcnQgdHlw
ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoUmVzdWx0IGluUmVzdWx0
KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFdl
YkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBh
dGgvWFBhdGhFdmFsdWF0b3IuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0
aEV2YWx1YXRvci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggeworCisgICAgaW50
ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yLCBDYW5CZUNvbnN0cnVjdGVkXSBYUGF0aEV2YWx1
YXRvciB7CisgICAgICAgIFhQYXRoRXhwcmVzc2lvbiBjcmVhdGVFeHByZXNzaW9uKGluIERPTVN0
cmluZyBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBYUGF0aE5TUmVzb2x2ZXIgcmVzb2x2ZXIpCisgICAgICAgICAgICByYWlzZXMoY29yZTo6
RE9NRXhjZXB0aW9uKTsKKworICAgICAgICBYUGF0aE5TUmVzb2x2ZXIgY3JlYXRlTlNSZXNvbHZl
cihpbiBOb2RlIG5vZGVSZXNvbHZlcik7CisKKyAgICAgICAgWFBhdGhSZXN1bHQgZXZhbHVhdGUo
aW4gRE9NU3RyaW5nIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IE5vZGUgY29udGV4dE5vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0
aE5TUmVzb2x2ZXIgcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVu
c2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRo
UmVzdWx0IGluUmVzdWx0KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAg
fTsKK30KSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGwJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUg
eHBhdGggeworCisgICAgaW50ZXJmYWNlIFhQYXRoTlNSZXNvbHZlciB7CisgICAgICAgIERPTVN0
cmluZyBsb29rdXBOYW1lc3BhY2VVUkkoaW4gRE9NU3RyaW5nIHByZWZpeCk7CisgICAgfTsKK30K
SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDIwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjgyIEBACisyMDA2LTA1LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBt
YWMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzOAorICAg
ICAgICBTdXBwb3J0IE1vemlsbGEncyBYUGF0aEV2YWx1YXRvciBvYmplY3QuCisgICAgICAgIAor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgIEdlbmVyYXRlIFhQYXRoIGdy
YW1tYXIsIGFuZCBKYXZhU2NyaXB0IHdyYXBwZXJzLgorICAgICAgICAKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8g
cHJvamVjdAorICAgICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHA6
CisgICAgICAgIChLSlM6Oik6CisgICAgICAgIChLSlM6OnNldERPTUV4Y2VwdGlvbik6CisgICAg
ICAgIEhhbmRsZSBzZXR0aW5nIFhQYXRoIGV4Y2VwdGlvbnMuCisgICAgICAgIAorICAgICAgICAq
IGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICBKdXN0IHJldHVybiBuaWwgZm9yIG5vdyB3
aGVuIHRyeWluZyB0byBjcmVhdGUgYSB3cmFwcGVyIGZvciAKKyAgICAgICAgWFBhdGggbmFtZXNw
YWNlIG5vZGVzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisgICAgICAgIEFkZCBYUGF0aCB0eXBlcy4gQWxzbyBhZGQgYSAiQ2FuQmVDb25zdHJ1Y3Rl
ZCIgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAgIGZvciBpbnRlcmZhY2VzIHRoYXQgY2FuIGJl
IGNvbnN0cnVjdGVkIGRpcmVjdGx5LgorICAgICAgICAKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dl
YkNvcmVQYWdlQnJpZGdlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lm
TmVjZXNzYXJ5KToKKyAgICAgICAgSW5pdGlhbGl6ZSBMb2dYUGF0aCBjaGFubmVsLgorICAgICAg
ICAKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NSW1wbGVtZW50YXRpb246Omhhc0ZlYXR1cmUpOgorICAgICAgICBTdXBwb3J0ICJ4cGF0
aCIgdmVyc2lvbiAiMy4wIi4KKyAgICAgICAgCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIAorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcG9ydE5vZGUpOgorICAgICAgICBJZ25vcmUgWFBhdGgg
bmFtZXNwYWNlIG5vZGVzLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpj
cmVhdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVOU1Jl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpldmFsdWF0ZSk6CisgICAgICAg
IE5ldyBmdW5jdGlvbnMgd2hpY2ggY2FsbCBkb3duIHRvIGEgbGF6aWx5IGNyZWF0ZWQgWFBhdGhF
dmFsdWF0b3IuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgQWRkIGZ1bmN0
aW9uIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDoK
KyAgICAgICAgQWRkIFhQYXRoIG1ldGhvZHMuCisgICAgICAgIAorICAgICAgICAqIGRvbS9Ob2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjopOgorICAgICAgICBBZGQgWFBBVEhfTkFNRVNQ
QUNFX05PREUgdHlwZS4KKyAgICAgICAgCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c3RhcnRNYXJrdXApOgorICAgICAgICBJZ25vcmUgWFBhdGggbmFt
ZXNwYWNlIG5vZGVzLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6Cisg
ICAgICAgIEFkZCBjb25zdHJ1Y3RvcnMgZm9yIFhQYXRoRXZhbHVhdG9yIGFuZCBYUGF0aFJlc3Vs
dC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vTG9nZ2luZy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vTG9nZ2luZy5oOgorICAgICAgICBBZGQgWFBhdGggbG9nIGNoYW5uZWwKKworICAg
ICAgICAqIHhwYXRoOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0aEV2YWx1YXRvci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmNyZWF0ZUV4cHJlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmNyZWF0ZU5TUmVzb2x2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFdmFsdWF0b3I6OmV2YWx1YXRlKToKKyAgICAgICAg
KiB4cGF0aC9YUGF0aEV2YWx1YXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgICogeHBhdGgvWFBhdGhFdmFsdWF0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0
aC9YUGF0aEV4cHJlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoRXhw
cmVzc2lvbjo6Y3JlYXRlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV4cHJl
c3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Npb24uaDogQWRk
ZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmlkbDogQWRkZWQuCisgICAgICAg
ICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpY
UGF0aE5TUmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAgICogeHBhdGgvWFBhdGhO
U1Jlc29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTlNSZXNvbHZlci5pZGw6
IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6WFBhdGhOYW1lc3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6On5YUGF0aE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFt
ZXNwYWNlOjpwcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om5vZGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpuYW1lc3BhY2VVUkkpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om5vZGVUeXBlKToKKyAgICAgICAgKiB4
cGF0aC9YUGF0aE5hbWVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9YUGF0aFJlc3Vs
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5l
cjo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnZhbGlk
YXRpbmdFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aFJlc3VsdDo6WFBhdGhSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6On5Y
UGF0aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6Y29udmVydFRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpyZXN1bHRUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoUmVzdWx0OjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aFJlc3VsdDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OmJv
b2xlYW5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c2luZ2xlTm9kZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppbnZhbGlkYXRlSXRlcmF0b3JT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6aW52YWxpZEl0ZXJhdG9yU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBzaG90TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aFJlc3VsdDo6c25hcHNob3RJdGVtKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aFJl
c3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjopOgorICAgICAg
ICAqIHhwYXRoL1hQYXRoUmVzdWx0LmlkbDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbDog
QWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueTogQWRkZWQuCisgICAg
ICAgICogeHBhdGgvaW1wbC9leHByZXNzaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6VmFsdWU6OlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6
dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzTm9kZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzQm9vbGVhbik6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6VmFsdWU6OmlzTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1
ZTo6aXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b05vZGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9u
OjpldmFsdWF0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lv
bjo6RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6fkV4
cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OmV2YWx1YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjphZGRTdWJFeHByZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpvcHRpbWl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6c3ViRXhwckNvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpzdWJFeHByKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpFeHByZXNzaW9uOjppc0NvbnN0YW50KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL2V4
cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXZhbHVhdGlvbkNv
bnRleHQ6OkV2YWx1YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1
ZTo6KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL2Z1bmN0aW9ucy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkludGVydmFsOjpJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6SW50ZXJ2YWw6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpJ
bnRlcnZhbDo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjpz
ZXRBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjpzZXROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJnKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJnQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1bmN0aW9uOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5MYXN0Ojpk
b0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5MYXN0Ojppc0NvbnN0YW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Qb3NpdGlvbjo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuUG9zaXRpb246OmlzQ29uc3RhbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxvY2FsTmFtZTo6aXNDb25zdGFudCk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuTG9jYWxOYW1lOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpGdW5OYW1lc3BhY2VVUkk6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkZ1bk5hbWVzcGFjZVVSSTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuTmFtZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RnVuTmFtZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ291bnQ6
OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvdW50Ojppc0NvbnN0
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdHJpbmc6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNvbmNhdDo6ZG9FdmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuU3RhcnRzV2l0aDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuQ29udGFpbnM6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0JlZm9yZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nQWZ0ZXI6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZzo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuU3RyaW5nTGVuZ3RoOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGdW5Ob3JtYWxpemVTcGFjZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuVHJhbnNsYXRlOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5Cb29sZWFuOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpG
dW5Ob3Q6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blRydWU6OmRv
RXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blRydWU6OmlzQ29uc3RhbnQp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmRvRXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkZ1bkZhbHNlOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpGdW5GYWxzZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTnVt
YmVyOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdW06OmRvRXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkZsb29yOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5DZWlsaW5nOjpkb0V2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Sb3VuZDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5jdGlvbkxpYnJhcnk6OkZ1bmN0aW9uTGlicmFyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RnVuY3Rpb25MaWJyYXJ5OjpnZXRGdW5jdGlvbik6CisgICAgICAgICogeHBhdGgv
aW1wbC9mdW5jdGlvbnMuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9wYXJzZWRzdGF0
ZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZWRTdGF0ZW1l
bnQ6OlBhcnNlZFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VkU3Rh
dGVtZW50Ojp+UGFyc2VkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJz
ZWRTdGF0ZW1lbnQ6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZWRTdGF0
ZW1lbnQ6Om9wdGltaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZWRTdGF0ZW1l
bnQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3BhcnNlZHN0YXRlbWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL3BhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpjaGFy
Q2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OmlzQXhpc05hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6aXNOb2RlVHlwZU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6aXNPcGVyYXRvckNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlBhcnNlcjo6c2tpcFdTKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQ
YXJzZXI6Om1ha2VUb2tlbkFuZEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBh
cnNlcjo6bWFrZUludFRva2VuQW5kQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
UGFyc2VyOjpwZWVrQWhlYWRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNl
cjo6cGVla0N1ckhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpsZXhT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bGV4TnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OmxleE5DTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6UGFyc2VyOjpsZXhRTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
UGFyc2VyOjpuZXh0VG9rZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFy
c2VyOjpuZXh0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnJlc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpQYXJzZXI6OmxleCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFy
c2VyOjpwYXJzZVN0YXRlbWVudCk6CisgICAgICAgICogeHBhdGgvaW1wbC9wYXJzZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VG9rZW46OlRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpQYXJzZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2Vy
OjpjdXJyZW50KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL3BhdGguY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RmlsdGVyOjp+RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGaWx0ZXI6
OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6TG9j
YXRpb25QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6On5Mb2Nh
dGlvblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6b3B0aW1p
emUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGF0aDo6UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6OmRv
RXZhbHVhdGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvcGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KiB4cGF0aC9pbXBsL3ByZWRpY2F0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6Ok51bWJlcjo6TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1iZXI6Omlz
Q29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWJlcjo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RyaW5nRXhwcmVzc2lvbjo6U3RyaW5nRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RyaW5nRXhwcmVzc2lvbjo6aXNDb25z
dGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RyaW5nRXhwcmVzc2lvbjo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TmVnYXRpdmU6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6TnVtZXJpY09wKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OkVxVGVzdE9wOjpFcVRlc3RPcCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RXFUZXN0T3A6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxP
cDo6TG9naWNhbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OnNob3J0
Q2lyY3VpdE9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OmlzQ29uc3Rh
bnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvZ2ljYWxPcDo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VW5pb246OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6UHJlZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpQcmVkaWNhdGU6On5QcmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBy
ZWRpY2F0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlByZWRpY2F0ZTo6
b3B0aW1pemUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvcHJlZGljYXRlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpFcVRlc3RPcDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6Oik6
CisgICAgICAgICogeHBhdGgvaW1wbC9zdGVwLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6U3RlcDo6YXhpc0FzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpT
dGVwOjpTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjp+U3RlcCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
Ojpub2RlVGVzdE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om9wdGlt
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpuYW1lc3BhY2VGcm9tTm9kZXRl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OnByaW1hcnlOb2RlVHlwZSk6Cisg
ICAgICAgICogeHBhdGgvaW1wbC9zdGVwLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OlN0ZXA6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC91dGlsLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6aXNSb290RG9tTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmdldENoaWxkcmVu
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmlzVmFsaWRDb250ZXh0Tm9k
ZSk6CisgICAgICAgICogeHBhdGgvaW1wbC91dGlsLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRo
L2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6VmFyaWFibGVSZWZlcmVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlZhcmlhYmxlUmVmZXJlbmNlOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgICog
eHBhdGgvaW1wbC92YXJpYWJsZXJlZmVyZW5jZS5oOiBBZGRlZC4KKwogMjAwNi0wNS0wNCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIE9t
ZXJuaWNrLgpAQCAtODQsNiArMzYzLDcgQEAKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpsb2Fk
UGx1Z2luKToKICAgICAgICAgR2V0IHRoZSBwbHVnaW4ncyBET00gZWxlbWVudCBhbmQgcGFzcyB0
byBjcmVhdGVQbHVnaW4oKS4KIAorPj4+Pj4+PiAucjE0MjAyCiAyMDA2LTA1LTA0ICBFcmljIFNl
aWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IHRpbW8uCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCShyZXZpc2lvbiAxNDIw
MikKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nZ2luZ0NoYW5u
ZWxzSWZOCiAgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nRXZlbnRzKTsKICAgICBpbml0aWFs
aXplTG9nQ2hhbm5lbChMb2dFZGl0aW5nKTsKICAgICBpbml0aWFsaXplTG9nQ2hhbm5lbChMb2dU
ZXh0Q29udmVyc2lvbik7CisgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nWFBhdGgpOwogfQog
CiAtIChpZClpbml0CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMTQyMDIpCisrKyBXZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBt
b2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIE5vZGVDb25zdHJ1Y3RvciBOb2RlOwog
ICAgICAgICBhdHRyaWJ1dGUgTm9kZUZpbHRlckNvbnN0cnVjdG9yIE5vZGVGaWx0ZXI7CiAgICAg
ICAgIGF0dHJpYnV0ZSBSYW5nZUNvbnN0cnVjdG9yIFJhbmdlOworICAgICAgICBhdHRyaWJ1dGUg
WFBhdGhFdmFsdWF0b3JDb25zdHJ1Y3RvciBYUGF0aEV2YWx1YXRvcjsKKyAgICAgICAgYXR0cmli
dXRlIFhQYXRoUmVzdWx0Q29uc3RydWN0b3IgWFBhdGhSZXN1bHQ7CiAgICAgfTsKIAogfQo=
</data>
<flag name="review"
          id="2257"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8163</attachid>
            <date>2006-05-08 01:43:25 -0700</date>
            <delta_ts>2006-05-08 13:35:06 -0700</delta_ts>
            <desc>Address Darin&apos;s comments</desc>
            <filename>xpath-support-5.txt</filename>
            <type>text/plain</type>
            <size>205632</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2aXNpb24gMTQyMjUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzICszNiw0IEBAIEtYQ0xvZ0No
YW5uZWwgTG9nUG9wdXBCbG9ja2luZyA9ICAgICB7IDAKIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRz
ID0gICAgICAgICAgICB7IDB4MDAwMDAwODAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFu
bmVsT2ZmIH07CiBLWENMb2dDaGFubmVsIExvZ0VkaXRpbmcgPSAgICAgICAgICAgeyAweDAwMDAw
MTAwLCAiV2ViQ29yZUxvZ0xldmVsIiwgS1hDTG9nQ2hhbm5lbE9mZiB9OwogS1hDTG9nQ2hhbm5l
bCBMb2dUZXh0Q29udmVyc2lvbiA9ICAgIHsgMHgwMDAwMDIwMCwgIldlYkNvcmVMb2dMZXZlbCIs
IEtYQ0xvZ0NoYW5uZWxPZmYgfTsKK0tYQ0xvZ0NoYW5uZWwgTG9nWFBhdGggPSAgICAgICAgICAg
ICB7IDB4MDAwMDA0MDAsICJXZWJDb3JlTG9nTGV2ZWwiLCBLWENMb2dDaGFubmVsT2ZmIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gMTQyMjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0xv
Z2dpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNSArNDAsNiBAQCBleHRlcm4gS1hDTG9nQ2hh
bm5lbCBMb2dQb3B1cEJsb2NraW5nOwogZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRXZlbnRzOwog
ZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nRWRpdGluZzsKIGV4dGVybiBLWENMb2dDaGFubmVsIExv
Z1RleHRDb252ZXJzaW9uOworZXh0ZXJuIEtYQ0xvZ0NoYW5uZWwgTG9nWFBhdGg7CiAKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxNDIyNSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2Miw3ICsxNjIsMTEgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgJHR5cGUgZXEgIk5vZGUiIG9yCiAgICAgICAkdHlwZSBlcSAiTm9kZUxp
c3QiIG9yIAogICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvciAKLSAgICAgICR0eXBlIGVxICJUZXh0
IikgeworICAgICAgJHR5cGUgZXEgIlRleHQiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFdmFs
dWF0b3IiIG9yCisgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IKKyAgICAgICR0eXBlIGVxICJYUGF0aFJlc3VsdCIp
IHsKICAgICAkaW1wbEluY2x1ZGVzeyIke3R5cGV9LmgifSA9IDE7CiAgIH0gZWxzaWYgKCR0eXBl
IGVxICJDU1NTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAkaW1w
bEluY2x1ZGVzeyJjc3Nfc3R5bGVzaGVldGltcGwuaCJ9ID0gMTsKQEAgLTUwMSw3ICs1MDUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgJHByb3RvQ2xhc3NOYW1lID0gIiR7
cGFyZW50Q2xhc3NOYW1lfVByb3RvIjsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
Y29uc3RydWN0b3JGb3IoJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFt
ZSkpOworICAgIHB1c2goQGltcGxDb250ZW50LCBjb25zdHJ1Y3RvckZvcigkY2xhc3NOYW1lLCAk
cHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn0pKTsKICAgfQogICAKICAgIyAtIEFkZCBmdW5jdGlv
bnMgYW5kIGNvbnN0YW50cyB0byBhIGhhc2h0YWJsZSBkZWZpbml0aW9uCkBAIC04MjQsNyArODI4
LDkgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9y
CiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiRG9j
dW1lbnRUeXBlIiBvcgotICAgICAgICAgICAkdHlwZSBlcSAiUmFuZ2UiKSB7CisgICAgICAgICAg
ICR0eXBlIGVxICJSYW5nZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZl
ciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoUmVzdWx0IikgewogICAgIHJldHVybiAi
JHt0eXBlfSoiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjwke3R5cGV9PiI7CkBAIC04NTUsMjYgKzg2MSwyMSBAQCBzdWIgVHlw
ZUNhbkZhaWxDb252ZXJzaW9uCiAgICAgcmV0dXJuIDA7ICMgb3IgY2FuIGl0PwogICB9IGVsc2lm
ICgkdHlwZSBlcSAiZmxvYXQiKSB7CiAgICAgcmV0dXJuIDA7Ci0gIH0gZWxzaWYgKCR0eXBlIGVx
ICJBdG9taWNTdHJpbmciKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgfSBlbHNpZiAoJHR5cGUgZXEg
IkRPTVN0cmluZyIpIHsKLSAgICAgIHJldHVybiAwOwotICB9IGVsc2lmICgkdHlwZSBlcSAiTm9k
ZSIpIHsKLSAgICAgIHJldHVybiAwOwotICB9IGVsc2lmICgkdHlwZSBlcSAiRWxlbWVudCIpIHsK
LSAgICAgIHJldHVybiAwOwogICB9IGVsc2lmICgkdHlwZSBlcSAiQXR0ciIpIHsKICAgICAgICRp
bXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKICAgICAgIHJldHVybiAxOwotICB9
IGVsc2lmICgkdHlwZSBlcSAiRG9jdW1lbnRUeXBlIikgewotICAgICAgcmV0dXJuIDA7Ci0gIH0g
ZWxzaWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIpIHsKLSAgICAgIHJldHVybiAwOwotICB9ICBl
bHNpZiAoJHR5cGUgZXEgIlJhbmdlIikgewotICAgICAgcmV0dXJuIDA7Ci0gIH0gIGVsc2lmICgk
dHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKLSAgICAgIHJldHVybiAwOwotICB9IGVsc2lmICgkdHlw
ZSBlcSAiRE9NV2luZG93IikgeworICB9IGVsc2lmICgkdHlwZSBlcSAiQXRvbWljU3RyaW5nIiBv
cgorICAgICAgICAgICAkdHlwZSBlcSAiRE9NU3RyaW5nIiBvcgorICAgICAgICAgICAkdHlwZSBl
cSAiTm9kZSIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIkVsZW1lbnQiIG9yCisgICAgICAgICAg
ICR0eXBlIGVxICJEb2N1bWVudFR5cGUiIG9yCisgICAgICAgICAgICR0eXBlIGVxICJFdmVudFRh
cmdldCIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvcgorICAgICAgICAgICAkdHlw
ZSBlcSAiTm9kZUZpbHRlciIgb3IKKyAgICAgICAgICAgJHR5cGUgZXEgIkRPTVdpbmRvdyIgb3IK
KyAgICAgICAgICAgJHR5cGUgZXEgIlhQYXRoRXZhbHVhdG9yIiBvcgorICAgICAgICAgICAkdHlw
ZSBlcSAiWFBhdGhOU1Jlc29sdmVyIiBvcgorICAgICAgICAgICAkdHlwZSBlcSAiWFBhdGhSZXN1
bHQiKSB7CiAgICAgICByZXR1cm4gMDsKICAgfSBlbHNlIHsKICAgICBkaWUgIkRvbid0IGtub3cg
d2hldGhlciBhIEpTIHZhbHVlIGNhbiBmYWlsIGNvbnZlcnNpb24gdG8gdHlwZSAkdHlwZS4iCkBA
IC05MjUsOSArOTI2LDYgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICB9IGVsc2lmICgkdHlwZSBl
cSAiRG9jdW1lbnRUeXBlIikgewogICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2RvbS5oIn0gPSAx
OwogICAgICAgcmV0dXJuICJ0b0RvY3VtZW50VHlwZSgkdmFsdWUpIjsKLSAgfSBlbHNpZiAoJHR5
cGUgZXEgIlJhbmdlIikgewotICAgICAgJGltcGxJbmNsdWRlc3siSlNSYW5nZS5oIn0gPSAxOwot
ICAgICAgcmV0dXJuICJ0b1JhbmdlKCR2YWx1ZSkiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiRWxl
bWVudCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJranNfZG9tLmgifSA9IDE7CiAgICAgcmV0dXJu
ICJ0b0VsZW1lbnQoJHZhbHVlKSI7CkBAIC05MzYsNyArOTM0LDEyIEBAIHN1YiBKU1ZhbHVlVG9O
YXRpdmUKICAgICByZXR1cm4gInRvTm9kZUZpbHRlcigkdmFsdWUpIjsKICAgfSBlbHNpZiAoJHR5
cGUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJranNfd2luZG93LmgifSA9
IDE7Ci0gICAgcmV0dXJuICJ0b0RPTVdpbmRvdygkdmFsdWUpIjsKKyAgICByZXR1cm4gInRvRE9N
V2luZG93KCR2YWx1ZSkiOyAKKyAgfSBlbHNpZiAoJHR5cGUgZXEgIlJhbmdlIiBvcgorICAgICAg
ICAgICAkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIiBvcgorICAgICAgICAgICAkdHlwZSBlcSAi
WFBhdGhSZXN1bHQiKSB7CisgICAgJGltcGxJbmNsdWRlc3siSlMkdHlwZS5oIn0gPSAxOworICAg
IHJldHVybiAidG8kdHlwZSgkdmFsdWUpIjsKICAgfSBlbHNlIHsKICAgICBkaWUgIkRvbid0IGtu
b3cgaG93IHRvIGNvbnZlcnQgYSBKUyB2YWx1ZSBvZiB0eXBlICR0eXBlLiIKICAgfQpAQCAtOTU1
LDcgKzk1OCw4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgICAgJHR5cGUgZXEgInVu
c2lnbmVkIGxvbmciIG9yIAogICAgICAgICAgICAkdHlwZSBlcSAic2hvcnQiIG9yIAogICAgICAg
ICAgICAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiIG9yCi0gICAgICAgICAgICR0eXBlIGVxICJm
bG9hdCIpIHsKKyAgICAgICAgICAgJHR5cGUgZXEgImZsb2F0IiBvciAKKyAgICAgICAgICAgJHR5
cGUgZXEgImRvdWJsZSIpIHsKICAgICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiOwogICB9IGVs
c2lmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgewogICAgIG15ICRjb252ID0gJHNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsU3RyaW5nVG8ifTsKQEAgLTEwMjksNyAr
MTAzMywxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgJGltcGxJbmNsdWRlc3sia2pzX2Rv
bS5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IkhUTUxDYW52YXNFbGVtZW50LmgifSA9IDE7
CiAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwotICB9IGVsc2lmICgkdHlwZSBlcSAi
Q2FudmFzR3JhZGllbnQiIG9yICR0eXBlIGVxICJDb3VudGVyIiBvciAkdHlwZSBlcSAiUmFuZ2Ui
KSB7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJDYW52YXNHcmFkaWVudCIgb3IgCisgICAgICAgICAg
ICR0eXBlIGVxICJDb3VudGVyIiBvciAKKyAgICAgICAgICAgJHR5cGUgZXEgIlJhbmdlIiBvcgor
ICAgICAgICAgICAkdHlwZSBlcSAiWFBhdGhFeHByZXNzaW9uIiBvcgorICAgICAgICAgICAkdHlw
ZSBlcSAiWFBhdGhOU1Jlc29sdmVyIiBvcgorICAgICAgICAgICAkdHlwZSBlcSAiWFBhdGhSZXN1
bHQiKSB7CiAgICAgJGltcGxJbmNsdWRlc3siSlMkdHlwZS5oIn0gPSAxOwogICAgIHJldHVybiAi
dG9KUyhleGVjLCAkdmFsdWUpIjsKICAgfSBlbHNpZiAoJHR5cGUgZXEgIk5vZGVJdGVyYXRvciIg
b3IKQEAgLTEwNDIsNiArMTA1MSw4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgfSBlbHNpZiAo
JHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaCJ9ID0gMTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVl
KSI7CisgICAgJGltcGxJbmNsdWRlc3siSlMkdHlwZS5oIn0gPSAxOworICAgIHJldHVybiAidG9K
UyhleGVjLCAkdmFsdWUpIjsKICAgfSBlbHNlIHsKICAgICBkaWUgIkRvbid0IGtub3cgaG93IHRv
IGNvbnZlcnQgYSB2YWx1ZSBvZiB0eXBlICR0eXBlIHRvIGEgSlMgVmFsdWUiOwogICB9CkBAIC0x
MjQ5LDYgKzEyNjAsNyBAQCBzdWIgY29uc3RydWN0b3JGb3IKICAgICBteSAkY2xhc3NOYW1lID0g
c2hpZnQ7CiAgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFj
ZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2FuQ29uc3RydWN0ID0gc2hpZnQ7CiAgICAgCiBteSAk
aW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKIGNsYXNzICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIDog
cHVibGljIERPTU9iamVjdCB7CkBAIC0xMjYxLDcgKzEyNzMsMTcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiwgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87ICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKK0VPRgorCisg
ICAgaWYgKCRjYW5Db25zdHJ1Y3QpIHsKKyRpbXBsQ29udGVudCAuPSA8PCAiRU9GIjsKKyAgICB2
aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBM
aXN0ICZhcmdzKSB7IHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCAqPih0b0pTKGV4ZWMsIG5l
dyAkaW50ZXJmYWNlTmFtZSkpOyB9CitFT0YKKyAgICB9CisKKyRpbXBsQ29udGVudCAuPSA8PCAi
RU9GIjsKIH07CiAKIGNvbnN0IENsYXNzSW5mbyAke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6aW5m
byA9IHsgIiR7aW50ZXJmYWNlTmFtZX1Db25zdHJ1Y3RvciIsIDAsICYke2NsYXNzTmFtZX1Db25z
dHJ1Y3RvclRhYmxlLCAwIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAko
cmV2aXNpb24gMTQyMjUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKKyNp
bmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgogI2luY2x1ZGUgImtqc19kb20uaCIKICNpbmNsdWRl
ICJranNfd2luZG93LmgiCiAjaW5jbHVkZSA8a2pzL2NvbGxlY3Rvci5oPgpAQCAtMjk4LDYgKzI5
OSwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV2ZW50RXhjZXB0aW9uCiAgICAgIlVO
U1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSIgogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z
dCB4cGF0aEV4Y2VwdGlvbk5hbWVzW10gPSB7CisgICAgIklOVkFMSURfRVhQUkVTU0lPTl9FUlIi
LAorICAgICJUWVBFX0VSUiIKK307CisKIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSBlYykKIHsKICAgaWYgKGVjID09IDAgfHwgZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCkBAIC0zMDcsMjMgKzMxMywzNiBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEV4CiAgIGludCBjb2RlID0gZWM7CiAKICAgY29uc3QgY2hhciAqIGNvbnN0
ICogbmFtZVRhYmxlOworICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgCiAgIGludCBuYW1lVGFi
bGVTaXplOworICBpbnQgbmFtZUluZGV4OwogICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbk9m
ZnNldCAmJiBjb2RlIDw9IFJhbmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gUmFu
Z2UiOwogICAgIGNvZGUgLT0gUmFuZ2VFeGNlcHRpb25PZmZzZXQ7CisgICAgbmFtZUluZGV4ID0g
Y29kZTsKICAgICBuYW1lVGFibGUgPSByYW5nZUV4Y2VwdGlvbk5hbWVzOwogICAgIG5hbWVUYWJs
ZVNpemUgPSBzaXplb2YocmFuZ2VFeGNlcHRpb25OYW1lcykgLyBzaXplb2YocmFuZ2VFeGNlcHRp
b25OYW1lc1swXSk7CiAgIH0gZWxzZSBpZiAoY29kZSA+PSBFdmVudEV4Y2VwdGlvbk9mZnNldCAm
JiBjb2RlIDw9IEV2ZW50RXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJET00gRXZlbnRzIjsK
ICAgICBjb2RlIC09IEV2ZW50RXhjZXB0aW9uT2Zmc2V0OworICAgIG5hbWVJbmRleCA9IGNvZGU7
CiAgICAgbmFtZVRhYmxlID0gZXZlbnRFeGNlcHRpb25OYW1lczsKICAgICBuYW1lVGFibGVTaXpl
ID0gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKGV2ZW50RXhjZXB0aW9uTmFt
ZXNbMF0pOworICB9IGVsc2UgaWYgKGNvZGUgPj0gWFBhdGhFeGNlcHRpb25PZmZzZXQgJiYgY29k
ZSA8PSBYUGF0aEV4Y2VwdGlvbk1heCkgeworICAgIHR5cGUgPSAiRE9NIFhQYXRoIjsKKyAgICAv
LyBYUGF0aCBleGNlcHRpb24gY29kZXMgc3RhcnQgd2l0aCA1MSBhbmQgd2UgZG9uJ3Qgd2FudCA1
MSBlbXB0eSBlbGVtZW50cyBpbiB0aGUgbmFtZSBhcnJheQorICAgIG5hbWVJbmRleCA9IGNvZGUg
LSBJTlZBTElEX0VYUFJFU1NJT05fRVJSOworICAgIGNvZGUgLT0gWFBhdGhFeGNlcHRpb25PZmZz
ZXQ7CisgICAgbmFtZVRhYmxlID0geHBhdGhFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVT
aXplID0gc2l6ZW9mKHhwYXRoRXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhwYXRoRXhjZXB0aW9u
TmFtZXNbMF0pOwogICB9IGVsc2UgeworICAgIG5hbWVJbmRleCA9IGNvZGU7CiAgICAgbmFtZVRh
YmxlID0gZXhjZXB0aW9uTmFtZXM7CiAgICAgbmFtZVRhYmxlU2l6ZSA9IHNpemVvZihleGNlcHRp
b25OYW1lcykgLyBzaXplb2YoZXhjZXB0aW9uTmFtZXNbMF0pOwogICB9CiAKLSAgY29uc3QgY2hh
ciogbmFtZSA9IGNvZGUgPCBuYW1lVGFibGVTaXplID8gbmFtZVRhYmxlW2NvZGVdIDogMDsKKyAg
bmFtZSA9IG5hbWVJbmRleCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVbbmFtZUluZGV4XSA6
IDA7CiAKICAgLy8gMTAwIGNoYXJhY3RlcnMgaXMgYSBiaWcgZW5vdWdoIGJ1ZmZlciwgYmVjYXVz
ZSB0aGVyZSBhcmU6CiAgIC8vICAgMTMgY2hhcmFjdGVycyBpbiB0aGUgbWVzc2FnZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAxNDIyNSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzOSw2ICs2MzksMTAgQEAgc3RhdGljIExpc3Rl
bmVyTWFwICpsaXN0ZW5lck1hcDsKICAgICAgICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgog
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTU5vdGF0aW9uIGNsYXNzXTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAg
ICAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhbiBYUGF0aCBvYmplY3RpdmUgQyB3cmFwcGVyCisg
ICAgICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVn
LmNnaT9pZD04NzU1CisgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICByZXR1cm4g
W1tbd3JhcHBlckNsYXNzIGFsbG9jXSBfaW5pdFdpdGhOb2RlOmltcGxdIGF1dG9yZWxlYXNlXTsK
IH0KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE0MjI1KQorKysgV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIFZQQVRIID0g
XAogICAgICQoV2ViQ29yZSkvZG9tIFwKICAgICAkKFdlYkNvcmUpL2h0bWwgXAogICAgICQoV2Vi
Q29yZSkvcGFnZSBcCisgICAgJChXZWJDb3JlKS94cGF0aCBcCiAjCiAKIC5QSE9OWSA6IGFsbApA
QCAtNzIsNiArNzMsMTAgQEAgYWxsIDogXAogICAgIEpTUmFuZ2UuaCBcCiAgICAgSlNUZXh0Lmgg
XAogICAgIEpTVUlFdmVudC5oIFwKKyAgICBKU1hQYXRoRXZhbHVhdG9yLmggXAorICAgIEpTWFBh
dGhFeHByZXNzaW9uLmggXAorICAgIEpTWFBhdGhOU1Jlc29sdmVyLmggXAorICAgIEpTWFBhdGhS
ZXN1bHQuaCBcCiAgICAgSlNXaGVlbEV2ZW50LmggXAogICAgIEpTWE1MSHR0cFJlcXVlc3QubHV0
LmggXAogICAgIEpTWE1MU2VyaWFsaXplci5sdXQuaCBcCkBAIC03OSw2ICs4NCw3IEBAIGFsbCA6
IFwKICAgICBTVkdOYW1lcy5jcHAgXAogICAgIFVzZXJBZ2VudFN0eWxlU2hlZXRzLmggXAogICAg
IFhMaW5rTmFtZXMuY3BwIFwKKyAgICBYUGF0aEdyYW1tYXIuY3BwIFwKICAgICBranNfY3NzLmx1
dC5oIFwKICAgICBranNfZG9tLmx1dC5oIFwKICAgICBranNfZXZlbnRzLmx1dC5oIFwKQEAgLTEz
MCw2ICsxMzYsMTUgQEAgQ1NTR3JhbW1hci5jcHAgOiBjc3MvQ1NTR3JhbW1hci55CiAJY2F0IENT
U0dyYW1tYXIuY3BwLmggQ1NTR3JhbW1hci5ocHAgPiBDU1NHcmFtbWFyLmgKIAlybSAtZiBDU1NH
cmFtbWFyLmNwcC5oIENTU0dyYW1tYXIuaHBwCiAKKyMgWFBhdGggZ3JhbW1hcgorCitYUGF0aEdy
YW1tYXIuY3BwIDogeHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQorCWJpc29uIC1kIC1wIHhwYXRo
eXkgJDwgLW8gJEAKKwl0b3VjaCBYUGF0aEdyYW1tYXIuY3BwLmgKKwl0b3VjaCBYUGF0aEdyYW1t
YXIuaHBwCisJY2F0IFhQYXRoR3JhbW1hci5jcHAuaCBYUGF0aEdyYW1tYXIuaHBwID4gWFBhdGhH
cmFtbWFyLmgKKwlybSAtZiBYUGF0aEdyYW1tYXIuY3BwLmggWFBhdGhHcmFtbWFyLmhwcAorCiAj
IHVzZXIgYWdlbnQgc3R5bGUgc2hlZXRzCiAKIFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTID0gJChX
ZWJDb3JlKS9jc3MvaHRtbDQuY3NzICQoV2ViQ29yZSkvY3NzL3F1aXJrcy5jc3MgJChXZWJDb3Jl
KS9jc3Mvc3ZnLmNzcyAKQEAgLTE4Myw0ICsxOTgsNCBAQCBKU19CSU5ESU5HU19TQ1JJUFRTID0g
XAogIwogCiBKUyUuaCA6ICUuaWRsICQoSlNfQklORElOR1NfU0NSSVBUUykKLQlwZXJsIC1JJChX
ZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cy9nZW5l
cmF0ZS1iaW5kaW5ncy5wbCAtLWdlbmVyYXRvciBKUyAtLWluY2x1ZGUgZG9tIC0taW5jbHVkZSBo
dG1sIC0tb3V0cHV0ZGlyIC4gJDwKKwlwZXJsIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRz
ICQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWdlbmVy
YXRvciBKUyAtLWluY2x1ZGUgZG9tIC0taW5jbHVkZSBodG1sIC0taW5jbHVkZSB4cGF0aCAtLW91
dHB1dGRpciAgLiAkPApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24gMTQyMjUpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMjIgQEAgbW9k
dWxlIGNvcmUgewogICAgICAgICBOb2RlIGFkb3B0Tm9kZShpbiBOb2RlIHNvdXJjZSkKICAgICAg
ICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKIAorI2lmIFhQQVRIX1NVUFBPUlQKKyAgICAg
ICAgLy8gRE9NIExldmVsIDMgWFBhdGggKFhQYXRoRXZhbHVhdG9yIGludGVyZmFjZSkKKyAgICAg
ICAgWFBhdGhFeHByZXNzaW9uIGNyZWF0ZUV4cHJlc3Npb24oaW4gRE9NU3RyaW5nIGV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFhQYXRoTlNS
ZXNvbHZlciByZXNvbHZlcikKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisg
ICAgICAgIFhQYXRoTlNSZXNvbHZlciBjcmVhdGVOU1Jlc29sdmVyKGluIE5vZGUgbm9kZVJlc29s
dmVyKTsKKyAgICAgICAgCisgICAgICAgIFhQYXRoUmVzdWx0IGV2YWx1YXRlKGluIERPTVN0cmlu
ZyBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBOb2RlIGNvbnRl
eHROb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhOU1Jlc29sdmVy
IHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1bnNpZ25lZCBzaG9y
dCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBYUGF0aFJlc3VsdCBpblJl
c3VsdCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisjZW5kaWYKICAgICAg
ICAgLy8gQ29tbW9uIGV4dGVuc2lvbnMKIAogICAgICAgICBib29sZWFuIGV4ZWNDb21tYW5kKGlu
IERPTVN0cmluZyBjb21tYW5kLCAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0MjI1KQorKysg
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwxMCBA
QAogI2luY2x1ZGUgInJlbmRlcl9mcmFtZXMuaCIKICNpbmNsdWRlICJ4bWxfdG9rZW5pemVyLmgi
CiAjaW5jbHVkZSAieG1saHR0cHJlcXVlc3QuaCIKKyNpbmNsdWRlICJYUGF0aEV2YWx1YXRvci5o
IgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCiAKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5j
bHVkZSAiWFNMVFByb2Nlc3Nvci5oIgpAQCAtNDk2LDYgKzUwMCw3IEBAIFBhc3NSZWZQdHI8Tm9k
ZT4gRG9jdW1lbnQ6OmltcG9ydE5vZGUoTm8KICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFX05P
REU6CiAgICAgICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgY2FzZSBO
T1RBVElPTl9OT0RFOgorICAgICAgICBjYXNlIFhQQVRIX05BTUVTUEFDRV9OT0RFOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MTYsNiArNTIxLDcgQEAgUGFzc1JlZlB0cjxOb2Rl
PiBEb2N1bWVudDo6YWRvcHROb2RlKFBhcwogICAgICAgICBjYXNlIE5PVEFUSU9OX05PREU6CiAg
ICAgICAgIGNhc2UgRE9DVU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFX05P
REU6CisgICAgICAgIGNhc2UgWFBBVEhfTkFNRVNQQUNFX05PREU6CiAgICAgICAgICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQVRUUklCVVRFX05PREU6IHsgICAgICAgICAgICAgICAgICAgCkBAIC0zMDkx
LDYgKzMwOTcsNDAgQEAgVmVjdG9yPFN0cmluZz4gRG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YQog
ICAgIHJldHVybiBzdGF0ZVZlY3RvcjsKIH0KIAorI2lmIFhQQVRIX1NVUFBPUlQKK1Bhc3NSZWZQ
dHI8WFBhdGhFeHByZXNzaW9uPiBEb2N1bWVudDo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0
b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0
b3ItPmNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVjKTsKK30KKworUGFz
c1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IERvY3VtZW50OjpjcmVhdGVOU1Jlc29sdmVyKE5vZGUg
Km5vZGVSZXNvbHZlcikKK3sKKyAgICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1f
eHBhdGhFdmFsdWF0b3IgPSBuZXcgWFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1f
eHBhdGhFdmFsdWF0b3ItPmNyZWF0ZU5TUmVzb2x2ZXIobm9kZVJlc29sdmVyKTsKK30KKworUGFz
c1JlZlB0cjxYUGF0aFJlc3VsdD4gRG9jdW1lbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIW1feHBhdGhFdmFsdWF0b3IpCisgICAgICAgIG1feHBhdGhFdmFsdWF0b3IgPSBuZXcg
WFBhdGhFdmFsdWF0b3I7CisgICAgCisgICAgcmV0dXJuIG1feHBhdGhFdmFsdWF0b3ItPmV2YWx1
YXRlKGV4cHJlc3Npb24sIGNvbnRleHROb2RlLCByZXNvbHZlciwgdHlwZSwgcmVzdWx0LCBlYyk7
Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisKIHZvaWQgRG9jdW1lbnQ6OnNldFN0YXRl
Rm9yTmV3Rm9ybUVsZW1lbnRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikKIHsK
ICAgICAvLyBXYWxrIHRoZSBzdGF0ZSB2ZWN0b3IgYmFja3dhcmRzIHNvIHRoYXQgdGhlIHZhbHVl
IHRvIHVzZSBmb3IgZWFjaApJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNp
b24gMTQyMjUpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDYgKzYxLDkgQEAgYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVy
ZSAoY29ucwogICAgICAgICAgICAgfHwgbG93ZXIgPT0gInVpZXZlbnRzIgogICAgICAgICAgICAg
fHwgbG93ZXIgPT0gInZpZXdzIikKICAgICAgICAgcmV0dXJuIHZlcnNpb24uaXNFbXB0eSgpIHx8
IHZlcnNpb24gPT0gIjIuMCI7CisgICAgaWYgKGxvd2VyID09ICJ4cGF0aCIpCisgICAgICAgIHJl
dHVybiB2ZXJzaW9uLmlzRW1wdHkoKSB8fCB2ZXJzaW9uID09ICIzLjAiOworICAgIAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNDIyNSkKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBUZXh0OwogICAgIGNsYXNzIFRva2VuaXplcjsKICAgICBj
bGFzcyBUcmVlV2Fsa2VyOwotCisjaWYgWFBBVEhfU1VQUE9SVAorICAgIGNsYXNzIFhQYXRoRXZh
bHVhdG9yOworICAgIGNsYXNzIFhQYXRoRXhwcmVzc2lvbjsKKyAgICBjbGFzcyBYUGF0aE5TUmVz
b2x2ZXI7CisgICAgY2xhc3MgWFBhdGhSZXN1bHQ7CisjZW5kaWYKKyAgICAKICNpZiBfX0FQUExF
X18KICAgICBzdHJ1Y3QgRGFzaGJvYXJkUmVnaW9uVmFsdWU7CiAjZW5kaWYKQEAgLTU1Nyw2ICs1
NjMsMjAgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsKIAorI2lmIFhQ
QVRIX1NVUFBPUlQKKyAgICAvLyBYUGF0aEV2YWx1YXRvciBtZXRob2RzCisgICAgUGFzc1JlZlB0
cjxYUGF0aEV4cHJlc3Npb24+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQ
YXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIFBhc3NSZWZQdHI8WFBh
dGhOU1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUgKm5vZGVSZXNvbHZlcik7CisgICAg
UGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNvbnRleHROb2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciog
cmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJl
c3VsdCogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisgICAgCiBwcm90ZWN0ZWQ6
CiAgICAgQ1NTU3R5bGVTZWxlY3RvciogbV9zdHlsZVNlbGVjdG9yOwogICAgIEZyYW1lVmlldyog
bV92aWV3OwpAQCAtNzQyLDYgKzc2MiwxMCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1h
cDxIVE1MRm9ybUVsZW1lbnQqLCBOYW1lVG9JbnB1dE1hcCo+IEZvcm1Ub0dyb3VwTWFwOwogICAg
IEZvcm1Ub0dyb3VwTWFwIG1fc2VsZWN0ZWRSYWRpb0J1dHRvbnM7CiAgICAgCisjaWYgWFBBVEhf
U1VQUE9SVAorICAgIFJlZlB0cjxYUGF0aEV2YWx1YXRvcj4gbV94cGF0aEV2YWx1YXRvcjsKKyNl
bmRpZgorICAgIAogI2lmIFNWR19TVVBQT1JUCiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBt
X3N2Z0V4dGVuc2lvbnM7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE0MjI1KQorKysgV2ViQ29yZS9k
b20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgRE9DVU1FTlRfTk9ERSA9IDksCiAgICAgICAgIERPQ1VNRU5UX1RZUEVfTk9ERSA9IDEwLAog
ICAgICAgICBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTEsCi0gICAgICAgIE5PVEFUSU9OX05P
REUgPSAxMgorICAgICAgICBOT1RBVElPTl9OT0RFID0gMTIsCisgICAgICAgIFhQQVRIX05BTUVT
UEFDRV9OT0RFID0gMTMKICAgICB9OwogCiAgICAgTm9kZShEb2N1bWVudCopOwpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MjI1KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDQ0IEBACiAJCTE0RTgzNzhFMDlGODVENEYwMEI4NUFFNCAvKiBKU0V2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4
Mzc4RDA5Rjg1RDRGMDBCODVBRTQgLyogSlNFdmVudC5oICovOyB9OwogCQkxNEVDMjY3RjA5Q0Ew
N0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEVDMjY3RDA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRU
YXJnZXROb2RlLmggKi87IH07CiAJCTE0RUMyNjgwMDlDQTA3RTAwMEUxRUVFQyAvKiBFdmVudFRh
cmdldE5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRFQzI2N0UwOUNBMDdFMDAwRTFFRUVDIC8qIEV2ZW50VGFyZ2V0Tm9kZS5jcHAgKi87IH07
CisJCTFBNUQ5MzhFMEEwQjlBQ0MwMEIxMTIxRiAvKiBYUGF0aFBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTVEOTM4QzBBMEI5QUNDMDBC
MTEyMUYgLyogWFBhdGhQYXJzZXIuY3BwICovOyB9OworCQkxQTVEOTM4RjBBMEI5QUNDMDBCMTEy
MUYgLyogWFBhdGhQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNUQ5MzhEMEEwQjlBQ0MwMEIxMTIxRiAvKiBYUGF0aFBhcnNlci5oICovOyB9
OworCQkxQTY5MzE3NjBBMENENEZBMDBDMTI3RkUgLyogWFBhdGhWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2OTMxNzQwQTBDRDRGQTAwQzEy
N0ZFIC8qIFhQYXRoVmFsdWUuaCAqLzsgfTsKKwkJMUE2OTMxNzcwQTBDRDRGQTAwQzEyN0ZFIC8q
IFhQYXRoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE2OTMxNzUwQTBDRDRGQTAwQzEyN0ZFIC8qIFhQYXRoVmFsdWUuY3BwICovOyB9Owor
CQkxQTc2Mjk4MzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uTm9kZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk1OTBBMDc0
MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uTm9kZS5jcHAgKi87IH07CisJCTFBNzYyOTg0
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk1QTBBMDc0MEEwMDA5ODlGNUIg
LyogWFBhdGhFeHByZXNzaW9uTm9kZS5oICovOyB9OworCQkxQTc2Mjk4QTBBMDc0MEEwMDA5ODlG
NUIgLyogWFBhdGhGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE3NjI5NjEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRnVuY3Rpb25z
LmNwcCAqLzsgfTsKKwkJMUE3NjI5OEIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2
MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhGdW5jdGlvbnMuaCAqLzsgfTsKKwkJMUE3NjI5OEUw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2NTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhQ
YXRoLmNwcCAqLzsgfTsKKwkJMUE3NjI5OEYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUGF0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjYw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUGF0aC5oICovOyB9OworCQkxQTc2Mjk5MDBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhQcmVkaWNhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NjcwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUHJl
ZGljYXRlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OTEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUHJl
ZGljYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTc2Mjk2ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhQcmVkaWNhdGUuaCAqLzsgfTsKKwkJMUE3
NjI5OTIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoU3RlcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2OTBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhTdGVwLmNwcCAqLzsgfTsKKwkJMUE3NjI5OTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
U3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3
NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoU3RlcC5oICovOyB9OworCQkxQTc2Mjk5NzBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhVdGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFV0
aWwuY3BwICovOyB9OworCQkxQTc2Mjk5ODBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhVdGlsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk2RjBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhVdGlsLmggKi87IH07CisJCTFBNzYyOTk5MEEwNzQwQTAw
MDk4OUY1QiAvKiBYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTcwMEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTcxMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFZh
cmlhYmxlUmVmZXJlbmNlLmggKi87IH07CisJCTFBNzYyOTlEMEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2Mjk3NTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuY3BwICov
OyB9OworCQkxQTc2Mjk5RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTc2MEEwNzQw
QTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oICovOyB9OworCQkxQTc2MjlBMDBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTc4MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4
cHJlc3Npb24uY3BwICovOyB9OworCQkxQTc2MjlBMTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhF
eHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTc2Mjk3OTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmggKi87IH07CisJ
CTFBNzYyOUEzMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3QjBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwICovOyB9OworCQkxQTc2MjlBNDBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNzYyOTdDMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFj
ZS5oICovOyB9OworCQkxQTc2MjlBNTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYy
OTdEMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwICovOyB9OworCQkxQTc2
MjlBNjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2Mjk3RTBBMDc0MEEwMDA5ODlGNUIg
LyogWFBhdGhOU1Jlc29sdmVyLmggKi87IH07CisJCTFBNzYyOUE4MEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTc2Mjk4MDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuY3BwICovOyB9
OworCQkxQTc2MjlBOTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTgxMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aFJlc3VsdC5oICovOyB9OworCQkxQTc2MjlENTBBMDc0MjUxMDA5ODlGNUIg
LyogWFBhdGhHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNzYyOUQzMEEwNzQyNTEwMDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwICov
OyB9OworCQkxQTc2MjlENjBBMDc0MjUxMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MjlENDBBMDc0MjUx
MDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLmggKi87IH07CisJCTFBNzYyQzczMEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZCMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZh
bHVhdG9yLmNwcCAqLzsgfTsKKwkJMUE3NjJDNzQwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhF
dmFsdWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNzYyQzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggKi87IH07CisJ
CTFBNzYyQzc1MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhwcmVzc2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM2RDBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uY3BwICovOyB9OworCQkxQTc2MkM3NjBBMDc0
RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzZFMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoRXhwcmVzc2lvbi5oICovOyB9OworCQkxQTc2MkM3NzBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE3NjJDNkYwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNw
cCAqLzsgfTsKKwkJMUE3NjJDNzgwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc2MkM3
MDBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aE5TUmVzb2x2ZXIuaCAqLzsgfTsKKwkJMUE3NjJD
NzkwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNzEwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhSZXN1bHQuY3BwICovOyB9OworCQkxQTc2MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyog
SlNYUGF0aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE3NjJDNzIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCAqLzsgfTsK
IAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3
MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
aCAqLzsgfTsKIAkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2IC8qIEhUTUxOYW1lcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDQjA4NUY2
MDREMDA3MzUzRDYgLyogSFRNTE5hbWVzLmNwcCAqLzsgfTsKQEAgLTEyNTUsNiArMTI5Myw0OSBA
QAogCQkxNEU4Mzc4RDA5Rjg1RDRGMDBCODVBRTQgLyogSlNFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEVDMjY3RDA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50VGFyZ2V0Tm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEVDMjY3RTA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJn
ZXROb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50VGFy
Z2V0Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNUQ5MzhDMEEwQjlB
Q0MwMEIxMTIxRiAvKiBYUGF0aFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gWFBhdGhQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQTVEOTM4RDBBMEI5QUNDMDBCMTEyMUYgLyogWFBhdGhQYXJzZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNjkzMTc0MEEwQ0Q0RkEwMEMxMjdGRSAvKiBYUGF0aFZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE2OTMxNzUwQTBDRDRGQTAwQzEyN0ZFIC8qIFhQYXRoVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTU5MEEwNzQwQTAwMDk4OUY1QiAvKiBY
UGF0aEV4cHJlc3Npb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBYUGF0aEV4cHJlc3Npb25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUE3NjI5NUEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbk5vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoRXhwcmVzc2lvbk5vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQ
YXRoRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBY
UGF0aEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTYy
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gWFBhdGhGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUE3NjI5NjUwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUGF0aC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhQYXRoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NjYwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoUGF0aC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhQYXRoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTY3MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFBy
ZWRpY2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhQ
cmVkaWNhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2ODBBMDc0
MEEwMDA5ODlGNUIgLyogWFBhdGhQcmVkaWNhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhQYXRoUHJlZGljYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBNzYyOTY5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFN0ZXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhQYXRoU3RlcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFBNzYyOTZBMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFN0ZXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoU3RlcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTc2Mjk2RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhVdGlsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aFV0aWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk2RjBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0aFV0aWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzAwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQTc2Mjk3MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhWYXJpYWJsZVJl
ZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhWYXJpYWJs
ZVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3MjBBMDc0
MEEwMDA5ODlGNUIgLyogWFBhdGhHcmFtbWFyLnkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS55YWNj
OyBwYXRoID0gWFBhdGhHcmFtbWFyLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
NzYyOTc1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhFdmFsdWF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3NjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFs
dWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoRXZhbHVhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTc3MEEwNzQwQTAwMDk4OUY1
QiAvKiBYUGF0aEV2YWx1YXRvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhQYXRoRXZh
bHVhdG9yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5NzgwQTA3NDBB
MDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFBhdGhFeHByZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUE3NjI5NzkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFBhdGhFeHByZXNzaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTdBMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aEV4cHJlc3Npb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aEV4cHJlc3Npb24u
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3QjBBMDc0MEEwMDA5ODlG
NUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhQYXRoTmFtZXNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUE3NjI5N0MwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0aE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQTc2Mjk3RDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYUGF0aE5TUmVzb2x2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk3RTBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBYUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3
NjI5N0YwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTlNSZXNvbHZlci5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFhQYXRoTlNSZXNvbHZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFBNzYyOTgwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFJlc3VsdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhSZXN1bHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2Mjk4MTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhS
ZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQYXRoUmVzdWx0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNzYyOTgyMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aFJlc3VsdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhQYXRoUmVzdWx0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5RDMwQTA3NDI1MTAwOTg5RjVC
IC8qIFhQYXRoR3JhbW1hci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gWFBhdGhHcmFtbWFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjI5
RDQwQTA3NDI1MTAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gWFBhdGhHcmFtbWFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFBNzYyQzZCMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoRXZhbHVhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNkMwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
WFBhdGhFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNkQw
QTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoRXhwcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFBNzYyQzZFMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0aEV4cHJl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNkYwQTA3NEYyNjAw
OTg5RjVCIC8qIEpTWFBhdGhOU1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1hQYXRoTlNSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNzYyQzcwMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYUGF0aE5TUmVzb2x2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE3NjJDNzEwQTA3NEYyNjAwOTg5RjVCIC8q
IEpTWFBhdGhSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTWFBhdGhSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTc2MkM3
MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNYUGF0aFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDkwNjYwQjA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZE1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENsaXBib2Fy
ZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTQ3NThDNDQzMDhDNUYyMTcwMDlCQUYwNSAvKiBLQ2FudmFzUGF0aC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52
YXNQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CkBAIC0yNjE3LDYgKzI2OTgsNyBAQAogCQkJCUY1MjNEMkYzMDJERTQ0M0IwMTg2
MzVDQSAvKiByZW5kZXJpbmcgKi8sCiAJCQkJQThDMEY2REMwODk3MDFGMTAwQkE1MTE0IC8qIFdl
YkNvcmUrU1ZHICovLAogCQkJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwgKi8sCisJ
CQkJMUE3NjI5NTcwQTA3NDBBMDAwOTg5RjVCIC8qIHhwYXRoICovLAogCQkJCTY1NjU4MEVDMDlE
MTJCMjAwMDBFNjFENyAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCiAJCQkJMDg5QzE2NjVGRTg0MTE1
OEMwMkFBQzA3IC8qIFJlc291cmNlcyAqLywKIAkJCQkwODY3RDY5QUZFODQwMjhGQzAyQUFDMDcg
LyogRnJhbWV3b3JrcyAqLywKQEAgLTI2NjAsNiArMjc0Miw1NCBAQAogCQkJcGF0aCA9IFJlc291
cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFBNzYyOTU3MEEwNzQw
QTAwMDk4OUY1QiAvKiB4cGF0aCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMUE3NjI5NTgwQTA3NDBBMDAwOTg5RjVCIC8qIGltcGwgKi8sCisJCQkJMUE3
NjI5NzUwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCAqLywKKwkJCQkxQTc2
Mjk3NjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaCAqLywKKwkJCQkxQTc2Mjk3
NzBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFdmFsdWF0b3IuaWRsICovLAorCQkJCTFBNzYyOTc4
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwICovLAorCQkJCTFBNzYyOTc5
MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uaCAqLywKKwkJCQkxQTc2Mjk3QTBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uLmlkbCAqLywKKwkJCQkxQTc2Mjk3QjBB
MDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOYW1lc3BhY2UuY3BwICovLAorCQkJCTFBNzYyOTdDMEEw
NzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5hbWVzcGFjZS5oICovLAorCQkJCTFBNzYyOTdEMEEwNzQw
QTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuY3BwICovLAorCQkJCTFBNzYyOTdFMEEwNzQw
QTAwMDk4OUY1QiAvKiBYUGF0aE5TUmVzb2x2ZXIuaCAqLywKKwkJCQkxQTc2Mjk3RjBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhOU1Jlc29sdmVyLmlkbCAqLywKKwkJCQkxQTc2Mjk4MDBBMDc0MEEw
MDA5ODlGNUIgLyogWFBhdGhSZXN1bHQuY3BwICovLAorCQkJCTFBNzYyOTgxMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aFJlc3VsdC5oICovLAorCQkJCTFBNzYyOTgyMEEwNzQwQTAwMDk4OUY1QiAv
KiBYUGF0aFJlc3VsdC5pZGwgKi8sCisJCQkpOworCQkJcGF0aCA9IHhwYXRoOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMUE3NjI5NTgwQTA3NDBBMDAwOTg5RjVCIC8qIGlt
cGwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFBNzYy
OTU5MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb25Ob2RlLmNwcCAqLywKKwkJCQkx
QTc2Mjk1QTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uTm9kZS5oICovLAorCQkJ
CTFBNzYyOTYxMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJ
MUE3NjI5NjIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRnVuY3Rpb25zLmggKi8sCisJCQkJMUE3
NjI5NzIwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoR3JhbW1hci55ICovLAorCQkJCTFBNUQ5MzhD
MEEwQjlBQ0MwMEIxMTIxRiAvKiBYUGF0aFBhcnNlci5jcHAgKi8sCisJCQkJMUE1RDkzOEQwQTBC
OUFDQzAwQjExMjFGIC8qIFhQYXRoUGFyc2VyLmggKi8sCisJCQkJMUE3NjI5NjUwQTA3NDBBMDAw
OTg5RjVCIC8qIFhQYXRoUGF0aC5jcHAgKi8sCisJCQkJMUE3NjI5NjYwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoUGF0aC5oICovLAorCQkJCTFBNzYyOTY3MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aFByZWRpY2F0ZS5jcHAgKi8sCisJCQkJMUE3NjI5NjgwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRo
UHJlZGljYXRlLmggKi8sCisJCQkJMUE3NjI5NjkwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoU3Rl
cC5jcHAgKi8sCisJCQkJMUE3NjI5NkEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoU3RlcC5oICov
LAorCQkJCTFBNzYyOTZFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFV0aWwuY3BwICovLAorCQkJ
CTFBNzYyOTZGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFV0aWwuaCAqLywKKwkJCQkxQTY5MzE3
NTBBMENENEZBMDBDMTI3RkUgLyogWFBhdGhWYWx1ZS5jcHAgKi8sCisJCQkJMUE2OTMxNzQwQTBD
RDRGQTAwQzEyN0ZFIC8qIFhQYXRoVmFsdWUuaCAqLywKKwkJCQkxQTc2Mjk3MDBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJMUE3NjI5NzEwQTA3
NDBBMDAwOTg5RjVCIC8qIFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gaW1wbDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTU1OTk4QTU3
MDUyQjU5OEYwMDE3QTZDMSAvKiBBY2Nlc3NpYmlsaXR5ICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI3NDUsNiArMjg3NSwxNCBAQAogCQkJCTY1REYzMUYw
MDlEMUNDNjAwMDBCRTMyNSAvKiBKU1RleHQuaCAqLywKIAkJCQlBODY2MjlDQTA5REEyQjQ3MDA5
NjMzQTUgLyogSlNVSUV2ZW50LmNwcCAqLywKIAkJCQlBODY2MjlDOTA5REEyQjQ3MDA5NjMzQTUg
LyogSlNVSUV2ZW50LmggKi8sCisJCQkJMUE3NjJDNkIwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBh
dGhFdmFsdWF0b3IuY3BwICovLAorCQkJCTFBNzYyQzZDMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoRXZhbHVhdG9yLmggKi8sCisJCQkJMUE3NjJDNkQwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBh
dGhFeHByZXNzaW9uLmNwcCAqLywKKwkJCQkxQTc2MkM2RTBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aEV4cHJlc3Npb24uaCAqLywKKwkJCQkxQTc2MkM2RjBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aE5TUmVzb2x2ZXIuY3BwICovLAorCQkJCTFBNzYyQzcwMEEwNzRGMjYwMDk4OUY1QiAvKiBK
U1hQYXRoTlNSZXNvbHZlci5oICovLAorCQkJCTFBNzYyQzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBK
U1hQYXRoUmVzdWx0LmNwcCAqLywKKwkJCQkxQTc2MkM3MjBBMDc0RjI2MDA5ODlGNUIgLyogSlNY
UGF0aFJlc3VsdC5oICovLAogCQkJCTY1REYzMUYxMDlEMUNDNjAwMDBCRTMyNSAvKiBKU1doZWVs
RXZlbnQuY3BwICovLAogCQkJCTY1REYzMUYyMDlEMUNDNjAwMDBCRTMyNSAvKiBKU1doZWVsRXZl
bnQuaCAqLywKIAkJCQk2NTY1ODFENzA5RDE1MDhEMDAwRTYxRDcgLyogSlNYTUxIdHRwUmVxdWVz
dC5sdXQuaCAqLywKQEAgLTI3NzQsNiArMjkxMiw4IEBACiAJCQkJNjU2NTgxQUYwOUQxNEVFNjAw
MEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxRUEw
OUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUVCMDlEMTUw
OEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggKi8sCisJCQkJMUE3NjI5RDMwQTA3NDI1MTAwOTg5
RjVCIC8qIFhQYXRoR3JhbW1hci5jcHAgKi8sCisJCQkJMUE3NjI5RDQwQTA3NDI1MTAwOTg5RjVC
IC8qIFhQYXRoR3JhbW1hci5oICovLAogCQkJCTE0MjAxMUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBK
U0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQgU291
cmNlcyI7CkBAIC00ODQ0LDYgKzQ5ODQsMjUgQEAKIAkJCQkxNERDMEQzODA5RkVEMDczMDA3QjAy
MzUgLyogSlNOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQwQzgyNTA5RkYwRUY1MDA2QjM2
RDkgLyoga2pzX2RvbW5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjAxMUI3MEEwMDMxMzMw
MDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
NzYyOTg0MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxQTc2Mjk4QjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhGdW5jdGlvbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTFBNzYyOThGMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFBhdGgu
aCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOTkxMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFBy
ZWRpY2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OTMwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoU3RlcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OTgwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoVXRpbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE3NjI5OUEwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYy
OTlFMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV2YWx1YXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMUE3NjI5QTEwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUE3NjI5QTQwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlBNjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhOU1Jl
c29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MjlBOTBBMDc0MEEwMDA5ODlGNUIgLyog
WFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyOUQ2MEEwNzQyNTEwMDk4OUY1
QiAvKiBYUGF0aEdyYW1tYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNzYyQzc0MEEwNzRGMjYw
MDk4OUY1QiAvKiBKU1hQYXRoRXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTc2MkM3
NjBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTFBNzYyQzc4MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUE3NjJDN0EwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTFBNUQ5MzhGMEEwQjlBQ0MwMEIxMTIxRiAvKiBYUGF0aFBh
cnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE2OTMxNzYwQTBDRDRGQTAwQzEyN0ZFIC8qIFhQ
YXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTU2MCw4ICs1NzE5LDI3IEBACiAJCQkJQkNG
RThFMzIwQTAyQTFEMzAwMDlFNjFEIC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxNERDMEQzNzA5RkVEMDczMDA3QjAyMzUgLyogSlNOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFy
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5ODMwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoRXhwcmVzc2lvbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OEEwQTA3
NDBBMDAwOTg5RjVCIC8qIFhQYXRoRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFB
NUQ5MzhFMEEwQjlBQ0MwMEIxMTIxRiAvKiBYUGF0aFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkxQTc2Mjk4RTBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhQYXRoLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTFBNzYyOTkwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aFByZWRpY2F0ZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxQTc2Mjk5MjBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhTdGVw
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOTk3MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0
aFV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OTkwQTA3NDBBMDAwOTg5RjVCIC8q
IFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5OUQw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFBNzYyOUEwMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUE3NjI5QTMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoTmFtZXNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUE1MEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aE5T
UmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjI5QTgwQTA3NDBBMDAwOTg5RjVC
IC8qIFhQYXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBNzYyOUQ1MEEwNzQyNTEw
MDk4OUY1QiAvKiBYUGF0aEdyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUE3NjJDNzMw
QTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFdmFsdWF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUE3NjJDNzUwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhFeHByZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFBNzYyQzc3MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNv
bHZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTc2MkM3OTBBMDc0RjI2MDA5ODlGNUIgLyog
SlNYUGF0aFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzZCREQxRDBBMDMxQUVCMDA0
REY0QUIgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRDEz
MjAwQTBDMDAzMDAwMUFGQThCIC8qIEZvbnREYXRhLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUE2
OTMxNzcwQTBDRDRGQTAwQzEyN0ZFIC8qIFhQYXRoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC01NTg2LDYgKzU3NjQsNyBAQAogCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAo
CiAJCQkJCSIkKERFQlVHX0RFRklORVMpIiwKIAkJCQkJU1ZHX1NVUFBPUlQsCisJCQkJCVhQQVRI
X1NVUFBPUlQsCiAJCQkJKTsKIAkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAogCQkJCQlGb3J3
YXJkaW5nSGVhZGVycywKQEAgLTU2MTgsNiArNTc5Nyw3IEBACiAJCQkJR0NDX1BSRVBST0NFU1NP
Ul9ERUZJTklUSU9OUyA9ICgKIAkJCQkJIiQoREVCVUdfREVGSU5FUykiLAogCQkJCQlTVkdfU1VQ
UE9SVCwKKwkJCQkJWFBBVEhfU1VQUE9SVCwKIAkJCQkpOwogCQkJCUhFQURFUl9TRUFSQ0hfUEFU
SFMgPSAoCiAJCQkJCUZvcndhcmRpbmdIZWFkZXJzLApAQCAtNTY1MSw2ICs1ODMxLDcgQEAKIAkJ
CQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAogCQkJCQkiJChERUJVR19ERUZJTkVT
KSIsCiAJCQkJCVNWR19TVVBQT1JULAorCQkJCQlYUEFUSF9TVVBQT1JULAogCQkJCSk7CiAJCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKIAkJCQkJRm9yd2FyZGluZ0hlYWRlcnMsCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcAkocmV2aXNpb24gMTQyMjUpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw3IEBAIHN0YXRpYyBEZXByZWNhdGVkU3Ry
aW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKICAg
ICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CiAgICAgICAgIGNhc2UgTm9k
ZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9E
RToKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gIiI7CkluZGV4OiBXZWJD
b3JlL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L1hQYXRoTmFtZXNwYWNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvWFBhdGhO
YW1lc3BhY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJp
Z2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBP
UgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAq
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlhQYXRoTmFt
ZXNwYWNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitYUGF0aE5hbWVzcGFjZTo6WFBhdGhOYW1lc3BhY2UoUGFzc1JlZlB0cjxFbGVtZW50PiBvd25l
ckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcmIHVyaSkKKyAgICA6
IE5vZGUob3duZXJFbGVtZW50LT5kb2N1bWVudCgpKSwKKyAgICBtX293bmVyRWxlbWVudChvd25l
ckVsZW1lbnQpLAorICAgIG1fcHJlZml4KHByZWZpeCksCisgICAgbV91cmkodXJpKQoreworfQor
CitYUGF0aE5hbWVzcGFjZTo6flhQYXRoTmFtZXNwYWNlKCkKK3sKK30KKworRG9jdW1lbnQqIFhQ
YXRoTmFtZXNwYWNlOjpvd25lckRvY3VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25l
ckVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKTsKK30KKworRWxlbWVudCogWFBhdGhOYW1lc3BhY2U6
Om93bmVyRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXJFbGVtZW50LmdldCgp
OworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFhQYXRoTmFtZXNwYWNlOjpwcmVmaXgoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByZWZpeDsKK30KKworU3RyaW5nIFhQYXRoTmFtZXNwYWNlOjpu
b2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICIjbmFtZXNwYWNlIjsKK30KKworU3RyaW5n
IFhQYXRoTmFtZXNwYWNlOjpub2RlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VyaTsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBYUGF0aE5hbWVzcGFjZTo6bmFtZXNwYWNlVVJJKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV91cmk7Cit9CisKK05vZGU6Ok5vZGVUeXBlIFhQYXRoTmFt
ZXNwYWNlOjpub2RlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5vZGU6OlhQQVRIX05BTUVT
UEFDRV9OT0RFOworfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCit9CisKSW5kZXg6IFdl
YkNvcmUveHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hw
YXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQ
YXRoRXhwcmVzc2lvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJY
UGF0aEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlhQYXRoUGFyc2VyLmgiCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb25O
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFhQYXRoOwor
ICAgIAorUGFzc1JlZlB0cjxYUGF0aEV4cHJlc3Npb24+IFhQYXRoRXhwcmVzc2lvbjo6Y3JlYXRl
RXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFhQYXRoTlNSZXNvbHZlciogcmVz
b2x2ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxYUGF0aEV4cHJlc3Npb24+
IGV4cHIgPSBuZXcgWFBhdGhFeHByZXNzaW9uOworICAgIFBhcnNlciBwYXJzZXI7CisgICAgCisg
ICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5yZXNvbHZlciA9IHJlc29sdmVyOwor
ICAgIGV4cHItPm1fdG9wRXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZVN0YXRlbWVudChleHByZXNz
aW9uLCBlYyk7CisgICAgaWYgKCFleHByLT5tX3RvcEV4cHJlc3Npb24pCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIGV4cHI7Cit9CisKK1hQYXRoRXhwcmVzc2lvbjo6flhQYXRoRXhw
cmVzc2lvbigpCit7CisgICAgZGVsZXRlIG1fdG9wRXhwcmVzc2lvbjsKK30KKworUGFzc1JlZlB0
cjxYUGF0aFJlc3VsdD4gWFBhdGhFeHByZXNzaW9uOjpldmFsdWF0ZShOb2RlKiBjb250ZXh0Tm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWFBhdGhSZXN1bHQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWlzVmFs
aWRDb250ZXh0Tm9kZShjb250ZXh0Tm9kZSkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE5vZGUqIGV2ZW50VGFy
Z2V0ID0gY29udGV4dE5vZGUtPm93bmVyRG9jdW1lbnQoKSA/IAorICAgICAgICBjb250ZXh0Tm9k
ZS0+b3duZXJEb2N1bWVudCgpIDogY29udGV4dE5vZGU7CisgICAgCisgICAgRXhwcmVzc2lvbjo6
ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gY29udGV4dE5vZGU7ICAgIAorICAgIG1fdG9wRXhw
cmVzc2lvbi0+b3B0aW1pemUoKTsKKyAgICAKKyAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3Vs
dCA9IG5ldyBYUGF0aFJlc3VsdChzdGF0aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihldmVudFRh
cmdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV90b3BFeHByZXNzaW9uLT5ldmFsdWF0ZSgpKTsKKyAgICAKKyAgICBpZiAodHlwZSAhPSBYUGF0
aFJlc3VsdDo6QU5ZX1RZUEUpIHsKKyAgICAgICAgcmVzdWx0LT5jb252ZXJ0VG8odHlwZSwgZWMp
OworCisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6
IFdlYkNvcmUveHBhdGgvWFBhdGhOYW1lc3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hw
YXRoL1hQYXRoTmFtZXNwYWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRo
TmFtZXNwYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRl
ZiBYUGF0aE5hbWVzcGFjZV9ICisjZGVmaW5lIFhQYXRoTmFtZXNwYWNlX0gKKworI2lmIFhQQVRI
X1NVUFBPUlQKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKworY2xhc3MgRG9jdW1lbnQ7CisKK2NsYXNzIFhQ
YXRoTmFtZXNwYWNlIDogcHVibGljIE5vZGUKK3sKK3B1YmxpYzoKKyAgICBYUGF0aE5hbWVzcGFj
ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IG93bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5nJiB1cmkpOworICAgIHZpcnR1YWwgflhQ
YXRoTmFtZXNwYWNlKCk7CisKKyAgICB2aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVWYWx1ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9vd25lckVsZW1lbnQ7CisgICAgQXRvbWlj
U3RyaW5nIG1fcHJlZml4OworICAgIEF0b21pY1N0cmluZyBtX3VyaTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFhQQVRIX1NVUFBPUlQKKworI2VuZGlmIC8vIFhQYXRoTmFtZXNwYWNlX0gKKwpJbmRl
eDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRo
L1hQYXRoRXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAq
IENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkg
RVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUg
IlhQYXRoRXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKyAgICAKK1Bhc3NSZWZQdHI8
WFBhdGhFeHByZXNzaW9uPiBYUGF0aEV2YWx1YXRvcjo6Y3JlYXRlRXhwcmVzc2lvbihjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gWFBhdGhFeHByZXNzaW9uOjpjcmVhdGVF
eHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVyLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8WFBh
dGhOU1Jlc29sdmVyPiBYUGF0aEV2YWx1YXRvcjo6Y3JlYXRlTlNSZXNvbHZlcihOb2RlKiBub2Rl
UmVzb2x2ZXIpCit7CisgICAgcmV0dXJuIG5ldyBYUGF0aE5TUmVzb2x2ZXIobm9kZVJlc29sdmVy
KTsKK30KKworUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gWFBhdGhFdmFsdWF0b3I6OmV2YWx1YXRl
KGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjb250ZXh0Tm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFBhdGhSZXN1bHQqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWlz
VmFsaWRDb250ZXh0Tm9kZShjb250ZXh0Tm9kZSkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPFhQYXRoRXhw
cmVzc2lvbj4gZXhwciA9IGNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBleHBy
LT5ldmFsdWF0ZShjb250ZXh0Tm9kZSwgdHlwZSwgcmVzdWx0LCBlYyk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIFhQQVRIX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJl
IDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFBhdGhOU1Jlc29sdmVyOjpYUGF0
aE5TUmVzb2x2ZXIoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIDogbV9ub2RlKG5vZGUpCit7
Cit9CisKK1N0cmluZyBYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBT
dHJpbmcmIHByZWZpeCkKK3sKKyAgICAvLyBUaGlzIGlzIG5vdCBkb25lIGJ5IE5vZGU6Omxvb2t1
cE5hbWVzcGFjZVVSSSBhcyBwZXIgdGhlIERPTTMgQ29yZSBzcGVjLAorICAgIC8vIGJ1dCB0aGUg
WFBhdGggc3BlYyBzYXlzIHRoYXQgd2Ugc2hvdWxkIGRvIGl0IGZvciBYUGF0aE5TUmVzb2x2ZXIu
CisgICAgaWYgKHByZWZpeCA9PSAieG1sIikKKyAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3Lncz
Lm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiOworICAgIAorICAgIHJldHVybiBtX25vZGUgPyBtX25v
ZGUtPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpIDogU3RyaW5nKCk7Cit9CisKKyNlbmRpZiAv
LyBYUEFUSF9TVVBQT1JUCisKK30KKwpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Np
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJh
YWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwor
ICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhFeHByZXNzaW9uX0gKKyNk
ZWZpbmUgWFBhdGhFeHByZXNzaW9uX0gKKworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUg
IlNoYXJlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlCit7CitjbGFzcyBOb2RlOworCitjbGFzcyBYUGF0aE5TUmVzb2x2ZXI7Citj
bGFzcyBYUGF0aFJlc3VsdDsKKworY2xhc3MgWFBhdGhFeHByZXNzaW9uIDogcHVibGljIFNoYXJl
ZDxYUGF0aEV4cHJlc3Npb24+Cit7CitwdWJsaWM6CisgICAgflhQYXRoRXhwcmVzc2lvbigpOwor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9u
KGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgUGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoTm9kZSogY29udGV4
dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3Vs
dCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICAKK3ByaXZhdGU6CisgICAgWFBhdGg6OkV4cHJlc3Npb24qIG1fdG9wRXhwcmVz
c2lvbjsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKworI2VuZGlmIC8vIFhQ
YXRoRXhwcmVzc2lvbl9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaWRsCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUg
eHBhdGggeworCisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yXSBYUGF0aFJlc3Vs
dCB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFOWV9UWVBFICAgICAgICAgICAgICAg
ICAgICAgICA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5VTUJFUl9UWVBFICAg
ICAgICAgICAgICAgICAgICA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUUklO
R19UWVBFICAgICAgICAgICAgICAgICAgICA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEJPT0xFQU5fVFlQRSAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgICA9IDQ7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICAgICA9IDU7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUgICA9IDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9SREVSRURfTk9ERV9TTkFQ
U0hPVF9UWVBFICAgICA9IDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFOWV9VTk9S
REVSRURfTk9ERV9UWVBFICAgICAgICA9IDg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IEZJUlNUX09SREVSRURfTk9ERV9UWVBFICAgICAgICA9IDk7CisKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIHNob3J0ICByZXN1bHRUeXBlOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgZG91YmxlICAgICAgICAgIG51bWJlclZhbHVlCisgICAgICAgICAgICBnZXR0ZXIg
cmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAgICAgICAgCisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgc3RyaW5nVmFsdWUKKyAgICAgICAgICAgIGdldHRlciBy
YWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gICAgICAgICBib29sZWFuVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgICAgICAgICAgICBz
aW5nbGVOb2RlVmFsdWUKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7
CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBpbnZhbGlkSXRl
cmF0b3JTdGF0ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgICBz
bmFwc2hvdExlbmd0aAorICAgICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgICAgIAorICAgICAgICBOb2RlIGl0ZXJhdGVOZXh0KCkKKyAgICAgICAgICAgIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgTm9kZSBzbmFwc2hvdEl0ZW0oaW4gdW5zaWdu
ZWQgbG9uZyBpbmRleCkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICB9
OworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
eHBhdGgvWFBhdGhFdmFsdWF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB
TlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAq
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKyNpZm5kZWYgWFBhdGhFdmFsdWF0b3JfSAorI2RlZmluZSBYUGF0aEV2YWx1YXRvcl9I
CisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZQoreworY2xhc3MgTm9kZTsKKworY2xhc3MgWFBhdGhFeHByZXNzaW9uOworY2xh
c3MgWFBhdGhOU1Jlc29sdmVyOworY2xhc3MgWFBhdGhSZXN1bHQ7CisKK2NvbnN0IGludCBYUGF0
aEV4Y2VwdGlvbk9mZnNldCA9IDQwMDsKK2NvbnN0IGludCBYUGF0aEV4Y2VwdGlvbk1heCA9IDQ5
OTsgICAKKworZW51bSBYUGF0aEV4Y2VwdGlvbkNvZGUgeyBJTlZBTElEX0VYUFJFU1NJT05fRVJS
ID0gWFBhdGhFeGNlcHRpb25PZmZzZXQgKyA1MSwgVFlQRV9FUlIgfTsKKworY2xhc3MgWFBhdGhF
dmFsdWF0b3IgOiBwdWJsaWMgU2hhcmVkPFhQYXRoRXZhbHVhdG9yPgoreworcHVibGljOgorICAg
IFBhc3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBjcmVhdGVFeHByZXNzaW9uKGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8WFBh
dGhOU1Jlc29sdmVyPiBjcmVhdGVOU1Jlc29sdmVyKE5vZGUqIG5vZGVSZXNvbHZlcik7CisgICAg
UGFzc1JlZlB0cjxYUGF0aFJlc3VsdD4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNvbnRleHROb2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlcios
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aFJlc3VsdCosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYpOworfTsK
KworfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhFdmFsdWF0
b3JfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aE5TUmVzb2x2ZXJfSAorI2RlZmluZSBYUGF0aE5TUmVz
b2x2ZXJfSAorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiU2hhcmVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlCit7CisKK2NsYXNzIE5vZGU7CisKK2NsYXNzIFhQYXRoTlNSZXNvbHZlciA6IHB1Ymxp
YyBTaGFyZWQ8WFBhdGhOU1Jlc29sdmVyPgoreworICAgIHB1YmxpYzoKKyAgICAgICAgWFBhdGhO
U1Jlc29sdmVyKFBhc3NSZWZQdHI8Tm9kZT4pOworCisgICAgICAgIFN0cmluZyBsb29rdXBOYW1l
c3BhY2VVUkkoY29uc3QgU3RyaW5nJiBwcmVmaXgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPE5vZGU+IG1fbm9kZTsKK307CisKK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
KworI2VuZGlmIC8vIFhQYXRoTlNSZXNvbHZlcl9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1w
bC9leHByZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcHJl
ZGljYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGF0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cklu
ZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvdmFyaWFibGVyZWZlcmVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
SW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94
cGF0aC9pbXBsL1hQYXRoUGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBACisv
KgorICogQ29weXJpZ2h0IDIwMDUgTWFrc2ltIE9ybG92aWNoIDxtYWtzaW1Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aFBhcnNlcl9ICisjZGVmaW5lIFhQYXRoUGFyc2VyX0gK
KworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgPGt4bWxjb3JlL05vbmNvcHlhYmxlLmg+
CisKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KworI2luY2x1ZGUgIlhQYXRoU3RlcC5oIgorI2luY2x1ZGUgIlhQYXRoUGF0aC5oIgorI2luY2x1
ZGUgIlhQYXRoUHJlZGljYXRlLmgiCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uTm9kZS5oIgor
I2luY2x1ZGUgIlhQYXRoVXRpbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
WFBhdGggeworCitzdHJ1Y3QgVG9rZW4KK3sKKyAgICBpbnQgICAgIHR5cGU7CisgICAgU3RyaW5n
IHZhbHVlOworICAgIGludCAgICAgaW50VmFsdWU7IC8vMCBpZiBub3Qgc2V0CisgICAgCisgICAg
VG9rZW4oaW50IF90eXBlKTogdHlwZShfdHlwZSksIGludFZhbHVlKDApIHt9CisgICAgVG9rZW4o
aW50IF90eXBlLCBTdHJpbmcgX3ZhbHVlKTogdHlwZShfdHlwZSksIHZhbHVlKF92YWx1ZSkge30K
KyAgICBUb2tlbihpbnQgX3R5cGUsIGludCAgICAgX3ZhbHVlKTogdHlwZShfdHlwZSksIGludFZh
bHVlKF92YWx1ZSkge30KK307CisKK2NsYXNzIFBhcnNlciA6IE5vbmNvcHlhYmxlCit7Citwcml2
YXRlOgorICAgIHN0YXRpYyBQYXJzZXIqIGN1cnJlbnRQYXJzZXI7CisgICAgCisgICAgdW5zaWdu
ZWQgbV9uZXh0UG9zOworICAgIFN0cmluZyBtX2RhdGE7CisgICAgaW50IG1fbGFzdFRva2VuVHlw
ZTsKKyAgICAKKyAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXNUeXBlPiogc19h
eGlzTmFtZXNEaWN0OworICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4qIHNfbm9kZVR5cGVOYW1l
c0RpY3Q7CisgICAgCisgICAgZW51bSBYTUxDYXQgeworICAgICAgICBOYW1lU3RhcnQsCisgICAg
ICAgIE5hbWVDb250LAorICAgICAgICBOb3RQYXJ0T2ZOYW1lCisgICAgfTsKKyAgICAKKyAgICBY
TUxDYXQgY2hhckNhdChRQ2hhciBhQ2hhcik7CisgICAgCisgICAgYm9vbCBpc0F4aXNOYW1lKFN0
cmluZyBuYW1lLCBTdGVwOjpBeGlzVHlwZSAmdHlwZSk7CisgICAgYm9vbCBpc05vZGVUeXBlTmFt
ZShTdHJpbmcgbmFtZSk7CisgICAgYm9vbCBpc09wZXJhdG9yQ29udGV4dCgpOworICAgIAorICAg
IHZvaWQgIHNraXBXUygpOworICAgIFRva2VuIG1ha2VUb2tlbkFuZEFkdmFuY2UoaW50IGNvZGUs
IGludCBhZHZhbmNlID0gMSk7CisgICAgVG9rZW4gbWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQg
Y29kZSwgaW50IHZhbCwgaW50IGFkdmFuY2UgPSAxKTsKKyAgICBjaGFyICBwZWVrQWhlYWRIZWxw
ZXIoKTsKKyAgICBjaGFyICBwZWVrQ3VySGVscGVyKCk7CisgICAgCisgICAgVG9rZW4gbGV4U3Ry
aW5nKCk7CisgICAgVG9rZW4gbGV4TnVtYmVyKCk7CisgICAgVG9rZW4gbGV4TkNOYW1lKCk7Cisg
ICAgVG9rZW4gbGV4UU5hbWUoKTsKKyAgICAKKyAgICBUb2tlbiBuZXh0VG9rZW4oKTsKKyAgICBU
b2tlbiBuZXh0VG9rZW5JbnRlcm5hbCgpOworICAgIAorICAgIHZvaWQgcmVzZXQoY29uc3QgU3Ry
aW5nJiBkYXRhKTsKKyAgICAKKyAgICBIYXNoU2V0PFBhcnNlTm9kZSo+IG1fcGFyc2VOb2RlczsK
KyAgICBIYXNoU2V0PFZlY3RvcjxQcmVkaWNhdGUqPio+IG1fcHJlZGljYXRlVmVjdG9yczsKKyAg
ICBIYXNoU2V0PFZlY3RvcjxFeHByZXNzaW9uKj4qPiBtX2V4cHJlc3Npb25WZWN0b3JzOworICAg
IEhhc2hTZXQ8U3RyaW5nKj4gbV9zdHJpbmdzOworcHVibGljOgorICAgIFBhcnNlcigpOworICAg
IAorICAgIEV4cHJlc3Npb24qIHBhcnNlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzdGF0aWMgUGFyc2VyKiBjdXJyZW50KCkgeyByZXR1
cm4gY3VycmVudFBhcnNlcjsgfQorICAgICAgICAgIAorICAgIGludCBsZXgodm9pZCogX3l5bHZh
bCk7CisKKyAgICBFeHByZXNzaW9uKiBtX3RvcEV4cHI7CisgICAgYm9vbCBtX2dvdE5hbWVzcGFj
ZUVycm9yOworICAgIAorICAgIHZvaWQgcmVnaXN0ZXJQYXJzZU5vZGUoUGFyc2VOb2RlKik7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyUGFyc2VOb2RlKFBhcnNlTm9kZSopOworICAgIAorICAgIHZvaWQg
cmVnaXN0ZXJQcmVkaWNhdGVWZWN0b3IoVmVjdG9yPFByZWRpY2F0ZSo+Kik7CisgICAgdm9pZCB1
bnJlZ2lzdGVyUHJlZGljYXRlVmVjdG9yKFZlY3RvcjxQcmVkaWNhdGUqPiopOworCisgICAgdm9p
ZCByZWdpc3RlckV4cHJlc3Npb25WZWN0b3IoVmVjdG9yPEV4cHJlc3Npb24qPiopOworICAgIHZv
aWQgdW5yZWdpc3RlckV4cHJlc3Npb25WZWN0b3IoVmVjdG9yPEV4cHJlc3Npb24qPiopOworICAg
IAorICAgIHZvaWQgcmVnaXN0ZXJTdHJpbmcoU3RyaW5nKik7CisgICAgdm9pZCB1bnJlZ2lzdGVy
U3RyaW5nKFN0cmluZyopOworfTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQYXRoLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3hwYXRoL2ltcGwvWFBhdGhQYXRoLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAK
Ky8qCisgKiBwYXRoLmggLSBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFhQYXRoUGF0aF9ICisjZGVmaW5lIFhQYXRoUGF0
aF9ICisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0aEV4cHJlc3Npb25Ob2Rl
LmgiCisjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3Iu
aD4KKworZXh0ZXJuIGludCB4cGF0aHl5cGFyc2Uodm9pZCopOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgICAgICAKK2NsYXNzIEZpbHRlciA6IHB1YmxpYyBF
eHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgRmlsdGVyKEV4cHJlc3Npb24qLCBjb25zdCBWZWN0
b3I8UHJlZGljYXRlKj4mID0gVmVjdG9yPFByZWRpY2F0ZSo+KCkpOworICAgIHZpcnR1YWwgfkZp
bHRlcigpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OworCisgICAgRXhwcmVzc2lvbiogbV9leHByOworICAgIFZlY3RvcjxQcmVkaWNhdGUqPiBtX3By
ZWRpY2F0ZXM7Cit9OworCitjbGFzcyBMb2NhdGlvblBhdGggOiBwdWJsaWMgRXhwcmVzc2lvbgor
eworZnJpZW5kIGludCA6OnhwYXRoeXlwYXJzZSh2b2lkKik7CitwdWJsaWM6CisgICAgTG9jYXRp
b25QYXRoKCk7CisgICAgdmlydHVhbCB+TG9jYXRpb25QYXRoKCk7CisKKyAgICB2b2lkIG9wdGlt
aXplKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7
CisKKyAgICBWZWN0b3I8U3RlcCo+IG1fc3RlcHM7CisgICAgYm9vbCBtX2Fic29sdXRlOworfTsK
KworY2xhc3MgUGF0aCA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgUGF0aChG
aWx0ZXIqLCBMb2NhdGlvblBhdGgqKTsKKyAgICB2aXJ0dWFsIH5QYXRoKCk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKyAgICBGaWx0ZXIqIG1f
ZmlsdGVyOworICAgIExvY2F0aW9uUGF0aCogbV9wYXRoOworfTsKKworfQorfQorCisjZW5kaWYg
Ly8gWFBBVEhfU1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhfUGF0aF9ICisKSW5kZXg6IFdlYkNv
cmUveHBhdGgvaW1wbC9wYXJzZWRzdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBXZWJDb3Jl
L3hwYXRoL2ltcGwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS94cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisg
KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oIgor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIFhQYXRoIHsKKyAgICAKK1ZhcmlhYmxlUmVmZXJlbmNlOjpWYXJpYWJsZVJlZmVyZW5j
ZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBtX25hbWUobmFtZSkKK3sKK30KKworYm9vbCBW
YXJpYWJsZVJlZmVyZW5jZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitWYWx1ZSBWYXJpYWJsZVJlZmVyZW5jZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4qIGJpbmRpbmdzID0gJmV2YWx1YXRpb25Db250ZXh0
KCkudmFyaWFibGVCaW5kaW5nczsKKyAgICBpZiAoIWJpbmRpbmdzLT5jb250YWlucyhtX25hbWUp
KQorICAgICAgICAvLyBGSVhNRSBXaGF0IHRvIGRvIGlmIGFuIHVua25vd24gdmFyaWFibGUgaXMg
cmVmZXJlbmNlZD8KKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIGJpbmRpbmdzLT5n
ZXQobV9uYW1lKTsKK30KKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVApJbmRleDog
V2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hw
YXRoL2ltcGwvWFBhdGhQcmVkaWNhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTYgQEAK
Ky8qCisgKiBwcmVkaWNhdGUuaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJl
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhQcmVkaWNhdGVfSAorI2RlZmlu
ZSBYUGF0aFByZWRpY2F0ZV9ICisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0
aEV4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0
aCB7CisgICAgICAgIAorY2xhc3MgTnVtYmVyIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3B1Ymxp
YzoKKyAgICBOdW1iZXIoZG91YmxlIHZhbHVlKTsKKworICAgIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
CisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCitjbGFzcyBTdHJpbmdFeHByZXNzaW9uIDogcHVi
bGljIEV4cHJlc3Npb24KK3sKK3B1YmxpYzoKKyAgICBTdHJpbmdFeHByZXNzaW9uKGNvbnN0IFN0
cmluZyYgdmFsdWUpOworCisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7CisKKyAgICBTdHJpbmcgbV92
YWx1ZTsKK307CisKK2NsYXNzIE5lZ2F0aXZlIDogcHVibGljIEV4cHJlc3Npb24KK3sKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBC
aW5hcnlFeHByQmFzZSA6IHB1YmxpYyBFeHByZXNzaW9uCit7Cit9OworCitjbGFzcyBOdW1lcmlj
T3AgOiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKK3sKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAg
ICAgT1BfQWRkID0gMSwKKyAgICAgICAgT1BfU3ViLAorICAgICAgICBPUF9NdWwsCisgICAgICAg
IE9QX0RpdiwKKyAgICAgICAgT1BfTW9kLAorICAgICAgICBPUF9HVCwKKyAgICAgICAgT1BfTFQs
CisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9MRQorICAgIH07CisKKyAgICBOdW1lcmljT3Ao
aW50IG9wQ29kZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworICAgIGludCBvcENvZGU7
Cit9OworCitjbGFzcyBFcVRlc3RPcCA6IHB1YmxpYyBCaW5hcnlFeHByQmFzZQoreworcHVibGlj
OgorICAgIGVudW0geworICAgICAgICBPUF9FUSA9IDEsCisgICAgICAgIE9QX05FCisgICAgfTsK
KworICAgIEVxVGVzdE9wKGludCBvcENvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVzc2lvbiog
cmhzKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsK
KyAgICBpbnQgb3BDb2RlOworfTsKKworY2xhc3MgTG9naWNhbE9wIDogcHVibGljIEJpbmFyeUV4
cHJCYXNlCit7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE9QX0FuZCA9IDEsCisgICAg
ICAgIE9QX09yCisgICAgfTsKKworICAgIExvZ2ljYWxPcChpbnQgb3BDb2RlLCBFeHByZXNzaW9u
KiBsaHMsIEV4cHJlc3Npb24qIHJocyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgc2hvcnRDaXJjdWl0T24oKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKKyAgICBpbnQgb3BDb2RlOworfTsK
KworY2xhc3MgVW5pb24gOiBwdWJsaWMgQmluYXJ5RXhwckJhc2UKK3sKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBQcmVkaWNhdGUK
K3sKK3B1YmxpYzoKKyAgICBQcmVkaWNhdGUoRXhwcmVzc2lvbiopOworICAgIH5QcmVkaWNhdGUo
KTsKKworICAgIGJvb2wgZXZhbHVhdGUoKSBjb25zdDsKKworICAgIHZvaWQgb3B0aW1pemUoKTsK
KworcHJpdmF0ZToKKyAgICBQcmVkaWNhdGUoY29uc3QgUHJlZGljYXRlICZyaHMpOworICAgIFBy
ZWRpY2F0ZSAmb3BlcmF0b3I9KGNvbnN0IFByZWRpY2F0ZSAmcmhzKTsKKworICAgIEV4cHJlc3Np
b24qIG1fZXhwcjsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKworI2Vu
ZGlmIC8vIFBSRURJQ0FURV9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEV4cHJl
c3Npb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhFeHBy
ZXNzaW9uTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhF
eHByZXNzaW9uTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisKKyNpbmNsdWRlIDxjbWF0aD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAKK0V2YWx1YXRpb25Db250
ZXh0ICZFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpCit7CisgICAgc3RhdGljIEV2YWx1
YXRpb25Db250ZXh0IGV2YWx1YXRpb25Db250ZXh0OworICAgIHJldHVybiBldmFsdWF0aW9uQ29u
dGV4dDsKK30KKworRXhwcmVzc2lvbjo6RXhwcmVzc2lvbigpCisgICAgOiBtX2NvbnN0YW50VmFs
dWUoMCkKK3sKK30KKworRXhwcmVzc2lvbjo6fkV4cHJlc3Npb24oKQoreworICAgIGRlbGV0ZUFs
bFZhbHVlcyhtX3N1YkV4cHJlc3Npb25zKTsKKyAgICAKKyAgICBkZWxldGUgbV9jb25zdGFudFZh
bHVlOworfQorCitWYWx1ZSBFeHByZXNzaW9uOjpldmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgaWYg
KG1fY29uc3RhbnRWYWx1ZSkKKyAgICAgICAgcmV0dXJuICptX2NvbnN0YW50VmFsdWU7CisKKyAg
ICByZXR1cm4gZG9FdmFsdWF0ZSgpOworfQorCit2b2lkIEV4cHJlc3Npb246OmFkZFN1YkV4cHJl
c3Npb24oRXhwcmVzc2lvbiogZXhwcikKK3sKKyAgICBtX3N1YkV4cHJlc3Npb25zLmFwcGVuZChl
eHByKTsKK30KKwordm9pZCBFeHByZXNzaW9uOjpvcHRpbWl6ZSgpCit7CisgICAgYm9vbCBhbGxT
dWJFeHByZXNzaW9uc0NvbnN0YW50ID0gdHJ1ZTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zdWJFeHByZXNzaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9z
dWJFeHByZXNzaW9uc1tpXS0+aXNDb25zdGFudCgpKQorICAgICAgICAgICAgbV9zdWJFeHByZXNz
aW9uc1tpXS0+b3B0aW1pemUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWxsU3ViRXhw
cmVzc2lvbnNDb25zdGFudCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChhbGxTdWJFeHByZXNz
aW9uc0NvbnN0YW50KSB7CisgICAgICAgIEFTU0VSVCAoIW1fY29uc3RhbnRWYWx1ZSk7CisgICAg
ICAgIG1fY29uc3RhbnRWYWx1ZSA9IG5ldyBWYWx1ZShkb0V2YWx1YXRlKCkpOworICAgICAgICBk
ZWxldGVBbGxWYWx1ZXMobV9zdWJFeHByZXNzaW9ucyk7CisgICAgICAgIG1fc3ViRXhwcmVzc2lv
bnMuY2xlYXIoKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBFeHByZXNzaW9uOjpzdWJFeHBy
Q291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1YkV4cHJlc3Npb25zLnNpemUoKTsKK30K
KworRXhwcmVzc2lvbiogRXhwcmVzc2lvbjo6c3ViRXhwcih1bnNpZ25lZCBpKQoreworICAgIEFT
U0VSVChpIDwgc3ViRXhwckNvdW50KCkpOworCisgICAgcmV0dXJuIG1fc3ViRXhwcmVzc2lvbnNb
aV07Cit9CisKK2NvbnN0IEV4cHJlc3Npb24qIEV4cHJlc3Npb246OnN1YkV4cHIodW5zaWduZWQg
aSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaSA8IHN1YkV4cHJDb3VudCgpKTsKKyAgICAKKyAgICBy
ZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKK30KKworYm9vbCBFeHByZXNzaW9uOjppc0NvbnN0
YW50KCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdWJFeHByZXNz
aW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fc3ViRXhwcmVzc2lvbnNbaV0tPmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCkluZGV4OiBX
ZWJDb3JlL3hwYXRoL2ltcGwvZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogV2ViQ29yZS94
cGF0aC9pbXBsL1hQYXRoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRo
L2ltcGwvWFBhdGhGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9p
bXBsL1hQYXRoRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQg
QU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisg
KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNs
dWRlICJYUGF0aEZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik5hbWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgPG1hdGguaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCisjZGVm
aW5lIERFRklORV9GVU5DVElPTl9DUkVBVE9SKENsYXNzKSBcCitzdGF0aWMgRnVuY3Rpb24gKmNy
ZWF0ZSMjQ2xhc3MoKSB7IHJldHVybiBuZXcgQ2xhc3M7IH0KKworY2xhc3MgSW50ZXJ2YWwKK3sK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgaW50IEluZiA9LTE7CisKKyAgICBJbnRlcnZhbCgp
OworICAgIEludGVydmFsKGludCB2YWx1ZSk7CisgICAgSW50ZXJ2YWwoaW50IG1pbiwgaW50IG1h
eCk7CisKKyAgICBib29sIGNvbnRhaW5zKGludCB2YWx1ZSkgY29uc3Q7CisKKyAgICBTdHJpbmcg
YXNTdHJpbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9taW47CisgICAgaW50IG1f
bWF4OworfTsKKworY2xhc3MgRnVuTGFzdCA6IHB1YmxpYyBGdW5jdGlvbgoreworcHVibGljOgor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Qb3NpdGlvbiA6
IHB1YmxpYyBGdW5jdGlvbgoreworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29u
c3Q7Cit9OworCitjbGFzcyBGdW5Db3VudCA6IHB1YmxpYyBGdW5jdGlvbgoreworcHVibGljOgor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5Mb2NhbE5hbWUg
OiBwdWJsaWMgRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFu
dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNv
bnN0OworfTsKKworY2xhc3MgRnVuTmFtZXNwYWNlVVJJIDogcHVibGljIEZ1bmN0aW9uCit7Citw
dWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bk5h
bWUgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25z
dGFudCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgp
IGNvbnN0OworfTsKKworY2xhc3MgRnVuU3RyaW5nIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2
YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3Mg
RnVuQ29uY2F0IDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFs
dWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3RhcnRzV2l0aCA6IHB1Ymxp
YyBGdW5jdGlvbgoreworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBj
b25zdDsKK307CisKK2NsYXNzIEZ1bkNvbnRhaW5zIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2
YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3Mg
RnVuU3Vic3RyaW5nQmVmb3JlIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZp
cnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3Vic3RyaW5n
QWZ0ZXIgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBk
b0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5TdWJzdHJpbmcgOiBwdWJsaWMgRnVu
Y3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7
Cit9OworCitjbGFzcyBGdW5TdHJpbmdMZW5ndGggOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBG
dW5Ob3JtYWxpemVTcGFjZSA6IHB1YmxpYyBGdW5jdGlvbgoreworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1blRyYW5zbGF0ZSA6
IHB1YmxpYyBGdW5jdGlvbgoreworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVh
dGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkJvb2xlYW4gOiBwdWJsaWMgRnVuY3Rpb24KK3sK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitj
bGFzcyBGdW5Ob3QgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBW
YWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5UcnVlIDogcHVibGljIEZ1
bmN0aW9uCit7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisK
K2NsYXNzIEZ1bkZhbHNlIDogcHVibGljIEZ1bmN0aW9uCit7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVl
IGRvRXZhbHVhdGUoKSBjb25zdDsKK307CisKK2NsYXNzIEZ1bkxhbmcgOiBwdWJsaWMgRnVuY3Rp
b24KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xh
c3MgRnVuTnVtYmVyIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwg
VmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuU3VtIDogcHVibGljIEZ1
bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0
OworfTsKKworY2xhc3MgRnVuRmxvb3IgOiBwdWJsaWMgRnVuY3Rpb24KK3sKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9OworCitjbGFzcyBGdW5DZWls
aW5nIDogcHVibGljIEZ1bmN0aW9uCit7Citwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9F
dmFsdWF0ZSgpIGNvbnN0OworfTsKKworY2xhc3MgRnVuUm91bmQgOiBwdWJsaWMgRnVuY3Rpb24K
K3sKK3ByaXZhdGU6CisgICAgdmlydHVhbCBWYWx1ZSBkb0V2YWx1YXRlKCkgY29uc3Q7Cit9Owor
CitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5MYXN0KQorREVGSU5FX0ZVTkNUSU9OX0NSRUFU
T1IoRnVuUG9zaXRpb24pCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Db3VudCkKK0RFRklO
RV9GVU5DVElPTl9DUkVBVE9SKEZ1bkxvY2FsTmFtZSkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KEZ1bk5hbWVzcGFjZVVSSSkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bk5hbWUpCisKK0RF
RklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN0cmluZykKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KEZ1bkNvbmNhdCkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN0YXJ0c1dpdGgpCitERUZJ
TkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5Db250YWlucykKK0RFRklORV9GVU5DVElPTl9DUkVBVE9S
KEZ1blN1YnN0cmluZ0JlZm9yZSkKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1blN1YnN0cmlu
Z0FmdGVyKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1IoRnVuU3Vic3RyaW5nKQorREVGSU5FX0ZV
TkNUSU9OX0NSRUFUT1IoRnVuU3RyaW5nTGVuZ3RoKQorREVGSU5FX0ZVTkNUSU9OX0NSRUFUT1Io
RnVuTm9ybWFsaXplU3BhY2UpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5UcmFuc2xhdGUp
CisKK0RFRklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkJvb2xlYW4pCitERUZJTkVfRlVOQ1RJT05f
Q1JFQVRPUihGdW5Ob3QpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5UcnVlKQorREVGSU5F
X0ZVTkNUSU9OX0NSRUFUT1IoRnVuRmFsc2UpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5M
YW5nKQorCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5OdW1iZXIpCitERUZJTkVfRlVOQ1RJ
T05fQ1JFQVRPUihGdW5TdW0pCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRPUihGdW5GbG9vcikKK0RF
RklORV9GVU5DVElPTl9DUkVBVE9SKEZ1bkNlaWxpbmcpCitERUZJTkVfRlVOQ1RJT05fQ1JFQVRP
UihGdW5Sb3VuZCkKKworI3VuZGVmIERFRklORV9GVU5DVElPTl9DUkVBVE9SCisKK0ludGVydmFs
OjpJbnRlcnZhbCgpCisgICAgOiBtX21pbihJbmYpLAorICAgIG1fbWF4KEluZikKK3sKK30KKwor
SW50ZXJ2YWw6OkludGVydmFsKGludCB2YWx1ZSkKKyAgICA6IG1fbWluKHZhbHVlKSwKKyAgICBt
X21heCh2YWx1ZSkKK3sKK30KKworSW50ZXJ2YWw6OkludGVydmFsKGludCBtaW4sIGludCBtYXgp
CisgICAgOiBtX21pbihtaW4pLAorICAgIG1fbWF4KG1heCkKK3sKK30KKworYm9vbCBJbnRlcnZh
bDo6Y29udGFpbnMoaW50IHZhbHVlKSBjb25zdAoreworICAgIGlmIChtX21pbiA9PSBJbmYgJiYg
bV9tYXggPT0gSW5mKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX21pbiA9PSBJ
bmYpCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBtX21heDsKKworICAgIGlmIChtX21heCA9PSBJ
bmYpCisgICAgICAgIHJldHVybiB2YWx1ZSA+PSBtX21pbjsKKworICAgIHJldHVybiB2YWx1ZSA+
PSBtX21pbiAmJiB2YWx1ZSA8PSBtX21heDsKK30KKworU3RyaW5nIEludGVydmFsOjphc1N0cmlu
ZygpIGNvbnN0Cit7CisgICAgU3RyaW5nIHMgPSAiWyI7CisKKyAgICBpZiAobV9taW4gPT0gSW5m
KQorICAgICAgICBzICs9ICItSW5maW5pdHkiOworICAgIGVsc2UKKyAgICAgICAgcyArPSBEZXBy
ZWNhdGVkU3RyaW5nOjpudW1iZXIobV9taW4pOworCisgICAgcyArPSAiLi4iOworCisgICAgaWYg
KG1fbWF4ID09IEluZikKKyAgICAgICAgcyArPSAiSW5maW5pdHkiOworICAgIGVsc2UKKyAgICAg
ICAgcyArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9tYXgpOworCisgICAgcyArPSAiXSI7
CisKKyAgICByZXR1cm4gczsKK30KKwordm9pZCBGdW5jdGlvbjo6c2V0QXJndW1lbnRzKGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uKj4mIGFyZ3MpCit7CisgICAgVmVjdG9yPEV4cHJlc3Npb24qPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKKworICAgIGZvciAoVmVjdG9yPEV4cHJl
c3Npb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgaXQr
KykKKyAgICAgICAgYWRkU3ViRXhwcmVzc2lvbigqaXQpOworfQorCit2b2lkIEZ1bmN0aW9uOjpz
ZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX25hbWUgPSBuYW1lOworfQorCitF
eHByZXNzaW9uKiBGdW5jdGlvbjo6YXJnKGludCBpKQoreworICAgIHJldHVybiBzdWJFeHByKGkp
OworfQorCitjb25zdCBFeHByZXNzaW9uKiBGdW5jdGlvbjo6YXJnKGludCBpKSBjb25zdAorewor
ICAgIHJldHVybiBzdWJFeHByKGkpOworfQorCit1bnNpZ25lZCBpbnQgRnVuY3Rpb246OmFyZ0Nv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViRXhwckNvdW50KCk7Cit9CisKK1N0cmluZyBG
dW5jdGlvbjo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmFtZTsKK30KKworVmFsdWUg
RnVuTGFzdDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvdWJsZShFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnNpemUpOworfQorCitib29sIEZ1bkxhc3Q6OmlzQ29u
c3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVuUG9zaXRp
b246OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBkb3VibGUoRXhwcmVzc2lvbjo6
ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbik7Cit9CisKK2Jvb2wgRnVuUG9zaXRpb246Omlz
Q29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGdW5Mb2Nh
bE5hbWU6OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFs
dWUgRnVuTG9jYWxOYW1lOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0g
MDsKKyAgICBpZiAoYXJnQ291bnQoKSA+IDApIHsKKyAgICAgICAgVmFsdWUgYSA9IGFyZygwKS0+
ZXZhbHVhdGUoKTsKKyAgICAgICAgaWYgKCFhLmlzTm9kZVZlY3RvcigpIHx8IGEudG9Ob2RlVmVj
dG9yKCkuc2l6ZSgpID09IDApCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIAorICAg
ICAgICBub2RlID0gYS50b05vZGVWZWN0b3IoKVswXS5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CisK
KyAgICByZXR1cm4gVmFsdWUobm9kZS0+bG9jYWxOYW1lKCkpOworfQorCitib29sIEZ1bk5hbWVz
cGFjZVVSSTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitW
YWx1ZSBGdW5OYW1lc3BhY2VVUkk6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIE5vZGUqIG5v
ZGUgPSAwOworICAgIGlmIChhcmdDb3VudCgpID4gMCkgeworICAgICAgICBWYWx1ZSBhID0gYXJn
KDApLT5ldmFsdWF0ZSgpOworICAgICAgICBpZiAoIWEuaXNOb2RlVmVjdG9yKCkgfHwgYS50b05v
ZGVWZWN0b3IoKS5zaXplKCkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAiIjsKKworICAgICAg
ICBub2RlID0gYS50b05vZGVWZWN0b3IoKVswXS5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAoIW5v
ZGUpCisgICAgICAgIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CisKKyAg
ICByZXR1cm4gVmFsdWUobm9kZS0+bmFtZXNwYWNlVVJJKCkpOworfQorCitib29sIEZ1bk5hbWU6
OmlzQ29uc3RhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmFsdWUgRnVu
TmFtZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IDA7CisgICAgaWYg
KGFyZ0NvdW50KCkgPiAwKSB7CisgICAgICAgIFZhbHVlIGEgPSBhcmcoMCktPmV2YWx1YXRlKCk7
CisgICAgICAgIGlmICghYS5pc05vZGVWZWN0b3IoKSB8fCBhLnRvTm9kZVZlY3RvcigpLnNpemUo
KSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAgIG5vZGUgPSBhLnRvTm9k
ZVZlY3RvcigpWzBdLmdldCgpOworICAgIH0KKworICAgIGlmICghbm9kZSkKKyAgICAgICAgbm9k
ZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKKworICAgIHJldHVybiBub2RlLT5w
cmVmaXgoKSArICI6IiArIG5vZGUtPmxvY2FsTmFtZSgpOworfQorCitWYWx1ZSBGdW5Db3VudDo6
ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZhbHVhdGUoKTsK
KyAgICAKKyAgICBpZiAoIWEuaXNOb2RlVmVjdG9yKCkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAi
Y291bnQoKSBleHBlY3RzIDxub2RldmVjdG9yPiIpOworCisgICAgICAgIHJldHVybiAwLjA7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBkb3VibGUoYS50b05vZGVWZWN0b3IoKS5zaXplKCkpOwor
fQorCitib29sIEZ1bkNvdW50Ojppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1ZhbHVlIEZ1blN0cmluZzo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgaWYg
KGFyZ0NvdW50KCkgPT0gMCkgeworICAgICAgICBTdHJpbmcgcyA9IFZhbHVlKEV4cHJlc3Npb246
OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSkudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHM7
CisgICAgfQorICAgIHJldHVybiBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKK30KKwor
VmFsdWUgRnVuQ29uY2F0Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc3RyOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCisgICAg
ICAgIHN0ciArPSBhcmcoaSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIHJldHVybiBz
dHI7Cit9CisKK1ZhbHVlIEZ1blN0YXJ0c1dpdGg6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAg
IFN0cmluZyBzMSA9IGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworICAgIFN0cmluZyBz
MiA9IGFyZygxKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpOworCisgICAgaWYgKHMyLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gczEuc3RhcnRzV2l0aChzMik7
Cit9CisKK1ZhbHVlIEZ1bkNvbnRhaW5zOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBTdHJp
bmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgczIgPSBh
cmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIGlmIChzMi5pc0VtcHR5KCkpIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBzMS5jb250YWlucyhzMikgIT0gMDsK
K30KKworVmFsdWUgRnVuU3Vic3RyaW5nQmVmb3JlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAg
ICBTdHJpbmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcg
czIgPSBhcmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIGlmIChzMi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGludCBpID0gczEuZmluZChzMik7CisKKyAg
ICBpZiAoaSA9PSAtMSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHMxLmxlZnQo
aSk7Cit9CisKK1ZhbHVlIEZ1blN1YnN0cmluZ0FmdGVyOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sK
KyAgICBTdHJpbmcgczEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBTdHJp
bmcgczIgPSBhcmcoMSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKKworICAgIGlmIChzMi5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBzMjsKKworICAgIGludCBpID0gczEuZmluZChzMik7Cisg
ICAgaWYgKGkgPT0gLTEpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIHJldHVybiBWYWx1ZShz
MS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKGkgKyAxKSk7Cit9CisKK1ZhbHVlIEZ1blN1YnN0cmlu
Zzo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIHMgPSBhcmcoMCktPmV2YWx1YXRl
KCkudG9TdHJpbmcoKTsKKyAgICBsb25nIHBvcyA9IGxvbmcocm91bmQoYXJnKDEpLT5ldmFsdWF0
ZSgpLnRvTnVtYmVyKCkpKTsKKyAgICBib29sIGhhdmVMZW5ndGggPSBhcmdDb3VudCgpID09IDM7
CisgICAgbG9uZyBsZW4gPSAtMTsKKyAgICBpZiAoaGF2ZUxlbmd0aCkKKyAgICAgICAgbGVuID0g
bG9uZyhyb3VuZChhcmcoMiktPmV2YWx1YXRlKCkudG9OdW1iZXIoKSkpOworCisgICAgaWYgKHBv
cyA+IGxvbmcocy5sZW5ndGgoKSkpIAorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBpZiAoaGF2
ZUxlbmd0aCAmJiBwb3MgPCAxKSB7CisgICAgICAgIGxlbiAtPSAxIC0gcG9zOworICAgICAgICBw
b3MgPSAxOworICAgICAgICBpZiAobGVuIDwgMSkKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9CisKKyAgICByZXR1cm4gVmFsdWUocy5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHBvcyAtIDEs
IGxlbikpOworfQorCitWYWx1ZSBGdW5TdHJpbmdMZW5ndGg6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIGlmIChhcmdDb3VudCgpID09IDApIHsKKyAgICAgICAgU3RyaW5nIHMgPSBWYWx1ZShF
eHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUpLnRvU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBkb3VibGUocy5sZW5ndGgoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRvdWJsZShh
cmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKS5sZW5ndGgoKSk7Cit9CisKK1ZhbHVlIEZ1bk5v
cm1hbGl6ZVNwYWNlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBpZiAoYXJnQ291bnQoKSA9
PSAwKSB7CisgICAgICAgIFN0cmluZyBzID0gVmFsdWUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNv
bnRleHQoKS5ub2RlKS50b1N0cmluZygpOworICAgICAgICByZXR1cm4gVmFsdWUocy5kZXByZWNh
dGVkU3RyaW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCkpOworICAgIH0KKworICAgIFN0cmluZyBz
ID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIFZhbHVlKHMuZGVw
cmVjYXRlZFN0cmluZygpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpKTsKK30KKworVmFsdWUgRnVuVHJh
bnNsYXRlOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgczEgPSBhcmcoMCktPmV2
YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgczIgPSBhcmcoMSktPmV2YWx1YXRlKCku
dG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgczMgPSBhcmcoMiktPmV2YWx1YXRlKCkudG9TdHJpbmco
KTsKKyAgICBTdHJpbmcgbmV3U3RyaW5nOworCisgICAgZm9yICh1bnNpZ25lZCBpMSA9IDA7IGkx
IDwgczEubGVuZ3RoKCk7ICsraTEpIHsKKyAgICAgICAgUUNoYXIgY2ggPSBzMVtpMV07CisgICAg
ICAgIGludCBpMiA9IHMyLmZpbmQoY2gpOworICAgICAgICAKKyAgICAgICAgaWYgKGkyID09IC0x
KSAKKyAgICAgICAgICAgIG5ld1N0cmluZyArPSBjaDsKKyAgICAgICAgZWxzZSBpZiAoKHVuc2ln
bmVkKWkyIDwgczMubGVuZ3RoKCkpCisgICAgICAgICAgICBuZXdTdHJpbmcgKz0gczNbIGkyIF07
CisgICAgfQorCisgICAgcmV0dXJuIG5ld1N0cmluZzsKK30KKworVmFsdWUgRnVuQm9vbGVhbjo6
ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZygwKS0+ZXZhbHVhdGUoKS50b0Jv
b2xlYW4oKTsKK30KKworVmFsdWUgRnVuTm90Ojpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIWFyZygwKS0+ZXZhbHVhdGUoKS50b0Jvb2xlYW4oKTsKK30KKworVmFsdWUgRnVuVHJ1
ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnVu
VHJ1ZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVl
IEZ1bkxhbmc6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFN0cmluZyBsYW5nID0gYXJnKDAp
LT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbGFuZ05vZGUgPSAw
OworICAgIE5vZGUqIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CisKKyAg
ICBTdHJpbmcgeG1zKCJ4bXMiKTsKKyAgICBTdHJpbmcgeG1zbnNVUkkgPSBub2RlLT5sb29rdXBO
YW1lc3BhY2VVUkkoeG1zKTsKKworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIE5hbWVkQXR0
ck1hcCAqYXR0cnMgPSBub2RlLT5hdHRyaWJ1dGVzKCk7CisgICAgICAgIFN0cmluZyBsKCJsYW5n
Iik7CisgICAgICAgIGxhbmdOb2RlID0gYXR0cnMtPmdldE5hbWVkSXRlbU5TKHhtc25zVVJJLCBs
KTsKKyAgICAgICAgaWYgKGxhbmdOb2RlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICB9CisKKyAgICBpZiAoIWxhbmdOb2RlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgbGFuZ05vZGVWYWx1ZSA9IGxhbmdO
b2RlLT5ub2RlVmFsdWUoKTsKKworICAgIC8vIGV4dHJhY3QgJ2VuJyBvdXQgb2YgJ2VuLXVzJwor
ICAgIGludCBpbmRleCA9IGxhbmdOb2RlVmFsdWUuZmluZCgnLScpOworICAgIGlmIChpbmRleCAh
PSAtMSkKKyAgICAgICAgbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlVmFsdWUubGVmdChpbmRleCk7
CisgICAgCisgICAgcmV0dXJuIGxhbmdOb2RlVmFsdWUubG93ZXIoKSA9PSBsYW5nLmxvd2VyKCk7
Cit9CisKK2Jvb2wgRnVuTGFuZzo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitWYWx1ZSBGdW5GYWxzZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEZ1bkZhbHNlOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworVmFsdWUgRnVuTnVtYmVyOjpkb0V2YWx1YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXJnKDApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCk7Cit9CisKK1ZhbHVl
IEZ1blN1bTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgYSA9IGFyZygwKS0+ZXZh
bHVhdGUoKTsKKyAgICBpZiAoIWEuaXNOb2RlVmVjdG9yKCkpIHsKKyAgICAgICAgTE9HKFhQYXRo
LCAic3VtKCkgZXhwZWN0cyA8bm9kZXZlY3Rvcj4iKTsKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAg
ICB9CisKKyAgICBkb3VibGUgc3VtID0gMC4wOworICAgIE5vZGVWZWN0b3Igbm9kZXMgPSBhLnRv
Tm9kZVZlY3RvcigpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5z
aXplKCk7IGkrKykKKyAgICAgICAgc3VtICs9IFZhbHVlKHN0cmluZ1ZhbHVlKG5vZGVzW2ldLmdl
dCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpLnRvTnVtYmVyKCk7CisgICAgCisgICAgcmV0dXJuIHN1
bTsKK30KKworVmFsdWUgRnVuRmxvb3I6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIGRvdWJs
ZSBudW0gPSBhcmcoMCktPmV2YWx1YXRlKCkudG9OdW1iZXIoKTsKKworICAgIHJldHVybiBmbG9v
cihudW0pOworfQorCitWYWx1ZSBGdW5DZWlsaW5nOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAg
ICBkb3VibGUgbnVtID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvTnVtYmVyKCk7CisKKyAgICByZXR1
cm4gY2VpbChudW0pOworfQorCitWYWx1ZSBGdW5Sb3VuZDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHJvdW5kKGFyZygwKS0+ZXZhbHVhdGUoKS50b051bWJlcigpKTsKK30KKwor
c3RydWN0IEZ1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMKK3sKKyAgICB0eXBlZGVmIEZ1bmN0
aW9uICooKkZhY3RvcnlGbikoKTsKKworICAgIEZhY3RvcnlGbiBmYWN0b3J5Rm47CisgICAgSW50
ZXJ2YWwgYXJnczsKK307CisKK3N0cnVjdCBGdW5jdGlvbk1hcHBpbmcKK3sKKyAgICBjb25zdCBj
aGFyICpuYW1lOworICAgIEZ1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25SZWMgZnVuY3Rpb247Cit9
OworCitGdW5jdGlvbkxpYnJhcnkmIEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpCit7CisgICAgc3Rh
dGljIEZ1bmN0aW9uTGlicmFyeSBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisK
K0Z1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25MaWJyYXJ5KCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
RnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9uc1tdID0geworICAgIHsgImxhc3QiLCB7ICZjcmVhdGVG
dW5MYXN0LCAwIH0gfSwKKyAgICB7ICJsYXN0IiwgeyAmY3JlYXRlRnVuTGFzdCwgMCB9IH0sCisg
ICAgeyAicG9zaXRpb24iLCB7ICZjcmVhdGVGdW5Qb3NpdGlvbiwgMCB9IH0sCisgICAgeyAiY291
bnQiLCB7ICZjcmVhdGVGdW5Db3VudCwgMSB9IH0sCisgICAgeyAic3VtIiwgeyAmY3JlYXRlRnVu
U3VtLCAxIH0gfSwKKyAgICB7ICJsb2NhbC1uYW1lIiwgeyAmY3JlYXRlRnVuTG9jYWxOYW1lLCBJ
bnRlcnZhbCgwLCAxKSB9IH0sCisgICAgeyAibmFtZXNwYWNlLXVyaSIsIHsgJmNyZWF0ZUZ1bk5h
bWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgIHsgIm5hbWUiLCB7ICZjcmVhdGVG
dW5OYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisgICAgeyAic3RyaW5nIiwgeyAmY3JlYXRlRnVu
U3RyaW5nLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisgICAgeyAiY29uY2F0IiwgeyAmY3JlYXRlRnVu
Q29uY2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAgeyAic3RhcnRzLXdp
dGgiLCB7ICZjcmVhdGVGdW5TdGFydHNXaXRoLCAyIH0gfSwKKyAgICB7ICJjb250YWlucyIsIHsg
JmNyZWF0ZUZ1bkNvbnRhaW5zLCAyIH0gfSwKKyAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyAm
Y3JlYXRlRnVuU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAgICB7ICJzdWJzdHJpbmctYWZ0ZXIi
LCB7ICZjcmVhdGVGdW5TdWJzdHJpbmdBZnRlciwgMiB9IH0sCisgICAgeyAic3Vic3RyaW5nIiwg
eyAmY3JlYXRlRnVuU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9IH0sCisgICAgeyAic3RyaW5n
LWxlbmd0aCIsIHsgJmNyZWF0ZUZ1blN0cmluZ0xlbmd0aCwgMSB9IH0sCisgICAgeyAibm9ybWFs
aXplLXNwYWNlIiwgeyAmY3JlYXRlRnVuTm9ybWFsaXplU3BhY2UsIDEgfSB9LAorICAgIHsgInRy
YW5zbGF0ZSIsIHsgJmNyZWF0ZUZ1blRyYW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIAorICAgIHsg
ImJvb2xlYW4iLCB7ICZjcmVhdGVGdW5Cb29sZWFuLCAxIH0gfSwKKyAgICB7ICJub3QiLCB7ICZj
cmVhdGVGdW5Ob3QsIDEgfSB9LAorICAgIHsgInRydWUiLCB7ICZjcmVhdGVGdW5UcnVlLCAwIH0g
fSwKKyAgICB7ICJmYWxzZSIsIHsgJmNyZWF0ZUZ1bkZhbHNlLCAwIH0gfSwKKyAgICB7ICJsYW5n
IiwgeyAmY3JlYXRlRnVuTGFuZywgMSB9IH0sCisgICAgICAgIAorICAgIHsgIm51bWJlciIsIHsg
JmNyZWF0ZUZ1bk51bWJlciwgMSB9IH0sCisgICAgeyAiZmxvb3IiLCB7ICZjcmVhdGVGdW5GbG9v
ciwgMSB9IH0sCisgICAgeyAiY2VpbGluZyIsIHsgJmNyZWF0ZUZ1bkNlaWxpbmcsIDEgfSB9LAor
ICAgIHsgInJvdW5kIiwgeyAmY3JlYXRlRnVuUm91bmQsIDEgfSB9CisgICAgfTsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgbnVtRnVuY3Rpb25zID0gc2l6ZW9mKGZ1bmN0aW9ucykgLyBzaXplb2Yo
ZnVuY3Rpb25zWyAwIF0pOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtRnVuY3Rpb25zOyArK2kpCisgICAgICAgIG1fZnVuY3Rpb25EaWN0LnNldChmdW5jdGlvbnNb
aV0ubmFtZSwgZnVuY3Rpb25zW2ldLmZ1bmN0aW9uKTsKK30KKworRnVuY3Rpb24gKkZ1bmN0aW9u
TGlicmFyeTo6Y3JlYXRlRnVuY3Rpb24oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgVmVjdG9yPEV4
cHJlc3Npb24qPiAmYXJncykgY29uc3QKK3sKKyAgICBpZiAoIW1fZnVuY3Rpb25EaWN0LmNvbnRh
aW5zKG5hbWUpKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkZ1bmN0aW9uICclcycgbm90IHN1cHBv
cnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIsIG5hbWUpOworICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJuIGEgZHVtbXkgZnVuY3Rpb24gaW5zdGVhZCBvZiAwLgorICAgICAgICBGdW5jdGlv
biAqZnVuY1RydWUgPSBtX2Z1bmN0aW9uRGljdC5nZXQoInRydWUiKS5mYWN0b3J5Rm4oKTsKKyAg
ICAgICAgZnVuY1RydWUtPnNldE5hbWUoInRydWUiKTsKKyAgICAgICAgcmV0dXJuIGZ1bmNUcnVl
OworICAgIH0KKworICAgIEZ1bmN0aW9uUmVjIGZ1bmN0aW9uUmVjID0gbV9mdW5jdGlvbkRpY3Qu
Z2V0KG5hbWUpOworICAgIGlmICghZnVuY3Rpb25SZWMuYXJncy5jb250YWlucyhhcmdzLnNpemUo
KSkpIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiRnVuY3Rpb24gJyVzJyByZXF1aXJlcyAlZCBhcmd1
bWVudHMsIGJ1dCAlZCBnaXZlbi4iLCBuYW1lLCBmdW5jdGlvblJlYy5hcmdzLmFzU3RyaW5nKCku
YXNjaWkoKSwgYXJncy5zaXplKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBG
dW5jdGlvbiAqZnVuY3Rpb24gPSBmdW5jdGlvblJlYy5mYWN0b3J5Rm4oKTsKKyAgICBmdW5jdGlv
bi0+c2V0QXJndW1lbnRzKGFyZ3MpOworICAgIGZ1bmN0aW9uLT5zZXROYW1lKG5hbWUpOworICAg
IAorICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQ
UE9SVApJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBX
ZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhTdGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0
aC9pbXBsL1hQYXRoU3RlcC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQ
YXRoU3RlcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogc3RlcC5oIC0g
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBYUGF0aFN0ZXBfSAorI2RlZmluZSBYUGF0aFN0ZXBfSAorCisjaWYgWFBBVEhf
U1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhQcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJYUGF0aFV0
aWwuaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIFhQYXRoIHsKKyAgICAgICAgCitjbGFzcyBTdGVwIDogcHVibGljIFBhcnNlTm9kZQorewor
cHVibGljOgorICAgIGVudW0gQXhpc1R5cGUgeworICAgICAgICBBbmNlc3RvckF4aXM9MSwgQW5j
ZXN0b3JPclNlbGZBeGlzLCBBdHRyaWJ1dGVBeGlzLAorICAgICAgICBDaGlsZEF4aXMsIERlc2Nl
bmRhbnRBeGlzLCBEZXNjZW5kYW50T3JTZWxmQXhpcywKKyAgICAgICAgRm9sbG93aW5nQXhpcywg
Rm9sbG93aW5nU2libGluZ0F4aXMsIE5hbWVzcGFjZUF4aXMsCisgICAgICAgIFBhcmVudEF4aXMs
IFByZWNlZGluZ0F4aXMsIFByZWNlZGluZ1NpYmxpbmdBeGlzLAorICAgICAgICBTZWxmQXhpcwor
ICAgIH07CisKKyAgICBzdGF0aWMgU3RyaW5nIGF4aXNBc1N0cmluZyhBeGlzVHlwZSBheGlzKTsK
KworICAgIFN0ZXAoKTsKKyAgICBTdGVwKEF4aXNUeXBlIGF4aXMsIGNvbnN0IFN0cmluZyYgbm9k
ZVRlc3QsIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiAmcHJlZGljYXRlcyA9IFZlY3RvcjxQcmVk
aWNhdGUqPigpKTsKKyAgICB+U3RlcCgpOworCisgICAgTm9kZVZlY3RvciBldmFsdWF0ZShOb2Rl
KiBjb250ZXh0KSBjb25zdDsKKworICAgIHZvaWQgb3B0aW1pemUoKTsKKworcHJpdmF0ZToKKyAg
ICBOb2RlVmVjdG9yIG5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQpIGNvbnN0OworICAgIE5vZGVW
ZWN0b3Igbm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVWZWN0b3ImIG5vZGVzKSBjb25zdDsKKyAg
ICBTdHJpbmcgbmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0cmluZyYgbm9kZVRlc3QpIGNv
bnN0OworICAgIE5vZGU6Ok5vZGVUeXBlIHByaW1hcnlOb2RlVHlwZShBeGlzVHlwZSBheGlzKSBj
b25zdDsKKworICAgIEF4aXNUeXBlIG1fYXhpczsKKyAgICBTdHJpbmcgbV9ub2RlVGVzdDsKKyAg
ICBWZWN0b3I8UHJlZGljYXRlKj4gbV9wcmVkaWNhdGVzOworfTsKKworfQorfQorCisjZW5kaWYg
Ly8gWFBBVEhfU1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhfU3RlcF9ICisKSW5kZXg6IFdlYkNv
cmUveHBhdGgvaW1wbC9YUGF0aFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9p
bXBsL1hQYXRoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0
aFZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiB1dGlsLmggLSBD
b3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJhYWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIFhQYXRoVmFsdWVfSAorI2RlZmluZSBYUGF0aFZhbHVlX0gKKworI2lmIFhQQVRI
X1NVUFBPUlQKKworI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgWFBhdGggeworICAgIAorY2xhc3MgVmFsdWUKK3sKK3B1YmxpYzoKKyAgICBl
bnVtIFR5cGUgeworICAgICAgICBOb2RlVmVjdG9yXywgQm9vbGVhbiwgTnVtYmVyLCBTdHJpbmdf
CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZSgpOworICAgIFZhbHVlKE5vZGUqIHZhbHVlKTsKKyAg
ICBWYWx1ZShjb25zdCBOb2RlVmVjdG9yJiB2YWx1ZSk7CisgICAgVmFsdWUoYm9vbCB2YWx1ZSk7
CisgICAgVmFsdWUoZG91YmxlIHZhbHVlKTsKKyAgICBWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKyAgICAKKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBib29sIGlzTm9kZVZlY3Rvcigp
IGNvbnN0OworICAgIGJvb2wgaXNCb29sZWFuKCkgY29uc3Q7CisgICAgYm9vbCBpc051bWJlcigp
IGNvbnN0OworICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKyAgICAKKyAgICBOb2RlVmVjdG9y
JiB0b05vZGVWZWN0b3IoKTsKKyAgICBjb25zdCBOb2RlVmVjdG9yJiB0b05vZGVWZWN0b3IoKSBj
b25zdDsKKyAgICAKKyAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OworICAgIGRvdWJsZSB0b051
bWJlcigpIGNvbnN0OworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBOb2RlVmVjdG9yIG1fbm9kZXZlY3RvcjsKKyAgICBi
b29sIG1fYm9vbDsKKyAgICBkb3VibGUgbV9udW1iZXI7CisgICAgU3RyaW5nIG1fc3RyaW5nOwor
fTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAorCisjZW5kaWYgLy8gWFBhdGhf
VmFsdWVfSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhVdGlsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBA
CisvKgorICogdXRpbC5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBYUGF0aFV0aWxfSAorI2RlZmluZSBYUGF0aFV0
aWxfSAorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJOb2RlLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgWFBhdGggeworCit0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBOb2RlVmVjdG9yOworICAgIAorLyogQHJldHVybiB3aGV0aGVyIHRoZSBn
aXZlbiBub2RlIGlzIHRoZSByb290IG5vZGUuCisgKi8KK2Jvb2wgaXNSb290RG9tTm9kZShOb2Rl
KiBub2RlKTsKKworLyogQHJldHVybiB0aGUgJ3N0cmluZy12YWx1ZScgb2YgdGhlIGdpdmVuIG5v
ZGUgYXMgc3BlY2lmaWVkIGJ5CisgICBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aAorICovCitT
dHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSk7CisKKy8qIEByZXR1cm4gd2hldGhlciB0aGUg
Z2l2ZW4gbm9kZSBpcyBhIHZhbGlkIGNvbnRleHQgbm9kZQorICovCitib29sIGlzVmFsaWRDb250
ZXh0Tm9kZShOb2RlKiBub2RlKTsKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVAor
CisjZW5kaWYgLy8gWFBhdGhfVXRpbF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9wYXRo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvcGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhQYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU0OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IE1ha3NpbSBPcmxvdmljaCA8bWFrc2lt
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFhQQVRI
X1NVUFBPUlQKKworI2luY2x1ZGUgIlhQYXRoUGFyc2VyLmgiCisjaW5jbHVkZSAiWFBhdGhFdmFs
dWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKworI2lu
Y2x1ZGUgIlhQYXRoR3JhbW1hci5oIiAgICAKKworc3RydWN0IEF4aXNOYW1lTWFwcGluZworewor
ICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgU3RlcDo6QXhpc1R5cGUgdHlwZTsKK307CisKK3N0
YXRpYyBBeGlzTmFtZU1hcHBpbmcgYXhpc05hbWVzW10gPSB7CisgICAgeyAiYW5jZXN0b3IiLCBT
dGVwOjpBbmNlc3RvckF4aXMgfSwKKyAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3RlcDo6QW5j
ZXN0b3JPclNlbGZBeGlzIH0sCisgICAgeyAiYXR0cmlidXRlIiwgU3RlcDo6QXR0cmlidXRlQXhp
cyB9LAorICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgeyAiZGVzY2VuZGFu
dCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCisgICAgeyAiZGVzY2VuZGFudC1vci1zZWxmIiwg
U3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICB7ICJmb2xsb3dpbmciLCBTdGVwOjpG
b2xsb3dpbmdBeGlzIH0sCisgICAgeyAiZm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dp
bmdTaWJsaW5nQXhpcyB9LAorICAgIHsgIm5hbWVzcGFjZSIsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMg
fSwKKyAgICB7ICJwYXJlbnQiLCBTdGVwOjpQYXJlbnRBeGlzIH0sCisgICAgeyAicHJlY2VkaW5n
IiwgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAorICAgIHsgInByZWNlZGluZy1zaWJsaW5nIiwgU3Rl
cDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKKyAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMg
fQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBheGlzTmFtZXNDb3VudCA9IHNpemVvZihheGlz
TmFtZXMpIC8gc2l6ZW9mKGF4aXNOYW1lc1swXSk7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
bm9kZVR5cGVOYW1lc1tdID0geworICAgICJjb21tZW50IiwKKyAgICAidGV4dCIsCisgICAgInBy
b2Nlc3NpbmctaW5zdHJ1Y3Rpb24iLAorICAgICJub2RlIiwKKyAgICAwCit9OworCitIYXNoTWFw
PFN0cmluZywgU3RlcDo6QXhpc1R5cGU+KiBQYXJzZXI6OnNfYXhpc05hbWVzRGljdCA9IDA7CitI
YXNoU2V0PFN0cmluZz4qIFBhcnNlcjo6c19ub2RlVHlwZU5hbWVzRGljdCA9IDA7CisKK1BhcnNl
ciogUGFyc2VyOjpjdXJyZW50UGFyc2VyID0gMDsKKworUGFyc2VyOjpYTUxDYXQgUGFyc2VyOjpj
aGFyQ2F0KFFDaGFyIGFDaGFyKQoreworICAgIC8vIyMjIG1pZ2h0IG5lZWQgdG8gYWRkIHNvbWUg
c3BlY2lhbCBjYXNlcyBmcm9tIHRoZSBYTUwgc3BlYy4KKworICAgIGlmIChhQ2hhci51bmljb2Rl
KCkgPT0gJ18nKQorICAgICAgICByZXR1cm4gTmFtZVN0YXJ0OworCisgICAgaWYgKGFDaGFyLnVu
aWNvZGUoKSA9PSAnLicgfHwgYUNoYXIudW5pY29kZSgpID09ICctJykKKyAgICAgICAgcmV0dXJu
IE5hbWVDb250OworICAgIHN3aXRjaCAodV9jaGFyVHlwZShhQ2hhci51bmljb2RlKCkpKSB7Cisg
ICAgICAgIGNhc2UgVV9MT1dFUkNBU0VfTEVUVEVSOiAvL0xsCisgICAgICAgIGNhc2UgVV9VUFBF
UkNBU0VfTEVUVEVSOiAvL0x1CisgICAgICAgIGNhc2UgVV9PVEhFUl9MRVRURVI6ICAgICAvL0xv
CisgICAgICAgIGNhc2UgVV9USVRMRUNBU0VfTEVUVEVSOiAvL0x0CisgICAgICAgIGNhc2UgVV9M
RVRURVJfTlVNQkVSOiAgICAvL05sCisgICAgICAgICAgICByZXR1cm4gTmFtZVN0YXJ0OworICAg
ICAgICBjYXNlIFVfQ09NQklOSU5HX1NQQUNJTkdfTUFSSzogLy9NYworICAgICAgICBjYXNlIFVf
RU5DTE9TSU5HX01BUks6ICAgICAgICAgLy9NZQorICAgICAgICBjYXNlIFVfTk9OX1NQQUNJTkdf
TUFSSzogICAgICAgLy9NbgorICAgICAgICBjYXNlIFVfTU9ESUZJRVJfTEVUVEVSOiAgICAgICAg
Ly9MbQorICAgICAgICBjYXNlIFVfREVDSU1BTF9ESUdJVF9OVU1CRVI6ICAgLy9OZAorICAgICAg
ICAgICAgcmV0dXJuIE5hbWVDb250OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIE5vdFBhcnRPZk5hbWU7CisgICAgfQorfQorCitib29sIFBhcnNlcjo6aXNBeGlzTmFtZShT
dHJpbmcgbmFtZSwgU3RlcDo6QXhpc1R5cGUmIHR5cGUpCit7CisgICAgaWYgKCFzX2F4aXNOYW1l
c0RpY3QpIHsKKyAgICAgICAgc19heGlzTmFtZXNEaWN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBT
dGVwOjpBeGlzVHlwZT47CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHAgPSAwOyBwIDwgYXhp
c05hbWVzQ291bnQ7ICsrcCkKKyAgICAgICAgICAgIHNfYXhpc05hbWVzRGljdC0+c2V0KGF4aXNO
YW1lc1twXS5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc05hbWVz
W3BdLnR5cGUpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzVHlwZT46
Oml0ZXJhdG9yIGl0ID0gc19heGlzTmFtZXNEaWN0LT5maW5kKG5hbWUpOworICAgIAorICAgIGlm
IChpdCAhPSBzX2F4aXNOYW1lc0RpY3QtPmVuZCgpKSB7CisgICAgICAgIHR5cGUgPSBpdC0+c2Vj
b25kOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgICAgCisgICAgICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBQYXJzZXI6OmlzTm9kZVR5cGVOYW1lKFN0cmluZyBuYW1lKQor
eworICAgIGlmICghc19ub2RlVHlwZU5hbWVzRGljdCkgeworICAgICAgICBzX25vZGVUeXBlTmFt
ZXNEaWN0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPjsKKyAgICAgICAgZm9yIChpbnQgcCA9IDA7IG5v
ZGVUeXBlTmFtZXNbcF07ICsrcCkKKyAgICAgICAgICAgIHNfbm9kZVR5cGVOYW1lc0RpY3QtPmFk
ZChub2RlVHlwZU5hbWVzW3BdKTsKKyAgICB9CisgICAgcmV0dXJuIHNfbm9kZVR5cGVOYW1lc0Rp
Y3QtPmNvbnRhaW5zKFN0cmluZyhuYW1lKSk7Cit9CisKKy8qIFJldHVybnMgd2hldGhlciB0aGUg
bGFzdCBwYXJzZWQgdG9rZW4gbWF0Y2hlcyB0aGUgWzMyXSBPcGVyYXRvciBydWxlCisgKiAoY2hl
Y2sgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgjZXhwcmxleCkuIE5lY2Vzc2FyeSB0byBkaXNh
bWJpZ3VhdGUKKyAqIHRoZSB0b2tlbnMuCisgKi8KK2Jvb2wgUGFyc2VyOjppc09wZXJhdG9yQ29u
dGV4dCgpCit7CisgICAgaWYgKG1fbmV4dFBvcyA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzd2l0Y2ggKG1fbGFzdFRva2VuVHlwZSkgeworICAgICAgICBjYXNlIEFORDogY2Fz
ZSBPUjogY2FzZSBNVUxPUDoKKyAgICAgICAgY2FzZSAnLyc6IGNhc2UgU0xBU0hTTEFTSDogY2Fz
ZSAnfCc6IGNhc2UgUExVUzogY2FzZSBNSU5VUzoKKyAgICAgICAgY2FzZSBFUU9QOiBjYXNlIFJF
TE9QOgorICAgICAgICBjYXNlICdAJzogY2FzZSBBWElTTkFNRTogICBjYXNlICcoJzogY2FzZSAn
Wyc6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgUGFyc2VyOjpza2lwV1MoKQorewor
ICAgIHdoaWxlIChtX25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYgbV9kYXRhW21fbmV4dFBv
c10uaXNTcGFjZSgpKQorICAgICAgICArK21fbmV4dFBvczsKK30KKworVG9rZW4gUGFyc2VyOjpt
YWtlVG9rZW5BbmRBZHZhbmNlKGludCBjb2RlLCBpbnQgYWR2YW5jZSkKK3sKKyAgICBtX25leHRQ
b3MgKz0gYWR2YW5jZTsKKyAgICByZXR1cm4gVG9rZW4oY29kZSk7Cit9CisKK1Rva2VuIFBhcnNl
cjo6bWFrZUludFRva2VuQW5kQWR2YW5jZShpbnQgY29kZSwgaW50IHZhbCwgaW50IGFkdmFuY2Up
Cit7CisgICAgbV9uZXh0UG9zICs9IGFkdmFuY2U7CisgICAgcmV0dXJuIFRva2VuKGNvZGUsIHZh
bCk7Cit9CisKKy8vUmV0dXJucyBuZXh0IGNoYXIgaWYgaXQncyB0aGVyZSBhbmQgaW50ZXJlc3Rp
bmcsIDAgb3RoZXJ3aXNlCitjaGFyIFBhcnNlcjo6cGVla0FoZWFkSGVscGVyKCkKK3sKKyAgICBp
ZiAobV9uZXh0UG9zICsgMSA+PSBtX2RhdGEubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIFFDaGFyIG5leHQgPSBtX2RhdGFbbV9uZXh0UG9zICsgMV07CisgICAgaWYgKG5leHQudW5p
Y29kZSgpID49IDB4ZmYpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5leHQudW5p
Y29kZSgpOworfQorCitjaGFyIFBhcnNlcjo6cGVla0N1ckhlbHBlcigpCit7CisgICAgaWYgKG1f
bmV4dFBvcyA+PSBtX2RhdGEubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAgIFFDaGFy
IG5leHQgPSBtX2RhdGFbbV9uZXh0UG9zXTsKKyAgICBpZiAobmV4dC51bmljb2RlKCkgPj0gMHhm
ZikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbmV4dC51bmljb2RlKCk7Cit9CisK
K1Rva2VuIFBhcnNlcjo6bGV4U3RyaW5nKCkKK3sKKyAgICBRQ2hhciBkZWxpbWl0ZXIgPSBtX2Rh
dGFbbV9uZXh0UG9zXTsKKyAgICBpbnQgICBzdGFydFBvcyAgPSBtX25leHRQb3MgKyAxOworCisg
ICAgZm9yIChtX25leHRQb3MgPSBzdGFydFBvczsgbV9uZXh0UG9zIDwgbV9kYXRhLmxlbmd0aCgp
OyArK21fbmV4dFBvcykgeworICAgICAgICBpZiAobV9kYXRhW21fbmV4dFBvc10gPT0gZGVsaW1p
dGVyKSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBtX2RhdGEuZGVwcmVjYXRlZFN0cmlu
ZygpLm1pZChzdGFydFBvcywgbV9uZXh0UG9zIC0gc3RhcnRQb3MpOworICAgICAgICAgICAgKytt
X25leHRQb3M7IC8vQ29uc3VtZSB0aGUgY2hhcjsKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihM
SVRFUkFMLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvL091Y2gsIHdlbnQgb2Zm
IHRoZSBlbmQgLS0gcmVwb3J0IGVycm9yCisgICAgcmV0dXJuIFRva2VuKEVSUk9SKTsKK30KKwor
VG9rZW4gUGFyc2VyOjpsZXhOdW1iZXIoKQoreworICAgIGludCBzdGFydFBvcyA9IG1fbmV4dFBv
czsKKyAgICBib29sIHNlZW5Eb3QgPSBmYWxzZTsKKworICAgIC8vR28gdW50aWwgZW5kIG9yIGEg
bm9uLWRpZ2l0cyBjaGFyYWN0ZXIKKyAgICBmb3IgKDsgbV9uZXh0UG9zIDwgbV9kYXRhLmxlbmd0
aCgpOyArK21fbmV4dFBvcykgeworICAgICAgICBRQ2hhciBhQ2hhciA9IG1fZGF0YVttX25leHRQ
b3NdOworICAgICAgICBpZiAoYUNoYXIudW5pY29kZSgpID49IDB4ZmYpIGJyZWFrOworCisgICAg
ICAgIGlmIChhQ2hhci51bmljb2RlKCkgPCAnMCcgfHwgYUNoYXIudW5pY29kZSgpID4gJzknKSB7
CisgICAgICAgICAgICBpZiAoYUNoYXIudW5pY29kZSgpID09ICcuJyAmJiAhc2VlbkRvdCkKKyAg
ICAgICAgICAgICAgICBzZWVuRG90ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyB2YWx1ZSA9IG1f
ZGF0YS5kZXByZWNhdGVkU3RyaW5nKCkubWlkKHN0YXJ0UG9zLCBtX25leHRQb3MgLSBzdGFydFBv
cyk7CisgICAgcmV0dXJuIFRva2VuKE5VTUJFUiwgdmFsdWUpOworfQorCitUb2tlbiBQYXJzZXI6
OmxleE5DTmFtZSgpCit7CisgICAgaW50IHN0YXJ0UG9zID0gbV9uZXh0UG9zOworICAgIGlmICht
X25leHRQb3MgPCBtX2RhdGEubGVuZ3RoKCkgJiYgY2hhckNhdChtX2RhdGFbbV9uZXh0UG9zXSkg
PT0gTmFtZVN0YXJ0KSB7CisgICAgICAgIC8vS2VlcCBnb2luZyB1bnRpbCB3ZSBnZXQgYSBjaGFy
YWN0ZXIgdGhhdCdzIG5vdCBnb29kIGZvciBuYW1lcy4KKyAgICAgICAgZm9yICg7IG1fbmV4dFBv
cyA8IG1fZGF0YS5sZW5ndGgoKTsgKyttX25leHRQb3MpIHsKKyAgICAgICAgICAgIGlmIChjaGFy
Q2F0KG1fZGF0YVttX25leHRQb3NdKSA9PSBOb3RQYXJ0T2ZOYW1lKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdmFsdWUgPSBtX2Rh
dGEuZGVwcmVjYXRlZFN0cmluZygpLm1pZChzdGFydFBvcywgbV9uZXh0UG9zIC0gc3RhcnRQb3Mp
OworICAgICAgICByZXR1cm4gVG9rZW4oRVJST1IgKyAxLCB2YWx1ZSk7CisgICAgfQorCisgICAg
cmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoRVJST1IpOworfQorCitUb2tlbiBQYXJzZXI6Omxl
eFFOYW1lKCkKK3sKKyAgICBUb2tlbiB0MSA9IGxleE5DTmFtZSgpOworICAgIGlmICh0MS50eXBl
ID09IEVSUk9SKSByZXR1cm4gdDE7CisgICAgc2tpcFdTKCk7CisgICAgLy9JZiB0aGUgbmV4dCBj
aGFyYWN0ZXIgaXMgOiwgd2hhdCB3ZSBqdXN0IGdvdCBpdCB0aGUgcHJlZml4LCBpZiBub3QsCisg
ICAgLy9pdCdzIHRoZSB3aG9sZSB0aGluZworICAgIGlmIChwZWVrQWhlYWRIZWxwZXIoKSAhPSAn
OicpCisgICAgICAgIHJldHVybiB0MTsKKworICAgIFRva2VuIHQyID0gbGV4TkNOYW1lKCk7Cisg
ICAgaWYgKHQyLnR5cGUgPT0gRVJST1IpIHJldHVybiB0MjsKKworICAgIHJldHVybiBUb2tlbihF
UlJPUiArIDEsIHQxLnZhbHVlICsgIjoiICsgdDIudmFsdWUpOworfQorCitUb2tlbiBQYXJzZXI6
Om5leHRUb2tlbkludGVybmFsKCkKK3sKKyAgICBza2lwV1MoKTsKKworICAgIGlmIChtX25leHRQ
b3MgPj0gbV9kYXRhLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gVG9rZW4oMCk7CisKKyAgICBj
aGFyIGNvZGUgPSBwZWVrQ3VySGVscGVyKCk7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAg
IGNhc2UgJygnOiBjYXNlICcpJzogY2FzZSAnWyc6IGNhc2UgJ10nOgorICAgICAgICBjYXNlICdA
JzogY2FzZSAnLCc6IGNhc2UgJ3wnOgorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFk
dmFuY2UoY29kZSk7CisgICAgICAgIGNhc2UgJ1wnJzoKKyAgICAgICAgY2FzZSAnXCInOgorICAg
ICAgICAgICAgcmV0dXJuIGxleFN0cmluZygpOworICAgICAgICBjYXNlICcwJzogY2FzZSAnMSc6
IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2
JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICAgICAgICAgIHJldHVybiBsZXhO
dW1iZXIoKTsKKyAgICAgICAgY2FzZSAnLic6IHsKKyAgICAgICAgICAgIGNoYXIgbmV4dCA9IHBl
ZWtBaGVhZEhlbHBlcigpOworICAgICAgICAgICAgaWYgKG5leHQgPT0gJy4nKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKERPVERPVCwgMik7CisgICAgICAgICAg
ICBlbHNlIGlmIChuZXh0ID49ICcwJyAmJiBuZXh0IDw9ICc5JykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbGV4TnVtYmVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoJy4nKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlICcv
JzoKKyAgICAgICAgICAgIGlmIChwZWVrQWhlYWRIZWxwZXIoKSA9PSAnLycpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoU0xBU0hTTEFTSCwgMik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoJy8n
KTsKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2
YW5jZShQTFVTKTsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICByZXR1cm4gbWFrZVRv
a2VuQW5kQWR2YW5jZShNSU5VUyk7CisgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgcmV0
dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoRVFPUCwgRXFUZXN0T3A6Ok9QX0VRKTsKKyAgICAg
ICAgY2FzZSAnISc6CisgICAgICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKEVRT1AsIEVxVGVz
dE9wOjpPUF9ORSwgMik7CisKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihFUlJPUik7CisgICAg
ICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUludFRva2VuQW5kQWR2YW5jZShSRUxPUCwgTnVt
ZXJpY09wOjpPUF9MRSwgMik7CisKKyAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRB
ZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0xUKTsKKyAgICAgICAgY2FzZSAnPic6CisgICAg
ICAgICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlSW50VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBOdW1lcmljT3A6Ok9QX0dFLCAyKTsK
KworICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIE51bWVy
aWNPcDo6T1BfR1QpOworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgIGlmIChpc09wZXJh
dG9yQ29udGV4dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlSW50VG9rZW5BbmRBZHZh
bmNlKE1VTE9QLCBOdW1lcmljT3A6Ok9QX011bCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICArK21fbmV4dFBvczsKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4oTkFN
RVRFU1QsICIqIik7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyQnOiB7Ly8kIFFOYW1l
CisgICAgICAgICAgICBtX25leHRQb3MrKzsKKyAgICAgICAgICAgIFRva2VuIHBhciA9IGxleFFO
YW1lKCk7CisgICAgICAgICAgICBpZiAocGFyLnR5cGUgPT0gRVJST1IpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcjsKKworICAgICAgICAgICAgcmV0dXJuIFRva2VuKFZBUklBQkxFUkVGRVJF
TkNFLCBwYXIudmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgVG9rZW4gdDEgPSBsZXhO
Q05hbWUoKTsKKyAgICBpZiAodDEudHlwZSA9PSBFUlJPUikgcmV0dXJuIHQxOworCisgICAgc2tp
cFdTKCk7CisgICAgLy9JZiB3ZSdyZSBpbiBhbiBvcGVyYXRvciBjb250ZXh0LCBjaGVjayBmb3Ig
YW55IG9wZXJhdG9yIG5hbWVzCisgICAgaWYgKGlzT3BlcmF0b3JDb250ZXh0KCkpIHsKKyAgICAg
ICAgaWYgKHQxLnZhbHVlID09ICJhbmQiKSAvLyMjIyBoYXNoPworICAgICAgICAgICAgcmV0dXJu
IFRva2VuKEFORCk7CisgICAgICAgIGlmICh0MS52YWx1ZSA9PSAib3IiKQorICAgICAgICAgICAg
cmV0dXJuIFRva2VuKE9SKTsKKyAgICAgICAgaWYgKHQxLnZhbHVlID09ICJtb2QiKQorICAgICAg
ICAgICAgcmV0dXJuIFRva2VuKE1VTE9QLCBOdW1lcmljT3A6Ok9QX01vZCk7CisgICAgICAgIGlm
ICh0MS52YWx1ZSA9PSAiZGl2IikKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihNVUxPUCwgTnVt
ZXJpY09wOjpPUF9EaXYpOworICAgIH0KKworICAgIC8vU2VlIHdoZXRoZXIgd2UgYXJlIGF0IGEg
OgorICAgIGlmIChwZWVrQ3VySGVscGVyKCkgPT0gJzonKSB7CisgICAgICAgIG1fbmV4dFBvcysr
OworICAgICAgICAvL0FueSBjaGFuY2UgaXQncyBhbiBheGlzIG5hbWU/CisgICAgICAgIGlmIChw
ZWVrQ3VySGVscGVyKCkgPT0gJzonKSB7CisgICAgICAgICAgICBtX25leHRQb3MrKzsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy9JdCBtaWdodCBiZSBhbiBheGlzIG5hbWUuCisgICAgICAg
ICAgICBTdGVwOjpBeGlzVHlwZSBheGlzVHlwZTsKKyAgICAgICAgICAgIGlmIChpc0F4aXNOYW1l
KHQxLnZhbHVlLCBheGlzVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEFYSVNO
QU1FLCBheGlzVHlwZSk7CisgICAgICAgICAgICAvL1VnaCwgOjogaXMgb25seSB2YWxpZCBpbiBh
eGlzIG5hbWVzIC0+IGVycm9yCisgICAgICAgICAgICByZXR1cm4gVG9rZW4oRVJST1IpOworICAg
ICAgICB9CisKKyAgICAgICAgLy9TZWVtcyBsaWtlIHRoaXMgaXMgYSBmdWxseSBxdWFsaWZpZWQg
cW5hbWUsIG9yIHBlcmhhcHMgdGhlICogbW9kaWZpZWQgb25lIGZyb20gTmFtZVRlc3QKKyAgICAg
ICAgc2tpcFdTKCk7CisgICAgICAgIGlmIChwZWVrQ3VySGVscGVyKCkgPT0gJyonKSB7CisgICAg
ICAgICAgICBtX25leHRQb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwg
dDEudmFsdWUgKyAiOioiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy9NYWtlIGEg
ZnVsbCBxbmFtZS4uCisgICAgICAgIFRva2VuIHQyID0gbGV4TkNOYW1lKCk7CisgICAgICAgIGlm
ICh0Mi50eXBlID09IEVSUk9SKSByZXR1cm4gdDI7CisgICAgICAgIAorICAgICAgICB0MS52YWx1
ZSA9IHQxLnZhbHVlICsgJzonICsgdDIudmFsdWU7CisgICAgfQorCisgICAgc2tpcFdTKCk7Cisg
ICAgaWYgKHBlZWtDdXJIZWxwZXIoKSA9PSAnKCcpIHsKKyAgICAgICAgLy9ub3RlOiB3ZSBkb24n
dCBzd2FsbG93IHRoZSAoaGVyZSEKKyAgICAgICAgCisgICAgICAgIC8vZWl0aGVyIG5vZGUgdHlw
ZSBvZiBmdW5jdGlvbiBuYW1lCisgICAgICAgIGlmIChpc05vZGVUeXBlTmFtZSh0MS52YWx1ZSkp
IHsKKyAgICAgICAgICAgIGlmICh0MS52YWx1ZSA9PSAicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKFBJLCB0MS52YWx1ZSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBUb2tlbihOT0RFVFlQRSwgdDEudmFsdWUpOworICAgICAgICB9CisgICAgICAg
IC8vbXVzdCBiZSBhIGZ1bmN0aW9uIG5hbWUuCisgICAgICAgIHJldHVybiBUb2tlbihGVU5DVElP
Tk5BTUUsIHQxLnZhbHVlKTsKKyAgICB9CisKKyAgICAvL0F0IHRoaXMgcG9pbnQsIGl0IG11c3Qg
YmUgTkFNRVRFU1QKKyAgICByZXR1cm4gVG9rZW4oTkFNRVRFU1QsIHQxLnZhbHVlKTsKK30KKwor
VG9rZW4gUGFyc2VyOjpuZXh0VG9rZW4oKQoreworICAgIFRva2VuIHRvUmV0ID0gbmV4dFRva2Vu
SW50ZXJuYWwoKTsKKyAgICBtX2xhc3RUb2tlblR5cGUgPSB0b1JldC50eXBlOworICAgIHJldHVy
biB0b1JldDsKK30KKworUGFyc2VyOjpQYXJzZXIoKQoreworICAgIHJlc2V0KFN0cmluZygpKTsK
K30KKwordm9pZCBQYXJzZXI6OnJlc2V0KGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBtX25l
eHRQb3MgPSAwOworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgbV9sYXN0VG9rZW5UeXBlID0gMDsK
KyAgICAKKyAgICBtX3RvcEV4cHIgPSAwOworICAgIG1fZ290TmFtZXNwYWNlRXJyb3IgPSBmYWxz
ZTsKK30KKworaW50IFBhcnNlcjo6bGV4KHZvaWQqIF95eWx2YWwpCit7CisgICAgWVlTVFlQRSog
eXlsdmFsID0gc3RhdGljX2Nhc3Q8WVlTVFlQRSo+KF95eWx2YWwpOworICAgIFRva2VuIHRvayA9
IG5leHRUb2tlbigpOworIAorICAgIGlmICghdG9rLnZhbHVlLmlzRW1wdHkoKSkgeworICAgICAg
ICB5eWx2YWwtPnN0ciA9IG5ldyBTdHJpbmcodG9rLnZhbHVlKTsKKyAgICAgICAgcmVnaXN0ZXJT
dHJpbmcoeXlsdmFsLT5zdHIpOworICAgIH0gZWxzZSBpZiAodG9rLmludFZhbHVlKQorICAgICAg
ICB5eWx2YWwtPm51bSA9IHRvay5pbnRWYWx1ZTsKKyAgICAKKyAgICByZXR1cm4gdG9rLnR5cGU7
Cit9CisKK0V4cHJlc3Npb24qIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBz
dGF0ZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGNvZGUpCit7CisgICAgcmVzZXQoc3RhdGVtZW50KTsK
KyAgICAKKyAgICBQYXJzZXIqIG9sZFBhcnNlciA9IGN1cnJlbnRQYXJzZXI7CisgICAgY3VycmVu
dFBhcnNlciA9IHRoaXM7CisgICAgaW50IHBhcnNlRXJyb3IgPSB4cGF0aHl5cGFyc2UodGhpcyk7
CisgICAgY3VycmVudFBhcnNlciA9IG9sZFBhcnNlcjsKKyAgICAgICAgCisgICAgaWYgKHBhcnNl
RXJyb3IpIHsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGFyc2VOb2Rlcyk7CisgICAgICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX2V4cHJlc3Npb25WZWN0b3JzKTsKKyAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fcHJlZGljYXRlVmVjdG9ycyk7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3N0
cmluZ3MpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fZ290TmFtZXNwYWNlRXJyb3IpCisgICAg
ICAgICAgICBjb2RlID0gTkFNRVNQQUNFX0VSUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZSA9IElOVkFMSURfRVhQUkVTU0lPTl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChtX3BhcnNlTm9kZXMuc2l6ZSgpID09IDEpOyAvLyBUb3Ag
ZXhwcmVzc2lvbgorICAgICAgICBBU1NFUlQobV9leHByZXNzaW9uVmVjdG9ycy5zaXplKCkgPT0g
MCk7CisgICAgICAgIEFTU0VSVChtX3ByZWRpY2F0ZVZlY3RvcnMuc2l6ZSgpID09IDApOworICAg
ICAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA9PSAwKTsKKyAgICAgICAgCisgICAgICAgIG1f
cGFyc2VOb2Rlcy5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV90b3BFeHByOwor
fQorCit2b2lkIFBhcnNlcjo6cmVnaXN0ZXJQYXJzZU5vZGUoUGFyc2VOb2RlKiBub2RlKQorewor
ICAgIGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoIW1f
cGFyc2VOb2Rlcy5jb250YWlucyhub2RlKSk7CisgICAgCisgICAgbV9wYXJzZU5vZGVzLmFkZChu
b2RlKTsKK30KKwordm9pZCBQYXJzZXI6OnVucmVnaXN0ZXJQYXJzZU5vZGUoUGFyc2VOb2RlKiBu
b2RlKQoreworICAgIGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBB
U1NFUlQobV9wYXJzZU5vZGVzLmNvbnRhaW5zKG5vZGUpKTsKKworICAgIG1fcGFyc2VOb2Rlcy5y
ZW1vdmUobm9kZSk7Cit9CisKK3ZvaWQgUGFyc2VyOjpyZWdpc3RlclByZWRpY2F0ZVZlY3RvcihW
ZWN0b3I8UHJlZGljYXRlKj4qIHZlY3RvcikKK3sKKyAgICBpZiAodmVjdG9yID09IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV9wcmVkaWNhdGVWZWN0b3JzLmNvbnRhaW5zKHZl
Y3RvcikpOworICAgIAorICAgIG1fcHJlZGljYXRlVmVjdG9ycy5hZGQodmVjdG9yKTsKK30KKwor
dm9pZCBQYXJzZXI6OnVucmVnaXN0ZXJQcmVkaWNhdGVWZWN0b3IoVmVjdG9yPFByZWRpY2F0ZSo+
KiB2ZWN0b3IpCit7CisgICAgaWYgKHZlY3RvciA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9wcmVkaWNhdGVWZWN0b3JzLmNvbnRhaW5zKHZlY3RvcikpOworICAgIAorICAg
IG1fcHJlZGljYXRlVmVjdG9ycy5yZW1vdmUodmVjdG9yKTsKK30KKworCit2b2lkIFBhcnNlcjo6
cmVnaXN0ZXJFeHByZXNzaW9uVmVjdG9yKFZlY3RvcjxFeHByZXNzaW9uKj4qIHZlY3RvcikKK3sK
KyAgICBpZiAodmVjdG9yID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV9l
eHByZXNzaW9uVmVjdG9ycy5jb250YWlucyh2ZWN0b3IpKTsKKyAgICAKKyAgICBtX2V4cHJlc3Np
b25WZWN0b3JzLmFkZCh2ZWN0b3IpOyAgICAKK30KKwordm9pZCBQYXJzZXI6OnVucmVnaXN0ZXJF
eHByZXNzaW9uVmVjdG9yKFZlY3RvcjxFeHByZXNzaW9uKj4qIHZlY3RvcikKK3sKKyAgICBpZiAo
dmVjdG9yID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2V4cHJlc3Npb25W
ZWN0b3JzLmNvbnRhaW5zKHZlY3RvcikpOworICAgIAorICAgIG1fZXhwcmVzc2lvblZlY3RvcnMu
cmVtb3ZlKHZlY3Rvcik7ICAgICAgICAKK30KKwordm9pZCBQYXJzZXI6OnJlZ2lzdGVyU3RyaW5n
KFN0cmluZyogcykKK3sKKyAgICBpZiAocyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgQVNTRVJUKCFtX3N0cmluZ3MuY29udGFpbnMocykpOworICAgIAorICAgIG1fc3RyaW5ncy5h
ZGQocyk7ICAgICAgICAKK30KKwordm9pZCBQYXJzZXI6OnVucmVnaXN0ZXJTdHJpbmcoU3RyaW5n
KiBzKQoreworICAgIGlmIChzID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NF
UlQobV9zdHJpbmdzLmNvbnRhaW5zKHMpKTsKKyAgICAKKyAgICBtX3N0cmluZ3MucmVtb3ZlKHMp
OworfQorCit9Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCisKSW5kZXg6IFdlYkNvcmUv
eHBhdGgvaW1wbC9YUGF0aFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1w
bC9YUGF0aFBhdGguY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRo
UGF0aC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0
IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorCisjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsK
KyAgICAgICAgCitGaWx0ZXI6OkZpbHRlcihFeHByZXNzaW9uKiBleHByLCBjb25zdCBWZWN0b3I8
UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMpCisgICAgOiBtX2V4cHIoZXhwciksCisgICAgbV9wcmVk
aWNhdGVzKHByZWRpY2F0ZXMpCit7Cit9CisKK0ZpbHRlcjo6fkZpbHRlcigpCit7CisgICAgZGVs
ZXRlIG1fZXhwcjsKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9wcmVkaWNhdGVzKTsKK30KKworVmFs
dWUgRmlsdGVyOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBWYWx1ZSB2ID0gbV9leHByLT5l
dmFsdWF0ZSgpOworICAgIAorICAgIGlmICghdi5pc05vZGVWZWN0b3IoKSkgeworICAgICAgICBp
ZiAoIW1fcHJlZGljYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBMT0coWFBhdGgsICJJZ25v
cmluZyBwcmVkaWNhdGVzIGZvciBmaWx0ZXIgc2luY2UgZXhwcmVzc2lvbiBkb2VzIG5vdCBldmFs
dWF0ZSB0byBhIG5vZGV2ZWN0b3IhIik7CisKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisg
ICAgTm9kZVZlY3RvciBpbk5vZGVzID0gdi50b05vZGVWZWN0b3IoKSwgb3V0Tm9kZXM7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlZGljYXRlcy5zaXplKCk7IGkrKykgeworICAg
ICAgICBvdXROb2Rlcy5jbGVhcigpOworICAgICAgICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29u
dGV4dCgpLnNpemUgPSBpbk5vZGVzLnNpemUoKTsKKyAgICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVh
dGlvbkNvbnRleHQoKS5wb3NpdGlvbiA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgaW5Ob2Rlcy5zaXplKCk7IGorKykgeworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGluTm9kZXNbal0uZ2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEV4cHJl
c3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IG5vZGU7CisgICAgICAgICAgICArK0V4
cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb247CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX3ByZWRpY2F0ZXNbaV0tPmV2YWx1YXRlKCkpCisgICAgICAgICAgICAg
ICAgb3V0Tm9kZXMuYXBwZW5kKG5vZGUpOworICAgICAgICB9CisgICAgICAgIGluTm9kZXMgPSBv
dXROb2RlczsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0Tm9kZXM7Cit9CisKK0xvY2F0aW9uUGF0
aDo6TG9jYXRpb25QYXRoKCkKKyAgICA6IG1fYWJzb2x1dGUoZmFsc2UpCit7Cit9CisKK0xvY2F0
aW9uUGF0aDo6fkxvY2F0aW9uUGF0aCgpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc3RlcHMp
OworfQorCit2b2lkIExvY2F0aW9uUGF0aDo6b3B0aW1pemUoKQoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3N0ZXBzLnNpemUoKTsgaSsrKQorICAgICAgICBtX3N0ZXBzW2ldLT5v
cHRpbWl6ZSgpOworfQorCitWYWx1ZSBMb2NhdGlvblBhdGg6OmRvRXZhbHVhdGUoKSBjb25zdAor
eworICAgIGlmIChtX2Fic29sdXRlKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkV2YWx1YXRpbmcg
YWJzb2x1dGUgcGF0aCBleHByZXNzaW9uIHdpdGggJWkgbG9jYXRpb24gc3RlcHMuIiwgbV9zdGVw
cy5zaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhYUGF0aCwgIkV2YWx1YXRpbmcg
cmVsYXRpdmUgcGF0aCBleHByZXNzaW9uIHdpdGggJWkgbG9jYXRpb24gc3RlcHMuIiwgbV9zdGVw
cy5zaXplKCkpOworICAgIH0KKworICAgIE5vZGVWZWN0b3IgaW5Eb21Ob2Rlcywgb3V0RG9tTm9k
ZXM7CisKKyAgICAvKiBGb3IgYWJzb2x1dGUgbG9jYXRpb24gcGF0aHMsIHRoZSBjb250ZXh0IG5v
ZGUgaXMgaWdub3JlZCAtIHRoZQorICAgICAqIGRvY3VtZW50J3Mgcm9vdCBub2RlIGlzIHVzZWQg
aW5zdGVhZC4KKyAgICAgKi8KKyAgICBOb2RlKiBjb250ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVh
dGlvbkNvbnRleHQoKS5ub2RlLmdldCgpOworICAgIGlmIChtX2Fic29sdXRlICYmIGNvbnRleHQt
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgCisgICAgICAgIGNvbnRleHQgPSBj
b250ZXh0LT5vd25lckRvY3VtZW50KCk7CisKKyAgICBpbkRvbU5vZGVzLmFwcGVuZChjb250ZXh0
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdGVwcy5zaXplKCk7IGkr
KykgeworICAgICAgICBTdGVwKiBzdGVwID0gbV9zdGVwc1tpXTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgaW5Eb21Ob2Rlcy5zaXplKCk7IGorKykgeworICAgICAgICAgICAg
Tm9kZVZlY3RvciBtYXRjaGVzID0gc3RlcC0+ZXZhbHVhdGUoaW5Eb21Ob2Rlc1tqXS5nZXQoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dERvbU5vZGVzLmFwcGVuZChtYXRjaGVzKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5Eb21Ob2RlcyA9IG91dERvbU5vZGVzOwor
ICAgICAgICBvdXREb21Ob2Rlcy5jbGVhcigpOworICAgIH0KKworICAgIHJldHVybiBpbkRvbU5v
ZGVzOworfQorCitQYXRoOjpQYXRoKEZpbHRlciogZmlsdGVyLCBMb2NhdGlvblBhdGgqIHBhdGgp
CisgICAgOiBtX2ZpbHRlcihmaWx0ZXIpLAorICAgIG1fcGF0aChwYXRoKQoreworfQorCitQYXRo
Ojp+UGF0aCgpCit7CisgICAgZGVsZXRlIG1fZmlsdGVyOworICAgIGRlbGV0ZSBtX3BhdGg7Cit9
CisKK1ZhbHVlIFBhdGg6OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBWYWx1ZSgp
OworfQorCit9Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvcGFyc2Vkc3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvZXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1w
bC9YUGF0aFByZWRpY2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQ
YXRoUHJlZGljYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0
aFByZWRpY2F0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29w
eXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBS
RVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBh
dGhQcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJYUGF0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRoIHsKKyAgICAgICAgCitOdW1iZXI6Ok51
bWJlcihkb3VibGUgdmFsdWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQoreworfQorCitib29sIE51
bWJlcjo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVl
IE51bWJlcjo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWU7Cit9CisK
K1N0cmluZ0V4cHJlc3Npb246OlN0cmluZ0V4cHJlc3Npb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICA6IG1fdmFsdWUodmFsdWUpCit7Cit9CisKK2Jvb2wgU3RyaW5nRXhwcmVzc2lvbjo6aXND
b25zdGFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZhbHVlIFN0cmluZ0V4
cHJlc3Npb246OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlOworfQor
CitWYWx1ZSBOZWdhdGl2ZTo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgcChzdWJF
eHByKDApLT5ldmFsdWF0ZSgpKTsKKyAgICBpZiAoIXAuaXNOdW1iZXIoKSkgeworICAgICAgICBM
T0coWFBhdGgsICJVbmFyeSBtaW51cyBpcyB1bmRlZmluZWQgZm9yIG5vbi1udW1lcmljIHR5cGVz
LiIpOworICAgICAgICByZXR1cm4gVmFsdWUoKTsKKyAgICB9CisgICAgcmV0dXJuIC1wLnRvTnVt
YmVyKCk7Cit9CisKK051bWVyaWNPcDo6TnVtZXJpY09wKGludCBfb3BDb2RlLCBFeHByZXNzaW9u
KiBsaHMsIEV4cHJlc3Npb24qIHJocykgOgorICAgIG9wQ29kZShfb3BDb2RlKQoreworICAgIGFk
ZFN1YkV4cHJlc3Npb24obGhzKTsKKyAgICBhZGRTdWJFeHByZXNzaW9uKHJocyk7Cit9CisKK1Zh
bHVlIE51bWVyaWNPcDo6ZG9FdmFsdWF0ZSgpIGNvbnN0Cit7CisgICAgVmFsdWUgbGhzKHN1YkV4
cHIoMCktPmV2YWx1YXRlKCkpOworICAgIFZhbHVlIHJocyhzdWJFeHByKDEpLT5ldmFsdWF0ZSgp
KTsKKyAgICAKKyAgICBpZiAoIWxocy5pc051bWJlcigpIHx8ICFyaHMuaXNOdW1iZXIoKSkgewor
ICAgICAgICBMT0coWFBhdGgsICJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gbm9uLW51bWVy
aWMgdHlwZXMuIik7CisgICAgICAgIHJldHVybiBWYWx1ZSgpOworICAgIH0KKworICAgIGRvdWJs
ZSBsZWZ0VmFsID0gbGhzLnRvTnVtYmVyKCksIHJpZ2h0VmFsID0gcmhzLnRvTnVtYmVyKCk7CisK
KyAgICBzd2l0Y2ggKG9wQ29kZSkgeworICAgICAgICBjYXNlIE9QX0FkZDoKKyAgICAgICAgICAg
IHJldHVybiBsZWZ0VmFsICsgcmlnaHRWYWw7CisgICAgICAgIGNhc2UgT1BfU3ViOgorICAgICAg
ICAgICAgcmV0dXJuIGxlZnRWYWwgLSByaWdodFZhbDsKKyAgICAgICAgY2FzZSBPUF9NdWw6Cisg
ICAgICAgICAgICByZXR1cm4gbGVmdFZhbCAqIHJpZ2h0VmFsOworICAgICAgICBjYXNlIE9QX0Rp
djoKKyAgICAgICAgICAgIHJldHVybiBsZWZ0VmFsIC8gcmlnaHRWYWw7CisgICAgICAgIGNhc2Ug
T1BfTW9kOgorICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlcihsZWZ0VmFsLCByaWdodFZhbCk7
CisgICAgICAgIGNhc2UgT1BfR1Q6CisgICAgICAgICAgICByZXR1cm4gbGVmdFZhbCA+IHJpZ2h0
VmFsOworICAgICAgICBjYXNlIE9QX0dFOgorICAgICAgICAgICAgcmV0dXJuIGxlZnRWYWwgPj0g
cmlnaHRWYWw7CisgICAgICAgIGNhc2UgT1BfTFQ6CisgICAgICAgICAgICByZXR1cm4gbGVmdFZh
bCA8IHJpZ2h0VmFsOworICAgICAgICBjYXNlIE9QX0xFOgorICAgICAgICAgICAgcmV0dXJuIGxl
ZnRWYWwgPD0gcmlnaHRWYWw7CisgICAgfQorICAgIAorICAgIHJldHVybiBWYWx1ZSgpOworfQor
CitFcVRlc3RPcDo6RXFUZXN0T3AoaW50IF9vcENvZGUsIEV4cHJlc3Npb24qIGxocywgRXhwcmVz
c2lvbiogcmhzKSA6CisgICAgb3BDb2RlKF9vcENvZGUpCit7CisgICAgYWRkU3ViRXhwcmVzc2lv
bihsaHMpOworICAgIGFkZFN1YkV4cHJlc3Npb24ocmhzKTsKK30KKworVmFsdWUgRXFUZXN0T3A6
OmRvRXZhbHVhdGUoKSBjb25zdAoreworICAgIFZhbHVlIGxocyhzdWJFeHByKDApLT5ldmFsdWF0
ZSgpKTsKKyAgICBWYWx1ZSByaHMoc3ViRXhwcigxKS0+ZXZhbHVhdGUoKSk7CisKKyAgICBib29s
IGVxdWFsOworICAgIGlmIChsaHMuaXNCb29sZWFuKCkgfHwgcmhzLmlzQm9vbGVhbigpKSB7Cisg
ICAgICAgIGVxdWFsID0gKGxocy50b0Jvb2xlYW4oKSA9PSByaHMudG9Cb29sZWFuKCkpOworICAg
IH0gZWxzZSBpZiAobGhzLmlzTnVtYmVyKCkgfHwgcmhzLmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
ZXF1YWwgPSAobGhzLnRvTnVtYmVyKCkgPT0gcmhzLnRvTnVtYmVyKCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVxdWFsID0gKGxocy50b1N0cmluZygpID09IHJocy50b1N0cmluZygpKTsKKyAg
ICB9CisKKyAgICBpZiAob3BDb2RlID09IE9QX0VRKQorICAgICAgICByZXR1cm4gZXF1YWw7CisK
KyAgICByZXR1cm4gIWVxdWFsOworfQorCitMb2dpY2FsT3A6OkxvZ2ljYWxPcChpbnQgX29wQ29k
ZSwgRXhwcmVzc2lvbiogbGhzLCBFeHByZXNzaW9uKiByaHMpIDoKKyAgICBvcENvZGUoX29wQ29k
ZSkKK3sKKyAgICBhZGRTdWJFeHByZXNzaW9uKGxocyk7CisgICAgYWRkU3ViRXhwcmVzc2lvbihy
aHMpOworfQorCitib29sIExvZ2ljYWxPcDo6c2hvcnRDaXJjdWl0T24oKSBjb25zdAoreworICAg
IGlmIChvcENvZGUgPT0gT1BfQW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vZmFsc2UgYW5k
IGZvbworCisgICAgcmV0dXJuIHRydWU7ICAvL3RydWUgb3IgYmFyCit9CisKK2Jvb2wgTG9naWNh
bE9wOjppc0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViRXhwcigwKS0+aXNDb25z
dGFudCgpICYmCisgICAgICAgICAgIHN1YkV4cHIoMCktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCkg
PT0gc2hvcnRDaXJjdWl0T24oKTsKK30KKworVmFsdWUgTG9naWNhbE9wOjpkb0V2YWx1YXRlKCkg
Y29uc3QKK3sKKyAgICBWYWx1ZSBsaHMoc3ViRXhwcigwKS0+ZXZhbHVhdGUoKSk7CisKKyAgICAv
LyBUaGlzIGlzIG5vdCBvbmx5IGFuIG9wdGltaXphdGlvbiwgaHR0cDovL3d3dy53My5vcmcvVFIv
eHBhdGgKKyAgICAvLyBkaWN0YXRlcyB0aGF0IHdlIG11c3QgZG8gc2hvcnQtY2lyY3VpdCBldmFs
dWF0aW9uCisgICAgYm9vbCBsaHNCb29sID0gbGhzLnRvQm9vbGVhbigpOworICAgIGlmIChsaHNC
b29sID09IHNob3J0Q2lyY3VpdE9uKCkpCisgICAgICAgIHJldHVybiBsaHNCb29sOworCisgICAg
cmV0dXJuIHN1YkV4cHIoMSktPmV2YWx1YXRlKCkudG9Cb29sZWFuKCk7Cit9CisKK1ZhbHVlIFVu
aW9uOjpkb0V2YWx1YXRlKCkgY29uc3QKK3sKKyAgICBWYWx1ZSBsaHMgPSBzdWJFeHByKDApLT5l
dmFsdWF0ZSgpOworICAgIFZhbHVlIHJocyA9IHN1YkV4cHIoMSktPmV2YWx1YXRlKCk7CisgICAg
aWYgKCFsaHMuaXNOb2RlVmVjdG9yKCkgfHwgIXJocy5pc05vZGVWZWN0b3IoKSkgeworICAgICAg
ICBMT0coWFBhdGgsICJVbmlvbiBvcGVyYXRvciAnfCcgd29ya3Mgb25seSB3aXRoIG5vZGV2ZWN0
b3JzLiIpOworICAgICAgICByZXR1cm4gTm9kZVZlY3RvcigpOworICAgIH0KKyAgICAKKyAgICBO
b2RlVmVjdG9yIGxoc05vZGVzID0gbGhzLnRvTm9kZVZlY3RvcigpOworICAgIE5vZGVWZWN0b3Ig
cmhzTm9kZXMgPSByaHMudG9Ob2RlVmVjdG9yKCk7CisgICAgTm9kZVZlY3RvciByZXN1bHQgPSBs
aHNOb2RlczsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPiBub2RlczsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmhzTm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTm9k
ZSogbm9kZSA9IHJoc05vZGVzW2ldLmdldCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFub2Rl
cy5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChub2RlKTsKKyAg
ICAgICAgICAgIG5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitQcmVkaWNhdGU6OlByZWRpY2F0ZShFeHByZXNzaW9uKiBleHBy
KQorICAgIDogbV9leHByKGV4cHIpCit7Cit9CisKK1ByZWRpY2F0ZTo6flByZWRpY2F0ZSgpCit7
CisgICAgZGVsZXRlIG1fZXhwcjsKK30KKworYm9vbCBQcmVkaWNhdGU6OmV2YWx1YXRlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9leHByICE9IDApOworCisgICAgVmFsdWUgcmVzdWx0KG1fZXhw
ci0+ZXZhbHVhdGUoKSk7CisKKyAgICAvLyBmb29bM10gcmVhbGx5IG1lYW5zIGZvb1twb3NpdGlv
bigpPTNdCisgICAgaWYgKHJlc3VsdC5pc051bWJlcigpKSB7CisgICAgICAgIEV4cHJlc3Npb24q
IHJlYWxFeHByID0gbmV3IEVxVGVzdE9wKEVxVGVzdE9wOjpPUF9FUSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmNyZWF0ZUZ1bmN0aW9uKCJwb3NpdGlv
biIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlcihyZXN1bHQudG9OdW1iZXIo
KSkpOworICAgICAgICByZXN1bHQgPSByZWFsRXhwci0+ZXZhbHVhdGUoKTsKKyAgICAgICAgZGVs
ZXRlIHJlYWxFeHByOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFuKCk7Cit9
CisKK3ZvaWQgUHJlZGljYXRlOjpvcHRpbWl6ZSgpCit7CisgICAgbV9leHByLT5vcHRpbWl6ZSgp
OworfQorCit9Cit9CisKKyNlbmRpZiAvLyBYUEFUSF9TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3hw
YXRoL2ltcGwvcHJlZGljYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBs
L2Z1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3Zhcmlh
YmxlcmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL3V0aWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZhcmlhYmxlUmVm
ZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVmFyaWFibGVS
ZWZlcmVuY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFZhcmlh
YmxlUmVmZXJlbmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiB2YXJp
YWJsZXJlZmVyZW5jZS5oIC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2Rl
Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor
ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhWYXJpYWJsZVJl
ZmVyZW5jZV9ICisjZGVmaW5lIFhQYXRoVmFyaWFibGVSZWZlcmVuY2VfSAorCisjaWYgWFBBVEhf
U1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgWFBhdGggeworICAgIAorY2xhc3MgVmFyaWFibGVSZWZlcmVu
Y2UgOiBwdWJsaWMgRXhwcmVzc2lvbgoreworcHVibGljOgorICAgIFZhcmlhYmxlUmVmZXJlbmNl
KGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgVmFsdWUgZG9FdmFsdWF0ZSgpIGNvbnN0Owor
CisgICAgU3RyaW5nIG1fbmFtZTsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBP
UlQKKworI2VuZGlmIC8vIFhQYXRoX1ZhcmlhYmxlUmVmZXJlbmNlX0gKKwpJbmRleDogV2ViQ29y
ZS94cGF0aC9pbXBsL1hQYXRoRXhwcmVzc2lvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3hwYXRoL2ltcGwvWFBhdGhFeHByZXNzaW9uTm9kZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS94cGF0aC9pbXBsL1hQYXRoRXhwcmVzc2lvbk5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIGV4cHJlc3Npb24uaCAtIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFh
YmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor
ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhFeHByZXNzaW9u
Tm9kZV9ICisjZGVmaW5lIFhQYXRoRXhwcmVzc2lvbk5vZGVfSAorCisjaWYgWFBBVEhfU1VQUE9S
VAorCisjaW5jbHVkZSAiWFBhdGhWYWx1ZS5oIgorCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgWFBhdGhOU1Jlc29sdmVyOworCituYW1l
c3BhY2UgWFBhdGggeworICAgICAgICAKK3N0cnVjdCBFdmFsdWF0aW9uQ29udGV4dAoreworICAg
IEV2YWx1YXRpb25Db250ZXh0KCkgOiBub2RlKDApLCBzaXplKDApLCBwb3NpdGlvbigwKSwgcmVz
b2x2ZXIoMCkgeyB9CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAgICB1bnNpZ25lZCBsb25n
IHNpemU7CisgICAgdW5zaWduZWQgbG9uZyBwb3NpdGlvbjsKKyAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiB2YXJpYWJsZUJpbmRpbmdzOworCisgICAgLyogVGhlIGZ1bmN0aW9uIGxpYnJhcnkg
aXMgZ2xvYmFsbHkgYWNjZXNzaWJsZSB0aHJvdWdoCisgICAgICogRnVuY3Rpb25MaWJyYXJ5Ojpz
ZWxmKCkKKyAgICAgKi8KKyAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyOworfTsKKworY2xh
c3MgUGFyc2VOb2RlCit7Cit9OworCitjbGFzcyBFeHByZXNzaW9uIDogcHVibGljIFBhcnNlTm9k
ZQoreworcHVibGljOgorICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29udGV4dCYgZXZhbHVhdGlvbkNv
bnRleHQoKTsKKworICAgIEV4cHJlc3Npb24oKTsKKyAgICB2aXJ0dWFsIH5FeHByZXNzaW9uKCk7
CisgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0OworCisgICAgdm9pZCBhZGRTdWJF
eHByZXNzaW9uKEV4cHJlc3Npb24qIGV4cHIpOworICAgIHZvaWQgb3B0aW1pemUoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdW5zaWdu
ZWQgaW50IHN1YkV4cHJDb3VudCgpIGNvbnN0OworICAgIEV4cHJlc3Npb24qIHN1YkV4cHIodW5z
aWduZWQgaSk7CisgICAgY29uc3QgRXhwcmVzc2lvbiogc3ViRXhwcih1bnNpZ25lZCBpKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFZhbHVlIGRvRXZhbHVhdGUoKSBjb25zdCA9IDA7
CisKKyAgICBWZWN0b3I8RXhwcmVzc2lvbio+IG1fc3ViRXhwcmVzc2lvbnM7CisgICAgVmFsdWUq
IG1fY29uc3RhbnRWYWx1ZTsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
KworI2VuZGlmIC8vIEVYUFJFU1NJT05fSAorCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBh
dGhTdGVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhTdGVwLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFN0ZXAuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2gg
UmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlhQYXRoU3RlcC5oIgorCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTmFtZWRBdHRy
TWFwLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJY
UGF0aE5TUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFhQYXRo
IHsKKworU3RyaW5nIFN0ZXA6OmF4aXNBc1N0cmluZyhBeGlzVHlwZSBheGlzKQoreworICAgIHN3
aXRjaCAoYXhpcykgeworICAgICAgICBjYXNlIEFuY2VzdG9yQXhpczogcmV0dXJuICJhbmNlc3Rv
ciI7CisgICAgICAgIGNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOiByZXR1cm4gImFuY2VzdG9yLW9y
LXNlbGYiOworICAgICAgICBjYXNlIEF0dHJpYnV0ZUF4aXM6IHJldHVybiAiYXR0cmlidXRlIjsK
KyAgICAgICAgY2FzZSBDaGlsZEF4aXM6IHJldHVybiAiY2hpbGQiOworICAgICAgICBjYXNlIERl
c2NlbmRhbnRBeGlzOiByZXR1cm4gImRlc2NlbmRhbnQiOworICAgICAgICBjYXNlIERlc2NlbmRh
bnRPclNlbGZBeGlzOiByZXR1cm4gImRlc2NlbmRhbnQtb3Itc2VsZiI7CisgICAgICAgIGNhc2Ug
Rm9sbG93aW5nQXhpczogcmV0dXJuICJmb2xsb3dpbmciOworICAgICAgICBjYXNlIEZvbGxvd2lu
Z1NpYmxpbmdBeGlzOiByZXR1cm4gImZvbGxvd2luZy1zaWJsaW5nIjsKKyAgICAgICAgY2FzZSBO
YW1lc3BhY2VBeGlzOiByZXR1cm4gIm5hbWVzcGFjZSI7CisgICAgICAgIGNhc2UgUGFyZW50QXhp
czogcmV0dXJuICJwYXJlbnQiOworICAgICAgICBjYXNlIFByZWNlZGluZ0F4aXM6IHJldHVybiAi
cHJlY2VkaW5nIjsKKyAgICAgICAgY2FzZSBQcmVjZWRpbmdTaWJsaW5nQXhpczogcmV0dXJuICJw
cmVjZWRpbmctc2libGluZyI7CisgICAgICAgIGNhc2UgU2VsZkF4aXM6IHJldHVybiAic2VsZiI7
CisgICAgfQorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RlcDo6U3RlcCgpCit7Cit9CisK
K1N0ZXA6OlN0ZXAoQXhpc1R5cGUgYXhpcywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3Qg
VmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzKQorICAgIDogbV9heGlzKGF4aXMpLAorICAg
IG1fbm9kZVRlc3Qobm9kZVRlc3QpLAorICAgIG1fcHJlZGljYXRlcyhwcmVkaWNhdGVzKQorewor
fQorCitTdGVwOjp+U3RlcCgpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcHJlZGljYXRlcyk7
Cit9CisKK05vZGVWZWN0b3IgU3RlcDo6ZXZhbHVhdGUoTm9kZSogY29udGV4dCkgY29uc3QKK3sK
KyAgICBMT0coWFBhdGgsICJFdmFsdWF0aW5nIHN0ZXAsIGF4aXM9JyVzJywgbm9kZXRlc3Q9JyVz
JywgJXUgcHJlZGljYXRlcyIsCisgICAgICAgICAgICBheGlzQXNTdHJpbmcobV9heGlzKS5hc2Np
aSgpLCBtX25vZGVUZXN0LmFzY2lpKCksIG1fcHJlZGljYXRlcy5zaXplKCkpOworICAgIGlmIChj
b250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgTE9HKFhQ
YXRoLCAiQ29udGV4dCBub2RlIGlzIGFuIGVsZW1lbnQgY2FsbGVkICVzIiwgY29udGV4dC0+bm9k
ZU5hbWUoKS5hc2NpaSgpKTsKKyAgICBlbHNlIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5v
ZGU6OkFUVFJJQlVURV9OT0RFKQorICAgICAgICBMT0coWFBhdGgsICJDb250ZXh0IG5vZGUgaXMg
YW4gYXR0cmlidXRlIGNhbGxlZCAlcyB3aXRoIHZhbHVlICVzIiwgCisgICAgICAgICAgICAgICBj
b250ZXh0LT5ub2RlTmFtZSgpLmFzY2lpKCksIAorICAgICAgICAgICAgICAgY29udGV4dC0+bm9k
ZVZhbHVlKCkuYXNjaWkoKSk7CisgICAgZWxzZQorICAgICAgICBMT0coWFBhdGgsICJDb250ZXh0
IG5vZGUgaXMgb2YgdW5rbm93biB0eXBlICVkIiwgY29udGV4dC0+bm9kZVR5cGUoKSk7CisKKyAg
ICBOb2RlVmVjdG9yIGluTm9kZXMgPSBub2Rlc0luQXhpcyhjb250ZXh0KSwgb3V0Tm9kZXM7Cisg
ICAgTE9HKFhQYXRoLCAiQXhpcyAlcyBtYXRjaGVzICVkIG5vZGVzLiIsIGF4aXNBc1N0cmluZyht
X2F4aXMpLmFzY2lpKCksIGluTm9kZXMuc2l6ZSgpKTsKKworICAgIGluTm9kZXMgPSBub2RlVGVz
dE1hdGNoZXMoaW5Ob2Rlcyk7CisgICAgTE9HKFhQYXRoLCAiTm9kZXRlc3QgJXMgdHJpbXMgdGhp
cyBudW1iZXIgdG8gJWQiLCBtX25vZGVUZXN0LmFzY2lpKCksIGluTm9kZXMuc2l6ZSgpKTsKKyAg
ICAKKyAgICBvdXROb2RlcyA9IGluTm9kZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcHJlZGljYXRlcy5zaXplKCk7IGkrKykgeworICAgICAgICBQcmVkaWNhdGUqIHByZWRpY2F0
ZSA9IG1fcHJlZGljYXRlc1tpXTsKKworICAgICAgICBvdXROb2Rlcy5jbGVhcigpOworICAgICAg
ICBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLnNpemUgPSBpbk5vZGVzLnNpemUoKTsK
KyAgICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbiA9IDE7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbk5vZGVzLnNpemUoKTsgaisrKSB7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gaW5Ob2Rlc1tqXS5nZXQoKTsKKworICAgICAgICAgICAg
RXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlID0gbm9kZTsKKyAgICAgICAgICAg
IEV2YWx1YXRpb25Db250ZXh0IGJhY2t1cEN0eCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250
ZXh0KCk7CisgICAgICAgICAgICBpZiAocHJlZGljYXRlLT5ldmFsdWF0ZSgpKQorICAgICAgICAg
ICAgICAgIG91dE5vZGVzLmFwcGVuZChub2RlKTsKKworICAgICAgICAgICAgRXhwcmVzc2lvbjo6
ZXZhbHVhdGlvbkNvbnRleHQoKSA9IGJhY2t1cEN0eDsKKyAgICAgICAgICAgICsrRXhwcmVzc2lv
bjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIExP
RyhYUGF0aCwgIlx0UHJlZGljYXRlIHRyaW1zIHRoaXMgbnVtYmVyIHRvICVkIiwgb3V0Tm9kZXMu
c2l6ZSgpKTsKKworICAgICAgICBpbk5vZGVzID0gb3V0Tm9kZXM7CisgICAgfQorICAgIHJldHVy
biBvdXROb2RlczsKK30KKworTm9kZVZlY3RvciBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250
ZXh0KSBjb25zdAoreworICAgIE5vZGVWZWN0b3Igbm9kZXM7CisgICAgc3dpdGNoIChtX2F4aXMp
IHsKKyAgICAgICAgY2FzZSBDaGlsZEF4aXM6IHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbiA9
IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCisgICAgICAg
ICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworCisgICAgICAgICAgICByZXR1cm4gbm9kZXM7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBEZXNjZW5kYW50QXhpczogCisgICAgICAgICAgICBmb3Ig
KE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKGNvbnRleHQpKQorICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAg
ICAgIHJldHVybiBub2RlczsKKyAgICAgICAgY2FzZSBQYXJlbnRBeGlzOgorICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKGNvbnRleHQtPnBhcmVudE5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
bm9kZXM7CisgICAgICAgIGNhc2UgQW5jZXN0b3JBeGlzOiB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBjb250ZXh0LT5wYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCisg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworCisgICAgICAgICAgICByZXR1cm4gbm9k
ZXM7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGb2xsb3dpbmdTaWJsaW5nQXhpczogeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUg
fHwKKyAgICAgICAgICAgICAgICAgY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpYUEFUSF9O
QU1FU1BBQ0VfTk9ERSkgCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVWZWN0b3IoKTsKKwor
ICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+bmV4dFNpYmxpbmcoKTsgbjsgbiA9
IG4tPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBQcmVjZWRpbmdTaWJsaW5nQXhpczogeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKKyAgICAgICAgICAgICAgICAgY29u
dGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTm9kZVZlY3RvcigpOworCisgICAgICAgICAgICBmb3IgKE5vZGUqIG4g
PSBjb250ZXh0LT5wcmV2aW91c1NpYmxpbmcoKTsgbjsgbiA9IG4tPnByZXZpb3VzU2libGluZygp
KQorICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKworICAgICAgICAgICAgcmV0dXJu
IG5vZGVzOworICAgICAgICB9CisgICAgICAgIGNhc2UgRm9sbG93aW5nQXhpczogeworICAgICAg
ICAgICAgZm9yIChOb2RlICpwID0gY29udGV4dDsgIWlzUm9vdERvbU5vZGUocCk7IHAgPSBwLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBwLT5uZXh0U2li
bGluZygpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBu
b2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYyA9IG4tPmZp
cnN0Q2hpbGQoKTsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUobikpCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQoYyk7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBQcmVjZWRpbmdBeGlzOiB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIHAgPSBjb250ZXh0OyAh
aXNSb290RG9tTm9kZShwKTsgcCA9IHAtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgICAg
IGZvciAoTm9kZSogbiA9IHAtPnByZXZpb3VzU2libGluZygpOyBuIDsgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBjID0gbi0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+
dHJhdmVyc2VOZXh0Tm9kZShuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVu
ZChjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbm9kZXM7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOiB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVWZWN0b3IoKTsKKworICAgICAgICAgICAgTmFtZWRB
dHRyTWFwKiBhdHRycyA9IGNvbnRleHQtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmICgh
YXR0cnMpIHsKKyAgICAgICAgICAgICAgICBMT0coWFBhdGgsICJOb2RlOjphdHRyaWJ1dGVzKCkg
cmV0dXJuZWQgTlVMTCEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGF0dHJz
LT5sZW5ndGgoKTsgKytpKSAKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQgKGF0dHJzLT5p
dGVtKGkpKTsKKworICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICB9CisgICAgICAg
IGNhc2UgTmFtZXNwYWNlQXhpczogeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBl
KCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgIHJldHVybiBOb2RlVmVj
dG9yKCk7CisKKyAgICAgICAgICAgIGJvb2wgZm91bmRYbWxOc05vZGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRleHQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBOYW1lZEF0dHJNYXAqIGF0dHJzID0gbm9kZS0+
YXR0cmlidXRlcygpOworICAgICAgICAgICAgICAgIGlmICghYXR0cnMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTE9HKFhQYXRoLCAiTm9kZTo6YXR0cmlidXRlcygpIHJldHVybmVkIE5VTEwhIik7
CisKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGF0dHJzLT5pdGVtKGkp
LmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobi0+bm9kZU5hbWUoKS5zdGFydHNXaXRo
KCJ4bWxuczoiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPm5vZGVOYW1lKCkgPT0gInhtbG5zIiAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3VuZFhtbE5zTm9kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmRYbWxOc05vZGUgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFuLT5ub2RlVmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGVz
OworICAgICAgICB9CisgICAgICAgIGNhc2UgU2VsZkF4aXM6CisgICAgICAgICAgICBub2Rlcy5h
cHBlbmQoY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIGNhc2Ug
RGVzY2VuZGFudE9yU2VsZkF4aXM6CisgICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7
CisgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQpKQorICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZChuKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgY2FzZSBBbmNlc3Rv
ck9yU2VsZkF4aXM6IHsKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisKKyAgICAgICAg
ICAgIHJldHVybiBub2RlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOb2RlVmVj
dG9yKCk7Cit9CisKKworTm9kZVZlY3RvciBTdGVwOjpub2RlVGVzdE1hdGNoZXMoY29uc3QgTm9k
ZVZlY3RvciYgbm9kZXMpIGNvbnN0Cit7CisgICAgU3RyaW5nIG5zID0gbmFtZXNwYWNlRnJvbU5v
ZGV0ZXN0KG1fbm9kZVRlc3QpOworICAgIE5vZGVWZWN0b3IgbWF0Y2hlczsKKyAgICBpZiAobV9u
b2RlVGVzdCA9PSAiKiIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBwcmltYXJ5Tm9kZVR5cGUobV9h
eGlzKSkgeworICAgICAgICAgICAgICAgIGlmIChucy5pc0VtcHR5KCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPm5hbWVzcGFjZVVSSSgpID09IG5zKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgfSBlbHNlIGlmIChtX25v
ZGVUZXN0ID09ICJ0ZXh0KCkiKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldLmdl
dCgpOworICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
IHx8CisgICAgICAgICAgICAgICAgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNU
SU9OX05PREUpIAorICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9
PSAiY29tbWVudCgpIikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsK
KyAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkK
KyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbWF0Y2hlczsKKyAgICB9IGVsc2UgaWYgKG1fbm9kZVRlc3Quc3RhcnRzV2l0aCgi
cHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIpKSB7CisgICAgICAgIFN0cmluZyBwYXJhbTsKKworICAg
ICAgICBjb25zdCBpbnQgc3BhY2UgPSBtX25vZGVUZXN0LmZpbmQoJyAnKTsKKyAgICAgICAgaWYg
KHNwYWNlID4gLTEpCisgICAgICAgICAgICBwYXJhbSA9IG1fbm9kZVRlc3QuZGVwcmVjYXRlZFN0
cmluZygpLm1pZChzcGFjZSArIDEpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ld
LmdldCgpOworCisgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9D
RVNTSU5HX0lOU1RSVUNUSU9OX05PREUgJiYKKyAgICAgICAgICAgICAgICAocGFyYW0uaXNFbXB0
eSgpIHx8IG5vZGUtPm5vZGVOYW1lKCkgPT0gcGFyYW0pKQorICAgICAgICAgICAgICAgICAgICBt
YXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgfSAgICAKKyAgICAgICAgcmV0dXJuIG1hdGNo
ZXM7CisgICAgfSBlbHNlIGlmIChtX25vZGVUZXN0ID09ICJub2RlKCkiKQorICAgICAgICByZXR1
cm4gbm9kZXM7CisgICAgZWxzZSB7CisgICAgICAgIFN0cmluZyBwcmVmaXgsIGxvY2FsTmFtZTsK
KworICAgICAgICBjb25zdCBpbnQgY29sb24gPSBtX25vZGVUZXN0LmZpbmQoJzonKTsKKyAgICAg
ICAgaWYgKGNvbG9uID4gLTEpIHsKKyAgICAgICAgICAgIHByZWZpeCA9IG1fbm9kZVRlc3QubGVm
dChjb2xvbik7CisgICAgICAgICAgICBsb2NhbE5hbWUgPSBtX25vZGVUZXN0LmRlcHJlY2F0ZWRT
dHJpbmcoKS5taWQoY29sb24gKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxv
Y2FsTmFtZSA9IG1fbm9kZVRlc3Q7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXByZWZpeC5p
c0VtcHR5KCkgJiYKKyAgICAgICAgICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCku
cmVzb2x2ZXItPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIC8qIEZJWE1FOiBUaHJvdyBOQU1FU1BBQ0VfRVJSIGV4Y2VwdGlvbiAqLworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fYXhpcyA9PSBBdHRyaWJ1dGVBeGlzKSB7CisgICAgICAg
ICAgICAvLyBJbiBYUGF0aCBsYW5kLCBuYW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBhY2Nlc3NpYmxl
CisgICAgICAgICAgICAvLyBvbiB0aGUgYXR0cmlidXRlIGF4aXMuCisgICAgICAgICAgICBpZiAo
bG9jYWxOYW1lID09ICJ4bWxucyIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZU5hbWUoKSA9PSBsb2NhbE5h
bWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOyAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAg
ICAgICAgfSBlbHNlIGlmIChtX2F4aXMgPT0gTmFtZXNwYWNlQXhpcykgeworICAgICAgICAgICAg
TE9HKFhQYXRoLCAiTm9kZSB0ZXN0ICVzIG9uIGF4aXMgJXMgaXMgbm90IGltcGxlbWVudGVkIHll
dC4iLAorICAgICAgICAgICAgICAgIG1fbm9kZVRlc3QuYXNjaWkoKSwgYXhpc0FzU3RyaW5nKG1f
YXhpcykuYXNjaWkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgCisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRh
Z1FOYW1lIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBlbGVtZW50IG5hbWUgaW4gdXBw
ZXJjYXNlIAorICAgICAgICAgICAgICAgIC8vIGxpa2Ugd2UgZ2V0IHdpdGggSFRNTCBlbGVtZW50
cy4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5U
X05PREUgJiYKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT50YWdRTmFtZSgpLnRvU3RyaW5nKCkgPT0gbG9jYWxOYW1lKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgTE9HKFhQYXRoLCAiTm9kZSB0ZXN0ICVzIG9uIGF4aXMgJXMgaXMgbm90IGltcGxlbWVu
dGVkIHlldC4iLAorICAgICAgICBtX25vZGVUZXN0LmFzY2lpKCksIGF4aXNBc1N0cmluZyhtX2F4
aXMpLmFzY2lpKCkpOworCisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisKK3ZvaWQgU3RlcDo6b3B0
aW1pemUoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6
ZSgpOyBpKyspCisgICAgICAgIG1fcHJlZGljYXRlc1tpXS0+b3B0aW1pemUoKTsKK30KKworU3Ry
aW5nIFN0ZXA6Om5hbWVzcGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVUZXN0KSBj
b25zdAoreworICAgIGludCBpID0gbm9kZVRlc3QuZmluZCgnOicpOworICAgIGlmIChpID09IC0x
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgcHJlZml4KG5vZGVUZXN0
LmxlZnQoaSkpOworICAgIAorICAgIE5vZGUqIGN0eE5vZGUgPSBFeHByZXNzaW9uOjpldmFsdWF0
aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CisgICAgcmV0dXJuIGN0eE5vZGUtPmxvb2t1cE5hbWVz
cGFjZVVSSShwcmVmaXgpOworfQorCitOb2RlOjpOb2RlVHlwZSBTdGVwOjpwcmltYXJ5Tm9kZVR5
cGUoQXhpc1R5cGUgYXhpcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICAgICAg
Y2FzZSBBdHRyaWJ1dGVBeGlzOgorICAgICAgICAgICAgcmV0dXJuIE5vZGU6OkFUVFJJQlVURV9O
T0RFOworICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6CisgICAgICAgICAgICByZXR1cm4gTm9k
ZTo6WFBBVEhfTkFNRVNQQUNFX05PREU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gTm9kZTo6RUxFTUVOVF9OT0RFOworICAgIH0KK30KKworfQorfQorCisjZW5kaWYgLy8g
WFBBVEhfU1VQUE9SVApJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoR3JhbW1hci55Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aEdyYW1tYXIueQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MDIgQEAKKyV7CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJYUGF0
aFBhcnNlci5oIgorI2luY2x1ZGUgIlhQYXRoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiWFBhdGhQ
YXRoLmgiCisjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCisjaW5jbHVkZSAiWFBhdGhQcmVkaWNhdGUu
aCIKKyNpbmNsdWRlICJYUGF0aFV0aWwuaCIKKyNpbmNsdWRlICJYUGF0aFZhcmlhYmxlUmVmZXJl
bmNlLmgiCisgICAgCisjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSAiWFBh
dGhFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNkZWZpbmUgWVlE
RUJVRyAwCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VyCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFhQYXRoOworCislfQorCislcHVyZV9wYXJzZXIKKwor
JXVuaW9uCit7CisgICAgU3RlcDo6QXhpc1R5cGUgYXhpc1R5cGU7CisgICAgaW50ICAgICAgICBu
dW07CisgICAgU3RyaW5nICpzdHI7CisgICAgRXhwcmVzc2lvbiogZXhwcjsKKyAgICBWZWN0b3I8
UHJlZGljYXRlKj4qIHByZWRMaXN0OworICAgIFZlY3RvcjxFeHByZXNzaW9uKj4qIGFyZ0xpc3Q7
CisgICAgU3RlcCogc3RlcDsKKyAgICBMb2NhdGlvblBhdGggKmxvY2F0aW9uUGF0aDsKK30KKwor
JXsKKworaW50IHhwYXRoeXlsZXgoWVlTVFlQRSAqeXlsdmFsKSB7IHJldHVybiBQYXJzZXI6OmN1
cnJlbnQoKS0+bGV4KHl5bHZhbCk7IH0KK3ZvaWQgeHBhdGh5eWVycm9yKGNvbnN0IGNoYXIgKnN0
cikgeyB9CisgICAgCislfQorCislbGVmdCA8bnVtPiBNVUxPUCBSRUxPUCBFUU9QCislbGVmdCA8
c3RyPiBQTFVTIE1JTlVTCislbGVmdCA8c3RyPiBPUiBBTkQKKyV0b2tlbiA8YXhpc1R5cGU+IEFY
SVNOQU1FCisldG9rZW4gPHN0cj4gTk9ERVRZUEUgUEkgRlVOQ1RJT05OQU1FIExJVEVSQUwKKyV0
b2tlbiA8c3RyPiBWQVJJQUJMRVJFRkVSRU5DRSBOVU1CRVIKKyV0b2tlbiA8c3RyPiBET1RET1Qg
U0xBU0hTTEFTSCBOQU1FVEVTVAorJXRva2VuIEVSUk9SCisKKyV0eXBlIDxsb2NhdGlvblBhdGg+
IExvY2F0aW9uUGF0aAorJXR5cGUgPGxvY2F0aW9uUGF0aD4gQWJzb2x1dGVMb2NhdGlvblBhdGgK
KyV0eXBlIDxsb2NhdGlvblBhdGg+IFJlbGF0aXZlTG9jYXRpb25QYXRoCisldHlwZSA8c3RlcD4g
U3RlcAorJXR5cGUgPGF4aXNUeXBlPiBBeGlzU3BlY2lmaWVyCisldHlwZSA8c3RlcD4gRGVzY2Vu
ZGFudE9yU2VsZgorJXR5cGUgPHN0cj4gTm9kZVRlc3QKKyV0eXBlIDxleHByPiBQcmVkaWNhdGUK
KyV0eXBlIDxwcmVkTGlzdD4gUHJlZGljYXRlTGlzdAorJXR5cGUgPHN0ZXA+IEFiYnJldmlhdGVk
U3RlcAorJXR5cGUgPGV4cHI+IEV4cHIKKyV0eXBlIDxleHByPiBQcmltYXJ5RXhwcgorJXR5cGUg
PGV4cHI+IEZ1bmN0aW9uQ2FsbAorJXR5cGUgPGFyZ0xpc3Q+IEFyZ3VtZW50TGlzdAorJXR5cGUg
PGV4cHI+IEFyZ3VtZW50CisldHlwZSA8ZXhwcj4gVW5pb25FeHByCisldHlwZSA8ZXhwcj4gUGF0
aEV4cHIKKyV0eXBlIDxleHByPiBGaWx0ZXJFeHByCisldHlwZSA8ZXhwcj4gT3JFeHByCisldHlw
ZSA8ZXhwcj4gQW5kRXhwcgorJXR5cGUgPGV4cHI+IEVxdWFsaXR5RXhwcgorJXR5cGUgPGV4cHI+
IFJlbGF0aW9uYWxFeHByCisldHlwZSA8ZXhwcj4gQWRkaXRpdmVFeHByCisldHlwZSA8ZXhwcj4g
TXVsdGlwbGljYXRpdmVFeHByCisldHlwZSA8ZXhwcj4gVW5hcnlFeHByCisKKyUlCisKK0V4cHI6
CisgICAgT3JFeHByCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIp
LT5tX3RvcEV4cHIgPSAkMTsKKyAgICB9CisgICAgOworCitMb2NhdGlvblBhdGg6CisgICAgUmVs
YXRpdmVMb2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQkLT5tX2Fic29sdXRlID0gZmFsc2U7
CisgICAgfQorICAgIHwKKyAgICBBYnNvbHV0ZUxvY2F0aW9uUGF0aAorICAgIHsKKyAgICAgICAg
JCQtPm1fYWJzb2x1dGUgPSB0cnVlOworICAgIH0KKyAgICA7CisKK0Fic29sdXRlTG9jYXRpb25Q
YXRoOgorICAgICcvJworICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9jYXRpb25QYXRoOworICAg
ICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7
CisgICAgfQorICAgIHwKKyAgICAnLycgUmVsYXRpdmVMb2NhdGlvblBhdGgKKyAgICB7CisgICAg
ICAgICQkID0gJDI7CisgICAgfQorICAgIHwKKyAgICBEZXNjZW5kYW50T3JTZWxmIFJlbGF0aXZl
TG9jYXRpb25QYXRoCisgICAgeworICAgICAgICAkJCA9ICQyOworICAgICAgICAkJC0+bV9zdGVw
cy5pbnNlcnQoMCwgJDEpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51
bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAgICB9CisgICAgOworCitSZWxhdGl2ZUxvY2F0aW9u
UGF0aDoKKyAgICBTdGVwCisgICAgeworICAgICAgICAkJCA9IG5ldyBMb2NhdGlvblBhdGg7Cisg
ICAgICAgICQkLT5tX3N0ZXBzLmFwcGVuZCgkMSk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgfQorICAgIHwK
KyAgICBSZWxhdGl2ZUxvY2F0aW9uUGF0aCAnLycgU3RlcAorICAgIHsKKyAgICAgICAgJCQtPm1f
c3RlcHMuYXBwZW5kKCQzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+
dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAgfQorICAgIHwKKyAgICBSZWxhdGl2ZUxvY2F0
aW9uUGF0aCBEZXNjZW5kYW50T3JTZWxmIFN0ZXAKKyAgICB7CisgICAgICAgICQkLT5tX3N0ZXBz
LmFwcGVuZCgkMik7CisgICAgICAgICQkLT5tX3N0ZXBzLmFwcGVuZCgkMyk7CisgICAgICAgIHN0
YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDIpOworICAg
ICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQz
KTsKKyAgICB9CisgICAgOworCitTdGVwOgorICAgIE5vZGVUZXN0CisgICAgeworICAgICAgICAk
JCA9IG5ldyBTdGVwKFN0ZXA6OkNoaWxkQXhpcywgKiQxKTsKKyAgICAgICAgZGVsZXRlICQxOwor
ICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgk
JCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJp
bmcoJDEpOworICAgIH0KKyAgICB8CisgICAgTm9kZVRlc3QgUHJlZGljYXRlTGlzdAorICAgIHsK
KyAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVwOjpDaGlsZEF4aXMsICokMSwgKiQyKTsKKyAgICAg
ICAgZGVsZXRlICQxOworICAgICAgICBkZWxldGUgJDI7CisgICAgICAgIHN0YXRpY19jYXN0PFBh
cnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclN0cmluZygkMSk7CisgICAgICAgIHN0YXRp
Y19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQcmVkaWNhdGVWZWN0b3IoJDIpOwor
ICAgIH0KKyAgICB8CisgICAgQXhpc1NwZWNpZmllciBOb2RlVGVzdAorICAgIHsKKyAgICAgICAg
JCQgPSBuZXcgU3RlcCgkMSwgKiQyKTsKKyAgICAgICAgZGVsZXRlICQyOworICAgICAgICBzdGF0
aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAgICAg
IHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDIpOworICAg
IH0KKyAgICB8CisgICAgQXhpc1NwZWNpZmllciBOb2RlVGVzdCBQcmVkaWNhdGVMaXN0CisgICAg
eworICAgICAgICAkJCA9IG5ldyBTdGVwKCQxLCAqJDIsICAqJDMpOworICAgICAgICBkZWxldGUg
JDI7CisgICAgICAgIGRlbGV0ZSAkMzsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFy
c2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIq
PihwYXJzZXIpLT51bnJlZ2lzdGVyU3RyaW5nKCQyKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFy
c2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclByZWRpY2F0ZVZlY3RvcigkMyk7CisgICAgfQorICAg
IHwKKyAgICBBYmJyZXZpYXRlZFN0ZXAKKyAgICA7CisKK0F4aXNTcGVjaWZpZXI6CisgICAgQVhJ
U05BTUUKKyAgICB8CisgICAgJ0AnCisgICAgeworICAgICAgICAkJCA9IFN0ZXA6OkF0dHJpYnV0
ZUF4aXM7CisgICAgfQorICAgIDsKKworTm9kZVRlc3Q6CisgICAgTkFNRVRFU1QKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGludCBjb2xvbiA9ICQxLT5maW5kKCc6Jyk7CisgICAgICAgIGlmIChjb2xv
biA+IC0xKSB7CisgICAgICAgICAgICBTdHJpbmcgcHJlZml4KCQxLT5sZWZ0KGNvbG9uKSk7Cisg
ICAgICAgICAgICBYUGF0aE5TUmVzb2x2ZXIgKnJlc29sdmVyID0gRXhwcmVzc2lvbjo6ZXZhbHVh
dGlvbkNvbnRleHQoKS5yZXNvbHZlcjsKKyAgICAgICAgICAgIGlmICghcmVzb2x2ZXIgfHwgcmVz
b2x2ZXItPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+bV9nb3ROYW1lc3BhY2VFcnJvciA9
IHRydWU7CisgICAgICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICB8CisgICAgTk9ERVRZUEUgJygnICcpJworICAgIHsKKyAgICAgICAgJCQg
PSBuZXcgU3RyaW5nKCokMSArICIoKSIpOworICAgICAgICBkZWxldGUgJDE7CisgICAgICAgIHN0
YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyU3RyaW5nKCQkKTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclN0cmluZygkMSk7CisgICAg
fQorICAgIHwKKyAgICBQSSAnKCcgJyknCisgICAgfAorICAgIFBJICcoJyBMSVRFUkFMICcpJwor
ICAgIHsKKyAgICAgICAgU3RyaW5nIHMgPSAqJDEgKyAiICIgKyAqJDM7CisgICAgICAgICQkID0g
bmV3IFN0cmluZyhzLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAg
ICAgIGRlbGV0ZSAkMTsKKyAgICAgICAgZGVsZXRlICQzOworICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclN0cmluZygkJCk7CisgICAgICAgIHN0YXRpY19jYXN0
PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOyAgICAgICAgCisgICAgICAg
IHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDMpOworICAg
IH0KKyAgICA7CisKK1ByZWRpY2F0ZUxpc3Q6CisgICAgUHJlZGljYXRlCisgICAgeworICAgICAg
ICAkJCA9IG5ldyBWZWN0b3I8UHJlZGljYXRlKj47CisgICAgICAgICQkLT5hcHBlbmQobmV3IFBy
ZWRpY2F0ZSgkMSkpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdp
c3RlclByZWRpY2F0ZVZlY3RvcigkJCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBh
cnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgIH0KKyAgICB8CisgICAgUHJlZGlj
YXRlTGlzdCBQcmVkaWNhdGUKKyAgICB7CisgICAgICAgICQkLT5hcHBlbmQobmV3IFByZWRpY2F0
ZSgkMikpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVy
UGFyc2VOb2RlKCQyKTsKKyAgICB9CisgICAgOworCitQcmVkaWNhdGU6CisgICAgJ1snIEV4cHIg
J10nCisgICAgeworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7CisKK0Rlc2NlbmRhbnRP
clNlbGY6CisgICAgU0xBU0hTTEFTSAorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVw
OjpEZXNjZW5kYW50T3JTZWxmQXhpcywgIm5vZGUoKSIpOworICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAgfQorICAgIDsKKwor
QWJicmV2aWF0ZWRTdGVwOgorICAgICcuJworICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcChT
dGVwOjpTZWxmQXhpcywgIm5vZGUoKSIpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAgfQorICAgIHwKKyAgICBET1RET1QK
KyAgICB7CisgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6UGFyZW50QXhpcywgIm5vZGUoKSIp
OworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9k
ZSgkJCk7CisgICAgfQorICAgIDsKKworUHJpbWFyeUV4cHI6CisgICAgVkFSSUFCTEVSRUZFUkVO
Q0UKKyAgICB7CisgICAgICAgICQkID0gbmV3IFZhcmlhYmxlUmVmZXJlbmNlKCokMSk7CisgICAg
ICAgIGRlbGV0ZSAkMTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVn
aXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIp
LT51bnJlZ2lzdGVyU3RyaW5nKCQxKTsKKyAgICB9CisgICAgfAorICAgICcoJyBFeHByICcpJwor
ICAgIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgfAorICAgIExJVEVSQUwKKyAgICB7
CisgICAgICAgICQkID0gbmV3IFN0cmluZ0V4cHJlc3Npb24oKiQxKTsKKyAgICAgICAgZGVsZXRl
ICQxOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNl
Tm9kZSgkJCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0
ZXJTdHJpbmcoJDEpOyAgICAgICAgCisgICAgfQorICAgIHwKKyAgICBOVU1CRVIKKyAgICB7Cisg
ICAgICAgICQkID0gbmV3IE51bWJlcigkMS0+ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkp
OworICAgICAgICBkZWxldGUgJDE7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNl
ciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4o
cGFyc2VyKS0+dW5yZWdpc3RlclN0cmluZygkMSk7CisgICAgfQorICAgIHwKKyAgICBGdW5jdGlv
bkNhbGwKKyAgICA7CisKK0Z1bmN0aW9uQ2FsbDoKKyAgICBGVU5DVElPTk5BTUUgJygnICcpJwor
ICAgIHsKKyAgICAgICAgJCQgPSBGdW5jdGlvbkxpYnJhcnk6OnNlbGYoKS5jcmVhdGVGdW5jdGlv
bigkMS0+ZGVwcmVjYXRlZFN0cmluZygpLmxhdGluMSgpKTsKKyAgICAgICAgZGVsZXRlICQxOwor
ICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgk
JCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJp
bmcoJDEpOworICAgIH0KKyAgICB8CisgICAgRlVOQ1RJT05OQU1FICcoJyBBcmd1bWVudExpc3Qg
JyknCisgICAgeworICAgICAgICAkJCA9IEZ1bmN0aW9uTGlicmFyeTo6c2VsZigpLmNyZWF0ZUZ1
bmN0aW9uKCQxLT5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4xKCksICokMyk7CisgICAgICAgIGRl
bGV0ZSAkMTsKKyAgICAgICAgZGVsZXRlICQzOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIq
PihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBh
cnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJTdHJpbmcoJDEpOworICAgICAgICBzdGF0aWNfY2Fz
dDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyRXhwcmVzc2lvblZlY3RvcigkMyk7CisgICAg
fQorICAgIDsKKworQXJndW1lbnRMaXN0OgorICAgIEFyZ3VtZW50CisgICAgeworICAgICAgICAk
JCA9IG5ldyBWZWN0b3I8RXhwcmVzc2lvbio+OworICAgICAgICAkJC0+YXBwZW5kKCQxKTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJFeHByZXNzaW9uVmVj
dG9yKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3Rl
clBhcnNlTm9kZSgkMSk7CisgICAgfQorICAgIHwKKyAgICBBcmd1bWVudExpc3QgJywnIEFyZ3Vt
ZW50CisgICAgeworICAgICAgICAkJC0+YXBwZW5kKCQzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAgfQorICAgIDsK
KworQXJndW1lbnQ6CisgICAgRXhwcgorICAgIDsKKworCitVbmlvbkV4cHI6CisgICAgUGF0aEV4
cHIKKyAgICB8CisgICAgVW5pb25FeHByICd8JyBQYXRoRXhwcgorICAgIHsKKyAgICAgICAgJCQg
PSBuZXcgVW5pb247CisgICAgICAgICQkLT5hZGRTdWJFeHByZXNzaW9uKCQxKTsKKyAgICAgICAg
JCQtPmFkZFN1YkV4cHJlc3Npb24oJDMpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgICAgICBzdGF0aWNfY2Fz
dDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICB9CisgICAg
OworCitQYXRoRXhwcjoKKyAgICBMb2NhdGlvblBhdGgKKyAgICB7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIHwKKyAgICBGaWx0ZXJFeHByCisgICAgeworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICB8CisgICAgRmlsdGVyRXhwciAnLycgUmVsYXRpdmVMb2NhdGlvblBhdGgKKyAg
ICB7CisgICAgICAgICQzLT5tX2Fic29sdXRlID0gdHJ1ZTsKKyAgICAgICAgJCQgPSBuZXcgUGF0
aChzdGF0aWNfY2FzdDxGaWx0ZXIqPigkMSksICQzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFy
c2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBzdGF0aWNfY2Fz
dDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAg
fQorICAgIHwKKyAgICBGaWx0ZXJFeHByIERlc2NlbmRhbnRPclNlbGYgUmVsYXRpdmVMb2NhdGlv
blBhdGgKKyAgICB7CisgICAgICAgICQzLT5tX3N0ZXBzLmluc2VydCgwLCAkMik7CisgICAgICAg
ICQzLT5tX2Fic29sdXRlID0gdHJ1ZTsKKyAgICAgICAgJCQgPSBuZXcgUGF0aChzdGF0aWNfY2Fz
dDxGaWx0ZXIqPigkMSksICQzKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2Vy
KS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFy
c2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CisgICAgfQorICAgIDsKKwor
RmlsdGVyRXhwcjoKKyAgICBQcmltYXJ5RXhwcgorICAgIHsKKyAgICAgICAgJCQgPSAkMTsKKyAg
ICB9CisgICAgfAorICAgIFByaW1hcnlFeHByIFByZWRpY2F0ZUxpc3QKKyAgICB7CisgICAgICAg
ICQkID0gbmV3IEZpbHRlcigkMSwgKiQyKTsKKyAgICAgICAgZGVsZXRlICQyOworICAgICAgICBz
dGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAg
ICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEp
OworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUHJlZGlj
YXRlVmVjdG9yKCQyKTsKKyAgICB9CisgICAgOworCitPckV4cHI6CisgICAgQW5kRXhwcgorICAg
IHwKKyAgICBPckV4cHIgT1IgQW5kRXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9naWNh
bE9wKExvZ2ljYWxPcDo6T1BfT3IsICQxLCAkMyk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAgIHN0YXRp
Y19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgIH0K
KyAgICA7CisKK0FuZEV4cHI6CisgICAgRXF1YWxpdHlFeHByCisgICAgfAorICAgIEFuZEV4cHIg
QU5EIEVxdWFsaXR5RXhwcgorICAgIHsKKyAgICAgICAgJCQgPSBuZXcgTG9naWNhbE9wKExvZ2lj
YWxPcDo6T1BfQW5kLCAkMSwgJDMpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJz
ZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+
KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICB9CisgICAgOwor
CitFcXVhbGl0eUV4cHI6CisgICAgUmVsYXRpb25hbEV4cHIKKyAgICB8CisgICAgRXF1YWxpdHlF
eHByIEVRT1AgUmVsYXRpb25hbEV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IEVxVGVzdE9w
KCQyLCAkMSwgJDMpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdp
c3RlclBhcnNlTm9kZSgkJCk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlcikt
PnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEpOworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihw
YXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKKyAgICB9CisgICAgOworCitSZWxhdGlv
bmFsRXhwcjoKKyAgICBBZGRpdGl2ZUV4cHIKKyAgICB8CisgICAgUmVsYXRpb25hbEV4cHIgUkVM
T1AgQWRkaXRpdmVFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoJDIsICQx
LCAkMyk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnJlZ2lzdGVyUGFy
c2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdp
c3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlcikt
PnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgIH0KKyAgICA7CisKK0FkZGl0aXZlRXhwcjoK
KyAgICBNdWx0aXBsaWNhdGl2ZUV4cHIKKyAgICB8CisgICAgQWRkaXRpdmVFeHByIFBMVVMgTXVs
dGlwbGljYXRpdmVFeHByCisgICAgeworICAgICAgICAkJCA9IG5ldyBOdW1lcmljT3AoTnVtZXJp
Y09wOjpPUF9BZGQsICQxLCAkMyk7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNl
ciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4o
cGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CisgICAgICAgIHN0YXRpY19jYXN0PFBh
cnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDMpOworICAgIH0KKyAgICB8Cisg
ICAgQWRkaXRpdmVFeHByIE1JTlVTIE11bHRpcGxpY2F0aXZlRXhwcgorICAgIHsKKyAgICAgICAg
JCQgPSBuZXcgTnVtZXJpY09wKE51bWVyaWNPcDo6T1BfU3ViLCAkMSwgJDMpOworICAgICAgICBz
dGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CisgICAg
ICAgIHN0YXRpY19jYXN0PFBhcnNlcio+KHBhcnNlciktPnVucmVnaXN0ZXJQYXJzZU5vZGUoJDEp
OworICAgICAgICBzdGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VO
b2RlKCQzKTsKKyAgICB9CisgICAgOworCitNdWx0aXBsaWNhdGl2ZUV4cHI6CisgICAgVW5hcnlF
eHByCisgICAgfAorICAgIE11bHRpcGxpY2F0aXZlRXhwciBNVUxPUCBVbmFyeUV4cHIKKyAgICB7
CisgICAgICAgICQkID0gbmV3IE51bWVyaWNPcCgkMiwgJDEsICQzKTsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOworICAgICAgICBz
dGF0aWNfY2FzdDxQYXJzZXIqPihwYXJzZXIpLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgk
Myk7CisgICAgfQorICAgIDsKKworVW5hcnlFeHByOgorICAgIFVuaW9uRXhwcgorICAgIHwKKyAg
ICBNSU5VUyBVbmFyeUV4cHIKKyAgICB7CisgICAgICAgICQkID0gbmV3IE5lZ2F0aXZlOworICAg
ICAgICAkJC0+YWRkU3ViRXhwcmVzc2lvbigkMik7CisgICAgICAgIHN0YXRpY19jYXN0PFBhcnNl
cio+KHBhcnNlciktPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
UGFyc2VyKj4ocGFyc2VyKS0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMik7CisgICAgfQorICAgIDsK
KworCkluZGV4OiBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS94cGF0aC9pbXBsL1hQYXRoVmFsdWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJ
UycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFhQQVRIX1NVUFBPUlQK
KworI2luY2x1ZGUgIlhQYXRoVmFsdWUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisKK1ZhbHVlOjpWYWx1ZSgpCit7Cit9
CisKK1ZhbHVlOjpWYWx1ZShOb2RlKiB2YWx1ZSkKKyAgICA6IG1fdHlwZShOb2RlVmVjdG9yXykK
K3sKKyAgICBtX25vZGV2ZWN0b3IuYXBwZW5kKHZhbHVlKTsKK30KKworVmFsdWU6OlZhbHVlKGNv
bnN0IE5vZGVWZWN0b3ImIHZhbHVlKQorICAgIDogbV90eXBlKE5vZGVWZWN0b3JfKQorICAgICwg
bV9ub2RldmVjdG9yKHZhbHVlKQoreworfQorCitWYWx1ZTo6VmFsdWUoYm9vbCB2YWx1ZSkKKyAg
ICA6IG1fdHlwZShCb29sZWFuKSwKKyAgICBtX2Jvb2wodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpW
YWx1ZShkb3VibGUgdmFsdWUpCisgICAgOiBtX3R5cGUoTnVtYmVyKSwKKyAgICBtX251bWJlcih2
YWx1ZSkKK3sKK30KKworVmFsdWU6OlZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgOiBt
X3R5cGUoU3RyaW5nXyksCisgICAgbV9zdHJpbmcodmFsdWUpCit7Cit9CisKK1ZhbHVlOjpUeXBl
IFZhbHVlOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlOworfQorCitib29sIFZh
bHVlOjppc05vZGVWZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGUgPT0gTm9kZVZl
Y3Rvcl87Cit9CisKK2Jvb2wgVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdHlwZSA9PSBCb29sZWFuOworfQorCitib29sIFZhbHVlOjppc051bWJlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdHlwZSA9PSBOdW1iZXI7Cit9CisKK2Jvb2wgVmFsdWU6OmlzU3RyaW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlID09IFN0cmluZ187Cit9CisKK05vZGVWZWN0
b3ImIFZhbHVlOjp0b05vZGVWZWN0b3IoKQoreworICAgIGlmIChtX3R5cGUgIT0gTm9kZVZlY3Rv
cl8pIHsKKyAgICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90IGNvbnZlcnQgYW55dGhpbmcgdG8gYSBu
b2RldmVjdG9yLiIpOworICAgIH0KKyAgICByZXR1cm4gbV9ub2RldmVjdG9yOworfQorCitjb25z
dCBOb2RlVmVjdG9yICZWYWx1ZTo6dG9Ob2RlVmVjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAobV90
eXBlICE9IE5vZGVWZWN0b3JfKSB7CisgICAgICAgIExPRyhYUGF0aCwgIkNhbm5vdCBjb252ZXJ0
IGFueXRoaW5nIHRvIGEgbm9kZXZlY3Rvci4iKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1f
bm9kZXZlY3RvcjsgICAgCit9ICAgIAorCitib29sIFZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAor
eworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgTm9kZVZlY3Rvcl86CisgICAg
ICAgICAgICByZXR1cm4gIW1fbm9kZXZlY3Rvci5pc0VtcHR5KCk7CisgICAgICAgIGNhc2UgQm9v
bGVhbjoKKyAgICAgICAgICAgIHJldHVybiBtX2Jvb2w7CisgICAgICAgIGNhc2UgTnVtYmVyOgor
ICAgICAgICAgICAgcmV0dXJuIG1fbnVtYmVyICE9IDA7CisgICAgICAgIGNhc2UgU3RyaW5nXzoK
KyAgICAgICAgICAgIHJldHVybiAhbV9zdHJpbmcuaXNFbXB0eSgpOworICAgIH0KKyAgICByZXR1
cm4gYm9vbCgpOworfQorCitkb3VibGUgVmFsdWU6OnRvTnVtYmVyKCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIE5vZGVWZWN0b3JfOgorICAgICAgICAgICAg
cmV0dXJuIFZhbHVlKHRvU3RyaW5nKCkpLnRvTnVtYmVyKCk7CisgICAgICAgIGNhc2UgTnVtYmVy
OgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtYmVyOworICAgICAgICBjYXNlIFN0cmluZ186IHsK
KyAgICAgICAgICAgIGJvb2wgY2FuQ29udmVydDsKKyAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgcyA9IG1fc3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gcy50b0RvdWJsZSgmY2Fu
Q29udmVydCk7CisgICAgICAgICAgICBpZiAoY2FuQ29udmVydCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWU7CisKKyAgICAgICAgICAgIHJldHVybiBOQU47CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIG1fYm9vbCA/IDEgOiAwOworICAg
IH0KKyAgICByZXR1cm4gZG91YmxlKCk7Cit9CisKK1N0cmluZyBWYWx1ZTo6dG9TdHJpbmcoKSBj
b25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgTm9kZVZlY3Rvcl86
CisgICAgICAgICAgICBpZiAobV9ub2RldmVjdG9yLmlzRW1wdHkoKSkgCisgICAgICAgICAgICAg
ICAgcmV0dXJuICIiOworCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUobV9ub2RldmVj
dG9yWzBdLmdldCgpKTsKKyAgICAgICAgY2FzZSBTdHJpbmdfOgorICAgICAgICAgICAgcmV0dXJu
IG1fc3RyaW5nOworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIGlmIChpc25hbiht
X251bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuICJOYU4iOworICAgICAgICAgICAgZWxz
ZSBpZiAobV9udW1iZXIgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIjAiOworICAgICAg
ICAgICAgZWxzZSBpZiAoaXNpbmYobV9udW1iZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNp
Z25iaXQobV9udW1iZXIpID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiSW5maW5p
dHkiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIt
SW5maW5pdHkiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRT
dHJpbmc6Om51bWJlcihtX251bWJlcik7CisgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAg
ICAgIHJldHVybiBtX2Jvb2wgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKKworfQorfQorCisjZW5kaWYgLy8gWFBBVEhfU1VQUE9SVApc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0
aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvaW1wbC9YUGF0aFV0aWwuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoVXRpbC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVyaWNoIFJh
YWJlIDxyYWFiZUBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJYUGF0aFV0aWwuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgICAg
IAorYm9vbCBpc1Jvb3REb21Ob2RlKE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUgJiYg
IW5vZGUtPnBhcmVudE5vZGUoKTsKK30KKworU3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUqIG5vZGUp
Cit7CisgICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6
QVRUUklCVVRFX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElP
Tl9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBO
b2RlOjpURVhUX05PREU6CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoaXNSb290RG9tTm9kZShub2RlKQorICAg
ICAgICAgICAgICAgICB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkg
eworICAgICAgICAgICAgICAgIFN0cmluZyBzdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZShub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9IHN0cmluZ1Zh
bHVlKG4pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjsKKyAgICAgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIGlzVmFsaWRDb250ZXh0
Tm9kZShOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlICYmICgKKyAgICAgICAgICAgbm9k
ZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgfHwKKyAgICAgICAgICAgbm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAorICAgICAgICAgICBub2RlLT5u
b2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAgICAgICBub2RlLT5ub2RlVHlw
ZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fAorICAgICAgICAgICBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSB8fAorICAgICAgICAg
ICBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSB8fAorICAgICAgICAgICBu
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwKKyAgICAgICAgICAgbm9k
ZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERSk7Cit9CisKK30KK30K
KworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQKKwpJbmRleDogV2ViQ29yZS94cGF0aC9pbXBsL1hQ
YXRoRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94cGF0aC9pbXBsL1hQYXRoRnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL2ltcGwvWFBhdGhGdW5jdGlv
bnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIGZ1bmN0aW9ucy5oIC0g
Q29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2lmbmRlZiBYUGF0aEZ1bmN0aW9uc19ICisjZGVmaW5lIFhQYXRoRnVuY3Rpb25zX0gKKwor
I2lmIFhQQVRIX1NVUFBPUlQKKworI2luY2x1ZGUgIlhQYXRoRXhwcmVzc2lvbk5vZGUuaCIKKwor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBYUGF0aCB7CisgICAgCitjbGFzcyBGdW5j
dGlvbiA6IHB1YmxpYyBFeHByZXNzaW9uCit7CitwdWJsaWM6CisgICAgdm9pZCBzZXRBcmd1bWVu
dHMoY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiYpOworICAgIHZvaWQgc2V0TmFtZShjb25zdCBT
dHJpbmcmKTsKKworcHJvdGVjdGVkOgorICAgIEV4cHJlc3Npb24qIGFyZyhpbnQgcG9zKTsKKyAg
ICBjb25zdCBFeHByZXNzaW9uKiBhcmcoaW50IHBvcykgY29uc3Q7CisgICAgdW5zaWduZWQgaW50
IGFyZ0NvdW50KCkgY29uc3Q7CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworY2xhc3MgRnVuY3Rpb25MaWJyYXJ5Cit7CisgICAg
ZnJpZW5kIHN0cnVjdCBGdW5jdGlvbk1hcHBpbmc7CitwdWJsaWM6CisgICAgc3RhdGljIEZ1bmN0
aW9uTGlicmFyeSAmc2VsZigpOworCisgICAgRnVuY3Rpb24qIGNyZWF0ZUZ1bmN0aW9uKGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uKj4gJmFyZ3MgPSBWZWN0b3I8RXhw
cmVzc2lvbio+KCkpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0cnVjdCBGdW5jdGlvblJlYzsK
KworICAgIEZ1bmN0aW9uTGlicmFyeSgpOworICAgIEZ1bmN0aW9uTGlicmFyeShjb25zdCBGdW5j
dGlvbkxpYnJhcnkgJnJocyk7CisgICAgRnVuY3Rpb25MaWJyYXJ5ICZvcGVyYXRvcj0oY29uc3Qg
RnVuY3Rpb25MaWJyYXJ5ICZyaHMpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uUmVj
PiBtX2Z1bmN0aW9uRGljdDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFhQQVRIX1NVUFBPUlQK
KworI2VuZGlmIC8vIFhQYXRoX0Z1bmN0aW9uc19ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgvWFBh
dGhSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisg
KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgWFBBVEhfU1VQUE9SVAorCisjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRlICJY
UGF0aEV2YWx1YXRvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBYUGF0aDsKKworY2xhc3MgSW52YWxp
ZGF0aW5nRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAg
ICBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSogbm9kZSwgWFBhdGhS
ZXN1bHQqIHJlc3VsdCkgCisgICAgICAgIDogbV9ub2RlKG5vZGUpLCBtX3Jlc3VsdChyZXN1bHQp
IHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wpIHsg
bV9yZXN1bHQtPmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7IH0KK3ByaXZhdGU6CisgICAgRXZl
bnRUYXJnZXROb2RlKiBtX25vZGU7CisgICAgWFBhdGhSZXN1bHQqIG1fcmVzdWx0OworfTsKKwor
WFBhdGhSZXN1bHQ6OlhQYXRoUmVzdWx0KEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXQsIGNv
bnN0IFZhbHVlICZ2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX2V2ZW50VGFy
Z2V0KGV2ZW50VGFyZ2V0KQoreworICAgIG1fZXZlbnRMaXN0ZW5lciA9IG5ldyBJbnZhbGlkYXRp
bmdFdmVudExpc3RlbmVyKG1fZXZlbnRUYXJnZXQuZ2V0KCksIHRoaXMpOworICAgIG1fZXZlbnRU
YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoRXZlbnROYW1lczo6RE9NU3VidHJlZU1vZGlmaWVkRXZl
bnQsIG1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOworICAgICAgICAKKyAgICBzd2l0Y2ggKG1fdmFs
dWUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgVmFsdWU6OkJvb2xlYW46CisgICAgICAgICAgICBt
X3Jlc3VsdFR5cGUgPSBCT09MRUFOX1RZUEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWYWx1ZTo6TnVtYmVyOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gTlVNQkVSX1RZ
UEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZTo6U3RyaW5nXzoKKyAg
ICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IFNUUklOR19UWVBFOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmFsdWU6Ok5vZGVWZWN0b3JfOgorICAgICAgICAgICAgbV9yZXN1bHRU
eXBlID0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRTsKKyAgICAgICAgICAgIG1fbm9kZVNl
dFBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIG1fbm9kZVNldCA9IG1fdmFsdWUudG9Ob2RlVmVj
dG9yKCk7CisgICAgICAgICAgICBtX2ludmFsaWRJdGVyYXRvclN0YXRlID0gZmFsc2U7CisgICAg
fQorfQorCitYUGF0aFJlc3VsdDo6flhQYXRoUmVzdWx0KCkKK3sKKyAgICBpZiAobV9ldmVudFRh
cmdldCkKKyAgICAgICAgbV9ldmVudFRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudE5h
bWVzOjpET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgbV9ldmVudExpc3RlbmVyLmdldCgpLCBmYWxz
ZSk7Cit9CisKK3ZvaWQgWFBhdGhSZXN1bHQ6OmNvbnZlcnRUbyh1bnNpZ25lZCBzaG9ydCB0eXBl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBBTllfVFlQRToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5VTUJFUl9UWVBF
OgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIG1fdmFsdWUg
PSBtX3ZhbHVlLnRvTnVtYmVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
VFJJTkdfVFlQRToKKyAgICAgICAgICAgIG1fcmVzdWx0VHlwZSA9IHR5cGU7CisgICAgICAgICAg
ICBtX3ZhbHVlID0gbV92YWx1ZS50b1N0cmluZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQk9PTEVBTl9UWVBFOgorICAgICAgICAgICAgbV9yZXN1bHRUeXBlID0gdHlwZTsK
KyAgICAgICAgICAgIG1fdmFsdWUgPSBtX3ZhbHVlLnRvQm9vbGVhbigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRToKKyAgICAg
ICAgY2FzZSBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRToKKyAgICAgICAgY2FzZSBVTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFOgorICAgICAgICBjYXNlIE9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFOgorICAgICAgICBjYXNlIEFOWV9VTk9SREVSRURfTk9ERV9UWVBFOgorICAgICAgICBj
YXNlIEZJUlNUX09SREVSRURfTk9ERV9UWVBFOgorICAgICAgICAgICAgaWYgKCFtX3ZhbHVlLmlz
Tm9kZVZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgZWMgPSBUWVBFX0VSUjsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3Jlc3VsdFR5cGUg
PSB0eXBlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HKFhQYXRoLCAiQ2Fubm90
IGNvbnZlcnQgWFBhdGhSZXN1bHQgdG8gdW5rbm93biB0eXBlICcldSchIiwgdHlwZSk7CisgICAg
fQorfQorCit1bnNpZ25lZCBzaG9ydCBYUGF0aFJlc3VsdDo6cmVzdWx0VHlwZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcmVzdWx0VHlwZTsKK30KKworZG91YmxlIFhQYXRoUmVzdWx0OjpudW1i
ZXJWYWx1ZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgp
ICE9IE5VTUJFUl9UWVBFKSB7CisgICAgICAgIGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVy
biAwLjA7CisgICAgfQorICAgIHJldHVybiBtX3ZhbHVlLnRvTnVtYmVyKCk7Cit9CisKK1N0cmlu
ZyBYUGF0aFJlc3VsdDo6c3RyaW5nVmFsdWUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7Cisg
ICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBTVFJJTkdfVFlQRSkgeworICAgICAgICBlYyA9IFRZUEVf
RVJSOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBtX3ZhbHVl
LnRvU3RyaW5nKCk7Cit9CisKK2Jvb2wgWFBhdGhSZXN1bHQ6OmJvb2xlYW5WYWx1ZShFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IEJPT0xFQU5fVFlQ
RSkgeworICAgICAgICBlYyA9IFRZUEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBtX3ZhbHVlLnRvQm9vbGVhbigpOworfQorCitOb2RlKiBYUGF0aFJlc3Vs
dDo6c2luZ2xlTm9kZVZhbHVlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChy
ZXN1bHRUeXBlKCkgIT0gQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgJiYKKyAgICAgICAgIHJlc3Vs
dFR5cGUoKSAhPSBGSVJTVF9PUkRFUkVEX05PREVfVFlQRSkgeworICAgICAgICBlYyA9IFRZUEVf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIAorICAgIE5vZGVWZWN0b3Igbm9kZXMg
PSBtX3ZhbHVlLnRvTm9kZVZlY3RvcigpOworICAgIGlmIChub2Rlcy5zaXplICgpID09IDApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5vZGVzWzBdLmdldCgpOworfQorCit2b2lk
IFhQYXRoUmVzdWx0OjppbnZhbGlkYXRlSXRlcmF0b3JTdGF0ZSgpCit7IAorICAgIG1faW52YWxp
ZEl0ZXJhdG9yU3RhdGUgPSB0cnVlOworICAgIAorICAgIEFTU0VSVChtX2V2ZW50VGFyZ2V0KTsK
KyAgICBBU1NFUlQobV9ldmVudExpc3RlbmVyKTsKKyAgICAKKyAgICBtX2V2ZW50VGFyZ2V0LT5y
ZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50TmFtZXM6OkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCBt
X2V2ZW50TGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKKyAgICAKKyAgICBtX2V2ZW50VGFyZ2V0ID0g
MDsKK30KKworYm9vbCBYUGF0aFJlc3VsdDo6aW52YWxpZEl0ZXJhdG9yU3RhdGUoKSBjb25zdAor
eworICAgIGlmIChyZXN1bHRUeXBlKCkgIT0gVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAm
JgorICAgICAgICByZXN1bHRUeXBlKCkgIT0gT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9pbnZhbGlkSXRlcmF0b3JT
dGF0ZTsKK30KKwordW5zaWduZWQgbG9uZyBYUGF0aFJlc3VsdDo6c25hcHNob3RMZW5ndGgoRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKHJlc3VsdFR5cGUoKSAhPSBVTk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFICYmCisgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSkgeworICAgICAgICBlYyA9IFRZUEVfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV92YWx1ZS50b05vZGVWZWN0b3IoKS5zaXpl
KCk7Cit9CisKK05vZGUqIFhQYXRoUmVzdWx0OjppdGVyYXRlTmV4dChFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUgJiYKKyAgICAgICAgcmVzdWx0VHlwZSgpICE9IE9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
KSB7CisgICAgICAgIGVjID0gVFlQRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICAKKyAgICBpZiAobV9pbnZhbGlkSXRlcmF0b3JTdGF0ZSkgeworICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKG1f
bm9kZVNldFBvc2l0aW9uICsgMSA+PSBtX25vZGVTZXQuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIE5vZGUqIG5vZGUgPSBtX25vZGVTZXRbbV9ub2RlU2V0UG9zaXRpb25dLmdldCgp
OworICAgIAorICAgIG1fbm9kZVNldFBvc2l0aW9uKys7CisKKyAgICByZXR1cm4gbm9kZTsKK30K
KworTm9kZSogWFBhdGhSZXN1bHQ6OnNuYXBzaG90SXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAocmVzdWx0VHlwZSgpICE9IFVOT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUgJiYKKyAgICAgICAgIHJlc3VsdFR5cGUoKSAhPSBPUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSkgeworICAgICAgICBlYyA9IFRZUEVfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgTm9kZVZlY3RvciBub2RlcyA9IG1fdmFsdWUudG9Ob2Rl
VmVjdG9yKCk7CisgICAgaWYgKGluZGV4ID49IG5vZGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIG5vZGVzW2luZGV4XS5nZXQoKTsKK30KKworfQorCisjZW5k
aWYgLy8gWFBBVEhfU1VQUE9SVApJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aFJlc3VsdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUveHBhdGgvWFBhdGhSZXN1bHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBA
QAorLyoKKyAqIENvcHlyaWdodCAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIAorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpZm5kZWYgWFBhdGhSZXN1bHRfSAorI2RlZmluZSBYUGF0aFJlc3VsdF9I
CisKKyNpZiBYUEFUSF9TVVBQT1JUCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKworI2luY2x1ZGUg
IlhQYXRoVmFsdWUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIE5vZGU7CitjbGFzcyBFdmVudFRhcmdldE5vZGU7CitjbGFzcyBF
dmVudExpc3RlbmVyOworCitjbGFzcyBYUGF0aFJlc3VsdCA6IHB1YmxpYyBTaGFyZWQ8WFBhdGhS
ZXN1bHQ+Cit7CitwdWJsaWM6CisgICAgZW51bSBYUGF0aFJlc3VsdFR5cGUgeworICAgICAgICBB
TllfVFlQRSA9IDAsCisgICAgICAgIE5VTUJFUl9UWVBFID0gMSwKKyAgICAgICAgU1RSSU5HX1RZ
UEUgPSAyLAorICAgICAgICBCT09MRUFOX1RZUEUgPSAzLAorICAgICAgICBVTk9SREVSRURfTk9E
RV9JVEVSQVRPUl9UWVBFID0gNCwKKyAgICAgICAgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUg
PSA1LAorICAgICAgICBVTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNiwKKyAgICAgICAg
T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA3LAorICAgICAgICBBTllfVU5PUkRFUkVEX05P
REVfVFlQRSA9IDgsCisgICAgICAgIEZJUlNUX09SREVSRURfTk9ERV9UWVBFID0gOQorICAgIH07
CisgICAgCisgICAgWFBhdGhSZXN1bHQoRXZlbnRUYXJnZXROb2RlKiwgY29uc3QgWFBhdGg6OlZh
bHVlJik7CisgICAgflhQYXRoUmVzdWx0KCk7CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG8odW5z
aWduZWQgc2hvcnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdW5zaWduZWQgc2hvcnQg
cmVzdWx0VHlwZSgpIGNvbnN0OworCisgICAgZG91YmxlIG51bWJlclZhbHVlKEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OworICAgIGJvb2wgYm9vbGVhblZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2Rl
KiBzaW5nbGVOb2RlVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgYm9vbCBpbnZh
bGlkSXRlcmF0b3JTdGF0ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxvbmcgc25hcHNob3RMZW5n
dGgoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIE5vZGUqIGl0ZXJhdGVOZXh0KEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBOb2RlKiBzbmFwc2hvdEl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JTdGF0ZSgpOworcHJp
dmF0ZToKKyAgICBYUGF0aDo6VmFsdWUgbV92YWx1ZTsKKyAgICB1bnNpZ25lZCBtX25vZGVTZXRQ
b3NpdGlvbjsKKyAgICBYUGF0aDo6Tm9kZVZlY3RvciBtX25vZGVTZXQ7CisgICAgdW5zaWduZWQg
c2hvcnQgbV9yZXN1bHRUeXBlOworICAgIGJvb2wgbV9pbnZhbGlkSXRlcmF0b3JTdGF0ZTsKKyAg
ICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX2V2ZW50VGFyZ2V0OworICAgIFJlZlB0cjxFdmVu
dExpc3RlbmVyPiBtX2V2ZW50TGlzdGVuZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBYUEFUSF9T
VVBQT1JUCisKKyNlbmRpZiAvLyBYUGF0aFJlc3VsdF9ICisKSW5kZXg6IFdlYkNvcmUveHBhdGgv
WFBhdGhFeHByZXNzaW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3hwYXRoL1hQYXRoRXhw
cmVzc2lvbi5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRoL1hQYXRoRXhwcmVzc2lv
bi5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgeHBhdGggeworCisgICAgaW50ZXJmYWNlIFhQ
YXRoRXhwcmVzc2lvbiB7CisgICAgICAgIFhQYXRoUmVzdWx0IGV2YWx1YXRlKGluIE5vZGUgY29u
dGV4dE5vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1bnNpZ25lZCBzaG9y
dCB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gWFBhdGhSZXN1bHQgaW5S
ZXN1bHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworfQpJbmRl
eDogV2ViQ29yZS94cGF0aC9YUGF0aEV2YWx1YXRvci5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94cGF0aC9YUGF0aEV2YWx1YXRvci5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3hwYXRo
L1hQYXRoRXZhbHVhdG9yLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21vZHVsZSB4cGF0aCB7CisKKyAg
ICBpbnRlcmZhY2UgW0dlbmVyYXRlQ29uc3RydWN0b3IsIENhbkJlQ29uc3RydWN0ZWRdIFhQYXRo
RXZhbHVhdG9yIHsKKyAgICAgICAgWFBhdGhFeHByZXNzaW9uIGNyZWF0ZUV4cHJlc3Npb24oaW4g
RE9NU3RyaW5nIGV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIFhQYXRoTlNSZXNvbHZlciByZXNvbHZlcikKKyAgICAgICAgICAgIHJhaXNlcyhj
b3JlOjpET01FeGNlcHRpb24pOworCisgICAgICAgIFhQYXRoTlNSZXNvbHZlciBjcmVhdGVOU1Jl
c29sdmVyKGluIE5vZGUgbm9kZVJlc29sdmVyKTsKKworICAgICAgICBYUGF0aFJlc3VsdCBldmFs
dWF0ZShpbiBET01TdHJpbmcgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gTm9kZSBjb250ZXh0Tm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFhQYXRoTlNSZXNvbHZlciByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gdW5zaWduZWQgc2hvcnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
WFBhdGhSZXN1bHQgaW5SZXN1bHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICB9OworfQpJbmRleDogV2ViQ29yZS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUveHBhdGgvWFBhdGhOU1Jlc29sdmVyLmlkbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKK21v
ZHVsZSB4cGF0aCB7CisKKyAgICBpbnRlcmZhY2UgWFBhdGhOU1Jlc29sdmVyIHsKKyAgICAgICAg
RE9NU3RyaW5nIGxvb2t1cE5hbWVzcGFjZVVSSShpbiBET01TdHJpbmcgcHJlZml4KTsKKyAgICB9
OworfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE0MjI4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyODYgQEAKKzIwMDYtMDUtMDggIEFuZGVycyBDYXJsc3NvbiAgPGFjYXJs
c3NvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjM4CisgICAgICAgIFN1cHBvcnQgTW96aWxsYSdzIFhQYXRoRXZhbHVhdG9yIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgR2VuZXJhdGUg
WFBhdGggZ3JhbW1hciwgYW5kIEphdmFTY3JpcHQgd3JhcHBlcnMuCisgICAgICAgIAorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIG5ldyBm
aWxlcyB0byBwcm9qZWN0CisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19iaW5k
aW5nLmNwcDoKKyAgICAgICAgKEtKUzo6KToKKyAgICAgICAgKEtKUzo6c2V0RE9NRXhjZXB0aW9u
KToKKyAgICAgICAgSGFuZGxlIHNldHRpbmcgWFBhdGggZXhjZXB0aW9ucy4KKyAgICAgICAgCisg
ICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAgICAgIEp1c3QgcmV0dXJuIG5pbCBm
b3Igbm93IHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBhIHdyYXBwZXIgZm9yIAorICAgICAgICBYUGF0
aCBuYW1lc3BhY2Ugbm9kZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgQWRkIFhQYXRoIHR5cGVzLiBBbHNvIGFkZCBhICJDYW5CZUNv
bnN0cnVjdGVkIiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAgICAgICAgZm9yIGludGVyZmFjZXMgdGhh
dCBjYW4gYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkuCisgICAgICAgIAorICAgICAgICAqIGJyaWRn
ZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW06CisgICAgICAgIChpbml0aWFsaXplTG9nZ2luZ0No
YW5uZWxzSWZOZWNlc3NhcnkpOgorICAgICAgICBJbml0aWFsaXplIExvZ1hQYXRoIGNoYW5uZWwu
CisgICAgICAgIAorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVyZSk6CisgICAgICAgIFN1cHBv
cnQgInhwYXRoIiB2ZXJzaW9uICIzLjAiLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgIElnbm9y
ZSBYUGF0aCBuYW1lc3BhY2Ugbm9kZXMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmNyZWF0ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNy
ZWF0ZU5TUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmV2YWx1YXRlKToK
KyAgICAgICAgTmV3IGZ1bmN0aW9ucyB3aGljaCBjYWxsIGRvd24gdG8gYSBsYXppbHkgY3JlYXRl
ZCBYUGF0aEV2YWx1YXRvci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICBB
ZGQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaWRsOgorICAgICAgICBBZGQgWFBhdGggbWV0aG9kcy4KKyAgICAgICAgCisgICAgICAgICog
ZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Oik6CisgICAgICAgIEFkZCBYUEFU
SF9OQU1FU1BBQ0VfTk9ERSB0eXBlLgorICAgICAgICAKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE1hcmt1cCk6CisgICAgICAgIElnbm9yZSBY
UGF0aCBuYW1lc3BhY2Ugbm9kZXMuCisgICAgICAgIAorICAgICAgICAqIHBhZ2UvRE9NV2luZG93
LmlkbDoKKyAgICAgICAgQWRkIGNvbnN0cnVjdG9ycyBmb3IgWFBhdGhFdmFsdWF0b3IgYW5kIFhQ
YXRoUmVzdWx0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgIEFkZCBYUGF0aCBsb2cgY2hhbm5l
bAorCisgICAgICAgICogeHBhdGg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoRXZhbHVh
dG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV2YWx1YXRvcjo6Y3JlYXRl
RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV2YWx1YXRvcjo6Y3JlYXRlTlNS
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aEV2YWx1YXRvcjo6ZXZhbHVhdGUpOgor
ICAgICAgICAqIHhwYXRoL1hQYXRoRXZhbHVhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV2YWx1YXRvci5pZGw6IEFkZGVkLgorICAgICAg
ICAqIHhwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGhFeHByZXNzaW9uOjpjcmVhdGVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoRXhwcmVzc2lvbjo6flhQYXRoRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aEV4cHJlc3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKiB4cGF0aC9YUGF0aEV4cHJlc3Npb24u
aDogQWRkZWQuCisgICAgICAgICogeHBhdGgvWFBhdGhFeHByZXNzaW9uLmlkbDogQWRkZWQuCisg
ICAgICAgICogeHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpYUGF0aE5TUmVzb2x2ZXI6OlhQYXRoTlNSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAgICogeHBhdGgv
WFBhdGhOU1Jlc29sdmVyLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTlNSZXNvbHZl
ci5pZGw6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6WFBhdGhOYW1lc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6On5YUGF0aE5hbWVzcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJEb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aE5hbWVzcGFjZTo6b3duZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoTmFtZXNwYWNlOjpwcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6
Om5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoTmFtZXNwYWNlOjpub2RlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhOYW1lc3BhY2U6Om5hbWVzcGFjZVVSSSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aE5hbWVzcGFjZTo6bm9kZVR5cGUpOgorICAgICAgICAqIHhwYXRo
L1hQYXRoTmFtZXNwYWNlLmg6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL1hQYXRoUmVzdWx0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyOjpJ
bnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludmFsaWRhdGlu
Z0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVz
dWx0OjpYUGF0aFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6flhQYXRo
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0Ojpjb252ZXJ0VG8pOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnJlc3VsdFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGhSZXN1bHQ6Om51bWJlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVz
dWx0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6Ym9vbGVh
blZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjpzaW5nbGVOb2RlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OmludmFsaWRhdGVJdGVyYXRvclN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoUmVzdWx0OjppbnZhbGlkSXRlcmF0b3JTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aFJlc3VsdDo6c25hcHNob3RMZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6Oml0ZXJhdGVOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoUmVzdWx0OjpzbmFwc2hvdEl0ZW0pOgorICAgICAgICAqIHhwYXRoL1hQYXRoUmVzdWx0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6Oik6CisgICAgICAgICog
eHBhdGgvWFBhdGhSZXN1bHQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsOiBBZGRl
ZC4KKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoRXhwcmVzc2lvbk5vZGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6RXhwcmVzc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6fkV4cHJlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkV4cHJlc3Npb246OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpFeHByZXNzaW9uOjphZGRTdWJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpFeHByZXNzaW9uOjpvcHRpbWl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
RXhwcmVzc2lvbjo6c3ViRXhwckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHBy
ZXNzaW9uOjpzdWJFeHByKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpp
c0NvbnN0YW50KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoRXhwcmVzc2lvbk5vZGUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXZhbHVhdGlvbkNvbnRleHQ6OkV2YWx1
YXRpb25Db250ZXh0KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoRnVuY3Rpb25zLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6SW50ZXJ2YWw6OkludGVydmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpJbnRlcnZhbDo6Y29udGFpbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkludGVydmFsOjphc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RnVuY3Rpb246OnNldEFyZ3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVu
Y3Rpb246OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjphcmcp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjphcmdDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuY3Rpb246Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1bkxhc3Q6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxh
c3Q6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blBvc2l0aW9uOjpk
b0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Qb3NpdGlvbjo6aXNDb25z
dGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTG9jYWxOYW1lOjppc0NvbnN0YW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Mb2NhbE5hbWU6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWVzcGFjZVVSSTo6aXNDb25zdGFudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZXNwYWNlVVJJOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpGdW5OYW1lOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5Db3VudDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVu
Q291bnQ6OmlzQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN0cmluZzo6
ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuQ29uY2F0Ojpkb0V2YWx1
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdGFydHNXaXRoOjpkb0V2YWx1YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5Db250YWluczo6ZG9FdmFsdWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nQmVmb3JlOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdWJzdHJpbmdBZnRlcjo6ZG9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuU3Vic3RyaW5nOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5TdHJpbmdMZW5ndGg6OmRvRXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5vcm1hbGl6ZVNwYWNlOjpkb0V2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5UcmFuc2xhdGU6OmRvRXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkJvb2xlYW46OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkZ1bk5vdDo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6RnVuVHJ1ZTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuVHJ1
ZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6ZG9FdmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6aXNDb25zdGFudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuRmFsc2U6OmRvRXZhbHVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1bkZhbHNlOjppc0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGdW5OdW1iZXI6OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkZ1blN1bTo6ZG9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuRmxvb3I6
OmRvRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNlaWxpbmc6OmRvRXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blJvdW5kOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbkxpYnJhcnk6OnNlbGYpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uTGlicmFyeTo6RnVuY3Rpb25MaWJyYXJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbkxpYnJhcnk6OmNyZWF0ZUZ1bmN0aW9uKToK
KyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoRnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHhwYXRoL2ltcGwvWFBhdGhHcmFtbWFyLnk6IEFkZGVkLgorICAgICAgICAqIHhwYXRoL2ltcGwv
WFBhdGhQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjopOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6Y2hhckNhdCk6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6UGFyc2VyOjppc0F4aXNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQ
YXJzZXI6OmlzTm9kZVR5cGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6
OmlzT3BlcmF0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnNr
aXBXUyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjptYWtlVG9rZW5BbmRBZHZh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6Om1ha2VJbnRUb2tlbkFuZEFk
dmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6cGVla0FoZWFkSGVscGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnBlZWtDdXJIZWxwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bGV4U3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpQYXJzZXI6OmxleE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
UGFyc2VyOjpsZXhOQ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bGV4
UU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bmV4dFRva2VuSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6bmV4dFRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OlBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6UGFyc2VyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjps
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6cmVnaXN0ZXJQYXJzZU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6dW5yZWdpc3RlclBhcnNlTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpyZWdpc3RlclByZWRpY2F0ZVZlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjp1bnJlZ2lzdGVyUHJlZGljYXRlVmVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnJlZ2lzdGVyRXhwcmVzc2lvblZl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjp1bnJlZ2lzdGVyRXhwcmVz
c2lvblZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpyZWdpc3RlclN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjp1bnJlZ2lzdGVyU3RyaW5n
KToKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
UGFyc2VyOjopOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6Y3VycmVudCk6Cisg
ICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFBhdGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpGaWx0ZXI6OkZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Rmls
dGVyOjp+RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGaWx0ZXI6OmRvRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6TG9jYXRpb25QYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6On5Mb2NhdGlvblBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6b3B0aW1pemUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFBhdGg6OkxvY2F0aW9uUGF0aDo6ZG9FdmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6UGF0aDo6UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6OmRvRXZhbHVhdGUp
OgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhQYXRoLmg6IEFkZGVkLgorICAgICAgICAqIHhw
YXRoL2ltcGwvWFBhdGhQcmVkaWNhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpOdW1iZXI6Ok51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtYmVyOjpp
c0NvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1iZXI6OmRvRXZhbHVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Npb246OlN0cmluZ0V4cHJl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Npb246OmlzQ29u
c3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0cmluZ0V4cHJlc3Npb246OmRvRXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok5lZ2F0aXZlOjpkb0V2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOdW1lcmljT3A6Ok51bWVyaWNPcCk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpFcVRlc3RPcDo6RXFUZXN0T3ApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkVxVGVzdE9wOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2Fs
T3A6OkxvZ2ljYWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjpzaG9y
dENpcmN1aXRPbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9naWNhbE9wOjppc0NvbnN0
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2FsT3A6OmRvRXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlVuaW9uOjpkb0V2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6OlByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6UHJlZGljYXRlOjp+UHJlZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQ
cmVkaWNhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQcmVkaWNhdGU6
Om9wdGltaXplKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoUHJlZGljYXRlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Ok51bWVyaWNPcDo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpFcVRlc3RPcDo6KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2dpY2Fs
T3A6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFN0ZXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpheGlzQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlN0ZXA6OlN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6On5T
dGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpldmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlN0ZXA6Om5vZGVUZXN0TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
U3RlcDo6b3B0aW1pemUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5hbWVzcGFj
ZUZyb21Ob2RldGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6cHJpbWFyeU5v
ZGVUeXBlKToKKyAgICAgICAgKiB4cGF0aC9pbXBsL1hQYXRoU3RlcC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjopOgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhV
dGlsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6aXNSb290RG9tTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OmlzVmFsaWRDb250ZXh0Tm9kZSk6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0
aFV0aWwuaDogQWRkZWQuCisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFZhbHVlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OlZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFs
dWU6OmlzTm9kZVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzQm9v
bGVhbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OmlzTnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6aXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OlZhbHVlOjp0b05vZGVWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZh
bHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b051bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAg
KiB4cGF0aC9pbXBsL1hQYXRoVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0
aDo6VmFsdWU6Oik6CisgICAgICAgICogeHBhdGgvaW1wbC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFyaWFibGVSZWZlcmVuY2U6
OlZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYXJpYWJsZVJl
ZmVyZW5jZTo6aXNDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFyaWFibGVS
ZWZlcmVuY2U6OmRvRXZhbHVhdGUpOgorICAgICAgICAqIHhwYXRoL2ltcGwvWFBhdGhWYXJpYWJs
ZVJlZmVyZW5jZS5oOiBBZGRlZC4KKwogMjAwNi0wNS0wOCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgQ29tcHJlaGVuc2l2ZSBib3gtc2l6aW5nIGZpeC4gIFRoaXMg
cGF0Y2ggY2hhbmdlcyBhbGwgZm9ybSBjb250cm9scyB0bwpJbmRleDogV2ViQ29yZS9icmlkZ2Uv
bWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21h
Yy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkocmV2aXNpb24gMTQyMjUpCisrKyBXZWJDb3JlL2JyaWRn
ZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcg
QEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTgogICAgIGluaXRpYWxp
emVMb2dDaGFubmVsKExvZ0V2ZW50cyk7CiAgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nRWRp
dGluZyk7CiAgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoTG9nVGV4dENvbnZlcnNpb24pOworICAg
IGluaXRpYWxpemVMb2dDaGFubmVsKExvZ1hQYXRoKTsKIH0KIAogLSAoaWQpaW5pdApJbmRleDog
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwJKHJldmlzaW9uIDE0MjI1KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAg
ICAgIGF0dHJpYnV0ZSBOb2RlQ29uc3RydWN0b3IgTm9kZTsKICAgICAgICAgYXR0cmlidXRlIE5v
ZGVGaWx0ZXJDb25zdHJ1Y3RvciBOb2RlRmlsdGVyOwogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VD
b25zdHJ1Y3RvciBSYW5nZTsKKyAgICAgICAgYXR0cmlidXRlIFhQYXRoRXZhbHVhdG9yQ29uc3Ry
dWN0b3IgWFBhdGhFdmFsdWF0b3I7CisgICAgICAgIGF0dHJpYnV0ZSBYUGF0aFJlc3VsdENvbnN0
cnVjdG9yIFhQYXRoUmVzdWx0OwogICAgIH07CiAKIH0K
</data>
<flag name="review"
          id="2268"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>