<?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>164061</bug_id>
          
          <creation_ts>2016-10-27 06:10:46 -0700</creation_ts>
          <short_desc>[GTK][WPE] Initial implementation of JavaScriptCore glib bindings</short_desc>
          <delta_ts>2018-03-21 01:42:21 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>136989</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Estêvão Samuel Procópio Amaral">tevaum</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alcinnz</cc>
    
    <cc>beidson</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dustin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mike</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245104</commentid>
    <comment_count>0</comment_count>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-10-27 06:10:46 -0700</bug_when>
    <thetext>Current API lacks a glib-like API for JavaScriptCore.
This is a simple initial implementation of a JavaScriptCore
bindings according to the discussion on webklit-gtk mailing
list thread[1].

[1] https://lists.webkit.org/pipermail/webkit-gtk/2016-October/002834.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245169</commentid>
    <comment_count>1</comment_count>
      <attachid>293034</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-10-27 10:30:05 -0700</bug_when>
    <thetext>Created attachment 293034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245175</commentid>
    <comment_count>2</comment_count>
      <attachid>293037</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-10-27 10:46:52 -0700</bug_when>
    <thetext>Created attachment 293037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245177</commentid>
    <comment_count>3</comment_count>
      <attachid>293039</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-10-27 10:54:44 -0700</bug_when>
    <thetext>Created attachment 293039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245179</commentid>
    <comment_count>4</comment_count>
      <attachid>293040</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-10-27 11:00:51 -0700</bug_when>
    <thetext>Created attachment 293040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245180</commentid>
    <comment_count>5</comment_count>
      <attachid>293040</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-27 11:10:44 -0700</bug_when>
    <thetext>Comment on attachment 293040
Patch

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

Just a few initial observations:

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:40
&gt; +jsc_boolean_class_init(JSCBooleanClass *)

Keep in mind that you need to follow WebKit coding style in the implementation files:

static void jscBooleanClassInit(JSCBooleanClass*)

The only exception is that API functions of course have to use underscores.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:70
&gt; +jsc_boolean_new(JSCContext *context, gboolean value)

You really can&apos;t do anything in these _new functions except call g_object_new, since the _new functions aren&apos;t exposed to introspection, the code will never be called from bindings. You want to make sure g_object_new works properly anyway. So everything needs to move to either _init or _constructed.

&gt; Source/cmake/OptionsGTK.cmake:88
&gt; +WEBKIT_OPTION_DEFINE(ENABLE_JSC_GLIB &quot;Whether to enable support for JavaScriptCore glib bindings.&quot; PUBLIC OFF)

It should be alphabetized.

&gt; Tools/Scripts/webkitpy/style/checker_unittest.py:289
&gt; +           os.path.join(&apos;Source&apos;, &apos;JavaScriptCore&apos;, &apos;API&apos;, &apos;glib&apos;, &apos;JSCBoolean.h&apos;),

This is just a unit test to make sure the style checker works, you shouldn&apos;t be modifying it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245328</commentid>
    <comment_count>6</comment_count>
      <attachid>293075</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-10-27 16:27:51 -0700</bug_when>
    <thetext>Created attachment 293075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245482</commentid>
    <comment_count>7</comment_count>
      <attachid>293075</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-28 01:08:32 -0700</bug_when>
    <thetext>Comment on attachment 293075
Patch

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

Great job, it&apos;s a very good start, but still I have a lot of comments, most of them about coding style, WebKit practices, etc. it&apos;s normal in a first patch.

&gt; Source/JavaScriptCore/ChangeLog:27
&gt; +        * API/glib/jsc/JSCBoolean.h: Added.
&gt; +        * API/glib/jsc/JSCBooleanPrivate.h: Added.
&gt; +        * API/glib/jsc/JSCContext.h: Added.
&gt; +        * API/glib/jsc/JSCContextPrivate.h: Added.
&gt; +        * API/glib/jsc/JSCNumber.h: Added.
&gt; +        * API/glib/jsc/JSCNumberPrivate.h: Added.
&gt; +        * API/glib/jsc/JSCString.h: Added.
&gt; +        * API/glib/jsc/JSCStringPrivate.h: Added.
&gt; +        * API/glib/jsc/JSCValue.h: Added.
&gt; +        * API/glib/jsc/JSCValuePrivate.h: Added.
&gt; +        * API/glib/jsc/jsc.h: Added.

Don&apos;t do this, leave all headers an cpp files in the same directory, we will take careto install in the right jsc directory. Internally you can simply create a symlink in the forwarding headers directory. See how we do it for other apis in Source/WebKit2/PlatformGTK.cmake line 1423

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:25
&gt; +

Remove this empty line, keep all includes in a single block.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:40
&gt; +jsc_boolean_class_init(JSCBooleanClass *)

JSCBooleanClass * -&gt; JSCBooleanClass*

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:45
&gt; +jsc_boolean_init(JSCBoolean *)

JSCBoolean * -&gt; JSCBoolean*

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:49
&gt; +JSCBoolean *

Ditto, and the same everywhere, I wonder why style checker didn&apos;t complain about this.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:50
&gt; +jscBooleanNewFromJSValue(JSCContext *context, JSValueRef jsvalue)

For internal new methods we normally use Create, so this could be just jscBooleanCreate()

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:54
&gt; +    JSCBoolean* boolean;
&gt; +
&gt; +    boolean = (JSCBoolean *) g_object_new(JSC_TYPE_BOOLEAN, &quot;context&quot;, context, NULL);

Use the same line, don&apos;t use C style casts, in this case you could use JSC_BOOLEAN() macro, and use nullptr instead of NULL.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:70
&gt; +jsc_boolean_new(JSCContext *context, gboolean value)

All jsc value new methods should return a JSCValue.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:72
&gt; +    JSContextRef jscontext;

jscontext -&gt; jsContext

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:73
&gt; +    JSValueRef jsvalue;

jsvalue -&gt; jsValue

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:76
&gt; +    jscontext = jscContextGetJSContext(context);
&gt; +    jsvalue = JSValueMakeBoolean(jscontext, value);

Use the same line for the variable delcarations

JSContextRef jsContext = jscContextGetJSContext(context);
JSValueRef jsValuie = JSValueMakeBoolean(jsContext, value);

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:78
&gt; +    return jscBooleanNewFromJSValue(context, jsvalue);

As Michael said, it&apos;s problematic to do all these things in a new method, but it&apos;s not easy to solve, because we don&apos;t want to expose JS values in our API and GObject doesn&apos;t have a way to declare private properties. So, I&apos;m not sure how to create a value with a JScontext associated only with g_object_new if we can&apos;t use construct properties.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:29
&gt; +

Remove this empty line.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:38
&gt; + * A #JSCContext is the central class of the JavaScriptCore API. It is

Do not reference JSCContext here because it points to this block

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:46
&gt; +    JSGlobalContextRef context;

Use smart pointers in the private struct. Then use the placement new syntax in the init method to call the constructor and call the destructor in finalize. We do this automatically in wk API, we could probably move the WEBKIT_DEFINE_TYPE macro to WTF, but for now do it manually. For the JSGlobalContextRef you should use JSRetainPtr&lt;JSGlobalContextRef&gt;

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:47
&gt; +    JSObjectRef object;

What is this object? the global object? Call it globalObject if that is the case.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:49
&gt; +    GList* values;

What&apos;s this? cached values? or what values? For internal implementation we usually prefer to use WTF types instead of glib types. So this should probably be Vector&lt;GRefPtr&lt;JSCValue&gt;&gt; or HashSet&lt;GRefPtr&lt;JSCValue&gt;&gt;

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:55
&gt; +static void
&gt; +jscContextDispose(GObject* obj)

Forgot to say before but this should be a single line, and the same for all other functions.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:59
&gt; +    JSCContextPrivate* priv;
&gt; +
&gt; +    priv = (JSCContextPrivate*) jsc_context_get_instance_private(JSC_CONTEXT(obj));

Since line and don&apos;t use C style casts.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:67
&gt; +    g_list_free_full(priv-&gt;values, g_object_unref);
&gt; +
&gt; +    if (!priv-&gt;context) {
&gt; +        JSGlobalContextRelease(priv-&gt;context);
&gt; +        priv-&gt;context = nullptr;
&gt; +        priv-&gt;object = nullptr;
&gt; +    }

And you don&apos;t need this with smart pointers.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:88
&gt; +    priv-&gt;object = JSContextGetGlobalObject(priv-&gt;context);

Why do we need to keep this? Could we get it on demand when needed?

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:89
&gt; +    priv-&gt;values = nullptr;

This is already nullptr, the private struct is 0 filles on allocation by glib.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:90
&gt; +}

You added JSCContextPrivate *priv; to the instance struct, why don&apos;t you init that here and then you don&apos;t need to call jsc_context_get_instance_private everywhere? or remove the priv from the instance struct if this is the new way of handling the private struct.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:110
&gt; +jsc_context_new(void)

(void) -&gt; ()

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:132
&gt; +    if (JSValueIsUndefined(priv-&gt;context, jsvalue) || JSValueIsNull(priv-&gt;context, jsvalue))
&gt; +        return nullptr;

We need to handle this, null is not the same as undefined

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:134
&gt; +    g_assert_not_reached();

Use wk asserts, ASSERT_NOT_REACHED();

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:145
&gt; + * Returns: A JSCValue subtype representing the value of the requested property

JSCValue -&gt; #JSCValue I would remove the &quot;subtype&quot;, JSCValue is an abstract class.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:159
&gt; +    JSStringRelease(strName);

You can use JSRetainPtr with JSStringRef too.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:178
&gt; +

Forgot to say before, but you should use g_return macros in all public methods to check all passed in arguments.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:184
&gt; +    if (g_object_is_floating(value)) {
&gt; +        g_object_ref_sink(value);
&gt; +        priv-&gt;values = g_list_append(priv-&gt;values, value);
&gt; +    }

Ok, so we need to keep the values because we are taking the ownership. This is what I said in the mailing list that we need to discuss about memory management, objects lifecycle, etc. Because here we take the ownership and we don&apos;t release the object until the context is destroyed. In this particular case we should release the wrapper if the js object is garbage collected, but it will never be garbage collected because we have protected it. Also, even though it&apos;s not common, nothing prevents the user to take an extra ref after passing the floating one to the context, in that case we want to protect the value until the user releases its ref. This is probably the most complex part of the API that we need to think carefully. In any case, with smart pointers, and assuming we use a HashSet for this, because we don&apos;t need to keep the order, this would be something like:

priv-&gt;cachedValues.add(value);

We don&apos;t need to worry about sinking the floating ref, because GRefPtr already does that.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:189
&gt; +    JSObjectSetProperty(priv-&gt;context, priv-&gt;object, strName, jsvalue,
&gt; +        kJSPropertyAttributeReadOnly, nullptr);

This could be a single line, we use 120 as a limit.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:190
&gt; +    JSStringRelease(strName);

Use JSRetainPtr

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:61
&gt; +jsc_number_new(JSCContext* context, gdouble value)

new_double

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:44
&gt; +    JSCContext* jscContext;
&gt; +    JSGlobalContextRef context;

Why do we need to keep both? we can get the JS one from the JSC one

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:48
&gt; +G_DEFINE_TYPE_WITH_PRIVATE(JSCValue, jsc_value, G_TYPE_INITIALLY_UNOWNED)

This should be abstract

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:81
&gt; +        JSCContext* context = JSC_CONTEXT(g_value_get_object(value));
&gt; +        priv-&gt;jscContext = context;
&gt; +        priv-&gt;context = context ? jscContextGetJSContext(context) : nullptr;

We should not allow to create a JSCValue without a JSCContext

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:98
&gt; +        priv-&gt;context = nullptr;
&gt; +        priv-&gt;value = nullptr;

So, we are not taking reference of the context, I guess it&apos;s because the context has a ref of all values, but the user can take an extra ref of the value, then the context is destroyed releasing all the cached values, and we end up with a value pointing to a destroyed context.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:126
&gt; +            (GParamFlags) (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));

use static_cast here.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:150
&gt; +    if (priv-&gt;value != nullptr) {

Don&apos;t compare to nullptr, do if (priv-&gt;value)

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:151
&gt; +        JSValueUnprotect(priv-&gt;context, priv-&gt;value);

How can this happen? Aren&apos;t wrappers inmutable?

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:179
&gt; +/**
&gt; + * jsc_value_get_string:
&gt; + * @value: the #JSCValue subtype containing the value
&gt; + *
&gt; + * Retrieves the string from #JSCValue
&gt; + *
&gt; + * Returns: gchar*
&gt; + */
&gt; +const gchar*
&gt; +jsc_value_get_string(JSCValue* value)

So in the end you are mixing the idea of having subtypes with the idea of having a single value object. If we use subtypes, this doesn&apos;t belong here, but to JSCValueString

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:197
&gt; +    return g_strdup(buff);

The function returns a const char, but here you are allocating the string, leaking it and then returning a copy that the user is not expected to free, so 2 leaks here. Here again we need to decide, if we want to return a const char * to make ti easuier to handle for the user we need to keep the string somewhere and free it, otherwise we return a new allocated srtring and document that the user should free it.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:206
&gt; + * Returns: gboolean

You could say at least A #gboolean instead of just gboolean

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:209
&gt; +gboolean
&gt; +jsc_value_get_boolean(JSCValue *value)

Same here, this should be in JSCBoolean, jsc_boolean_get_boolean or get_value to avoid the bool_get_bool

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:230
&gt; +jsc_value_get_double(JSCValue *value)

jsc_number_get_double

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:250
&gt; +gint

gint -&gt; gint32

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:260
&gt; +    return JSValueToNumber(priv-&gt;context, priv-&gt;value, nullptr);

JSValueToNumber always returns a double, you need to convert the value to a int32 properly ensuring it doesn&apos;t overflow. You can use JSC::toInt32 from MathCommon.h for that

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:271
&gt; +guint

guint32

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:281
&gt; +    return (guint) JSValueToNumber(priv-&gt;context, priv-&gt;value, nullptr);

Same comments here.

&gt; Source/JavaScriptCore/API/glib/jsc/JSCBoolean.h:20
&gt; +#pragma once

We can&apos;t use #pragma once in public headers, use the #ifndef approach.

&gt; Source/JavaScriptCore/API/glib/jsc/JSCBoolean.h:23
&gt; +#include &quot;JSCContext.h&quot;
&gt; +#include &quot;JSCValue.h&quot;

Use always angle-bracket includes in public headers

&gt; Source/JavaScriptCore/API/glib/jsc/JSCBoolean.h:25
&gt; +#include &lt;JavaScriptCore/JSBase.h&gt;

This is exposing the JSC C API, don&apos;t do this.

&gt; Source/JavaScriptCore/API/glib/jsc/JSCBoolean.h:48
&gt; +JS_EXPORT GType
&gt; +jsc_boolean_get_type (void);

This should be a single line.

&gt; Source/JavaScriptCore/API/glib/jsc/JSCBoolean.h:51
&gt; +JS_EXPORT JSCBoolean*
&gt; +jsc_boolean_new      (JSCContext*, gboolean value);

Single line too. 
JSCBoolean* -&gt; JSCBoolean *
Parameters goes in new line and names are lined up. See all other public headers. And follow the same for all others (only the public ones not Private.h)

&gt; Source/JavaScriptCore/API/glib/jsc/JSCBooleanPrivate.h:25
&gt; +JS_EXPORT JSCBoolean*
&gt; +jscBooleanNewFromJSValue(JSCContext*, JSValueRef);

Single line.

&gt; Source/JavaScriptCore/API/glib/jsc/JSCValue.h:66
&gt; +/* JS_EXPORT JSCContext * */
&gt; +/* jsc_value_get_context (JSCValue *value); */

Do not include commented code like this.

&gt; Source/JavaScriptCore/PlatformGTK.cmake:52
&gt; +if (ENABLE_JSC_GLIB)

I don&apos;t think we should make this conditional. It doesn&apos;t add any new dependency and the api should always be available.

&gt; Source/JavaScriptCore/PlatformGTK.cmake:82
&gt; +    install(FILES
&gt; +        ${jscglib_HEADERS}
&gt; +            DESTINATION &quot;${WEBKITGTK_HEADER_INSTALL_DIR}/jsc&quot;

Do not add any install command for now.

&gt; Tools/ChangeLog:18
&gt; +        * TestWebKitAPI/jsc-glib/JSCValuesTest.cpp: Added.
&gt; +        * TestWebKitAPI/jsc-glib/JSCValuesTest.h: Added.
&gt; +        * TestWebKitAPI/jsc-glib/main.cpp: Added.

Don&apos;t use jsc-glib for the directory name, either use use jsc/glib/ or JavaScriptCoreGlib. also the tests should be in the Tests directory

&gt; Tools/TestWebKitAPI/jsc-glib/JSCValuesTest.cpp:21
&gt; +#include &quot;JSCValuesTest.h&quot;

I would call it JSCValueTest not Values

&gt; Tools/TestWebKitAPI/jsc-glib/JSCValuesTest.cpp:26
&gt; +ContextFixtureSetUp(ContextFixture *fixture, gconstpointer userData)

ContextFixtureSetUp -&gt; contextFixtureSetUp

&gt; Tools/TestWebKitAPI/jsc-glib/JSCValuesTest.cpp:38
&gt; +    fixture-&gt;context = jsc_context_new();
&gt; +    jsc_context_set_value(fixture-&gt;context, &quot;huvs&quot;,  JSC_VALUE(jsc_string_new(fixture-&gt;context, &quot;nivs&quot;)));
&gt; +    jsc_context_set_value(fixture-&gt;context, &quot;true&quot;,  JSC_VALUE(jsc_boolean_new(fixture-&gt;context, true)));
&gt; +    jsc_context_set_value(fixture-&gt;context, &quot;false&quot;, JSC_VALUE(jsc_boolean_new(fixture-&gt;context, false)));
&gt; +    jsc_context_set_value(fixture-&gt;context, &quot;number-z&quot;, JSC_VALUE(jsc_number_new(fixture-&gt;context, 0.0)));
&gt; +    jsc_context_set_value(fixture-&gt;context, &quot;number-p&quot;, JSC_VALUE(jsc_number_new(fixture-&gt;context, 1.1)));
&gt; +    jsc_context_set_value(fixture-&gt;context, &quot;number-n&quot;, JSC_VALUE(jsc_number_new(fixture-&gt;context, -1.1)));
&gt; +    // jsc_context_set_value(fixture-&gt;context, &quot;int0&quot;, JSC_VALUE(jsc_boolean_new(fixture-&gt;context, false)));
&gt; +    // jsc_context_set_value(fixture-&gt;context, &quot;int1&quot;, JSC_VALUE(jsc_boolean_new(fixture-&gt;context, false)));
&gt; +    // jsc_context_set_value(fixture-&gt;context, &quot;int-1&quot;, JSC_VALUE(jsc_boolean_new(fixture-&gt;context, false)));
&gt; +    // jsc_context_set_value(fixture-&gt;context, &quot;uintff&quot;, JSC_VALUE(jsc_boolean_new(fixture-&gt;context, false)));

I think all tests cases should be independent to each other, so add the valyes you need in every test case instead of adding all of them here.

&gt; Tools/TestWebKitAPI/jsc-glib/JSCValuesTest.cpp:52
&gt; +    JSCValue* value = jsc_context_get_value(fixture-&gt;context, &quot;huvs&quot;);
&gt; +    g_assert_true(JSC_IS_STRING(value));
&gt; +    g_assert_cmpstr(jsc_value_get_string(value), ==, &quot;nivs&quot;);

We need to test a lot more things, and a edge cases. Create more than one context, check what happens if you ask for a value that doesn&apos;t exist, etc. And we should also check the in tests the memory manage ment and objects lifecycle.

&gt; Tools/TestWebKitAPI/jsc-glib/main.cpp:31
&gt; +    g_test_add(&quot;/jsc-values/string-test&quot;, ContextFixture, NULL,

Maybe we can start with g_test_add_func to make it simpler, and every test will create and destroy its context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249988</commentid>
    <comment_count>8</comment_count>
      <attachid>294417</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-11-10 14:39:20 -0800</bug_when>
    <thetext>Created attachment 294417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250012</commentid>
    <comment_count>9</comment_count>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-11-10 15:37:31 -0800</bug_when>
    <thetext>Some considerations:

* Copied Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h to Source/JavaScriptCore/API/glib/JSCPrivate.h and added WEBKIT_DEFINE_SIMPLE_TYPE which defines a type without private structure (couldn&apos;t find a better name. Maybe when movind this stuff to WTF we sould use WEBKIT_DEFINE_TYPE and WEBKIT_DEFIINE_TYPE_WITH_PRIVATE?

* JSCValue stores a weak reference of the context it belongs to.

* Values are now cached in a HashMap inside JSCContext object and freed on context destruction.

* GRefPtrs and JSRetainPtrs were used to automatically ref/unref objects.

* Some object lifecycle tests were implemented to check if objects were really deallocated.

Hope this time I get less comments :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250219</commentid>
    <comment_count>10</comment_count>
      <attachid>294417</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-11 03:00:33 -0800</bug_when>
    <thetext>Comment on attachment 294417
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        according to the discussion on webklit-gtk mailing list thread

webklit-gtk -&gt; webkit-gtk

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:46
&gt; +JSCBoolean* jscBooleanCreate(JSCContext* context, JSValueRef jsValue)

I think it&apos;s easier if this also returns a JSCValue*

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:51
&gt; +    JSCBoolean* boolean = JSC_BOOLEAN(g_object_new(JSC_TYPE_BOOLEAN, &quot;context&quot;, context, NULL));

NULL -&gt; nullptr

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:52
&gt; +    jscValueSetJSValue(JSC_VALUE(boolean), jsValue);

If this returns a JSCValue, you only need to cast the g_object_new(), and here we don&apos;t need to cast again.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:68
&gt; +    g_return_val_if_fail(JSC_IS_CONTEXT(context), false);

false -&gt; nullptr

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:73
&gt; +    JSContextRef jsContext = jscContextGetJSContext(context);
&gt; +    JSValueRef jsValue = JSValueMakeBoolean(jsContext, value);
&gt; +
&gt; +    return JSC_VALUE(jscBooleanCreate(context, jsValue));

If Create returns a JSCValue you don&apos;t need to cast here once again. I think this could be a single line:

return jscBooleanCreate(context, JSValueMakeBoolean(jscContextGetJSContext(context), value)));

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:86
&gt; +    g_return_val_if_fail(JSC_IS_BOOLEAN(boolean), false);

false -&gt; FALSE

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:89
&gt; +    JSCContext* context;
&gt; +    g_object_get(G_OBJECT(context), &quot;context&quot;, &amp;context, nullptr);

You are getting the context from the context here, I guess it should be boolean instead of context. But don&apos;t use g_object_get for this, add a private method to JSCValue to get its context without taking any extra reference.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.cpp:95
&gt; +    return JSValueToBoolean(jsContext, jsValue);

return JSValueToBoolean(jscContextGetJSContext(context), jscValueGetJSValue(JSC_VALUE(boolean));

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.h:43
&gt; +    JSCValueClass parentClass;

parent_class

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.h:48
&gt; +JSCValue* jsc_boolean_new       (JSCContext* context,

JSCContext* context -&gt; JSCContext *context

In public headers we follow the GNOME style.

&gt; Source/JavaScriptCore/API/glib/JSCBoolean.h:51
&gt; +gboolean  jsc_boolean_get_value (JSCBoolean* value);

JSCBoolean* value -&gt; JSCBoolean *value

I&apos;m not sure value is the best name here, it&apos;s a bit weird that the function is get_value and receives a value parameter. And in _new() value refers to the gboolean too, not the object. I would use boolean instead, like in the implementation

&gt; Source/JavaScriptCore/API/glib/JSCBooleanPrivate.h:25
&gt; +

Remove this extra line

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:49
&gt; +typedef HashMap&lt;const gchar*, GRefPtr&lt;JSCValue&gt; &gt; ValueMap;

const char*? Who is the owner of that pointer? How do you know it will be alive for the life of the map? Use CString better. Also you don&apos;t need the extra space between &gt; &gt;

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:55
&gt; +    _JSCContextPrivate()
&gt; +    {
&gt; +        context = JSRetainPtr&lt;JSGlobalContextRef&gt;(Adopt, JSGlobalContextCreate(nullptr));
&gt; +    }

I think we can add a GObjectClass::constructed implementation and do all the initializations there.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:60
&gt; +    ~_JSCContextPrivate()
&gt; +    {
&gt; +        context.clear();
&gt; +    }

This is done automatically, you don&apos;t need to explicitly clear the smart pointer.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:74
&gt; +static void jscContextDispose(GObject* obj)
&gt; +{
&gt; +    JSCContextPrivate* priv = JSC_CONTEXT(obj)-&gt;priv;
&gt; +
&gt; +    if (priv-&gt;cachedValues.size() &gt; 0)
&gt; +        priv-&gt;cachedValues.clear();
&gt; +}

We don&apos;t need this unless we really want to explicitly clear the cache on dispose. This will be done automatically by the JSCContextPrivate destructor on finalize().

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:89
&gt; +    JSCContextPrivate* priv = context-&gt;priv;
&gt; +
&gt; +    return priv-&gt;context.get();

return context-&gt;priv-&gt;context.get();

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:122
&gt; +        return JSC_VALUE(jscStringCreate(context, jsValue));
&gt; +
&gt; +    if (JSValueIsBoolean(priv-&gt;context.get(), jsValue))
&gt; +        return JSC_VALUE(jscBooleanCreate(context, jsValue));
&gt; +
&gt; +    if (JSValueIsNumber(priv-&gt;context.get(), jsValue))
&gt; +        return JSC_VALUE(jscNumberCreate(context, jsValue));
&gt; +
&gt; +    if (JSValueIsUndefined(priv-&gt;context.get(), jsValue))
&gt; +        return JSC_VALUE(jscUndefinedCreate(context, jsValue));

You don&apos;t need all these JSC_VALUE casts if Create functions return a JSCValue

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:125
&gt; +    if (JSValueIsNull(priv-&gt;context.get(), jsValue))
&gt; +        return nullptr;

I&apos;m not sure if we will need a null value implementation too. In any case, you are handling here the null value, but null is not allowed in jsc_context_set_value

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:165
&gt; +    if (!cachedValue) {
&gt; +        // If we don&apos;t have a cached value, we cache it
&gt; +        cachedValue = jsValueToJSCValue(context, jsValue);
&gt; +        priv-&gt;cachedValues.set(name, cachedValue);
&gt; +    } else {
&gt; +        // If we already have a cached value for this property, we check if the value has changed
&gt; +        JSValueRef cachedJSValue = jscValueGetJSValue(cachedValue);
&gt; +        if (!JSValueIsStrictEqual(priv-&gt;context.get(), jsValue, cachedJSValue)) {
&gt; +            cachedValue = jsValueToJSCValue(context, jsValue);
&gt; +            priv-&gt;cachedValues.set(name, cachedValue);
&gt; +        }
&gt; +    }

This is not how we want to cache the values, I think. We should cache all wrapped values, not only the ones added to the global object. As I said in a previous review, let&apos;s forget about objects lifecycle for now, do not cache anything, to make this simpler, and then we can discuss, design and implement the way we want to handle objects lifecycle.

&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:189
&gt; +    JSObjectSetProperty(priv-&gt;context.get(), object, strName.get(), jsValue, kJSPropertyAttributeReadOnly, nullptr);

Why kJSPropertyAttributeReadOnly? That means we can call this twice for the same name to update the value.

&gt; Source/JavaScriptCore/API/glib/JSCContext.h:51
&gt; +JSCContext*

JSCContext* -&gt; JSCContext *

&gt; Source/JavaScriptCore/API/glib/JSCContext.h:54
&gt; +JSCValue*

JSCValue* -&gt; JSCValue *

&gt; Source/JavaScriptCore/API/glib/JSCContext.h:56
&gt; +jsc_context_get_value (JSCContext*  context,
&gt; +                       const gchar* name);

Same here about the *

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:58
&gt; +JSCValue* jsc_number_new_double(JSCContext* context, gdouble value)

This needs documentation

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:68
&gt; +JSCValue* jsc_number_new_int32(JSCContext* context, gint32 value)

Ditto.

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:78
&gt; +JSCValue* jsc_number_new_uint32(JSCContext* context, guint32 value)

Ditto.

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:110
&gt; +gdouble jsc_number_get_double(JSCNumber* number)

Since all other JSCValue implementations use the pattern jsc_foo_get_value, maybe for numbr we could use jsc_number_get_value_as_double|int32|uint32

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:125
&gt; +guint jsc_number_get_uint32(JSCNumber* number)

guint -&gt; guint32

&gt; Source/JavaScriptCore/API/glib/JSCNumber.cpp:140
&gt; +gint jsc_number_get_int32(JSCNumber* number)

gint -&gt; gint32

&gt; Source/JavaScriptCore/API/glib/JSCNumber.h:62
&gt; +jsc_number_get_double (JSCNumber*);

Do not omit parameter names in public headers

&gt; Source/JavaScriptCore/API/glib/JSCPrivate.h:22
&gt; +#define WEBKIT_DEFINE_SIMPLE_TYPE(TypeName, type_name, TYPE_PARENT) \

Why is this needed? What&apos;s different compared to G_DEFINE_TYPE?

&gt; Source/JavaScriptCore/API/glib/JSCString.cpp:39
&gt; +WEBKIT_DEFINE_SIMPLE_TYPE(JSCString, jsc_string, JSC_TYPE_VALUE)

Can&apos;t we use G_DEFINE_TYPE here?

&gt; Source/JavaScriptCore/API/glib/JSCString.cpp:97
&gt; +    return g_strdup(&quot;the string value&quot;);

What? I guess this should be return buff

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:53
&gt; +    kPROP_0,

Do not use k prefix for this

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:58
&gt; +static void jscValueGetProperty(GObject* obj, guint prop_id, GValue* value, GParamSpec* param_spec)

obj -&gt;object, prop_id -&gt; propID, param_spec -&gt; paramSpec

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:64
&gt; +        g_value_set_object(value, priv-&gt;context);

g_value_set_object(value, JSC_VALUE(obj)-&gt;priv-&gt;context);

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:71
&gt; +static void jscValueSetProperty(GObject* obj, guint prop_id, const GValue* value, GParamSpec* param_spec)

obj -&gt;object, prop_id -&gt; propID, param_spec -&gt; paramSpec

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:79
&gt; +        g_object_add_weak_pointer(G_OBJECT(context), (gpointer*)&amp;priv-&gt;context);

Use C++ style cast. I&apos;m not sure I understand this weak pointer, since we only null check the context in dispose method. I think the context should never be released if it still contains values, so values should take a reference to the context.

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:123
&gt; +            (GParamFlags) (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));

static_cast&lt;GParamFlags&gt;()

&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:132
&gt; +    JSCValuePrivate* priv = value-&gt;priv;
&gt; +
&gt; +    return priv-&gt;value;

return value-&gt;priv-&gt;value;

&gt; Source/JavaScriptCore/API/glib/jsc.h:28
&gt; +

JSCUndefined is missing here.

&gt; Source/JavaScriptCore/PlatformGTK.cmake:52
&gt; +if (ENABLE_JSC_GLIB)

As I said in my previous review: I don&apos;t think we should make this conditional. It doesn&apos;t add any new dependency and the api should always be available.

&gt; Tools/ChangeLog:17
&gt; +        * TestWebKitAPI/Tests/JavaScriptCoreGlib/TestJSCBoolean.cpp: Added.

Since we already have a TestWebKitAPI/Tests/JavaScriptCore dir that is currently empty, I would add a glib subdir there for our tests.

&gt; Tools/TestWebKitAPI/JavaScriptCoreGlib/main.cpp:26
&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCBoolean.h&quot;
&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCContext.h&quot;
&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCNumber.h&quot;
&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCString.h&quot;
&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCUndefined.h&quot;

The main should be in Tests/JavaScriptCoreGlib/ too. Do not add a file for every test case, move them all here to the same file and rename this as TestJSCValue for example

&gt; Tools/TestWebKitAPI/JavaScriptCoreGlib/main.cpp:34
&gt; +    g_test_add_func(&quot;/JavaScriptCoreGlib/JSCContext&quot;,   testJSCContext);

And for tests cases I would use /jsc/jsc-value/foo pattern

&gt; Tools/TestWebKitAPI/PlatformGTK.cmake:165
&gt; +    add_executable(TestJavaScriptCoreGlib

This is created in bin directlry, it should be in ${TESTWEBKITAPI_RUNTIME_OUTPUT_DIRECTORY}/JavaScriptCore/glib, I think you need to use add_test()

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCoreGlib/TestJSCBoolean.cpp:36
&gt; +    getValue = jsc_context_get_value(context, &quot;true&quot;);

JSCValue* getValue = jsc_context_get_value(context, &quot;true&quot;);

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCoreGlib/TestJSCContext.cpp:35
&gt; +    JSCContext* context = jsc_context_new();
&gt; +    g_object_add_weak_pointer(G_OBJECT(context), (gpointer*)&amp;context);
&gt; +
&gt; +    g_object_ref(context);
&gt; +    g_object_unref(context);
&gt; +    g_assert(context);
&gt; +
&gt; +    g_object_unref(context);
&gt; +    g_assert(!context);

Here you are actually testing GObject weak references, since you are checking that GObject is setting the pointer to null when destroyed. I don&apos;t think we need a specific test case for contexts, since they ar eused everywhere, they will be tested in all other tests.

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCoreGlib/TestJSCNumber.cpp:83
&gt; +    g_assert_cmpfloat(jsc_number_get_uint32(JSC_NUMBER(n)), ==, 4294967295);

g_assert_cmpuint

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCoreGlib/TestJSCNumber.cpp:116
&gt; +    g_assert_cmpfloat(jsc_number_get_int32(JSC_NUMBER(n)), ==, -2147483648);

g_assert_cmpint

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCoreGlib/TestJSCUndefined.cpp:40
&gt; +    g_assert(JSC_IS_VALUE(nonExistant));
&gt; +    g_assert(JSC_IS_UNDEFINED(nonExistant));

This is redundant, if it&apos;s UNDEFINED, it&apos;s VALUE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250658</commentid>
    <comment_count>11</comment_count>
      <attachid>294417</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-11-12 04:23:52 -0800</bug_when>
    <thetext>Comment on attachment 294417
Patch

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

&gt;&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:125
&gt;&gt; +        return nullptr;
&gt; 
&gt; I&apos;m not sure if we will need a null value implementation too. In any case, you are handling here the null value, but null is not allowed in jsc_context_set_value

Yes.. I thought about that too... Would it be too ugly if we accept nullptr as a valid input for jsc_context_set_value and create the null JSValue internally? :P
Nah... I think a JSCNull will be better...

&gt;&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:165
&gt;&gt; +    }
&gt; 
&gt; This is not how we want to cache the values, I think. We should cache all wrapped values, not only the ones added to the global object. As I said in a previous review, let&apos;s forget about objects lifecycle for now, do not cache anything, to make this simpler, and then we can discuss, design and implement the way we want to handle objects lifecycle.

Agreed. Will postpone that and change all the tests to unref every value (*ouch*) ;)

I see 2 ways of caching every value: 
1) we can make JSCContext a factory of values or 
2) we can make add a privte jscContextCacheValue and call it on constructed of JSCValue...

Just don&apos;t know what will be the best structure to hold those values... is that a good practice to use JSValueRef as the key of the hashmap?

I did some tests and found out the following:
when you create a JSValueRef, set it in the global object and retrieve it back, it points to the same structure.
If you evaluate a script to change the value, the retrieved JSValueRef is differrent from the set one. A new value is created. This logic allows us use JSValueRef as the hashmap key, but I&apos;m not sure if it&apos;s a good practice...

&gt;&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:189
&gt;&gt; +    JSObjectSetProperty(priv-&gt;context.get(), object, strName.get(), jsValue, kJSPropertyAttributeReadOnly, nullptr);
&gt; 
&gt; Why kJSPropertyAttributeReadOnly? That means we can call this twice for the same name to update the value.

No valid reason for this. Already changed to kJSPropertyAttributeNone. :P

I think that we&apos;ll need a way to change that parameter though... Some use cases may not want JavaScript to change a value or delete it... I think we can add another parameter to jsc_context_set_value or maybe to JSCValue.

I think that adding this info to JSCValue will be better, because we can still use the same jsc_context_set_value to expose callbacks and full objects. Depending on the type, we retrieve different properties and use them internally.

&gt;&gt; Source/JavaScriptCore/API/glib/JSCPrivate.h:22
&gt;&gt; +#define WEBKIT_DEFINE_SIMPLE_TYPE(TypeName, type_name, TYPE_PARENT) \
&gt; 
&gt; Why is this needed? What&apos;s different compared to G_DEFINE_TYPE?

It&apos;s just to explicitly remove type_name_init and type_name_class_init from cpp files in subtypes and avoid style-checker issues. if that&apos;s not a problem, I&apos;ll switch back to G_DEFINE_TYPE.

&gt;&gt; Source/JavaScriptCore/API/glib/JSCString.cpp:97
&gt;&gt; +    return g_strdup(&quot;the string value&quot;);
&gt; 
&gt; What? I guess this should be return buff

Of course it is! I was testing something and forgot about that. Sorry! :P

&gt;&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:79
&gt;&gt; +        g_object_add_weak_pointer(G_OBJECT(context), (gpointer*)&amp;priv-&gt;context);
&gt; 
&gt; Use C++ style cast. I&apos;m not sure I understand this weak pointer, since we only null check the context in dispose method. I think the context should never be released if it still contains values, so values should take a reference to the context.

Hrm... if we do this, we won&apos;t be able to simply g_object_unref the context. We&apos;ll need to add an API to clear the values before unreffing the context, so that it will be correctly destroyed. That&apos;s why I used a weak ref...

And I got an error when using static_cast here...

&gt;&gt; Source/JavaScriptCore/PlatformGTK.cmake:52
&gt;&gt; +if (ENABLE_JSC_GLIB)
&gt; 
&gt; As I said in my previous review: I don&apos;t think we should make this conditional. It doesn&apos;t add any new dependency and the api should always be available.

I&apos;m just afraid of breaking things up :P

&gt;&gt; Tools/TestWebKitAPI/JavaScriptCoreGlib/main.cpp:26
&gt;&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCUndefined.h&quot;
&gt; 
&gt; The main should be in Tests/JavaScriptCoreGlib/ too. Do not add a file for every test case, move them all here to the same file and rename this as TestJSCValue for example

I can do that. But I followed gtk:

Tools/TestWebKitAPI/gtk/main.cpp
Tools/TestWebKitAPI/Tests/WebKit2Gtk/

And I splited the files for readability... but I&apos;ll merge them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250944</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-13 23:57:20 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 294417 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294417&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:125
&gt; &gt;&gt; +        return nullptr;
&gt; &gt; 
&gt; &gt; I&apos;m not sure if we will need a null value implementation too. In any case, you are handling here the null value, but null is not allowed in jsc_context_set_value
&gt; 
&gt; Yes.. I thought about that too... Would it be too ugly if we accept nullptr
&gt; as a valid input for jsc_context_set_value and create the null JSValue
&gt; internally? :P
&gt; Nah... I think a JSCNull will be better...

I&apos;m not sure, TBH. Maybe at some point we need to distinguish between a function returning nullptr to express an error and returning nullptr as a the JavaScript null value. So, I don&apos;t know, maybe we can start using nullptr and add the object later of needed to make things easier.

&gt; &gt;&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:165
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; This is not how we want to cache the values, I think. We should cache all wrapped values, not only the ones added to the global object. As I said in a previous review, let&apos;s forget about objects lifecycle for now, do not cache anything, to make this simpler, and then we can discuss, design and implement the way we want to handle objects lifecycle.
&gt; 
&gt; Agreed. Will postpone that and change all the tests to unref every value
&gt; (*ouch*) ;)

Don&apos;t worry too much about leaking in the tests for now, we will fix everything eventually once we have the liefcycle management implemented.

&gt; I see 2 ways of caching every value: 
&gt; 1) we can make JSCContext a factory of values or 
&gt; 2) we can make add a privte jscContextCacheValue and call it on constructed
&gt; of JSCValue...

Not easy for me to give an opinion about this, because I don&apos;t fully understand how to the wrapped api objects and internal objects work in JavaScriptCore. We need to understand how things work in JSC to make a decision.

&gt; Just don&apos;t know what will be the best structure to hold those values... is
&gt; that a good practice to use JSValueRef as the key of the hashmap?

I think so.

&gt; I did some tests and found out the following:
&gt; when you create a JSValueRef, set it in the global object and retrieve it
&gt; back, it points to the same structure.
&gt; If you evaluate a script to change the value, the retrieved JSValueRef is
&gt; differrent from the set one. A new value is created. This logic allows us
&gt; use JSValueRef as the hashmap key, but I&apos;m not sure if it&apos;s a good
&gt; practice...
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/API/glib/JSCContext.cpp:189
&gt; &gt;&gt; +    JSObjectSetProperty(priv-&gt;context.get(), object, strName.get(), jsValue, kJSPropertyAttributeReadOnly, nullptr);
&gt; &gt; 
&gt; &gt; Why kJSPropertyAttributeReadOnly? That means we can call this twice for the same name to update the value.
&gt; 
&gt; No valid reason for this. Already changed to kJSPropertyAttributeNone. :P
&gt; 
&gt; I think that we&apos;ll need a way to change that parameter though... Some use
&gt; cases may not want JavaScript to change a value or delete it... I think we
&gt; can add another parameter to jsc_context_set_value or maybe to JSCValue.
&gt; 
&gt; I think that adding this info to JSCValue will be better, because we can
&gt; still use the same jsc_context_set_value to expose callbacks and full
&gt; objects. Depending on the type, we retrieve different properties and use
&gt; them internally.

I&apos;m not sure, this is just a convenient way to expose a value to the global object, if you need to do anything special, I guess you will be able to evaluate (const foo = &apos;bar&apos;) to make it const, no?

&gt; &gt;&gt; Source/JavaScriptCore/API/glib/JSCPrivate.h:22
&gt; &gt;&gt; +#define WEBKIT_DEFINE_SIMPLE_TYPE(TypeName, type_name, TYPE_PARENT) \
&gt; &gt; 
&gt; &gt; Why is this needed? What&apos;s different compared to G_DEFINE_TYPE?
&gt; 
&gt; It&apos;s just to explicitly remove type_name_init and type_name_class_init from
&gt; cpp files in subtypes and avoid style-checker issues. if that&apos;s not a
&gt; problem, I&apos;ll switch back to G_DEFINE_TYPE.

It&apos;s not a problem.

&gt; &gt;&gt; Source/JavaScriptCore/API/glib/JSCString.cpp:97
&gt; &gt;&gt; +    return g_strdup(&quot;the string value&quot;);
&gt; &gt; 
&gt; &gt; What? I guess this should be return buff
&gt; 
&gt; Of course it is! I was testing something and forgot about that. Sorry! :P

:-)

&gt; &gt;&gt; Source/JavaScriptCore/API/glib/JSCValue.cpp:79
&gt; &gt;&gt; +        g_object_add_weak_pointer(G_OBJECT(context), (gpointer*)&amp;priv-&gt;context);
&gt; &gt; 
&gt; &gt; Use C++ style cast. I&apos;m not sure I understand this weak pointer, since we only null check the context in dispose method. I think the context should never be released if it still contains values, so values should take a reference to the context.
&gt; 
&gt; Hrm... if we do this, we won&apos;t be able to simply g_object_unref the context.
&gt; We&apos;ll need to add an API to clear the values before unreffing the context,
&gt; so that it will be correctly destroyed. That&apos;s why I used a weak ref...

The thing is that the C API works that way in any case, I think. Protected JSValues prevent the context from being destroyed by the garbage collector. So, the values have a strong reference to the context anyway internally.

&gt; And I got an error when using static_cast here...
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/PlatformGTK.cmake:52
&gt; &gt;&gt; +if (ENABLE_JSC_GLIB)
&gt; &gt; 
&gt; &gt; As I said in my previous review: I don&apos;t think we should make this conditional. It doesn&apos;t add any new dependency and the api should always be available.
&gt; 
&gt; I&apos;m just afraid of breaking things up :P

For now, it&apos;s enough with not installing the headers, the symbols won&apos;t be exposed in production builds anyway, until we use JSC_API like macro in the headers.

&gt; &gt;&gt; Tools/TestWebKitAPI/JavaScriptCoreGlib/main.cpp:26
&gt; &gt;&gt; +#include &quot;Tests/JavaScriptCoreGlib/TestJSCUndefined.h&quot;
&gt; &gt; 
&gt; &gt; The main should be in Tests/JavaScriptCoreGlib/ too. Do not add a file for every test case, move them all here to the same file and rename this as TestJSCValue for example
&gt; 
&gt; I can do that. But I followed gtk:
&gt; 
&gt; Tools/TestWebKitAPI/gtk/main.cpp
&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/

Not really. In GTK+ we have a &quot;library&quot; with support classes shared by the tests. Those are in Tools/TestWebKitAPI/gtk/WebKit2Gtk/ because they are not tests themselves. Tools/TestWebKitAPI/gtk/main.cpp is the common main used by the google tests based tests. In our case we are not adding tests helper classes, but for now only tests, so they should go to Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/

&gt; And I splited the files for readability... but I&apos;ll merge them.

We split &quot;test suites&quot; in files, with all the tests cases of the suite in the same file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253260</commentid>
    <comment_count>13</comment_count>
      <attachid>295299</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-11-21 09:52:39 -0800</bug_when>
    <thetext>Created attachment 295299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253492</commentid>
    <comment_count>14</comment_count>
      <attachid>295368</attachid>
    <who name="Estêvão Samuel Procópio Amaral">tevaum</who>
    <bug_when>2016-11-23 07:47:07 -0800</bug_when>
    <thetext>Created attachment 295368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264361</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Gratton">mike</who>
    <bug_when>2017-01-05 22:42:14 -0800</bug_when>
    <thetext>This would be great to have for the WK2 port for Geary, which uses the JSC API both from WebKitJavascriptResult on the app side (and for unit tests) and from a WebKitWebExtension on the WebProcess side, so thanks heaps for working on it!

FWIW, from the app&apos;s perspective, the patch takes care of all the actual use cases, so as long as there&apos;s also a bridge from WebKitJavascriptResult to this API, it looks like it would be fine as-is.

It falls a little bit short for the web extension however: We are obtaining a JSGlobalContextRef from webkit_frame_get_javascript_global_context(), and are calling JSEvaluateScript on it to execute JS in the web process. This is a hard requirement at the moment.

Some other things that would be nice to have in some ideal future include: JS exception handling, being able to cast arbitrary JSValue objects to strings (e.g. by calling JSValueToStringCopy on them) — very handy for debugging, JSCheckScriptSyntax support for unit testing, and I have been experimenting with JSObjectMakeFunction, JSObjectHasProperty, JSObjectHasProperty and JSObjectGetProperty at various times, also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399136</commentid>
    <comment_count>16</comment_count>
      <attachid>295368</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-02-14 10:35:57 -0800</bug_when>
    <thetext>Comment on attachment 295368
Patch

Patches that have been up for review since 2016 are almost certainly too stale to be relevant to trunk in their current form.

If this patch is still important please rebase it and post it for review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401411</commentid>
    <comment_count>17</comment_count>
      <attachid>334449</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-02-22 06:46:14 -0800</bug_when>
    <thetext>Created attachment 334449
WIP patch

I&apos;ve started to work on this again. This is a WIP patch of what I have so far. I changed my mind with regard to several decisions we made in the past:

 - Use a single JSCValue class: the hierarchy we had didn&apos;t make sense in the end. Any value can be converted to other value types, it&apos;s perfectly valid to do something like 

value = jsc_value_new_string(context, &quot;25&quot;);
g_assert_cmpint(jsc_value_to_int32(value), ==, 25);

And it&apos;s also true that an array is also an object so:

value = jsc_value_new_array(context, G_TYPE_NONE);
g_assert(jsc_value_is_array(value));
g_assert(jsc_value_is_object(value));

So, I decided to leave a single JSCValue (only using a dedicated type for exceptions even when they are values too, just for convenience) with is() and to() methods. The API that is expected to be called on a specific value type uses the pattern jsc_value_foo_do_whatever, for example jsc_value_object_set_property().

 - No floating references. For now JSCValue is a normal GObject and we return transfer full and never adopt parameters. We can change this in the future to adopt in some cases to be able to do things like:

jsc_value_object_set_property(object, &quot;foo&quot;, jsc_value_new_number(context, 25));

This is indeed convenient, but makes other cases inconvenient, so we&apos;ll see.

 - Values are cached by the context, but not owned, they are removed from the cache when destroyed.

These are the main differences. I&apos;ve added API to support most of the types and convenient methods to handle them. There&apos;s also API to evaluate scripts, get/set values to global object and to create new classes implemented by a C object/struct. There are still a lot of things to do:

 - Documentation.
 - Introspection friendly, I&apos;m using varargs in several places without the alternative for bindings.
 - Make it installable.
 - Add support for == and ===
 - Add support for dates
 - Add support for more glib types (strv, GHashTable, etc.).
 - Add convenient API on top of current JSCClass to easily export GObjects.
 - And more things I don&apos;t remember now.

Then, on the WebKit side:

 - We need to deprecate all WebKit API using the JSC C API types and provide alternatives using the new glib API
 - We could also deprecate the DOM bindings and add a bridge API between DOM and JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404037</commentid>
    <comment_count>18</comment_count>
      <attachid>335108</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-06 09:43:17 -0800</bug_when>
    <thetext>Created attachment 335108
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404714</commentid>
    <comment_count>19</comment_count>
      <attachid>335292</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-08 05:30:32 -0800</bug_when>
    <thetext>Created attachment 335292
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406963</commentid>
    <comment_count>20</comment_count>
      <attachid>335929</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-16 04:29:19 -0700</bug_when>
    <thetext>Created attachment 335929
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407208</commentid>
    <comment_count>21</comment_count>
      <attachid>335929</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-16 20:34:26 -0700</bug_when>
    <thetext>Comment on attachment 335929
WIP patch

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

Impressive. I skimmed over about half of it... it&apos;s a lot.

I&apos;d try asking Yusuke to review the API... it seems good to me, though. Except you&apos;re missing autoptr support, which is important. So please add that.

Once you add doc comments, we&apos;ll need to carefully test introspection to e.g. ensure it&apos;s possible to create and use a JSCClass from... say, JavaScript. I think it should be fine, but needs a little demo proof of concept to be sure. Of course we don&apos;t have to commit that.

Also, perhaps we should not allow subclassing the public API GObjects? E.g. JSCClass. Subclassing that seems weird. Just because the rest of our API allows subclassing all the public types doesn&apos;t mean it&apos;s necessarily a good idea to follow that practice here... I can recommend some best-practice changes if you decide to make the public GObjects final instead of derivable.

&gt; Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp:50
&gt; +    JSC::JSAPIWrapperObject* wrapperObject = static_cast&lt;JSC::JSAPIWrapperObject*&gt;(handle.get().asCell());

I prefer to use auto* when doing a cast, because the type is written clearly on the rhs anyway.

&gt; Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp:84
&gt; +        *exception = toRef(JSC::createTypeError(toJS(jsContext), ASCIILiteral(&quot;cannot call a class constructor without |new|&quot;)));

These errors should be translatable, right? Even normal GError messages we normally mark for translation.

&gt; Source/JavaScriptCore/API/glib/JSCClass.h:22
&gt; +#if !defined(__JSC_H_INSIDE__) &amp;&amp; !defined(JSC_COMPILATION)
&gt; +#error &quot;Only &lt;jsc/jsc.h&gt; can be included directly.&quot;
&gt; +#endif

I think we should move this underneath the include guards. It&apos;s a microoptimization, but it annoys me. We can change the existing public APIs later.

&gt; Source/JavaScriptCore/API/glib/JSCContext.h:47
&gt; +typedef void (* JSCExceptionHandler) (JSCContext   *context,

JSCExceptionHandlerCallback?

&gt; Source/JavaScriptCore/API/glib/JSCDefines.h:43
&gt; +#ifdef G_OS_WIN32
&gt; +#    if defined(BUILDING_JavaScriptCore) || defined(STATICALLY_LINKED_WITH_JavaScriptCore)
&gt; +#        define JSC_API __declspec(dllexport)
&gt; +#    else
&gt; +#        define JSC_API __declspec(dllimport)
&gt; +#    endif
&gt; +#else
&gt; +#    define JSC_API __attribute__((visibility(&quot;default&quot;)))
&gt; +#endif

Seems like the G_OS_WIN32 condition creates the false hope that this code might be expected to work on Windows.

I do think we should go ahead and define and use JSC_API, but we both know it&apos;s a no-op because we default to the default visibility anyway... real shame that I failed to fix that. Which reminds me: this will be broken for WPE, because the API symbols will all get dropped by WPE&apos;s linker version script. So that script will need to be updated.

&gt; Source/JavaScriptCore/PlatformGTK.cmake:91
&gt; +add_custom_command(

Use VERBATIM

&gt; Source/JavaScriptCore/heap/Heap.h:280
&gt; +    void releaseSoon(std::unique_ptr&lt;JSCGLibWrapperObject&gt;&amp;&amp;);

std::unique_ptr&lt;JSCGLibWrapperObject&gt;&amp;&amp; is a weird API, because it implies that the object was allocated using system malloc, rather than g_malloc() or bmalloc. Doesn&apos;t seem right. Can you explain?

&gt; Source/JavaScriptCore/heap/HeapInlines.h:171
&gt; +inline void Heap::releaseSoon(std::unique_ptr&lt;JSCGLibWrapperObject&gt;&amp;&amp; object)

Here too.

&gt; Tools/TestWebKitAPI/PlatformGTK.cmake:141
&gt; +    WEBKIT_ADD_TARGET_CXX_FLAGS(TestJSC -Wno-sign-compare
&gt; +                                        -Wno-undef
&gt; +                                        -Wno-unused-parameter)

Please don&apos;t cargo cult this; instead, ensure your new tests don&apos;t trigger these warnings... I guess -Wno-unused-parameter is OK if you prefer that, because that warning is controversial in WebKit, but your code should really not be triggering -Wsign-compare and especially not -Wundef. I think we have these suppressed here because the gtest headers trigger them.

&gt; Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:47
&gt; +        g_assert(m_watchedObjects.isEmpty());

Very minor: since these are new tests, I suggest we start using GLib&apos;s testing assertions, rather than normal g_assert(). This would become g_assert_true(). See https://bugzilla.gnome.org/show_bug.cgi?id=793856 for rationale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407236</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-17 02:12:58 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #21)
&gt; Comment on attachment 335929 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=335929&amp;action=review
&gt; 
&gt; Impressive. I skimmed over about half of it... it&apos;s a lot.
&gt; 
&gt; I&apos;d try asking Yusuke to review the API... it seems good to me, though.
&gt; Except you&apos;re missing autoptr support, which is important. So please add
&gt; that.

I&apos;m missing a lot of things, this is a work in progress patch. It lacks documentation, gobject introspection and even functionality like jsc_value_equal.

&gt; Once you add doc comments, we&apos;ll need to carefully test introspection to
&gt; e.g. ensure it&apos;s possible to create and use a JSCClass from... say,
&gt; JavaScript. I think it should be fine, but needs a little demo proof of
&gt; concept to be sure. Of course we don&apos;t have to commit that.

Yes, the patch also needs a introspection compatible function for several methods that use varargs, for example. I started to work on this right after branching to have the whole release cycle to properly test this API.

&gt; Also, perhaps we should not allow subclassing the public API GObjects? E.g.
&gt; JSCClass. Subclassing that seems weird. Just because the rest of our API
&gt; allows subclassing all the public types doesn&apos;t mean it&apos;s necessarily a good
&gt; idea to follow that practice here... I can recommend some best-practice
&gt; changes if you decide to make the public GObjects final instead of derivable.

That&apos;s a good point, specially for classes where there isn&apos;t new methods, it&apos;s not possible to subclass, because new instances are always created internally.

&gt; &gt; Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp:50
&gt; &gt; +    JSC::JSAPIWrapperObject* wrapperObject = static_cast&lt;JSC::JSAPIWrapperObject*&gt;(handle.get().asCell());
&gt; 
&gt; I prefer to use auto* when doing a cast, because the type is written clearly
&gt; on the rhs anyway.

Yes, me too.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp:84
&gt; &gt; +        *exception = toRef(JSC::createTypeError(toJS(jsContext), ASCIILiteral(&quot;cannot call a class constructor without |new|&quot;)));
&gt; 
&gt; These errors should be translatable, right? Even normal GError messages we
&gt; normally mark for translation.

I don&apos;t think javascript exceptions are translated at all. I don&apos;t think a message like &quot;cannot call a class constructor without |new|&quot; is useful for the end users either, it&apos;s the developer who made a mistake, and they surely understands the message. I think we can avoid translations in jsc.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.h:22
&gt; &gt; +#if !defined(__JSC_H_INSIDE__) &amp;&amp; !defined(JSC_COMPILATION)
&gt; &gt; +#error &quot;Only &lt;jsc/jsc.h&gt; can be included directly.&quot;
&gt; &gt; +#endif
&gt; 
&gt; I think we should move this underneath the include guards. It&apos;s a
&gt; microoptimization, but it annoys me. We can change the existing public APIs
&gt; later.

This is what we do everywhere else, I think. This won&apos;t be included twice in any case, since it will fail, no?

&gt; &gt; Source/JavaScriptCore/API/glib/JSCContext.h:47
&gt; &gt; +typedef void (* JSCExceptionHandler) (JSCContext   *context,
&gt; 
&gt; JSCExceptionHandlerCallback?

Isn&apos;t Handler and Callback kind of redundant?

&gt; &gt; Source/JavaScriptCore/API/glib/JSCDefines.h:43
&gt; &gt; +#ifdef G_OS_WIN32
&gt; &gt; +#    if defined(BUILDING_JavaScriptCore) || defined(STATICALLY_LINKED_WITH_JavaScriptCore)
&gt; &gt; +#        define JSC_API __declspec(dllexport)
&gt; &gt; +#    else
&gt; &gt; +#        define JSC_API __declspec(dllimport)
&gt; &gt; +#    endif
&gt; &gt; +#else
&gt; &gt; +#    define JSC_API __attribute__((visibility(&quot;default&quot;)))
&gt; &gt; +#endif
&gt; 
&gt; Seems like the G_OS_WIN32 condition creates the false hope that this code
&gt; might be expected to work on Windows.

I don&apos;t see why not. Doesn&apos;t jsc compile in windows?

&gt; I do think we should go ahead and define and use JSC_API, but we both know
&gt; it&apos;s a no-op because we default to the default visibility anyway... real
&gt; shame that I failed to fix that. Which reminds me: this will be broken for
&gt; WPE, because the API symbols will all get dropped by WPE&apos;s linker version
&gt; script. So that script will need to be updated.

I think it&apos;s good to have those just in case we are able to fix it at some point, but yes, I agree.

&gt; &gt; Source/JavaScriptCore/PlatformGTK.cmake:91
&gt; &gt; +add_custom_command(
&gt; 
&gt; Use VERBATIM

Ok.

&gt; &gt; Source/JavaScriptCore/heap/Heap.h:280
&gt; &gt; +    void releaseSoon(std::unique_ptr&lt;JSCGLibWrapperObject&gt;&amp;&amp;);
&gt; 
&gt; std::unique_ptr&lt;JSCGLibWrapperObject&gt;&amp;&amp; is a weird API, because it implies
&gt; that the object was allocated using system malloc, rather than g_malloc() or
&gt; bmalloc. Doesn&apos;t seem right. Can you explain?

I don&apos;t understand what you mean, std::unique_ptr will use delete, the object was allocated with new. It has nothing to do with system malloc vs bmalloc. Actually, JSCGLibWrapperObject is fast allocated so it will always be using bmalloc unless disabled.

&gt; &gt; Source/JavaScriptCore/heap/HeapInlines.h:171
&gt; &gt; +inline void Heap::releaseSoon(std::unique_ptr&lt;JSCGLibWrapperObject&gt;&amp;&amp; object)
&gt; 
&gt; Here too.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/PlatformGTK.cmake:141
&gt; &gt; +    WEBKIT_ADD_TARGET_CXX_FLAGS(TestJSC -Wno-sign-compare
&gt; &gt; +                                        -Wno-undef
&gt; &gt; +                                        -Wno-unused-parameter)
&gt; 
&gt; Please don&apos;t cargo cult this; instead, ensure your new tests don&apos;t trigger
&gt; these warnings... I guess -Wno-unused-parameter is OK if you prefer that,
&gt; because that warning is controversial in WebKit, but your code should really
&gt; not be triggering -Wsign-compare and especially not -Wundef. I think we have
&gt; these suppressed here because the gtest headers trigger them.

It&apos;s not my code what causes tons of warnings, it&apos;s the gtest third party code.

&gt; &gt; Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:47
&gt; &gt; +        g_assert(m_watchedObjects.isEmpty());
&gt; 
&gt; Very minor: since these are new tests, I suggest we start using GLib&apos;s
&gt; testing assertions, rather than normal g_assert(). This would become
&gt; g_assert_true(). See https://bugzilla.gnome.org/show_bug.cgi?id=793856 for
&gt; rationale.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407246</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-17 10:43:37 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #22)
&gt; &gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.h:22
&gt; &gt; &gt; +#if !defined(__JSC_H_INSIDE__) &amp;&amp; !defined(JSC_COMPILATION)
&gt; &gt; &gt; +#error &quot;Only &lt;jsc/jsc.h&gt; can be included directly.&quot;
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; I think we should move this underneath the include guards. It&apos;s a
&gt; &gt; microoptimization, but it annoys me. We can change the existing public APIs
&gt; &gt; later.
&gt; 
&gt; This is what we do everywhere else, I think. This won&apos;t be included twice in
&gt; any case, since it will fail, no?

It&apos;s a very very small microoptimization: if the file starts with the include guards, GCC will avoid opening the file repeatedly. We should change our existing headers. Yes, there&apos;s no behavioral difference.

&gt; &gt; &gt; Source/JavaScriptCore/API/glib/JSCContext.h:47
&gt; &gt; &gt; +typedef void (* JSCExceptionHandler) (JSCContext   *context,
&gt; &gt; 
&gt; &gt; JSCExceptionHandlerCallback?
&gt; 
&gt; Isn&apos;t Handler and Callback kind of redundant?

Kind of. This one is iffy IMO.

&gt; &gt; &gt; Source/JavaScriptCore/API/glib/JSCDefines.h:43
&gt; &gt; &gt; +#ifdef G_OS_WIN32
&gt; &gt; &gt; +#    if defined(BUILDING_JavaScriptCore) || defined(STATICALLY_LINKED_WITH_JavaScriptCore)
&gt; &gt; &gt; +#        define JSC_API __declspec(dllexport)
&gt; &gt; &gt; +#    else
&gt; &gt; &gt; +#        define JSC_API __declspec(dllimport)
&gt; &gt; &gt; +#    endif
&gt; &gt; &gt; +#else
&gt; &gt; &gt; +#    define JSC_API __attribute__((visibility(&quot;default&quot;)))
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; Seems like the G_OS_WIN32 condition creates the false hope that this code
&gt; &gt; might be expected to work on Windows.
&gt; 
&gt; I don&apos;t see why not. Doesn&apos;t jsc compile in windows?

I guess it could be useful there... OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407299</commentid>
    <comment_count>24</comment_count>
      <attachid>335929</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-18 10:24:29 -0700</bug_when>
    <thetext>Comment on attachment 335929
WIP patch

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

Early review. I have one question about the design of this patch: why not just accepting GObject for a wrapped object?

&gt; Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp:54
&gt; +    JSC::Heap::heap(wrapperObject)-&gt;releaseSoon(std::unique_ptr&lt;JSC::JSCGLibWrapperObject&gt;(static_cast&lt;JSC::JSCGLibWrapperObject*&gt;(wrapperObject-&gt;wrappedObject())));

If a wrapped object is GObject, we can just do adoptGRef here, which is well-aligned to the objective C implementation.

&gt; Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp:94
&gt; +    m_wrappedObject = wrappedObject;

And do g_object_ref here, which is aligned to the Objective C implementation.

&gt; Source/JavaScriptCore/API/glib/JSCContext.h:124
&gt; +                                      GDestroyNotify      destroy_function);

What is the purpose of destroy_function? Why not just calling g_object_unref when the wrapper is dead?
I think the current objective-c implementation does this.

&gt; Source/JavaScriptCore/API/glib/JSCGLibWrapperObject.h:47
&gt; +class JSCGLibWrapperObject {
&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; +public:
&gt; +    JSCGLibWrapperObject(gpointer object, GDestroyNotify destroyFunction)
&gt; +        : m_object(object)
&gt; +        , m_destroyFunction(destroyFunction)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    ~JSCGLibWrapperObject()
&gt; +    {
&gt; +        if (m_destroyFunction)
&gt; +            m_destroyFunction(m_object);
&gt; +    }
&gt; +
&gt; +    gpointer object() const { return m_object; }
&gt; +
&gt; +private:
&gt; +    gpointer m_object { nullptr };
&gt; +    GDestroyNotify m_destroyFunction { nullptr };
&gt; +};

I think just wrapping gobject instead of having this class is cleaner and well-aligned to objective C implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407345</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-19 01:04:46 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #24)
&gt; Comment on attachment 335929 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=335929&amp;action=review
&gt; 
&gt; Early review. I have one question about the design of this patch: why not
&gt; just accepting GObject for a wrapped object?

We don&apos;t want to limit this to GObjects, we want to allow using a boxed type for example, or simply any C struct. On top of this patch, I plan to add convenience API specific for GType system, making it easier to expose GObjects directly, automatically handling things like the prototype hierarchy.

&gt; &gt; Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp:54
&gt; &gt; +    JSC::Heap::heap(wrapperObject)-&gt;releaseSoon(std::unique_ptr&lt;JSC::JSCGLibWrapperObject&gt;(static_cast&lt;JSC::JSCGLibWrapperObject*&gt;(wrapperObject-&gt;wrappedObject())));
&gt; 
&gt; If a wrapped object is GObject, we can just do adoptGRef here, which is
&gt; well-aligned to the objective C implementation.

In Objective C everything is an Object, that&apos;s no the case of GLib world.

&gt; &gt; Source/JavaScriptCore/API/glib/JSAPIWrapperObjectGLib.cpp:94
&gt; &gt; +    m_wrappedObject = wrappedObject;
&gt; 
&gt; And do g_object_ref here, which is aligned to the Objective C implementation.
&gt; 
&gt; &gt; Source/JavaScriptCore/API/glib/JSCContext.h:124
&gt; &gt; +                                      GDestroyNotify      destroy_function);
&gt; 
&gt; What is the purpose of destroy_function? Why not just calling g_object_unref
&gt; when the wrapper is dead?
&gt; I think the current objective-c implementation does this.

In case of using a boxed type or any other custom struct here we would pass my_boxed_type_unref or my_custom_struct_free. See the example in the unit tests.

&gt; &gt; Source/JavaScriptCore/API/glib/JSCGLibWrapperObject.h:47
&gt; &gt; +class JSCGLibWrapperObject {
&gt; &gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; &gt; +public:
&gt; &gt; +    JSCGLibWrapperObject(gpointer object, GDestroyNotify destroyFunction)
&gt; &gt; +        : m_object(object)
&gt; &gt; +        , m_destroyFunction(destroyFunction)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    ~JSCGLibWrapperObject()
&gt; &gt; +    {
&gt; &gt; +        if (m_destroyFunction)
&gt; &gt; +            m_destroyFunction(m_object);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    gpointer object() const { return m_object; }
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    gpointer m_object { nullptr };
&gt; &gt; +    GDestroyNotify m_destroyFunction { nullptr };
&gt; &gt; +};
&gt; 
&gt; I think just wrapping gobject instead of having this class is cleaner and
&gt; well-aligned to objective C implementation.

I agree it would be easier and cleaner, but would limit the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407614</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-20 00:16:29 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #23)
&gt; (In reply to Carlos Garcia Campos from comment #22)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/API/glib/JSCClass.h:22
&gt; &gt; &gt; &gt; +#if !defined(__JSC_H_INSIDE__) &amp;&amp; !defined(JSC_COMPILATION)
&gt; &gt; &gt; &gt; +#error &quot;Only &lt;jsc/jsc.h&gt; can be included directly.&quot;
&gt; &gt; &gt; &gt; +#endif
&gt; &gt; &gt; 
&gt; &gt; &gt; I think we should move this underneath the include guards. It&apos;s a
&gt; &gt; &gt; microoptimization, but it annoys me. We can change the existing public APIs
&gt; &gt; &gt; later.
&gt; &gt; 
&gt; &gt; This is what we do everywhere else, I think. This won&apos;t be included twice in
&gt; &gt; any case, since it will fail, no?
&gt; 
&gt; It&apos;s a very very small microoptimization: if the file starts with the
&gt; include guards, GCC will avoid opening the file repeatedly. We should change
&gt; our existing headers. Yes, there&apos;s no behavioral difference.

But that would allow to do something like:

#include &lt;jsc/jsc.h&gt;
#include &lt;jsc/JSCFoo.h&gt;

We never want to allow including headers other than jsc.h even jsc.h has already been included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407630</commentid>
    <comment_count>27</comment_count>
      <attachid>336112</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-20 03:27:44 -0700</bug_when>
    <thetext>Created attachment 336112
Patch

Addressed review comments, added documentation, gobject-introspection and auto cleanups. I think this is enough for an initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407631</commentid>
    <comment_count>28</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-20 03:31:19 -0700</bug_when>
    <thetext>Attachment 336112 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/jsc.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCValue.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCWrapperMap.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCDefines.h&quot;
ERROR: Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:911:  More than one command on the same line  [whitespace/newline] [4]
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCContext.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCGLibWrapperObject.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCVirtualMachine.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCClass.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCException.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCCallbackFunction.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCAutocleanups.h&quot;
Total errors found: 1 in 52 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407632</commentid>
    <comment_count>29</comment_count>
      <attachid>336113</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-20 04:14:49 -0700</bug_when>
    <thetext>Created attachment 336113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407633</commentid>
    <comment_count>30</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-20 04:17:50 -0700</bug_when>
    <thetext>Attachment 336113 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/jsc.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCValue.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCWrapperMap.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCDefines.h&quot;
ERROR: Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:911:  More than one command on the same line  [whitespace/newline] [4]
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCContext.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCGLibWrapperObject.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCVirtualMachine.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCClass.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCException.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCCallbackFunction.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/JavaScriptCore/API/glib/JSCAutocleanups.h&quot;
Total errors found: 1 in 52 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407641</commentid>
    <comment_count>31</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-20 05:49:33 -0700</bug_when>
    <thetext>Btw, I added gobject introspection support, but I know there are still several functions that are not introspectable. I&apos;ll mark those as skip and add istrospectable versions in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407691</commentid>
    <comment_count>32</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-03-20 09:33:47 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #26)
&gt; But that would allow to do something like:
&gt; 
&gt; #include &lt;jsc/jsc.h&gt;
&gt; #include &lt;jsc/JSCFoo.h&gt;
&gt; 
&gt; We never want to allow including headers other than jsc.h even jsc.h has
&gt; already been included.

Good point. I never considered that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407955</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-21 01:42:21 -0700</bug_when>
    <thetext>Committed r229798: &lt;https://trac.webkit.org/changeset/229798&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293034</attachid>
            <date>2016-10-27 10:30:05 -0700</date>
            <delta_ts>2016-10-27 10:46:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161027152615.patch</filename>
            <type>text/plain</type>
            <size>54838</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDQm9vbGVhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZiZjliZGM4MTNiNWY3MTM3YjAxMDUx
NTEzMWNmZDYzNDg1MGI4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdh
bWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NCb29sZWFuLmgiCisK
KyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0
ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAq
IEBUaXRsZTogSlNDQm9vbGVhbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiAjSlNDVmFsdWUgc3Vi
dHlwZSB0byByZXByZXNlbnQgYm9vbGVhbiB2YWx1ZXMKKyAqCisgKiAjSlNDQm9vbGVhbiBpcyB0
aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgYm9vbGVhbiB2YWx1ZXMgaW5zaWRlCisgKiBKYXZh
U2NyaXB0Q29yZS4KKyAqCisgKi8KKworR19ERUZJTkVfVFlQRShKU0NCb29sZWFuLCBqc2NfYm9v
bGVhbiwgSlNDX1RZUEVfVkFMVUUpCisKK3N0YXRpYyB2b2lkCitqc2NfYm9vbGVhbl9jbGFzc19p
bml0KEpTQ0Jvb2xlYW5DbGFzcyAqKQoreworfQorCitzdGF0aWMgdm9pZAoranNjX2Jvb2xlYW5f
aW5pdChKU0NCb29sZWFuICopCit7Cit9CisKK0pTQ0Jvb2xlYW4gKgoranNjQm9vbGVhbk5ld0Zy
b21KU1ZhbHVlKEpTQ0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAg
ICBKU0NCb29sZWFuKiBib29sZWFuOworCisgICAgYm9vbGVhbiA9IChKU0NCb29sZWFuICopIGdf
b2JqZWN0X25ldyhKU0NfVFlQRV9CT09MRUFOLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpOwor
ICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZShKU0NfVkFMVUUoYm9vbGVhbiksIGpzdmFsdWUpOworCisg
ICAgcmV0dXJuIGJvb2xlYW47Cit9CisKKy8qKgorICoganNjX2Jvb2xlYW5fbmV3OgorICogQGNv
bnRleHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEB2
YWx1ZTogVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCB0aGUgI0pTQ0Jvb2xlYW4gd2lsbCByZXByZXNl
bnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNKU0NCb29sZWFuIHdpdGggQHZhbHVlIGFzIHRoZSB2
YWx1ZQorICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNKU0NCb29sZWFuIG9iamVj
dAorICovCitKU0NCb29sZWFuICoKK2pzY19ib29sZWFuX25ldyhKU0NDb250ZXh0ICpjb250ZXh0
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYganNjb250ZXh0OworICAgIEpT
VmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihqc2NvbnRleHQs
IHZhbHVlKTsKKworICAgIHJldHVybiBqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoY29udGV4dCwg
anN2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQm9vbGVhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41NjQ2YjMwMTJmN2RhMDI5YTk5YjRkNmU4MzliMTgyYzc0ZjBiNzM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xl
YW4uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOj
byBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQk9PTEVBTiAgICAgICAgICAg
IChqc2NfYm9vbGVhbl9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfQk9PTEVBTihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9CT09MRUFO
LCBKU0NCb29sZWFuKSkKKyNkZWZpbmUgSlNDX0lTX0JPT0xFQU4ob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfQk9PTEVBTikpCisjZGVmaW5l
IEpTQ19CT09MRUFOX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX0JPT0xFQU4sIEpTQ0Jvb2xlYW5DbGFzcykpCisjZGVmaW5lIEpTQ19J
U19CT09MRUFOX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IEpTQ19UWVBFX0JPT0xFQU4pKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDQm9vbGVhbiAgICAgICAg
SlNDQm9vbGVhbjsKK3R5cGVkZWYgc3RydWN0IF9KU0NCb29sZWFuQ2xhc3MgICBKU0NCb29sZWFu
Q2xhc3M7CisKK3N0cnVjdCBfSlNDQm9vbGVhbiB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsK
Kworc3RydWN0IF9KU0NCb29sZWFuQ2xhc3MgeworICAgIEpTQ1ZhbHVlQ2xhc3MgcGFyZW50Q2xh
c3M7Cit9OworCitKU19FWFBPUlQgR1R5cGUKK2pzY19ib29sZWFuX2dldF90eXBlICh2b2lkKTsK
KworSlNfRVhQT1JUIEpTQ0Jvb2xlYW4qCitqc2NfYm9vbGVhbl9uZXcgICAgICAoSlNDQ29udGV4
dCosIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuUHJpdmF0ZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjYxNzM2
MDI3OWZjYzc2Zjk2ZGJjYWYxNTA1MjBjZGI2MGYwZTI5OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuUHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU0NCb29sZWFuLmgiCisKK0pTX0VYUE9SVCBKU0NCb29sZWFuKgoranNjQm9vbGVhbk5ld0Zy
b21KU1ZhbHVlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmM0NWEwNGMwYzE4NTRh
NGU2ZDQ4NzViMGRkNDA4OTkxODI3NWFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8
dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisKKyNpbmNsdWRlICJKU0NCb29sZWFuUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0Nv
bnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDTnVtYmVyUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkpTQ1N0cmluZ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorI2luY2x1ZGUgIkpT
Q1ZhbHVlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVm
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKworLyoqCisgKiBT
RUNUSU9OOiBKU0NDb250ZXh0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHRDb3Jl
IGV4ZWN1dGlvbiBjb250ZXh0CisgKiBAVGl0bGU6IEpTQ0NvbnRleHQKKyAqCisgKiBBICNKU0ND
b250ZXh0IGlzIHRoZSBjZW50cmFsIGNsYXNzIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBBUEkuIEl0
IGlzCisgKiByZXNwb25zaWJsZSBmb3IgZXZhbHVhdGlvbiBvZiBzY3JpcHRzIGluIHRoZSBleGVj
dXRpb24gY29udGV4dCwKKyAqIHNldHRpbmcgYW5kIGdldHRpbmcgdmFsdWVzIGZyb20gdGhlIGV4
ZWN1dGlvbiBjb250ZXh0IGFuZCB0byBtYWtlCisgKiBuYXRpdmUgb2JqZWN0cywgbWV0aG9kcyBh
bmQgZnVuY3Rpb25zIGFjY2Vzc2libGUgdG8gSmF2YVNjcmlwdC4KKyAqCisgKi8KKworc3RydWN0
IF9KU0NDb250ZXh0UHJpdmF0ZSB7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQ7Cisg
ICAgSlNPYmplY3RSZWYgb2JqZWN0OworCisgICAgR0xpc3QqIHZhbHVlczsKK307CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9QUklWQVRFKEpTQ0NvbnRleHQsIGpzY19jb250ZXh0LCBHX1RZUEVfT0JK
RUNUKQorCitzdGF0aWMgdm9pZAoranNjQ29udGV4dERpc3Bvc2UoR09iamVjdCogb2JqKQorewor
ICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2OworCisgICAgcHJpdiA9IChKU0NDb250ZXh0UHJp
dmF0ZSopIGpzY19jb250ZXh0X2dldF9pbnN0YW5jZV9wcml2YXRlKEpTQ19DT05URVhUKG9iaikp
OworCisgICAgZ19saXN0X2ZyZWVfZnVsbChwcml2LT52YWx1ZXMsIGdfb2JqZWN0X3VucmVmKTsK
KworICAgIGlmICghcHJpdi0+Y29udGV4dCkgeworICAgICAgICBKU0dsb2JhbENvbnRleHRSZWxl
YXNlKHByaXYtPmNvbnRleHQpOworICAgICAgICBwcml2LT5jb250ZXh0ID0gbnVsbHB0cjsKKyAg
ICAgICAgcHJpdi0+b2JqZWN0ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFT
Uyhqc2NfY29udGV4dF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iaik7Cit9CisKK3N0YXRpYyB2
b2lkCitqc2NfY29udGV4dF9jbGFzc19pbml0KEpTQ0NvbnRleHRDbGFzcyoga2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBvYmpDbGFzczsKKworICAgIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworICAgIG9iakNsYXNzLT5kaXNwb3NlID0ganNjQ29udGV4dERpc3Bvc2U7Cit9
CisKK3N0YXRpYyB2b2lkCitqc2NfY29udGV4dF9pbml0KEpTQ0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXY7CisKKyAgICBwcml2ID0gKEpTQ0NvbnRleHRQ
cml2YXRlKikganNjX2NvbnRleHRfZ2V0X2luc3RhbmNlX3ByaXZhdGUoY29udGV4dCk7CisgICAg
cHJpdi0+Y29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZShudWxscHRyKTsKKyAgICBwcml2
LT5vYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QocHJpdi0+Y29udGV4dCk7CisgICAg
cHJpdi0+dmFsdWVzID0gbnVsbHB0cjsKK30KKworSlNHbG9iYWxDb250ZXh0UmVmCitqc2NDb250
ZXh0R2V0SlNDb250ZXh0KEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSlNDQ29udGV4dFBy
aXZhdGUqIHByaXY7CisKKyAgICBwcml2ID0gKEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRl
eHRfZ2V0X2luc3RhbmNlX3ByaXZhdGUoY29udGV4dCk7CisgICAgcmV0dXJuIHByaXYtPmNvbnRl
eHQ7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfbmV3OgorICoKKyAqIENyZWF0ZXMgYSBuZXcg
I0pTQ0NvbnRleHQgZW52aXJvbm1lbnQgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0CisgKiBjb2RlLgor
ICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNKU0NDb250ZXh0IG9iamVjdAorICov
CitKU0NDb250ZXh0KgoranNjX2NvbnRleHRfbmV3KHZvaWQpCit7CisgICAgcmV0dXJuIChKU0ND
b250ZXh0KikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX0NPTlRFWFQsIG51bGxwdHIpOworfQorCitz
dGF0aWMgSlNDVmFsdWUqCitqc1ZhbHVlVG9KU0NWYWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGpzdmFsdWUpCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXY7CisKKyAg
ICBwcml2ID0gKEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRleHRfZ2V0X2luc3RhbmNlX3By
aXZhdGUoY29udGV4dCk7CisKKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKHByaXYtPmNvbnRleHQs
IGpzdmFsdWUpKQorICAgICAgICByZXR1cm4gSlNDX1ZBTFVFKGpzY1N0cmluZ05ld0Zyb21KU1Zh
bHVlKGNvbnRleHQsIGpzdmFsdWUpKTsKKworICAgIGlmIChKU1ZhbHVlSXNCb29sZWFuKHByaXYt
PmNvbnRleHQsIGpzdmFsdWUpKQorICAgICAgICByZXR1cm4gSlNDX1ZBTFVFKGpzY0Jvb2xlYW5O
ZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKSk7CisgICAgCisgICAgaWYgKEpTVmFsdWVJ
c051bWJlcihwcml2LT5jb250ZXh0LCBqc3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIEpTQ19WQUxV
RShqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKSk7CisKKyAgICBpZiAo
SlNWYWx1ZUlzVW5kZWZpbmVkKHByaXYtPmNvbnRleHQsIGpzdmFsdWUpIHx8IEpTVmFsdWVJc051
bGwocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9nZXRf
dmFsdWU6CisgKiBAY29udGV4dDogdGhlICNKU0NDb250ZXh0IHRoYXQgdGhlIHZhbHVlIHdpbGwg
YmUgcmV0cmlldmVkIGZyb20KKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZ2xvYmFsIG9iamVj
dCBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgcmV0cmlldmVkCisgKgorICogUmV0cmlldmVzIHByb3Bl
cnRpZXMgZnJvbSB0aGUgSmF2YVNjcmlwdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAor
ICogdGhlICNKU0NDb250ZXh0LiBWYWx1ZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHN1YnR5cGVzIG9m
IEpTQ1ZhbHVlLgorICoKKyAqIFJldHVybnM6IEEgSlNDVmFsdWUgc3VidHlwZSByZXByZXNlbnRp
bmcgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHkKKyAqLworSlNDVmFsdWUqCitq
c2NfY29udGV4dF9nZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKyAgICBKU1N0cmluZ1JlZiBzdHJO
YW1lOworICAgIEpTVmFsdWVSZWYganN2YWx1ZTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9
IG51bGxwdHI7CisKKyAgICBwcml2ID0gKEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRleHRf
Z2V0X2luc3RhbmNlX3ByaXZhdGUoY29udGV4dCk7CisKKyAgICBzdHJOYW1lID0gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSk7CisgICAganN2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkocHJpdi0+Y29udGV4dCwgcHJpdi0+b2JqZWN0LCBzdHJOYW1lLCAmZXhjZXB0aW9uKTsK
KyAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyTmFtZSk7CisKKyAgICByZXR1cm4ganNWYWx1ZVRvSlND
VmFsdWUoY29udGV4dCwganN2YWx1ZSk7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfc2V0X3Zh
bHVlOgorICogQGNvbnRleHQ6IHRoZSAjSlNDQ29udGV4dCB3aGVyZSB0aGUgdmFsdWUgd2lsbCBi
ZSBzZXQKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZ2xvYmFsIG9iamVjdCBwcm9wZXJ0eSB0
aGF0IHdpbGwgYmUgc2V0CisgKiBAdmFsdWU6IHRoZSB2YWx1ZQorICoKKyAqIFNldHMgcHJvcGVy
dGllcyBpbiB0aGUgSmF2YVNjcmlwdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAorICog
dGhlICNKU0NDb250ZXh0LiBWYWx1ZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHN1YnR5cGVzIG9mIEpT
Q1ZhbHVlLgorICovCit2b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29u
dGV4dCwgY29uc3QgZ2NoYXIqIG5hbWUsIEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBKU0NDb250
ZXh0UHJpdmF0ZSogcHJpdjsKKyAgICBKU1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBwcml2ID0g
KEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRleHRfZ2V0X2luc3RhbmNlX3ByaXZhdGUoY29u
dGV4dCk7CisKKyAgICBpZiAoZ19vYmplY3RfaXNfZmxvYXRpbmcodmFsdWUpKSB7CisgICAgICAg
IGdfb2JqZWN0X3JlZl9zaW5rKHZhbHVlKTsKKyAgICAgICAgcHJpdi0+dmFsdWVzID0gZ19saXN0
X2FwcGVuZChwcml2LT52YWx1ZXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBqc3ZhbHVlID0ganNj
VmFsdWVHZXRKU1ZhbHVlKHZhbHVlKTsKKyAgICBKU1N0cmluZ1JlZiBzdHJOYW1lID0gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShw
cml2LT5jb250ZXh0LCBwcml2LT5vYmplY3QsIHN0ck5hbWUsIGpzdmFsdWUsCisgICAgICAgIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIG51bGxwdHIpOworICAgIEpTU3RyaW5nUmVsZWFz
ZShzdHJOYW1lKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY3ODMzNTllYmQwODdmMjYyYmFhMDU0MDllMDA3OWQ4ZGJjMDAzNTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29u
dGV4dC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2
w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNCYXNlLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIEpTQ19UWVBFX0NPTlRFWFQgICAgICAgICAgICAoanNjX2NvbnRleHRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgSlNDX0NPTlRFWFQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dCkpCisjZGVmaW5l
IEpTQ19JU19DT05URVhUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIEpTQ19UWVBFX0NPTlRFWFQpKQorI2RlZmluZSBKU0NfQ09OVEVYVF9DTEFTUyhjbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9DT05URVhU
LCBKU0NDb250ZXh0Q2xhc3MpKQorI2RlZmluZSBKU0NfSVNfQ09OVEVYVF9DTEFTUyhjbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9DT05URVhUKSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgICAgICAgIEpTQ0NvbnRleHQ7Cit0eXBlZGVmIHN0
cnVjdCBfSlNDQ29udGV4dENsYXNzICAgSlNDQ29udGV4dENsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ0NvbnRleHRQcml2YXRlIEpTQ0NvbnRleHRQcml2YXRlOworCitzdHJ1Y3QgX0pTQ0NvbnRl
eHQgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgSlNDQ29udGV4dFByaXZhdGUgKnByaXY7
Cit9OworCitzdHJ1Y3QgX0pTQ0NvbnRleHRDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVu
dENsYXNzOworfTsKKworSlNfRVhQT1JUIEdUeXBlCitqc2NfY29udGV4dF9nZXRfdHlwZSAgKHZv
aWQpOworCitKU19FWFBPUlQgSlNDQ29udGV4dCAqCitqc2NfY29udGV4dF9uZXcgICAgICAgKHZv
aWQpOworCitKU19FWFBPUlQgSlNDVmFsdWUgKgoranNjX2NvbnRleHRfZ2V0X3ZhbHVlIChKU0ND
b250ZXh0KiwgY29uc3QgZ2NoYXIgKm5hbWUpOworCitKU19FWFBPUlQgdm9pZAoranNjX2NvbnRl
eHRfc2V0X3ZhbHVlIChKU0NDb250ZXh0KiwgY29uc3QgZ2NoYXIgKm5hbWUsIEpTQ1ZhbHVlKik7
CisKK0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDb250ZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlNjhiZDllNTIzNjY4ZjkwMzAxMzk1MjBm
MThmYjMxNTIyZTUwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVt
QGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorCitK
U19FWFBPUlQgSlNHbG9iYWxDb250ZXh0UmVmCitqc2NDb250ZXh0R2V0SlNDb250ZXh0KEpTQ0Nv
bnRleHQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NO
dW1iZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTg1ZjYzZWQ4ZjM5NDgzNTRmZGQ1NzU3OWNjMjgxZDNhZGY2MDgwYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIu
Y3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ051bWJlci5oIgorCisjaW5jbHVkZSAiSlNDQ29udGV4dFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKworLyoqCisgKiBAVGl0bGU6IEpTQ051bWJlcgorICog
QFNob3J0X2Rlc2NyaXB0aW9uOiAjSlNDVmFsdWUgc3VidHlwZSB0byByZXByZXNlbnQgbnVtZXJp
YyB2YWx1ZXMKKyAqCisgKiAjSlNDTnVtYmVyIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2Vu
dCBudW1lcmljIHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLworCitH
X0RFRklORV9UWVBFKEpTQ051bWJlciwganNjX251bWJlciwgSlNDX1RZUEVfVkFMVUUpCisKK3N0
YXRpYyB2b2lkCitqc2NfbnVtYmVyX2NsYXNzX2luaXQoSlNDTnVtYmVyQ2xhc3MqKQoreworfQor
CitzdGF0aWMgdm9pZAoranNjX251bWJlcl9pbml0KEpTQ051bWJlciopCit7Cit9CisKK0pTQ051
bWJlciAqCitqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGpzdmFsdWUpCit7CisgICAgSlNDTnVtYmVyKiB2YWx1ZTsKKworICAgIHZhbHVlID0g
KEpTQ051bWJlciopIGdfb2JqZWN0X25ldyhKU0NfVFlQRV9OVU1CRVIsICJjb250ZXh0IiwgY29u
dGV4dCwgTlVMTCk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVlKEpTQ19WQUxVRSh2YWx1ZSksIGpz
dmFsdWUpOworCisgICAgcmV0dXJuIHZhbHVlOworfQorCitKU0NOdW1iZXIqCitqc2NfbnVtYmVy
X25ldyhKU0NDb250ZXh0KiBjb250ZXh0LCBnZG91YmxlIHZhbHVlKQoreworICAgIEpTQ29udGV4
dFJlZiBqc2NvbnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisgICAganNjb250ZXh0
ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBqc3ZhbHVlID0gSlNWYWx1
ZU1ha2VOdW1iZXIoanNjb250ZXh0LCB2YWx1ZSk7CisKKyAgICByZXR1cm4ganNjTnVtYmVyTmV3
RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSk7Cit9CisKK0pTQ051bWJlcioKK2pzY19udW1i
ZXJfbmV3X2ludDMyKEpTQ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgdmFsdWUpCit7CisgICAgSlND
b250ZXh0UmVmIGpzY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2Nv
bnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBK
U1ZhbHVlTWFrZU51bWJlcihqc2NvbnRleHQsIHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1i
ZXJOZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KKworSlNDTnVtYmVyKgoranNj
X251bWJlcl9uZXdfdWludDMyKEpTQ0NvbnRleHQqIGNvbnRleHQsIGd1aW50IHZhbHVlKQorewor
ICAgIEpTQ29udGV4dFJlZiBqc2NvbnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisg
ICAganNjb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBqc3Zh
bHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIoanNjb250ZXh0LCB2YWx1ZSk7CisKKyAgICByZXR1cm4g
anNjTnVtYmVyTmV3RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc2MWNmMTU2ODJl
NjcyMDVmNWZhMWNlYjBjNTk1YmIyYWUwMTYwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8
dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5o
IgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jh
c2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgSlNDX1RZUEVfTlVNQkVSICAgICAgICAgICAgKGpzY19udW1iZXJfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgSlNDX05VTUJFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBKU0NfVFlQRV9OVU1CRVIsIEpTQ051bWJlcikpCisjZGVmaW5lIEpTQ19JU19O
VU1CRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlND
X1RZUEVfTlVNQkVSKSkKKyNkZWZpbmUgSlNDX05VTUJFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9OVU1CRVIsIEpTQ051bWJlckNs
YXNzKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9OVU1CRVIpKQorCit0eXBlZGVmIHN0cnVjdCBf
SlNDTnVtYmVyICAgICAgICBKU0NOdW1iZXI7Cit0eXBlZGVmIHN0cnVjdCBfSlNDTnVtYmVyQ2xh
c3MgICBKU0NOdW1iZXJDbGFzczsKKworc3RydWN0IF9KU0NOdW1iZXIgeworICAgIEpTQ1ZhbHVl
IHBhcmVudDsKK307CisKK3N0cnVjdCBfSlNDTnVtYmVyQ2xhc3MgeworICAgIEpTQ1ZhbHVlQ2xh
c3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBPUlQgR1R5cGUKK2pzY19udW1iZXJfZ2V0X3R5
cGUgICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NOdW1iZXIgKgoranNjX251bWJlcl9uZXcgICAg
ICAgIChKU0NDb250ZXh0KiwgZ2RvdWJsZSB2YWx1ZSk7CisKK0pTX0VYUE9SVCBKU0NOdW1iZXIg
KgoranNjX251bWJlcl9uZXdfaW50MzIgIChKU0NDb250ZXh0KiwgZ2ludCB2YWx1ZSk7CisKK0pT
X0VYUE9SVCBKU0NOdW1iZXIgKgoranNjX251bWJlcl9uZXdfdWludDMyIChKU0NDb250ZXh0Kiwg
Z3VpbnQgdmFsdWUpOworCitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NOdW1iZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI5ZmNlNTA2Yzc3MzQy
ZmYwOTU4YjViMDAxNDUwZjE3ZmE4YzBmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXJQcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFy
YWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ051bWJl
ci5oIgorCitKU19FWFBPUlQgSlNDTnVtYmVyKgoranNjTnVtYmVyTmV3RnJvbUpTVmFsdWUoSlND
Q29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDU3RyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWI5NWVhYWRmNmZlZDRhMzRjMzE5YjMxMDcxYTlj
MzllZDI0MjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ1N0cmluZy5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgiCisKKyNpbmNsdWRl
ICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDU3RyaW5nCisgKiBAU2hv
cnRfZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBzdHJpbmdzCisg
KgorICogI0pTQ1N0cmluZyBpcyB0aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgc3RyaW5nIHZh
bHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLworCitHX0RFRklORV9UWVBF
KEpTQ1N0cmluZywganNjX3N0cmluZywgSlNDX1RZUEVfVkFMVUUpCisKK3N0YXRpYyB2b2lkCitq
c2Nfc3RyaW5nX2NsYXNzX2luaXQoSlNDU3RyaW5nQ2xhc3MgKikKK3sKK30KKworc3RhdGljIHZv
aWQKK2pzY19zdHJpbmdfaW5pdChKU0NTdHJpbmcgKikKK3sKK30KKworSlNDU3RyaW5nICoKK2pz
Y1N0cmluZ05ld0Zyb21KU1ZhbHVlKEpTQ0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYganN2
YWx1ZSkKK3sKKyAgICBKU0NTdHJpbmcqIHN0cmluZzsKKworICAgIHN0cmluZyA9IChKU0NTdHJp
bmcgKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX1NUUklORywgImNvbnRleHQiLCBjb250ZXh0LCBO
VUxMKTsKKyAgICBqc2NWYWx1ZVNldEpTVmFsdWUoSlNDX1ZBTFVFKHN0cmluZyksIGpzdmFsdWUp
OworCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworLyoqCisgKiBqc2Nfc3RyaW5nX25ldzoKKyAq
IEBjb250ZXh0OiBUaGUgI0pTQ0NvbnRleHQgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlCisg
KiBAc3RyOiBUaGUgc3RyaW5nIHRoYXQgdGhlICNKU0NTdHJpbmcgd2lsbCByZXByZXNlbnQKKyAq
CisgKiBDcmVhdGVzIGEgbmV3ICNKU0NTdHJpbmcgd2l0aCBAc3RyIGFzIHRoZSB2YWx1ZQorICoK
KyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNKU0NTdHJpbmcgb2JqZWN0CisgKi8KK0pT
Q1N0cmluZyAqCitqc2Nfc3RyaW5nX25ldyhKU0NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBnY2hh
ciAqc3RyKQoreworICAgIEpTQ29udGV4dFJlZiBqc2NvbnRleHQ7CisgICAgSlNTdHJpbmdSZWYg
dmFsdWU7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisgICAganNjb250ZXh0ID0ganNjQ29u
dGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICB2YWx1ZSA9IEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0cik7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGpzY29u
dGV4dCwgdmFsdWUpOworICAgIEpTU3RyaW5nUmVsZWFzZSh2YWx1ZSk7CisKKyAgICByZXR1cm4g
anNjU3RyaW5nTmV3RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDcwZGZkZWQ1YTE1
ZjNmOGZlYzI3ZmVkYzNhODk5ODM1NTVlYTM4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaApAQCAtMCwwICsxLDUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8
dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5o
IgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jh
c2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgSlNDX1RZUEVfU1RSSU5HICAgICAgICAgICAgKGpzY19zdHJpbmdfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgSlNDX1NUUklORyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBKU0NfVFlQRV9TVFJJTkcsIEpTQ1N0cmluZykpCisjZGVmaW5lIEpTQ19JU19T
VFJJTkcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlND
X1RZUEVfU1RSSU5HKSkKKyNkZWZpbmUgSlNDX1NUUklOR19DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9TVFJJTkcsIEpTQ1N0cmluZ0Ns
YXNzKSkKKyNkZWZpbmUgSlNDX0lTX1NUUklOR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9TVFJJTkcpKQorCit0eXBlZGVmIHN0cnVjdCBf
SlNDU3RyaW5nICAgICAgICBKU0NTdHJpbmc7Cit0eXBlZGVmIHN0cnVjdCBfSlNDU3RyaW5nQ2xh
c3MgICBKU0NTdHJpbmdDbGFzczsKKworc3RydWN0IF9KU0NTdHJpbmcgeworICAgIEpTQ1ZhbHVl
IHBhcmVudDsKK307CisKK3N0cnVjdCBfSlNDU3RyaW5nQ2xhc3MgeworICAgIEpTQ1ZhbHVlQ2xh
c3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBPUlQgR1R5cGUKK2pzY19zdHJpbmdfZ2V0X3R5
cGUgKHZvaWQpOworCitKU19FWFBPUlQgSlNDU3RyaW5nKgoranNjX3N0cmluZ19uZXcgICAgICAo
SlNDQ29udGV4dCosIGNvbnN0IGdjaGFyICpzdHIpOworCitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmdQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTkyY2UzMzAwNGQ0YWI3OGQ3NGNhYTZiOWJiNjAyNGRmMmQ1NWQ4MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmdQcml2YXRlLmgK
QEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2Ft
dWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkpTQ1N0cmluZy5oIgorCitKU19FWFBPUlQgSlNDU3RyaW5nKgoranNjU3RyaW5n
TmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYwNWNhMWIxMTEzM2Iy
YjIyODdhNGJkNTNmNjY2NTdkNmI4OGNmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKQEAgLTAsMCArMSwyODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0
ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVl
LmgiCisKKyNpbmNsdWRlICJKU0NCb29sZWFuLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZh
dGUuaCIKKyNpbmNsdWRlICJKU0NOdW1iZXIuaCIKKyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAqIFNFQ1RJT046IEpTQ1ZhbHVlCisgKiBA
U2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgcmVwcmVzZW50aW5nIEphdmFTY3JpcHRDb3Jl
IHZhbHVlcworICogQFRpdGxlOiBKU0NWYWx1ZQorICoKKyAqICNKU0NWYWx1ZSBpcyB0aGUgYmFz
ZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCB2YWx1ZXMgaW5zaWRlCisgKiBKYXZhU2NyaXB0Q29y
ZS4gQWN0dWFsIHZhbHVlcyBhcmUgc3VidHlwZXMgb2YgdGhpcyBjbGFzcy4gVGhlCisgKiBjdXJy
ZW50IHN1YmNsYXNzZXMgYXJlOiAjSlNDU3RyaW5nLCAjSlNDTnVtYmVyIGFuZCAjSlNDQm9vbGVh
bi4KKyAqCisgKi8KKworc3RydWN0IF9KU0NWYWx1ZVByaXZhdGUgeworICAgIEpTQ0NvbnRleHQq
IGpzY0NvbnRleHQ7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQ7CisgICAgSlNWYWx1
ZVJlZiB2YWx1ZTsKK307CisKK0dfREVGSU5FX1RZUEVfV0lUSF9QUklWQVRFKEpTQ1ZhbHVlLCBq
c2NfdmFsdWUsIEdfVFlQRV9JTklUSUFMTFlfVU5PV05FRCkKKworZW51bSB7CisgICAga1BST1Bf
MCwKKworICAgIGtQUk9QX0NPTlRFWFQsCit9OworCitzdGF0aWMgdm9pZAoranNjVmFsdWVHZXRQ
cm9wZXJ0eShHT2JqZWN0KiBvYmosIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBhcmFtX3NwZWMpCit7CisgICAgSlNDVmFsdWUqIHZhbCA9IEpTQ19WQUxVRShvYmop
OworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUgKikganNjX3Zh
bHVlX2dldF9pbnN0YW5jZV9wcml2YXRlKHZhbCk7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsK
KyAgICBjYXNlIGtQUk9QX0NPTlRFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgZ19vYmplY3RfcmVmKHByaXYtPmpzY0NvbnRleHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iaiwg
cHJvcF9pZCwgcGFyYW1fc3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAoranNjVmFsdWVT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmosIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBhcmFtX3NwZWMpCit7CisgICAgSlNDVmFsdWUqIHZhbCA9IEpTQ19W
QUxVRShvYmopOworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUq
KSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsKTsKKworICAgIHN3aXRjaCAocHJv
cF9pZCkgeworICAgIGNhc2Uga1BST1BfQ09OVEVYVDogeworICAgICAgICBKU0NDb250ZXh0KiBj
b250ZXh0ID0gSlNDX0NPTlRFWFQoZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSk7CisgICAgICAg
IHByaXYtPmpzY0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICBwcml2LT5jb250ZXh0ID0gY29u
dGV4dCA/IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCkgOiBudWxscHRyOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iaiwgcHJvcF9pZCwgcGFyYW1fc3BlYyk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZAoranNjVmFsdWVEaXNwb3NlKEdPYmplY3QqIG9iaikKK3sKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXY7CisKKyAgICBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1
ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZShKU0NfVkFMVUUob2JqKSk7CisgICAgaWYgKHByaXYtPnZh
bHVlICE9IG51bGxwdHIpIHsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChwcml2LT5jb250ZXh0
LCBwcml2LT52YWx1ZSk7CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgICAg
ICBwcml2LT52YWx1ZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MoanNj
X3ZhbHVlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqKTsKK30KKworc3RhdGljIHZvaWQKK2pz
Y192YWx1ZV9jbGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3MgKmtsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogb2JqQ2xhc3M7CisKKyAgICBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsK
KworICAgIG9iakNsYXNzLT5nZXRfcHJvcGVydHkgPSBqc2NWYWx1ZUdldFByb3BlcnR5OworICAg
IG9iakNsYXNzLT5zZXRfcHJvcGVydHkgPSBqc2NWYWx1ZVNldFByb3BlcnR5OworICAgIG9iakNs
YXNzLT5kaXNwb3NlID0ganNjVmFsdWVEaXNwb3NlOworCisgICAgLyoqCisgICAgICogSlNDVmFs
dWU6Y29udGV4dDoKKyAgICAgKgorICAgICAqIFRoZSAjSlNDQ29udGV4dCBvZiB0aGUgdmFsdWUu
CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpDbGFzcywK
KyAgICAgICAga1BST1BfQ09OVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiY29u
dGV4dCIsCisgICAgICAgICAgICAiY29udGV4dCIsCisgICAgICAgICAgICAiSmF2YVNjcmlwdCBl
eGVjdXRpb24gY29udGV4dCIsCisgICAgICAgICAgICBKU0NfVFlQRV9DT05URVhULAorICAgICAg
ICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVD
VF9PTkxZKSkpOworfQorCitzdGF0aWMgdm9pZAoranNjX3ZhbHVlX2luaXQoSlNDVmFsdWUqKQor
eworfQorCitKU1ZhbHVlUmVmCitqc2NWYWx1ZUdldEpTVmFsdWUoSlNDVmFsdWUqIHZhbHVlKQor
eworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2NfdmFs
dWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworCisgICAgcmV0dXJuIHByaXYtPnZhbHVl
OworfQorCit2b2lkCitqc2NWYWx1ZVNldEpTVmFsdWUoSlNDVmFsdWUqIHZhbHVlLCBKU1ZhbHVl
UmVmIGpzdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2OworICAgIHByaXYgPSAo
SlNDVmFsdWVQcml2YXRlKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRlKHZhbHVlKTsK
KworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpdi0+Y29udGV4dCAhPSBudWxscHRyKTsKKworICAg
IGlmIChwcml2LT52YWx1ZSAhPSBudWxscHRyKSB7CisgICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
cHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpOworICAgICAgICBwcml2LT52YWx1ZSA9IG51bGxw
dHI7CisgICAgfQorCisgICAgcHJpdi0+dmFsdWUgPSBqc3ZhbHVlOworICAgIEpTVmFsdWVQcm90
ZWN0KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKTsKK30KKworSlNDVmFsdWUqCitqc2NWYWx1
ZU5ld0Zyb21KU1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkK
K3sKKyAgICBKU0NWYWx1ZSogdmFsdWU7CisKKyAgICB2YWx1ZSA9IChKU0NWYWx1ZSopIGdfb2Jq
ZWN0X25ldyhKU0NfVFlQRV9WQUxVRSwgImNvbnRleHQiLCBjb250ZXh0LCBudWxscHRyKTsKKyAg
ICBqc2NWYWx1ZVNldEpTVmFsdWUodmFsdWUsIGpzdmFsdWUpOworCisgICAgcmV0dXJuIHZhbHVl
OworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfc3RyaW5nOgorICogQHZhbHVlOiB0aGUgI0pT
Q1ZhbHVlIHN1YnR5cGUgY29udGFpbmluZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhl
IHN0cmluZyBmcm9tICNKU0NWYWx1ZQorICoKKyAqIFJldHVybnM6IGdjaGFyKgorICovCitjb25z
dCBnY2hhcioKK2pzY192YWx1ZV9nZXRfc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXY7CisgICAgSlNTdHJpbmdSZWYgc3RyVmFsdWU7CisgICAgc2l6
ZV90IGxlbmd0aDsKKyAgICBnY2hhciogYnVmZjsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19TVFJJTkcodmFsdWUpLCBudWxscHRyKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQ
cml2YXRlKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRlKHZhbHVlKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU1ZhbHVlSXNTdHJpbmcocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFs
dWUpLCBudWxscHRyKTsKKworICAgIHN0clZhbHVlID0gSlNWYWx1ZVRvU3RyaW5nQ29weShwcml2
LT5jb250ZXh0LCBwcml2LT52YWx1ZSwgbnVsbHB0cik7CisgICAgbGVuZ3RoID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0clZhbHVlKTsKKyAgICBidWZmID0gKGdjaGFyKikg
Z19tYWxsb2MwKGxlbmd0aCk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJWYWx1ZSwg
YnVmZiwgbGVuZ3RoKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyVmFsdWUpOworICAgIAorICAg
IHJldHVybiBnX3N0cmR1cChidWZmKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X2Jvb2xl
YW46CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1
ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgYm9vbGVhbiB2YWx1ZSBmcm9tICNKU0NWYWx1ZQorICoK
KyAqIFJldHVybnM6IGdib29sZWFuCisgKi8KK2dib29sZWFuCitqc2NfdmFsdWVfZ2V0X2Jvb2xl
YW4oSlNDVmFsdWUgKnZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAg
IGdfYXNzZXJ0KEpTQ19JU19CT09MRUFOKHZhbHVlKSk7CisKKyAgICBwcml2ID0gKEpTQ1ZhbHVl
UHJpdmF0ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdf
YXNzZXJ0KEpTVmFsdWVJc0Jvb2xlYW4ocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKTsK
K30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X2RvdWJsZToKKyAqIEB2YWx1ZTogdGhlICNKU0NW
YWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBu
dW1lcmljIChkb3VibGUpIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0dXJuczogZ2Jv
b2xlYW4KKyAqLworZ2RvdWJsZQoranNjX3ZhbHVlX2dldF9kb3VibGUoSlNDVmFsdWUgKnZhbHVl
KQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19O
VU1CRVIodmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2YXRlICopIGpzY192YWx1
ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVt
YmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZVRv
TnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRyKTsKK30KKworLyoqCisg
KiBqc2NfdmFsdWVfZ2V0X2ludDMyOgorICogQHZhbHVlOiB0aGUgI0pTQ1ZhbHVlIHN1YnR5cGUg
Y29udGFpbmluZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIG51bWVyaWMgKGludCkg
dmFsdWUgZnJvbSAjSlNDVmFsdWUKKyAqCisgKiBSZXR1cm5zOiBnYm9vbGVhbgorICovCitnaW50
Citqc2NfdmFsdWVfZ2V0X2ludDMyKEpTQ1ZhbHVlICp2YWx1ZSkKK3sKKyAgICBKU0NWYWx1ZVBy
aXZhdGUqIHByaXY7CisKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHZhbHVlKSk7CisKKyAg
ICBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZh
dGUodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFsdWVJc051bWJlcihwcml2LT5jb250ZXh0LCBw
cml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb051bWJlcihwcml2LT5jb250ZXh0
LCBwcml2LT52YWx1ZSwgbnVsbHB0cik7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2dldF91aW50
MzI6CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1
ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyAodW5zaWduZWQgaW50KSB2YWx1ZSBmcm9t
ICNKU0NWYWx1ZQorICoKKyAqIFJldHVybnM6IGdib29sZWFuCisgKi8KK2d1aW50Citqc2NfdmFs
dWVfZ2V0X3VpbnQzMihKU0NWYWx1ZSAqdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBw
cml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX05VTUJFUih2YWx1ZSkpOworCisgICAgcHJpdiA9
IChKU0NWYWx1ZVByaXZhdGUgKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRlKHZhbHVl
KTsKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNOdW1iZXIocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFs
dWUpKTsKKworICAgIHJldHVybiAoZ3VpbnQpIEpTVmFsdWVUb051bWJlcihwcml2LT5jb250ZXh0
LCBwcml2LT52YWx1ZSwgbnVsbHB0cik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExNTc4MWQ3ZGI2YWQ4Mzc1Y2EwMzFmMjUzYTI1YTY3
MDllNDgyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDVmFsdWUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX1ZB
TFVFICAgICAgICAgICAgKGpzY192YWx1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfVkFMVUUo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZ
UEVfVkFMVUUsIEpTQ1ZhbHVlKSkKKyNkZWZpbmUgSlNDX0lTX1ZBTFVFKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1ZBTFVFKSkKKyNkZWZp
bmUgSlNDX1ZBTFVFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZB
TFVFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19U
WVBFX1ZBTFVFKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlICAgICAgICBKU0NWYWx1ZTsK
K3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZUNsYXNzICAgSlNDVmFsdWVDbGFzczsKK3R5cGVkZWYg
c3RydWN0IF9KU0NWYWx1ZVByaXZhdGUgSlNDVmFsdWVQcml2YXRlOworCitzdHJ1Y3QgX0pTQ1Zh
bHVlIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSAqcHJpdjsK
K307CisKK3N0cnVjdCBfSlNDVmFsdWVDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudENs
YXNzOworfTsKKworSlNfRVhQT1JUIEdUeXBlCitqc2NfdmFsdWVfZ2V0X3R5cGUgICAgKHZvaWQp
OworCitKU19FWFBPUlQgY29uc3QgY2hhciAqCitqc2NfdmFsdWVfZ2V0X3N0cmluZyAgKEpTQ1Zh
bHVlICopOworCitKU19FWFBPUlQgZ2Jvb2xlYW4KK2pzY192YWx1ZV9nZXRfYm9vbGVhbiAoSlND
VmFsdWUgKik7CisKK0pTX0VYUE9SVCBnZG91YmxlCitqc2NfdmFsdWVfZ2V0X2RvdWJsZSAgKEpT
Q1ZhbHVlICopOworCitKU19FWFBPUlQgZ2ludAoranNjX3ZhbHVlX2dldF9pbnQzMiAgIChKU0NW
YWx1ZSAqKTsKKworSlNfRVhQT1JUIGd1aW50Citqc2NfdmFsdWVfZ2V0X3VpbnQzMiAgKEpTQ1Zh
bHVlICopOworCisvKiBKU19FWFBPUlQgSlNDQ29udGV4dCAqICovCisvKiBqc2NfdmFsdWVfZ2V0
X2NvbnRleHQgKEpTQ1ZhbHVlICp2YWx1ZSk7ICovCisKK0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzgwMmVlYzU2NTlmZmRlOWZmZGZlZTQ4M2M0Y2E0ZWI2ZmQ0OThmMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaApAQCAt
MCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisKK0pTX0VYUE9SVCBK
U1ZhbHVlUmVmCitqc2NWYWx1ZUdldEpTVmFsdWUoSlNDVmFsdWUqKTsKKworSlNfRVhQT1JUIHZv
aWQKK2pzY1ZhbHVlU2V0SlNWYWx1ZShKU0NWYWx1ZSosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL2pzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwMDRlMmMzYzFhYmM0MGQ2NmY3MjM3
NTY5MmUwYzM4NDhmZjNiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvanNjLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVkZSA8
anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ0Jvb2xlYW4uaD4KKyNpbmNsdWRlIDxq
c2MvSlNDTnVtYmVyLmg+CisjaW5jbHVkZSA8anNjL0pTQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGliL0pTQ1ZhbHVlc1Rlc3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGliL0pTQ1ZhbHVlc1Rlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJjOTk2NTBkNDk2ODQwYTA2ZWFhMzMyYzRkZDhiMjI0YjNlZWZjNWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFs
dWVzVGVzdC5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlc1Rlc3QuaCIKKworI2luY2x1ZGUg
Ii4uLy4uL2dsaWIvSlNDQm9vbGVhbi5oIgorI2luY2x1ZGUgIi4uLy4uL2dsaWIvSlNDQ29udGV4
dC5oIgorI2luY2x1ZGUgIi4uLy4uL2dsaWIvSlNDTnVtYmVyLmgiCisjaW5jbHVkZSAiLi4vLi4v
Z2xpYi9KU0NTdHJpbmcuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKwordm9pZAorQ29udGV4dEZp
eHR1cmVTZXRVcChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBmaXh0dXJlLT5jb250ZXh0ID0ganNjX2NvbnRleHRfbmV3KCk7CisgICAganNj
X2NvbnRleHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJodXZzIiwgIEpTQ19WQUxVRShq
c2Nfc3RyaW5nX25ldyhmaXh0dXJlLT5jb250ZXh0LCAibml2cyIpKSk7CisgICAganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ0cnVlIiwgIEpTQ19WQUxVRShqc2NfYm9v
bGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgdHJ1ZSkpKTsKKyAgICBqc2NfY29udGV4dF9zZXRf
dmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImZhbHNlIiwgSlNDX1ZBTFVFKGpzY19ib29sZWFuX25l
dyhmaXh0dXJlLT5jb250ZXh0LCBmYWxzZSkpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUo
Zml4dHVyZS0+Y29udGV4dCwgIm51bWJlci16IiwgSlNDX1ZBTFVFKGpzY19udW1iZXJfbmV3KGZp
eHR1cmUtPmNvbnRleHQsIDAuMCkpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVy
ZS0+Y29udGV4dCwgIm51bWJlci1wIiwgSlNDX1ZBTFVFKGpzY19udW1iZXJfbmV3KGZpeHR1cmUt
PmNvbnRleHQsIDEuMSkpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29u
dGV4dCwgIm51bWJlci1uIiwgSlNDX1ZBTFVFKGpzY19udW1iZXJfbmV3KGZpeHR1cmUtPmNvbnRl
eHQsIC0xLjEpKSk7CisgICAgLy8ganNjX2NvbnRleHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRl
eHQsICJpbnQwIiwgSlNDX1ZBTFVFKGpzY19ib29sZWFuX25ldyhmaXh0dXJlLT5jb250ZXh0LCBm
YWxzZSkpKTsKKyAgICAvLyBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwg
ImludDEiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNl
KSkpOworICAgIC8vIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAiaW50
LTEiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkp
OworICAgIC8vIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAidWludGZm
IiwgSlNDX1ZBTFVFKGpzY19ib29sZWFuX25ldyhmaXh0dXJlLT5jb250ZXh0LCBmYWxzZSkpKTsK
K30KKwordm9pZAorQ29udGV4dEZpeHR1cmVUZWFyRG93bihDb250ZXh0Rml4dHVyZSAqZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX2NsZWFyX29iamVjdCgmZml4dHVy
ZS0+Y29udGV4dCk7Cit9CisKK3ZvaWQKK0pTQ1N0cmluZ1Rlc3QoQ29udGV4dEZpeHR1cmUgKmZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgdXNlckRhdGEpCit7CisgICAgSlNDVmFsdWUqIHZhbHVlID0g
anNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJodXZzIik7CisgICAgZ19h
c3NlcnRfdHJ1ZShKU0NfSVNfU1RSSU5HKHZhbHVlKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGpz
Y192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgPT0sICJuaXZzIik7Cit9CisKKwordm9pZAorSlND
Qm9vbGVhblRlc3QoQ29udGV4dEZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgSlNDVmFsdWUqIHZhbHVlVCA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0
dXJlLT5jb250ZXh0LCAidHJ1ZSIpOworICAgIEpTQ1ZhbHVlKiB2YWx1ZUYgPSBqc2NfY29udGV4
dF9nZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImZhbHNlIik7CisgICAgSlNDQm9vbGVhbiog
Ym9vbFQgPSBKU0NfQk9PTEVBTih2YWx1ZVQpOworICAgIEpTQ0Jvb2xlYW4qIGJvb2xGID0gSlND
X0JPT0xFQU4odmFsdWVGKTsKKworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVl
VCkpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlRikpOworCisgICAgZ19h
c3NlcnRfdHJ1ZShKU0NfSVNfQk9PTEVBTihib29sVCkpOworICAgIGdfYXNzZXJ0X3RydWUoSlND
X0lTX0JPT0xFQU4oYm9vbEYpKTsKKyAgICAKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9n
ZXRfYm9vbGVhbih2YWx1ZVQpKTsKKyAgICBnX2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfZ2V0X2Jv
b2xlYW4odmFsdWVGKSk7Cit9CisKK3ZvaWQKK0pTQ051bWJlclRlc3QoQ29udGV4dEZpeHR1cmUg
KmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgdXNlckRhdGEpCit7CisgICAgSlNDVmFsdWUqIHZhbHVl
WiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLXoiKTsK
KyAgICBKU0NWYWx1ZSogdmFsdWVQID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1cmUtPmNv
bnRleHQsICJudW1iZXItcCIpOworICAgIEpTQ1ZhbHVlKiB2YWx1ZU4gPSBqc2NfY29udGV4dF9n
ZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgIm51bWJlci1uIik7CisKKyAgICBnX2Fzc2VydF90
cnVlKEpTQ19JU19WQUxVRSh2YWx1ZVopKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19WQUxV
RSh2YWx1ZVApKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19WQUxVRSh2YWx1ZU4pKTsKKwor
ICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX05VTUJFUih2YWx1ZVopKTsKKyAgICBnX2Fzc2VydF90
cnVlKEpTQ19JU19OVU1CRVIodmFsdWVQKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfTlVN
QkVSKHZhbHVlTikpOworCisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX3ZhbHVlX2dldF9kb3Vi
bGUodmFsdWVaKSwgPT0sIDAuMCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX3ZhbHVlX2dl
dF9kb3VibGUodmFsdWVQKSwgPT0sIDEuMSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX3Zh
bHVlX2dldF9kb3VibGUodmFsdWVOKSwgPT0sIC0xLjEpOworCisgICAgZ19hc3NlcnRfY21waW50
KGpzY192YWx1ZV9nZXRfaW50MzIodmFsdWVaKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfZ2V0X2ludDMyKHZhbHVlUCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX2dldF9pbnQzMih2YWx1ZU4pLCA9PSwgLTEpOworCisgICAgZ19hc3NlcnRf
Y21wdWludChqc2NfdmFsdWVfZ2V0X3VpbnQzMih2YWx1ZVopLCA9PSwgMCk7CisgICAgZ19hc3Nl
cnRfY21wdWludChqc2NfdmFsdWVfZ2V0X3VpbnQzMih2YWx1ZVApLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21wdWludChqc2NfdmFsdWVfZ2V0X3VpbnQzMih2YWx1ZU4pLCA9PSwgNDI5NDk2NzI5
NSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIv
SlNDVmFsdWVzVGVzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGliL0pT
Q1ZhbHVlc1Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmI3ZWQ0NjA1ZjgzOWU3MGRmOGE0NTFlZDA4OGRk
NTgzNzJhZDIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy9nbGliL0pTQ1ZhbHVlc1Rlc3QuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdh
bWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NDb250ZXh0
LmgiCisKK3R5cGVkZWYgc3RydWN0IF9Db250ZXh0Rml4dHVyZSB7CisgICAgSlNDQ29udGV4dCAq
Y29udGV4dDsKK30gQ29udGV4dEZpeHR1cmU7CisKK3ZvaWQKK0NvbnRleHRGaXh0dXJlU2V0VXAo
Q29udGV4dEZpeHR1cmUqLCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorQ29udGV4dEZpeHR1cmVU
ZWFyRG93bihDb250ZXh0Rml4dHVyZSosIGdjb25zdHBvaW50ZXIpOworCit2b2lkCitKU0NTdHJp
bmdUZXN0KENvbnRleHRGaXh0dXJlKiwgZ2NvbnN0cG9pbnRlcik7CisKK3ZvaWQKK0pTQ0Jvb2xl
YW5UZXN0KENvbnRleHRGaXh0dXJlKiwgZ2NvbnN0cG9pbnRlcik7CisKK3ZvaWQKK0pTQ051bWJl
clRlc3QoQ29udGV4dEZpeHR1cmUqLCBnY29uc3Rwb2ludGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9tYWluLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZGFhMzJlZDNjNjcy
NzdhNDZmNTEzOWM1Y2NmZGFmYTcyMTE5ZDgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGliL21haW4uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
IDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgIkpTQ1ZhbHVlc1Rlc3QuaCIKKworI2luY2x1
ZGUgPGdsaWIuaD4KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBn
X3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2FkZCgiL2pzYy12
YWx1ZXMvc3RyaW5nLXRlc3QiLCBDb250ZXh0Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgQ29udGV4
dEZpeHR1cmVTZXRVcCwgSlNDU3RyaW5nVGVzdCwgQ29udGV4dEZpeHR1cmVUZWFyRG93bik7CisK
KyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9ib29sZWFuLXRlc3QiLCBDb250ZXh0Rml4dHVy
ZSwgTlVMTCwKKyAgICAgICAgQ29udGV4dEZpeHR1cmVTZXRVcCwgSlNDQm9vbGVhblRlc3QsIENv
bnRleHRGaXh0dXJlVGVhckRvd24pOworCisgICAgCisgICAgZ190ZXN0X2FkZCgiL2pzYy12YWx1
ZXMvbnVtYmVyLXRlc3QiLCBDb250ZXh0Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgQ29udGV4dEZp
eHR1cmVTZXRVcCwgSlNDTnVtYmVyVGVzdCwgQ29udGV4dEZpeHR1cmVUZWFyRG93bik7CisKKyAg
ICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDQ3OTFhYmE0OWEzYzI1NTUyOWUwMDA1ODMwZWZmMDMxNzMzMGVmNTUuLjU4
OTkwYmM3ZDZlNTNiMDMyMDc5NDE0ZWVjMWNhODkzMmE4MDA0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQ4LDMgKzQ4LDQzIEBAIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX0xJQlJBUklFUwogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU1lTVEVN
X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAke0dMSUJfSU5DTFVERV9ESVJTfQogKQorCitpZiAo
RU5BQkxFX0pTQ19HTElCKQorICAgIHNldChqc2NnbGliX1NPVVJDRVMKKyAgICAgICAgQVBJL2ds
aWIvSlNDQm9vbGVhbi5jcHAKKyAgICAgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKKyAgICAg
ICAgQVBJL2dsaWIvSlNDTnVtYmVyLmNwcAorICAgICAgICBBUEkvZ2xpYi9KU0NTdHJpbmcuY3Bw
CisgICAgICAgIEFQSS9nbGliL0pTQ1ZhbHVlLmNwcAorICAgICkKKworICAgIHNldChqc2NnbGli
X0hFQURFUlMKKyAgICAgICAgQVBJL2dsaWIvSlNDQm9vbGVhbi5oCisgICAgICAgIEFQSS9nbGli
L0pTQ0NvbnRleHQuaAorICAgICAgICBBUEkvZ2xpYi9KU0NOdW1iZXIuaAorICAgICAgICBBUEkv
Z2xpYi9KU0NTdHJpbmcuaAorICAgICAgICBBUEkvZ2xpYi9KU0NWYWx1ZS5oCisgICAgICAgIEFQ
SS9nbGliL2pzYy5oCisgICAgKQorCisgICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfSU5D
TFVERV9ESVJFQ1RPUklFUworICAgICAgICBBUEkvZ2xpYgorICAgICkKKyAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCisgICAgICAgICR7anNjZ2xpYl9TT1VSQ0VTfQorICAg
ICkKKyAgICBhZGRfZXhlY3V0YWJsZShqc2MtdGVzdHMKKyAgICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9BUEkvdGVzdHMvZ2xpYi9tYWluLmNwcAorICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L0FQSS90ZXN0cy9nbGliL0pTQ1ZhbHVlc1Rlc3QuY3BwCisgICAgICAke2pzY2dsaWJfU09VUkNF
U30KKyAgICApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpzYy10ZXN0cworICAgICAgICBn
b2JqZWN0LTIuMAorICAgICAgICBnbGliLTIuMAorICAgICAgICBsaWJqYXZhc2NyaXB0Y29yZWd0
ay00LjAuc28KKyAgICApCisgICAgaW5zdGFsbChGSUxFUworICAgICAgICAke2pzY2dsaWJfSEVB
REVSU30KKyAgICAgICAgICAgIERFU1RJTkFUSU9OICIke1dFQktJVEdUS19IRUFERVJfSU5TVEFM
TF9ESVJ9L2pzYyIKKykKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDE3YzJjODJl
YjM0MzNmY2NlNjBkZDdiZTVhYzY3MTI1YjgzZjM4YjQuLmZiZDAzZWQ3ZjcyNTkwODkzZThlNTMz
NzdjMGRiNDNjNWJhZmVkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC04NSw2ICs4NSw3IEBA
IFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyICJXaGV0aGVy
IHRvIGJ1aWxkIFdlYktpdFBsdWdpblByCiBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfUVVB
UlRaX1RBUkdFVCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFF1YXJ0eiB3aW5k
b3dpbmcgdGFyZ2V0LiIgUFVCTElDICR7R1RLM19TVVBQT1JUU19RVUFSVFp9KQogV0VCS0lUX09Q
VElPTl9ERUZJTkUoRU5BQkxFX1gxMV9UQVJHRVQgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQg
Zm9yIHRoZSBYMTEgd2luZG93aW5nIHRhcmdldC4iIFBVQkxJQyAke0dUSzNfU1VQUE9SVFNfWDEx
fSkKIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XQVlMQU5EX1RBUkdFVCAiV2hldGhlciB0
byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFdheWxhbmQgd2luZG93aW5nIHRhcmdldC4iIFBVQkxJ
QyAke0dUSzNfU1VQUE9SVFNfV0FZTEFORH0pCitXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
SlNDX0dMSUIgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIEphdmFTY3JpcHRDb3JlIGds
aWIgYmluZGluZ3MuIiBQVUJMSUMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0xJQk5P
VElGWSAiV2hldGhlciB0byBlbmFibGUgdGhlIGRlZmF1bHQgd2ViIG5vdGlmaWNhdGlvbiBpbXBs
ZW1lbnRhdGlvbi4iIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9MSUJIWVBI
RU4gIldoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IGF1dG9tYXRpYyBoeXBoZW5hdGlvbiBp
bXBsZW1lbnRhdGlvbi4iIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9MSUJT
RUNSRVQgIldoZXRoZXIgdG8gZW5hYmxlIHRoZSBwZXJzaXN0ZW50IGNyZWRlbnRpYWwgc3RvcmFn
ZSB1c2luZyBsaWJzZWNyZXQuIiBQVUJMSUMgT04pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVh
dHVyZUxpc3QucG0KaW5kZXggMWJiNTQ4ZGYyMzhjZGViZjQ0YjYxNzFlNTY4ODhkMTQ2OTBjMWZh
Ny4uZTk0Nzg5MDhlMWMwYWY2MzJlNjc5MDAzMTNmNDhhODNhNDdkMGQ4NCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtNDY1LDYgKzQ2NSw5IEBAIG15IEBmZWF0
dXJlcyA9ICgKIAogICAgIHsgb3B0aW9uID0+ICJ4c2x0IiwgZGVzYyA9PiAiVG9nZ2xlIFhTTFQg
c3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9YU0xUIiwgZGVmYXVsdCA9PiAxLCB2
YWx1ZSA9PiBcJHhzbHRTdXBwb3J0IH0sCisKKyAgICB7IG9wdGlvbiA9PiAianNjLWdsaWIiLCBk
ZXNjID0+ICJUb2dnbGUgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncyBzdXBwb3J0IiwKKyAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX0pTQ19HTElCIiwgZGVmYXVsdCA9PiAoaXNHdGsoKSksIHZh
bHVlID0+IFwkeHNsdFN1cHBvcnQgfSwKICk7CiAKIHN1YiBnZXRGZWF0dXJlT3B0aW9uTGlzdCgp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZTJmYTRmZDNhOTdh
NmM3ZmQyYjg3ODQzYzI1MmZjMmViMTk3ZDg2Ny4uMzNlNGIzMWJhM2NhOTdkZjMxZGM4OGM1ODc4
ZGNjYmU3ZWU5NzZmZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpA
QCAtMzA3LDcgKzMwNywxMSBAQCBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCiAgICAg
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0luamVjdGVk
QnVuZGxlJywgJ0FQSScsICdndGsnLCAnRE9NJyksCiAKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJLaXQyJywgJ1VJUHJvY2VzcycsICdBUEknLCAnZ3RrJywgJ3dlYmtpdDIuaCcpLAot
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmpl
Y3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgnKV0KKyAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0
ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyksCisKKyAg
ICAjIEdPYmplY3QgYmluZGluZ3MgZm9yIEphdmFTY3JpcHRDb3JlLgorICAgIHJlLmNvbXBpbGUo
cmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQSScs
ICdnbGliJykgKyBvcy5wYXRoLnNlcCkgKyByJ0pTQyg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwK
KyAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xp
YicsICdqc2MuaCcpXQogCiAjIEZpbGVzIHRvIHNraXAgdGhhdCBhcmUgbW9yZSBjb21tb24gb3Ig
b2J2aW91cy4KICMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91
bml0dGVzdC5weQppbmRleCA5NTA4ZTlkM2I5NGU5MjM0YjM0NDhkOTFkYmQ1ZDYxOWRkMTExODkx
Li5hOTE0YjdjNWQzNjlmOTE1NWE1ZTk1ZDZhYmJhY2Q0NWQ3OGRmY2Y0IDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CkBAIC0yODYsNiAr
Mjg2LDcgQEAgY2xhc3MgQ2hlY2tlckRpc3BhdGNoZXJTa2lwVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9j
ZXNzJywgJ0FQSScsICdndGsnLCAnd2Via2l0Mi5oJyksCiAgICAgICAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnV2ViS2l0
V2ViVmlldy5oJyksCiAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDIn
LCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnV2ViS2l0TG9hZGVyLmgnKSwKKyAgICAgICAg
ICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWIn
LCAnSlNDQm9vbGVhbi5oJyksCiAgICAgICAgICAgICBdCiAKICAgICAgICAgZm9yIHBhdGggaW4g
cGF0aHNfdG9fc2tpcDoKQEAgLTMwMSw2ICszMDIsNyBAQCBjbGFzcyBDaGVja2VyRGlzcGF0Y2hl
clNraXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICdXZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oJyksCiAgICAgICAgICAgIG9zLnBhdGguam9pbignVG9vbHMnLCAnVGVzdFdl
YktpdEFQSScsICdUZXN0cycsICdXZWJLaXQyR3RrJywgJ1dlYlZpZXdUZXN0LmNwcCcpLAogICAg
ICAgICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ1Rlc3RXZWJLaXRBUEknLCAnVGVzdHMnLCAn
V2ViS2l0Mkd0aycsICdXZWJWaWV3VGVzdC5oJyksCisgICAgICAgICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQSScsICdnbGliJywgJ0pTQ0Jvb2xlYW4uY3Bw
JyksCiAgICAgICAgICAgICBdCiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHNfbm90X3RvX3Nr
aXA6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293037</attachid>
            <date>2016-10-27 10:46:52 -0700</date>
            <delta_ts>2016-10-27 10:54:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161027154301.patch</filename>
            <type>text/plain</type>
            <size>58508</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi41ZDhiYTUzZjk1OWIyYjYz
NWVjNDUxYTkzNTI3YmI1NGRkMWI2NmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisg
ICAgICAgIGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2
LU9jdG9iZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NCb29sZWFuLmg6IEFkZGVkLgorICAgICAg
ICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9n
bGliL0pTQ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ051bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ051bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NOdW1iZXJQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZy5jcHA6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkv
Z2xpYi9KU0NTdHJpbmdQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1Zh
bHVlLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL2pzYy5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvZ2xpYi9tYWluLmNwcDogQWRkZWQuCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZGVkIHJ1bGVzIGZvciBidWlsZGluZyBhbmQgaW5z
dGFsbGluZyBqc2MtZ2xpYgorCiAyMDE2LTEwLTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBBUk0gYnVpbGRmaXggYWZ0ZXIgcjIw
NzQ3NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29s
ZWFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NmJmOWJkYzgxM2I1ZjcxMzdiMDEwNTE1MTMxY2ZkNjM0ODUwYjhiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4u
Y3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NCb29sZWFuCisg
KiBAU2hvcnRfZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBib29s
ZWFuIHZhbHVlcworICoKKyAqICNKU0NCb29sZWFuIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJl
c2VudCBib29sZWFuIHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLwor
CitHX0RFRklORV9UWVBFKEpTQ0Jvb2xlYW4sIGpzY19ib29sZWFuLCBKU0NfVFlQRV9WQUxVRSkK
Kworc3RhdGljIHZvaWQKK2pzY19ib29sZWFuX2NsYXNzX2luaXQoSlNDQm9vbGVhbkNsYXNzICop
Cit7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfYm9vbGVhbl9pbml0KEpTQ0Jvb2xlYW4gKikKK3sK
K30KKworSlNDQm9vbGVhbiAqCitqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCAq
Y29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ0Jvb2xlYW4qIGJvb2xlYW47
CisKKyAgICBib29sZWFuID0gKEpTQ0Jvb2xlYW4gKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX0JP
T0xFQU4sICJjb250ZXh0IiwgY29udGV4dCwgTlVMTCk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ19WQUxVRShib29sZWFuKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gYm9vbGVhbjsKK30K
KworLyoqCisgKiBqc2NfYm9vbGVhbl9uZXc6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0
IHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgYm9vbGVhbiB2YWx1
ZSB0aGF0IHRoZSAjSlNDQm9vbGVhbiB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBu
ZXcgI0pTQ0Jvb2xlYW4gd2l0aCBAdmFsdWUgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczog
VGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ0Jvb2xlYW4gb2JqZWN0CisgKi8KK0pTQ0Jvb2xlYW4gKgor
anNjX2Jvb2xlYW5fbmV3KEpTQ0NvbnRleHQgKmNvbnRleHQsIGdib29sZWFuIHZhbHVlKQorewor
ICAgIEpTQ29udGV4dFJlZiBqc2NvbnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisg
ICAganNjb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBqc3Zh
bHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGpzY29udGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJu
IGpzY0Jvb2xlYW5OZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NDZiMzAx
MmY3ZGEwMjlhOTliNGQ2ZTgzOWIxODJjNzRmMGI3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5oCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBKU0NfVFlQRV9CT09MRUFOICAgICAgICAgICAgKGpzY19ib29sZWFuX2dldF90eXBl
KCkpCisjZGVmaW5lIEpTQ19CT09MRUFOKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX0JPT0xFQU4sIEpTQ0Jvb2xlYW4pKQorI2RlZmlu
ZSBKU0NfSVNfQk9PTEVBTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBKU0NfVFlQRV9CT09MRUFOKSkKKyNkZWZpbmUgSlNDX0JPT0xFQU5fQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVB
TiwgSlNDQm9vbGVhbkNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX0JPT0xFQU5fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVBTikpCisK
K3R5cGVkZWYgc3RydWN0IF9KU0NCb29sZWFuICAgICAgICBKU0NCb29sZWFuOwordHlwZWRlZiBz
dHJ1Y3QgX0pTQ0Jvb2xlYW5DbGFzcyAgIEpTQ0Jvb2xlYW5DbGFzczsKKworc3RydWN0IF9KU0NC
b29sZWFuIHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ0Jvb2xlYW5D
bGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0pTX0VYUE9SVCBH
VHlwZQoranNjX2Jvb2xlYW5fZ2V0X3R5cGUgKHZvaWQpOworCitKU19FWFBPUlQgSlNDQm9vbGVh
bioKK2pzY19ib29sZWFuX25ldyAgICAgIChKU0NDb250ZXh0KiwgZ2Jvb2xlYW4gdmFsdWUpOwor
CitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0Jvb2xlYW5Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Qm9vbGVhblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjE3MzYwMjc5ZmNjNzZmOTZkYmNhZjE1MDUy
MGNkYjYwZjBlMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBn
YW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworSlNf
RVhQT1JUIEpTQ0Jvb2xlYW4qCitqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCos
IEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0NvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRl
eHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFmYzQ1YTA0YzBjMTg1NGE0ZTZkNDg3NWIwZGQ0MDg5OTE4Mjc1
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkpT
Q0Jvb2xlYW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNs
dWRlICJKU0NOdW1iZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDU3RyaW5nUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorCisvKioKKyAqIFNFQ1RJT046IEpTQ0NvbnRleHQKKyAq
IEBTaG9ydF9kZXNjcmlwdGlvbjogSmF2YVNjcmlwdENvcmUgZXhlY3V0aW9uIGNvbnRleHQKKyAq
IEBUaXRsZTogSlNDQ29udGV4dAorICoKKyAqIEEgI0pTQ0NvbnRleHQgaXMgdGhlIGNlbnRyYWwg
Y2xhc3Mgb2YgdGhlIEphdmFTY3JpcHRDb3JlIEFQSS4gSXQgaXMKKyAqIHJlc3BvbnNpYmxlIGZv
ciBldmFsdWF0aW9uIG9mIHNjcmlwdHMgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LAorICogc2V0
dGluZyBhbmQgZ2V0dGluZyB2YWx1ZXMgZnJvbSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHRv
IG1ha2UKKyAqIG5hdGl2ZSBvYmplY3RzLCBtZXRob2RzIGFuZCBmdW5jdGlvbnMgYWNjZXNzaWJs
ZSB0byBKYXZhU2NyaXB0LgorICoKKyAqLworCitzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIHsK
KyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU09iamVjdFJlZiBvYmplY3Q7
CisKKyAgICBHTGlzdCogdmFsdWVzOworfTsKKworR19ERUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUo
SlNDQ29udGV4dCwganNjX2NvbnRleHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkCitq
c2NDb250ZXh0RGlzcG9zZShHT2JqZWN0KiBvYmopCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUq
IHByaXY7CisKKyAgICBwcml2ID0gKEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRleHRfZ2V0
X2luc3RhbmNlX3ByaXZhdGUoSlNDX0NPTlRFWFQob2JqKSk7CisKKyAgICBnX2xpc3RfZnJlZV9m
dWxsKHByaXYtPnZhbHVlcywgZ19vYmplY3RfdW5yZWYpOworCisgICAgaWYgKCFwcml2LT5jb250
ZXh0KSB7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UocHJpdi0+Y29udGV4dCk7Cisg
ICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgICAgICBwcml2LT5vYmplY3QgPSBu
dWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19jb250ZXh0X3BhcmVudF9j
bGFzcyktPmRpc3Bvc2Uob2JqKTsKK30KKworc3RhdGljIHZvaWQKK2pzY19jb250ZXh0X2NsYXNz
X2luaXQoSlNDQ29udGV4dENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNs
YXNzOworCisgICAgb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmRpc3Bvc2UgPSBqc2NDb250ZXh0RGlzcG9zZTsKK30KKworc3RhdGljIHZvaWQKK2pzY19j
b250ZXh0X2luaXQoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0
ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9n
ZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKyAgICBwcml2LT5jb250ZXh0ID0gSlNHbG9i
YWxDb250ZXh0Q3JlYXRlKG51bGxwdHIpOworICAgIHByaXYtPm9iamVjdCA9IEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChwcml2LT5jb250ZXh0KTsKKyAgICBwcml2LT52YWx1ZXMgPSBudWxscHRy
OworfQorCitKU0dsb2JhbENvbnRleHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKworICAgIHBy
aXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0
ZShjb250ZXh0KTsKKyAgICByZXR1cm4gcHJpdi0+Y29udGV4dDsKK30KKworLyoqCisgKiBqc2Nf
Y29udGV4dF9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlNDQ29udGV4dCBlbnZpcm9ubWVu
dCB0byBleGVjdXRlIEphdmFTY3JpcHQKKyAqIGNvZGUuCisgKgorICogUmV0dXJuczogVGhlIG5l
d2x5IGNyZWF0ZWQgI0pTQ0NvbnRleHQgb2JqZWN0CisgKi8KK0pTQ0NvbnRleHQqCitqc2NfY29u
dGV4dF9uZXcodm9pZCkKK3sKKyAgICByZXR1cm4gKEpTQ0NvbnRleHQqKSBnX29iamVjdF9uZXco
SlNDX1RZUEVfQ09OVEVYVCwgbnVsbHB0cik7Cit9CisKK3N0YXRpYyBKU0NWYWx1ZSoKK2pzVmFs
dWVUb0pTQ1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sK
KyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFBy
aXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKworICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBKU0NfVkFMVUUoanNjU3RyaW5nTmV3RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSkp
OworCisgICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4ocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBKU0NfVkFMVUUoanNjQm9vbGVhbk5ld0Zyb21KU1ZhbHVlKGNvbnRleHQs
IGpzdmFsdWUpKTsKKyAgICAKKyAgICBpZiAoSlNWYWx1ZUlzTnVtYmVyKHByaXYtPmNvbnRleHQs
IGpzdmFsdWUpKQorICAgICAgICByZXR1cm4gSlNDX1ZBTFVFKGpzY051bWJlck5ld0Zyb21KU1Zh
bHVlKGNvbnRleHQsIGpzdmFsdWUpKTsKKworICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQocHJp
di0+Y29udGV4dCwganN2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChwcml2LT5jb250ZXh0LCBqc3Zh
bHVlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X2dldF92YWx1ZToKKyAqIEBjb250ZXh0OiB0
aGUgI0pTQ0NvbnRleHQgdGhhdCB0aGUgdmFsdWUgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbQorICog
QG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgb2JqZWN0IHByb3BlcnR5IHRoYXQgd2lsbCBi
ZSByZXRyaWV2ZWQKKyAqCisgKiBSZXRyaWV2ZXMgcHJvcGVydGllcyBmcm9tIHRoZSBKYXZhU2Ny
aXB0IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgI0pTQ0NvbnRleHQuIFZh
bHVlcyBhcmUgcmVwcmVzZW50ZWQgYnkgc3VidHlwZXMgb2YgSlNDVmFsdWUuCisgKgorICogUmV0
dXJuczogQSBKU0NWYWx1ZSBzdWJ0eXBlIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHJl
cXVlc3RlZCBwcm9wZXJ0eQorICovCitKU0NWYWx1ZSoKK2pzY19jb250ZXh0X2dldF92YWx1ZShK
U0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIEpTQ0NvbnRleHRQ
cml2YXRlKiBwcml2OworICAgIEpTU3RyaW5nUmVmIHN0ck5hbWU7CisgICAgSlNWYWx1ZVJlZiBq
c3ZhbHVlOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKworICAgIHByaXYg
PSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShj
b250ZXh0KTsKKworICAgIHN0ck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhu
YW1lKTsKKyAgICBqc3ZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShwcml2LT5jb250ZXh0LCBw
cml2LT5vYmplY3QsIHN0ck5hbWUsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZShz
dHJOYW1lKTsKKworICAgIHJldHVybiBqc1ZhbHVlVG9KU0NWYWx1ZShjb250ZXh0LCBqc3ZhbHVl
KTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9zZXRfdmFsdWU6CisgKiBAY29udGV4dDogdGhl
ICNKU0NDb250ZXh0IHdoZXJlIHRoZSB2YWx1ZSB3aWxsIGJlIHNldAorICogQG5hbWU6IHRoZSBu
YW1lIG9mIHRoZSBnbG9iYWwgb2JqZWN0IHByb3BlcnR5IHRoYXQgd2lsbCBiZSBzZXQKKyAqIEB2
YWx1ZTogdGhlIHZhbHVlCisgKgorICogU2V0cyBwcm9wZXJ0aWVzIGluIHRoZSBKYXZhU2NyaXB0
IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgI0pTQ0NvbnRleHQuIFZhbHVl
cyBhcmUgcmVwcmVzZW50ZWQgYnkgc3VidHlwZXMgb2YgSlNDVmFsdWUuCisgKi8KK3ZvaWQKK2pz
Y19jb250ZXh0X3NldF92YWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogbmFt
ZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2OworICAg
IEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBq
c2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKworICAgIGlmIChnX29i
amVjdF9pc19mbG9hdGluZyh2YWx1ZSkpIHsKKyAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsodmFs
dWUpOworICAgICAgICBwcml2LT52YWx1ZXMgPSBnX2xpc3RfYXBwZW5kKHByaXYtPnZhbHVlcywg
dmFsdWUpOworICAgIH0KKworICAgIGpzdmFsdWUgPSBqc2NWYWx1ZUdldEpTVmFsdWUodmFsdWUp
OworICAgIEpTU3RyaW5nUmVmIHN0ck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhuYW1lKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KHByaXYtPmNvbnRleHQsIHByaXYtPm9i
amVjdCwgc3RyTmFtZSwganN2YWx1ZSwKKyAgICAgICAga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSwgbnVsbHB0cik7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0ck5hbWUpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc4MzM1
OWViZDA4N2YyNjJiYWEwNTQwOWUwMDc5ZDhkYmMwMDM1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBB
bWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ09OVEVY
VCAgICAgICAgICAgIChqc2NfY29udGV4dF9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfQ09OVEVY
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0Nf
VFlQRV9DT05URVhULCBKU0NDb250ZXh0KSkKKyNkZWZpbmUgSlNDX0lTX0NPTlRFWFQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfQ09OVEVY
VCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0NMQVNTKGNsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQsIEpTQ0NvbnRleHRDbGFzcykpCisj
ZGVmaW5lIEpTQ19JU19DT05URVhUX0NMQVNTKGNsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ29u
dGV4dCAgICAgICAgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0Q2xhc3Mg
ICBKU0NDb250ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dFByaXZhdGUgSlND
Q29udGV4dFByaXZhdGU7CisKK3N0cnVjdCBfSlNDQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJl
bnQ7CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfSlNDQ29u
dGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBP
UlQgR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0ND
b250ZXh0ICoKK2pzY19jb250ZXh0X25ldyAgICAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NW
YWx1ZSAqCitqc2NfY29udGV4dF9nZXRfdmFsdWUgKEpTQ0NvbnRleHQqLCBjb25zdCBnY2hhciAq
bmFtZSk7CisKK0pTX0VYUE9SVCB2b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUgKEpTQ0NvbnRl
eHQqLCBjb25zdCBnY2hhciAqbmFtZSwgSlNDVmFsdWUqKTsKKworR19FTkRfREVDTFMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWU2OGJkOWU1MjM2NjhmOTAzMDEzOTUyMGYxOGZiMzE1MjJlNTBhNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2
w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisKK0pTX0VYUE9SVCBKU0dsb2JhbENvbnRl
eHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODVmNjNlZDhm
Mzk0ODM1NGZkZDU3NTc5Y2MyODFkM2FkZjYwODBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAKQEAgLTAsMCArMSw5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFy
YWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlND
TnVtYmVyLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpT
Q1ZhbHVlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5o
PgorCisvKioKKyAqIEBUaXRsZTogSlNDTnVtYmVyCisgKiBAU2hvcnRfZGVzY3JpcHRpb246ICNK
U0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBudW1lcmljIHZhbHVlcworICoKKyAqICNKU0NO
dW1iZXIgaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IG51bWVyaWMgdmFsdWVzIGluc2lk
ZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZUEUoSlNDTnVtYmVy
LCBqc2NfbnVtYmVyLCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGljIHZvaWQKK2pzY19udW1iZXJf
Y2xhc3NfaW5pdChKU0NOdW1iZXJDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfbnVt
YmVyX2luaXQoSlNDTnVtYmVyKikKK3sKK30KKworSlNDTnVtYmVyICoKK2pzY051bWJlck5ld0Zy
b21KU1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAg
ICBKU0NOdW1iZXIqIHZhbHVlOworCisgICAgdmFsdWUgPSAoSlNDTnVtYmVyKikgZ19vYmplY3Rf
bmV3KEpTQ19UWVBFX05VTUJFUiwgImNvbnRleHQiLCBjb250ZXh0LCBOVUxMKTsKKyAgICBqc2NW
YWx1ZVNldEpTVmFsdWUoSlNDX1ZBTFVFKHZhbHVlKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK0pTQ051bWJlcioKK2pzY19udW1iZXJfbmV3KEpTQ0NvbnRleHQqIGNvbnRl
eHQsIGdkb3VibGUgdmFsdWUpCit7CisgICAgSlNDb250ZXh0UmVmIGpzY29udGV4dDsKKyAgICBK
U1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250
ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihqc2NvbnRleHQs
IHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBq
c3ZhbHVlKTsKK30KKworSlNDTnVtYmVyKgoranNjX251bWJlcl9uZXdfaW50MzIoSlNDQ29udGV4
dCogY29udGV4dCwgZ2ludCB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYganNjb250ZXh0Owor
ICAgIEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKGpzY29u
dGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJuIGpzY051bWJlck5ld0Zyb21KU1ZhbHVlKGNvbnRl
eHQsIGpzdmFsdWUpOworfQorCitKU0NOdW1iZXIqCitqc2NfbnVtYmVyX25ld191aW50MzIoSlND
Q29udGV4dCogY29udGV4dCwgZ3VpbnQgdmFsdWUpCit7CisgICAgSlNDb250ZXh0UmVmIGpzY29u
dGV4dDsKKyAgICBKU1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJl
cihqc2NvbnRleHQsIHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1iZXJOZXdGcm9tSlNWYWx1
ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NOdW1iZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NOdW1iZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzYxY2YxNTY4MmU2NzIwNWY1ZmExY2ViMGM1OTViYjJh
ZTAxNjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ051bWJlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9OVU1CRVIgICAg
ICAgICAgICAoanNjX251bWJlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfTlVNQkVSKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX05V
TUJFUiwgSlNDTnVtYmVyKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJFUihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9OVU1CRVIpKQorI2RlZmlu
ZSBKU0NfTlVNQkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
TlVNQkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpT
Q19UWVBFX05VTUJFUikpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NOdW1iZXIgICAgICAgIEpTQ051
bWJlcjsKK3R5cGVkZWYgc3RydWN0IF9KU0NOdW1iZXJDbGFzcyAgIEpTQ051bWJlckNsYXNzOwor
CitzdHJ1Y3QgX0pTQ051bWJlciB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0
IF9KU0NOdW1iZXJDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K0pTX0VYUE9SVCBHVHlwZQoranNjX251bWJlcl9nZXRfdHlwZSAgICh2b2lkKTsKKworSlNfRVhQ
T1JUIEpTQ051bWJlciAqCitqc2NfbnVtYmVyX25ldyAgICAgICAgKEpTQ0NvbnRleHQqLCBnZG91
YmxlIHZhbHVlKTsKKworSlNfRVhQT1JUIEpTQ051bWJlciAqCitqc2NfbnVtYmVyX25ld19pbnQz
MiAgKEpTQ0NvbnRleHQqLCBnaW50IHZhbHVlKTsKKworSlNfRVhQT1JUIEpTQ051bWJlciAqCitq
c2NfbnVtYmVyX25ld191aW50MzIgKEpTQ0NvbnRleHQqLCBndWludCB2YWx1ZSk7CisKK0dfRU5E
X0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVt
YmVyUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MjlmY2U1MDZjNzczNDJmZjA5NThiNWIwMDE0NTBmMTdmYThj
MGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q051bWJlclByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDTnVtYmVyLmgiCisKK0pTX0VYUE9SVCBKU0NO
dW1iZXIqCitqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE1Yjk1ZWFhZGY2ZmVkNGEzNGMzMTliMzEwNzFhOWMzOWVkMjQyMmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcApAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgi
CisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisK
Ky8qKgorICogQFRpdGxlOiBKU0NTdHJpbmcKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1Zh
bHVlIHN1YnR5cGUgdG8gcmVwcmVzZW50IHN0cmluZ3MKKyAqCisgKiAjSlNDU3RyaW5nIGlzIHRo
ZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBzdHJpbmcgdmFsdWVzIGluc2lkZQorICogSmF2YVNj
cmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZUEUoSlNDU3RyaW5nLCBqc2Nfc3RyaW5n
LCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGljIHZvaWQKK2pzY19zdHJpbmdfY2xhc3NfaW5pdChK
U0NTdHJpbmdDbGFzcyAqKQoreworfQorCitzdGF0aWMgdm9pZAoranNjX3N0cmluZ19pbml0KEpT
Q1N0cmluZyAqKQoreworfQorCitKU0NTdHJpbmcgKgoranNjU3RyaW5nTmV3RnJvbUpTVmFsdWUo
SlNDQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ1N0cmlu
Zyogc3RyaW5nOworCisgICAgc3RyaW5nID0gKEpTQ1N0cmluZyAqKSBnX29iamVjdF9uZXcoSlND
X1RZUEVfU1RSSU5HLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpOworICAgIGpzY1ZhbHVlU2V0
SlNWYWx1ZShKU0NfVkFMVUUoc3RyaW5nKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gc3RyaW5n
OworfQorCisvKioKKyAqIGpzY19zdHJpbmdfbmV3OgorICogQGNvbnRleHQ6IFRoZSAjSlNDQ29u
dGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEBzdHI6IFRoZSBzdHJpbmcgdGhh
dCB0aGUgI0pTQ1N0cmluZyB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pT
Q1N0cmluZyB3aXRoIEBzdHIgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5
IGNyZWF0ZWQgI0pTQ1N0cmluZyBvYmplY3QKKyAqLworSlNDU3RyaW5nICoKK2pzY19zdHJpbmdf
bmV3KEpTQ0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGdjaGFyICpzdHIpCit7CisgICAgSlNDb250
ZXh0UmVmIGpzY29udGV4dDsKKyAgICBKU1N0cmluZ1JlZiB2YWx1ZTsKKyAgICBKU1ZhbHVlUmVm
IGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRl
eHQpOworICAgIHZhbHVlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyKTsKKyAg
ICBqc3ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNjb250ZXh0LCB2YWx1ZSk7CisgICAgSlNT
dHJpbmdSZWxlYXNlKHZhbHVlKTsKKworICAgIHJldHVybiBqc2NTdHJpbmdOZXdGcm9tSlNWYWx1
ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBkZmRlZDVhMTVmM2Y4ZmVjMjdmZWRjM2E4OTk4MzU1
NWVhMzgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ1N0cmluZy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9TVFJJTkcgICAg
ICAgICAgICAoanNjX3N0cmluZ19nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfU1RSSU5HKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1NU
UklORywgSlNDU3RyaW5nKSkKKyNkZWZpbmUgSlNDX0lTX1NUUklORyhvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9TVFJJTkcpKQorI2RlZmlu
ZSBKU0NfU1RSSU5HX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX1NUUklORywgSlNDU3RyaW5nQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
U1RSSU5HX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpT
Q19UWVBFX1NUUklORykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NTdHJpbmcgICAgICAgIEpTQ1N0
cmluZzsKK3R5cGVkZWYgc3RydWN0IF9KU0NTdHJpbmdDbGFzcyAgIEpTQ1N0cmluZ0NsYXNzOwor
CitzdHJ1Y3QgX0pTQ1N0cmluZyB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0
IF9KU0NTdHJpbmdDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K0pTX0VYUE9SVCBHVHlwZQoranNjX3N0cmluZ19nZXRfdHlwZSAodm9pZCk7CisKK0pTX0VYUE9S
VCBKU0NTdHJpbmcqCitqc2Nfc3RyaW5nX25ldyAgICAgIChKU0NDb250ZXh0KiwgY29uc3QgZ2No
YXIgKnN0cik7CisKK0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDU3RyaW5nUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTJjZTMzMDA0ZDRhYjc4ZDc0
Y2FhNmI5YmI2MDI0ZGYyZDU1ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8
dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgi
CisKK0pTX0VYUE9SVCBKU0NTdHJpbmcqCitqc2NTdHJpbmdOZXdGcm9tSlNWYWx1ZShKU0NDb250
ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZjA1Y2ExYjExMTMzYjJiMjI4N2E0YmQ1M2Y2NjY1N2Q2Yjg4
Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q1ZhbHVlLmNwcApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBF
c3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0Jv
b2xlYW4uaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ051
bWJlci5oIgorI2luY2x1ZGUgIkpTQ1N0cmluZy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+
CisKKy8qKgorICogU0VDVElPTjogSlNDVmFsdWUKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQmFz
ZSBjbGFzcyByZXByZXNlbnRpbmcgSmF2YVNjcmlwdENvcmUgdmFsdWVzCisgKiBAVGl0bGU6IEpT
Q1ZhbHVlCisgKgorICogI0pTQ1ZhbHVlIGlzIHRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gcmVwcmVz
ZW50IHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLiBBY3R1YWwgdmFsdWVzIGFyZSBz
dWJ0eXBlcyBvZiB0aGlzIGNsYXNzLiBUaGUKKyAqIGN1cnJlbnQgc3ViY2xhc3NlcyBhcmU6ICNK
U0NTdHJpbmcsICNKU0NOdW1iZXIgYW5kICNKU0NCb29sZWFuLgorICoKKyAqLworCitzdHJ1Y3Qg
X0pTQ1ZhbHVlUHJpdmF0ZSB7CisgICAgSlNDQ29udGV4dCoganNjQ29udGV4dDsKKyAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlOworfTsKKworR19E
RUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX0lOSVRJ
QUxMWV9VTk9XTkVEKQorCitlbnVtIHsKKyAgICBrUFJPUF8wLAorCisgICAga1BST1BfQ09OVEVY
VCwKK307CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZUdldFByb3BlcnR5KEdPYmplY3QqIG9iaiwg
Z3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1fc3BlYykKK3sK
KyAgICBKU0NWYWx1ZSogdmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZh
dGUodmFsKTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2Uga1BST1BfQ09OVEVY
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBnX29iamVjdF9yZWYocHJpdi0+
anNjQ29udGV4dCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBwcm9wX2lkLCBwYXJhbV9zcGVjKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZVNldFByb3BlcnR5KEdPYmplY3QqIG9i
aiwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1f
c3BlYykKK3sKKyAgICBKU0NWYWx1ZSogdmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFu
Y2VfcHJpdmF0ZSh2YWwpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBrUFJP
UF9DT05URVhUOiB7CisgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChn
X3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgcHJpdi0+anNjQ29udGV4dCA9IGNv
bnRleHQ7CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBjb250ZXh0ID8ganNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSA6IG51bGxwdHI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBw
cm9wX2lkLCBwYXJhbV9zcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZURp
c3Bvc2UoR09iamVjdCogb2JqKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAg
IHByaXYgPSAoSlNDVmFsdWVQcml2YXRlKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRl
KEpTQ19WQUxVRShvYmopKTsKKyAgICBpZiAocHJpdi0+dmFsdWUgIT0gbnVsbHB0cikgeworICAg
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKTsKKyAgICAg
ICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfdmFsdWVfcGFyZW50X2NsYXNzKS0+
ZGlzcG9zZShvYmopOworfQorCitzdGF0aWMgdm9pZAoranNjX3ZhbHVlX2NsYXNzX2luaXQoSlND
VmFsdWVDbGFzcyAqa2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzczsKKworICAg
IG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgb2JqQ2xhc3MtPmdldF9w
cm9wZXJ0eSA9IGpzY1ZhbHVlR2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0
eSA9IGpzY1ZhbHVlU2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NWYWx1
ZURpc3Bvc2U7CisKKyAgICAvKioKKyAgICAgKiBKU0NWYWx1ZTpjb250ZXh0OgorICAgICAqCisg
ICAgICogVGhlICNKU0NDb250ZXh0IG9mIHRoZSB2YWx1ZS4KKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBrUFJPUF9DT05URVhU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJjb250ZXh0IiwKKyAgICAgICAgICAgICJj
b250ZXh0IiwKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IiwKKyAg
ICAgICAgICAgIEpTQ19UWVBFX0NPTlRFWFQsCisgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChH
X1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK3N0YXRp
YyB2b2lkCitqc2NfdmFsdWVfaW5pdChKU0NWYWx1ZSopCit7Cit9CisKK0pTVmFsdWVSZWYKK2pz
Y1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0
ZSh2YWx1ZSk7CisKKyAgICByZXR1cm4gcHJpdi0+dmFsdWU7Cit9CisKK3ZvaWQKK2pzY1ZhbHVl
U2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXY7CisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2Nf
dmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworCisgICAgZ19yZXR1cm5faWZfZmFp
bChwcml2LT5jb250ZXh0ICE9IG51bGxwdHIpOworCisgICAgaWYgKHByaXYtPnZhbHVlICE9IG51
bGxwdHIpIHsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChwcml2LT5jb250ZXh0LCBwcml2LT52
YWx1ZSk7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBwcml2
LT52YWx1ZSA9IGpzdmFsdWU7CisgICAgSlNWYWx1ZVByb3RlY3QocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpOworfQorCitKU0NWYWx1ZSoKK2pzY1ZhbHVlTmV3RnJvbUpTVmFsdWUoSlNDQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ1ZhbHVlKiB2YWx1
ZTsKKworICAgIHZhbHVlID0gKEpTQ1ZhbHVlKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZBTFVF
LCAiY29udGV4dCIsIGNvbnRleHQsIG51bGxwdHIpOworICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZSh2
YWx1ZSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKy8qKgorICoganNjX3Zh
bHVlX2dldF9zdHJpbmc6CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWlu
aW5nIHRoZSB2YWx1ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgc3RyaW5nIGZyb20gI0pTQ1ZhbHVl
CisgKgorICogUmV0dXJuczogZ2NoYXIqCisgKi8KK2NvbnN0IGdjaGFyKgoranNjX3ZhbHVlX2dl
dF9zdHJpbmcoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsK
KyAgICBKU1N0cmluZ1JlZiBzdHJWYWx1ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGdjaGFy
KiBidWZmOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1NUUklORyh2YWx1ZSks
IG51bGxwdHIpOworCisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2NfdmFsdWVfZ2V0
X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTVmFs
dWVJc1N0cmluZyhwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSksIG51bGxwdHIpOworCisgICAg
c3RyVmFsdWUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVl
LCBudWxscHRyKTsKKyAgICBsZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoc3RyVmFsdWUpOworICAgIGJ1ZmYgPSAoZ2NoYXIqKSBnX21hbGxvYzAobGVuZ3RoKTsKKyAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0clZhbHVlLCBidWZmLCBsZW5ndGgpOworICAgIEpT
U3RyaW5nUmVsZWFzZShzdHJWYWx1ZSk7CisgICAgCisgICAgcmV0dXJuIGdfc3RyZHVwKGJ1ZmYp
OworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfYm9vbGVhbjoKKyAqIEB2YWx1ZTogdGhlICNK
U0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRo
ZSBib29sZWFuIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0dXJuczogZ2Jvb2xlYW4K
KyAqLworZ2Jvb2xlYW4KK2pzY192YWx1ZV9nZXRfYm9vbGVhbihKU0NWYWx1ZSAqdmFsdWUpCit7
CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX0JPT0xF
QU4odmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2YXRlICopIGpzY192YWx1ZV9n
ZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVh
bihwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jv
b2xlYW4ocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpOworfQorCisvKioKKyAqIGpzY192YWx1
ZV9nZXRfZG91YmxlOgorICogQHZhbHVlOiB0aGUgI0pTQ1ZhbHVlIHN1YnR5cGUgY29udGFpbmlu
ZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIG51bWVyaWMgKGRvdWJsZSkgdmFsdWUg
ZnJvbSAjSlNDVmFsdWUKKyAqCisgKiBSZXR1cm5zOiBnYm9vbGVhbgorICovCitnZG91YmxlCitq
c2NfdmFsdWVfZ2V0X2RvdWJsZShKU0NWYWx1ZSAqdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2
YXRlKiBwcml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX05VTUJFUih2YWx1ZSkpOworCisgICAg
cHJpdiA9IChKU0NWYWx1ZVByaXZhdGUgKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRl
KHZhbHVlKTsKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNOdW1iZXIocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+Y29udGV4dCwg
cHJpdi0+dmFsdWUsIG51bGxwdHIpOworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfaW50MzI6
CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1ZQor
ICoKKyAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyAoaW50KSB2YWx1ZSBmcm9tICNKU0NWYWx1ZQor
ICoKKyAqIFJldHVybnM6IGdib29sZWFuCisgKi8KK2dpbnQKK2pzY192YWx1ZV9nZXRfaW50MzIo
SlNDVmFsdWUgKnZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAgIGdf
YXNzZXJ0KEpTQ19JU19OVU1CRVIodmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2
YXRlICopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3Nl
cnQoSlNWYWx1ZUlzTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRy
KTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X3VpbnQzMjoKKyAqIEB2YWx1ZTogdGhlICNK
U0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRo
ZSBudW1lcmljICh1bnNpZ25lZCBpbnQpIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0
dXJuczogZ2Jvb2xlYW4KKyAqLworZ3VpbnQKK2pzY192YWx1ZV9nZXRfdWludDMyKEpTQ1ZhbHVl
ICp2YWx1ZSkKK3sKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXY7CisKKyAgICBnX2Fzc2VydChK
U0NfSVNfTlVNQkVSKHZhbHVlKSk7CisKKyAgICBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBq
c2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFs
dWVJc051bWJlcihwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIChn
dWludCkgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRy
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTE1NzgxZDdkYjZhZDgzNzVjYTAzMWYyNTNhMjVhNjcwOWU0ODJhMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVkFMVUUgICAgICAgICAgICAoanNjX3Zh
bHVlX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19WQUxVRShvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWUpKQor
I2RlZmluZSBKU0NfSVNfVkFMVUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0NfVkFMVUVfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUs
IEpTQ1ZhbHVlQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfVkFMVUVfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUpKQorCit0eXBlZGVm
IHN0cnVjdCBfSlNDVmFsdWUgICAgICAgIEpTQ1ZhbHVlOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1Zh
bHVlQ2xhc3MgICBKU0NWYWx1ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlUHJpdmF0
ZSBKU0NWYWx1ZVByaXZhdGU7CisKK3N0cnVjdCBfSlNDVmFsdWUgeworICAgIEdPYmplY3QgcGFy
ZW50OworCisgICAgSlNDVmFsdWVQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NWYWx1
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBPUlQg
R1R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZSAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBjb25zdCBj
aGFyICoKK2pzY192YWx1ZV9nZXRfc3RyaW5nICAoSlNDVmFsdWUgKik7CisKK0pTX0VYUE9SVCBn
Ym9vbGVhbgoranNjX3ZhbHVlX2dldF9ib29sZWFuIChKU0NWYWx1ZSAqKTsKKworSlNfRVhQT1JU
IGdkb3VibGUKK2pzY192YWx1ZV9nZXRfZG91YmxlICAoSlNDVmFsdWUgKik7CisKK0pTX0VYUE9S
VCBnaW50Citqc2NfdmFsdWVfZ2V0X2ludDMyICAgKEpTQ1ZhbHVlICopOworCitKU19FWFBPUlQg
Z3VpbnQKK2pzY192YWx1ZV9nZXRfdWludDMyICAoSlNDVmFsdWUgKik7CisKKy8qIEpTX0VYUE9S
VCBKU0NDb250ZXh0ICogKi8KKy8qIGpzY192YWx1ZV9nZXRfY29udGV4dCAoSlNDVmFsdWUgKnZh
bHVlKTsgKi8KKworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODAyZWVjNTY1OWZmZGU5ZmZkZmVl
NDgzYzRjYTRlYjZmZDQ5OGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZh
dW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSlNDVmFsdWUuaCIKKworSlNfRVhQT1JUIEpTVmFsdWVSZWYKK2pzY1ZhbHVlR2V0
SlNWYWx1ZShKU0NWYWx1ZSopOworCitKU19FWFBPUlQgdm9pZAoranNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ1ZhbHVlKiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvanNjLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzAwNGUyYzNjMWFiYzQwZDY2ZjcyMzc1NjkyZTBjMzg0OGZmM2I5NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAt
MCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDQm9vbGVhbi5oPgorI2luY2x1ZGUgPGpzYy9KU0NOdW1iZXIuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM5OTY1MGQ0OTY4
NDBhMDZlYWEzMzJjNGRkOGIyMjRiM2VlZmM1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNUZXN0LmNwcApAQCAtMCwwICsx
LDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PD
s3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NCb29sZWFu
LmgiCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiLi4vLi4v
Z2xpYi9KU0NOdW1iZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9nbGliL0pTQ1N0cmluZy5oIgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorCit2b2lkCitDb250ZXh0Rml4dHVyZVNldFVwKENvbnRleHRGaXh0
dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGZpeHR1cmUtPmNv
bnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4
dHVyZS0+Y29udGV4dCwgImh1dnMiLCAgSlNDX1ZBTFVFKGpzY19zdHJpbmdfbmV3KGZpeHR1cmUt
PmNvbnRleHQsICJuaXZzIikpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+
Y29udGV4dCwgInRydWUiLCAgSlNDX1ZBTFVFKGpzY19ib29sZWFuX25ldyhmaXh0dXJlLT5jb250
ZXh0LCB0cnVlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0
LCAiZmFsc2UiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZh
bHNlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVt
YmVyLXoiLCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgMC4wKSkp
OworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLXAi
LCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgMS4xKSkpOworICAg
IGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLW4iLCBKU0Nf
VkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgLTEuMSkpKTsKKyAgICAvLyBq
c2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImludDAiLCBKU0NfVkFMVUUo
anNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworICAgIC8vIGpzY19j
b250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAiaW50MSIsIEpTQ19WQUxVRShqc2Nf
Ym9vbGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7CisgICAgLy8ganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJpbnQtMSIsIEpTQ19WQUxVRShqc2NfYm9v
bGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7CisgICAgLy8ganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ1aW50ZmYiLCBKU0NfVkFMVUUoanNjX2Jvb2xl
YW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworfQorCit2b2lkCitDb250ZXh0Rml4
dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIGdfY2xlYXJfb2JqZWN0KCZmaXh0dXJlLT5jb250ZXh0KTsKK30KKwordm9p
ZAorSlNDU3RyaW5nVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWUgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUo
Zml4dHVyZS0+Y29udGV4dCwgImh1dnMiKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19TVFJJ
TkcodmFsdWUpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoanNjX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpLCA9PSwgIm5pdnMiKTsKK30KKworCit2b2lkCitKU0NCb29sZWFuVGVzdChDb250ZXh0Rml4
dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSog
dmFsdWVUID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ0cnVlIik7
CisgICAgSlNDVmFsdWUqIHZhbHVlRiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5j
b250ZXh0LCAiZmFsc2UiKTsKKyAgICBKU0NCb29sZWFuKiBib29sVCA9IEpTQ19CT09MRUFOKHZh
bHVlVCk7CisgICAgSlNDQm9vbGVhbiogYm9vbEYgPSBKU0NfQk9PTEVBTih2YWx1ZUYpOworCisg
ICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUodmFsdWVUKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShKU0NfSVNfVkFMVUUodmFsdWVGKSk7CisKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19CT09M
RUFOKGJvb2xUKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfQk9PTEVBTihib29sRikpOwor
ICAgIAorICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlVCkpOwor
ICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZUYpKTsKK30KKwor
dm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWVaID0ganNjX2NvbnRleHRfZ2V0X3Zh
bHVlKGZpeHR1cmUtPmNvbnRleHQsICJudW1iZXIteiIpOworICAgIEpTQ1ZhbHVlKiB2YWx1ZVAg
PSBqc2NfY29udGV4dF9nZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgIm51bWJlci1wIik7Cisg
ICAgSlNDVmFsdWUqIHZhbHVlTiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5jb250
ZXh0LCAibnVtYmVyLW4iKTsKKworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVl
WikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlUCkpOworICAgIGdfYXNz
ZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlTikpOworCisgICAgZ19hc3NlcnRfdHJ1ZShKU0Nf
SVNfTlVNQkVSKHZhbHVlWikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX05VTUJFUih2YWx1
ZVApKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19OVU1CRVIodmFsdWVOKSk7CisKKyAgICBn
X2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZVopLCA9PSwgMC4wKTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZVApLCA9PSwg
MS4xKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZU4p
LCA9PSwgLTEuMSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX2dldF9pbnQzMih2
YWx1ZVopLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV9nZXRfaW50MzIo
dmFsdWVQKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfZ2V0X2ludDMy
KHZhbHVlTiksID09LCAtMSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9nZXRf
dWludDMyKHZhbHVlWiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9n
ZXRfdWludDMyKHZhbHVlUCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1
ZV9nZXRfdWludDMyKHZhbHVlTiksID09LCA0Mjk0OTY3Mjk1KTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNUZXN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ2YjdlZDQ2MDVmODM5ZTcwZGY4YTQ1MWVkMDg4ZGQ1ODM3MmFkMjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVz
dC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICIuLi8uLi9nbGliL0pTQ0NvbnRleHQuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg
X0NvbnRleHRGaXh0dXJlIHsKKyAgICBKU0NDb250ZXh0ICpjb250ZXh0OworfSBDb250ZXh0Rml4
dHVyZTsKKwordm9pZAorQ29udGV4dEZpeHR1cmVTZXRVcChDb250ZXh0Rml4dHVyZSosIGdjb25z
dHBvaW50ZXIpOworCit2b2lkCitDb250ZXh0Rml4dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJl
KiwgZ2NvbnN0cG9pbnRlcik7CisKK3ZvaWQKK0pTQ1N0cmluZ1Rlc3QoQ29udGV4dEZpeHR1cmUq
LCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorSlNDQm9vbGVhblRlc3QoQ29udGV4dEZpeHR1cmUq
LCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSos
IGdjb25zdHBvaW50ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy9nbGliL21haW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGli
L21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkYWEzMmVkM2M2NzI3N2E0NmY1MTM5YzVjY2ZkYWZhNzIx
MTlkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L2dsaWIvbWFpbi5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiSlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitpbnQKK21h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9zdHJpbmctdGVzdCIsIENv
bnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NTdHJp
bmdUZXN0LCBDb250ZXh0Rml4dHVyZVRlYXJEb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi9qc2Mt
dmFsdWVzL2Jvb2xlYW4tdGVzdCIsIENvbnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250
ZXh0Rml4dHVyZVNldFVwLCBKU0NCb29sZWFuVGVzdCwgQ29udGV4dEZpeHR1cmVUZWFyRG93bik7
CisKKyAgICAKKyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9udW1iZXItdGVzdCIsIENvbnRl
eHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NOdW1iZXJU
ZXN0LCBDb250ZXh0Rml4dHVyZVRlYXJEb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDc5MWFiYTQ5
YTNjMjU1NTI5ZTAwMDU4MzBlZmYwMzE3MzMwZWY1NS4uNTg5OTBiYzdkNmU1M2IwMzIwNzk0MTRl
ZWMxY2E4OTMyYTgwMDQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtNDgsMyArNDgsNDMgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVT
CiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKK2lmIChFTkFCTEVfSlNDX0dMSUIpCisgICAg
c2V0KGpzY2dsaWJfU09VUkNFUworICAgICAgICBBUEkvZ2xpYi9KU0NCb29sZWFuLmNwcAorICAg
ICAgICBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAorICAgICAgICBBUEkvZ2xpYi9KU0NOdW1iZXIu
Y3BwCisgICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5jcHAKKyAgICAgICAgQVBJL2dsaWIvSlND
VmFsdWUuY3BwCisgICAgKQorCisgICAgc2V0KGpzY2dsaWJfSEVBREVSUworICAgICAgICBBUEkv
Z2xpYi9KU0NCb29sZWFuLmgKKyAgICAgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5oCisgICAgICAg
IEFQSS9nbGliL0pTQ051bWJlci5oCisgICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5oCisgICAg
ICAgIEFQSS9nbGliL0pTQ1ZhbHVlLmgKKyAgICAgICAgQVBJL2dsaWIvanNjLmgKKyAgICApCisK
KyAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAgIEFQSS9nbGliCisgICAgKQorICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKKyAgICAgICAgJHtqc2NnbGliX1NPVVJDRVN9CisgICAgKQorICAgIGFkZF9leGVjdXRhYmxl
KGpzYy10ZXN0cworICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS90ZXN0cy9nbGliL21h
aW4uY3BwCisgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL3Rlc3RzL2dsaWIvSlNDVmFs
dWVzVGVzdC5jcHAKKyAgICAgICR7anNjZ2xpYl9TT1VSQ0VTfQorICAgICkKKyAgICB0YXJnZXRf
bGlua19saWJyYXJpZXMoanNjLXRlc3RzCisgICAgICAgIGdvYmplY3QtMi4wCisgICAgICAgIGds
aWItMi4wCisgICAgICAgIGxpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zbworICAgICkKKyAgICBp
bnN0YWxsKEZJTEVTCisgICAgICAgICR7anNjZ2xpYl9IRUFERVJTfQorICAgICAgICAgICAgREVT
VElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURFUl9JTlNUQUxMX0RJUn0vanNjIgorKQorZW5kaWYg
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggMTdjMmM4MmViMzQzM2ZjY2U2MGRkN2JlNWFjNjcx
MjViODNmMzhiNC4uZmJkMDNlZDdmNzI1OTA4OTNlOGU1MzM3N2MwZGI0M2M1YmFmZWQ1MyAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2UKQEAgLTg1LDYgKzg1LDcgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUo
RU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzIgIldoZXRoZXIgdG8gYnVpbGQgV2ViS2l0UGx1Z2lu
UHIKIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9RVUFSVFpfVEFSR0VUICJXaGV0aGVyIHRv
IGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgUXVhcnR6IHdpbmRvd2luZyB0YXJnZXQuIiBQVUJMSUMg
JHtHVEszX1NVUFBPUlRTX1FVQVJUWn0pCiBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfWDEx
X1RBUkdFVCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFgxMSB3aW5kb3dpbmcg
dGFyZ2V0LiIgUFVCTElDICR7R1RLM19TVVBQT1JUU19YMTF9KQogV0VCS0lUX09QVElPTl9ERUZJ
TkUoRU5BQkxFX1dBWUxBTkRfVEFSR0VUICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0
aGUgV2F5bGFuZCB3aW5kb3dpbmcgdGFyZ2V0LiIgUFVCTElDICR7R1RLM19TVVBQT1JUU19XQVlM
QU5EfSkKK1dFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9KU0NfR0xJQiAiV2hldGhlciB0byBl
bmFibGUgc3VwcG9ydCBmb3IgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncy4iIFBVQkxJQyBP
RkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfTElCTk9USUZZICJXaGV0aGVyIHRvIGVuYWJs
ZSB0aGUgZGVmYXVsdCB3ZWIgbm90aWZpY2F0aW9uIGltcGxlbWVudGF0aW9uLiIgUFVCTElDIE9O
KQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0xJQkhZUEhFTiAiV2hldGhlciB0byBlbmFibGUg
dGhlIGRlZmF1bHQgYXV0b21hdGljIGh5cGhlbmF0aW9uIGltcGxlbWVudGF0aW9uLiIgUFVCTElD
IE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0xJQlNFQ1JFVCAiV2hldGhlciB0byBlbmFi
bGUgdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHVzaW5nIGxpYnNlY3JldC4iIFBV
QkxJQyBPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA4ZjY2N2RiNTQ1Y2Q4NGM0NDJiOWZhZDg1MWE3YjRjNDhmNTI4MWE0Li40Nzg5NDIyYjE4
NDUxOTFlNDkxODRlZjlkYjA3NWIzMWU1MDkzYjdkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMTAtMjcgIEVz
dMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCAgPHRldmF1bUBnbWFpbC5jb20+CisKKyAg
ICAgICAgW0dUS10gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhU2NyaXB0Q29yZSBnbGli
IGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGlzIGEgc2ltcGxlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYSBKYXZhU2NyaXB0
Q29yZSBiaW5kaW5ncworICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGRpc2N1c3Npb24gb24gd2Vi
a2xpdC1ndGsgbWFpbGluZyBsaXN0IHRocmVhZAorICAgICAgICBodHRwczovL2xpc3RzLndlYmtp
dC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1ndGsvMjAxNi1PY3RvYmVyLzAwMjgzNC5odG1sCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06IEFkZGVkIGpzYy1nbGli
IG9wdGlvbiBhbmQgZW5hYmxpbmcgb24gR1RLIHBvcnQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHk6IEFkZGVkIHJ1bGVzIHRvIGlnbm9yZSBuZXcgSlNDIHB1Ymxp
YyBoZWFkZXIgZmlsZXMKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJf
dW5pdHRlc3QucHk6IEFkZGVkIHRlc3RzIHRvIHRoZSBuZXcgcnVsZXMKKwogMjAxNi0xMC0xOCAg
UGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViUlRD
OiBbR1RLXSBVcGRhdGUgamhidWlsZCBlbnZpcm9ubWVudCBmb3IgT3BlbldlYlJUQwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDFiYjU0OGRmMjM4Y2RlYmY0NGI2
MTcxZTU2ODg4ZDE0NjkwYzFmYTcuLmU5NDc4OTA4ZTFjMGFmNjMyZTY3OTAwMzEzZjQ4YTgzYTQ3
ZDBkODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5w
bQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTQ2NSw2
ICs0NjUsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAKICAgICB7IG9wdGlvbiA9PiAieHNsdCIsIGRl
c2MgPT4gIlRvZ2dsZSBYU0xUIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfWFNM
VCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCR4c2x0U3VwcG9ydCB9LAorCisgICAgeyBvcHRp
b24gPT4gImpzYy1nbGliIiwgZGVzYyA9PiAiVG9nZ2xlIEphdmFTY3JpcHRDb3JlIGdsaWIgYmlu
ZGluZ3Mgc3VwcG9ydCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9KU0NfR0xJQiIsIGRlZmF1
bHQgPT4gKGlzR3RrKCkpLCB2YWx1ZSA9PiBcJHhzbHRTdXBwb3J0IH0sCiApOwogCiBzdWIgZ2V0
RmVhdHVyZU9wdGlvbkxpc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5
CmluZGV4IGUyZmE0ZmQzYTk3YTZjN2ZkMmI4Nzg0M2MyNTJmYzJlYjE5N2Q4NjcuLjMzZTRiMzFi
YTNjYTk3ZGYzMWRjODhjNTg3OGRjY2JlN2VlOTc2ZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkKQEAgLTMwNyw3ICszMDcsMTEgQEAgX1NLSVBQRURfRklMRVNfV0lU
SF9XQVJOSU5HID0gWwogICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2Vi
UHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ0RPTScpLAogCiAgICAg
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0
aycsICd3ZWJraXQyLmgnKSwKLSAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywg
J1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2Vi
LWV4dGVuc2lvbi5oJyldCisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdX
ZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1l
eHRlbnNpb24uaCcpLAorCisgICAgIyBHT2JqZWN0IGJpbmRpbmdzIGZvciBKYXZhU2NyaXB0Q29y
ZS4KKyAgICByZS5jb21waWxlKHJlLmVzY2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZh
U2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicpICsgb3MucGF0aC5zZXApICsgcidKU0MoPyEuKlBy
aXZhdGVcLmgpLipcLmgkJyksCisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlw
dENvcmUnLCAnQVBJJywgJ2dsaWInLCAnanNjLmgnKV0KIAogIyBGaWxlcyB0byBza2lwIHRoYXQg
YXJlIG1vcmUgY29tbW9uIG9yIG9idmlvdXMuCiAjCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKaW5kZXggOTUwOGU5ZDNiOTRlOTIzNGIzNDQ4
ZDkxZGJkNWQ2MTlkZDExMTg5MS4uYTkxNGI3YzVkMzY5ZjkxNTVhNWU5NWQ2YWJiYWNkNDVkNzhk
ZmNmNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3Vu
aXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0
dGVzdC5weQpAQCAtMjg2LDYgKzI4Niw3IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVyU2tpcFRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJLaXQyJywgJ1VJUHJvY2VzcycsICdBUEknLCAnZ3RrJywgJ3dlYmtpdDIuaCcpLAogICAg
ICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1VJUHJvY2VzcycsICdB
UEknLCAnZ3RrJywgJ1dlYktpdFdlYlZpZXcuaCcpLAogICAgICAgICAgICBvcy5wYXRoLmpvaW4o
J1NvdXJjZScsICdXZWJLaXQyJywgJ1VJUHJvY2VzcycsICdBUEknLCAnZ3RrJywgJ1dlYktpdExv
YWRlci5oJyksCisgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRD
b3JlJywgJ0FQSScsICdnbGliJywgJ0pTQ0Jvb2xlYW4uaCcpLAogICAgICAgICAgICAgXQogCiAg
ICAgICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX3NraXA6CkBAIC0zMDEsNiArMzAyLDcgQEAgY2xh
c3MgQ2hlY2tlckRpc3BhdGNoZXJTa2lwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAg
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScs
ICdndGsnLCAnV2ViS2l0V2ViVmlld1ByaXZhdGUuaCcpLAogICAgICAgICAgICBvcy5wYXRoLmpv
aW4oJ1Rvb2xzJywgJ1Rlc3RXZWJLaXRBUEknLCAnVGVzdHMnLCAnV2ViS2l0Mkd0aycsICdXZWJW
aWV3VGVzdC5jcHAnKSwKICAgICAgICAgICAgb3MucGF0aC5qb2luKCdUb29scycsICdUZXN0V2Vi
S2l0QVBJJywgJ1Rlc3RzJywgJ1dlYktpdDJHdGsnLCAnV2ViVmlld1Rlc3QuaCcpLAorICAgICAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xp
YicsICdKU0NCb29sZWFuLmNwcCcpLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGZvciBwYXRo
IGluIHBhdGhzX25vdF90b19za2lwOgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDljNmVmYTQyMGZhN2Q1ODBlMTg5NjE5NjQwMzczNjJmNjc2NWFiNTYuLjRlYjgzN2Jh
MjAwYTcyZTY5MjY5NGM0ODYzMTM0MzJmY2MzNTYzZDcgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZwor
KysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNh
bXVlbCBQcm9jw7NwaW8gQW1hcmFsICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RL
XSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMg
YSBzaW1wbGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRp
bmdzCisgICAgICAgIGFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBt
YWlsaW5nIGxpc3QgdGhyZWFkCisgICAgICAgIGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBl
cm1haWwvd2Via2l0LWd0ay8yMDE2LU9jdG9iZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIFNv
dXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOiBBZGRlZCBFTkFCTEVfSlNDX0dMSUIgb3B0aW9u
IGRlZmF1bHRpbmcgdG8gT0ZGCisKIDIwMTYtMTAtMTggIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBDU1NfU0hBUEVTIGZlYXR1cmUgZGVmaW5pdGlvbi4g
VGhpcyBzaG91bGQgYWx3YXlzIGJlIG9uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293039</attachid>
            <date>2016-10-27 10:54:44 -0700</date>
            <delta_ts>2016-10-27 11:00:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161027155053.patch</filename>
            <type>text/plain</type>
            <size>58471</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi41ZDhiYTUzZjk1OWIyYjYz
NWVjNDUxYTkzNTI3YmI1NGRkMWI2NmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisg
ICAgICAgIGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2
LU9jdG9iZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NCb29sZWFuLmg6IEFkZGVkLgorICAgICAg
ICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9n
bGliL0pTQ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ051bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ051bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NOdW1iZXJQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZy5jcHA6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkv
Z2xpYi9KU0NTdHJpbmdQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1Zh
bHVlLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL2pzYy5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvZ2xpYi9tYWluLmNwcDogQWRkZWQuCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZGVkIHJ1bGVzIGZvciBidWlsZGluZyBhbmQgaW5z
dGFsbGluZyBqc2MtZ2xpYgorCiAyMDE2LTEwLTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBBUk0gYnVpbGRmaXggYWZ0ZXIgcjIw
NzQ3NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29s
ZWFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NmJmOWJkYzgxM2I1ZjcxMzdiMDEwNTE1MTMxY2ZkNjM0ODUwYjhiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4u
Y3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NCb29sZWFuCisg
KiBAU2hvcnRfZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBib29s
ZWFuIHZhbHVlcworICoKKyAqICNKU0NCb29sZWFuIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJl
c2VudCBib29sZWFuIHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLwor
CitHX0RFRklORV9UWVBFKEpTQ0Jvb2xlYW4sIGpzY19ib29sZWFuLCBKU0NfVFlQRV9WQUxVRSkK
Kworc3RhdGljIHZvaWQKK2pzY19ib29sZWFuX2NsYXNzX2luaXQoSlNDQm9vbGVhbkNsYXNzICop
Cit7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfYm9vbGVhbl9pbml0KEpTQ0Jvb2xlYW4gKikKK3sK
K30KKworSlNDQm9vbGVhbiAqCitqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCAq
Y29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ0Jvb2xlYW4qIGJvb2xlYW47
CisKKyAgICBib29sZWFuID0gKEpTQ0Jvb2xlYW4gKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX0JP
T0xFQU4sICJjb250ZXh0IiwgY29udGV4dCwgTlVMTCk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ19WQUxVRShib29sZWFuKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gYm9vbGVhbjsKK30K
KworLyoqCisgKiBqc2NfYm9vbGVhbl9uZXc6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0
IHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgYm9vbGVhbiB2YWx1
ZSB0aGF0IHRoZSAjSlNDQm9vbGVhbiB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBu
ZXcgI0pTQ0Jvb2xlYW4gd2l0aCBAdmFsdWUgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczog
VGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ0Jvb2xlYW4gb2JqZWN0CisgKi8KK0pTQ0Jvb2xlYW4gKgor
anNjX2Jvb2xlYW5fbmV3KEpTQ0NvbnRleHQgKmNvbnRleHQsIGdib29sZWFuIHZhbHVlKQorewor
ICAgIEpTQ29udGV4dFJlZiBqc2NvbnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisg
ICAganNjb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBqc3Zh
bHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGpzY29udGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJu
IGpzY0Jvb2xlYW5OZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NDZiMzAx
MmY3ZGEwMjlhOTliNGQ2ZTgzOWIxODJjNzRmMGI3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5oCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBKU0NfVFlQRV9CT09MRUFOICAgICAgICAgICAgKGpzY19ib29sZWFuX2dldF90eXBl
KCkpCisjZGVmaW5lIEpTQ19CT09MRUFOKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX0JPT0xFQU4sIEpTQ0Jvb2xlYW4pKQorI2RlZmlu
ZSBKU0NfSVNfQk9PTEVBTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBKU0NfVFlQRV9CT09MRUFOKSkKKyNkZWZpbmUgSlNDX0JPT0xFQU5fQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVB
TiwgSlNDQm9vbGVhbkNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX0JPT0xFQU5fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVBTikpCisK
K3R5cGVkZWYgc3RydWN0IF9KU0NCb29sZWFuICAgICAgICBKU0NCb29sZWFuOwordHlwZWRlZiBz
dHJ1Y3QgX0pTQ0Jvb2xlYW5DbGFzcyAgIEpTQ0Jvb2xlYW5DbGFzczsKKworc3RydWN0IF9KU0NC
b29sZWFuIHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ0Jvb2xlYW5D
bGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0pTX0VYUE9SVCBH
VHlwZQoranNjX2Jvb2xlYW5fZ2V0X3R5cGUgKHZvaWQpOworCitKU19FWFBPUlQgSlNDQm9vbGVh
bioKK2pzY19ib29sZWFuX25ldyAgICAgIChKU0NDb250ZXh0KiwgZ2Jvb2xlYW4gdmFsdWUpOwor
CitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0Jvb2xlYW5Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Qm9vbGVhblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjE3MzYwMjc5ZmNjNzZmOTZkYmNhZjE1MDUy
MGNkYjYwZjBlMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBn
YW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworSlNf
RVhQT1JUIEpTQ0Jvb2xlYW4qCitqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCos
IEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0NvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRl
eHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFmYzQ1YTA0YzBjMTg1NGE0ZTZkNDg3NWIwZGQ0MDg5OTE4Mjc1
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkpT
Q0Jvb2xlYW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNs
dWRlICJKU0NOdW1iZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDU3RyaW5nUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorCisvKioKKyAqIFNFQ1RJT046IEpTQ0NvbnRleHQKKyAq
IEBTaG9ydF9kZXNjcmlwdGlvbjogSmF2YVNjcmlwdENvcmUgZXhlY3V0aW9uIGNvbnRleHQKKyAq
IEBUaXRsZTogSlNDQ29udGV4dAorICoKKyAqIEEgI0pTQ0NvbnRleHQgaXMgdGhlIGNlbnRyYWwg
Y2xhc3Mgb2YgdGhlIEphdmFTY3JpcHRDb3JlIEFQSS4gSXQgaXMKKyAqIHJlc3BvbnNpYmxlIGZv
ciBldmFsdWF0aW9uIG9mIHNjcmlwdHMgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LAorICogc2V0
dGluZyBhbmQgZ2V0dGluZyB2YWx1ZXMgZnJvbSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHRv
IG1ha2UKKyAqIG5hdGl2ZSBvYmplY3RzLCBtZXRob2RzIGFuZCBmdW5jdGlvbnMgYWNjZXNzaWJs
ZSB0byBKYXZhU2NyaXB0LgorICoKKyAqLworCitzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIHsK
KyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU09iamVjdFJlZiBvYmplY3Q7
CisKKyAgICBHTGlzdCogdmFsdWVzOworfTsKKworR19ERUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUo
SlNDQ29udGV4dCwganNjX2NvbnRleHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkCitq
c2NDb250ZXh0RGlzcG9zZShHT2JqZWN0KiBvYmopCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUq
IHByaXY7CisKKyAgICBwcml2ID0gKEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRleHRfZ2V0
X2luc3RhbmNlX3ByaXZhdGUoSlNDX0NPTlRFWFQob2JqKSk7CisKKyAgICBnX2xpc3RfZnJlZV9m
dWxsKHByaXYtPnZhbHVlcywgZ19vYmplY3RfdW5yZWYpOworCisgICAgaWYgKCFwcml2LT5jb250
ZXh0KSB7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UocHJpdi0+Y29udGV4dCk7Cisg
ICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgICAgICBwcml2LT5vYmplY3QgPSBu
dWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19jb250ZXh0X3BhcmVudF9j
bGFzcyktPmRpc3Bvc2Uob2JqKTsKK30KKworc3RhdGljIHZvaWQKK2pzY19jb250ZXh0X2NsYXNz
X2luaXQoSlNDQ29udGV4dENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNs
YXNzOworCisgICAgb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmRpc3Bvc2UgPSBqc2NDb250ZXh0RGlzcG9zZTsKK30KKworc3RhdGljIHZvaWQKK2pzY19j
b250ZXh0X2luaXQoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0
ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9n
ZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKyAgICBwcml2LT5jb250ZXh0ID0gSlNHbG9i
YWxDb250ZXh0Q3JlYXRlKG51bGxwdHIpOworICAgIHByaXYtPm9iamVjdCA9IEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChwcml2LT5jb250ZXh0KTsKKyAgICBwcml2LT52YWx1ZXMgPSBudWxscHRy
OworfQorCitKU0dsb2JhbENvbnRleHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKworICAgIHBy
aXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0
ZShjb250ZXh0KTsKKyAgICByZXR1cm4gcHJpdi0+Y29udGV4dDsKK30KKworLyoqCisgKiBqc2Nf
Y29udGV4dF9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlNDQ29udGV4dCBlbnZpcm9ubWVu
dCB0byBleGVjdXRlIEphdmFTY3JpcHQKKyAqIGNvZGUuCisgKgorICogUmV0dXJuczogVGhlIG5l
d2x5IGNyZWF0ZWQgI0pTQ0NvbnRleHQgb2JqZWN0CisgKi8KK0pTQ0NvbnRleHQqCitqc2NfY29u
dGV4dF9uZXcodm9pZCkKK3sKKyAgICByZXR1cm4gKEpTQ0NvbnRleHQqKSBnX29iamVjdF9uZXco
SlNDX1RZUEVfQ09OVEVYVCwgbnVsbHB0cik7Cit9CisKK3N0YXRpYyBKU0NWYWx1ZSoKK2pzVmFs
dWVUb0pTQ1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sK
KyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFBy
aXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKworICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBKU0NfVkFMVUUoanNjU3RyaW5nTmV3RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSkp
OworCisgICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4ocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBKU0NfVkFMVUUoanNjQm9vbGVhbk5ld0Zyb21KU1ZhbHVlKGNvbnRleHQs
IGpzdmFsdWUpKTsKKyAgICAKKyAgICBpZiAoSlNWYWx1ZUlzTnVtYmVyKHByaXYtPmNvbnRleHQs
IGpzdmFsdWUpKQorICAgICAgICByZXR1cm4gSlNDX1ZBTFVFKGpzY051bWJlck5ld0Zyb21KU1Zh
bHVlKGNvbnRleHQsIGpzdmFsdWUpKTsKKworICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQocHJp
di0+Y29udGV4dCwganN2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChwcml2LT5jb250ZXh0LCBqc3Zh
bHVlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X2dldF92YWx1ZToKKyAqIEBjb250ZXh0OiB0
aGUgI0pTQ0NvbnRleHQgdGhhdCB0aGUgdmFsdWUgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbQorICog
QG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgb2JqZWN0IHByb3BlcnR5IHRoYXQgd2lsbCBi
ZSByZXRyaWV2ZWQKKyAqCisgKiBSZXRyaWV2ZXMgcHJvcGVydGllcyBmcm9tIHRoZSBKYXZhU2Ny
aXB0IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgI0pTQ0NvbnRleHQuIFZh
bHVlcyBhcmUgcmVwcmVzZW50ZWQgYnkgc3VidHlwZXMgb2YgSlNDVmFsdWUuCisgKgorICogUmV0
dXJuczogQSBKU0NWYWx1ZSBzdWJ0eXBlIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHJl
cXVlc3RlZCBwcm9wZXJ0eQorICovCitKU0NWYWx1ZSoKK2pzY19jb250ZXh0X2dldF92YWx1ZShK
U0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIEpTQ0NvbnRleHRQ
cml2YXRlKiBwcml2OworICAgIEpTU3RyaW5nUmVmIHN0ck5hbWU7CisgICAgSlNWYWx1ZVJlZiBq
c3ZhbHVlOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKworICAgIHByaXYg
PSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShj
b250ZXh0KTsKKworICAgIHN0ck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhu
YW1lKTsKKyAgICBqc3ZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShwcml2LT5jb250ZXh0LCBw
cml2LT5vYmplY3QsIHN0ck5hbWUsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZShz
dHJOYW1lKTsKKworICAgIHJldHVybiBqc1ZhbHVlVG9KU0NWYWx1ZShjb250ZXh0LCBqc3ZhbHVl
KTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9zZXRfdmFsdWU6CisgKiBAY29udGV4dDogdGhl
ICNKU0NDb250ZXh0IHdoZXJlIHRoZSB2YWx1ZSB3aWxsIGJlIHNldAorICogQG5hbWU6IHRoZSBu
YW1lIG9mIHRoZSBnbG9iYWwgb2JqZWN0IHByb3BlcnR5IHRoYXQgd2lsbCBiZSBzZXQKKyAqIEB2
YWx1ZTogdGhlIHZhbHVlCisgKgorICogU2V0cyBwcm9wZXJ0aWVzIGluIHRoZSBKYXZhU2NyaXB0
IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgI0pTQ0NvbnRleHQuIFZhbHVl
cyBhcmUgcmVwcmVzZW50ZWQgYnkgc3VidHlwZXMgb2YgSlNDVmFsdWUuCisgKi8KK3ZvaWQKK2pz
Y19jb250ZXh0X3NldF92YWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogbmFt
ZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2OworICAg
IEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBq
c2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKworICAgIGlmIChnX29i
amVjdF9pc19mbG9hdGluZyh2YWx1ZSkpIHsKKyAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsodmFs
dWUpOworICAgICAgICBwcml2LT52YWx1ZXMgPSBnX2xpc3RfYXBwZW5kKHByaXYtPnZhbHVlcywg
dmFsdWUpOworICAgIH0KKworICAgIGpzdmFsdWUgPSBqc2NWYWx1ZUdldEpTVmFsdWUodmFsdWUp
OworICAgIEpTU3RyaW5nUmVmIHN0ck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhuYW1lKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KHByaXYtPmNvbnRleHQsIHByaXYtPm9i
amVjdCwgc3RyTmFtZSwganN2YWx1ZSwKKyAgICAgICAga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSwgbnVsbHB0cik7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0ck5hbWUpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc4MzM1
OWViZDA4N2YyNjJiYWEwNTQwOWUwMDc5ZDhkYmMwMDM1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBB
bWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ09OVEVY
VCAgICAgICAgICAgIChqc2NfY29udGV4dF9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfQ09OVEVY
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0Nf
VFlQRV9DT05URVhULCBKU0NDb250ZXh0KSkKKyNkZWZpbmUgSlNDX0lTX0NPTlRFWFQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfQ09OVEVY
VCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0NMQVNTKGNsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQsIEpTQ0NvbnRleHRDbGFzcykpCisj
ZGVmaW5lIEpTQ19JU19DT05URVhUX0NMQVNTKGNsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ29u
dGV4dCAgICAgICAgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0Q2xhc3Mg
ICBKU0NDb250ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dFByaXZhdGUgSlND
Q29udGV4dFByaXZhdGU7CisKK3N0cnVjdCBfSlNDQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJl
bnQ7CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfSlNDQ29u
dGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBP
UlQgR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0ND
b250ZXh0ICoKK2pzY19jb250ZXh0X25ldyAgICAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NW
YWx1ZSAqCitqc2NfY29udGV4dF9nZXRfdmFsdWUgKEpTQ0NvbnRleHQqLCBjb25zdCBnY2hhciAq
bmFtZSk7CisKK0pTX0VYUE9SVCB2b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUgKEpTQ0NvbnRl
eHQqLCBjb25zdCBnY2hhciAqbmFtZSwgSlNDVmFsdWUqKTsKKworR19FTkRfREVDTFMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWU2OGJkOWU1MjM2NjhmOTAzMDEzOTUyMGYxOGZiMzE1MjJlNTBhNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2
w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisKK0pTX0VYUE9SVCBKU0dsb2JhbENvbnRl
eHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODVmNjNlZDhm
Mzk0ODM1NGZkZDU3NTc5Y2MyODFkM2FkZjYwODBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAKQEAgLTAsMCArMSw5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFy
YWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlND
TnVtYmVyLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpT
Q1ZhbHVlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5o
PgorCisvKioKKyAqIEBUaXRsZTogSlNDTnVtYmVyCisgKiBAU2hvcnRfZGVzY3JpcHRpb246ICNK
U0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBudW1lcmljIHZhbHVlcworICoKKyAqICNKU0NO
dW1iZXIgaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IG51bWVyaWMgdmFsdWVzIGluc2lk
ZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZUEUoSlNDTnVtYmVy
LCBqc2NfbnVtYmVyLCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGljIHZvaWQKK2pzY19udW1iZXJf
Y2xhc3NfaW5pdChKU0NOdW1iZXJDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfbnVt
YmVyX2luaXQoSlNDTnVtYmVyKikKK3sKK30KKworSlNDTnVtYmVyICoKK2pzY051bWJlck5ld0Zy
b21KU1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAg
ICBKU0NOdW1iZXIqIHZhbHVlOworCisgICAgdmFsdWUgPSAoSlNDTnVtYmVyKikgZ19vYmplY3Rf
bmV3KEpTQ19UWVBFX05VTUJFUiwgImNvbnRleHQiLCBjb250ZXh0LCBOVUxMKTsKKyAgICBqc2NW
YWx1ZVNldEpTVmFsdWUoSlNDX1ZBTFVFKHZhbHVlKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK0pTQ051bWJlcioKK2pzY19udW1iZXJfbmV3KEpTQ0NvbnRleHQqIGNvbnRl
eHQsIGdkb3VibGUgdmFsdWUpCit7CisgICAgSlNDb250ZXh0UmVmIGpzY29udGV4dDsKKyAgICBK
U1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250
ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihqc2NvbnRleHQs
IHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBq
c3ZhbHVlKTsKK30KKworSlNDTnVtYmVyKgoranNjX251bWJlcl9uZXdfaW50MzIoSlNDQ29udGV4
dCogY29udGV4dCwgZ2ludCB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYganNjb250ZXh0Owor
ICAgIEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKGpzY29u
dGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJuIGpzY051bWJlck5ld0Zyb21KU1ZhbHVlKGNvbnRl
eHQsIGpzdmFsdWUpOworfQorCitKU0NOdW1iZXIqCitqc2NfbnVtYmVyX25ld191aW50MzIoSlND
Q29udGV4dCogY29udGV4dCwgZ3VpbnQgdmFsdWUpCit7CisgICAgSlNDb250ZXh0UmVmIGpzY29u
dGV4dDsKKyAgICBKU1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJl
cihqc2NvbnRleHQsIHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1iZXJOZXdGcm9tSlNWYWx1
ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NOdW1iZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NOdW1iZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzYxY2YxNTY4MmU2NzIwNWY1ZmExY2ViMGM1OTViYjJh
ZTAxNjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ051bWJlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9OVU1CRVIgICAg
ICAgICAgICAoanNjX251bWJlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfTlVNQkVSKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX05V
TUJFUiwgSlNDTnVtYmVyKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJFUihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9OVU1CRVIpKQorI2RlZmlu
ZSBKU0NfTlVNQkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
TlVNQkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpT
Q19UWVBFX05VTUJFUikpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NOdW1iZXIgICAgICAgIEpTQ051
bWJlcjsKK3R5cGVkZWYgc3RydWN0IF9KU0NOdW1iZXJDbGFzcyAgIEpTQ051bWJlckNsYXNzOwor
CitzdHJ1Y3QgX0pTQ051bWJlciB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0
IF9KU0NOdW1iZXJDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K0pTX0VYUE9SVCBHVHlwZQoranNjX251bWJlcl9nZXRfdHlwZSAgICh2b2lkKTsKKworSlNfRVhQ
T1JUIEpTQ051bWJlciAqCitqc2NfbnVtYmVyX25ldyAgICAgICAgKEpTQ0NvbnRleHQqLCBnZG91
YmxlIHZhbHVlKTsKKworSlNfRVhQT1JUIEpTQ051bWJlciAqCitqc2NfbnVtYmVyX25ld19pbnQz
MiAgKEpTQ0NvbnRleHQqLCBnaW50IHZhbHVlKTsKKworSlNfRVhQT1JUIEpTQ051bWJlciAqCitq
c2NfbnVtYmVyX25ld191aW50MzIgKEpTQ0NvbnRleHQqLCBndWludCB2YWx1ZSk7CisKK0dfRU5E
X0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVt
YmVyUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MjlmY2U1MDZjNzczNDJmZjA5NThiNWIwMDE0NTBmMTdmYThj
MGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q051bWJlclByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDTnVtYmVyLmgiCisKK0pTX0VYUE9SVCBKU0NO
dW1iZXIqCitqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE1Yjk1ZWFhZGY2ZmVkNGEzNGMzMTliMzEwNzFhOWMzOWVkMjQyMmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcApAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgi
CisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisK
Ky8qKgorICogQFRpdGxlOiBKU0NTdHJpbmcKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1Zh
bHVlIHN1YnR5cGUgdG8gcmVwcmVzZW50IHN0cmluZ3MKKyAqCisgKiAjSlNDU3RyaW5nIGlzIHRo
ZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBzdHJpbmcgdmFsdWVzIGluc2lkZQorICogSmF2YVNj
cmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZUEUoSlNDU3RyaW5nLCBqc2Nfc3RyaW5n
LCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGljIHZvaWQKK2pzY19zdHJpbmdfY2xhc3NfaW5pdChK
U0NTdHJpbmdDbGFzcyAqKQoreworfQorCitzdGF0aWMgdm9pZAoranNjX3N0cmluZ19pbml0KEpT
Q1N0cmluZyAqKQoreworfQorCitKU0NTdHJpbmcgKgoranNjU3RyaW5nTmV3RnJvbUpTVmFsdWUo
SlNDQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ1N0cmlu
Zyogc3RyaW5nOworCisgICAgc3RyaW5nID0gKEpTQ1N0cmluZyAqKSBnX29iamVjdF9uZXcoSlND
X1RZUEVfU1RSSU5HLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpOworICAgIGpzY1ZhbHVlU2V0
SlNWYWx1ZShKU0NfVkFMVUUoc3RyaW5nKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gc3RyaW5n
OworfQorCisvKioKKyAqIGpzY19zdHJpbmdfbmV3OgorICogQGNvbnRleHQ6IFRoZSAjSlNDQ29u
dGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEBzdHI6IFRoZSBzdHJpbmcgdGhh
dCB0aGUgI0pTQ1N0cmluZyB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pT
Q1N0cmluZyB3aXRoIEBzdHIgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5
IGNyZWF0ZWQgI0pTQ1N0cmluZyBvYmplY3QKKyAqLworSlNDU3RyaW5nICoKK2pzY19zdHJpbmdf
bmV3KEpTQ0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGdjaGFyICpzdHIpCit7CisgICAgSlNDb250
ZXh0UmVmIGpzY29udGV4dDsKKyAgICBKU1N0cmluZ1JlZiB2YWx1ZTsKKyAgICBKU1ZhbHVlUmVm
IGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRl
eHQpOworICAgIHZhbHVlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyKTsKKyAg
ICBqc3ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNjb250ZXh0LCB2YWx1ZSk7CisgICAgSlNT
dHJpbmdSZWxlYXNlKHZhbHVlKTsKKworICAgIHJldHVybiBqc2NTdHJpbmdOZXdGcm9tSlNWYWx1
ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBkZmRlZDVhMTVmM2Y4ZmVjMjdmZWRjM2E4OTk4MzU1
NWVhMzgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ1N0cmluZy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9TVFJJTkcgICAg
ICAgICAgICAoanNjX3N0cmluZ19nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfU1RSSU5HKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1NU
UklORywgSlNDU3RyaW5nKSkKKyNkZWZpbmUgSlNDX0lTX1NUUklORyhvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9TVFJJTkcpKQorI2RlZmlu
ZSBKU0NfU1RSSU5HX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX1NUUklORywgSlNDU3RyaW5nQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
U1RSSU5HX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpT
Q19UWVBFX1NUUklORykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NTdHJpbmcgICAgICAgIEpTQ1N0
cmluZzsKK3R5cGVkZWYgc3RydWN0IF9KU0NTdHJpbmdDbGFzcyAgIEpTQ1N0cmluZ0NsYXNzOwor
CitzdHJ1Y3QgX0pTQ1N0cmluZyB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0
IF9KU0NTdHJpbmdDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K0pTX0VYUE9SVCBHVHlwZQoranNjX3N0cmluZ19nZXRfdHlwZSAodm9pZCk7CisKK0pTX0VYUE9S
VCBKU0NTdHJpbmcqCitqc2Nfc3RyaW5nX25ldyAgICAgIChKU0NDb250ZXh0KiwgY29uc3QgZ2No
YXIgKnN0cik7CisKK0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDU3RyaW5nUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTJjZTMzMDA0ZDRhYjc4ZDc0
Y2FhNmI5YmI2MDI0ZGYyZDU1ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8
dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgi
CisKK0pTX0VYUE9SVCBKU0NTdHJpbmcqCitqc2NTdHJpbmdOZXdGcm9tSlNWYWx1ZShKU0NDb250
ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZjA1Y2ExYjExMTMzYjJiMjI4N2E0YmQ1M2Y2NjY1N2Q2Yjg4
Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q1ZhbHVlLmNwcApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBF
c3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0Jv
b2xlYW4uaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ051
bWJlci5oIgorI2luY2x1ZGUgIkpTQ1N0cmluZy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+
CisKKy8qKgorICogU0VDVElPTjogSlNDVmFsdWUKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQmFz
ZSBjbGFzcyByZXByZXNlbnRpbmcgSmF2YVNjcmlwdENvcmUgdmFsdWVzCisgKiBAVGl0bGU6IEpT
Q1ZhbHVlCisgKgorICogI0pTQ1ZhbHVlIGlzIHRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gcmVwcmVz
ZW50IHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLiBBY3R1YWwgdmFsdWVzIGFyZSBz
dWJ0eXBlcyBvZiB0aGlzIGNsYXNzLiBUaGUKKyAqIGN1cnJlbnQgc3ViY2xhc3NlcyBhcmU6ICNK
U0NTdHJpbmcsICNKU0NOdW1iZXIgYW5kICNKU0NCb29sZWFuLgorICoKKyAqLworCitzdHJ1Y3Qg
X0pTQ1ZhbHVlUHJpdmF0ZSB7CisgICAgSlNDQ29udGV4dCoganNjQ29udGV4dDsKKyAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlOworfTsKKworR19E
RUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX0lOSVRJ
QUxMWV9VTk9XTkVEKQorCitlbnVtIHsKKyAgICBrUFJPUF8wLAorCisgICAga1BST1BfQ09OVEVY
VCwKK307CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZUdldFByb3BlcnR5KEdPYmplY3QqIG9iaiwg
Z3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1fc3BlYykKK3sK
KyAgICBKU0NWYWx1ZSogdmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZh
dGUodmFsKTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2Uga1BST1BfQ09OVEVY
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBnX29iamVjdF9yZWYocHJpdi0+
anNjQ29udGV4dCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBwcm9wX2lkLCBwYXJhbV9zcGVjKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZVNldFByb3BlcnR5KEdPYmplY3QqIG9i
aiwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1f
c3BlYykKK3sKKyAgICBKU0NWYWx1ZSogdmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFu
Y2VfcHJpdmF0ZSh2YWwpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBrUFJP
UF9DT05URVhUOiB7CisgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChn
X3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgcHJpdi0+anNjQ29udGV4dCA9IGNv
bnRleHQ7CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBjb250ZXh0ID8ganNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSA6IG51bGxwdHI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBw
cm9wX2lkLCBwYXJhbV9zcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZURp
c3Bvc2UoR09iamVjdCogb2JqKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAg
IHByaXYgPSAoSlNDVmFsdWVQcml2YXRlKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRl
KEpTQ19WQUxVRShvYmopKTsKKyAgICBpZiAocHJpdi0+dmFsdWUgIT0gbnVsbHB0cikgeworICAg
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKTsKKyAgICAg
ICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfdmFsdWVfcGFyZW50X2NsYXNzKS0+
ZGlzcG9zZShvYmopOworfQorCitzdGF0aWMgdm9pZAoranNjX3ZhbHVlX2NsYXNzX2luaXQoSlND
VmFsdWVDbGFzcyAqa2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzczsKKworICAg
IG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgb2JqQ2xhc3MtPmdldF9w
cm9wZXJ0eSA9IGpzY1ZhbHVlR2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0
eSA9IGpzY1ZhbHVlU2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NWYWx1
ZURpc3Bvc2U7CisKKyAgICAvKioKKyAgICAgKiBKU0NWYWx1ZTpjb250ZXh0OgorICAgICAqCisg
ICAgICogVGhlICNKU0NDb250ZXh0IG9mIHRoZSB2YWx1ZS4KKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBrUFJPUF9DT05URVhU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJjb250ZXh0IiwKKyAgICAgICAgICAgICJj
b250ZXh0IiwKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IiwKKyAg
ICAgICAgICAgIEpTQ19UWVBFX0NPTlRFWFQsCisgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChH
X1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK3N0YXRp
YyB2b2lkCitqc2NfdmFsdWVfaW5pdChKU0NWYWx1ZSopCit7Cit9CisKK0pTVmFsdWVSZWYKK2pz
Y1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0
ZSh2YWx1ZSk7CisKKyAgICByZXR1cm4gcHJpdi0+dmFsdWU7Cit9CisKK3ZvaWQKK2pzY1ZhbHVl
U2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXY7CisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2Nf
dmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworCisgICAgZ19yZXR1cm5faWZfZmFp
bChwcml2LT5jb250ZXh0ICE9IG51bGxwdHIpOworCisgICAgaWYgKHByaXYtPnZhbHVlICE9IG51
bGxwdHIpIHsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChwcml2LT5jb250ZXh0LCBwcml2LT52
YWx1ZSk7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBwcml2
LT52YWx1ZSA9IGpzdmFsdWU7CisgICAgSlNWYWx1ZVByb3RlY3QocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpOworfQorCitKU0NWYWx1ZSoKK2pzY1ZhbHVlTmV3RnJvbUpTVmFsdWUoSlNDQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ1ZhbHVlKiB2YWx1
ZTsKKworICAgIHZhbHVlID0gKEpTQ1ZhbHVlKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZBTFVF
LCAiY29udGV4dCIsIGNvbnRleHQsIG51bGxwdHIpOworICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZSh2
YWx1ZSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKy8qKgorICoganNjX3Zh
bHVlX2dldF9zdHJpbmc6CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWlu
aW5nIHRoZSB2YWx1ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgc3RyaW5nIGZyb20gI0pTQ1ZhbHVl
CisgKgorICogUmV0dXJuczogZ2NoYXIqCisgKi8KK2NvbnN0IGdjaGFyKgoranNjX3ZhbHVlX2dl
dF9zdHJpbmcoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsK
KyAgICBKU1N0cmluZ1JlZiBzdHJWYWx1ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGdjaGFy
KiBidWZmOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1NUUklORyh2YWx1ZSks
IG51bGxwdHIpOworCisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2NfdmFsdWVfZ2V0
X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTVmFs
dWVJc1N0cmluZyhwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSksIG51bGxwdHIpOworCisgICAg
c3RyVmFsdWUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVl
LCBudWxscHRyKTsKKyAgICBsZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoc3RyVmFsdWUpOworICAgIGJ1ZmYgPSAoZ2NoYXIqKSBnX21hbGxvYzAobGVuZ3RoKTsKKyAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0clZhbHVlLCBidWZmLCBsZW5ndGgpOworICAgIEpT
U3RyaW5nUmVsZWFzZShzdHJWYWx1ZSk7CisgICAgCisgICAgcmV0dXJuIGdfc3RyZHVwKGJ1ZmYp
OworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfYm9vbGVhbjoKKyAqIEB2YWx1ZTogdGhlICNK
U0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRo
ZSBib29sZWFuIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0dXJuczogZ2Jvb2xlYW4K
KyAqLworZ2Jvb2xlYW4KK2pzY192YWx1ZV9nZXRfYm9vbGVhbihKU0NWYWx1ZSAqdmFsdWUpCit7
CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX0JPT0xF
QU4odmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2YXRlICopIGpzY192YWx1ZV9n
ZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVh
bihwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jv
b2xlYW4ocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpOworfQorCisvKioKKyAqIGpzY192YWx1
ZV9nZXRfZG91YmxlOgorICogQHZhbHVlOiB0aGUgI0pTQ1ZhbHVlIHN1YnR5cGUgY29udGFpbmlu
ZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIG51bWVyaWMgKGRvdWJsZSkgdmFsdWUg
ZnJvbSAjSlNDVmFsdWUKKyAqCisgKiBSZXR1cm5zOiBnYm9vbGVhbgorICovCitnZG91YmxlCitq
c2NfdmFsdWVfZ2V0X2RvdWJsZShKU0NWYWx1ZSAqdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2
YXRlKiBwcml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX05VTUJFUih2YWx1ZSkpOworCisgICAg
cHJpdiA9IChKU0NWYWx1ZVByaXZhdGUgKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRl
KHZhbHVlKTsKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNOdW1iZXIocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+Y29udGV4dCwg
cHJpdi0+dmFsdWUsIG51bGxwdHIpOworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfaW50MzI6
CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1ZQor
ICoKKyAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyAoaW50KSB2YWx1ZSBmcm9tICNKU0NWYWx1ZQor
ICoKKyAqIFJldHVybnM6IGdib29sZWFuCisgKi8KK2dpbnQKK2pzY192YWx1ZV9nZXRfaW50MzIo
SlNDVmFsdWUgKnZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAgIGdf
YXNzZXJ0KEpTQ19JU19OVU1CRVIodmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2
YXRlICopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3Nl
cnQoSlNWYWx1ZUlzTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRy
KTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X3VpbnQzMjoKKyAqIEB2YWx1ZTogdGhlICNK
U0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRo
ZSBudW1lcmljICh1bnNpZ25lZCBpbnQpIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0
dXJuczogZ2Jvb2xlYW4KKyAqLworZ3VpbnQKK2pzY192YWx1ZV9nZXRfdWludDMyKEpTQ1ZhbHVl
ICp2YWx1ZSkKK3sKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXY7CisKKyAgICBnX2Fzc2VydChK
U0NfSVNfTlVNQkVSKHZhbHVlKSk7CisKKyAgICBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBq
c2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFs
dWVJc051bWJlcihwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIChn
dWludCkgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRy
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTE1NzgxZDdkYjZhZDgzNzVjYTAzMWYyNTNhMjVhNjcwOWU0ODJhMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVkFMVUUgICAgICAgICAgICAoanNjX3Zh
bHVlX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19WQUxVRShvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWUpKQor
I2RlZmluZSBKU0NfSVNfVkFMVUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0NfVkFMVUVfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUs
IEpTQ1ZhbHVlQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfVkFMVUVfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUpKQorCit0eXBlZGVm
IHN0cnVjdCBfSlNDVmFsdWUgICAgICAgIEpTQ1ZhbHVlOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1Zh
bHVlQ2xhc3MgICBKU0NWYWx1ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlUHJpdmF0
ZSBKU0NWYWx1ZVByaXZhdGU7CisKK3N0cnVjdCBfSlNDVmFsdWUgeworICAgIEdPYmplY3QgcGFy
ZW50OworCisgICAgSlNDVmFsdWVQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NWYWx1
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBPUlQg
R1R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZSAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBjb25zdCBj
aGFyICoKK2pzY192YWx1ZV9nZXRfc3RyaW5nICAoSlNDVmFsdWUgKik7CisKK0pTX0VYUE9SVCBn
Ym9vbGVhbgoranNjX3ZhbHVlX2dldF9ib29sZWFuIChKU0NWYWx1ZSAqKTsKKworSlNfRVhQT1JU
IGdkb3VibGUKK2pzY192YWx1ZV9nZXRfZG91YmxlICAoSlNDVmFsdWUgKik7CisKK0pTX0VYUE9S
VCBnaW50Citqc2NfdmFsdWVfZ2V0X2ludDMyICAgKEpTQ1ZhbHVlICopOworCitKU19FWFBPUlQg
Z3VpbnQKK2pzY192YWx1ZV9nZXRfdWludDMyICAoSlNDVmFsdWUgKik7CisKKy8qIEpTX0VYUE9S
VCBKU0NDb250ZXh0ICogKi8KKy8qIGpzY192YWx1ZV9nZXRfY29udGV4dCAoSlNDVmFsdWUgKnZh
bHVlKTsgKi8KKworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODAyZWVjNTY1OWZmZGU5ZmZkZmVl
NDgzYzRjYTRlYjZmZDQ5OGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZh
dW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSlNDVmFsdWUuaCIKKworSlNfRVhQT1JUIEpTVmFsdWVSZWYKK2pzY1ZhbHVlR2V0
SlNWYWx1ZShKU0NWYWx1ZSopOworCitKU19FWFBPUlQgdm9pZAoranNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ1ZhbHVlKiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvanNjLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzAwNGUyYzNjMWFiYzQwZDY2ZjcyMzc1NjkyZTBjMzg0OGZmM2I5NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAt
MCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDQm9vbGVhbi5oPgorI2luY2x1ZGUgPGpzYy9KU0NOdW1iZXIuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM5OTY1MGQ0OTY4
NDBhMDZlYWEzMzJjNGRkOGIyMjRiM2VlZmM1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNUZXN0LmNwcApAQCAtMCwwICsx
LDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PD
s3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NCb29sZWFu
LmgiCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiLi4vLi4v
Z2xpYi9KU0NOdW1iZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9nbGliL0pTQ1N0cmluZy5oIgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorCit2b2lkCitDb250ZXh0Rml4dHVyZVNldFVwKENvbnRleHRGaXh0
dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGZpeHR1cmUtPmNv
bnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4
dHVyZS0+Y29udGV4dCwgImh1dnMiLCAgSlNDX1ZBTFVFKGpzY19zdHJpbmdfbmV3KGZpeHR1cmUt
PmNvbnRleHQsICJuaXZzIikpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+
Y29udGV4dCwgInRydWUiLCAgSlNDX1ZBTFVFKGpzY19ib29sZWFuX25ldyhmaXh0dXJlLT5jb250
ZXh0LCB0cnVlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0
LCAiZmFsc2UiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZh
bHNlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVt
YmVyLXoiLCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgMC4wKSkp
OworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLXAi
LCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgMS4xKSkpOworICAg
IGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLW4iLCBKU0Nf
VkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgLTEuMSkpKTsKKyAgICAvLyBq
c2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImludDAiLCBKU0NfVkFMVUUo
anNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworICAgIC8vIGpzY19j
b250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAiaW50MSIsIEpTQ19WQUxVRShqc2Nf
Ym9vbGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7CisgICAgLy8ganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJpbnQtMSIsIEpTQ19WQUxVRShqc2NfYm9v
bGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7CisgICAgLy8ganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ1aW50ZmYiLCBKU0NfVkFMVUUoanNjX2Jvb2xl
YW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworfQorCit2b2lkCitDb250ZXh0Rml4
dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIGdfY2xlYXJfb2JqZWN0KCZmaXh0dXJlLT5jb250ZXh0KTsKK30KKwordm9p
ZAorSlNDU3RyaW5nVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWUgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUo
Zml4dHVyZS0+Y29udGV4dCwgImh1dnMiKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19TVFJJ
TkcodmFsdWUpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoanNjX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpLCA9PSwgIm5pdnMiKTsKK30KKworCit2b2lkCitKU0NCb29sZWFuVGVzdChDb250ZXh0Rml4
dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSog
dmFsdWVUID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ0cnVlIik7
CisgICAgSlNDVmFsdWUqIHZhbHVlRiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5j
b250ZXh0LCAiZmFsc2UiKTsKKyAgICBKU0NCb29sZWFuKiBib29sVCA9IEpTQ19CT09MRUFOKHZh
bHVlVCk7CisgICAgSlNDQm9vbGVhbiogYm9vbEYgPSBKU0NfQk9PTEVBTih2YWx1ZUYpOworCisg
ICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUodmFsdWVUKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShKU0NfSVNfVkFMVUUodmFsdWVGKSk7CisKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19CT09M
RUFOKGJvb2xUKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfQk9PTEVBTihib29sRikpOwor
ICAgIAorICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlVCkpOwor
ICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZUYpKTsKK30KKwor
dm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWVaID0ganNjX2NvbnRleHRfZ2V0X3Zh
bHVlKGZpeHR1cmUtPmNvbnRleHQsICJudW1iZXIteiIpOworICAgIEpTQ1ZhbHVlKiB2YWx1ZVAg
PSBqc2NfY29udGV4dF9nZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgIm51bWJlci1wIik7Cisg
ICAgSlNDVmFsdWUqIHZhbHVlTiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5jb250
ZXh0LCAibnVtYmVyLW4iKTsKKworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVl
WikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlUCkpOworICAgIGdfYXNz
ZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlTikpOworCisgICAgZ19hc3NlcnRfdHJ1ZShKU0Nf
SVNfTlVNQkVSKHZhbHVlWikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX05VTUJFUih2YWx1
ZVApKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19OVU1CRVIodmFsdWVOKSk7CisKKyAgICBn
X2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZVopLCA9PSwgMC4wKTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZVApLCA9PSwg
MS4xKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZU4p
LCA9PSwgLTEuMSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX2dldF9pbnQzMih2
YWx1ZVopLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV9nZXRfaW50MzIo
dmFsdWVQKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfZ2V0X2ludDMy
KHZhbHVlTiksID09LCAtMSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9nZXRf
dWludDMyKHZhbHVlWiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9n
ZXRfdWludDMyKHZhbHVlUCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1
ZV9nZXRfdWludDMyKHZhbHVlTiksID09LCA0Mjk0OTY3Mjk1KTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNUZXN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ2YjdlZDQ2MDVmODM5ZTcwZGY4YTQ1MWVkMDg4ZGQ1ODM3MmFkMjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVz
dC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICIuLi8uLi9nbGliL0pTQ0NvbnRleHQuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg
X0NvbnRleHRGaXh0dXJlIHsKKyAgICBKU0NDb250ZXh0ICpjb250ZXh0OworfSBDb250ZXh0Rml4
dHVyZTsKKwordm9pZAorQ29udGV4dEZpeHR1cmVTZXRVcChDb250ZXh0Rml4dHVyZSosIGdjb25z
dHBvaW50ZXIpOworCit2b2lkCitDb250ZXh0Rml4dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJl
KiwgZ2NvbnN0cG9pbnRlcik7CisKK3ZvaWQKK0pTQ1N0cmluZ1Rlc3QoQ29udGV4dEZpeHR1cmUq
LCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorSlNDQm9vbGVhblRlc3QoQ29udGV4dEZpeHR1cmUq
LCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSos
IGdjb25zdHBvaW50ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy9nbGliL21haW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGli
L21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkYWEzMmVkM2M2NzI3N2E0NmY1MTM5YzVjY2ZkYWZhNzIx
MTlkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L2dsaWIvbWFpbi5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiSlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitpbnQKK21h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9zdHJpbmctdGVzdCIsIENv
bnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NTdHJp
bmdUZXN0LCBDb250ZXh0Rml4dHVyZVRlYXJEb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi9qc2Mt
dmFsdWVzL2Jvb2xlYW4tdGVzdCIsIENvbnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250
ZXh0Rml4dHVyZVNldFVwLCBKU0NCb29sZWFuVGVzdCwgQ29udGV4dEZpeHR1cmVUZWFyRG93bik7
CisKKyAgICAKKyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9udW1iZXItdGVzdCIsIENvbnRl
eHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NOdW1iZXJU
ZXN0LCBDb250ZXh0Rml4dHVyZVRlYXJEb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDc5MWFiYTQ5
YTNjMjU1NTI5ZTAwMDU4MzBlZmYwMzE3MzMwZWY1NS4uZDI5YjNhMDU0M2IzNTEwOGU4MDZhYWQw
YTk2NjFmMTlmOWU3OTZmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtNDgsMyArNDgsNDIgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVT
CiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKK2lmIChFTkFCTEVfSlNDX0dMSUIpCisgICAg
c2V0KGpzY2dsaWJfU09VUkNFUworICAgICAgICBBUEkvZ2xpYi9KU0NCb29sZWFuLmNwcAorICAg
ICAgICBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAorICAgICAgICBBUEkvZ2xpYi9KU0NOdW1iZXIu
Y3BwCisgICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5jcHAKKyAgICAgICAgQVBJL2dsaWIvSlND
VmFsdWUuY3BwCisgICAgKQorCisgICAgc2V0KGpzY2dsaWJfSEVBREVSUworICAgICAgICBBUEkv
Z2xpYi9KU0NCb29sZWFuLmgKKyAgICAgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5oCisgICAgICAg
IEFQSS9nbGliL0pTQ051bWJlci5oCisgICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5oCisgICAg
ICAgIEFQSS9nbGliL0pTQ1ZhbHVlLmgKKyAgICAgICAgQVBJL2dsaWIvanNjLmgKKyAgICApCisK
KyAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAgIEFQSS9nbGliCisgICAgKQorICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKKyAgICAgICAgJHtqc2NnbGliX1NPVVJDRVN9CisgICAgKQorICAgIGFkZF9leGVjdXRhYmxl
KGpzYy10ZXN0cworICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS90ZXN0cy9nbGliL21h
aW4uY3BwCisgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL3Rlc3RzL2dsaWIvSlNDVmFs
dWVzVGVzdC5jcHAKKyAgICAgICR7anNjZ2xpYl9TT1VSQ0VTfQorICAgICkKKyAgICB0YXJnZXRf
bGlua19saWJyYXJpZXMoanNjLXRlc3RzCisgICAgICAgIGdvYmplY3QtMi4wCisgICAgICAgIGds
aWItMi4wCisgICAgKQorICAgIGluc3RhbGwoRklMRVMKKyAgICAgICAgJHtqc2NnbGliX0hFQURF
UlN9CisgICAgICAgICAgICBERVNUSU5BVElPTiAiJHtXRUJLSVRHVEtfSEVBREVSX0lOU1RBTExf
RElSfS9qc2MiCispCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCAxN2MyYzgyZWIz
NDMzZmNjZTYwZGQ3YmU1YWM2NzEyNWI4M2YzOGI0Li5mYmQwM2VkN2Y3MjU5MDg5M2U4ZTUzMzc3
YzBkYjQzYzViYWZlZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtODUsNiArODUsNyBAQCBX
RUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfUExVR0lOX1BST0NFU1NfR1RLMiAiV2hldGhlciB0
byBidWlsZCBXZWJLaXRQbHVnaW5QcgogV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1FVQVJU
Wl9UQVJHRVQgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBRdWFydHogd2luZG93
aW5nIHRhcmdldC4iIFBVQkxJQyAke0dUSzNfU1VQUE9SVFNfUVVBUlRafSkKIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9YMTFfVEFSR0VUICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZv
ciB0aGUgWDExIHdpbmRvd2luZyB0YXJnZXQuIiBQVUJMSUMgJHtHVEszX1NVUFBPUlRTX1gxMX0p
CiBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0FZTEFORF9UQVJHRVQgIldoZXRoZXIgdG8g
ZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBXYXlsYW5kIHdpbmRvd2luZyB0YXJnZXQuIiBQVUJMSUMg
JHtHVEszX1NVUFBPUlRTX1dBWUxBTkR9KQorV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX0pT
Q19HTElCICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBKYXZhU2NyaXB0Q29yZSBnbGli
IGJpbmRpbmdzLiIgUFVCTElDIE9GRikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9MSUJOT1RJ
RlkgIldoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IHdlYiBub3RpZmljYXRpb24gaW1wbGVt
ZW50YXRpb24uIiBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfTElCSFlQSEVO
ICJXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCBhdXRvbWF0aWMgaHlwaGVuYXRpb24gaW1w
bGVtZW50YXRpb24uIiBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfTElCU0VD
UkVUICJXaGV0aGVyIHRvIGVuYWJsZSB0aGUgcGVyc2lzdGVudCBjcmVkZW50aWFsIHN0b3JhZ2Ug
dXNpbmcgbGlic2VjcmV0LiIgUFVCTElDIE9OKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhmNjY3ZGI1NDVjZDg0YzQ0MmI5ZmFkODUxYTdiNGM0
OGY1MjgxYTQuLjQ3ODk0MjJiMTg0NTE5MWU0OTE4NGVmOWRiMDc1YjMxZTUwOTNiN2QgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsICA8dGV2
YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9m
IEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGluZyB0byB0
aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisgICAgICAg
IGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2LU9jdG9i
ZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlz
dC5wbTogQWRkZWQganNjLWdsaWIgb3B0aW9uIGFuZCBlbmFibGluZyBvbiBHVEsgcG9ydAorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogQWRkZWQgcnVsZXMgdG8g
aWdub3JlIG5ldyBKU0MgcHVibGljIGhlYWRlciBmaWxlcworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weTogQWRkZWQgdGVzdHMgdG8gdGhlIG5ldyBy
dWxlcworCiAyMDE2LTEwLTE4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNv
bT4KIAogICAgICAgICBXZWJSVEM6IFtHVEtdIFVwZGF0ZSBqaGJ1aWxkIGVudmlyb25tZW50IGZv
ciBPcGVuV2ViUlRDCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXgg
MWJiNTQ4ZGYyMzhjZGViZjQ0YjYxNzFlNTY4ODhkMTQ2OTBjMWZhNy4uZTk0Nzg5MDhlMWMwYWY2
MzJlNjc5MDAzMTNmNDhhODNhNDdkMGQ4NCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0
dXJlTGlzdC5wbQpAQCAtNDY1LDYgKzQ2NSw5IEBAIG15IEBmZWF0dXJlcyA9ICgKIAogICAgIHsg
b3B0aW9uID0+ICJ4c2x0IiwgZGVzYyA9PiAiVG9nZ2xlIFhTTFQgc3VwcG9ydCIsCiAgICAgICBk
ZWZpbmUgPT4gIkVOQUJMRV9YU0xUIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJHhzbHRTdXBw
b3J0IH0sCisKKyAgICB7IG9wdGlvbiA9PiAianNjLWdsaWIiLCBkZXNjID0+ICJUb2dnbGUgSmF2
YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncyBzdXBwb3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5B
QkxFX0pTQ19HTElCIiwgZGVmYXVsdCA9PiAoaXNHdGsoKSksIHZhbHVlID0+IFwkeHNsdFN1cHBv
cnQgfSwKICk7CiAKIHN1YiBnZXRGZWF0dXJlT3B0aW9uTGlzdCgpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZTJmYTRmZDNhOTdhNmM3ZmQyYjg3ODQzYzI1MmZj
MmViMTk3ZDg2Ny4uMzNlNGIzMWJhM2NhOTdkZjMxZGM4OGM1ODc4ZGNjYmU3ZWU5NzZmZSAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzA3LDcgKzMwNywxMSBA
QCBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCiAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdn
dGsnLCAnRE9NJyksCiAKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1VJ
UHJvY2VzcycsICdBUEknLCAnZ3RrJywgJ3dlYmtpdDIuaCcpLAotICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEkn
LCAnZ3RrJywgJ3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgnKV0KKyAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywg
J2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyksCisKKyAgICAjIEdPYmplY3QgYmluZGlu
Z3MgZm9yIEphdmFTY3JpcHRDb3JlLgorICAgIHJlLmNvbXBpbGUocmUuZXNjYXBlKG9zLnBhdGgu
am9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQSScsICdnbGliJykgKyBvcy5wYXRo
LnNlcCkgKyByJ0pTQyg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwKKyAgICBvcy5wYXRoLmpvaW4o
J1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicsICdqc2MuaCcpXQogCiAj
IEZpbGVzIHRvIHNraXAgdGhhdCBhcmUgbW9yZSBjb21tb24gb3Igb2J2aW91cy4KICMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQppbmRleCA5
NTA4ZTlkM2I5NGU5MjM0YjM0NDhkOTFkYmQ1ZDYxOWRkMTExODkxLi5hOTE0YjdjNWQzNjlmOTE1
NWE1ZTk1ZDZhYmJhY2Q0NWQ3OGRmY2Y0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CkBAIC0yODYsNiArMjg2LDcgQEAgY2xhc3MgQ2hl
Y2tlckRpc3BhdGNoZXJTa2lwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgIG9z
LnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsn
LCAnd2Via2l0Mi5oJyksCiAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktp
dDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnV2ViS2l0V2ViVmlldy5oJyksCiAgICAg
ICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQ
SScsICdndGsnLCAnV2ViS2l0TG9hZGVyLmgnKSwKKyAgICAgICAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInLCAnSlNDQm9vbGVhbi5oJyks
CiAgICAgICAgICAgICBdCiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHNfdG9fc2tpcDoKQEAg
LTMwMSw2ICszMDIsNyBAQCBjbGFzcyBDaGVja2VyRGlzcGF0Y2hlclNraXBUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0Mics
ICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICdXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oJyksCiAg
ICAgICAgICAgIG9zLnBhdGguam9pbignVG9vbHMnLCAnVGVzdFdlYktpdEFQSScsICdUZXN0cycs
ICdXZWJLaXQyR3RrJywgJ1dlYlZpZXdUZXN0LmNwcCcpLAogICAgICAgICAgICBvcy5wYXRoLmpv
aW4oJ1Rvb2xzJywgJ1Rlc3RXZWJLaXRBUEknLCAnVGVzdHMnLCAnV2ViS2l0Mkd0aycsICdXZWJW
aWV3VGVzdC5oJyksCisgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3Jp
cHRDb3JlJywgJ0FQSScsICdnbGliJywgJ0pTQ0Jvb2xlYW4uY3BwJyksCiAgICAgICAgICAgICBd
CiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHNfbm90X3RvX3NraXA6CmRpZmYgLS1naXQgYS9D
aGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggOWM2ZWZhNDIwZmE3ZDU4MGUxODk2MTk2NDAzNzM2
MmY2NzY1YWI1Ni4uNGViODM3YmEyMDBhNzJlNjkyNjk0YzQ4NjMxMzQzMmZjYzM1NjNkNyAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2
LTEwLTI3ICBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgIDx0ZXZhdW1AZ21haWwu
Y29tPgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgSmF2YVNjcmlw
dENvcmUgZ2xpYiBiaW5kaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBpcyBhIHNpbXBsZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGEg
SmF2YVNjcmlwdENvcmUgYmluZGluZ3MKKyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBkaXNjdXNz
aW9uIG9uIHdlYmtsaXQtZ3RrIG1haWxpbmcgbGlzdCB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9s
aXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJraXQtZ3RrLzIwMTYtT2N0b2Jlci8wMDI4MzQu
aHRtbAorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6IEFkZGVkIEVO
QUJMRV9KU0NfR0xJQiBvcHRpb24gZGVmYXVsdGluZyB0byBPRkYKKwogMjAxNi0xMC0xOCAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIENTU19TSEFQRVMg
ZmVhdHVyZSBkZWZpbml0aW9uLiBUaGlzIHNob3VsZCBhbHdheXMgYmUgb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293040</attachid>
            <date>2016-10-27 11:00:51 -0700</date>
            <delta_ts>2016-10-27 16:27:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161027155701.patch</filename>
            <type>text/plain</type>
            <size>58478</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi41ZDhiYTUzZjk1OWIyYjYz
NWVjNDUxYTkzNTI3YmI1NGRkMWI2NmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisg
ICAgICAgIGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2
LU9jdG9iZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NCb29sZWFuLmg6IEFkZGVkLgorICAgICAg
ICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9n
bGliL0pTQ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ051bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ051bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NOdW1iZXJQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZy5jcHA6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkv
Z2xpYi9KU0NTdHJpbmdQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1Zh
bHVlLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL2pzYy5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5o
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvZ2xpYi9tYWluLmNwcDogQWRkZWQuCisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZGVkIHJ1bGVzIGZvciBidWlsZGluZyBhbmQgaW5z
dGFsbGluZyBqc2MtZ2xpYgorCiAyMDE2LTEwLTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBBUk0gYnVpbGRmaXggYWZ0ZXIgcjIw
NzQ3NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29s
ZWFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NmJmOWJkYzgxM2I1ZjcxMzdiMDEwNTE1MTMxY2ZkNjM0ODUwYjhiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4u
Y3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NCb29sZWFuCisg
KiBAU2hvcnRfZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBib29s
ZWFuIHZhbHVlcworICoKKyAqICNKU0NCb29sZWFuIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJl
c2VudCBib29sZWFuIHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLwor
CitHX0RFRklORV9UWVBFKEpTQ0Jvb2xlYW4sIGpzY19ib29sZWFuLCBKU0NfVFlQRV9WQUxVRSkK
Kworc3RhdGljIHZvaWQKK2pzY19ib29sZWFuX2NsYXNzX2luaXQoSlNDQm9vbGVhbkNsYXNzICop
Cit7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfYm9vbGVhbl9pbml0KEpTQ0Jvb2xlYW4gKikKK3sK
K30KKworSlNDQm9vbGVhbiAqCitqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCAq
Y29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ0Jvb2xlYW4qIGJvb2xlYW47
CisKKyAgICBib29sZWFuID0gKEpTQ0Jvb2xlYW4gKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX0JP
T0xFQU4sICJjb250ZXh0IiwgY29udGV4dCwgTlVMTCk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ19WQUxVRShib29sZWFuKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gYm9vbGVhbjsKK30K
KworLyoqCisgKiBqc2NfYm9vbGVhbl9uZXc6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0
IHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgYm9vbGVhbiB2YWx1
ZSB0aGF0IHRoZSAjSlNDQm9vbGVhbiB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBu
ZXcgI0pTQ0Jvb2xlYW4gd2l0aCBAdmFsdWUgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczog
VGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ0Jvb2xlYW4gb2JqZWN0CisgKi8KK0pTQ0Jvb2xlYW4gKgor
anNjX2Jvb2xlYW5fbmV3KEpTQ0NvbnRleHQgKmNvbnRleHQsIGdib29sZWFuIHZhbHVlKQorewor
ICAgIEpTQ29udGV4dFJlZiBqc2NvbnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisg
ICAganNjb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBqc3Zh
bHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKGpzY29udGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJu
IGpzY0Jvb2xlYW5OZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NDZiMzAx
MmY3ZGEwMjlhOTliNGQ2ZTgzOWIxODJjNzRmMGI3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5oCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBKU0NfVFlQRV9CT09MRUFOICAgICAgICAgICAgKGpzY19ib29sZWFuX2dldF90eXBl
KCkpCisjZGVmaW5lIEpTQ19CT09MRUFOKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX0JPT0xFQU4sIEpTQ0Jvb2xlYW4pKQorI2RlZmlu
ZSBKU0NfSVNfQk9PTEVBTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBKU0NfVFlQRV9CT09MRUFOKSkKKyNkZWZpbmUgSlNDX0JPT0xFQU5fQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVB
TiwgSlNDQm9vbGVhbkNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX0JPT0xFQU5fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVBTikpCisK
K3R5cGVkZWYgc3RydWN0IF9KU0NCb29sZWFuICAgICAgICBKU0NCb29sZWFuOwordHlwZWRlZiBz
dHJ1Y3QgX0pTQ0Jvb2xlYW5DbGFzcyAgIEpTQ0Jvb2xlYW5DbGFzczsKKworc3RydWN0IF9KU0NC
b29sZWFuIHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ0Jvb2xlYW5D
bGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0pTX0VYUE9SVCBH
VHlwZQoranNjX2Jvb2xlYW5fZ2V0X3R5cGUgKHZvaWQpOworCitKU19FWFBPUlQgSlNDQm9vbGVh
bioKK2pzY19ib29sZWFuX25ldyAgICAgIChKU0NDb250ZXh0KiwgZ2Jvb2xlYW4gdmFsdWUpOwor
CitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0Jvb2xlYW5Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Qm9vbGVhblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjE3MzYwMjc5ZmNjNzZmOTZkYmNhZjE1MDUy
MGNkYjYwZjBlMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBn
YW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworSlNf
RVhQT1JUIEpTQ0Jvb2xlYW4qCitqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCos
IEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0NvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRl
eHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFmYzQ1YTA0YzBjMTg1NGE0ZTZkNDg3NWIwZGQ0MDg5OTE4Mjc1
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkpT
Q0Jvb2xlYW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNs
dWRlICJKU0NOdW1iZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDU3RyaW5nUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorCisvKioKKyAqIFNFQ1RJT046IEpTQ0NvbnRleHQKKyAq
IEBTaG9ydF9kZXNjcmlwdGlvbjogSmF2YVNjcmlwdENvcmUgZXhlY3V0aW9uIGNvbnRleHQKKyAq
IEBUaXRsZTogSlNDQ29udGV4dAorICoKKyAqIEEgI0pTQ0NvbnRleHQgaXMgdGhlIGNlbnRyYWwg
Y2xhc3Mgb2YgdGhlIEphdmFTY3JpcHRDb3JlIEFQSS4gSXQgaXMKKyAqIHJlc3BvbnNpYmxlIGZv
ciBldmFsdWF0aW9uIG9mIHNjcmlwdHMgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LAorICogc2V0
dGluZyBhbmQgZ2V0dGluZyB2YWx1ZXMgZnJvbSB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHRv
IG1ha2UKKyAqIG5hdGl2ZSBvYmplY3RzLCBtZXRob2RzIGFuZCBmdW5jdGlvbnMgYWNjZXNzaWJs
ZSB0byBKYXZhU2NyaXB0LgorICoKKyAqLworCitzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIHsK
KyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU09iamVjdFJlZiBvYmplY3Q7
CisKKyAgICBHTGlzdCogdmFsdWVzOworfTsKKworR19ERUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUo
SlNDQ29udGV4dCwganNjX2NvbnRleHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkCitq
c2NDb250ZXh0RGlzcG9zZShHT2JqZWN0KiBvYmopCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUq
IHByaXY7CisKKyAgICBwcml2ID0gKEpTQ0NvbnRleHRQcml2YXRlKikganNjX2NvbnRleHRfZ2V0
X2luc3RhbmNlX3ByaXZhdGUoSlNDX0NPTlRFWFQob2JqKSk7CisKKyAgICBnX2xpc3RfZnJlZV9m
dWxsKHByaXYtPnZhbHVlcywgZ19vYmplY3RfdW5yZWYpOworCisgICAgaWYgKCFwcml2LT5jb250
ZXh0KSB7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UocHJpdi0+Y29udGV4dCk7Cisg
ICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgICAgICBwcml2LT5vYmplY3QgPSBu
dWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19jb250ZXh0X3BhcmVudF9j
bGFzcyktPmRpc3Bvc2Uob2JqKTsKK30KKworc3RhdGljIHZvaWQKK2pzY19jb250ZXh0X2NsYXNz
X2luaXQoSlNDQ29udGV4dENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNs
YXNzOworCisgICAgb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmRpc3Bvc2UgPSBqc2NDb250ZXh0RGlzcG9zZTsKK30KKworc3RhdGljIHZvaWQKK2pzY19j
b250ZXh0X2luaXQoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0
ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9n
ZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKyAgICBwcml2LT5jb250ZXh0ID0gSlNHbG9i
YWxDb250ZXh0Q3JlYXRlKG51bGxwdHIpOworICAgIHByaXYtPm9iamVjdCA9IEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChwcml2LT5jb250ZXh0KTsKKyAgICBwcml2LT52YWx1ZXMgPSBudWxscHRy
OworfQorCitKU0dsb2JhbENvbnRleHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKworICAgIHBy
aXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0
ZShjb250ZXh0KTsKKyAgICByZXR1cm4gcHJpdi0+Y29udGV4dDsKK30KKworLyoqCisgKiBqc2Nf
Y29udGV4dF9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlNDQ29udGV4dCBlbnZpcm9ubWVu
dCB0byBleGVjdXRlIEphdmFTY3JpcHQKKyAqIGNvZGUuCisgKgorICogUmV0dXJuczogVGhlIG5l
d2x5IGNyZWF0ZWQgI0pTQ0NvbnRleHQgb2JqZWN0CisgKi8KK0pTQ0NvbnRleHQqCitqc2NfY29u
dGV4dF9uZXcodm9pZCkKK3sKKyAgICByZXR1cm4gKEpTQ0NvbnRleHQqKSBnX29iamVjdF9uZXco
SlNDX1RZUEVfQ09OVEVYVCwgbnVsbHB0cik7Cit9CisKK3N0YXRpYyBKU0NWYWx1ZSoKK2pzVmFs
dWVUb0pTQ1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sK
KyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFBy
aXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKworICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBKU0NfVkFMVUUoanNjU3RyaW5nTmV3RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSkp
OworCisgICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4ocHJpdi0+Y29udGV4dCwganN2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBKU0NfVkFMVUUoanNjQm9vbGVhbk5ld0Zyb21KU1ZhbHVlKGNvbnRleHQs
IGpzdmFsdWUpKTsKKyAgICAKKyAgICBpZiAoSlNWYWx1ZUlzTnVtYmVyKHByaXYtPmNvbnRleHQs
IGpzdmFsdWUpKQorICAgICAgICByZXR1cm4gSlNDX1ZBTFVFKGpzY051bWJlck5ld0Zyb21KU1Zh
bHVlKGNvbnRleHQsIGpzdmFsdWUpKTsKKworICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQocHJp
di0+Y29udGV4dCwganN2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChwcml2LT5jb250ZXh0LCBqc3Zh
bHVlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X2dldF92YWx1ZToKKyAqIEBjb250ZXh0OiB0
aGUgI0pTQ0NvbnRleHQgdGhhdCB0aGUgdmFsdWUgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbQorICog
QG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgb2JqZWN0IHByb3BlcnR5IHRoYXQgd2lsbCBi
ZSByZXRyaWV2ZWQKKyAqCisgKiBSZXRyaWV2ZXMgcHJvcGVydGllcyBmcm9tIHRoZSBKYXZhU2Ny
aXB0IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgI0pTQ0NvbnRleHQuIFZh
bHVlcyBhcmUgcmVwcmVzZW50ZWQgYnkgc3VidHlwZXMgb2YgSlNDVmFsdWUuCisgKgorICogUmV0
dXJuczogQSBKU0NWYWx1ZSBzdWJ0eXBlIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHJl
cXVlc3RlZCBwcm9wZXJ0eQorICovCitKU0NWYWx1ZSoKK2pzY19jb250ZXh0X2dldF92YWx1ZShK
U0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIEpTQ0NvbnRleHRQ
cml2YXRlKiBwcml2OworICAgIEpTU3RyaW5nUmVmIHN0ck5hbWU7CisgICAgSlNWYWx1ZVJlZiBq
c3ZhbHVlOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKworICAgIHByaXYg
PSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShj
b250ZXh0KTsKKworICAgIHN0ck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhu
YW1lKTsKKyAgICBqc3ZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShwcml2LT5jb250ZXh0LCBw
cml2LT5vYmplY3QsIHN0ck5hbWUsICZleGNlcHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZShz
dHJOYW1lKTsKKworICAgIHJldHVybiBqc1ZhbHVlVG9KU0NWYWx1ZShjb250ZXh0LCBqc3ZhbHVl
KTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9zZXRfdmFsdWU6CisgKiBAY29udGV4dDogdGhl
ICNKU0NDb250ZXh0IHdoZXJlIHRoZSB2YWx1ZSB3aWxsIGJlIHNldAorICogQG5hbWU6IHRoZSBu
YW1lIG9mIHRoZSBnbG9iYWwgb2JqZWN0IHByb3BlcnR5IHRoYXQgd2lsbCBiZSBzZXQKKyAqIEB2
YWx1ZTogdGhlIHZhbHVlCisgKgorICogU2V0cyBwcm9wZXJ0aWVzIGluIHRoZSBKYXZhU2NyaXB0
IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgI0pTQ0NvbnRleHQuIFZhbHVl
cyBhcmUgcmVwcmVzZW50ZWQgYnkgc3VidHlwZXMgb2YgSlNDVmFsdWUuCisgKi8KK3ZvaWQKK2pz
Y19jb250ZXh0X3NldF92YWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogbmFt
ZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2OworICAg
IEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBq
c2NfY29udGV4dF9nZXRfaW5zdGFuY2VfcHJpdmF0ZShjb250ZXh0KTsKKworICAgIGlmIChnX29i
amVjdF9pc19mbG9hdGluZyh2YWx1ZSkpIHsKKyAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsodmFs
dWUpOworICAgICAgICBwcml2LT52YWx1ZXMgPSBnX2xpc3RfYXBwZW5kKHByaXYtPnZhbHVlcywg
dmFsdWUpOworICAgIH0KKworICAgIGpzdmFsdWUgPSBqc2NWYWx1ZUdldEpTVmFsdWUodmFsdWUp
OworICAgIEpTU3RyaW5nUmVmIHN0ck5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhuYW1lKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KHByaXYtPmNvbnRleHQsIHByaXYtPm9i
amVjdCwgc3RyTmFtZSwganN2YWx1ZSwKKyAgICAgICAga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSwgbnVsbHB0cik7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0ck5hbWUpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc4MzM1
OWViZDA4N2YyNjJiYWEwNTQwOWUwMDc5ZDhkYmMwMDM1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBB
bWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ09OVEVY
VCAgICAgICAgICAgIChqc2NfY29udGV4dF9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfQ09OVEVY
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0Nf
VFlQRV9DT05URVhULCBKU0NDb250ZXh0KSkKKyNkZWZpbmUgSlNDX0lTX0NPTlRFWFQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfQ09OVEVY
VCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0NMQVNTKGNsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQsIEpTQ0NvbnRleHRDbGFzcykpCisj
ZGVmaW5lIEpTQ19JU19DT05URVhUX0NMQVNTKGNsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ29u
dGV4dCAgICAgICAgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0Q2xhc3Mg
ICBKU0NDb250ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dFByaXZhdGUgSlND
Q29udGV4dFByaXZhdGU7CisKK3N0cnVjdCBfSlNDQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJl
bnQ7CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfSlNDQ29u
dGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBP
UlQgR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0ND
b250ZXh0ICoKK2pzY19jb250ZXh0X25ldyAgICAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NW
YWx1ZSAqCitqc2NfY29udGV4dF9nZXRfdmFsdWUgKEpTQ0NvbnRleHQqLCBjb25zdCBnY2hhciAq
bmFtZSk7CisKK0pTX0VYUE9SVCB2b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUgKEpTQ0NvbnRl
eHQqLCBjb25zdCBnY2hhciAqbmFtZSwgSlNDVmFsdWUqKTsKKworR19FTkRfREVDTFMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWU2OGJkOWU1MjM2NjhmOTAzMDEzOTUyMGYxOGZiMzE1MjJlNTBhNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2
w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisKK0pTX0VYUE9SVCBKU0dsb2JhbENvbnRl
eHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODVmNjNlZDhm
Mzk0ODM1NGZkZDU3NTc5Y2MyODFkM2FkZjYwODBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5jcHAKQEAgLTAsMCArMSw5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFy
YWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlND
TnVtYmVyLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpT
Q1ZhbHVlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5o
PgorCisvKioKKyAqIEBUaXRsZTogSlNDTnVtYmVyCisgKiBAU2hvcnRfZGVzY3JpcHRpb246ICNK
U0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBudW1lcmljIHZhbHVlcworICoKKyAqICNKU0NO
dW1iZXIgaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IG51bWVyaWMgdmFsdWVzIGluc2lk
ZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZUEUoSlNDTnVtYmVy
LCBqc2NfbnVtYmVyLCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGljIHZvaWQKK2pzY19udW1iZXJf
Y2xhc3NfaW5pdChKU0NOdW1iZXJDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfbnVt
YmVyX2luaXQoSlNDTnVtYmVyKikKK3sKK30KKworSlNDTnVtYmVyICoKK2pzY051bWJlck5ld0Zy
b21KU1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAg
ICBKU0NOdW1iZXIqIHZhbHVlOworCisgICAgdmFsdWUgPSAoSlNDTnVtYmVyKikgZ19vYmplY3Rf
bmV3KEpTQ19UWVBFX05VTUJFUiwgImNvbnRleHQiLCBjb250ZXh0LCBOVUxMKTsKKyAgICBqc2NW
YWx1ZVNldEpTVmFsdWUoSlNDX1ZBTFVFKHZhbHVlKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK0pTQ051bWJlcioKK2pzY19udW1iZXJfbmV3KEpTQ0NvbnRleHQqIGNvbnRl
eHQsIGdkb3VibGUgdmFsdWUpCit7CisgICAgSlNDb250ZXh0UmVmIGpzY29udGV4dDsKKyAgICBK
U1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250
ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihqc2NvbnRleHQs
IHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBq
c3ZhbHVlKTsKK30KKworSlNDTnVtYmVyKgoranNjX251bWJlcl9uZXdfaW50MzIoSlNDQ29udGV4
dCogY29udGV4dCwgZ2ludCB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYganNjb250ZXh0Owor
ICAgIEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKGpzY29u
dGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJuIGpzY051bWJlck5ld0Zyb21KU1ZhbHVlKGNvbnRl
eHQsIGpzdmFsdWUpOworfQorCitKU0NOdW1iZXIqCitqc2NfbnVtYmVyX25ld191aW50MzIoSlND
Q29udGV4dCogY29udGV4dCwgZ3VpbnQgdmFsdWUpCit7CisgICAgSlNDb250ZXh0UmVmIGpzY29u
dGV4dDsKKyAgICBKU1ZhbHVlUmVmIGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIGpzdmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJl
cihqc2NvbnRleHQsIHZhbHVlKTsKKworICAgIHJldHVybiBqc2NOdW1iZXJOZXdGcm9tSlNWYWx1
ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NOdW1iZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NOdW1iZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzYxY2YxNTY4MmU2NzIwNWY1ZmExY2ViMGM1OTViYjJh
ZTAxNjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ051bWJlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9OVU1CRVIgICAg
ICAgICAgICAoanNjX251bWJlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfTlVNQkVSKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX05V
TUJFUiwgSlNDTnVtYmVyKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJFUihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9OVU1CRVIpKQorI2RlZmlu
ZSBKU0NfTlVNQkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
TlVNQkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpT
Q19UWVBFX05VTUJFUikpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NOdW1iZXIgICAgICAgIEpTQ051
bWJlcjsKK3R5cGVkZWYgc3RydWN0IF9KU0NOdW1iZXJDbGFzcyAgIEpTQ051bWJlckNsYXNzOwor
CitzdHJ1Y3QgX0pTQ051bWJlciB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0
IF9KU0NOdW1iZXJDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K0pTX0VYUE9SVCBHVHlwZQoranNjX251bWJlcl9nZXRfdHlwZSAgICh2b2lkKTsKKworSlNfRVhQ
T1JUIEpTQ051bWJlciAqCitqc2NfbnVtYmVyX25ldyAgICAgICAgKEpTQ0NvbnRleHQqLCBnZG91
YmxlIHZhbHVlKTsKKworSlNfRVhQT1JUIEpTQ051bWJlciAqCitqc2NfbnVtYmVyX25ld19pbnQz
MiAgKEpTQ0NvbnRleHQqLCBnaW50IHZhbHVlKTsKKworSlNfRVhQT1JUIEpTQ051bWJlciAqCitq
c2NfbnVtYmVyX25ld191aW50MzIgKEpTQ0NvbnRleHQqLCBndWludCB2YWx1ZSk7CisKK0dfRU5E
X0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVt
YmVyUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MjlmY2U1MDZjNzczNDJmZjA5NThiNWIwMDE0NTBmMTdmYThj
MGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q051bWJlclByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDTnVtYmVyLmgiCisKK0pTX0VYUE9SVCBKU0NO
dW1iZXIqCitqc2NOdW1iZXJOZXdGcm9tSlNWYWx1ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE1Yjk1ZWFhZGY2ZmVkNGEzNGMzMTliMzEwNzFhOWMzOWVkMjQyMmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcApAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgi
CisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisK
Ky8qKgorICogQFRpdGxlOiBKU0NTdHJpbmcKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1Zh
bHVlIHN1YnR5cGUgdG8gcmVwcmVzZW50IHN0cmluZ3MKKyAqCisgKiAjSlNDU3RyaW5nIGlzIHRo
ZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBzdHJpbmcgdmFsdWVzIGluc2lkZQorICogSmF2YVNj
cmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZUEUoSlNDU3RyaW5nLCBqc2Nfc3RyaW5n
LCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGljIHZvaWQKK2pzY19zdHJpbmdfY2xhc3NfaW5pdChK
U0NTdHJpbmdDbGFzcyAqKQoreworfQorCitzdGF0aWMgdm9pZAoranNjX3N0cmluZ19pbml0KEpT
Q1N0cmluZyAqKQoreworfQorCitKU0NTdHJpbmcgKgoranNjU3RyaW5nTmV3RnJvbUpTVmFsdWUo
SlNDQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ1N0cmlu
Zyogc3RyaW5nOworCisgICAgc3RyaW5nID0gKEpTQ1N0cmluZyAqKSBnX29iamVjdF9uZXcoSlND
X1RZUEVfU1RSSU5HLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpOworICAgIGpzY1ZhbHVlU2V0
SlNWYWx1ZShKU0NfVkFMVUUoc3RyaW5nKSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gc3RyaW5n
OworfQorCisvKioKKyAqIGpzY19zdHJpbmdfbmV3OgorICogQGNvbnRleHQ6IFRoZSAjSlNDQ29u
dGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEBzdHI6IFRoZSBzdHJpbmcgdGhh
dCB0aGUgI0pTQ1N0cmluZyB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pT
Q1N0cmluZyB3aXRoIEBzdHIgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5
IGNyZWF0ZWQgI0pTQ1N0cmluZyBvYmplY3QKKyAqLworSlNDU3RyaW5nICoKK2pzY19zdHJpbmdf
bmV3KEpTQ0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGdjaGFyICpzdHIpCit7CisgICAgSlNDb250
ZXh0UmVmIGpzY29udGV4dDsKKyAgICBKU1N0cmluZ1JlZiB2YWx1ZTsKKyAgICBKU1ZhbHVlUmVm
IGpzdmFsdWU7CisKKyAgICBqc2NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRl
eHQpOworICAgIHZhbHVlID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyKTsKKyAg
ICBqc3ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNjb250ZXh0LCB2YWx1ZSk7CisgICAgSlNT
dHJpbmdSZWxlYXNlKHZhbHVlKTsKKworICAgIHJldHVybiBqc2NTdHJpbmdOZXdGcm9tSlNWYWx1
ZShjb250ZXh0LCBqc3ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBkZmRlZDVhMTVmM2Y4ZmVjMjdmZWRjM2E4OTk4MzU1
NWVhMzgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ1N0cmluZy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9TVFJJTkcgICAg
ICAgICAgICAoanNjX3N0cmluZ19nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfU1RSSU5HKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1NU
UklORywgSlNDU3RyaW5nKSkKKyNkZWZpbmUgSlNDX0lTX1NUUklORyhvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9TVFJJTkcpKQorI2RlZmlu
ZSBKU0NfU1RSSU5HX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX1NUUklORywgSlNDU3RyaW5nQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
U1RSSU5HX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpT
Q19UWVBFX1NUUklORykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NTdHJpbmcgICAgICAgIEpTQ1N0
cmluZzsKK3R5cGVkZWYgc3RydWN0IF9KU0NTdHJpbmdDbGFzcyAgIEpTQ1N0cmluZ0NsYXNzOwor
CitzdHJ1Y3QgX0pTQ1N0cmluZyB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0
IF9KU0NTdHJpbmdDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K0pTX0VYUE9SVCBHVHlwZQoranNjX3N0cmluZ19nZXRfdHlwZSAodm9pZCk7CisKK0pTX0VYUE9S
VCBKU0NTdHJpbmcqCitqc2Nfc3RyaW5nX25ldyAgICAgIChKU0NDb250ZXh0KiwgY29uc3QgZ2No
YXIgKnN0cik7CisKK0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDU3RyaW5nUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTJjZTMzMDA0ZDRhYjc4ZDc0
Y2FhNmI5YmI2MDI0ZGYyZDU1ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8
dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgi
CisKK0pTX0VYUE9SVCBKU0NTdHJpbmcqCitqc2NTdHJpbmdOZXdGcm9tSlNWYWx1ZShKU0NDb250
ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZjA1Y2ExYjExMTMzYjJiMjI4N2E0YmQ1M2Y2NjY1N2Q2Yjg4
Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q1ZhbHVlLmNwcApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBF
c3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0Jv
b2xlYW4uaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ051
bWJlci5oIgorI2luY2x1ZGUgIkpTQ1N0cmluZy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+
CisKKy8qKgorICogU0VDVElPTjogSlNDVmFsdWUKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQmFz
ZSBjbGFzcyByZXByZXNlbnRpbmcgSmF2YVNjcmlwdENvcmUgdmFsdWVzCisgKiBAVGl0bGU6IEpT
Q1ZhbHVlCisgKgorICogI0pTQ1ZhbHVlIGlzIHRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gcmVwcmVz
ZW50IHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLiBBY3R1YWwgdmFsdWVzIGFyZSBz
dWJ0eXBlcyBvZiB0aGlzIGNsYXNzLiBUaGUKKyAqIGN1cnJlbnQgc3ViY2xhc3NlcyBhcmU6ICNK
U0NTdHJpbmcsICNKU0NOdW1iZXIgYW5kICNKU0NCb29sZWFuLgorICoKKyAqLworCitzdHJ1Y3Qg
X0pTQ1ZhbHVlUHJpdmF0ZSB7CisgICAgSlNDQ29udGV4dCoganNjQ29udGV4dDsKKyAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlOworfTsKKworR19E
RUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX0lOSVRJ
QUxMWV9VTk9XTkVEKQorCitlbnVtIHsKKyAgICBrUFJPUF8wLAorCisgICAga1BST1BfQ09OVEVY
VCwKK307CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZUdldFByb3BlcnR5KEdPYmplY3QqIG9iaiwg
Z3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1fc3BlYykKK3sK
KyAgICBKU0NWYWx1ZSogdmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZh
dGUodmFsKTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2Uga1BST1BfQ09OVEVY
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBnX29iamVjdF9yZWYocHJpdi0+
anNjQ29udGV4dCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBwcm9wX2lkLCBwYXJhbV9zcGVjKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZVNldFByb3BlcnR5KEdPYmplY3QqIG9i
aiwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1f
c3BlYykKK3sKKyAgICBKU0NWYWx1ZSogdmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFu
Y2VfcHJpdmF0ZSh2YWwpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBrUFJP
UF9DT05URVhUOiB7CisgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChn
X3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgcHJpdi0+anNjQ29udGV4dCA9IGNv
bnRleHQ7CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBjb250ZXh0ID8ganNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSA6IG51bGxwdHI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBw
cm9wX2lkLCBwYXJhbV9zcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZURp
c3Bvc2UoR09iamVjdCogb2JqKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAg
IHByaXYgPSAoSlNDVmFsdWVQcml2YXRlKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRl
KEpTQ19WQUxVRShvYmopKTsKKyAgICBpZiAocHJpdi0+dmFsdWUgIT0gbnVsbHB0cikgeworICAg
ICAgICBKU1ZhbHVlVW5wcm90ZWN0KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKTsKKyAgICAg
ICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfdmFsdWVfcGFyZW50X2NsYXNzKS0+
ZGlzcG9zZShvYmopOworfQorCitzdGF0aWMgdm9pZAoranNjX3ZhbHVlX2NsYXNzX2luaXQoSlND
VmFsdWVDbGFzcyAqa2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzczsKKworICAg
IG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgb2JqQ2xhc3MtPmdldF9w
cm9wZXJ0eSA9IGpzY1ZhbHVlR2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0
eSA9IGpzY1ZhbHVlU2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NWYWx1
ZURpc3Bvc2U7CisKKyAgICAvKioKKyAgICAgKiBKU0NWYWx1ZTpjb250ZXh0OgorICAgICAqCisg
ICAgICogVGhlICNKU0NDb250ZXh0IG9mIHRoZSB2YWx1ZS4KKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBrUFJPUF9DT05URVhU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJjb250ZXh0IiwKKyAgICAgICAgICAgICJj
b250ZXh0IiwKKyAgICAgICAgICAgICJKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IiwKKyAg
ICAgICAgICAgIEpTQ19UWVBFX0NPTlRFWFQsCisgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChH
X1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK3N0YXRp
YyB2b2lkCitqc2NfdmFsdWVfaW5pdChKU0NWYWx1ZSopCit7Cit9CisKK0pTVmFsdWVSZWYKK2pz
Y1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0
ZSh2YWx1ZSk7CisKKyAgICByZXR1cm4gcHJpdi0+dmFsdWU7Cit9CisKK3ZvaWQKK2pzY1ZhbHVl
U2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXY7CisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2Nf
dmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworCisgICAgZ19yZXR1cm5faWZfZmFp
bChwcml2LT5jb250ZXh0ICE9IG51bGxwdHIpOworCisgICAgaWYgKHByaXYtPnZhbHVlICE9IG51
bGxwdHIpIHsKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChwcml2LT5jb250ZXh0LCBwcml2LT52
YWx1ZSk7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBwcml2
LT52YWx1ZSA9IGpzdmFsdWU7CisgICAgSlNWYWx1ZVByb3RlY3QocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpOworfQorCitKU0NWYWx1ZSoKK2pzY1ZhbHVlTmV3RnJvbUpTVmFsdWUoSlNDQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQoreworICAgIEpTQ1ZhbHVlKiB2YWx1
ZTsKKworICAgIHZhbHVlID0gKEpTQ1ZhbHVlKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZBTFVF
LCAiY29udGV4dCIsIGNvbnRleHQsIG51bGxwdHIpOworICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZSh2
YWx1ZSwganN2YWx1ZSk7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKy8qKgorICoganNjX3Zh
bHVlX2dldF9zdHJpbmc6CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWlu
aW5nIHRoZSB2YWx1ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgc3RyaW5nIGZyb20gI0pTQ1ZhbHVl
CisgKgorICogUmV0dXJuczogZ2NoYXIqCisgKi8KK2NvbnN0IGdjaGFyKgoranNjX3ZhbHVlX2dl
dF9zdHJpbmcoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsK
KyAgICBKU1N0cmluZ1JlZiBzdHJWYWx1ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGdjaGFy
KiBidWZmOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1NUUklORyh2YWx1ZSks
IG51bGxwdHIpOworCisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2NfdmFsdWVfZ2V0
X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTVmFs
dWVJc1N0cmluZyhwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSksIG51bGxwdHIpOworCisgICAg
c3RyVmFsdWUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVl
LCBudWxscHRyKTsKKyAgICBsZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoc3RyVmFsdWUpOworICAgIGJ1ZmYgPSAoZ2NoYXIqKSBnX21hbGxvYzAobGVuZ3RoKTsKKyAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0clZhbHVlLCBidWZmLCBsZW5ndGgpOworICAgIEpT
U3RyaW5nUmVsZWFzZShzdHJWYWx1ZSk7CisgICAgCisgICAgcmV0dXJuIGdfc3RyZHVwKGJ1ZmYp
OworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfYm9vbGVhbjoKKyAqIEB2YWx1ZTogdGhlICNK
U0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRo
ZSBib29sZWFuIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0dXJuczogZ2Jvb2xlYW4K
KyAqLworZ2Jvb2xlYW4KK2pzY192YWx1ZV9nZXRfYm9vbGVhbihKU0NWYWx1ZSAqdmFsdWUpCit7
CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX0JPT0xF
QU4odmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2YXRlICopIGpzY192YWx1ZV9n
ZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVh
bihwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jv
b2xlYW4ocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpOworfQorCisvKioKKyAqIGpzY192YWx1
ZV9nZXRfZG91YmxlOgorICogQHZhbHVlOiB0aGUgI0pTQ1ZhbHVlIHN1YnR5cGUgY29udGFpbmlu
ZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIG51bWVyaWMgKGRvdWJsZSkgdmFsdWUg
ZnJvbSAjSlNDVmFsdWUKKyAqCisgKiBSZXR1cm5zOiBnYm9vbGVhbgorICovCitnZG91YmxlCitq
c2NfdmFsdWVfZ2V0X2RvdWJsZShKU0NWYWx1ZSAqdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2
YXRlKiBwcml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX05VTUJFUih2YWx1ZSkpOworCisgICAg
cHJpdiA9IChKU0NWYWx1ZVByaXZhdGUgKikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRl
KHZhbHVlKTsKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNOdW1iZXIocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+Y29udGV4dCwg
cHJpdi0+dmFsdWUsIG51bGxwdHIpOworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfaW50MzI6
CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1ZQor
ICoKKyAqIFJldHJpZXZlcyB0aGUgbnVtZXJpYyAoaW50KSB2YWx1ZSBmcm9tICNKU0NWYWx1ZQor
ICoKKyAqIFJldHVybnM6IGdib29sZWFuCisgKi8KK2dpbnQKK2pzY192YWx1ZV9nZXRfaW50MzIo
SlNDVmFsdWUgKnZhbHVlKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAgIGdf
YXNzZXJ0KEpTQ19JU19OVU1CRVIodmFsdWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2
YXRlICopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3Nl
cnQoSlNWYWx1ZUlzTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRy
KTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X3VpbnQzMjoKKyAqIEB2YWx1ZTogdGhlICNK
U0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRo
ZSBudW1lcmljICh1bnNpZ25lZCBpbnQpIHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0
dXJuczogZ2Jvb2xlYW4KKyAqLworZ3VpbnQKK2pzY192YWx1ZV9nZXRfdWludDMyKEpTQ1ZhbHVl
ICp2YWx1ZSkKK3sKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXY7CisKKyAgICBnX2Fzc2VydChK
U0NfSVNfTlVNQkVSKHZhbHVlKSk7CisKKyAgICBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBq
c2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFs
dWVJc051bWJlcihwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIChn
dWludCkgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRy
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTE1NzgxZDdkYjZhZDgzNzVjYTAzMWYyNTNhMjVhNjcwOWU0ODJhMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVkFMVUUgICAgICAgICAgICAoanNjX3Zh
bHVlX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19WQUxVRShvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWUpKQor
I2RlZmluZSBKU0NfSVNfVkFMVUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0NfVkFMVUVfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUs
IEpTQ1ZhbHVlQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfVkFMVUVfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUpKQorCit0eXBlZGVm
IHN0cnVjdCBfSlNDVmFsdWUgICAgICAgIEpTQ1ZhbHVlOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1Zh
bHVlQ2xhc3MgICBKU0NWYWx1ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlUHJpdmF0
ZSBKU0NWYWx1ZVByaXZhdGU7CisKK3N0cnVjdCBfSlNDVmFsdWUgeworICAgIEdPYmplY3QgcGFy
ZW50OworCisgICAgSlNDVmFsdWVQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NWYWx1
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBPUlQg
R1R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZSAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBjb25zdCBj
aGFyICoKK2pzY192YWx1ZV9nZXRfc3RyaW5nICAoSlNDVmFsdWUgKik7CisKK0pTX0VYUE9SVCBn
Ym9vbGVhbgoranNjX3ZhbHVlX2dldF9ib29sZWFuIChKU0NWYWx1ZSAqKTsKKworSlNfRVhQT1JU
IGdkb3VibGUKK2pzY192YWx1ZV9nZXRfZG91YmxlICAoSlNDVmFsdWUgKik7CisKK0pTX0VYUE9S
VCBnaW50Citqc2NfdmFsdWVfZ2V0X2ludDMyICAgKEpTQ1ZhbHVlICopOworCitKU19FWFBPUlQg
Z3VpbnQKK2pzY192YWx1ZV9nZXRfdWludDMyICAoSlNDVmFsdWUgKik7CisKKy8qIEpTX0VYUE9S
VCBKU0NDb250ZXh0ICogKi8KKy8qIGpzY192YWx1ZV9nZXRfY29udGV4dCAoSlNDVmFsdWUgKnZh
bHVlKTsgKi8KKworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODAyZWVjNTY1OWZmZGU5ZmZkZmVl
NDgzYzRjYTRlYjZmZDQ5OGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZh
dW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSlNDVmFsdWUuaCIKKworSlNfRVhQT1JUIEpTVmFsdWVSZWYKK2pzY1ZhbHVlR2V0
SlNWYWx1ZShKU0NWYWx1ZSopOworCitKU19FWFBPUlQgdm9pZAoranNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ1ZhbHVlKiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvanNjLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzAwNGUyYzNjMWFiYzQwZDY2ZjcyMzc1NjkyZTBjMzg0OGZmM2I5NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAt
MCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDQm9vbGVhbi5oPgorI2luY2x1ZGUgPGpzYy9KU0NOdW1iZXIuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM5OTY1MGQ0OTY4
NDBhMDZlYWEzMzJjNGRkOGIyMjRiM2VlZmM1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNUZXN0LmNwcApAQCAtMCwwICsx
LDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PD
s3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NCb29sZWFu
LmgiCisjaW5jbHVkZSAiLi4vLi4vZ2xpYi9KU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiLi4vLi4v
Z2xpYi9KU0NOdW1iZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9nbGliL0pTQ1N0cmluZy5oIgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorCit2b2lkCitDb250ZXh0Rml4dHVyZVNldFVwKENvbnRleHRGaXh0
dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGZpeHR1cmUtPmNv
bnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4
dHVyZS0+Y29udGV4dCwgImh1dnMiLCAgSlNDX1ZBTFVFKGpzY19zdHJpbmdfbmV3KGZpeHR1cmUt
PmNvbnRleHQsICJuaXZzIikpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+
Y29udGV4dCwgInRydWUiLCAgSlNDX1ZBTFVFKGpzY19ib29sZWFuX25ldyhmaXh0dXJlLT5jb250
ZXh0LCB0cnVlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0
LCAiZmFsc2UiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZh
bHNlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVt
YmVyLXoiLCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgMC4wKSkp
OworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLXAi
LCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgMS4xKSkpOworICAg
IGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLW4iLCBKU0Nf
VkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4dCwgLTEuMSkpKTsKKyAgICAvLyBq
c2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImludDAiLCBKU0NfVkFMVUUo
anNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworICAgIC8vIGpzY19j
b250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAiaW50MSIsIEpTQ19WQUxVRShqc2Nf
Ym9vbGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7CisgICAgLy8ganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJpbnQtMSIsIEpTQ19WQUxVRShqc2NfYm9v
bGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7CisgICAgLy8ganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ1aW50ZmYiLCBKU0NfVkFMVUUoanNjX2Jvb2xl
YW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworfQorCit2b2lkCitDb250ZXh0Rml4
dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIGdfY2xlYXJfb2JqZWN0KCZmaXh0dXJlLT5jb250ZXh0KTsKK30KKwordm9p
ZAorSlNDU3RyaW5nVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWUgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUo
Zml4dHVyZS0+Y29udGV4dCwgImh1dnMiKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19TVFJJ
TkcodmFsdWUpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoanNjX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpLCA9PSwgIm5pdnMiKTsKK30KKworCit2b2lkCitKU0NCb29sZWFuVGVzdChDb250ZXh0Rml4
dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSog
dmFsdWVUID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ0cnVlIik7
CisgICAgSlNDVmFsdWUqIHZhbHVlRiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5j
b250ZXh0LCAiZmFsc2UiKTsKKyAgICBKU0NCb29sZWFuKiBib29sVCA9IEpTQ19CT09MRUFOKHZh
bHVlVCk7CisgICAgSlNDQm9vbGVhbiogYm9vbEYgPSBKU0NfQk9PTEVBTih2YWx1ZUYpOworCisg
ICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUodmFsdWVUKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShKU0NfSVNfVkFMVUUodmFsdWVGKSk7CisKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19CT09M
RUFOKGJvb2xUKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfQk9PTEVBTihib29sRikpOwor
ICAgIAorICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlVCkpOwor
ICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZUYpKTsKK30KKwor
dm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWVaID0ganNjX2NvbnRleHRfZ2V0X3Zh
bHVlKGZpeHR1cmUtPmNvbnRleHQsICJudW1iZXIteiIpOworICAgIEpTQ1ZhbHVlKiB2YWx1ZVAg
PSBqc2NfY29udGV4dF9nZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgIm51bWJlci1wIik7Cisg
ICAgSlNDVmFsdWUqIHZhbHVlTiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShmaXh0dXJlLT5jb250
ZXh0LCAibnVtYmVyLW4iKTsKKworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVl
WikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlUCkpOworICAgIGdfYXNz
ZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlTikpOworCisgICAgZ19hc3NlcnRfdHJ1ZShKU0Nf
SVNfTlVNQkVSKHZhbHVlWikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX05VTUJFUih2YWx1
ZVApKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19OVU1CRVIodmFsdWVOKSk7CisKKyAgICBn
X2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZVopLCA9PSwgMC4wKTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZVApLCA9PSwg
MS4xKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZU4p
LCA9PSwgLTEuMSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX2dldF9pbnQzMih2
YWx1ZVopLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV9nZXRfaW50MzIo
dmFsdWVQKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfZ2V0X2ludDMy
KHZhbHVlTiksID09LCAtMSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9nZXRf
dWludDMyKHZhbHVlWiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1ZV9n
ZXRfdWludDMyKHZhbHVlUCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY192YWx1
ZV9nZXRfdWludDMyKHZhbHVlTiksID09LCA0Mjk0OTY3Mjk1KTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvZ2xpYi9KU0NWYWx1ZXNUZXN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ2YjdlZDQ2MDVmODM5ZTcwZGY4YTQ1MWVkMDg4ZGQ1ODM3MmFkMjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL2dsaWIvSlNDVmFsdWVzVGVz
dC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6Nv
IFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICIuLi8uLi9nbGliL0pTQ0NvbnRleHQuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg
X0NvbnRleHRGaXh0dXJlIHsKKyAgICBKU0NDb250ZXh0ICpjb250ZXh0OworfSBDb250ZXh0Rml4
dHVyZTsKKwordm9pZAorQ29udGV4dEZpeHR1cmVTZXRVcChDb250ZXh0Rml4dHVyZSosIGdjb25z
dHBvaW50ZXIpOworCit2b2lkCitDb250ZXh0Rml4dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJl
KiwgZ2NvbnN0cG9pbnRlcik7CisKK3ZvaWQKK0pTQ1N0cmluZ1Rlc3QoQ29udGV4dEZpeHR1cmUq
LCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorSlNDQm9vbGVhblRlc3QoQ29udGV4dEZpeHR1cmUq
LCBnY29uc3Rwb2ludGVyKTsKKwordm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSos
IGdjb25zdHBvaW50ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy9nbGliL21haW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9nbGli
L21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkYWEzMmVkM2M2NzI3N2E0NmY1MTM5YzVjY2ZkYWZhNzIx
MTlkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L2dsaWIvbWFpbi5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiSlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitpbnQKK21h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9zdHJpbmctdGVzdCIsIENv
bnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NTdHJp
bmdUZXN0LCBDb250ZXh0Rml4dHVyZVRlYXJEb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi9qc2Mt
dmFsdWVzL2Jvb2xlYW4tdGVzdCIsIENvbnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250
ZXh0Rml4dHVyZVNldFVwLCBKU0NCb29sZWFuVGVzdCwgQ29udGV4dEZpeHR1cmVUZWFyRG93bik7
CisKKyAgICAKKyAgICBnX3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9udW1iZXItdGVzdCIsIENvbnRl
eHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NOdW1iZXJU
ZXN0LCBDb250ZXh0Rml4dHVyZVRlYXJEb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDc5MWFiYTQ5
YTNjMjU1NTI5ZTAwMDU4MzBlZmYwMzE3MzMwZWY1NS4uYjE5N2I2MDc5NDJkMDFlMDFjNmQ3MzAy
Mjg1MjYxN2Q2ZmIzOWQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtNDgsMyArNDgsNDIgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVT
CiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKK2lmIChFTkFCTEVfSlNDX0dMSUIpCisgICAg
c2V0KGpzY2dsaWJfU09VUkNFUworICAgICAgICBBUEkvZ2xpYi9KU0NCb29sZWFuLmNwcAorICAg
ICAgICBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAorICAgICAgICBBUEkvZ2xpYi9KU0NOdW1iZXIu
Y3BwCisgICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5jcHAKKyAgICAgICAgQVBJL2dsaWIvSlND
VmFsdWUuY3BwCisgICAgKQorCisgICAgc2V0KGpzY2dsaWJfSEVBREVSUworICAgICAgICBBUEkv
Z2xpYi9KU0NCb29sZWFuLmgKKyAgICAgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5oCisgICAgICAg
IEFQSS9nbGliL0pTQ051bWJlci5oCisgICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5oCisgICAg
ICAgIEFQSS9nbGliL0pTQ1ZhbHVlLmgKKyAgICAgICAgQVBJL2dsaWIvanNjLmgKKyAgICApCisK
KyAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAgIEFQSS9nbGliCisgICAgKQorICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKKyAgICAgICAgJHtqc2NnbGliX1NPVVJDRVN9CisgICAgKQorICAgIGFkZF9leGVjdXRhYmxl
KGpzYy10ZXN0cworICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS90ZXN0cy9nbGliL21h
aW4uY3BwCisgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL3Rlc3RzL2dsaWIvSlNDVmFs
dWVzVGVzdC5jcHAKKyAgICAgICR7SmF2YVNjcmlwdENvcmVfU09VUkNFU30KKyAgICApCisgICAg
dGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpzYy10ZXN0cworICAgICAgICBnb2JqZWN0LTIuMAorICAg
ICAgICBnbGliLTIuMAorICAgICkKKyAgICBpbnN0YWxsKEZJTEVTCisgICAgICAgICR7anNjZ2xp
Yl9IRUFERVJTfQorICAgICAgICAgICAgREVTVElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURFUl9J
TlNUQUxMX0RJUn0vanNjIgorKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggMTdj
MmM4MmViMzQzM2ZjY2U2MGRkN2JlNWFjNjcxMjViODNmMzhiNC4uZmJkMDNlZDdmNzI1OTA4OTNl
OGU1MzM3N2MwZGI0M2M1YmFmZWQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTg1LDYgKzg1
LDcgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzIgIldo
ZXRoZXIgdG8gYnVpbGQgV2ViS2l0UGx1Z2luUHIKIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJM
RV9RVUFSVFpfVEFSR0VUICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgUXVhcnR6
IHdpbmRvd2luZyB0YXJnZXQuIiBQVUJMSUMgJHtHVEszX1NVUFBPUlRTX1FVQVJUWn0pCiBXRUJL
SVRfT1BUSU9OX0RFRklORShFTkFCTEVfWDExX1RBUkdFVCAiV2hldGhlciB0byBlbmFibGUgc3Vw
cG9ydCBmb3IgdGhlIFgxMSB3aW5kb3dpbmcgdGFyZ2V0LiIgUFVCTElDICR7R1RLM19TVVBQT1JU
U19YMTF9KQogV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dBWUxBTkRfVEFSR0VUICJXaGV0
aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgV2F5bGFuZCB3aW5kb3dpbmcgdGFyZ2V0LiIg
UFVCTElDICR7R1RLM19TVVBQT1JUU19XQVlMQU5EfSkKK1dFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9KU0NfR0xJQiAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgSmF2YVNjcmlwdENv
cmUgZ2xpYiBiaW5kaW5ncy4iIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0Vf
TElCTk9USUZZICJXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCB3ZWIgbm90aWZpY2F0aW9u
IGltcGxlbWVudGF0aW9uLiIgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0xJ
QkhZUEhFTiAiV2hldGhlciB0byBlbmFibGUgdGhlIGRlZmF1bHQgYXV0b21hdGljIGh5cGhlbmF0
aW9uIGltcGxlbWVudGF0aW9uLiIgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNF
X0xJQlNFQ1JFVCAiV2hldGhlciB0byBlbmFibGUgdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBz
dG9yYWdlIHVzaW5nIGxpYnNlY3JldC4iIFBVQkxJQyBPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4ZjY2N2RiNTQ1Y2Q4NGM0NDJiOWZhZDg1
MWE3YjRjNDhmNTI4MWE0Li40Nzg5NDIyYjE4NDUxOTFlNDkxODRlZjlkYjA3NWIzMWU1MDkzYjdk
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMTAtMjcgIEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJh
bCAgPHRldmF1bUBnbWFpbC5jb20+CisKKyAgICAgICAgW0dUS10gSW5pdGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiBKYXZhU2NyaXB0Q29yZSBnbGliIGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwNjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgc2ltcGxlIGluaXRpYWwgaW1w
bGVtZW50YXRpb24gb2YgYSBKYXZhU2NyaXB0Q29yZSBiaW5kaW5ncworICAgICAgICBhY2NvcmRp
bmcgdG8gdGhlIGRpc2N1c3Npb24gb24gd2Via2xpdC1ndGsgbWFpbGluZyBsaXN0IHRocmVhZAor
ICAgICAgICBodHRwczovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1ndGsvMjAx
Ni1PY3RvYmVyLzAwMjgzNC5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVh
dHVyZUxpc3QucG06IEFkZGVkIGpzYy1nbGliIG9wdGlvbiBhbmQgZW5hYmxpbmcgb24gR1RLIHBv
cnQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IEFkZGVkIHJ1
bGVzIHRvIGlnbm9yZSBuZXcgSlNDIHB1YmxpYyBoZWFkZXIgZmlsZXMKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6IEFkZGVkIHRlc3RzIHRvIHRo
ZSBuZXcgcnVsZXMKKwogMjAxNi0xMC0xOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CiAKICAgICAgICAgV2ViUlRDOiBbR1RLXSBVcGRhdGUgamhidWlsZCBlbnZpcm9u
bWVudCBmb3IgT3BlbldlYlJUQwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJs
L0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBt
CmluZGV4IDFiYjU0OGRmMjM4Y2RlYmY0NGI2MTcxZTU2ODg4ZDE0NjkwYzFmYTcuLmU5NDc4OTA4
ZTFjMGFmNjMyZTY3OTAwMzEzZjQ4YTgzYTQ3ZDBkODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0KQEAgLTQ2NSw2ICs0NjUsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAK
ICAgICB7IG9wdGlvbiA9PiAieHNsdCIsIGRlc2MgPT4gIlRvZ2dsZSBYU0xUIHN1cHBvcnQiLAog
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfWFNMVCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCR4
c2x0U3VwcG9ydCB9LAorCisgICAgeyBvcHRpb24gPT4gImpzYy1nbGliIiwgZGVzYyA9PiAiVG9n
Z2xlIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3Mgc3VwcG9ydCIsCisgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9KU0NfR0xJQiIsIGRlZmF1bHQgPT4gKGlzR3RrKCkpLCB2YWx1ZSA9PiBcJHhz
bHRTdXBwb3J0IH0sCiApOwogCiBzdWIgZ2V0RmVhdHVyZU9wdGlvbkxpc3QoKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IGUyZmE0ZmQzYTk3YTZjN2ZkMmI4Nzg0
M2MyNTJmYzJlYjE5N2Q4NjcuLjMzZTRiMzFiYTNjYTk3ZGYzMWRjODhjNTg3OGRjY2JlN2VlOTc2
ZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTMwNyw3ICsz
MDcsMTEgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdB
UEknLCAnZ3RrJywgJ0RPTScpLAogCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0
MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwKLSAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUn
LCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyldCisgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywg
J0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1leHRlbnNpb24uaCcpLAorCisgICAgIyBHT2JqZWN0
IGJpbmRpbmdzIGZvciBKYXZhU2NyaXB0Q29yZS4KKyAgICByZS5jb21waWxlKHJlLmVzY2FwZShv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicpICsg
b3MucGF0aC5zZXApICsgcidKU0MoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCisgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInLCAnanNjLmgn
KV0KIAogIyBGaWxlcyB0byBza2lwIHRoYXQgYXJlIG1vcmUgY29tbW9uIG9yIG9idmlvdXMuCiAj
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkK
aW5kZXggOTUwOGU5ZDNiOTRlOTIzNGIzNDQ4ZDkxZGJkNWQ2MTlkZDExMTg5MS4uYTkxNGI3YzVk
MzY5ZjkxNTVhNWU5NWQ2YWJiYWNkNDVkNzhkZmNmNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAtMjg2LDYgKzI4Niw3IEBAIGNs
YXNzIENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1VJUHJvY2VzcycsICdBUEkn
LCAnZ3RrJywgJ3dlYmtpdDIuaCcpLAogICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJLaXQyJywgJ1VJUHJvY2VzcycsICdBUEknLCAnZ3RrJywgJ1dlYktpdFdlYlZpZXcuaCcp
LAogICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1VJUHJvY2Vz
cycsICdBUEknLCAnZ3RrJywgJ1dlYktpdExvYWRlci5oJyksCisgICAgICAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQSScsICdnbGliJywgJ0pTQ0Jvb2xl
YW4uaCcpLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX3Nr
aXA6CkBAIC0zMDEsNiArMzAyLDcgQEAgY2xhc3MgQ2hlY2tlckRpc3BhdGNoZXJTa2lwVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dl
YktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnV2ViS2l0V2ViVmlld1ByaXZhdGUu
aCcpLAogICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ1Rlc3RXZWJLaXRBUEknLCAn
VGVzdHMnLCAnV2ViS2l0Mkd0aycsICdXZWJWaWV3VGVzdC5jcHAnKSwKICAgICAgICAgICAgb3Mu
cGF0aC5qb2luKCdUb29scycsICdUZXN0V2ViS2l0QVBJJywgJ1Rlc3RzJywgJ1dlYktpdDJHdGsn
LCAnV2ViVmlld1Rlc3QuaCcpLAorICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdK
YXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicsICdKU0NCb29sZWFuLmNwcCcpLAogICAgICAg
ICAgICAgXQogCiAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzX25vdF90b19za2lwOgpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDljNmVmYTQyMGZhN2Q1ODBlMTg5NjE5
NjQwMzczNjJmNjc2NWFiNTYuLjRlYjgzN2JhMjAwYTcyZTY5MjY5NGM0ODYzMTM0MzJmY2MzNTYz
ZDcgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsICA8dGV2YXVt
QGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEph
dmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGluZyB0byB0aGUg
ZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2LU9jdG9iZXIv
MDAyODM0Lmh0bWwKKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOiBB
ZGRlZCBFTkFCTEVfSlNDX0dMSUIgb3B0aW9uIGRlZmF1bHRpbmcgdG8gT0ZGCisKIDIwMTYtMTAt
MTggIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBDU1Nf
U0hBUEVTIGZlYXR1cmUgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgYWx3YXlzIGJlIG9uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293075</attachid>
            <date>2016-10-27 16:27:51 -0700</date>
            <delta_ts>2016-11-10 14:39:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161027212400.patch</filename>
            <type>text/plain</type>
            <size>59326</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi45OTc0OWVjNjJhNTJiMTg2
ZmQ3ZWMzYzg4YmMzNGIyNGRkMTU5NWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisg
ICAgICAgIGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2
LU9jdG9iZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcDogQWRkZWQuCisgICAg
ICAgICogQVBJL2dsaWIvSlNDTnVtYmVyLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIv
SlNDU3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9qc2MvSlNDQm9vbGVhbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBBUEkvZ2xpYi9qc2MvSlNDQm9vbGVhblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
QVBJL2dsaWIvanNjL0pTQ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvanNj
L0pTQ0NvbnRleHRQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL2pzYy9KU0NO
dW1iZXIuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvanNjL0pTQ051bWJlclByaXZhdGUu
aDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvanNjL0pTQ1N0cmluZy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9qc2MvSlNDU3RyaW5nUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAg
KiBBUEkvZ2xpYi9qc2MvSlNDVmFsdWUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvanNj
L0pTQ1ZhbHVlUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9qc2MvanNjLmg6
IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGRlZCBydWxlcyBmb3IgYnVp
bGRpbmcgYW5kIGluc3RhbGxpbmcgSlNDIGdsaWIgYmluZGluZ3MKKwogMjAxNi0xMC0xOSAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
QVJNIGJ1aWxkZml4IGFmdGVyIHIyMDc0NzUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDQm9vbGVhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZiZjliZGM4MTNiNWY3MTM3YjAxMDUx
NTEzMWNmZDYzNDg1MGI4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdh
bWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NCb29sZWFuLmgiCisK
KyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0
ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAq
IEBUaXRsZTogSlNDQm9vbGVhbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiAjSlNDVmFsdWUgc3Vi
dHlwZSB0byByZXByZXNlbnQgYm9vbGVhbiB2YWx1ZXMKKyAqCisgKiAjSlNDQm9vbGVhbiBpcyB0
aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgYm9vbGVhbiB2YWx1ZXMgaW5zaWRlCisgKiBKYXZh
U2NyaXB0Q29yZS4KKyAqCisgKi8KKworR19ERUZJTkVfVFlQRShKU0NCb29sZWFuLCBqc2NfYm9v
bGVhbiwgSlNDX1RZUEVfVkFMVUUpCisKK3N0YXRpYyB2b2lkCitqc2NfYm9vbGVhbl9jbGFzc19p
bml0KEpTQ0Jvb2xlYW5DbGFzcyAqKQoreworfQorCitzdGF0aWMgdm9pZAoranNjX2Jvb2xlYW5f
aW5pdChKU0NCb29sZWFuICopCit7Cit9CisKK0pTQ0Jvb2xlYW4gKgoranNjQm9vbGVhbk5ld0Zy
b21KU1ZhbHVlKEpTQ0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAg
ICBKU0NCb29sZWFuKiBib29sZWFuOworCisgICAgYm9vbGVhbiA9IChKU0NCb29sZWFuICopIGdf
b2JqZWN0X25ldyhKU0NfVFlQRV9CT09MRUFOLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpOwor
ICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZShKU0NfVkFMVUUoYm9vbGVhbiksIGpzdmFsdWUpOworCisg
ICAgcmV0dXJuIGJvb2xlYW47Cit9CisKKy8qKgorICoganNjX2Jvb2xlYW5fbmV3OgorICogQGNv
bnRleHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEB2
YWx1ZTogVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCB0aGUgI0pTQ0Jvb2xlYW4gd2lsbCByZXByZXNl
bnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNKU0NCb29sZWFuIHdpdGggQHZhbHVlIGFzIHRoZSB2
YWx1ZQorICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNKU0NCb29sZWFuIG9iamVj
dAorICovCitKU0NCb29sZWFuICoKK2pzY19ib29sZWFuX25ldyhKU0NDb250ZXh0ICpjb250ZXh0
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYganNjb250ZXh0OworICAgIEpT
VmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihqc2NvbnRleHQs
IHZhbHVlKTsKKworICAgIHJldHVybiBqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoY29udGV4dCwg
anN2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWZjNDVhMDRjMGMxODU0YTRlNmQ0ODc1YjBkZDQwODk5MTgyNzVh
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0ND
b250ZXh0LmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBF
c3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorCisjaW5jbHVkZSAiSlND
Qm9vbGVhblByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkpTQ051bWJlclByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NTdHJpbmdQcml2YXRlLmgiCisj
aW5jbHVkZSAiSlNDVmFsdWUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTU3RyaW5nUmVmLmg+CisKKy8qKgorICogU0VDVElPTjogSlNDQ29udGV4dAorICog
QFNob3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0Q29yZSBleGVjdXRpb24gY29udGV4dAorICog
QFRpdGxlOiBKU0NDb250ZXh0CisgKgorICogQSAjSlNDQ29udGV4dCBpcyB0aGUgY2VudHJhbCBj
bGFzcyBvZiB0aGUgSmF2YVNjcmlwdENvcmUgQVBJLiBJdCBpcworICogcmVzcG9uc2libGUgZm9y
IGV2YWx1YXRpb24gb2Ygc2NyaXB0cyBpbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQsCisgKiBzZXR0
aW5nIGFuZCBnZXR0aW5nIHZhbHVlcyBmcm9tIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgdG8g
bWFrZQorICogbmF0aXZlIG9iamVjdHMsIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBhY2Nlc3NpYmxl
IHRvIEphdmFTY3JpcHQuCisgKgorICovCisKK3N0cnVjdCBfSlNDQ29udGV4dFByaXZhdGUgewor
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0OworICAgIEpTT2JqZWN0UmVmIG9iamVjdDsK
KworICAgIEdMaXN0KiB2YWx1ZXM7Cit9OworCitHX0RFRklORV9UWVBFX1dJVEhfUFJJVkFURShK
U0NDb250ZXh0LCBqc2NfY29udGV4dCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQKK2pz
Y0NvbnRleHREaXNwb3NlKEdPYmplY3QqIG9iaikKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSog
cHJpdjsKKworICAgIHByaXYgPSAoSlNDQ29udGV4dFByaXZhdGUqKSBqc2NfY29udGV4dF9nZXRf
aW5zdGFuY2VfcHJpdmF0ZShKU0NfQ09OVEVYVChvYmopKTsKKworICAgIGdfbGlzdF9mcmVlX2Z1
bGwocHJpdi0+dmFsdWVzLCBnX29iamVjdF91bnJlZik7CisKKyAgICBpZiAoIXByaXYtPmNvbnRl
eHQpIHsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShwcml2LT5jb250ZXh0KTsKKyAg
ICAgICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPm9iamVjdCA9IG51
bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX2NvbnRleHRfcGFyZW50X2Ns
YXNzKS0+ZGlzcG9zZShvYmopOworfQorCitzdGF0aWMgdm9pZAoranNjX2NvbnRleHRfY2xhc3Nf
aW5pdChKU0NDb250ZXh0Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xh
c3M7CisKKyAgICBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmpDbGFz
cy0+ZGlzcG9zZSA9IGpzY0NvbnRleHREaXNwb3NlOworfQorCitzdGF0aWMgdm9pZAoranNjX2Nv
bnRleHRfaW5pdChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEpTQ0NvbnRleHRQcml2YXRl
KiBwcml2OworCisgICAgcHJpdiA9IChKU0NDb250ZXh0UHJpdmF0ZSopIGpzY19jb250ZXh0X2dl
dF9pbnN0YW5jZV9wcml2YXRlKGNvbnRleHQpOworICAgIHByaXYtPmNvbnRleHQgPSBKU0dsb2Jh
bENvbnRleHRDcmVhdGUobnVsbHB0cik7CisgICAgcHJpdi0+b2JqZWN0ID0gSlNDb250ZXh0R2V0
R2xvYmFsT2JqZWN0KHByaXYtPmNvbnRleHQpOworICAgIHByaXYtPnZhbHVlcyA9IG51bGxwdHI7
Cit9CisKK0pTR2xvYmFsQ29udGV4dFJlZgoranNjQ29udGV4dEdldEpTQ29udGV4dChKU0NDb250
ZXh0KiBjb250ZXh0KQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2OworCisgICAgcHJp
diA9IChKU0NDb250ZXh0UHJpdmF0ZSopIGpzY19jb250ZXh0X2dldF9pbnN0YW5jZV9wcml2YXRl
KGNvbnRleHQpOworICAgIHJldHVybiBwcml2LT5jb250ZXh0OworfQorCisvKioKKyAqIGpzY19j
b250ZXh0X25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNKU0NDb250ZXh0IGVudmlyb25tZW50
IHRvIGV4ZWN1dGUgSmF2YVNjcmlwdAorICogY29kZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3
bHkgY3JlYXRlZCAjSlNDQ29udGV4dCBvYmplY3QKKyAqLworSlNDQ29udGV4dCoKK2pzY19jb250
ZXh0X25ldyh2b2lkKQoreworICAgIHJldHVybiAoSlNDQ29udGV4dCopIGdfb2JqZWN0X25ldyhK
U0NfVFlQRV9DT05URVhULCBudWxscHRyKTsKK30KKworc3RhdGljIEpTQ1ZhbHVlKgoranNWYWx1
ZVRvSlNDVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQorewor
ICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2OworCisgICAgcHJpdiA9IChKU0NDb250ZXh0UHJp
dmF0ZSopIGpzY19jb250ZXh0X2dldF9pbnN0YW5jZV9wcml2YXRlKGNvbnRleHQpOworCisgICAg
aWYgKEpTVmFsdWVJc1N0cmluZyhwcml2LT5jb250ZXh0LCBqc3ZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIEpTQ19WQUxVRShqc2NTdHJpbmdOZXdGcm9tSlNWYWx1ZShjb250ZXh0LCBqc3ZhbHVlKSk7
CisKKyAgICBpZiAoSlNWYWx1ZUlzQm9vbGVhbihwcml2LT5jb250ZXh0LCBqc3ZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIEpTQ19WQUxVRShqc2NCb29sZWFuTmV3RnJvbUpTVmFsdWUoY29udGV4dCwg
anN2YWx1ZSkpOworICAgIAorICAgIGlmIChKU1ZhbHVlSXNOdW1iZXIocHJpdi0+Y29udGV4dCwg
anN2YWx1ZSkpCisgICAgICAgIHJldHVybiBKU0NfVkFMVUUoanNjTnVtYmVyTmV3RnJvbUpTVmFs
dWUoY29udGV4dCwganN2YWx1ZSkpOworCisgICAgaWYgKEpTVmFsdWVJc1VuZGVmaW5lZChwcml2
LT5jb250ZXh0LCBqc3ZhbHVlKSB8fCBKU1ZhbHVlSXNOdWxsKHByaXYtPmNvbnRleHQsIGpzdmFs
dWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZ2V0X3ZhbHVlOgorICogQGNvbnRleHQ6IHRo
ZSAjSlNDQ29udGV4dCB0aGF0IHRoZSB2YWx1ZSB3aWxsIGJlIHJldHJpZXZlZCBmcm9tCisgKiBA
bmFtZTogdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBvYmplY3QgcHJvcGVydHkgdGhhdCB3aWxsIGJl
IHJldHJpZXZlZAorICoKKyAqIFJldHJpZXZlcyBwcm9wZXJ0aWVzIGZyb20gdGhlIEphdmFTY3Jp
cHQgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSAjSlNDQ29udGV4dC4gVmFs
dWVzIGFyZSByZXByZXNlbnRlZCBieSBzdWJ0eXBlcyBvZiBKU0NWYWx1ZS4KKyAqCisgKiBSZXR1
cm5zOiBBIEpTQ1ZhbHVlIHN1YnR5cGUgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGUgcmVx
dWVzdGVkIHByb3BlcnR5CisgKi8KK0pTQ1ZhbHVlKgoranNjX2NvbnRleHRfZ2V0X3ZhbHVlKEpT
Q0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgSlNDQ29udGV4dFBy
aXZhdGUqIHByaXY7CisgICAgSlNTdHJpbmdSZWYgc3RyTmFtZTsKKyAgICBKU1ZhbHVlUmVmIGpz
dmFsdWU7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworCisgICAgcHJpdiA9
IChKU0NDb250ZXh0UHJpdmF0ZSopIGpzY19jb250ZXh0X2dldF9pbnN0YW5jZV9wcml2YXRlKGNv
bnRleHQpOworCisgICAgc3RyTmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG5h
bWUpOworICAgIGpzdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KHByaXYtPmNvbnRleHQsIHBy
aXYtPm9iamVjdCwgc3RyTmFtZSwgJmV4Y2VwdGlvbik7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0
ck5hbWUpOworCisgICAgcmV0dXJuIGpzVmFsdWVUb0pTQ1ZhbHVlKGNvbnRleHQsIGpzdmFsdWUp
OworfQorCisvKioKKyAqIGpzY19jb250ZXh0X3NldF92YWx1ZToKKyAqIEBjb250ZXh0OiB0aGUg
I0pTQ0NvbnRleHQgd2hlcmUgdGhlIHZhbHVlIHdpbGwgYmUgc2V0CisgKiBAbmFtZTogdGhlIG5h
bWUgb2YgdGhlIGdsb2JhbCBvYmplY3QgcHJvcGVydHkgdGhhdCB3aWxsIGJlIHNldAorICogQHZh
bHVlOiB0aGUgdmFsdWUKKyAqCisgKiBTZXRzIHByb3BlcnRpZXMgaW4gdGhlIEphdmFTY3JpcHQg
Z2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSAjSlNDQ29udGV4dC4gVmFsdWVz
IGFyZSByZXByZXNlbnRlZCBieSBzdWJ0eXBlcyBvZiBKU0NWYWx1ZS4KKyAqLwordm9pZAoranNj
X2NvbnRleHRfc2V0X3ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBuYW1l
LCBKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXY7CisgICAg
SlNWYWx1ZVJlZiBqc3ZhbHVlOworCisgICAgcHJpdiA9IChKU0NDb250ZXh0UHJpdmF0ZSopIGpz
Y19jb250ZXh0X2dldF9pbnN0YW5jZV9wcml2YXRlKGNvbnRleHQpOworCisgICAgaWYgKGdfb2Jq
ZWN0X2lzX2Zsb2F0aW5nKHZhbHVlKSkgeworICAgICAgICBnX29iamVjdF9yZWZfc2luayh2YWx1
ZSk7CisgICAgICAgIHByaXYtPnZhbHVlcyA9IGdfbGlzdF9hcHBlbmQocHJpdi0+dmFsdWVzLCB2
YWx1ZSk7CisgICAgfQorCisgICAganN2YWx1ZSA9IGpzY1ZhbHVlR2V0SlNWYWx1ZSh2YWx1ZSk7
CisgICAgSlNTdHJpbmdSZWYgc3RyTmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG5hbWUpOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkocHJpdi0+Y29udGV4dCwgcHJpdi0+b2Jq
ZWN0LCBzdHJOYW1lLCBqc3ZhbHVlLAorICAgICAgICBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5LCBudWxscHRyKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyTmFtZSk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4NWY2
M2VkOGYzOTQ4MzU0ZmRkNTc1NzljYzI4MWQzYWRmNjA4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcApAQCAtMCwwICsxLDk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlv
IEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU0NOdW1iZXIuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWVQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVl
UmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NOdW1iZXIKKyAqIEBTaG9ydF9kZXNjcmlwdGlv
bjogI0pTQ1ZhbHVlIHN1YnR5cGUgdG8gcmVwcmVzZW50IG51bWVyaWMgdmFsdWVzCisgKgorICog
I0pTQ051bWJlciBpcyB0aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgbnVtZXJpYyB2YWx1ZXMg
aW5zaWRlCisgKiBKYXZhU2NyaXB0Q29yZS4KKyAqCisgKi8KKworR19ERUZJTkVfVFlQRShKU0NO
dW1iZXIsIGpzY19udW1iZXIsIEpTQ19UWVBFX1ZBTFVFKQorCitzdGF0aWMgdm9pZAoranNjX251
bWJlcl9jbGFzc19pbml0KEpTQ051bWJlckNsYXNzKikKK3sKK30KKworc3RhdGljIHZvaWQKK2pz
Y19udW1iZXJfaW5pdChKU0NOdW1iZXIqKQoreworfQorCitKU0NOdW1iZXIgKgoranNjTnVtYmVy
TmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc3ZhbHVlKQor
eworICAgIEpTQ051bWJlciogdmFsdWU7CisKKyAgICB2YWx1ZSA9IChKU0NOdW1iZXIqKSBnX29i
amVjdF9uZXcoSlNDX1RZUEVfTlVNQkVSLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpOworICAg
IGpzY1ZhbHVlU2V0SlNWYWx1ZShKU0NfVkFMVUUodmFsdWUpLCBqc3ZhbHVlKTsKKworICAgIHJl
dHVybiB2YWx1ZTsKK30KKworSlNDTnVtYmVyKgoranNjX251bWJlcl9uZXcoSlNDQ29udGV4dCog
Y29udGV4dCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYganNjb250ZXh0Owor
ICAgIEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKGpzY29u
dGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJuIGpzY051bWJlck5ld0Zyb21KU1ZhbHVlKGNvbnRl
eHQsIGpzdmFsdWUpOworfQorCitKU0NOdW1iZXIqCitqc2NfbnVtYmVyX25ld19pbnQzMihKU0ND
b250ZXh0KiBjb250ZXh0LCBnaW50IHZhbHVlKQoreworICAgIEpTQ29udGV4dFJlZiBqc2NvbnRl
eHQ7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisgICAganNjb250ZXh0ID0ganNjQ29udGV4
dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBqc3ZhbHVlID0gSlNWYWx1ZU1ha2VOdW1iZXIo
anNjb250ZXh0LCB2YWx1ZSk7CisKKyAgICByZXR1cm4ganNjTnVtYmVyTmV3RnJvbUpTVmFsdWUo
Y29udGV4dCwganN2YWx1ZSk7Cit9CisKK0pTQ051bWJlcioKK2pzY19udW1iZXJfbmV3X3VpbnQz
MihKU0NDb250ZXh0KiBjb250ZXh0LCBndWludCB2YWx1ZSkKK3sKKyAgICBKU0NvbnRleHRSZWYg
anNjb250ZXh0OworICAgIEpTVmFsdWVSZWYganN2YWx1ZTsKKworICAgIGpzY29udGV4dCA9IGpz
Y0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtl
TnVtYmVyKGpzY29udGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJuIGpzY051bWJlck5ld0Zyb21K
U1ZhbHVlKGNvbnRleHQsIGpzdmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDU3RyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWI5NWVhYWRmNmZlZDRhMzRjMzE5YjMx
MDcxYTljMzllZDI0MjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1N0cmluZy5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1p
bC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgiCisKKyNp
bmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDU3RyaW5nCisg
KiBAU2hvcnRfZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBzdHJp
bmdzCisgKgorICogI0pTQ1N0cmluZyBpcyB0aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgc3Ry
aW5nIHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLworCitHX0RFRklO
RV9UWVBFKEpTQ1N0cmluZywganNjX3N0cmluZywgSlNDX1RZUEVfVkFMVUUpCisKK3N0YXRpYyB2
b2lkCitqc2Nfc3RyaW5nX2NsYXNzX2luaXQoSlNDU3RyaW5nQ2xhc3MgKikKK3sKK30KKworc3Rh
dGljIHZvaWQKK2pzY19zdHJpbmdfaW5pdChKU0NTdHJpbmcgKikKK3sKK30KKworSlNDU3RyaW5n
ICoKK2pzY1N0cmluZ05ld0Zyb21KU1ZhbHVlKEpTQ0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWVS
ZWYganN2YWx1ZSkKK3sKKyAgICBKU0NTdHJpbmcqIHN0cmluZzsKKworICAgIHN0cmluZyA9IChK
U0NTdHJpbmcgKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX1NUUklORywgImNvbnRleHQiLCBjb250
ZXh0LCBOVUxMKTsKKyAgICBqc2NWYWx1ZVNldEpTVmFsdWUoSlNDX1ZBTFVFKHN0cmluZyksIGpz
dmFsdWUpOworCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworLyoqCisgKiBqc2Nfc3RyaW5nX25l
dzoKKyAqIEBjb250ZXh0OiBUaGUgI0pTQ0NvbnRleHQgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHZh
bHVlCisgKiBAc3RyOiBUaGUgc3RyaW5nIHRoYXQgdGhlICNKU0NTdHJpbmcgd2lsbCByZXByZXNl
bnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNKU0NTdHJpbmcgd2l0aCBAc3RyIGFzIHRoZSB2YWx1
ZQorICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNKU0NTdHJpbmcgb2JqZWN0Cisg
Ki8KK0pTQ1N0cmluZyAqCitqc2Nfc3RyaW5nX25ldyhKU0NDb250ZXh0ICpjb250ZXh0LCBjb25z
dCBnY2hhciAqc3RyKQoreworICAgIEpTQ29udGV4dFJlZiBqc2NvbnRleHQ7CisgICAgSlNTdHJp
bmdSZWYgdmFsdWU7CisgICAgSlNWYWx1ZVJlZiBqc3ZhbHVlOworCisgICAganNjb250ZXh0ID0g
anNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICB2YWx1ZSA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHN0cik7CisgICAganN2YWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5n
KGpzY29udGV4dCwgdmFsdWUpOworICAgIEpTU3RyaW5nUmVsZWFzZSh2YWx1ZSk7CisKKyAgICBy
ZXR1cm4ganNjU3RyaW5nTmV3RnJvbUpTVmFsdWUoY29udGV4dCwganN2YWx1ZSk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjA1
Y2ExYjExMTMzYjJiMjI4N2E0YmQ1M2Y2NjY1N2Q2Yjg4Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMCwwICsxLDI4
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3Bp
byBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKyNpbmNsdWRlICJKU0ND
b250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ051bWJlci5oIgorI2luY2x1ZGUgIkpTQ1N0
cmluZy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogU0VDVElPTjogSlND
VmFsdWUKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQmFzZSBjbGFzcyByZXByZXNlbnRpbmcgSmF2
YVNjcmlwdENvcmUgdmFsdWVzCisgKiBAVGl0bGU6IEpTQ1ZhbHVlCisgKgorICogI0pTQ1ZhbHVl
IGlzIHRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IHZhbHVlcyBpbnNpZGUKKyAqIEph
dmFTY3JpcHRDb3JlLiBBY3R1YWwgdmFsdWVzIGFyZSBzdWJ0eXBlcyBvZiB0aGlzIGNsYXNzLiBU
aGUKKyAqIGN1cnJlbnQgc3ViY2xhc3NlcyBhcmU6ICNKU0NTdHJpbmcsICNKU0NOdW1iZXIgYW5k
ICNKU0NCb29sZWFuLgorICoKKyAqLworCitzdHJ1Y3QgX0pTQ1ZhbHVlUHJpdmF0ZSB7CisgICAg
SlNDQ29udGV4dCoganNjQ29udGV4dDsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dDsK
KyAgICBKU1ZhbHVlUmVmIHZhbHVlOworfTsKKworR19ERUZJTkVfVFlQRV9XSVRIX1BSSVZBVEUo
SlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX0lOSVRJQUxMWV9VTk9XTkVEKQorCitlbnVtIHsK
KyAgICBrUFJPUF8wLAorCisgICAga1BST1BfQ09OVEVYVCwKK307CisKK3N0YXRpYyB2b2lkCitq
c2NWYWx1ZUdldFByb3BlcnR5KEdPYmplY3QqIG9iaiwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1fc3BlYykKK3sKKyAgICBKU0NWYWx1ZSogdmFsID0gSlND
X1ZBTFVFKG9iaik7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0
ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsKTsKKworICAgIHN3aXRjaCAo
cHJvcF9pZCkgeworICAgIGNhc2Uga1BST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCBnX29iamVjdF9yZWYocHJpdi0+anNjQ29udGV4dCkpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqLCBwcm9wX2lkLCBwYXJhbV9zcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
Citqc2NWYWx1ZVNldFByb3BlcnR5KEdPYmplY3QqIG9iaiwgZ3VpbnQgcHJvcF9pZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1fc3BlYykKK3sKKyAgICBKU0NWYWx1ZSog
dmFsID0gSlNDX1ZBTFVFKG9iaik7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gKEpTQ1Zh
bHVlUHJpdmF0ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWwpOworCisgICAg
c3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBrUFJPUF9DT05URVhUOiB7CisgICAgICAgIEpT
Q0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUp
KTsKKyAgICAgICAgcHJpdi0+anNjQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIHByaXYtPmNv
bnRleHQgPSBjb250ZXh0ID8ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSA6IG51bGxw
dHI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBwcm9wX2lkLCBwYXJhbV9zcGVjKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkCitqc2NWYWx1ZURpc3Bvc2UoR09iamVjdCogb2JqKQorewor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2YXRl
KikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRlKEpTQ19WQUxVRShvYmopKTsKKyAgICBp
ZiAocHJpdi0+dmFsdWUgIT0gbnVsbHB0cikgeworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KHBy
aXYtPmNvbnRleHQsIHByaXYtPnZhbHVlKTsKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IG51bGxw
dHI7CisgICAgICAgIHByaXYtPnZhbHVlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHX09CSkVD
VF9DTEFTUyhqc2NfdmFsdWVfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmopOworfQorCitzdGF0
aWMgdm9pZAoranNjX3ZhbHVlX2NsYXNzX2luaXQoSlNDVmFsdWVDbGFzcyAqa2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBvYmpDbGFzczsKKworICAgIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworCisgICAgb2JqQ2xhc3MtPmdldF9wcm9wZXJ0eSA9IGpzY1ZhbHVlR2V0UHJv
cGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0eSA9IGpzY1ZhbHVlU2V0UHJvcGVydHk7
CisgICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NWYWx1ZURpc3Bvc2U7CisKKyAgICAvKioKKyAg
ICAgKiBKU0NWYWx1ZTpjb250ZXh0OgorICAgICAqCisgICAgICogVGhlICNKU0NDb250ZXh0IG9m
IHRoZSB2YWx1ZS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iakNsYXNzLAorICAgICAgICBrUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KCJjb250ZXh0IiwKKyAgICAgICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICJK
YXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBFX0NPTlRF
WFQsCisgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK3N0YXRpYyB2b2lkCitqc2NfdmFsdWVfaW5pdChK
U0NWYWx1ZSopCit7Cit9CisKK0pTVmFsdWVSZWYKK2pzY1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1
ZSogdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0
ZSopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisKKyAgICByZXR1cm4g
cHJpdi0+dmFsdWU7Cit9CisKK3ZvaWQKK2pzY1ZhbHVlU2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFs
dWUsIEpTVmFsdWVSZWYganN2YWx1ZSkKK3sKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXY7Cisg
ICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZh
dGUodmFsdWUpOworCisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2LT5jb250ZXh0ICE9IG51bGxw
dHIpOworCisgICAgaWYgKHByaXYtPnZhbHVlICE9IG51bGxwdHIpIHsKKyAgICAgICAgSlNWYWx1
ZVVucHJvdGVjdChwcml2LT5jb250ZXh0LCBwcml2LT52YWx1ZSk7CisgICAgICAgIHByaXYtPnZh
bHVlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBwcml2LT52YWx1ZSA9IGpzdmFsdWU7CisgICAg
SlNWYWx1ZVByb3RlY3QocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpOworfQorCitKU0NWYWx1
ZSoKK2pzY1ZhbHVlTmV3RnJvbUpTVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJl
ZiBqc3ZhbHVlKQoreworICAgIEpTQ1ZhbHVlKiB2YWx1ZTsKKworICAgIHZhbHVlID0gKEpTQ1Zh
bHVlKikgZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZBTFVFLCAiY29udGV4dCIsIGNvbnRleHQsIG51
bGxwdHIpOworICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZSh2YWx1ZSwganN2YWx1ZSk7CisKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2dldF9zdHJpbmc6CisgKiBAdmFs
dWU6IHRoZSAjSlNDVmFsdWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1ZQorICoKKyAqIFJl
dHJpZXZlcyB0aGUgc3RyaW5nIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0dXJuczogZ2NoYXIq
CisgKi8KK2NvbnN0IGdjaGFyKgoranNjX3ZhbHVlX2dldF9zdHJpbmcoSlNDVmFsdWUqIHZhbHVl
KQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKyAgICBKU1N0cmluZ1JlZiBzdHJWYWx1
ZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGdjaGFyKiBidWZmOworCisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoSlNDX0lTX1NUUklORyh2YWx1ZSksIG51bGxwdHIpOworCisgICAgcHJpdiA9
IChKU0NWYWx1ZVByaXZhdGUqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3ByaXZhdGUodmFsdWUp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTVmFsdWVJc1N0cmluZyhwcml2LT5jb250ZXh0
LCBwcml2LT52YWx1ZSksIG51bGxwdHIpOworCisgICAgc3RyVmFsdWUgPSBKU1ZhbHVlVG9TdHJp
bmdDb3B5KHByaXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRyKTsKKyAgICBsZW5ndGgg
PSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyVmFsdWUpOworICAgIGJ1ZmYg
PSAoZ2NoYXIqKSBnX21hbGxvYzAobGVuZ3RoKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5n
KHN0clZhbHVlLCBidWZmLCBsZW5ndGgpOworICAgIEpTU3RyaW5nUmVsZWFzZShzdHJWYWx1ZSk7
CisgICAgCisgICAgcmV0dXJuIGdfc3RyZHVwKGJ1ZmYpOworfQorCisvKioKKyAqIGpzY192YWx1
ZV9nZXRfYm9vbGVhbjoKKyAqIEB2YWx1ZTogdGhlICNKU0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5p
bmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBib29sZWFuIHZhbHVlIGZyb20gI0pT
Q1ZhbHVlCisgKgorICogUmV0dXJuczogZ2Jvb2xlYW4KKyAqLworZ2Jvb2xlYW4KK2pzY192YWx1
ZV9nZXRfYm9vbGVhbihKU0NWYWx1ZSAqdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBw
cml2OworCisgICAgZ19hc3NlcnQoSlNDX0lTX0JPT0xFQU4odmFsdWUpKTsKKworICAgIHByaXYg
PSAoSlNDVmFsdWVQcml2YXRlICopIGpzY192YWx1ZV9nZXRfaW5zdGFuY2VfcHJpdmF0ZSh2YWx1
ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihwcml2LT5jb250ZXh0LCBwcml2LT52
YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4ocHJpdi0+Y29udGV4dCwgcHJp
di0+dmFsdWUpOworfQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfZG91YmxlOgorICogQHZhbHVl
OiB0aGUgI0pTQ1ZhbHVlIHN1YnR5cGUgY29udGFpbmluZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRy
aWV2ZXMgdGhlIG51bWVyaWMgKGRvdWJsZSkgdmFsdWUgZnJvbSAjSlNDVmFsdWUKKyAqCisgKiBS
ZXR1cm5zOiBnYm9vbGVhbgorICovCitnZG91YmxlCitqc2NfdmFsdWVfZ2V0X2RvdWJsZShKU0NW
YWx1ZSAqdmFsdWUpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2OworCisgICAgZ19hc3Nl
cnQoSlNDX0lTX05VTUJFUih2YWx1ZSkpOworCisgICAgcHJpdiA9IChKU0NWYWx1ZVByaXZhdGUg
KikganNjX3ZhbHVlX2dldF9pbnN0YW5jZV9wcml2YXRlKHZhbHVlKTsKKyAgICBnX2Fzc2VydChK
U1ZhbHVlSXNOdW1iZXIocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUpKTsKKworICAgIHJldHVy
biBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+Y29udGV4dCwgcHJpdi0+dmFsdWUsIG51bGxwdHIpOwor
fQorCisvKioKKyAqIGpzY192YWx1ZV9nZXRfaW50MzI6CisgKiBAdmFsdWU6IHRoZSAjSlNDVmFs
dWUgc3VidHlwZSBjb250YWluaW5nIHRoZSB2YWx1ZQorICoKKyAqIFJldHJpZXZlcyB0aGUgbnVt
ZXJpYyAoaW50KSB2YWx1ZSBmcm9tICNKU0NWYWx1ZQorICoKKyAqIFJldHVybnM6IGdib29sZWFu
CisgKi8KK2dpbnQKK2pzY192YWx1ZV9nZXRfaW50MzIoSlNDVmFsdWUgKnZhbHVlKQoreworICAg
IEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIodmFs
dWUpKTsKKworICAgIHByaXYgPSAoSlNDVmFsdWVQcml2YXRlICopIGpzY192YWx1ZV9nZXRfaW5z
dGFuY2VfcHJpdmF0ZSh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKHByaXYt
PmNvbnRleHQsIHByaXYtPnZhbHVlKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKHBy
aXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRyKTsKK30KKworLyoqCisgKiBqc2NfdmFs
dWVfZ2V0X3VpbnQzMjoKKyAqIEB2YWx1ZTogdGhlICNKU0NWYWx1ZSBzdWJ0eXBlIGNvbnRhaW5p
bmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBudW1lcmljICh1bnNpZ25lZCBpbnQp
IHZhbHVlIGZyb20gI0pTQ1ZhbHVlCisgKgorICogUmV0dXJuczogZ2Jvb2xlYW4KKyAqLworZ3Vp
bnQKK2pzY192YWx1ZV9nZXRfdWludDMyKEpTQ1ZhbHVlICp2YWx1ZSkKK3sKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXY7CisKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHZhbHVlKSk7CisK
KyAgICBwcml2ID0gKEpTQ1ZhbHVlUHJpdmF0ZSAqKSBqc2NfdmFsdWVfZ2V0X2luc3RhbmNlX3By
aXZhdGUodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFsdWVJc051bWJlcihwcml2LT5jb250ZXh0
LCBwcml2LT52YWx1ZSkpOworCisgICAgcmV0dXJuIChndWludCkgSlNWYWx1ZVRvTnVtYmVyKHBy
aXYtPmNvbnRleHQsIHByaXYtPnZhbHVlLCBudWxscHRyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDQm9vbGVhbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL2pzYy9KU0NCb29sZWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY0NmIzMDEy
ZjdkYTAyOWE5OWI0ZDZlODM5YjE4MmM3NGYwYjczOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDQm9vbGVhbi5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8g
QW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBKU0NfVFlQRV9CT09MRUFOICAgICAgICAgICAgKGpzY19ib29sZWFuX2dldF90
eXBlKCkpCisjZGVmaW5lIEpTQ19CT09MRUFOKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX0JPT0xFQU4sIEpTQ0Jvb2xlYW4pKQorI2Rl
ZmluZSBKU0NfSVNfQk9PTEVBTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBKU0NfVFlQRV9CT09MRUFOKSkKKyNkZWZpbmUgSlNDX0JPT0xFQU5fQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQk9P
TEVBTiwgSlNDQm9vbGVhbkNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX0JPT0xFQU5fQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQk9PTEVBTikp
CisKK3R5cGVkZWYgc3RydWN0IF9KU0NCb29sZWFuICAgICAgICBKU0NCb29sZWFuOwordHlwZWRl
ZiBzdHJ1Y3QgX0pTQ0Jvb2xlYW5DbGFzcyAgIEpTQ0Jvb2xlYW5DbGFzczsKKworc3RydWN0IF9K
U0NCb29sZWFuIHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ0Jvb2xl
YW5DbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0pTX0VYUE9S
VCBHVHlwZQoranNjX2Jvb2xlYW5fZ2V0X3R5cGUgKHZvaWQpOworCitKU19FWFBPUlQgSlNDQm9v
bGVhbioKK2pzY19ib29sZWFuX25ldyAgICAgIChKU0NDb250ZXh0KiwgZ2Jvb2xlYW4gdmFsdWUp
OworCitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL2pzYy9KU0NCb29sZWFuUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL2pzYy9KU0NCb29sZWFuUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MTczNjAyNzlmY2M3NmY5
NmRiY2FmMTUwNTIwY2RiNjBmMGUyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvanNjL0pTQ0Jvb2xlYW5Qcml2YXRlLmgKQEAgLTAsMCArMSwyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBB
bWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0Jv
b2xlYW4uaCIKKworSlNfRVhQT1JUIEpTQ0Jvb2xlYW4qCitqc2NCb29sZWFuTmV3RnJvbUpTVmFs
dWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL2pzYy9KU0NDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvanNjL0pTQ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzgzMzU5ZWJkMDg3ZjI2MmJh
YTA1NDA5ZTAwNzlkOGRiYzAwMzUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL2pzYy9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRl
dmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ09OVEVYVCAgICAgICAg
ICAgIChqc2NfY29udGV4dF9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfQ09OVEVYVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DT05U
RVhULCBKU0NDb250ZXh0KSkKKyNkZWZpbmUgSlNDX0lTX0NPTlRFWFQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfQ09OVEVYVCkpCisjZGVm
aW5lIEpTQ19DT05URVhUX0NMQVNTKGNsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQsIEpTQ0NvbnRleHRDbGFzcykpCisjZGVmaW5lIEpT
Q19JU19DT05URVhUX0NMQVNTKGNsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIEpTQ19UWVBFX0NPTlRFWFQpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dCAgICAg
ICAgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgICBKU0NDb250
ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dFByaXZhdGUgSlNDQ29udGV4dFBy
aXZhdGU7CisKK3N0cnVjdCBfSlNDQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAg
ICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfSlNDQ29udGV4dENsYXNz
IHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitKU19FWFBPUlQgR1R5cGUK
K2pzY19jb250ZXh0X2dldF90eXBlICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NDb250ZXh0ICoK
K2pzY19jb250ZXh0X25ldyAgICAgICAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NWYWx1ZSAqCitq
c2NfY29udGV4dF9nZXRfdmFsdWUgKEpTQ0NvbnRleHQqLCBjb25zdCBnY2hhciAqbmFtZSk7CisK
K0pTX0VYUE9SVCB2b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUgKEpTQ0NvbnRleHQqLCBjb25z
dCBnY2hhciAqbmFtZSwgSlNDVmFsdWUqKTsKKworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDQ29udGV4dFByaXZhdGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDQ29udGV4dFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZTY4YmQ5ZTUyMzY2OGY5MDMwMTM5NTIwZjE4ZmIzMTUyMmU1MGE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy9KU0NDb250ZXh0
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0
w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisKK0pTX0VYUE9SVCBKU0dsb2JhbENv
bnRleHRSZWYKK2pzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29udGV4dCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy9KU0NOdW1iZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDTnVtYmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc2
MWNmMTU2ODJlNjcyMDVmNWZhMWNlYjBjNTk1YmIyYWUwMTYwZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDTnVtYmVyLmgKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PD
s3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIEpTQ19UWVBFX05VTUJFUiAgICAgICAgICAgIChqc2NfbnVtYmVyX2dl
dF90eXBlKCkpCisjZGVmaW5lIEpTQ19OVU1CRVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfTlVNQkVSLCBKU0NOdW1iZXIpKQorI2Rl
ZmluZSBKU0NfSVNfTlVNQkVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIEpTQ19UWVBFX05VTUJFUikpCisjZGVmaW5lIEpTQ19OVU1CRVJfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfTlVNQkVS
LCBKU0NOdW1iZXJDbGFzcykpCisjZGVmaW5lIEpTQ19JU19OVU1CRVJfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfTlVNQkVSKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX0pTQ051bWJlciAgICAgICAgSlNDTnVtYmVyOwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ051bWJlckNsYXNzICAgSlNDTnVtYmVyQ2xhc3M7CisKK3N0cnVjdCBfSlNDTnVtYmVyIHsK
KyAgICBKU0NWYWx1ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ051bWJlckNsYXNzIHsKKyAg
ICBKU0NWYWx1ZUNsYXNzIHBhcmVudENsYXNzOworfTsKKworSlNfRVhQT1JUIEdUeXBlCitqc2Nf
bnVtYmVyX2dldF90eXBlICAgKHZvaWQpOworCitKU19FWFBPUlQgSlNDTnVtYmVyICoKK2pzY19u
dW1iZXJfbmV3ICAgICAgICAoSlNDQ29udGV4dCosIGdkb3VibGUgdmFsdWUpOworCitKU19FWFBP
UlQgSlNDTnVtYmVyICoKK2pzY19udW1iZXJfbmV3X2ludDMyICAoSlNDQ29udGV4dCosIGdpbnQg
dmFsdWUpOworCitKU19FWFBPUlQgSlNDTnVtYmVyICoKK2pzY19udW1iZXJfbmV3X3VpbnQzMiAo
SlNDQ29udGV4dCosIGd1aW50IHZhbHVlKTsKKworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDTnVtYmVyUHJpdmF0ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy9KU0NOdW1iZXJQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTI5ZmNlNTA2Yzc3MzQyZmYwOTU4YjViMDAxNDUwZjE3ZmE4YzBmYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDTnVtYmVyUHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2
w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJKU0NOdW1iZXIuaCIKKworSlNfRVhQT1JUIEpTQ051bWJlcioKK2pz
Y051bWJlck5ld0Zyb21KU1ZhbHVlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDU3RyaW5nLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjL0pTQ1N0cmluZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3
MGRmZGVkNWExNWYzZjhmZWMyN2ZlZGMzYTg5OTgzNTU1ZWEzODAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjL0pTQ1N0cmluZy5oCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9TVFJJTkcgICAgICAgICAgICAoanNjX3N0cmluZ19n
ZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfU1RSSU5HKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1NUUklORywgSlNDU3RyaW5nKSkKKyNk
ZWZpbmUgSlNDX0lTX1NUUklORyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBKU0NfVFlQRV9TVFJJTkcpKQorI2RlZmluZSBKU0NfU1RSSU5HX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX1NUUklO
RywgSlNDU3RyaW5nQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfU1RSSU5HX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX1NUUklORykpCisKK3R5
cGVkZWYgc3RydWN0IF9KU0NTdHJpbmcgICAgICAgIEpTQ1N0cmluZzsKK3R5cGVkZWYgc3RydWN0
IF9KU0NTdHJpbmdDbGFzcyAgIEpTQ1N0cmluZ0NsYXNzOworCitzdHJ1Y3QgX0pTQ1N0cmluZyB7
CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKworc3RydWN0IF9KU0NTdHJpbmdDbGFzcyB7Cisg
ICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0pTX0VYUE9SVCBHVHlwZQoranNj
X3N0cmluZ19nZXRfdHlwZSAodm9pZCk7CisKK0pTX0VYUE9SVCBKU0NTdHJpbmcqCitqc2Nfc3Ry
aW5nX25ldyAgICAgIChKU0NDb250ZXh0KiwgY29uc3QgZ2NoYXIgKnN0cik7CisKK0dfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjL0pTQ1N0
cmluZ1ByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlNDU3Ry
aW5nUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MmNlMzMwMDRkNGFiNzhkNzRjYWE2YjliYjYwMjRk
ZjJkNTVkODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvanNjL0pTQ1N0cmluZ1ByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdh
bWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgiCisKK0pTX0VY
UE9SVCBKU0NTdHJpbmcqCitqc2NTdHJpbmdOZXdGcm9tSlNWYWx1ZShKU0NDb250ZXh0KiwgSlNW
YWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNj
L0pTQ1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjL0pTQ1ZhbHVl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTE1NzgxZDdkYjZhZDgzNzVjYTAzMWYyNTNhMjVhNjcwOWU0ODJhMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvSlND
VmFsdWUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOq
dsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX1ZBTFVFICAg
ICAgICAgICAgKGpzY192YWx1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfVkFMVUUob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfVkFM
VUUsIEpTQ1ZhbHVlKSkKKyNkZWZpbmUgSlNDX0lTX1ZBTFVFKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1ZBTFVFKSkKKyNkZWZpbmUgSlND
X1ZBTFVFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZBTFVFX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX1ZB
TFVFKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlICAgICAgICBKU0NWYWx1ZTsKK3R5cGVk
ZWYgc3RydWN0IF9KU0NWYWx1ZUNsYXNzICAgSlNDVmFsdWVDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9KU0NWYWx1ZVByaXZhdGUgSlNDVmFsdWVQcml2YXRlOworCitzdHJ1Y3QgX0pTQ1ZhbHVlIHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfSlNDVmFsdWVDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudENsYXNzOwor
fTsKKworSlNfRVhQT1JUIEdUeXBlCitqc2NfdmFsdWVfZ2V0X3R5cGUgICAgKHZvaWQpOworCitK
U19FWFBPUlQgY29uc3QgY2hhciAqCitqc2NfdmFsdWVfZ2V0X3N0cmluZyAgKEpTQ1ZhbHVlICop
OworCitKU19FWFBPUlQgZ2Jvb2xlYW4KK2pzY192YWx1ZV9nZXRfYm9vbGVhbiAoSlNDVmFsdWUg
Kik7CisKK0pTX0VYUE9SVCBnZG91YmxlCitqc2NfdmFsdWVfZ2V0X2RvdWJsZSAgKEpTQ1ZhbHVl
ICopOworCitKU19FWFBPUlQgZ2ludAoranNjX3ZhbHVlX2dldF9pbnQzMiAgIChKU0NWYWx1ZSAq
KTsKKworSlNfRVhQT1JUIGd1aW50Citqc2NfdmFsdWVfZ2V0X3VpbnQzMiAgKEpTQ1ZhbHVlICop
OworCisvKiBKU19FWFBPUlQgSlNDQ29udGV4dCAqICovCisvKiBqc2NfdmFsdWVfZ2V0X2NvbnRl
eHQgKEpTQ1ZhbHVlICp2YWx1ZSk7ICovCisKK0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjL0pTQ1ZhbHVlUHJpdmF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy9KU0NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zODAyZWVjNTY1OWZmZGU5ZmZkZmVlNDgzYzRjYTRlYjZmZDQ5OGYzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy9KU0NWYWx1ZVByaXZhdGUu
aApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBT
YW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisKK0pTX0VY
UE9SVCBKU1ZhbHVlUmVmCitqc2NWYWx1ZUdldEpTVmFsdWUoSlNDVmFsdWUqKTsKKworSlNfRVhQ
T1JUIHZvaWQKK2pzY1ZhbHVlU2V0SlNWYWx1ZShKU0NWYWx1ZSosIEpTVmFsdWVSZWYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy9qc2MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvanNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzAwNGUyYzNj
MWFiYzQwZDY2ZjcyMzc1NjkyZTBjMzg0OGZmM2I5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MvanNjLmgKQEAgLTAsMCArMSwyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwg
PHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGpzYy9KU0NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ0Jvb2xl
YW4uaD4KKyNpbmNsdWRlIDxqc2MvSlNDTnVtYmVyLmg+CisjaW5jbHVkZSA8anNjL0pTQ1N0cmlu
Zy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDQ3OTFhYmE0
OWEzYzI1NTUyOWUwMDA1ODMwZWZmMDMxNzMzMGVmNTUuLjU1YzhkZmVjNzU1YWZmN2ViYTZhODFm
YWRkNzg2ODZmMzU3ZTYzM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21h
a2UKQEAgLTQ4LDMgKzQ4LDM3IEBAIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJQlJBUklF
UwogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAke0dMSUJfSU5DTFVERV9ESVJTfQogKQorCitpZiAoRU5BQkxFX0pTQ19HTElCKQorICAg
IGluY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkv
Z2xpYgorICAgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIvanNjCisgICAgKQor
ICAgIHNldChqc2NnbGliX1NPVVJDRVMKKyAgICAgICAgQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHAK
KyAgICAgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKKyAgICAgICAgQVBJL2dsaWIvSlNDTnVt
YmVyLmNwcAorICAgICAgICBBUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCisgICAgICAgIEFQSS9nbGli
L0pTQ1ZhbHVlLmNwcAorICAgICkKKworICAgIHNldChqc2NnbGliX0hFQURFUlMKKyAgICAgICAg
QVBJL2dsaWIvanNjL0pTQ0Jvb2xlYW4uaAorICAgICAgICBBUEkvZ2xpYi9qc2MvSlNDQ29udGV4
dC5oCisgICAgICAgIEFQSS9nbGliL2pzYy9KU0NOdW1iZXIuaAorICAgICAgICBBUEkvZ2xpYi9q
c2MvSlNDU3RyaW5nLmgKKyAgICAgICAgQVBJL2dsaWIvanNjL0pTQ1ZhbHVlLmgKKyAgICAgICAg
QVBJL2dsaWIvanNjL2pzYy5oCisgICAgKQorCisgICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENv
cmVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICBBUEkvZ2xpYgorICAgICkKKyAgICBsaXN0
KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCisgICAgICAgICR7anNjZ2xpYl9TT1VSQ0VT
fQorICAgICkKKyAgICBpbnN0YWxsKEZJTEVTCisgICAgICAgICR7anNjZ2xpYl9IRUFERVJTfQor
ICAgICAgICAgICAgREVTVElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURFUl9JTlNUQUxMX0RJUn0v
anNjIgorKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNt
YWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggMTdjMmM4MmViMzQzM2Zj
Y2U2MGRkN2JlNWFjNjcxMjViODNmMzhiNC4uZmJkMDNlZDdmNzI1OTA4OTNlOGU1MzM3N2MwZGI0
M2M1YmFmZWQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTg1LDYgKzg1LDcgQEAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzIgIldoZXRoZXIgdG8gYnVp
bGQgV2ViS2l0UGx1Z2luUHIKIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9RVUFSVFpfVEFS
R0VUICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgUXVhcnR6IHdpbmRvd2luZyB0
YXJnZXQuIiBQVUJMSUMgJHtHVEszX1NVUFBPUlRTX1FVQVJUWn0pCiBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfWDExX1RBUkdFVCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhl
IFgxMSB3aW5kb3dpbmcgdGFyZ2V0LiIgUFVCTElDICR7R1RLM19TVVBQT1JUU19YMTF9KQogV0VC
S0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1dBWUxBTkRfVEFSR0VUICJXaGV0aGVyIHRvIGVuYWJs
ZSBzdXBwb3J0IGZvciB0aGUgV2F5bGFuZCB3aW5kb3dpbmcgdGFyZ2V0LiIgUFVCTElDICR7R1RL
M19TVVBQT1JUU19XQVlMQU5EfSkKK1dFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9KU0NfR0xJ
QiAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5k
aW5ncy4iIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfTElCTk9USUZZICJX
aGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCB3ZWIgbm90aWZpY2F0aW9uIGltcGxlbWVudGF0
aW9uLiIgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0xJQkhZUEhFTiAiV2hl
dGhlciB0byBlbmFibGUgdGhlIGRlZmF1bHQgYXV0b21hdGljIGh5cGhlbmF0aW9uIGltcGxlbWVu
dGF0aW9uLiIgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0xJQlNFQ1JFVCAi
V2hldGhlciB0byBlbmFibGUgdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHVzaW5n
IGxpYnNlY3JldC4iIFBVQkxJQyBPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA4ZjY2N2RiNTQ1Y2Q4NGM0NDJiOWZhZDg1MWE3YjRjNDhmNTI4
MWE0Li4zZmU3NjVmN2RkMDhhYzRhMTNkNDUxMjY4NTc5NDdhODM0MzkyMjAwIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAK
KzIwMTYtMTAtMjcgIEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCAgPHRldmF1bUBn
bWFpbC5jb20+CisKKyAgICAgICAgW0dUS10gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBKYXZh
U2NyaXB0Q29yZSBnbGliIGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgc2ltcGxlIGluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgYSBKYXZhU2NyaXB0Q29yZSBiaW5kaW5ncworICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGRp
c2N1c3Npb24gb24gd2Via2xpdC1ndGsgbWFpbGluZyBsaXN0IHRocmVhZAorICAgICAgICBodHRw
czovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1ndGsvMjAxNi1PY3RvYmVyLzAw
MjgzNC5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06
IEFkZGVkIGpzYy1nbGliIG9wdGlvbiBhbmQgZW5hYmxpbmcgb24gR1RLIHBvcnQKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IEFkZGVkIHJ1bGVzIHRvIGlnbm9y
ZSBuZXcgSlNDIHB1YmxpYyBoZWFkZXIgZmlsZXMKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6IEFkZGVkIHRlc3RzIHRvIHRoZSBuZXcgcnVsZXMK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOiBBZGRlZCB0ZXN0cyBm
b3IgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
anNjLWdsaWIvSlNDVmFsdWVzVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvanNjLWdsaWIvSlNDVmFsdWVzVGVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL2pzYy1nbGliL21haW4uY3BwOiBBZGRlZC4KKwogMjAxNi0xMC0xOCAgUGhpbGlwcGUgTm9y
bWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViUlRDOiBbR1RLXSBVcGRh
dGUgamhidWlsZCBlbnZpcm9ubWVudCBmb3IgT3BlbldlYlJUQwpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
ZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDFiYjU0OGRmMjM4Y2RlYmY0NGI2MTcxZTU2ODg4ZDE0
NjkwYzFmYTcuLmU5NDc4OTA4ZTFjMGFmNjMyZTY3OTAwMzEzZjQ4YTgzYTQ3ZDBkODQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTQ2NSw2ICs0NjUsOSBAQCBt
eSBAZmVhdHVyZXMgPSAoCiAKICAgICB7IG9wdGlvbiA9PiAieHNsdCIsIGRlc2MgPT4gIlRvZ2ds
ZSBYU0xUIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfWFNMVCIsIGRlZmF1bHQg
PT4gMSwgdmFsdWUgPT4gXCR4c2x0U3VwcG9ydCB9LAorCisgICAgeyBvcHRpb24gPT4gImpzYy1n
bGliIiwgZGVzYyA9PiAiVG9nZ2xlIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3Mgc3VwcG9y
dCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9KU0NfR0xJQiIsIGRlZmF1bHQgPT4gKGlzR3Rr
KCkpLCB2YWx1ZSA9PiBcJHhzbHRTdXBwb3J0IH0sCiApOwogCiBzdWIgZ2V0RmVhdHVyZU9wdGlv
bkxpc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IGUyZmE0
ZmQzYTk3YTZjN2ZkMmI4Nzg0M2MyNTJmYzJlYjE5N2Q4NjcuLmQ3ZTU2OTRiM2I2YjI5ZWIzYzA0
ZDk2ODc2YjEzMWI2M2NjODIyOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkKQEAgLTMwNyw3ICszMDcsMTEgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0g
WwogICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJ
bmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ0RPTScpLAogCiAgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQy
LmgnKSwKLSAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3Mn
LCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5o
JyldCisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywg
J0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1leHRlbnNpb24uaCcp
LAorCisgICAgIyBHT2JqZWN0IGJpbmRpbmdzIGZvciBKYXZhU2NyaXB0Q29yZS4KKyAgICByZS5j
b21waWxlKHJlLmVzY2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScs
ICdBUEknLCAnZ2xpYicsICdqc2MnKSArIG9zLnBhdGguc2VwKSArIHInSlNDKD8hLipQcml2YXRl
XC5oKS4qXC5oJCcpLAorICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3Jl
JywgJ0FQSScsICdnbGliJywgJ2pzYycsICdqc2MuaCcpXQogCiAjIEZpbGVzIHRvIHNraXAgdGhh
dCBhcmUgbW9yZSBjb21tb24gb3Igb2J2aW91cy4KICMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQppbmRleCA5NTA4ZTlkM2I5NGU5MjM0YjM0
NDhkOTFkYmQ1ZDYxOWRkMTExODkxLi5hOTE0YjdjNWQzNjlmOTE1NWE1ZTk1ZDZhYmJhY2Q0NWQ3
OGRmY2Y0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJf
dW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3Vu
aXR0ZXN0LnB5CkBAIC0yODYsNiArMjg2LDcgQEAgY2xhc3MgQ2hlY2tlckRpc3BhdGNoZXJTa2lw
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNl
JywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnd2Via2l0Mi5oJyksCiAg
ICAgICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywg
J0FQSScsICdndGsnLCAnV2ViS2l0V2ViVmlldy5oJyksCiAgICAgICAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnV2ViS2l0
TG9hZGVyLmgnKSwKKyAgICAgICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlw
dENvcmUnLCAnQVBJJywgJ2dsaWInLCAnSlNDQm9vbGVhbi5oJyksCiAgICAgICAgICAgICBdCiAK
ICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHNfdG9fc2tpcDoKQEAgLTMwMSw2ICszMDIsNyBAQCBj
bGFzcyBDaGVja2VyRGlzcGF0Y2hlclNraXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJ
JywgJ2d0aycsICdXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oJyksCiAgICAgICAgICAgIG9zLnBhdGgu
am9pbignVG9vbHMnLCAnVGVzdFdlYktpdEFQSScsICdUZXN0cycsICdXZWJLaXQyR3RrJywgJ1dl
YlZpZXdUZXN0LmNwcCcpLAogICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ1Rlc3RX
ZWJLaXRBUEknLCAnVGVzdHMnLCAnV2ViS2l0Mkd0aycsICdXZWJWaWV3VGVzdC5oJyksCisgICAg
ICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQSScsICdn
bGliJywgJ0pTQ0Jvb2xlYW4uY3BwJyksCiAgICAgICAgICAgICBdCiAKICAgICAgICAgZm9yIHBh
dGggaW4gcGF0aHNfbm90X3RvX3NraXA6CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCA5MWEyYzllN2JkMzEzOGNhNTA3OGNmNWE4NGM2NzEwMDlmMzVhMzgwLi5jMDVjZTcy
YTc3N2JjNWI2NDFjYmRkN2U1ZjJkN2NiYTMwNjYxOGQ2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UKQEAgLTE0OSwzICsxNDksMjEgQEAgbGlzdChBUFBFTkQgVGVzdFdURl9T
T1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dsaWIvR1VuaXF1ZVB0
ci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xpYi9Xb3JrUXVldWVH
TGliLmNwcAogKQorCitpZiAoRU5BQkxFX0pTQ19HTElCKQorICAgIGluY2x1ZGVfZGlyZWN0b3Jp
ZXMoCisgICAgICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYgorICAgICkKKyAgICBz
ZXQoVGVzdEpTQ0dsaWJfU09VUkNFUworICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9qc2Mt
Z2xpYi9tYWluLmNwcAorICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9qc2MtZ2xpYi9KU0NW
YWx1ZXNUZXN0LmNwcAorICAgICkKKyAgICBhZGRfZXhlY3V0YWJsZShUZXN0SlNDR2xpYgorICAg
ICAgICAke1Rlc3RKU0NHbGliX1NPVVJDRVN9CisgICAgKQorICAgIHRhcmdldF9saW5rX2xpYnJh
cmllcyhUZXN0SlNDR2xpYgorICAgICAgICBnb2JqZWN0LTIuMAorICAgICAgICBnbGliLTIuMAor
ICAgICAgICBKYXZhU2NyaXB0Q29yZQorICAgICkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL2pzYy1nbGliL0pTQ1ZhbHVlc1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9qc2MtZ2xpYi9KU0NWYWx1ZXNUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjY3MzRlYTFi
Y2U4Mjc2MTM2Yzc2YzM0MTg0OGVkYjkzMzQxY2MxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9qc2MtZ2xpYi9KU0NWYWx1ZXNUZXN0LmNwcApAQCAtMCwwICsxLDEwMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBB
bWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNDVmFsdWVzVGVzdC5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCit2b2lkCitDb250ZXh0Rml4
dHVyZVNldFVwKENvbnRleHRGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIGZpeHR1cmUtPmNvbnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImh1dnMiLCAgSlNDX1ZBTFVFKGpz
Y19zdHJpbmdfbmV3KGZpeHR1cmUtPmNvbnRleHQsICJuaXZzIikpKTsKKyAgICBqc2NfY29udGV4
dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgInRydWUiLCAgSlNDX1ZBTFVFKGpzY19ib29s
ZWFuX25ldyhmaXh0dXJlLT5jb250ZXh0LCB0cnVlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92
YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAiZmFsc2UiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3
KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShm
aXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLXoiLCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4
dHVyZS0+Y29udGV4dCwgMC4wKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJl
LT5jb250ZXh0LCAibnVtYmVyLXAiLCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+
Y29udGV4dCwgMS4xKSkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250
ZXh0LCAibnVtYmVyLW4iLCBKU0NfVkFMVUUoanNjX251bWJlcl9uZXcoZml4dHVyZS0+Y29udGV4
dCwgLTEuMSkpKTsKKyAgICAvLyBqc2NfY29udGV4dF9zZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4
dCwgImludDAiLCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZh
bHNlKSkpOworICAgIC8vIGpzY19jb250ZXh0X3NldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAi
aW50MSIsIEpTQ19WQUxVRShqc2NfYm9vbGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2Up
KSk7CisgICAgLy8ganNjX2NvbnRleHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJpbnQt
MSIsIEpTQ19WQUxVRShqc2NfYm9vbGVhbl9uZXcoZml4dHVyZS0+Y29udGV4dCwgZmFsc2UpKSk7
CisgICAgLy8ganNjX2NvbnRleHRfc2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJ1aW50ZmYi
LCBKU0NfVkFMVUUoanNjX2Jvb2xlYW5fbmV3KGZpeHR1cmUtPmNvbnRleHQsIGZhbHNlKSkpOwor
fQorCit2b2lkCitDb250ZXh0Rml4dHVyZVRlYXJEb3duKENvbnRleHRGaXh0dXJlICpmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfY2xlYXJfb2JqZWN0KCZmaXh0dXJl
LT5jb250ZXh0KTsKK30KKwordm9pZAorSlNDU3RyaW5nVGVzdChDb250ZXh0Rml4dHVyZSAqZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWUgPSBq
c2NfY29udGV4dF9nZXRfdmFsdWUoZml4dHVyZS0+Y29udGV4dCwgImh1dnMiKTsKKyAgICBnX2Fz
c2VydF90cnVlKEpTQ19JU19TVFJJTkcodmFsdWUpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoanNj
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCA9PSwgIm5pdnMiKTsKK30KKworCit2b2lkCitKU0NC
b29sZWFuVGVzdChDb250ZXh0Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWVUID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1
cmUtPmNvbnRleHQsICJ0cnVlIik7CisgICAgSlNDVmFsdWUqIHZhbHVlRiA9IGpzY19jb250ZXh0
X2dldF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAiZmFsc2UiKTsKKyAgICBKU0NCb29sZWFuKiBi
b29sVCA9IEpTQ19CT09MRUFOKHZhbHVlVCk7CisgICAgSlNDQm9vbGVhbiogYm9vbEYgPSBKU0Nf
Qk9PTEVBTih2YWx1ZUYpOworCisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUodmFsdWVU
KSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUodmFsdWVGKSk7CisKKyAgICBnX2Fz
c2VydF90cnVlKEpTQ19JU19CT09MRUFOKGJvb2xUKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0Nf
SVNfQk9PTEVBTihib29sRikpOworICAgIAorICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dl
dF9ib29sZWFuKHZhbHVlVCkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZUYpKTsKK30KKwordm9pZAorSlNDTnVtYmVyVGVzdChDb250ZXh0Rml4dHVyZSAq
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBKU0NWYWx1ZSogdmFsdWVa
ID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGZpeHR1cmUtPmNvbnRleHQsICJudW1iZXIteiIpOwor
ICAgIEpTQ1ZhbHVlKiB2YWx1ZVAgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoZml4dHVyZS0+Y29u
dGV4dCwgIm51bWJlci1wIik7CisgICAgSlNDVmFsdWUqIHZhbHVlTiA9IGpzY19jb250ZXh0X2dl
dF92YWx1ZShmaXh0dXJlLT5jb250ZXh0LCAibnVtYmVyLW4iKTsKKworICAgIGdfYXNzZXJ0X3Ry
dWUoSlNDX0lTX1ZBTFVFKHZhbHVlWikpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVF
KHZhbHVlUCkpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHZhbHVlTikpOworCisg
ICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfTlVNQkVSKHZhbHVlWikpOworICAgIGdfYXNzZXJ0X3Ry
dWUoSlNDX0lTX05VTUJFUih2YWx1ZVApKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19OVU1C
RVIodmFsdWVOKSk7CisKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0X2RvdWJs
ZSh2YWx1ZVopLCA9PSwgMC4wKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfZ2V0
X2RvdWJsZSh2YWx1ZVApLCA9PSwgMS4xKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFs
dWVfZ2V0X2RvdWJsZSh2YWx1ZU4pLCA9PSwgLTEuMSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQo
anNjX3ZhbHVlX2dldF9pbnQzMih2YWx1ZVopLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50
KGpzY192YWx1ZV9nZXRfaW50MzIodmFsdWVQKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfZ2V0X2ludDMyKHZhbHVlTiksID09LCAtMSk7CisKKyAgICBnX2Fzc2VydF9j
bXB1aW50KGpzY192YWx1ZV9nZXRfdWludDMyKHZhbHVlWiksID09LCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGpzY192YWx1ZV9nZXRfdWludDMyKHZhbHVlUCksID09LCAxKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KGpzY192YWx1ZV9nZXRfdWludDMyKHZhbHVlTiksID09LCA0Mjk0OTY3Mjk1
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvanNjLWdsaWIvSlNDVmFsdWVz
VGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9qc2MtZ2xpYi9KU0NWYWx1ZXNUZXN0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmRhMzNhMzE5OWVlMmY2YjVlMTdmOTkwM2Q2MWZkYzgwOTU1NzkxNAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvanNjLWdsaWIvSlNDVmFsdWVzVGVzdC5o
CkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNh
bXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxqc2MvanNjLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Db250ZXh0Rml4dHVyZSB7
CisgICAgSlNDQ29udGV4dCAqY29udGV4dDsKK30gQ29udGV4dEZpeHR1cmU7CisKK3ZvaWQKK0Nv
bnRleHRGaXh0dXJlU2V0VXAoQ29udGV4dEZpeHR1cmUqLCBnY29uc3Rwb2ludGVyKTsKKwordm9p
ZAorQ29udGV4dEZpeHR1cmVUZWFyRG93bihDb250ZXh0Rml4dHVyZSosIGdjb25zdHBvaW50ZXIp
OworCit2b2lkCitKU0NTdHJpbmdUZXN0KENvbnRleHRGaXh0dXJlKiwgZ2NvbnN0cG9pbnRlcik7
CisKK3ZvaWQKK0pTQ0Jvb2xlYW5UZXN0KENvbnRleHRGaXh0dXJlKiwgZ2NvbnN0cG9pbnRlcik7
CisKK3ZvaWQKK0pTQ051bWJlclRlc3QoQ29udGV4dEZpeHR1cmUqLCBnY29uc3Rwb2ludGVyKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvanNjLWdsaWIvbWFpbi5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2pzYy1nbGliL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4YWNiYjE3Mzg5
ZjU2MTU3MGFhOTI5ZmI4OGEwY2MzNGQ3ODY0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2pzYy1nbGliL21haW4uY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZh
dW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSlNDVmFsdWVz
VGVzdC5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQoreworICAgIGdfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBn
X3Rlc3RfYWRkKCIvanNjLXZhbHVlcy9zdHJpbmctdGVzdCIsIENvbnRleHRGaXh0dXJlLCBOVUxM
LAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NTdHJpbmdUZXN0LCBDb250ZXh0Rml4
dHVyZVRlYXJEb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi9qc2MtdmFsdWVzL2Jvb2xlYW4tdGVz
dCIsIENvbnRleHRGaXh0dXJlLCBOVUxMLAorICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBK
U0NCb29sZWFuVGVzdCwgQ29udGV4dEZpeHR1cmVUZWFyRG93bik7CisKKyAgICAKKyAgICBnX3Rl
c3RfYWRkKCIvanNjLXZhbHVlcy9udW1iZXItdGVzdCIsIENvbnRleHRGaXh0dXJlLCBOVUxMLAor
ICAgICAgICBDb250ZXh0Rml4dHVyZVNldFVwLCBKU0NOdW1iZXJUZXN0LCBDb250ZXh0Rml4dHVy
ZVRlYXJEb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9D
aGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggOWM2ZWZhNDIwZmE3ZDU4MGUxODk2MTk2NDAzNzM2
MmY2NzY1YWI1Ni4uNGViODM3YmEyMDBhNzJlNjkyNjk0YzQ4NjMxMzQzMmZjYzM1NjNkNyAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2
LTEwLTI3ICBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgIDx0ZXZhdW1AZ21haWwu
Y29tPgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgSmF2YVNjcmlw
dENvcmUgZ2xpYiBiaW5kaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBpcyBhIHNpbXBsZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGEg
SmF2YVNjcmlwdENvcmUgYmluZGluZ3MKKyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBkaXNjdXNz
aW9uIG9uIHdlYmtsaXQtZ3RrIG1haWxpbmcgbGlzdCB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9s
aXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJraXQtZ3RrLzIwMTYtT2N0b2Jlci8wMDI4MzQu
aHRtbAorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6IEFkZGVkIEVO
QUJMRV9KU0NfR0xJQiBvcHRpb24gZGVmYXVsdGluZyB0byBPRkYKKwogMjAxNi0xMC0xOCAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIENTU19TSEFQRVMg
ZmVhdHVyZSBkZWZpbml0aW9uLiBUaGlzIHNob3VsZCBhbHdheXMgYmUgb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294417</attachid>
            <date>2016-11-10 14:39:20 -0800</date>
            <delta_ts>2016-11-21 09:52:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161110203506.patch</filename>
            <type>text/plain</type>
            <size>89019</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi5kMWYzNTI4OGJkZjU1YmM5
ZGIzZWNkMWVlYTI0NzQ3MjEwZGI2NzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJrbGl0LWd0ayBtYWlsaW5nIGxpc3QgdGhyZWFkCisg
ICAgICAgIGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWd0ay8yMDE2
LU9jdG9iZXIvMDAyODM0Lmh0bWwKKworICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NCb29sZWFuLmg6IEFkZGVkLgorICAgICAg
ICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW5Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9n
bGliL0pTQ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIEFQSS9nbGliL0pTQ051bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ051bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NOdW1iZXJQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogQVBJL2dsaWIvSlNDU3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDU3RyaW5nLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1N0cmluZ1By
aXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNwcDogQWRk
ZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmg6IEFkZGVkLgorICAgICAgICAq
IEFQSS9nbGliL0pTQ1VuZGVmaW5lZFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2ds
aWIvSlNDVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NWYWx1ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogQVBJL2dsaWIvanNjLmg6IEFkZGVkLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBB
ZGRlZCBKYXZhU2NyaXB0Q29yZV9FWFRSQV9ERVBFTkRFTkNJRVMgdG8gaW5zdGFsbCBKYXZhU2Ny
aXB0Q29yZQorICAgICAgICBnbGliIGZvcndhcmRpbmcgaGVhZGVycworICAgICAgICAqIFBsYXRm
b3JtR1RLLmNtYWtlOiBBZGRlZCBydWxlcyBmb3IgYnVpbGRpbmcgSmF2YVNjcmlwdENvcmUgZ2xp
YiBiaW5kaW5ncworCiAyMDE2LTEwLTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBBUk0gYnVpbGRmaXggYWZ0ZXIgcjIwNzQ3NS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFuLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMjliOWQ4OWZjMGExYzExOGNkZTJhYjI5YWU3ZmNmZjUyZWFmYjYxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4uY3BwCkBA
IC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVl
bCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRl
LmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDQm9vbGVhbgorICogQFNob3J0
X2Rlc2NyaXB0aW9uOiAjSlNDVmFsdWUgc3VidHlwZSB0byByZXByZXNlbnQgYm9vbGVhbiB2YWx1
ZXMKKyAqCisgKiBKU0NCb29sZWFuIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBib29s
ZWFuIHZhbHVlcyBpbnNpZGUKKyAqIEphdmFTY3JpcHRDb3JlLgorICoKKyAqLworCitHX0RFRklO
RV9UWVBFKEpTQ0Jvb2xlYW4sIGpzY19ib29sZWFuLCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGlj
IHZvaWQganNjX2Jvb2xlYW5fY2xhc3NfaW5pdChKU0NCb29sZWFuQ2xhc3MqKQoreworfQorCitz
dGF0aWMgdm9pZCBqc2NfYm9vbGVhbl9pbml0KEpTQ0Jvb2xlYW4qKQoreworfQorCitKU0NCb29s
ZWFuKiBqc2NCb29sZWFuQ3JlYXRlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNW
YWx1ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIEFTU0VS
VChKU1ZhbHVlSXNCb29sZWFuKGpzVmFsdWUpKTsKKworICAgIEpTQ0Jvb2xlYW4qIGJvb2xlYW4g
PSBKU0NfQk9PTEVBTihnX29iamVjdF9uZXcoSlNDX1RZUEVfQk9PTEVBTiwgImNvbnRleHQiLCBj
b250ZXh0LCBOVUxMKSk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVlKEpTQ19WQUxVRShib29sZWFu
KSwganNWYWx1ZSk7CisKKyAgICByZXR1cm4gYm9vbGVhbjsKK30KKworLyoqCisgKiBqc2NfYm9v
bGVhbl9uZXc6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBjb250YWlu
IHRoZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IHRoZSAjSlNDQm9v
bGVhbiB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pTQ0Jvb2xlYW4gd2l0
aCBAdmFsdWUgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQg
I0pTQ0Jvb2xlYW4gb2JqZWN0CisgKi8KK0pTQ1ZhbHVlKiBqc2NfYm9vbGVhbl9uZXcoSlNDQ29u
dGV4dCogY29udGV4dCwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIGZhbHNlKTsKKworICAgIEpTQ29udGV4dFJlZiBq
c0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIEpTVmFsdWVS
ZWYganNWYWx1ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihqc0NvbnRleHQsIHZhbHVlKTsKKworICAg
IHJldHVybiBKU0NfVkFMVUUoanNjQm9vbGVhbkNyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKSk7Cit9
CisKKy8qKgorICoganNjX2Jvb2xlYW5fZ2V0X3ZhbHVlOgorICogQHZhbHVlOiB0aGUgI0pTQ0Jv
b2xlYW4gY29udGFpbmluZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIGJvb2xlYW4g
dmFsdWUgZnJvbSAjSlNDQm9vbGVhbgorICoKKyAqIFJldHVybnM6ICNnYm9vbGVhbgorICovCitn
Ym9vbGVhbiBqc2NfYm9vbGVhbl9nZXRfdmFsdWUoSlNDQm9vbGVhbiogYm9vbGVhbikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQk9PTEVBTihib29sZWFuKSwgZmFsc2UpOwor
CisgICAgSlNDQ29udGV4dCogY29udGV4dDsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoY29u
dGV4dCksICJjb250ZXh0IiwgJmNvbnRleHQsIG51bGxwdHIpOworCisgICAgSlNDb250ZXh0UmVm
IGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgSlNWYWx1
ZVJlZiBqc1ZhbHVlID0ganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ19WQUxVRShib29sZWFuKSk7CisK
KyAgICBnX29iamVjdF91bnJlZihjb250ZXh0KTsKKyAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVh
bihqc0NvbnRleHQsIGpzVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NCb29sZWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJiNmY5ZDExYzYyMjBmZGJlMDFkY2ViNTc4OWIy
MzcyY2NjNTI5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NCb29sZWFuLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIEpTQ0Jvb2xlYW5faAorI2RlZmluZSBKU0NCb29sZWFuX2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxq
c2MvSlNDVmFsdWUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX0JPT0xF
QU4gICAgICAgICAgICAoanNjX2Jvb2xlYW5fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0JPT0xF
QU4ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlND
X1RZUEVfQk9PTEVBTiwgSlNDQm9vbGVhbikpCisjZGVmaW5lIEpTQ19JU19CT09MRUFOKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX0JPT0xF
QU4pKQorI2RlZmluZSBKU0NfQk9PTEVBTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9CT09MRUFOLCBKU0NCb29sZWFuQ2xhc3MpKQor
I2RlZmluZSBKU0NfSVNfQk9PTEVBTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBKU0NfVFlQRV9CT09MRUFOKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Jv
b2xlYW4gICAgICAgIEpTQ0Jvb2xlYW47Cit0eXBlZGVmIHN0cnVjdCBfSlNDQm9vbGVhbkNsYXNz
ICAgSlNDQm9vbGVhbkNsYXNzOworCitzdHJ1Y3QgX0pTQ0Jvb2xlYW4geworICAgIEpTQ1ZhbHVl
IHBhcmVudDsKK307CisKK3N0cnVjdCBfSlNDQm9vbGVhbkNsYXNzIHsKKyAgICBKU0NWYWx1ZUNs
YXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUgICAgIGpzY19ib29sZWFuX2dldF90eXBlICAo
dm9pZCk7CisKK0pTQ1ZhbHVlKiBqc2NfYm9vbGVhbl9uZXcgICAgICAgKEpTQ0NvbnRleHQqIGNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICB2YWx1
ZSk7CisKK2dib29sZWFuICBqc2NfYm9vbGVhbl9nZXRfdmFsdWUgKEpTQ0Jvb2xlYW4qIHZhbHVl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhblByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NCb29sZWFuUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxM2E5ZWZiZGUwNmQ4
Y2ExMjM1MzkxZWRlZjk3YTY0YTgxY2YxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhblByaXZhdGUuaApAQCAtMCwwICsxLDI2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFt
YXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQm9v
bGVhbi5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKworCitKU0NC
b29sZWFuKiBqc2NCb29sZWFuQ3JlYXRlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
NDgyNWNmNzIxN2NmZTVhNzU5ZjA5ZTk1N2FkZDFiZTllOTNkZTc5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuY3BwCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJv
Y8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU0NDb250ZXh0LmgiCisKKyNpbmNsdWRlICJKU0NCb29sZWFuUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDTnVtYmVyUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NTdHJpbmdQcml2YXRl
LmgiCisjaW5jbHVkZSAiSlNDVW5kZWZpbmVkUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVl
LmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDb250ZXh0UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCisvKioKKyAqIFNF
Q1RJT046IEpTQ0NvbnRleHQKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogSmF2YVNjcmlwdENvcmUg
ZXhlY3V0aW9uIGNvbnRleHQKKyAqIEBUaXRsZTogSlNDQ29udGV4dAorICoKKyAqIEEgSlNDQ29u
dGV4dCBpcyB0aGUgY2VudHJhbCBjbGFzcyBvZiB0aGUgSmF2YVNjcmlwdENvcmUgQVBJLiBJdCBp
cworICogcmVzcG9uc2libGUgZm9yIGV2YWx1YXRpb24gb2Ygc2NyaXB0cyBpbiB0aGUgZXhlY3V0
aW9uIGNvbnRleHQsCisgKiBzZXR0aW5nIGFuZCBnZXR0aW5nIHZhbHVlcyBmcm9tIHRoZSBleGVj
dXRpb24gY29udGV4dCBhbmQgdG8gbWFrZQorICogbmF0aXZlIG9iamVjdHMsIG1ldGhvZHMgYW5k
IGZ1bmN0aW9ucyBhY2Nlc3NpYmxlIHRvIEphdmFTY3JpcHQuCisgKgorICovCisKK3R5cGVkZWYg
SGFzaE1hcDxjb25zdCBnY2hhciosIEdSZWZQdHI8SlNDVmFsdWU+ID4gVmFsdWVNYXA7CisKK3R5
cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0UHJpdmF0ZSB7CisgICAgX0pTQ0NvbnRleHRQcml2YXRl
KCkKKyAgICB7CisgICAgICAgIGNvbnRleHQgPSBKU1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRS
ZWY+KEFkb3B0LCBKU0dsb2JhbENvbnRleHRDcmVhdGUobnVsbHB0cikpOworICAgIH0KKworICAg
IH5fSlNDQ29udGV4dFByaXZhdGUoKQorICAgIHsKKyAgICAgICAgY29udGV4dC5jbGVhcigpOwor
ICAgIH0KKworICAgIFZhbHVlTWFwIGNhY2hlZFZhbHVlczsKKyAgICBKU1JldGFpblB0cjxKU0ds
b2JhbENvbnRleHRSZWY+IGNvbnRleHQ7Cit9IEpTQ0NvbnRleHRQcml2YXRlOworCitXRUJLSVRf
REVGSU5FX1RZUEUoSlNDQ29udGV4dCwganNjX2NvbnRleHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0
YXRpYyB2b2lkIGpzY0NvbnRleHREaXNwb3NlKEdPYmplY3QqIG9iaikKK3sKKyAgICBKU0NDb250
ZXh0UHJpdmF0ZSogcHJpdiA9IEpTQ19DT05URVhUKG9iaiktPnByaXY7CisKKyAgICBpZiAocHJp
di0+Y2FjaGVkVmFsdWVzLnNpemUoKSA+IDApCisgICAgICAgIHByaXYtPmNhY2hlZFZhbHVlcy5j
bGVhcigpOworfQorCitzdGF0aWMgdm9pZCBqc2NfY29udGV4dF9jbGFzc19pbml0KEpTQ0NvbnRl
eHRDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKGtsYXNzKTsKKworICAgIG9iakNsYXNzLT5kaXNwb3NlID0ganNjQ29udGV4dERpc3Bv
c2U7Cit9CisKK0pTR2xvYmFsQ29udGV4dFJlZiBqc2NDb250ZXh0R2V0SlNDb250ZXh0KEpTQ0Nv
bnRleHQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVQoY29udGV4dCkpOwor
CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworCisgICAgcmV0
dXJuIHByaXYtPmNvbnRleHQuZ2V0KCk7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfbmV3Ogor
ICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pTQ0NvbnRleHQgZW52aXJvbm1lbnQgdG8gZXhlY3V0ZSBK
YXZhU2NyaXB0CisgKiBjb2RlLgorICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNK
U0NDb250ZXh0IG9iamVjdAorICovCitKU0NDb250ZXh0KiBqc2NfY29udGV4dF9uZXcoKQorewor
ICAgIHJldHVybiBKU0NfQ09OVEVYVChnX29iamVjdF9uZXcoSlNDX1RZUEVfQ09OVEVYVCwgbnVs
bHB0cikpOworfQorCitzdGF0aWMgSlNDVmFsdWUqIGpzVmFsdWVUb0pTQ1ZhbHVlKEpTQ0NvbnRl
eHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NP
TlRFWFQoY29udGV4dCkpOworICAgIEFTU0VSVChqc1ZhbHVlKTsKKworICAgIEpTQ0NvbnRleHRQ
cml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKworICAgIGlmIChKU1ZhbHVlSXNTdHJpbmco
cHJpdi0+Y29udGV4dC5nZXQoKSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBKU0NfVkFMVUUo
anNjU3RyaW5nQ3JlYXRlKGNvbnRleHQsIGpzVmFsdWUpKTsKKworICAgIGlmIChKU1ZhbHVlSXNC
b29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gSlND
X1ZBTFVFKGpzY0Jvb2xlYW5DcmVhdGUoY29udGV4dCwganNWYWx1ZSkpOworCisgICAgaWYgKEpT
VmFsdWVJc051bWJlcihwcml2LT5jb250ZXh0LmdldCgpLCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIEpTQ19WQUxVRShqc2NOdW1iZXJDcmVhdGUoY29udGV4dCwganNWYWx1ZSkpOworCisgICAg
aWYgKEpTVmFsdWVJc1VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpLCBqc1ZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIEpTQ19WQUxVRShqc2NVbmRlZmluZWRDcmVhdGUoY29udGV4dCwganNWYWx1
ZSkpOworCisgICAgaWYgKEpTVmFsdWVJc051bGwocHJpdi0+Y29udGV4dC5nZXQoKSwganNWYWx1
ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9nZXRfdmFs
dWU6CisgKiBAY29udGV4dDogdGhlICNKU0NDb250ZXh0IHRoYXQgdGhlIHZhbHVlIHdpbGwgYmUg
cmV0cmlldmVkIGZyb20KKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZ2xvYmFsIG9iamVjdCBw
cm9wZXJ0eSB0aGF0IHdpbGwgYmUgcmV0cmlldmVkCisgKgorICogUmV0cmlldmVzIHByb3BlcnRp
ZXMgZnJvbSB0aGUgSmF2YVNjcmlwdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAorICog
dGhlICNKU0NDb250ZXh0LiBWYWx1ZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHN1YnR5cGVzIG9mIEpT
Q1ZhbHVlLgorICoKKyAqIFJldHVybnM6IEEgI0pTQ1ZhbHVlIHJlcHJlc2VudGluZyB0aGUgdmFs
dWUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eQorICovCitKU0NWYWx1ZSoganNjX2NvbnRleHRf
Z2V0X3ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIG51bGxwdHIpOworCisgICAgLy8gUmV0cmll
dmUgdGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUgZnJvbSB0aGUgZ2xvYmFsIG9iamVjdAorICAg
IEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBKU0NWYWx1ZSog
Y2FjaGVkVmFsdWUgPSBwcml2LT5jYWNoZWRWYWx1ZXMuZ2V0KG5hbWUpLmdldCgpOworICAgIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChwcml2LT5j
b250ZXh0LmdldCgpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyTmFtZShBZG9w
dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOworICAgIEpTVmFsdWVSZWYg
anNWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkocHJpdi0+Y29udGV4dC5nZXQoKSwgZ2xvYmFs
T2JqZWN0LCBzdHJOYW1lLmdldCgpLCBudWxscHRyKTsKKworICAgIGlmICghY2FjaGVkVmFsdWUp
IHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNhY2hlZCB2YWx1ZSwgd2UgY2FjaGUg
aXQKKyAgICAgICAgY2FjaGVkVmFsdWUgPSBqc1ZhbHVlVG9KU0NWYWx1ZShjb250ZXh0LCBqc1Zh
bHVlKTsKKyAgICAgICAgcHJpdi0+Y2FjaGVkVmFsdWVzLnNldChuYW1lLCBjYWNoZWRWYWx1ZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgY2FjaGVkIHZh
bHVlIGZvciB0aGlzIHByb3BlcnR5LCB3ZSBjaGVjayBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQK
KyAgICAgICAgSlNWYWx1ZVJlZiBjYWNoZWRKU1ZhbHVlID0ganNjVmFsdWVHZXRKU1ZhbHVlKGNh
Y2hlZFZhbHVlKTsKKyAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpY3RFcXVhbChwcml2LT5jb250
ZXh0LmdldCgpLCBqc1ZhbHVlLCBjYWNoZWRKU1ZhbHVlKSkgeworICAgICAgICAgICAgY2FjaGVk
VmFsdWUgPSBqc1ZhbHVlVG9KU0NWYWx1ZShjb250ZXh0LCBqc1ZhbHVlKTsKKyAgICAgICAgICAg
IHByaXYtPmNhY2hlZFZhbHVlcy5zZXQobmFtZSwgY2FjaGVkVmFsdWUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGNhY2hlZFZhbHVlOworfQorCisvKioKKyAqIGpzY19jb250ZXh0
X3NldF92YWx1ZToKKyAqIEBjb250ZXh0OiB0aGUgI0pTQ0NvbnRleHQgd2hlcmUgdGhlIHZhbHVl
IHdpbGwgYmUgc2V0CisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBvYmplY3QgcHJv
cGVydHkgdGhhdCB3aWxsIGJlIHNldAorICogQHZhbHVlOiB0aGUgdmFsdWUKKyAqCisgKiBTZXRz
IHByb3BlcnRpZXMgaW4gdGhlIEphdmFTY3JpcHQgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdp
dGgKKyAqIHRoZSAjSlNDQ29udGV4dC4gVmFsdWVzIGFyZSByZXByZXNlbnRlZCBieSBzdWJ0eXBl
cyBvZiBKU0NWYWx1ZS4KKyAqLwordm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4
dCogY29udGV4dCwgY29uc3QgZ2NoYXIqIG5hbWUsIEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7
CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgSlNP
YmplY3RSZWYgb2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYt
PmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYganNWYWx1ZSA9IGpzY1ZhbHVlR2V0SlNW
YWx1ZSh2YWx1ZSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0ck5hbWUoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU09iamVjdFNldFBy
b3BlcnR5KHByaXYtPmNvbnRleHQuZ2V0KCksIG9iamVjdCwgc3RyTmFtZS5nZXQoKSwganNWYWx1
ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgbnVsbHB0cik7CisgICAgY29udGV4dC0+
cHJpdi0+Y2FjaGVkVmFsdWVzLnNldChuYW1lLCB2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MmNjMDFlODE2YTY4ZGM2
YTc1YmQ2NGRkNDY3OTkyYTk3NGU4ZjYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaApAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2
YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgSlNDQ29udGV4dF9oCisjZGVmaW5lIEpTQ0NvbnRleHRf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX0NPTlRFWFQgICAgICAgICAgICAo
anNjX2NvbnRleHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0NPTlRFWFQob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfQ09OVEVYVCwg
SlNDQ29udGV4dCkpCisjZGVmaW5lIEpTQ19JU19DT05URVhUKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX0NPTlRFWFQpKQorI2RlZmluZSBK
U0NfQ09OVEVYVF9DTEFTUyhjbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0Q2xhc3MpKQorI2RlZmluZSBKU0NfSVNf
Q09OVEVYVF9DTEFTUyhjbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBK
U0NfVFlQRV9DT05URVhUKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgICAgICAgIEpT
Q0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dENsYXNzICAgSlNDQ29udGV4dENs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIEpTQ0NvbnRleHRQcml2YXRl
OworCitzdHJ1Y3QgX0pTQ0NvbnRleHQgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgSlND
Q29udGV4dFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX0pTQ0NvbnRleHRDbGFzcyB7Cisg
ICAgR09iamVjdENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUKK2pzY19jb250ZXh0X2dl
dF90eXBlICAodm9pZCk7CisKK0pTQ0NvbnRleHQqCitqc2NfY29udGV4dF9uZXcgICAgICAgKHZv
aWQpOworCitKU0NWYWx1ZSoKK2pzY19jb250ZXh0X2dldF92YWx1ZSAoSlNDQ29udGV4dCogIGNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBuYW1lKTsKKwordm9p
ZAoranNjX2NvbnRleHRfc2V0X3ZhbHVlIChKU0NDb250ZXh0KiAgY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
IEpTQ1ZhbHVlKiAgICB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42MjE2ZTJhMTQ3YzkzOTRmYWIyM2U5OWVlMzA3ZWM1YjM5OWU5YmFkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRl
LmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28g
U2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Nv
bnRleHRSZWYuaD4KKworSlNHbG9iYWxDb250ZXh0UmVmIGpzY0NvbnRleHRHZXRKU0NvbnRleHQo
SlNDQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ051bWJlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYjJhMjY5NDBmYmM3YTMwMDYyMTRhZDBmZDhlZjJiZjYwMTczN2E4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051
bWJlci5jcHAKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0
w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ051bWJlci5oIgorCisjaW5jbHVkZSAiSlNDQ29u
dGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWF0
aENvbW1vbi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDTnVtYmVyCisgKiBAU2hvcnRfZGVzY3Jp
cHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBudW1lcmljIHZhbHVlcworICoK
KyAqIEpTQ051bWJlciBpcyB0aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgbnVtZXJpYyB2YWx1
ZXMgaW5zaWRlCisgKiBKYXZhU2NyaXB0Q29yZS4KKyAqCisgKi8KKworR19ERUZJTkVfVFlQRShK
U0NOdW1iZXIsIGpzY19udW1iZXIsIEpTQ19UWVBFX1ZBTFVFKQorCitzdGF0aWMgdm9pZCBqc2Nf
bnVtYmVyX2NsYXNzX2luaXQoSlNDTnVtYmVyQ2xhc3MqKQoreworfQorCitzdGF0aWMgdm9pZCBq
c2NfbnVtYmVyX2luaXQoSlNDTnVtYmVyKikKK3sKK30KKworSlNDTnVtYmVyKiBqc2NOdW1iZXJD
cmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIEFT
U0VSVChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgQVNTRVJUKEpTVmFsdWVJc051bWJl
cihqc1ZhbHVlKSk7CisKKyAgICBKU0NOdW1iZXIqIHZhbHVlID0gSlNDX05VTUJFUihnX29iamVj
dF9uZXcoSlNDX1RZUEVfTlVNQkVSLCAiY29udGV4dCIsIGNvbnRleHQsIE5VTEwpKTsKKyAgICBq
c2NWYWx1ZVNldEpTVmFsdWUoSlNDX1ZBTFVFKHZhbHVlKSwganNWYWx1ZSk7CisKKyAgICByZXR1
cm4gdmFsdWU7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfbnVtYmVyX25ld19kb3VibGUoSlNDQ29udGV4
dCogY29udGV4dCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChK
U0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBKU0NvbnRleHRSZWYganND
b250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVm
IGpzVmFsdWUgPSBKU1ZhbHVlTWFrZU51bWJlcihqc0NvbnRleHQsIHZhbHVlKTsKKworICAgIHJl
dHVybiBKU0NfVkFMVUUoanNjTnVtYmVyQ3JlYXRlKGNvbnRleHQsIGpzVmFsdWUpKTsKK30KKwor
SlNDVmFsdWUqIGpzY19udW1iZXJfbmV3X2ludDMyKEpTQ0NvbnRleHQqIGNvbnRleHQsIGdpbnQz
MiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250
ZXh0KSwgbnVsbHB0cik7CisKKyAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0ganNjQ29udGV4
dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIGpzVmFsdWUgPSBKU1ZhbHVl
TWFrZU51bWJlcihqc0NvbnRleHQsIHZhbHVlKTsKKworICAgIHJldHVybiBKU0NfVkFMVUUoanNj
TnVtYmVyQ3JlYXRlKGNvbnRleHQsIGpzVmFsdWUpKTsKK30KKworSlNDVmFsdWUqIGpzY19udW1i
ZXJfbmV3X3VpbnQzMihKU0NDb250ZXh0KiBjb250ZXh0LCBndWludDMyIHZhbHVlKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsK
KworICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNv
bnRleHQpOworICAgIEpTVmFsdWVSZWYganNWYWx1ZSA9IEpTVmFsdWVNYWtlTnVtYmVyKGpzQ29u
dGV4dCwgdmFsdWUpOworCisgICAgcmV0dXJuIEpTQ19WQUxVRShqc2NOdW1iZXJDcmVhdGUoY29u
dGV4dCwganNWYWx1ZSkpOworfQorCitzdGF0aWMgZ2RvdWJsZSBqc2NOdW1iZXJHZXRWYWx1ZShK
U0NOdW1iZXIqIG51bWJlcikKK3sKKyAgICBBU1NFUlQoSlNDX0lTX05VTUJFUihudW1iZXIpKTsK
KworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7CisgICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKG51
bWJlciksICJjb250ZXh0IiwgJmNvbnRleHQsIG51bGxwdHIpOworCisgICAgSlNDb250ZXh0UmVm
IGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgSlNWYWx1
ZVJlZiBqc1ZhbHVlID0ganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ19WQUxVRShudW1iZXIpKTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIo
anNDb250ZXh0LCBqc1ZhbHVlLCBudWxscHRyKTsKK30KKworLyoqCisgKiBqc2NfbnVtYmVyX2dl
dF9kb3VibGU6CisgKiBAdmFsdWU6IHRoZSAjSlNDTnVtYmVyIGNvbnRhaW5pbmcgdGhlIHZhbHVl
CisgKgorICogUmV0cmlldmVzIHRoZSBudW1lcmljIChkb3VibGUpIHZhbHVlIGZyb20gI0pTQ051
bWJlcgorICoKKyAqIFJldHVybnM6ICNnZG91YmxlCisgKi8KK2dkb3VibGUganNjX251bWJlcl9n
ZXRfZG91YmxlKEpTQ051bWJlciogbnVtYmVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19OVU1CRVIobnVtYmVyKSwgMCk7CisKKyAgICByZXR1cm4ganNjTnVtYmVyR2V0VmFs
dWUobnVtYmVyKTsKK30KKworLyoqCisgKiBqc2NfbnVtYmVyX2dldF91aW50MzI6CisgKiBAdmFs
dWU6IHRoZSAjSlNDTnVtYmVyIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVz
IHRoZSBudW1lcmljICh1bnNpZ25lZCBpbnQpIHZhbHVlIGZyb20gI0pTQ051bWJlcgorICoKKyAq
IFJldHVybnM6ICNndWludDMyCisgKi8KK2d1aW50IGpzY19udW1iZXJfZ2V0X3VpbnQzMihKU0NO
dW1iZXIqIG51bWJlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfTlVNQkVS
KG51bWJlciksIDApOworCisgICAgcmV0dXJuIEpTQzo6dG9VSW50MzIoanNjTnVtYmVyR2V0VmFs
dWUobnVtYmVyKSk7Cit9CisKKy8qKgorICoganNjX251bWJlcl9nZXRfaW50MzI6CisgKiBAdmFs
dWU6IHRoZSAjSlNDTnVtYmVyIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVz
IHRoZSBudW1lcmljIChpbnQpIHZhbHVlIGZyb20gI0pTQ051bWJlcgorICoKKyAqIFJldHVybnM6
ICNnaW50MzIKKyAqLworZ2ludCBqc2NfbnVtYmVyX2dldF9pbnQzMihKU0NOdW1iZXIqIG51bWJl
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfTlVNQkVSKG51bWJlciksIDAp
OworCisgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihqc2NOdW1iZXJHZXRWYWx1ZShudW1iZXIpKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMzRlN2EyNTc0YTg5ZWY1NWZkZWZkYzIyMGRhZDc0OWFiZjM2YmJlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5oCkBAIC0wLDAg
KzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBKU0NOdW1iZXJfaAorI2Rl
ZmluZSBKU0NOdW1iZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxq
c2MvSlNDQ29udGV4dC5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfTlVNQkVSICAgICAgICAgICAgKGpzY19udW1iZXJfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgSlNDX05VTUJFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9OVU1CRVIsIEpTQ051bWJlcikpCisjZGVm
aW5lIEpTQ19JU19OVU1CRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgSlNDX1RZUEVfTlVNQkVSKSkKKyNkZWZpbmUgSlNDX05VTUJFUl9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9OVU1CRVIs
IEpTQ051bWJlckNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJFUl9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9OVU1CRVIpKQorCit0eXBl
ZGVmIHN0cnVjdCBfSlNDTnVtYmVyICAgICAgICBKU0NOdW1iZXI7Cit0eXBlZGVmIHN0cnVjdCBf
SlNDTnVtYmVyQ2xhc3MgICBKU0NOdW1iZXJDbGFzczsKKworc3RydWN0IF9KU0NOdW1iZXIgewor
ICAgIEpTQ1ZhbHVlIHBhcmVudDsKK307CisKK3N0cnVjdCBfSlNDTnVtYmVyQ2xhc3MgeworICAg
IEpTQ1ZhbHVlQ2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZQoranNjX251bWJlcl9nZXRf
dHlwZSAgICh2b2lkKTsKKworSlNDVmFsdWUqCitqc2NfbnVtYmVyX25ld19kb3VibGUgKEpTQ0Nv
bnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgICAgIHZhbHVl
KTsKKworSlNDVmFsdWUqCitqc2NfbnVtYmVyX25ld19pbnQzMiAgKEpTQ0NvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgIGdpbnQzMiAgICAgIHZhbHVlKTsKKworSlNDVmFs
dWUqCitqc2NfbnVtYmVyX25ld191aW50MzIgKEpTQ0NvbnRleHQqIGNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgIGd1aW50MzIgICAgIHZhbHVlKTsKKworZ2RvdWJsZQoranNjX251bWJl
cl9nZXRfZG91YmxlIChKU0NOdW1iZXIqKTsKKworZ3VpbnQKK2pzY19udW1iZXJfZ2V0X3VpbnQz
MiAoSlNDTnVtYmVyKik7CisKK2dpbnQKK2pzY19udW1iZXJfZ2V0X2ludDMyICAoSlNDTnVtYmVy
Kik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NOdW1iZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBkYTI3OGJjYzRmZmRj
NTQwOThiYTU4ZTM4YjAxYmNiNTg2NDUwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXJQcml2YXRlLmgKQEAgLTAsMCArMSwyNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFy
YWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ051bWJl
ci5oIgorCitKU0NOdW1iZXIqIGpzY051bWJlckNyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJl
Zik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDUHJpdmF0
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44ODVhZTIzYjcyNmJiOTNkNTIzM2RlMzkwNzdjZTVhY2Q2OGU5YzE3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ByaXZhdGUuaApAQCAt
MCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2Rl
ZmluZSBXRUJLSVRfREVGSU5FX1NJTVBMRV9UWVBFKFR5cGVOYW1lLCB0eXBlX25hbWUsIFRZUEVf
UEFSRU5UKSBcCitcCitzdGF0aWMgZ3BvaW50ZXIgdHlwZV9uYW1lIyNfcGFyZW50X2NsYXNzID0g
MDsgXAorc3RhdGljIHZvaWQgdHlwZV9uYW1lIyNfY2xhc3NfaW50ZXJuX2luaXQoZ3BvaW50ZXIg
a2xhc3MpIFwKK3sgXAorICAgIHR5cGVfbmFtZSMjX3BhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFz
c19wZWVrX3BhcmVudChrbGFzcyk7IFwKK31cCitcCitzdGF0aWMgdm9pZCB0eXBlX25hbWUjI19p
bml0KFR5cGVOYW1lKikgXAore1wKK31cCitHVHlwZSB0eXBlX25hbWUjI19nZXRfdHlwZSh2b2lk
KSBcCit7XAorICAgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnX2RlZmluZV90eXBlX2lkX192b2xh
dGlsZSA9IDA7IFwKKyAgICBpZiAoZ19vbmNlX2luaXRfZW50ZXIoJmdfZGVmaW5lX3R5cGVfaWRf
X3ZvbGF0aWxlKSkgeyBcCisgICAgICAgIEdUeXBlIGdfZGVmaW5lX3R5cGVfaWQgPSBcCisgICAg
ICAgICAgICBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljX3NpbXBsZSggXAorICAgICAgICAgICAgICAg
IFRZUEVfUEFSRU5ULCBcCisgICAgICAgICAgICAgICAgZ19pbnRlcm5fc3RhdGljX3N0cmluZygj
VHlwZU5hbWUpLCBcCisgICAgICAgICAgICAgICAgc2l6ZW9mKFR5cGVOYW1lIyNDbGFzcyksIFwK
KyAgICAgICAgICAgICAgICAoR0NsYXNzSW5pdEZ1bmMpdHlwZV9uYW1lIyNfY2xhc3NfaW50ZXJu
X2luaXQsIFwKKyAgICAgICAgICAgICAgICBzaXplb2YoVHlwZU5hbWUpLCBcCisgICAgICAgICAg
ICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKXR5cGVfbmFtZSMjX2luaXQsIFwKKyAgICAgICAgICAg
ICAgICAoR1R5cGVGbGFncykwKTsgXAorICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ19kZWZp
bmVfdHlwZV9pZF9fdm9sYXRpbGUsIGdfZGVmaW5lX3R5cGVfaWQpOyBcCisgICAgfSBcCisgICAg
cmV0dXJuIGdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlOyBcCit9IC8vIENsb3NlcyB0eXBlX25h
bWUjI19nZXRfdHlwZSgpLgorCisjZGVmaW5lIFdFQktJVF9ERUZJTkVfVFlQRShUeXBlTmFtZSwg
dHlwZV9uYW1lLCBUWVBFX1BBUkVOVCkgX1dFQktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRChUeXBl
TmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCwgMCwgeyB9KQorI2RlZmluZSBXRUJLSVRfREVG
SU5FX0FCU1RSQUNUX1RZUEUoVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJFTlQpIF9XRUJL
SVRfREVGSU5FX1RZUEVfRVhURU5ERUQoVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJFTlQs
IEdfVFlQRV9GTEFHX0FCU1RSQUNULCB7IH0pCisjZGVmaW5lIFdFQktJVF9ERUZJTkVfVFlQRV9X
SVRIX0NPREUoVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJFTlQsIENvZGUpIF9XRUJLSVRf
REVGSU5FX1RZUEVfRVhURU5ERURfQkVHSU4oVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJF
TlQsIDApIHtDb2RlO30gX1dFQktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRF9FTkQoKQorCisjZGVm
aW5lIF9XRUJLSVRfREVGSU5FX1RZUEVfRVhURU5ERUQoVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQ
RV9QQVJFTlQsIGZsYWdzLCBDb2RlKSBfV0VCS0lUX0RFRklORV9UWVBFX0VYVEVOREVEX0JFR0lO
KFR5cGVOYW1lLCB0eXBlX25hbWUsIFRZUEVfUEFSRU5ULCBmbGFncykge0NvZGU7fSBfV0VCS0lU
X0RFRklORV9UWVBFX0VYVEVOREVEX0VORCgpCisjZGVmaW5lIF9XRUJLSVRfREVGSU5FX1RZUEVf
RVhURU5ERURfQkVHSU4oVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJFTlQsIGZsYWdzKSBc
CitcCitzdGF0aWMgdm9pZCB0eXBlX25hbWUjI19jbGFzc19pbml0KFR5cGVOYW1lIyNDbGFzcyog
a2xhc3MpOyBcCitzdGF0aWMgZ3BvaW50ZXIgdHlwZV9uYW1lIyNfcGFyZW50X2NsYXNzID0gMDsg
XAorc3RhdGljIHZvaWQgdHlwZV9uYW1lIyNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KSBcCit7
IFwKKyAgICBUeXBlTmFtZSogc2VsZiA9IChUeXBlTmFtZSopb2JqZWN0OyBcCisgICAgc2VsZi0+
cHJpdi0+flR5cGVOYW1lIyNQcml2YXRlKCk7IFwKKyAgICBHX09CSkVDVF9DTEFTUyh0eXBlX25h
bWUjI19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOyBcCit9IFwKK1wKK3N0YXRpYyB2
b2lkIHR5cGVfbmFtZSMjX2NsYXNzX2ludGVybl9pbml0KGdwb2ludGVyIGtsYXNzKSBcCit7IFwK
KyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsg
XAorICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFR5cGVOYW1lIyNQ
cml2YXRlKSk7IFwKKyAgICB0eXBlX25hbWUjI19wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3Nf
cGVla19wYXJlbnQoa2xhc3MpOyBcCisgICAgdHlwZV9uYW1lIyNfY2xhc3NfaW5pdCgoVHlwZU5h
bWUjI0NsYXNzKilrbGFzcyk7IFwKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gdHlwZV9u
YW1lIyNfZmluYWxpemU7IFwKK30gXAorXAorc3RhdGljIHZvaWQgdHlwZV9uYW1lIyNfaW5pdChU
eXBlTmFtZSogc2VsZikgXAoreyBcCisgICAgVHlwZU5hbWUjI1ByaXZhdGUqIHByaXYgPSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2VsZiwgdHlwZV9uYW1lIyNfZ2V0X3R5cGUoKSwgVHlw
ZU5hbWUjI1ByaXZhdGUpOyBcCisgICAgc2VsZi0+cHJpdiA9IHByaXY7IFwKKyAgICBuZXcgKHBy
aXYpIFR5cGVOYW1lIyNQcml2YXRlKCk7IFwKK31cCitHVHlwZSB0eXBlX25hbWUjI19nZXRfdHlw
ZSh2b2lkKSBcCit7IFwKKyAgICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgZ19kZWZpbmVfdHlwZV9p
ZF9fdm9sYXRpbGUgPSAwOyBcCisgICAgaWYgKGdfb25jZV9pbml0X2VudGVyKCZnX2RlZmluZV90
eXBlX2lkX192b2xhdGlsZSkpIHsgXAorICAgICAgICBHVHlwZSBnX2RlZmluZV90eXBlX2lkID0g
XAorICAgICAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpY19zaW1wbGUoIFwKKyAgICAgICAg
ICAgICAgICBUWVBFX1BBUkVOVCwgXAorICAgICAgICAgICAgICAgIGdfaW50ZXJuX3N0YXRpY19z
dHJpbmcoI1R5cGVOYW1lKSwgXAorICAgICAgICAgICAgICAgIHNpemVvZihUeXBlTmFtZSMjQ2xh
c3MpLCBcCisgICAgICAgICAgICAgICAgKEdDbGFzc0luaXRGdW5jKXR5cGVfbmFtZSMjX2NsYXNz
X2ludGVybl9pbml0LCBcCisgICAgICAgICAgICAgICAgc2l6ZW9mKFR5cGVOYW1lKSwgXAorICAg
ICAgICAgICAgICAgIChHSW5zdGFuY2VJbml0RnVuYyl0eXBlX25hbWUjI19pbml0LCBcCisgICAg
ICAgICAgICAgICAgKEdUeXBlRmxhZ3MpZmxhZ3MpOyBcCisgICAgICAgIC8vIEN1c3RvbSBjb2Rl
IGZvbGxvd3MuCisjZGVmaW5lIF9XRUJLSVRfREVGSU5FX1RZUEVfRVhURU5ERURfRU5EKCkgXAor
ICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGUsIGdf
ZGVmaW5lX3R5cGVfaWQpOyBcCisgICAgfSBcCisgICAgcmV0dXJuIGdfZGVmaW5lX3R5cGVfaWRf
X3ZvbGF0aWxlOyBcCit9IC8vIENsb3NlcyB0eXBlX25hbWUjI19nZXRfdHlwZSgpLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTY0
YWU5ODlkOWQ2NzYxNGMwYTA4MjRiNzJlZWUyYjcxYTEzZGUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZy5jcHAKQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3Bp
byBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNDU3RyaW5nLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkpTQ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgor
CisvKioKKyAqIEBUaXRsZTogSlNDU3RyaW5nCisgKiBAU2hvcnRfZGVzY3JpcHRpb246ICNKU0NW
YWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBzdHJpbmdzCisgKgorICogSlNDU3RyaW5nIGlzIHRo
ZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBzdHJpbmcgdmFsdWVzIGluc2lkZQorICogSmF2YVNj
cmlwdENvcmUuCisgKgorICovCisKK1dFQktJVF9ERUZJTkVfU0lNUExFX1RZUEUoSlNDU3RyaW5n
LCBqc2Nfc3RyaW5nLCBKU0NfVFlQRV9WQUxVRSkKKworSlNDU3RyaW5nKiBqc2NTdHJpbmdDcmVh
dGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIEFTU0VS
VChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgQVNTRVJUKEpTVmFsdWVJc1N0cmluZyhq
c1ZhbHVlKSk7CisKKyAgICBKU0NTdHJpbmcqIHN0cmluZyA9IEpTQ19TVFJJTkcoZ19vYmplY3Rf
bmV3KEpTQ19UWVBFX1NUUklORywgImNvbnRleHQiLCBjb250ZXh0LCBOVUxMKSk7CisgICAganNj
VmFsdWVTZXRKU1ZhbHVlKEpTQ19WQUxVRShzdHJpbmcpLCBqc1ZhbHVlKTsKKworICAgIHJldHVy
biBzdHJpbmc7Cit9CisKKy8qKgorICoganNjX3N0cmluZ19uZXc6CisgKiBAY29udGV4dDogVGhl
ICNKU0NDb250ZXh0IHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZQorICogQHN0cjogVGhlIHN0
cmluZyB0aGF0IHRoZSAjSlNDU3RyaW5nIHdpbGwgcmVwcmVzZW50CisgKgorICogQ3JlYXRlcyBh
IG5ldyAjSlNDU3RyaW5nIHdpdGggQHN0ciBhcyB0aGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zOiBU
aGUgbmV3bHkgY3JlYXRlZCAjSlNDU3RyaW5nIG9iamVjdAorICovCitKU0NWYWx1ZSoganNjX3N0
cmluZ19uZXcoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgZ2NoYXIqIHN0cikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyLCBudWxscHRyKTsKKworICAgIEpTQ29udGV4dFJl
ZiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc3RyKSk7CisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmco
anNDb250ZXh0LCB2YWx1ZS5nZXQoKSk7CisKKyAgICByZXR1cm4gSlNDX1ZBTFVFKGpzY1N0cmlu
Z0NyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKSk7Cit9CisKKy8qKgorICoganNjX3N0cmluZ19nZXRf
dmFsdWU6CisgKiBAdmFsdWU6IHRoZSAjSlNDU3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlCisg
KgorICogUmV0cmlldmVzIHRoZSBzdHJpbmcgZnJvbSAjSlNDU3RyaW5nCisgKgorICogUmV0dXJu
czogI2djaGFyKiB0aGF0IG11c3QgYmUgZnJlZWQgYnkgdGhlIHVzZXIKKyAqLworZ2NoYXIqIGpz
Y19zdHJpbmdfZ2V0X3ZhbHVlKEpTQ1N0cmluZyogc3RyaW5nKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKEpTQ19JU19TVFJJTkcoc3RyaW5nKSwgbnVsbHB0cik7CisKKyAgICBKU0NDb250
ZXh0KiBjb250ZXh0OworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChzdHJpbmcpLCAiY29udGV4
dCIsICZjb250ZXh0LCBudWxscHRyKTsKKworICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBq
c2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYganNWYWx1ZSA9
IGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NfVkFMVUUoc3RyaW5nKSk7CisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHN0clZhbHVlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzQ29udGV4
dCwganNWYWx1ZSwgbnVsbHB0cikpOworICAgIHNpemVfdCBsZW5ndGggPSBKU1N0cmluZ0dldE1h
eGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyVmFsdWUuZ2V0KCkpOworICAgIGdjaGFyKiBidWZmID0g
c3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYzAobGVuZ3RoKSk7CisKKyAgICBKU1N0cmluZ0dl
dFVURjhDU3RyaW5nKHN0clZhbHVlLmdldCgpLCBidWZmLCBsZW5ndGgpOworCisgICAgZ19vYmpl
Y3RfdW5yZWYoY29udGV4dCk7CisgICAgcmV0dXJuIGdfc3RyZHVwKCJ0aGUgc3RyaW5nIHZhbHVl
Iik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3Ry
aW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDlkMTRmMGI5YjUyMDA4MDM0ZDRiZGNjMDBmYjgxZTNjYjk4ZmNhZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaApAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgSlNDU3RyaW5nX2gK
KyNkZWZpbmUgSlNDU3RyaW5nX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX1NUUklORyAgICAgICAgICAgIChqc2Nfc3RyaW5n
X2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19TVFJJTkcob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfU1RSSU5HLCBKU0NTdHJpbmcpKQor
I2RlZmluZSBKU0NfSVNfU1RSSU5HKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIEpTQ19UWVBFX1NUUklORykpCisjZGVmaW5lIEpTQ19TVFJJTkdfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfU1RS
SU5HLCBKU0NTdHJpbmdDbGFzcykpCisjZGVmaW5lIEpTQ19JU19TVFJJTkdfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfU1RSSU5HKSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX0pTQ1N0cmluZyAgICAgICAgSlNDU3RyaW5nOwordHlwZWRlZiBzdHJ1
Y3QgX0pTQ1N0cmluZ0NsYXNzICAgSlNDU3RyaW5nQ2xhc3M7CisKK3N0cnVjdCBfSlNDU3RyaW5n
IHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ1N0cmluZ0NsYXNzIHsK
KyAgICBKU0NWYWx1ZUNsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUKK2pzY19zdHJpbmdf
Z2V0X3R5cGUgICh2b2lkKTsKKworSlNDVmFsdWUqCitqc2Nfc3RyaW5nX25ldyAgICAgICAoSlND
Q29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogc3Ry
KTsKKworZ2NoYXIqCitqc2Nfc3RyaW5nX2dldF92YWx1ZSAoSlNDU3RyaW5nKiB2YWx1ZSk7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1N0cmluZ1ByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NTdHJpbmdQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRiMzMyOGM4ZWM1NjJjYzE1ZjQ5
MjNmNmUxY2ZmNGE1YWVmMzdjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmdQcml2YXRlLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRl
dmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1N0cmluZy5oIgor
CitKU0NTdHJpbmcqIGpzY1N0cmluZ0NyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg4NDkwZjE5YTczNzY1Mzk0NTRhOGE5YTdmZTVlNjhmNDlmNmQ5MzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNw
cApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBT
YW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0NVbmRlZmluZWQuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDVW5kZWZpbmVkCisg
KiBAU2hvcnRfZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCB1bmRl
ZmluZWQgdmFsdWVzCisgKgorICogSlNDVW5kZWZpbmVkIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJl
cHJlc2VudCB1bmRlZmluZWQgdmFsdWVzIGluc2lkZQorICogSmF2YVNjcmlwdENvcmUuCisgKgor
ICovCisKK0dfREVGSU5FX1RZUEUoSlNDVW5kZWZpbmVkLCBqc2NfdW5kZWZpbmVkLCBKU0NfVFlQ
RV9WQUxVRSkKKworc3RhdGljIHZvaWQganNjX3VuZGVmaW5lZF9jbGFzc19pbml0KEpTQ1VuZGVm
aW5lZENsYXNzKikKK3sKK30KKworc3RhdGljIHZvaWQganNjX3VuZGVmaW5lZF9pbml0KEpTQ1Vu
ZGVmaW5lZCopCit7Cit9CisKK0pTQ1VuZGVmaW5lZCoganNjVW5kZWZpbmVkQ3JlYXRlKEpTQ0Nv
bnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCkpOworICAgIEFTU0VSVChKU1ZhbHVlSXNVbmRlZmluZWQoanNWYWx1
ZSkpOworCisgICAgSlNDVW5kZWZpbmVkKiB1bmRlZmluZWQgPSBKU0NfVU5ERUZJTkVEKGdfb2Jq
ZWN0X25ldyhKU0NfVFlQRV9VTkRFRklORUQsICJjb250ZXh0IiwgY29udGV4dCwgTlVMTCkpOwor
ICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZShKU0NfVkFMVUUodW5kZWZpbmVkKSwganNWYWx1ZSk7CisK
KyAgICByZXR1cm4gdW5kZWZpbmVkOworfQorCisvKioKKyAqIGpzY191bmRlZmluZWRfbmV3Ogor
ICogQGNvbnRleHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUK
KyAqIEB2YWx1ZTogVGhlIHVuZGVmaW5lZCB2YWx1ZSB0aGF0IHRoZSAjSlNDVW5kZWZpbmVkIHdp
bGwgcmVwcmVzZW50CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlNDVW5kZWZpbmVkIHdpdGggQHZh
bHVlIGFzIHRoZSB2YWx1ZQorICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBjcmVhdGVkICNKU0NV
bmRlZmluZWQgb2JqZWN0CisgKi8KK0pTQ1ZhbHVlKiBqc2NfdW5kZWZpbmVkX25ldyhKU0NDb250
ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhU
KGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBqc2ND
b250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYganNWYWx1ZSA9IEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisKKyAgICByZXR1cm4gSlNDX1ZBTFVFKGpz
Y1VuZGVmaW5lZENyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBmYmQ1N2EwN2Q4
OWZiY2U0MjFlNjk4YzQ3ZTEwM2E0NTE4NjhjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWQuaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJh
bCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgSlNDVW5kZWZpbmVkX2gKKyNkZWZpbmUgSlND
VW5kZWZpbmVkX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pT
Q0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIEpTQ19UWVBFX1VOREVGSU5FRCAgICAgICAgICAgIChqc2NfdW5kZWZpbmVkX2dl
dF90eXBlKCkpCisjZGVmaW5lIEpTQ19VTkRFRklORUQob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfVU5ERUZJTkVELCBKU0NVbmRlZmlu
ZWQpKQorI2RlZmluZSBKU0NfSVNfVU5ERUZJTkVEKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1VOREVGSU5FRCkpCisjZGVmaW5lIEpTQ19V
TkRFRklORURfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgSlNDX1RZUEVfVU5ERUZJTkVELCBKU0NVbmRlZmluZWRDbGFzcykpCisjZGVmaW5lIEpTQ19J
U19VTkRFRklORURfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgSlNDX1RZUEVfVU5ERUZJTkVEKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1VuZGVmaW5lZCAg
ICAgICAgSlNDVW5kZWZpbmVkOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1VuZGVmaW5lZENsYXNzICAg
SlNDVW5kZWZpbmVkQ2xhc3M7CisKK3N0cnVjdCBfSlNDVW5kZWZpbmVkIHsKKyAgICBKU0NWYWx1
ZSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX0pTQ1VuZGVmaW5lZENsYXNzIHsKKyAgICBKU0NWYWx1
ZUNsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUKK2pzY191bmRlZmluZWRfZ2V0X3R5cGUg
KHZvaWQpOworCitKU0NWYWx1ZSoKK2pzY191bmRlZmluZWRfbmV3ICAgICAgKEpTQ0NvbnRleHQq
IGNvbnRleHQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWRQcml2YXRlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
NTNjNzMzNmFmODhlNDhmZjRiMTBkNWZmZGVmMjc0N2UyZDY4MjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oCkBA
IC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVl
bCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU0NVbmRlZmluZWQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVl
UmVmLmg+CisKKworSlNDVW5kZWZpbmVkKiBqc2NVbmRlZmluZWRDcmVhdGUoSlNDQ29udGV4dCos
IEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzM1MWVkNzYyOTUxYWZmZTljYzEzMjU2NDYzZDE2YWI5YWZlYjcxNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2
w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisKKyNpbmNsdWRlICJKU0NCb29sZWFu
LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NOdW1iZXIu
aCIKKyNpbmNsdWRlICJKU0NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDU3RyaW5nLmgiCisjaW5j
bHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+CisKKy8qKgorICogU0VDVElPTjogSlNDVmFsdWUKKyAqIEBTaG9ydF9kZXNjcmlwdGlv
bjogQmFzZSBjbGFzcyByZXByZXNlbnRpbmcgSmF2YVNjcmlwdENvcmUgdmFsdWVzCisgKiBAVGl0
bGU6IEpTQ1ZhbHVlCisgKgorICogSlNDVmFsdWUgaXMgdGhlIGJhc2UgY2xhc3MgdXNlZCB0byBy
ZXByZXNlbnQgdmFsdWVzIGluc2lkZQorICogSmF2YVNjcmlwdENvcmUuIEFjdHVhbCB2YWx1ZXMg
YXJlIHN1YnR5cGVzIG9mIHRoaXMgY2xhc3MuIFRoZQorICogY3VycmVudCBzdWJjbGFzc2VzIGFy
ZTogI0pTQ1N0cmluZywgI0pTQ051bWJlciBhbmQgI0pTQ0Jvb2xlYW4uCisgKgorICovCisKK3R5
cGVkZWYgc3RydWN0IF9KU0NWYWx1ZVByaXZhdGUgeworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7
CisgICAgSlNWYWx1ZVJlZiB2YWx1ZTsKK30gSlNDVmFsdWVQcml2YXRlOworCitXRUJLSVRfREVG
SU5FX0FCU1RSQUNUX1RZUEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX0lOSVRJQUxMWV9V
Tk9XTkVEKQorCitlbnVtIHsKKyAgICBrUFJPUF8wLAorCisgICAga1BST1BfQ09OVEVYVCwKK307
CisKK3N0YXRpYyB2b2lkIGpzY1ZhbHVlR2V0UHJvcGVydHkoR09iamVjdCogb2JqLCBndWludCBw
cm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbV9zcGVjKQoreworICAgIEpT
Q1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19WQUxVRShvYmopLT5wcml2OworCisgICAgc3dpdGNo
IChwcm9wX2lkKSB7CisgICAgY2FzZSBrUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHByaXYtPmNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqLCBwcm9w
X2lkLCBwYXJhbV9zcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY1ZhbHVlU2V0UHJv
cGVydHkoR09iamVjdCogb2JqLCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwYXJhbV9zcGVjKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpT
Q19WQUxVRShvYmopLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBr
UFJPUF9DT05URVhUOiB7CisgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVY
VChnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IGNv
bnRleHQ7CisgICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4
dCksIChncG9pbnRlciopJnByaXYtPmNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
aiwgcHJvcF9pZCwgcGFyYW1fc3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWYWx1
ZURpc3Bvc2UoR09iamVjdCogb2JqKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpT
Q19WQUxVRShvYmopLT5wcml2OworCisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsKKyAgICAgICAg
SlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29u
dGV4dCk7CisKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChqc0NvbnRleHQsIHByaXYtPnZhbHVl
KTsKKyAgICAgICAgcHJpdi0+dmFsdWUgPSBudWxscHRyOworCisgICAgICAgIGdfb2JqZWN0X3Jl
bW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocHJpdi0+Y29udGV4dCksIChncG9pbnRlciopJnBy
aXYtPmNvbnRleHQpOworICAgICAgICBwcml2LT5jb250ZXh0ID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBHX09CSkVDVF9DTEFTUyhqc2NfdmFsdWVfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmop
OworfQorCitzdGF0aWMgdm9pZCBqc2NfdmFsdWVfY2xhc3NfaW5pdChKU0NWYWx1ZUNsYXNzKiBr
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xh
c3MpOworCisgICAgb2JqQ2xhc3MtPmdldF9wcm9wZXJ0eSA9IGpzY1ZhbHVlR2V0UHJvcGVydHk7
CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0eSA9IGpzY1ZhbHVlU2V0UHJvcGVydHk7CisgICAg
b2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NWYWx1ZURpc3Bvc2U7CisKKyAgICAvKioKKyAgICAgKiBK
U0NWYWx1ZTpjb250ZXh0OgorICAgICAqCisgICAgICogVGhlICNKU0NDb250ZXh0IG9mIHRoZSB2
YWx1ZS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNs
YXNzLAorICAgICAgICBrUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KCJjb250ZXh0IiwKKyAgICAgICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICJKYXZhU2Ny
aXB0IGV4ZWN1dGlvbiBjb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBFX0NPTlRFWFQsCisg
ICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09O
U1RSVUNUX09OTFkpKSk7Cit9CisKK0pTVmFsdWVSZWYganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ1Zh
bHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKworICAgIHJldHVybiBwcml2LT52
YWx1ZTsKK30KKwordm9pZCBqc2NWYWx1ZVNldEpTVmFsdWUoSlNDVmFsdWUqIHZhbHVlLCBKU1Zh
bHVlUmVmIGpzVmFsdWUpCit7CisgICAgQVNTRVJUKEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAg
IEFTU0VSVChqc1ZhbHVlKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5w
cml2OworICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQpOworCisgICAgQVNTRVJUKCFwcml2LT52YWx1ZSk7CisKKyAgICBwcml2
LT52YWx1ZSA9IGpzVmFsdWU7CisgICAgSlNWYWx1ZVByb3RlY3QoanNDb250ZXh0LCBqc1ZhbHVl
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWE3M2UxZjM1MjIyZjQyNGM1NDQ5ZWQ2Y2M1NDBmMDA5ZWUwZDFhOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9j
w7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBKU0NWYWx1ZV9oCisjZGVm
aW5lIEpTQ1ZhbHVlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBKU0NfVFlQRV9WQUxVRSAgICAgICAgICAgIChqc2NfdmFsdWVfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgSlNDX1ZBTFVFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZSkpCisjZGVmaW5lIEpT
Q19JU19WQUxVRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBKU0NfVFlQRV9WQUxVRSkpCisjZGVmaW5lIEpTQ19WQUxVRV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWVD
bGFzcykpCisjZGVmaW5lIEpTQ19JU19WQUxVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9WQUxVRSkpCisKK3R5cGVkZWYgc3RydWN0IF9K
U0NWYWx1ZSAgICAgICAgSlNDVmFsdWU7Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWVDbGFzcyAg
IEpTQ1ZhbHVlQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWVQcml2YXRlIEpTQ1ZhbHVl
UHJpdmF0ZTsKKworCitzdHJ1Y3QgX0pTQ1ZhbHVlIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKwor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfSlNDVmFsdWVDbGFzcyB7
CisgICAgR09iamVjdENsYXNzIHBhcmVudENsYXNzOworfTsKKworR1R5cGUKK2pzY192YWx1ZV9n
ZXRfdHlwZSAgICAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIz
MDlkMzRjM2VlZjQxMTM3OTEzNTE5MTRhM2QzODUyMzQ4YjNlN2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmgKQEAgLTAs
MCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFBy
b2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCitKU1ZhbHVlUmVmCitq
c2NWYWx1ZUdldEpTVmFsdWUoSlNDVmFsdWUqKTsKKwordm9pZAoranNjVmFsdWVTZXRKU1ZhbHVl
KEpTQ1ZhbHVlKiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvanNjLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTE2NzZjOGM0YzU5MzAwM2JhZjM3ZGE5ZmMyMGMwN2NhMDEzZjU4ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAt
MCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwg
UHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYganNjX2gKKyNkZWZp
bmUganNjX2gKKworI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVkZSA8anNjL0pT
Q1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ0Jvb2xlYW4uaD4KKyNpbmNsdWRlIDxqc2MvSlND
TnVtYmVyLmg+CisjaW5jbHVkZSA8anNjL0pTQ1N0cmluZy5oPgorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxZTkzZDRiZGE3NjBlMzE1ZDE1OTMxMGJmYThi
YTdhMGYzMDE3OTNlLi5mZDBjMWJjMDIwYjIwOWU4ZmY5NDFhNTQwMzU1NjVmZmE3MjA3ZTczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMzk1LDcgKzEzOTUsNyBAQCBl
bmRpZiAoKQogIyBGb3JjZSBzdGFnaW5nIG9mIHNoYXJlZCBzY3JpcHRzLCBldmVuIGlmIHRoZXkg
YXJlbid0IGRpcmVjdGx5IHVzZWQgdG8gYnVpbGQgSmF2YVNjcmlwdENvcmUuCiAKIGFkZF9jdXN0
b21fdGFyZ2V0KHN0YWdlU2hhcmVkU2NyaXB0cyBERVBFTkRTICR7SmF2YVNjcmlwdENvcmVfU0NS
SVBUU30pCi1hZGRfZGVwZW5kZW5jaWVzKEphdmFTY3JpcHRDb3JlIHN0YWdlU2hhcmVkU2NyaXB0
cykKK2FkZF9kZXBlbmRlbmNpZXMoSmF2YVNjcmlwdENvcmUgc3RhZ2VTaGFyZWRTY3JpcHRzICR7
SmF2YVNjcmlwdENvcmVfRVhUUkFfREVQRU5ERU5DSUVTfSkKIAogaWYgKE1TVkMpCiAgICAgYWRk
X2N1c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDQ3OTFhYmE0OWEzYzI1NTUyOWUwMDA1ODMwZWZmMDMxNzMzMGVmNTUuLmM3MWViNmU0YjI0
YTQ5YzEyMWUyMGE5ZjU3ZjVkOTQyODg1N2M0YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxh
dGZvcm1HVEsuY21ha2UKQEAgLTQ4LDMgKzQ4LDQzIEBAIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX0xJQlJBUklFUwogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU1lTVEVNX0lOQ0xVREVf
RElSRUNUT1JJRVMKICAgICAke0dMSUJfSU5DTFVERV9ESVJTfQogKQorCitpZiAoRU5BQkxFX0pT
Q19HTElCKQorICAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtGT1JXQVJESU5HX0hFQURFUlNfRElS
fS9KYXZhU2NyaXB0Q29yZUdsaWIpCisgICAgIyBhbGxvd3MgaW5jbHVkZXMgbGlrZSAjaW5jbHVk
ZSA8anNjL2pzYy5oPiB3aGljaCBzaW11bGF0ZXMgaW5zdGFsbGVkIGhlYWRlcnMuCisgICAgYWRk
X2N1c3RvbV9jb21tYW5kKAorICAgICAgICBPVVRQVVQgJHtGT1JXQVJESU5HX0hFQURFUlNfRElS
fS9KYXZhU2NyaXB0Q29yZUdsaWIvanNjCisgICAgICAgIERFUEVORFMgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L0FQSS9nbGliCisgICAgICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L0FQSS9nbGliICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENv
cmVHbGliL2pzYworICAgICkKKyAgICBhZGRfY3VzdG9tX3RhcmdldChKYXZhU2NyaXB0Q29yZUds
aWItZmFrZS1hcGktaGVhZGVycworICAgICAgICBERVBFTkRTICR7Rk9SV0FSRElOR19IRUFERVJT
X0RJUn0vSmF2YVNjcmlwdENvcmVHbGliL2pzYworICAgICkKKyAgICBzZXQoSmF2YVNjcmlwdENv
cmVfRVhUUkFfREVQRU5ERU5DSUVTCisgICAgICAgIEphdmFTY3JpcHRDb3JlR2xpYi1mYWtlLWFw
aS1oZWFkZXJzCisgICAgKQorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoCisgICAgICAgICR7Rk9S
V0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmVHbGliCisgICAgICAgICR7SkFWQVND
UklQVENPUkVfRElSfS9BUEkvZ2xpYgorICAgICkKKyAgICBzZXQoSmF2YVNjcmlwdENvcmVHbGli
X1NPVVJDRVMKKyAgICAgICAgQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHAKKyAgICAgICAgQVBJL2ds
aWIvSlNDQ29udGV4dC5jcHAKKyAgICAgICAgQVBJL2dsaWIvSlNDTnVtYmVyLmNwcAorICAgICAg
ICBBUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCisgICAgICAgIEFQSS9nbGliL0pTQ1VuZGVmaW5lZC5j
cHAKKyAgICAgICAgQVBJL2dsaWIvSlNDVmFsdWUuY3BwCisgICAgKQorICAgIHNldChKYXZhU2Ny
aXB0Q29yZUdsaWJfSEVBREVSUworICAgICAgICBBUEkvZ2xpYi9KU0NCb29sZWFuLmgKKyAgICAg
ICAgQVBJL2dsaWIvSlNDQ29udGV4dC5oCisgICAgICAgIEFQSS9nbGliL0pTQ051bWJlci5oCisg
ICAgICAgIEFQSS9nbGliL0pTQ1N0cmluZy5oCisgICAgICAgIEFQSS9nbGliL0pTQ1VuZGVmaW5l
ZC5oCisgICAgICAgIEFQSS9nbGliL0pTQ1ZhbHVlLmgKKyAgICAgICAgQVBJL2dsaWIvanNjLmgK
KyAgICApCisgICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUworICAgICAgICAk
e0phdmFTY3JpcHRDb3JlR2xpYl9TT1VSQ0VTfQorICAgICkKK2VuZGlmICgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RL
LmNtYWtlCmluZGV4IDE3YzJjODJlYjM0MzNmY2NlNjBkZDdiZTVhYzY3MTI1YjgzZjM4YjQuLmZi
ZDAzZWQ3ZjcyNTkwODkzZThlNTMzNzdjMGRiNDNjNWJhZmVkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNt
YWtlCkBAIC04NSw2ICs4NSw3IEBAIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9QTFVHSU5f
UFJPQ0VTU19HVEsyICJXaGV0aGVyIHRvIGJ1aWxkIFdlYktpdFBsdWdpblByCiBXRUJLSVRfT1BU
SU9OX0RFRklORShFTkFCTEVfUVVBUlRaX1RBUkdFVCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9y
dCBmb3IgdGhlIFF1YXJ0eiB3aW5kb3dpbmcgdGFyZ2V0LiIgUFVCTElDICR7R1RLM19TVVBQT1JU
U19RVUFSVFp9KQogV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1gxMV9UQVJHRVQgIldoZXRo
ZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBYMTEgd2luZG93aW5nIHRhcmdldC4iIFBVQkxJ
QyAke0dUSzNfU1VQUE9SVFNfWDExfSkKIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9XQVlM
QU5EX1RBUkdFVCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFdheWxhbmQgd2lu
ZG93aW5nIHRhcmdldC4iIFBVQkxJQyAke0dUSzNfU1VQUE9SVFNfV0FZTEFORH0pCitXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfSlNDX0dMSUIgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQg
Zm9yIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MuIiBQVUJMSUMgT0ZGKQogV0VCS0lUX09Q
VElPTl9ERUZJTkUoVVNFX0xJQk5PVElGWSAiV2hldGhlciB0byBlbmFibGUgdGhlIGRlZmF1bHQg
d2ViIG5vdGlmaWNhdGlvbiBpbXBsZW1lbnRhdGlvbi4iIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJ
T05fREVGSU5FKFVTRV9MSUJIWVBIRU4gIldoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IGF1
dG9tYXRpYyBoeXBoZW5hdGlvbiBpbXBsZW1lbnRhdGlvbi4iIFBVQkxJQyBPTikKIFdFQktJVF9P
UFRJT05fREVGSU5FKFVTRV9MSUJTRUNSRVQgIldoZXRoZXIgdG8gZW5hYmxlIHRoZSBwZXJzaXN0
ZW50IGNyZWRlbnRpYWwgc3RvcmFnZSB1c2luZyBsaWJzZWNyZXQuIiBQVUJMSUMgT04pCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGY2NjdkYjU0
NWNkODRjNDQyYjlmYWQ4NTFhN2I0YzQ4ZjUyODFhNC4uMTJmNDczZjk0MTNmN2ZiMGQ1NWQ2MDJi
Y2UwYTM1MTc5NjdlZDUyZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE2LTEwLTI3ICBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgIDx0ZXZhdW1AZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIElu
aXRpYWwgaW1wbGVtZW50YXRpb24gb2YgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDYxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHNp
bXBsZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGEgSmF2YVNjcmlwdENvcmUgYmluZGluZ3MK
KyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBkaXNjdXNzaW9uIG9uIHdlYmtsaXQtZ3RrIG1haWxp
bmcgbGlzdCB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFp
bC93ZWJraXQtZ3RrLzIwMTYtT2N0b2Jlci8wMDI4MzQuaHRtbAorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtOiBBZGRlZCBqc2MtZ2xpYiBvcHRpb24gYW5kIGVu
YWJsaW5nIG9uIEdUSyBwb3J0CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5OiBBZGRlZCBydWxlcyB0byBpZ25vcmUgbmV3IEphdmFTY3JpcHRDb3JlIGdsaWIKKyAg
ICAgICAgcHVibGljIGhlYWRlciBmaWxlcyBhbmQgc3RvcHBlZCBjaGVja2luZyByZWFkYWJpbGl0
eS9uYW1pbmcvdW5kZXJzY29yZXMKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0phdmFTY3JpcHRD
b3JlR2xpYi9tYWluLmNwcDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bUdUSy5jbWFrZTogQWRkZWQgaW5zdHJ1Y3Rpb25zIHRvIGJ1aWxkIFRlc3RKYXZhU2NyaXB0Q29y
ZUdsaWIKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9U
ZXN0SlNDQm9vbGVhbi5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NCb29sZWFuLmg6IEFkZGVkLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NDb250ZXh0LmNwcDog
QWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIv
VGVzdEpTQ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ051bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NOdW1iZXIuaDogQWRk
ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVz
dEpTQ1N0cmluZy5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NTdHJpbmcuaDogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ1VuZGVmaW5lZC5jcHA6IEFk
ZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rl
c3RKU0NVbmRlZmluZWQuaDogQWRkZWQuCisKIDIwMTYtMTAtMTggIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFdlYlJUQzogW0dUS10gVXBkYXRlIGpo
YnVpbGQgZW52aXJvbm1lbnQgZm9yIE9wZW5XZWJSVEMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9G
ZWF0dXJlTGlzdC5wbQppbmRleCAxYmI1NDhkZjIzOGNkZWJmNDRiNjE3MWU1Njg4OGQxNDY5MGMx
ZmE3Li5lOTQ3ODkwOGUxYzBhZjYzMmU2NzkwMDMxM2Y0OGE4M2E0N2QwZDg0IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCkBAIC00NjUsNiArNDY1LDkgQEAgbXkgQGZl
YXR1cmVzID0gKAogCiAgICAgeyBvcHRpb24gPT4gInhzbHQiLCBkZXNjID0+ICJUb2dnbGUgWFNM
VCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1hTTFQiLCBkZWZhdWx0ID0+IDEs
IHZhbHVlID0+IFwkeHNsdFN1cHBvcnQgfSwKKworICAgIHsgb3B0aW9uID0+ICJqc2MtZ2xpYiIs
IGRlc2MgPT4gIlRvZ2dsZSBKYXZhU2NyaXB0Q29yZSBnbGliIGJpbmRpbmdzIHN1cHBvcnQiLAor
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSlNDX0dMSUIiLCBkZWZhdWx0ID0+IChpc0d0aygpKSwg
dmFsdWUgPT4gXCR4c2x0U3VwcG9ydCB9LAogKTsKIAogc3ViIGdldEZlYXR1cmVPcHRpb25MaXN0
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCBlMmZhNGZkM2E5
N2E2YzdmZDJiODc4NDNjMjUyZmMyZWIxOTdkODY3Li5jYzk5Mzk1MmUzODE1MDE4YjNjNGY0ZDhj
OGUyZDQ5ZGFlNmI4YzY5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5
CkBAIC0xNjMsNyArMTYzLDEwIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAoWyMg
YXNzZW1ibGVyIGhhcyBsb3RzIG9mIG9wY29kZXMgdGhhdCB1c2UgdW5kZXJzY29yZXMsIHNvCiAg
ICAgICAjIHdlIGRvbid0IGNoZWNrIGZvciB1bmRlcnNjb3JlcyBpbiB0aGF0IGRpcmVjdG9yeS4K
ICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ2Fzc2VtYmxl
cicpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnaml0
JywgJ0pJVCcpXSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3Jl
JywgJ2ppdCcsICdKSVQnKSwKKyAgICAgICMgZ2xpYiBiaW5kaW5ncyB1c2UgdW5kZXJzY29yZXMg
aW4gZnVuY3Rpb24gbmFtZXMsIHNvIHdlCisgICAgICAjIGRvbid0IGNoZWNrIGZvciB1bmRlcnNj
b3JlcyBpbiBnbGliIGJpbmRpbmdzCisgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZh
U2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicpXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5n
L3VuZGVyc2NvcmVzIl0pLAogICAgIChbIyBKSVRTdHVicyBoYXMgYW4gdXN1YWwgc3ludGF4IHdo
aWNoIGNhdXNlcyBmYWxzZSBhbGFybXMgZm9yIGEgZmV3IGNoZWNrcy4KICAgICAgIG9zLnBhdGgu
am9pbignSmF2YVNjcmlwdENvcmUnLCAnaml0JywgJ0pJVFN0dWJzLmNwcCcpXSwKQEAgLTMwNyw3
ICszMTAsMTEgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScs
ICdBUEknLCAnZ3RrJywgJ0RPTScpLAogCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2Vi
S2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwKLSAgICBvcy5w
YXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5k
bGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyldCisgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxl
JywgJ0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1leHRlbnNpb24uaCcpLAorCisgICAgIyBHT2Jq
ZWN0IGJpbmRpbmdzIGZvciBKYXZhU2NyaXB0Q29yZS4KKyAgICByZS5jb21waWxlKHJlLmVzY2Fw
ZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicp
ICsgb3MucGF0aC5zZXApICsgcidKU0MoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCisgICAgb3Mu
cGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInLCAnanNj
LmgnKV0KIAogIyBGaWxlcyB0byBza2lwIHRoYXQgYXJlIG1vcmUgY29tbW9uIG9yIG9idmlvdXMu
CiAjCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0phdmFTY3JpcHRDb3JlR2xpYi9t
YWluLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSmF2YVNjcmlwdENvcmVHbGliL21haW4uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ1NjJhMmUxYTE3MGY0NTVlNDQ1ZDIxNTEzNDhmMTQ3NDFhMmE4NjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0phdmFTY3JpcHRDb3JlR2xpYi9t
YWluLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOq
dsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlND
Qm9vbGVhbi5oIgorI2luY2x1ZGUgIlRlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlRlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDTnVtYmVy
LmgiCisjaW5jbHVkZSAiVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NTdHJpbmcuaCIK
KyNpbmNsdWRlICJUZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ1VuZGVmaW5lZC5oIgor
I2luY2x1ZGUgPGdsaWIuaD4KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK
KyAgICBnX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvSmF2YVNjcmlwdENvcmVHbGliL0pTQ0NvbnRleHQiLCAgIHRlc3RKU0NDb250ZXh0KTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9KYXZhU2NyaXB0Q29yZUdsaWIvSlNDQm9vbGVhbiIsICAg
dGVzdEpTQ0Jvb2xlYW4pOworICAgIGdfdGVzdF9hZGRfZnVuYygiL0phdmFTY3JpcHRDb3JlR2xp
Yi9KU0NOdW1iZXIiLCAgICB0ZXN0SlNDTnVtYmVyKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9K
YXZhU2NyaXB0Q29yZUdsaWIvSlNDU3RyaW5nIiwgICAgdGVzdEpTQ1N0cmluZyk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvSmF2YVNjcmlwdENvcmVHbGliL0pTQ1VuZGVmaW5lZCIsIHRlc3RKU0NV
bmRlZmluZWQpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDkxYTJjOWU3YmQzMTM4Y2E1MDc4Y2Y1YTg0YzY3MTAw
OWYzNWEzODAuLmFlNGM1YTc0ODY2OWJiYjA1YWNlYzNhYTYzZDM4NWFjNWFiMDZiNzYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTQ5LDMgKzE0OSwyNCBAQCBsaXN0
KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvZ2xpYi9HVW5pcXVlUHRyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwCiApCisKK2lmIChFTkFCTEVfSlNDX0dMSUIpCisgICAg
aW5jbHVkZV9kaXJlY3RvcmllcygKKyAgICAgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9K
YXZhU2NyaXB0Q29yZUdsaWIKKyAgICApCisgICAgc2V0KFRlc3RKYXZhU2NyaXB0Q29yZUdsaWJf
U09VUkNFUworICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9KYXZhU2NyaXB0Q29yZUdsaWIv
bWFpbi5jcHAKKyAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvSmF2YVNjcmlwdENv
cmVHbGliL1Rlc3RKU0NCb29sZWFuLmNwcAorICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ0NvbnRleHQuY3BwCisgICAgICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDTnVtYmVyLmNw
cAorICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIv
VGVzdEpTQ1N0cmluZy5jcHAKKyAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvSmF2
YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NVbmRlZmluZWQuY3BwCisgICAgKQorICAgIGFkZF9leGVj
dXRhYmxlKFRlc3RKYXZhU2NyaXB0Q29yZUdsaWIKKyAgICAgICAgJHtUZXN0SmF2YVNjcmlwdENv
cmVHbGliX1NPVVJDRVN9CisgICAgKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhUZXN0SmF2
YVNjcmlwdENvcmVHbGliCisgICAgICAgIGdsaWItMi4wCisgICAgICAgIEphdmFTY3JpcHRDb3Jl
CisgICAgKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NCb29sZWFuLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NCb29sZWFuLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMWU4MGE4OTVjOThhMzllY2JjZDE2ODMzNjJkNTYxZDM1YmJlNGI0Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpT
Q0Jvb2xlYW4uY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RKU0NCb29sZWFuLmgiCisKKyNpbmNsdWRl
IDxqc2MvSlNDQm9vbGVhbi5oPgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8anNjL0pTQ1VuZGVmaW5lZC5oPgorCit2b2lkIHRlc3RKU0NCb29sZWFuTGlmZWN5Y2xlKCkK
K3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjX2NvbnRleHRfbmV3KCk7CisgICAgSlND
VmFsdWUqIHNldFZhbHVlID0ganNjX2Jvb2xlYW5fbmV3KGNvbnRleHQsIHRydWUpOworICAgIEpT
Q1ZhbHVlKiBnZXRWYWx1ZTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1Qoc2V0VmFsdWUpLCAoZ3BvaW50ZXIqKSZzZXRWYWx1ZSk7CisgICAganNjX2NvbnRleHRfc2V0
X3ZhbHVlKGNvbnRleHQsICJ0cnVlIiwgc2V0VmFsdWUpOworCisgICAgZ2V0VmFsdWUgPSBqc2Nf
Y29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgInRydWUiKTsKKyAgICBnX29iamVjdF9hZGRfd2Vh
a19wb2ludGVyKEdfT0JKRUNUKGdldFZhbHVlKSwgKGdwb2ludGVyKikmZ2V0VmFsdWUpOworCisg
ICAgZ19hc3NlcnQoSlNDX0lTX0JPT0xFQU4oZ2V0VmFsdWUpKTsKKworICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4dCksIChncG9pbnRlciopJmNvbnRleHQpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQpOworCisgICAgZ19hc3NlcnQoIWNvbnRleHQpOwor
ICAgIGdfYXNzZXJ0KCFzZXRWYWx1ZSk7CisgICAgZ19hc3NlcnQoIWdldFZhbHVlKTsKKyAgICAK
K30KKwordm9pZCB0ZXN0SlNDQm9vbGVhblZhbHVlcygpCit7CisgICAgSlNDQ29udGV4dCogY29u
dGV4dCA9IGpzY19jb250ZXh0X25ldygpOworICAgIGdfYXNzZXJ0KEpTQ19JU19DT05URVhUKGNv
bnRleHQpKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHQp
LCAoZ3BvaW50ZXIqKSZjb250ZXh0KTsKKworICAgIEpTQ1ZhbHVlKiB1bmRlZiA9IGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LCAibm9uLWV4aXN0YW50LXByb3BlcnR5Iik7CisgICAgSlND
VmFsdWUqIGJvb2xUcnVlOworICAgIEpTQ1ZhbHVlKiBib29sRmFsc2U7CisKKyAgICBqc2NfY29u
dGV4dF9zZXRfdmFsdWUoY29udGV4dCwgInRydWUiLCAganNjX2Jvb2xlYW5fbmV3KGNvbnRleHQs
IHRydWUpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgImZhbHNlIiwganNj
X2Jvb2xlYW5fbmV3KGNvbnRleHQsIGZhbHNlKSk7CisKKyAgICBib29sVHJ1ZSA9IGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LCAidHJ1ZSIpOworICAgIGJvb2xGYWxzZSA9IGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LCAiZmFsc2UiKTsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19V
TkRFRklORUQodW5kZWYpKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfQk9PTEVBTihib29sVHJ1ZSkp
OworICAgIGdfYXNzZXJ0KEpTQ19JU19CT09MRUFOKGJvb2xGYWxzZSkpOworCisgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfYm9vbGVhbl9nZXRfdmFsdWUoSlNDX0JPT0xFQU4oYm9vbFRydWUpKSk7Cisg
ICAgZ19hc3NlcnRfZmFsc2UoanNjX2Jvb2xlYW5fZ2V0X3ZhbHVlKEpTQ19CT09MRUFOKGJvb2xG
YWxzZSkpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFj
b250ZXh0KTsKK30KKwordm9pZCB0ZXN0SlNDQm9vbGVhbigpCit7CisgICAgdGVzdEpTQ0Jvb2xl
YW5MaWZlY3ljbGUoKTsKKyAgICB0ZXN0SlNDQm9vbGVhblZhbHVlcygpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ0Jv
b2xlYW4uaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rl
c3RKU0NCb29sZWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRlODUyNWM5YTM2NDY3ZTViMzRhNWRjZGMxZGFk
MTI1ODgwYjU2YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
SmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NCb29sZWFuLmgKQEAgLTAsMCArMSwyMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwg
PHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwordm9pZCB0ZXN0SlNDQm9vbGVhbigp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUds
aWIvVGVzdEpTQ0NvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2Ny
aXB0Q29yZUdsaWIvVGVzdEpTQ0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ODFkYzgyZjY1MGYx
YWRmM2VkZGFmNGIzZDZmYWE4NGZmYjM5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDQ29udGV4dC5jcHAKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEpTQ0NvbnRleHQuaCIKKworI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0
Lmg+CisKK3ZvaWQgdGVzdEpTQ0NvbnRleHRMaWZlY3ljbGUoKQoreworICAgIEpTQ0NvbnRleHQq
IGNvbnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2lu
dGVyKEdfT0JKRUNUKGNvbnRleHQpLCAoZ3BvaW50ZXIqKSZjb250ZXh0KTsKKworICAgIGdfb2Jq
ZWN0X3JlZihjb250ZXh0KTsKKyAgICBnX29iamVjdF91bnJlZihjb250ZXh0KTsKKyAgICBnX2Fz
c2VydChjb250ZXh0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQpOworICAgIGdfYXNz
ZXJ0KCFjb250ZXh0KTsKK30KKwordm9pZCB0ZXN0SlNDQ29udGV4dCgpCit7CisgICAgdGVzdEpT
Q0NvbnRleHRMaWZlY3ljbGUoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NDb250ZXh0LmggYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDQ29udGV4dC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcwMDMyNzAxMGNmNDVjZTA3ZDc3YzExOGNlNGNmY2VhNTQ5N2EyMGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0
SlNDQ29udGV4dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK3ZvaWQgdGVzdEpTQ0NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NOdW1iZXIuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ051bWJl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmIyZmIxMTEzNDViNGNiMmY0OWY0MzAyNTk0ZTBlM2U0MjFjMTRh
ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlw
dENvcmVHbGliL1Rlc3RKU0NOdW1iZXIuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVt
QGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0SlNDTnVtYmVy
LmgiCisKKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgorI2luY2x1ZGUgPGpzYy9KU0NOdW1i
ZXIuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVW5kZWZpbmVkLmg+CisKK3N0YXRpYyB2b2lkIGluaXRD
b250ZXh0RG91YmxlKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19hc3NlcnQoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCkpOworCisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQs
ICJudW1iZXItbiIsIGpzY19udW1iZXJfbmV3X2RvdWJsZShjb250ZXh0LCAtMS4yKSk7CisgICAg
anNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJudW1iZXIteiIsIGpzY19udW1iZXJfbmV3
X2RvdWJsZShjb250ZXh0LCAwLjAwMCkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LCAibnVtYmVyLXAiLCBqc2NfbnVtYmVyX25ld19kb3VibGUoY29udGV4dCwgMy43KSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NOdW1iZXJEb3VibGUoSlNDQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBKU0NWYWx1ZSogbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAibnVt
YmVyLW4iKTsKKyAgICBKU0NWYWx1ZSogeiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0
LCAibnVtYmVyLXoiKTsKKyAgICBKU0NWYWx1ZSogcCA9IGpzY19jb250ZXh0X2dldF92YWx1ZShj
b250ZXh0LCAibnVtYmVyLXAiKTsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIobikpOwor
ICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIoeikpOworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1C
RVIocCkpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChuKSwgKGdw
b2ludGVyKikmbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCh6KSwg
KGdwb2ludGVyKikmeik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChw
KSwgKGdwb2ludGVyKikmcCk7CisKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfbnVtYmVyX2dl
dF9kb3VibGUoSlNDX05VTUJFUihuKSksID09LCAtMS4yKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9h
dChqc2NfbnVtYmVyX2dldF9kb3VibGUoSlNDX05VTUJFUih6KSksID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBmbG9hdChqc2NfbnVtYmVyX2dldF9kb3VibGUoSlNDX05VTUJFUihwKSksID09LCAz
LjcpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29udGV4dCk7CisgICAgZ19hc3NlcnQoIW4pOwor
ICAgIGdfYXNzZXJ0KCF6KTsKKyAgICBnX2Fzc2VydCghcCk7Cit9CisKK3N0YXRpYyB2b2lkIGlu
aXRDb250ZXh0VUludChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfYXNzZXJ0KEpTQ19J
U19DT05URVhUKGNvbnRleHQpKTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0
LCAibnVtYmVyLW4iLCBqc2NfbnVtYmVyX25ld191aW50MzIoY29udGV4dCwgLTEpKTsKKyAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci16IiwganNjX251bWJlcl9uZXdf
dWludDMyKGNvbnRleHQsIDApKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwg
Im51bWJlci1wIiwganNjX251bWJlcl9uZXdfdWludDMyKGNvbnRleHQsIDIxNDc0ODM2NDgpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdEpTQ051bWJlclVJbnQoSlNDQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBKU0NWYWx1ZSogbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAibnVt
YmVyLW4iKTsKKyAgICBKU0NWYWx1ZSogeiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0
LCAibnVtYmVyLXoiKTsKKyAgICBKU0NWYWx1ZSogcCA9IGpzY19jb250ZXh0X2dldF92YWx1ZShj
b250ZXh0LCAibnVtYmVyLXAiKTsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIobikpOwor
ICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIoeikpOworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1C
RVIocCkpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChuKSwgKGdw
b2ludGVyKikmbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCh6KSwg
KGdwb2ludGVyKikmeik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChw
KSwgKGdwb2ludGVyKikmcCk7CisKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfbnVtYmVyX2dl
dF91aW50MzIoSlNDX05VTUJFUihuKSksID09LCA0Mjk0OTY3Mjk1KTsKKyAgICBnX2Fzc2VydF9j
bXBmbG9hdChqc2NfbnVtYmVyX2dldF91aW50MzIoSlNDX05VTUJFUih6KSksID09LCAwKTsKKyAg
ICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfbnVtYmVyX2dldF91aW50MzIoSlNDX05VTUJFUihwKSks
ID09LCAyMTQ3NDgzNjQ4KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQpOworICAgIGdf
YXNzZXJ0KCFuKTsKKyAgICBnX2Fzc2VydCgheik7CisgICAgZ19hc3NlcnQoIXApOworfQorCitz
dGF0aWMgdm9pZCBpbml0Q29udGV4dEludChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdf
YXNzZXJ0KEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKworICAgIGpzY19jb250ZXh0X3NldF92
YWx1ZShjb250ZXh0LCAibnVtYmVyLW4iLCBqc2NfbnVtYmVyX25ld19pbnQzMihjb250ZXh0LCAt
MjE0NzQ4MzY0OCkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAibnVtYmVy
LXoiLCBqc2NfbnVtYmVyX25ld19pbnQzMihjb250ZXh0LCAwKSk7CisgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQsICJudW1iZXItcCIsIGpzY19udW1iZXJfbmV3X2ludDMyKGNvbnRl
eHQsIDIxNDc0ODM2NDcpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ051bWJlckludChKU0ND
b250ZXh0KiBjb250ZXh0KQoreworICAgIEpTQ1ZhbHVlKiBuID0ganNjX2NvbnRleHRfZ2V0X3Zh
bHVlKGNvbnRleHQsICJudW1iZXItbiIpOworICAgIEpTQ1ZhbHVlKiB6ID0ganNjX2NvbnRleHRf
Z2V0X3ZhbHVlKGNvbnRleHQsICJudW1iZXIteiIpOworICAgIEpTQ1ZhbHVlKiBwID0ganNjX2Nv
bnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJudW1iZXItcCIpOworCisgICAgZ19hc3NlcnQoSlND
X0lTX05VTUJFUihuKSk7CisgICAgZ19hc3NlcnQoSlNDX0lTX05VTUJFUih6KSk7CisgICAgZ19h
c3NlcnQoSlNDX0lTX05VTUJFUihwKSk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVy
KEdfT0JKRUNUKG4pLCAoZ3BvaW50ZXIqKSZuKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2lu
dGVyKEdfT0JKRUNUKHopLCAoZ3BvaW50ZXIqKSZ6KTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19w
b2ludGVyKEdfT0JKRUNUKHApLCAoZ3BvaW50ZXIqKSZwKTsKKworICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KGpzY19udW1iZXJfZ2V0X2ludDMyKEpTQ19OVU1CRVIobikpLCA9PSwgLTIxNDc0ODM2NDgp
OworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGpzY19udW1iZXJfZ2V0X2ludDMyKEpTQ19OVU1CRVIo
eikpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX251bWJlcl9nZXRfaW50MzIo
SlNDX05VTUJFUihwKSksID09LCAyMTQ3NDgzNjQ3KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNv
bnRleHQpOworICAgIGdfYXNzZXJ0KCFuKTsKKyAgICBnX2Fzc2VydCgheik7CisgICAgZ19hc3Nl
cnQoIXApOworfQorCit2b2lkIHRlc3RKU0NOdW1iZXIoKQoreworICAgIEpTQ0NvbnRleHQqIGNv
bnRleHREb3VibGUgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0
VUludCA9IGpzY19jb250ZXh0X25ldygpOworICAgIEpTQ0NvbnRleHQqIGNvbnRleHRJbnQgPSBq
c2NfY29udGV4dF9uZXcoKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QoY29udGV4dERvdWJsZSksIChncG9pbnRlciopJmNvbnRleHREb3VibGUpOworICAgIGdfb2Jq
ZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4dFVJbnQpLCAoZ3BvaW50ZXIqKSZj
b250ZXh0VUludCk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChjb250
ZXh0SW50KSwgKGdwb2ludGVyKikmY29udGV4dEludCk7CisKKyAgICBpbml0Q29udGV4dERvdWJs
ZShjb250ZXh0RG91YmxlKTsKKyAgICB0ZXN0SlNDTnVtYmVyRG91YmxlKGNvbnRleHREb3VibGUp
OworICAgIGdfYXNzZXJ0KCFjb250ZXh0RG91YmxlKTsKKworICAgIGluaXRDb250ZXh0VUludChj
b250ZXh0VUludCk7CisgICAgdGVzdEpTQ051bWJlclVJbnQoY29udGV4dFVJbnQpOworICAgIGdf
YXNzZXJ0KCFjb250ZXh0VUludCk7CisKKyAgICBpbml0Q29udGV4dEludChjb250ZXh0SW50KTsK
KyAgICB0ZXN0SlNDTnVtYmVySW50KGNvbnRleHRJbnQpOworICAgIGdfYXNzZXJ0KCFjb250ZXh0
SW50KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlw
dENvcmVHbGliL1Rlc3RKU0NOdW1iZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NOdW1iZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzBiNzg3ZmQwNGQw
NDcyMDE5ZTdmNTgyMWE5ZTg5MjJhZDRhODA3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ051bWJlci5oCkBAIC0w
LDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQ
cm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK3ZvaWQg
dGVzdEpTQ051bWJlcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ1N0cmluZy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDU3RyaW5nLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
NjYwZGI2YjA0YjY3MDk3MWNhYTBiYmQwYjc3ZmQwYzliY2Y5ZmY0Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ1N0
cmluZy5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TD
qnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEpTQ1N0cmluZy5oIgorCisjaW5jbHVkZSA8anNj
L0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDU3RyaW5nLmg+CisjaW5jbHVkZSA8anNj
L0pTQ1VuZGVmaW5lZC5oPgorCit2b2lkIHRlc3RKU0NTdHJpbmcoKQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBKU0NWYWx1ZSogc3RyaW5nVmFs
dWUgPSBqc2Nfc3RyaW5nX25ldyhjb250ZXh0LCAidGhlIHN0cmluZyB2YWx1ZSIpOworCisgICAg
anNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJzdHJpbmciLCBzdHJpbmdWYWx1ZSk7CisK
KyAgICBKU0NWYWx1ZSogbm9uRXhpc3RhbnQgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4
dCwgIm5vbi1leGlzdGFudCIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQobm9uRXhp
c3RhbnQpKTsKKworICAgIEpTQ1ZhbHVlKiBzdHJpbmcgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dCwgInN0cmluZyIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19TVFJJTkcoc3RyaW5nKSk7
CisKKyAgICBjaGFyKiB2YWx1ZSA9IGpzY19zdHJpbmdfZ2V0X3ZhbHVlKEpTQ19TVFJJTkcoc3Ry
aW5nKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlLCA9PSwgInRoZSBzdHJpbmcgdmFsdWUi
KTsKKyAgICBnX2ZyZWUodmFsdWUpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihH
X09CSkVDVChjb250ZXh0KSwgKGdwb2ludGVyKikmY29udGV4dCk7CisgICAgZ19vYmplY3RfYWRk
X3dlYWtfcG9pbnRlcihHX09CSkVDVChzdHJpbmdWYWx1ZSksIChncG9pbnRlciopJnN0cmluZ1Zh
bHVlKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG5vbkV4aXN0YW50
KSwgKGdwb2ludGVyKikmbm9uRXhpc3RhbnQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50
ZXIoR19PQkpFQ1Qoc3RyaW5nKSwgKGdwb2ludGVyKikmc3RyaW5nKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjb250ZXh0KTsKKworICAgIGdfYXNzZXJ0
KCFzdHJpbmcpOworICAgIGdfYXNzZXJ0KCFub25FeGlzdGFudCk7CisgICAgZ19hc3NlcnQoIXN0
cmluZ1ZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NTdHJpbmcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RKU0NTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMGVhYmIw
ZTFmYTFmODQyNDg4NTQ3MDE2NDNiYTNjNWM4Yzc1MWVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ1N0cmluZy5o
CkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNh
bXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K3ZvaWQgdGVzdEpTQ1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9KYXZhU2NyaXB0Q29yZUdsaWIvVGVzdEpTQ1VuZGVmaW5lZC5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVW5kZWZpbmVkLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mN2VmM2I1MDkxNmQwMjA1NmRhMGZhZTNmZmIwZGFkYmUxZjFlMTE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZUds
aWIvVGVzdEpTQ1VuZGVmaW5lZC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1p
bC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEpTQ1VuZGVmaW5lZC5o
IgorCisjaW5jbHVkZSA8anNjL0pTQ0Jvb2xlYW4uaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4
dC5oPgorI2luY2x1ZGUgPGpzYy9KU0NOdW1iZXIuaD4KKyNpbmNsdWRlIDxqc2MvSlNDU3RyaW5n
Lmg+CisjaW5jbHVkZSA8anNjL0pTQ1VuZGVmaW5lZC5oPgorCit2b2lkIHRlc3RKU0NVbmRlZmlu
ZWQoKQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAg
ICBKU0NWYWx1ZSogYm9vbGVhblZhbHVlID0ganNjX2Jvb2xlYW5fbmV3KGNvbnRleHQsIHRydWUp
OworICAgIEpTQ1ZhbHVlKiB1bmRlZmluZWRWYWx1ZSA9IGpzY191bmRlZmluZWRfbmV3KGNvbnRl
eHQpOworCisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJib29sZWFuIiwgYm9v
bGVhblZhbHVlKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgInVuZGVmaW5l
ZCIsIHVuZGVmaW5lZFZhbHVlKTsKKworICAgIEpTQ1ZhbHVlKiBub25FeGlzdGFudCA9IGpzY19j
b250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAibm9uLWV4aXN0YW50Iik7CisgICAgZ19hc3NlcnQo
SlNDX0lTX1ZBTFVFKG5vbkV4aXN0YW50KSk7CisgICAgZ19hc3NlcnQoSlNDX0lTX1VOREVGSU5F
RChub25FeGlzdGFudCkpOworCisgICAgSlNDVmFsdWUqIHVuZGVmaW5lZCA9IGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LCAidW5kZWZpbmVkIik7CisgICAgZ19hc3NlcnQoSlNDX0lTX1ZB
TFVFKHVuZGVmaW5lZCkpOworICAgIGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQodW5kZWZpbmVk
KSk7CisKKyAgICBKU0NWYWx1ZSogYm9vbGVhbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250
ZXh0LCAiYm9vbGVhbiIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19WQUxVRShib29sZWFuKSk7Cisg
ICAgZ19hc3NlcnQoSlNDX0lTX0JPT0xFQU4oYm9vbGVhbikpOworICAgIGdfYXNzZXJ0KCFKU0Nf
SVNfVU5ERUZJTkVEKGJvb2xlYW4pKTsKKyAgICAKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2lu
dGVyKEdfT0JKRUNUKGNvbnRleHQpLCAoZ3BvaW50ZXIqKSZjb250ZXh0KTsKKyAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGJvb2xlYW5WYWx1ZSksIChncG9pbnRlciopJmJv
b2xlYW5WYWx1ZSk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCh1bmRl
ZmluZWRWYWx1ZSksIChncG9pbnRlciopJnVuZGVmaW5lZFZhbHVlKTsKKyAgICBnX29iamVjdF9h
ZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG5vbkV4aXN0YW50KSwgKGdwb2ludGVyKikmbm9uRXhp
c3RhbnQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QodW5kZWZpbmVk
KSwgKGdwb2ludGVyKikmdW5kZWZpbmVkKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVy
KEdfT0JKRUNUKGJvb2xlYW4pLCAoZ3BvaW50ZXIqKSZib29sZWFuKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjb250ZXh0KTsKKworICAgIGdfYXNzZXJ0
KCFib29sZWFuKTsKKyAgICBnX2Fzc2VydCghdW5kZWZpbmVkKTsKKyAgICBnX2Fzc2VydCghbm9u
RXhpc3RhbnQpOworICAgIGdfYXNzZXJ0KCF1bmRlZmluZWRWYWx1ZSk7CisgICAgZ19hc3NlcnQo
IWJvb2xlYW5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVW5kZWZpbmVkLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVW5kZWZpbmVkLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTYyYTFkODI4NzUyMTNmMmQzNzYwMTE5MTZjYTliZmM1MWJhYTMyZQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmVHbGliL1Rlc3RK
U0NVbmRlZmluZWQuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCit2b2lkIHRlc3RKU0NVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL0NoYW5n
ZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5YzZlZmE0MjBmYTdkNTgwZTE4OTYxOTY0MDM3MzYyZjY3
NjVhYjU2Li40ZWI4MzdiYTIwMGE3MmU2OTI2OTRjNDg2MzEzNDMyZmNjMzU2M2Q3IDEwMDY0NAot
LS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMTAt
MjcgIEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCAgPHRldmF1bUBnbWFpbC5jb20+
CisKKyAgICAgICAgW0dUS10gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhU2NyaXB0Q29y
ZSBnbGliIGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGlzIGEgc2ltcGxlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYSBKYXZh
U2NyaXB0Q29yZSBiaW5kaW5ncworICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGRpc2N1c3Npb24g
b24gd2Via2xpdC1ndGsgbWFpbGluZyBsaXN0IHRocmVhZAorICAgICAgICBodHRwczovL2xpc3Rz
LndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1ndGsvMjAxNi1PY3RvYmVyLzAwMjgzNC5odG1s
CisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZTogQWRkZWQgRU5BQkxF
X0pTQ19HTElCIG9wdGlvbiBkZWZhdWx0aW5nIHRvIE9GRgorCiAyMDE2LTEwLTE4ICBEZWFuIEph
Y2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgQ1NTX1NIQVBFUyBmZWF0
dXJlIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBvbi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295299</attachid>
            <date>2016-11-21 09:52:39 -0800</date>
            <delta_ts>2016-11-23 07:46:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161121155226.patch</filename>
            <type>text/plain</type>
            <size>72369</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi42MmRhNDhlMzE3MTljYThh
ZmNkNmU3NjU0ZGFhMWFkNWU4YmMxNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJraXQtZ3RrIG1haWxpbmcgbGlzdCB0aHJlYWQKKyAg
ICAgICAgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJraXQtZ3RrLzIwMTYt
T2N0b2Jlci8wMDI4MzQuaHRtbAorCisgICAgICAgICogQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHA6
IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uaDogQWRkZWQuCisgICAgICAg
ICogQVBJL2dsaWIvSlNDQm9vbGVhblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2ds
aWIvSlNDQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHQu
aDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogQVBJL2dsaWIvSlNDTnVtYmVyLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDTnVtYmVyLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ051bWJlclBy
aXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDUHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBBUEkvZ2xpYi9KU0NTdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkv
Z2xpYi9KU0NTdHJpbmcuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDU3RyaW5nUHJp
dmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NVbmRlZmluZWQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NVbmRlZmluZWQuaDogQWRkZWQuCisgICAgICAgICog
QVBJL2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xp
Yi9KU0NWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBBUEkvZ2xpYi9qc2MuaDogQWRkZWQuCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZGVkIEphdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFUyB0byBpbnN0YWxsIEphdmFTY3Jp
cHRDb3JlCisgICAgICAgIGdsaWIgZm9yd2FyZGluZyBoZWFkZXJzCisgICAgICAgICogUGxhdGZv
cm1HVEsuY21ha2U6IEFkZGVkIHJ1bGVzIGZvciBidWlsZGluZyBKYXZhU2NyaXB0Q29yZSBnbGli
IGJpbmRpbmdzCisKIDIwMTYtMTAtMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIEFSTSBidWlsZGZpeCBhZnRlciByMjA3NDc1Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNiMTJmMzgzN2ExNGNiMDU0OTg3NmZhNzE3ZTBjMTViMmIzMTgxNzAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHAKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNDQm9vbGVhbi5oIgorCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUu
aCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NCb29sZWFuCisgKiBAU2hvcnRf
ZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBib29sZWFuIHZhbHVl
cworICoKKyAqIEpTQ0Jvb2xlYW4gaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGJvb2xl
YW4gdmFsdWVzIGluc2lkZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5F
X1RZUEUoSlNDQm9vbGVhbiwganNjX2Jvb2xlYW4sIEpTQ19UWVBFX1ZBTFVFKQorCitzdGF0aWMg
dm9pZCBqc2NfYm9vbGVhbl9jbGFzc19pbml0KEpTQ0Jvb2xlYW5DbGFzcyopCit7Cit9CisKK3N0
YXRpYyB2b2lkIGpzY19ib29sZWFuX2luaXQoSlNDQm9vbGVhbiopCit7Cit9CisKK0pTQ1ZhbHVl
KiBqc2NCb29sZWFuQ3JlYXRlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1
ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIEFTU0VSVChK
U1ZhbHVlSXNCb29sZWFuKGpzVmFsdWUpKTsKKworICAgIEpTQ1ZhbHVlKiBib29sZWFuID0gSlND
X1ZBTFVFKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9CT09MRUFOLCAiY29udGV4dCIsIGNvbnRleHQs
IG51bGxwdHIpKTsKKyAgICBqc2NWYWx1ZVNldEpTVmFsdWUoYm9vbGVhbiwganNWYWx1ZSk7CisK
KyAgICByZXR1cm4gYm9vbGVhbjsKK30KKworLyoqCisgKiBqc2NfYm9vbGVhbl9uZXc6CisgKiBA
Y29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZQorICog
QHZhbHVlOiBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IHRoZSAjSlNDQm9vbGVhbiB3aWxsIHJlcHJl
c2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pTQ0Jvb2xlYW4gd2l0aCBAdmFsdWUgYXMgdGhl
IHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ0Jvb2xlYW4gb2Jq
ZWN0CisgKi8KK0pTQ1ZhbHVlKiBqc2NfYm9vbGVhbl9uZXcoSlNDQ29udGV4dCogY29udGV4dCwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRF
WFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0Jvb2xlYW5DcmVhdGUoY29u
dGV4dCwgSlNWYWx1ZU1ha2VCb29sZWFuKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCks
IHZhbHVlKSk7Cit9CisKKy8qKgorICoganNjX2Jvb2xlYW5fZ2V0X3ZhbHVlOgorICogQHZhbHVl
OiB0aGUgI0pTQ0Jvb2xlYW4gY29udGFpbmluZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMg
dGhlIGJvb2xlYW4gdmFsdWUgZnJvbSAjSlNDQm9vbGVhbgorICoKKyAqIFJldHVybnM6ICNnYm9v
bGVhbgorICovCitnYm9vbGVhbiBqc2NfYm9vbGVhbl9nZXRfdmFsdWUoSlNDQm9vbGVhbiogYm9v
bGVhbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQk9PTEVBTihib29sZWFu
KSwgRkFMU0UpOworCisgICAgSlNDQ29udGV4dCogY29udGV4dCA9IGpzY1ZhbHVlR2V0Q29udGV4
dChKU0NfVkFMVUUoYm9vbGVhbikpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oanNj
Q29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ19WQUxV
RShib29sZWFuKSkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0Jvb2xlYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29s
ZWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2IzOWM1YTk0NzM0ODVlODZjOGJkYTE2ZDJkZmQxMDEwNDllMzJh
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NC
b29sZWFuLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TD
qnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IEpTQ0Jvb2xlYW5faAorI2RlZmluZSBKU0NCb29sZWFuX2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFs
dWUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX0JPT0xFQU4gICAgICAg
ICAgICAoanNjX2Jvb2xlYW5fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0JPT0xFQU4ob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfQk9P
TEVBTiwgSlNDQm9vbGVhbikpCisjZGVmaW5lIEpTQ19JU19CT09MRUFOKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX0JPT0xFQU4pKQorI2Rl
ZmluZSBKU0NfQk9PTEVBTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBKU0NfVFlQRV9CT09MRUFOLCBKU0NCb29sZWFuQ2xhc3MpKQorI2RlZmluZSBK
U0NfSVNfQk9PTEVBTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBKU0NfVFlQRV9CT09MRUFOKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Jvb2xlYW4gICAg
ICBKU0NCb29sZWFuOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Jvb2xlYW5DbGFzcyBKU0NCb29sZWFu
Q2xhc3M7CisKK3N0cnVjdCBfSlNDQm9vbGVhbiB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsK
Kworc3RydWN0IF9KU0NCb29sZWFuQ2xhc3MgeworICAgIEpTQ1ZhbHVlQ2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworR1R5cGUKK2pzY19ib29sZWFuX2dldF90eXBlICAodm9pZCk7CisKK0pTQ1Zh
bHVlICoKK2pzY19ib29sZWFuX25ldyAgICAgICAoSlNDQ29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgdmFsdWUpOworCitnYm9vbGVhbgoranNjX2Jv
b2xlYW5fZ2V0X3ZhbHVlIChKU0NCb29sZWFuICpib29sZWFuKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9v
bGVhblByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFu
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3YWUwMDQxNTQ3YmU5MGMzYTY4NmM5NDM2YjQ3MzAxZDdl
NDI1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQm9vbGVhblByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNv
bT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQm9vbGVhbi5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKworSlNDVmFsdWUqIGpzY0Jvb2xlYW5DcmVhdGUo
SlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2YzVmZjA0MzliMDhlZmY2Njc3YWM1ZDhl
Y2E2MGFmMmYwNmU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2Ft
aWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKwor
I2luY2x1ZGUgIkpTQ0Jvb2xlYW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZh
dGUuaCIKKyNpbmNsdWRlICJKU0NOdW1iZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ1N0cmluZ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NVbmRlZmlu
ZWRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVBy
aXZhdGUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisKKy8qKgorICogU0VDVElPTjogSlNDQ29udGV4dAorICogQFNo
b3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0Q29yZSBleGVjdXRpb24gY29udGV4dAorICogQFRp
dGxlOiBKU0NDb250ZXh0CisgKgorICogQSBKU0NDb250ZXh0IGlzIHRoZSBjZW50cmFsIGNsYXNz
IG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBBUEkuIEl0IGlzCisgKiByZXNwb25zaWJsZSBmb3IgZXZh
bHVhdGlvbiBvZiBzY3JpcHRzIGluIHRoZSBleGVjdXRpb24gY29udGV4dCwKKyAqIHNldHRpbmcg
YW5kIGdldHRpbmcgdmFsdWVzIGZyb20gdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCB0byBtYWtl
CisgKiBuYXRpdmUgb2JqZWN0cywgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGFjY2Vzc2libGUgdG8g
SmF2YVNjcmlwdC4KKyAqCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRl
IHsKKyAgICBKU1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRSZWY+IGNvbnRleHQ7Cit9IEpTQ0Nv
bnRleHRQcml2YXRlOworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ29udGV4dCwganNjX2NvbnRl
eHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVhUKG9iamVjdCkpOwor
CisgICAgSlNDQ29udGV4dCogY29udGV4dCA9IEpTQ19DT05URVhUKG9iamVjdCk7CisgICAgY29u
dGV4dC0+cHJpdi0+Y29udGV4dCA9IEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4oQWRv
cHQsIEpTR2xvYmFsQ29udGV4dENyZWF0ZShudWxscHRyKSk7CisKKyAgICBHX09CSkVDVF9DTEFT
Uyhqc2NfY29udGV4dF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCBqc2NfY29udGV4dF9jbGFzc19pbml0KEpTQ0NvbnRleHRDbGFzcyoga2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25zdHJ1Y3Rl
ZDsKK30KKworSlNHbG9iYWxDb250ZXh0UmVmIGpzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRFVChjb250ZXh0KSk7CisK
KyAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKTsKK30KKworLyoqCisgKiBq
c2NfY29udGV4dF9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlNDQ29udGV4dCBlbnZpcm9u
bWVudCB0byBleGVjdXRlIEphdmFTY3JpcHQKKyAqIGNvZGUuCisgKgorICogUmV0dXJuczogVGhl
IG5ld2x5IGNyZWF0ZWQgI0pTQ0NvbnRleHQgb2JqZWN0CisgKi8KK0pTQ0NvbnRleHQqIGpzY19j
b250ZXh0X25ldygpCit7CisgICAgcmV0dXJuIEpTQ19DT05URVhUKGdfb2JqZWN0X25ldyhKU0Nf
VFlQRV9DT05URVhULCBudWxscHRyKSk7Cit9CisKK3N0YXRpYyBKU0NWYWx1ZSoganNWYWx1ZVRv
SlNDVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAg
IEFTU0VSVChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgQVNTRVJUKGpzVmFsdWUpOwor
CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworCisgICAgaWYg
KEpTVmFsdWVJc1N0cmluZyhwcml2LT5jb250ZXh0LmdldCgpLCBqc1ZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGpzY1N0cmluZ0NyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKTsKKworICAgIGlmIChKU1Zh
bHVlSXNCb29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIGpzVmFsdWUpKQorICAgICAgICByZXR1
cm4ganNjQm9vbGVhbkNyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKTsKKworICAgIGlmIChKU1ZhbHVl
SXNOdW1iZXIocHJpdi0+Y29udGV4dC5nZXQoKSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBq
c2NOdW1iZXJDcmVhdGUoY29udGV4dCwganNWYWx1ZSk7CisKKyAgICBpZiAoSlNWYWx1ZUlzVW5k
ZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4ganNj
VW5kZWZpbmVkQ3JlYXRlKGNvbnRleHQsIGpzVmFsdWUpOworCisgICAgaWYgKEpTVmFsdWVJc051
bGwocHJpdi0+Y29udGV4dC5nZXQoKSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworLyoqCisgKiBqc2NfY29udGV4dF9nZXRfdmFsdWU6CisgKiBAY29udGV4dDogdGhlICNKU0ND
b250ZXh0IHRoYXQgdGhlIHZhbHVlIHdpbGwgYmUgcmV0cmlldmVkIGZyb20KKyAqIEBuYW1lOiB0
aGUgbmFtZSBvZiB0aGUgZ2xvYmFsIG9iamVjdCBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgcmV0cmll
dmVkCisgKgorICogUmV0cmlldmVzIHByb3BlcnRpZXMgZnJvbSB0aGUgSmF2YVNjcmlwdCBnbG9i
YWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAorICogdGhlICNKU0NDb250ZXh0LiBWYWx1ZXMgYXJl
IHJlcHJlc2VudGVkIGJ5IHN1YnR5cGVzIG9mIEpTQ1ZhbHVlLgorICoKKyAqIFJldHVybnM6IEEg
I0pTQ1ZhbHVlIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0
eQorICovCitKU0NWYWx1ZSoganNjX2NvbnRleHRfZ2V0X3ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5h
bWUsIG51bGxwdHIpOworCisgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0
R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eShjb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpLCBnbG9iYWxPYmplY3QsIHN0ck5hbWUu
Z2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzVmFsdWVUb0pTQ1ZhbHVlKGNvbnRleHQs
IGpzVmFsdWUpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X3NldF92YWx1ZToKKyAqIEBjb250
ZXh0OiB0aGUgI0pTQ0NvbnRleHQgd2hlcmUgdGhlIHZhbHVlIHdpbGwgYmUgc2V0CisgKiBAbmFt
ZTogdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBvYmplY3QgcHJvcGVydHkgdGhhdCB3aWxsIGJlIHNl
dAorICogQHZhbHVlOiB0aGUgdmFsdWUKKyAqCisgKiBTZXRzIHByb3BlcnRpZXMgaW4gdGhlIEph
dmFTY3JpcHQgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSAjSlNDQ29udGV4
dC4gVmFsdWVzIGFyZSByZXByZXNlbnRlZCBieSBzdWJ0eXBlcyBvZiBKU0NWYWx1ZS4KKyAqLwor
dm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgZ2No
YXIqIG5hbWUsIEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19J
U19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisKKyAgICBKU0NDb250ZXh0UHJp
dmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworICAg
IEpTVmFsdWVSZWYganNWYWx1ZSA9IGpzY1ZhbHVlR2V0SlNWYWx1ZSh2YWx1ZSk7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0ck5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KHByaXYtPmNvbnRleHQu
Z2V0KCksIG9iamVjdCwgc3RyTmFtZS5nZXQoKSwganNWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lLCBudWxscHRyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5OTYzZWE4YjM4NmFhOWI4YmMwMzJkZGY0NDM1ZTA3Njhh
NDhlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBKU0NDb250ZXh0X2gKKyNkZWZpbmUgSlNDQ29udGV4dF9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgSlNDX1RZUEVfQ09OVEVYVCAgICAgICAgICAgIChqc2NfY29udGV4dF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBKU0NfQ09OVEVYVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0KSkKKyNkZWZp
bmUgSlNDX0lTX0NPTlRFWFQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgSlNDX1RZUEVfQ09OVEVYVCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0NMQVNTKGNs
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRF
WFQsIEpTQ0NvbnRleHRDbGFzcykpCisjZGVmaW5lIEpTQ19JU19DT05URVhUX0NMQVNTKGNsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQpKQor
Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dCAgICAgICAgSlNDQ29udGV4dDsKK3R5cGVkZWYg
c3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgICBKU0NDb250ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfSlNDQ29udGV4dFByaXZhdGUgSlNDQ29udGV4dFByaXZhdGU7CisKK3N0cnVjdCBfSlNDQ29u
dGV4dCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJp
djsKK307CisKK3N0cnVjdCBfSlNDQ29udGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAodm9pZCk7CisK
K0pTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfbmV3ICAgICAgICh2b2lkKTsKKworSlNDVmFsdWUg
KgoranNjX2NvbnRleHRfZ2V0X3ZhbHVlIChKU0NDb250ZXh0ICAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUpOworCit2b2lkCitqc2NfY29udGV4dF9z
ZXRfdmFsdWUgKEpTQ0NvbnRleHQgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgKnZh
bHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMTZlMmExNDdj
OTM5NGZhYjIzZTk5ZWUzMDdlYzViMzk5ZTliYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaApAQCAtMCwwICsxLDI1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlv
IEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlND
Q29udGV4dC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorCitK
U0dsb2JhbENvbnRleHRSZWYganNjQ29udGV4dEdldEpTQ29udGV4dChKU0NDb250ZXh0Kik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5ZjA1ZDEzNGIyY2QwNDRhY2JmYmEwMWYzYmRmN2VkYWQ3NTBhMmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFBy
b2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNDTnVtYmVyLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXRoQ29tbW9uLmg+CisKKy8q
KgorICogQFRpdGxlOiBKU0NOdW1iZXIKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1ZhbHVl
IHN1YnR5cGUgdG8gcmVwcmVzZW50IG51bWVyaWMgdmFsdWVzCisgKgorICogSlNDTnVtYmVyIGlz
IHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBudW1lcmljIHZhbHVlcyBpbnNpZGUKKyAqIEph
dmFTY3JpcHRDb3JlLgorICoKKyAqLworCitHX0RFRklORV9UWVBFKEpTQ051bWJlciwganNjX251
bWJlciwgSlNDX1RZUEVfVkFMVUUpCisKK3N0YXRpYyB2b2lkIGpzY19udW1iZXJfY2xhc3NfaW5p
dChKU0NOdW1iZXJDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkIGpzY19udW1iZXJfaW5pdChK
U0NOdW1iZXIqKQoreworfQorCitKU0NWYWx1ZSoganNjTnVtYmVyQ3JlYXRlKEpTQ0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRF
WFQoY29udGV4dCkpOworICAgIEFTU0VSVChKU1ZhbHVlSXNOdW1iZXIoanNWYWx1ZSkpOworCisg
ICAgSlNDVmFsdWUqIG51bWJlciA9IEpTQ19WQUxVRShnX29iamVjdF9uZXcoSlNDX1RZUEVfTlVN
QkVSLCAiY29udGV4dCIsIGNvbnRleHQsIG51bGxwdHIpKTsKKyAgICBqc2NWYWx1ZVNldEpTVmFs
dWUobnVtYmVyLCBqc1ZhbHVlKTsKKworICAgIHJldHVybiBudW1iZXI7Cit9CisKKy8qKgorICog
anNjX251bWJlcl9uZXdfZG91YmxlOgorICogQGNvbnRleHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0
IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEB2YWx1ZTogVGhlIGRvdWJsZSB2YWx1ZSB0aGF0
IHRoZSAjSlNDTnVtYmVyIHdpbGwgcmVwcmVzZW50CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlND
TnVtYmVyIHdpdGggQHZhbHVlIGFzIHRoZSB2YWx1ZQorICoKKyAqIFJldHVybnM6IFRoZSBuZXds
eSBjcmVhdGVkICNKU0NOdW1iZXIgb2JqZWN0CisgKi8KK0pTQ1ZhbHVlKiBqc2NfbnVtYmVyX25l
d19kb3VibGUoSlNDQ29udGV4dCogY29udGV4dCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAg
ICByZXR1cm4ganNjTnVtYmVyQ3JlYXRlKGNvbnRleHQsIEpTVmFsdWVNYWtlTnVtYmVyKGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIHZhbHVlKSk7Cit9CisKKy8qKgorICoganNjX251
bWJlcl9uZXdfaW50MzI6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBj
b250YWluIHRoZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgaW50MzIgdmFsdWUgdGhhdCB0aGUgI0pT
Q051bWJlciB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pTQ051bWJlciB3
aXRoIEB2YWx1ZSBhcyB0aGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3bHkgY3JlYXRl
ZCAjSlNDTnVtYmVyIG9iamVjdAorICovCitKU0NWYWx1ZSoganNjX251bWJlcl9uZXdfaW50MzIo
SlNDQ29udGV4dCogY29udGV4dCwgZ2ludDMyIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBq
c2NOdW1iZXJDcmVhdGUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdW1iZXIoanNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSwgdmFsdWUpKTsKK30KKworLyoqCisgKiBqc2NfbnVtYmVyX25ld191
aW50MzI6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBjb250YWluIHRo
ZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgdWludDMyIHZhbHVlIHRoYXQgdGhlICNKU0NOdW1iZXIg
d2lsbCByZXByZXNlbnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNKU0NOdW1iZXIgd2l0aCBAdmFs
dWUgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ051
bWJlciBvYmplY3QKKyAqLworSlNDVmFsdWUqIGpzY19udW1iZXJfbmV3X3VpbnQzMihKU0NDb250
ZXh0KiBjb250ZXh0LCBndWludDMyIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NOdW1i
ZXJDcmVhdGUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdW1iZXIoanNjQ29udGV4dEdldEpTQ29udGV4
dChjb250ZXh0KSwgdmFsdWUpKTsKK30KKworc3RhdGljIGdkb3VibGUganNjTnVtYmVyR2V0VmFs
dWUoSlNDTnVtYmVyKiBudW1iZXIpCit7CisgICAgQVNTRVJUKEpTQ19JU19OVU1CRVIobnVtYmVy
KSk7CisKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjVmFsdWVHZXRDb250ZXh0KEpTQ19W
QUxVRShudW1iZXIpKTsKKworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoanNjQ29udGV4dEdl
dEpTQ29udGV4dChjb250ZXh0KSwganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ19WQUxVRShudW1iZXIp
KSwgbnVsbHB0cik7Cit9CisKKy8qKgorICoganNjX251bWJlcl9nZXRfdmFsdWVfYXNfZG91Ymxl
OgorICogQHZhbHVlOiB0aGUgI0pTQ051bWJlciBjb250YWluaW5nIHRoZSB2YWx1ZQorICoKKyAq
IFJldHJpZXZlcyB0aGUgbnVtZXJpYyAoZG91YmxlKSB2YWx1ZSBmcm9tICNKU0NOdW1iZXIKKyAq
CisgKiBSZXR1cm5zOiAjZ2RvdWJsZQorICovCitnZG91YmxlIGpzY19udW1iZXJfZ2V0X3ZhbHVl
X2FzX2RvdWJsZShKU0NOdW1iZXIqIG51bWJlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfTlVNQkVSKG51bWJlciksIDApOworCisgICAgcmV0dXJuIGpzY051bWJlckdldFZh
bHVlKG51bWJlcik7Cit9CisKKy8qKgorICoganNjX251bWJlcl9nZXRfdmFsdWVfYXNfdWludDMy
OgorICogQHZhbHVlOiB0aGUgI0pTQ051bWJlciBjb250YWluaW5nIHRoZSB2YWx1ZQorICoKKyAq
IFJldHJpZXZlcyB0aGUgbnVtZXJpYyAodW5zaWduZWQgaW50KSB2YWx1ZSBmcm9tICNKU0NOdW1i
ZXIKKyAqCisgKiBSZXR1cm5zOiAjZ3VpbnQzMgorICovCitndWludDMyIGpzY19udW1iZXJfZ2V0
X3ZhbHVlX2FzX3VpbnQzMihKU0NOdW1iZXIqIG51bWJlcikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChKU0NfSVNfTlVNQkVSKG51bWJlciksIDApOworCisgICAgcmV0dXJuIEpTQzo6dG9V
SW50MzIoanNjTnVtYmVyR2V0VmFsdWUobnVtYmVyKSk7Cit9CisKKy8qKgorICoganNjX251bWJl
cl9nZXRfdmFsdWVfYXNfaW50MzI6CisgKiBAdmFsdWU6IHRoZSAjSlNDTnVtYmVyIGNvbnRhaW5p
bmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBudW1lcmljIChpbnQpIHZhbHVlIGZy
b20gI0pTQ051bWJlcgorICoKKyAqIFJldHVybnM6ICNnaW50MzIKKyAqLworZ2ludDMyIGpzY19u
dW1iZXJfZ2V0X3ZhbHVlX2FzX2ludDMyKEpTQ051bWJlciogbnVtYmVyKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19OVU1CRVIobnVtYmVyKSwgMCk7CisKKyAgICByZXR1cm4g
SlNDOjp0b0ludDMyKGpzY051bWJlckdldFZhbHVlKG51bWJlcikpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkMzU3NDJmM2Y1Nzhi
YmVkYTNhNGVmYjkzODcyOTA5MjJiM2E4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRl
dmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEpTQ051bWJlcl9oCisjZGVmaW5lIEpTQ051bWJlcl9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+
CisjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBK
U0NfVFlQRV9OVU1CRVIgICAgICAgICAgICAoanNjX251bWJlcl9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBKU0NfTlVNQkVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJF
UihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQ
RV9OVU1CRVIpKQorI2RlZmluZSBKU0NfTlVNQkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyQ2xhc3Mp
KQorI2RlZmluZSBKU0NfSVNfTlVNQkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX05VTUJFUikpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NO
dW1iZXIgICAgICBKU0NOdW1iZXI7Cit0eXBlZGVmIHN0cnVjdCBfSlNDTnVtYmVyQ2xhc3MgSlND
TnVtYmVyQ2xhc3M7CisKK3N0cnVjdCBfSlNDTnVtYmVyIHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7
Cit9OworCitzdHJ1Y3QgX0pTQ051bWJlckNsYXNzIHsKKyAgICBKU0NWYWx1ZUNsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK0dUeXBlCitqc2NfbnVtYmVyX2dldF90eXBlICAgKHZvaWQpOworCitK
U0NWYWx1ZSAqCitqc2NfbnVtYmVyX25ld19kb3VibGUgKEpTQ0NvbnRleHQgICAgICAgICAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAgICB2YWx1ZSk7
CisKK0pTQ1ZhbHVlICoKK2pzY19udW1iZXJfbmV3X2ludDMyICAoSlNDQ29udGV4dCAgICAgICAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBnaW50MzIgICAgICAgICAgICAgIHZh
bHVlKTsKKworSlNDVmFsdWUgKgoranNjX251bWJlcl9uZXdfdWludDMyIChKU0NDb250ZXh0ICAg
ICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICAgICAg
ICAgdmFsdWUpOworCitnZG91YmxlCitqc2NfbnVtYmVyX2dldF92YWx1ZV9hc19kb3VibGUgKEpT
Q051bWJlciAqbnVtYmVyKTsKKworZ3VpbnQzMgoranNjX251bWJlcl9nZXRfdmFsdWVfYXNfdWlu
dDMyIChKU0NOdW1iZXIgKm51bWJlcik7CisKK2dpbnQzMgoranNjX251bWJlcl9nZXRfdmFsdWVf
YXNfaW50MzIgIChKU0NOdW1iZXIgKm51bWJlcik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclByaXZh
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXJQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTg0ZWIyOGRjZTBhOGZmNWNlNWE5NWM1YzFiNjBlODViMGFiYTQ2MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXJQ
cml2YXRlLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TD
qnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkpTQ051bWJlci5oIgorCitKU0NWYWx1ZSoganNjTnVtYmVyQ3Jl
YXRlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwYjU0MDMzNTQzZWQ1ZWIzMzczZjZlODc4
MjJjMjE0YjcyMDEyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNkZWZpbmUgV0VCS0lUX0RFRklORV9UWVBFKFR5cGVOYW1l
LCB0eXBlX25hbWUsIFRZUEVfUEFSRU5UKSBfV0VCS0lUX0RFRklORV9UWVBFX0VYVEVOREVEKFR5
cGVOYW1lLCB0eXBlX25hbWUsIFRZUEVfUEFSRU5ULCAwLCB7IH0pCisjZGVmaW5lIFdFQktJVF9E
RUZJTkVfQUJTVFJBQ1RfVFlQRShUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCkgX1dF
QktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRChUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVO
VCwgR19UWVBFX0ZMQUdfQUJTVFJBQ1QsIHsgfSkKKyNkZWZpbmUgV0VCS0lUX0RFRklORV9UWVBF
X1dJVEhfQ09ERShUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCwgQ29kZSkgX1dFQktJ
VF9ERUZJTkVfVFlQRV9FWFRFTkRFRF9CRUdJTihUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BB
UkVOVCwgMCkge0NvZGU7fSBfV0VCS0lUX0RFRklORV9UWVBFX0VYVEVOREVEX0VORCgpCisKKyNk
ZWZpbmUgX1dFQktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRChUeXBlTmFtZSwgdHlwZV9uYW1lLCBU
WVBFX1BBUkVOVCwgZmxhZ3MsIENvZGUpIF9XRUJLSVRfREVGSU5FX1RZUEVfRVhURU5ERURfQkVH
SU4oVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJFTlQsIGZsYWdzKSB7Q29kZTt9IF9XRUJL
SVRfREVGSU5FX1RZUEVfRVhURU5ERURfRU5EKCkKKyNkZWZpbmUgX1dFQktJVF9ERUZJTkVfVFlQ
RV9FWFRFTkRFRF9CRUdJTihUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCwgZmxhZ3Mp
IFwKK1wKK3N0YXRpYyB2b2lkIHR5cGVfbmFtZSMjX2NsYXNzX2luaXQoVHlwZU5hbWUjI0NsYXNz
KiBrbGFzcyk7IFwKK3N0YXRpYyBncG9pbnRlciB0eXBlX25hbWUjI19wYXJlbnRfY2xhc3MgPSAw
OyBcCitzdGF0aWMgdm9pZCB0eXBlX25hbWUjI19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpIFwK
K3sgXAorICAgIFR5cGVOYW1lKiBzZWxmID0gKFR5cGVOYW1lKilvYmplY3Q7IFwKKyAgICBzZWxm
LT5wcml2LT5+VHlwZU5hbWUjI1ByaXZhdGUoKTsgXAorICAgIEdfT0JKRUNUX0NMQVNTKHR5cGVf
bmFtZSMjX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7IFwKK30gXAorXAorc3RhdGlj
IHZvaWQgdHlwZV9uYW1lIyNfY2xhc3NfaW50ZXJuX2luaXQoZ3BvaW50ZXIga2xhc3MpIFwKK3sg
XAorICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OyBcCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoVHlwZU5hbWUj
I1ByaXZhdGUpKTsgXAorICAgIHR5cGVfbmFtZSMjX3BhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFz
c19wZWVrX3BhcmVudChrbGFzcyk7IFwKKyAgICB0eXBlX25hbWUjI19jbGFzc19pbml0KChUeXBl
TmFtZSMjQ2xhc3MqKWtsYXNzKTsgXAorICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB0eXBl
X25hbWUjI19maW5hbGl6ZTsgXAorfSBcCitcCitzdGF0aWMgdm9pZCB0eXBlX25hbWUjI19pbml0
KFR5cGVOYW1lKiBzZWxmKSBcCit7IFwKKyAgICBUeXBlTmFtZSMjUHJpdmF0ZSogcHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzZWxmLCB0eXBlX25hbWUjI19nZXRfdHlwZSgpLCBU
eXBlTmFtZSMjUHJpdmF0ZSk7IFwKKyAgICBzZWxmLT5wcml2ID0gcHJpdjsgXAorICAgIG5ldyAo
cHJpdikgVHlwZU5hbWUjI1ByaXZhdGUoKTsgXAorfVwKK0dUeXBlIHR5cGVfbmFtZSMjX2dldF90
eXBlKHZvaWQpIFwKK3sgXAorICAgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnX2RlZmluZV90eXBl
X2lkX192b2xhdGlsZSA9IDA7IFwKKyAgICBpZiAoZ19vbmNlX2luaXRfZW50ZXIoJmdfZGVmaW5l
X3R5cGVfaWRfX3ZvbGF0aWxlKSkgeyBcCisgICAgICAgIEdUeXBlIGdfZGVmaW5lX3R5cGVfaWQg
PSBcCisgICAgICAgICAgICBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljX3NpbXBsZSggXAorICAgICAg
ICAgICAgICAgIFRZUEVfUEFSRU5ULCBcCisgICAgICAgICAgICAgICAgZ19pbnRlcm5fc3RhdGlj
X3N0cmluZygjVHlwZU5hbWUpLCBcCisgICAgICAgICAgICAgICAgc2l6ZW9mKFR5cGVOYW1lIyND
bGFzcyksIFwKKyAgICAgICAgICAgICAgICAoR0NsYXNzSW5pdEZ1bmMpdHlwZV9uYW1lIyNfY2xh
c3NfaW50ZXJuX2luaXQsIFwKKyAgICAgICAgICAgICAgICBzaXplb2YoVHlwZU5hbWUpLCBcCisg
ICAgICAgICAgICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKXR5cGVfbmFtZSMjX2luaXQsIFwKKyAg
ICAgICAgICAgICAgICAoR1R5cGVGbGFncylmbGFncyk7IFwKKyAgICAgICAgLy8gQ3VzdG9tIGNv
ZGUgZm9sbG93cy4KKyNkZWZpbmUgX1dFQktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRF9FTkQoKSBc
CisgICAgICAgIGdfb25jZV9pbml0X2xlYXZlKCZnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSwg
Z19kZWZpbmVfdHlwZV9pZCk7IFwKKyAgICB9IFwKKyAgICByZXR1cm4gZ19kZWZpbmVfdHlwZV9p
ZF9fdm9sYXRpbGU7IFwKK30gLy8gQ2xvc2VzIHR5cGVfbmFtZSMjX2dldF90eXBlKCkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1
ZDM4ZmY2OTJkYTc1N2I5MGVlNjdjODRmZmU1NGJhYTkwMjk3N2MKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcApAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PD
s3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNDU3RyaW5nLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NT
dHJpbmcKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1ZhbHVlIHN1YnR5cGUgdG8gcmVwcmVz
ZW50IHN0cmluZ3MKKyAqCisgKiBKU0NTdHJpbmcgaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVz
ZW50IHN0cmluZyB2YWx1ZXMgaW5zaWRlCisgKiBKYXZhU2NyaXB0Q29yZS4KKyAqCisgKi8KKwor
R19ERUZJTkVfVFlQRShKU0NTdHJpbmcsIGpzY19zdHJpbmcsIEpTQ19UWVBFX1ZBTFVFKQorCitz
dGF0aWMgdm9pZCBqc2Nfc3RyaW5nX2NsYXNzX2luaXQoSlNDU3RyaW5nQ2xhc3MqKQoreworfQor
CitzdGF0aWMgdm9pZCBqc2Nfc3RyaW5nX2luaXQoSlNDU3RyaW5nKikKK3sKK30KKworSlNDVmFs
dWUqIGpzY1N0cmluZ0NyZWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFs
dWUpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBBU1NFUlQo
SlNWYWx1ZUlzU3RyaW5nKGpzVmFsdWUpKTsKKworICAgIEpTQ1ZhbHVlKiBzdHJpbmcgPSBKU0Nf
VkFMVUUoZ19vYmplY3RfbmV3KEpTQ19UWVBFX1NUUklORywgImNvbnRleHQiLCBjb250ZXh0LCBu
dWxscHRyKSk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVlKHN0cmluZywganNWYWx1ZSk7CisKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCisvKioKKyAqIGpzY19zdHJpbmdfbmV3OgorICogQGNvbnRl
eHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEBzdHI6
IFRoZSBzdHJpbmcgdGhhdCB0aGUgI0pTQ1N0cmluZyB3aWxsIHJlcHJlc2VudAorICoKKyAqIENy
ZWF0ZXMgYSBuZXcgI0pTQ1N0cmluZyB3aXRoIEBzdHIgYXMgdGhlIHZhbHVlCisgKgorICogUmV0
dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ1N0cmluZyBvYmplY3QKKyAqLworSlNDVmFsdWUq
IGpzY19zdHJpbmdfbmV3KEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBzdHIpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxw
dHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ciwgbnVsbHB0cik7CisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cikpOworICAgIEpTVmFsdWVSZWYganNWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5n
KGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIHZhbHVlLmdldCgpKTsKKworICAgIHJl
dHVybiBqc2NTdHJpbmdDcmVhdGUoY29udGV4dCwganNWYWx1ZSk7Cit9CisKKy8qKgorICoganNj
X3N0cmluZ19nZXRfdmFsdWU6CisgKiBAdmFsdWU6IHRoZSAjSlNDU3RyaW5nIGNvbnRhaW5pbmcg
dGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBzdHJpbmcgZnJvbSAjSlNDU3RyaW5nCisg
KgorICogUmV0dXJuczogI2djaGFyKiB0aGF0IG11c3QgYmUgZnJlZWQgYnkgdGhlIHVzZXIKKyAq
LworZ2NoYXIqIGpzY19zdHJpbmdfZ2V0X3ZhbHVlKEpTQ1N0cmluZyogc3RyaW5nKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19TVFJJTkcoc3RyaW5nKSwgbnVsbHB0cik7CisK
KyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjVmFsdWVHZXRDb250ZXh0KEpTQ19WQUxVRShz
dHJpbmcpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJWYWx1ZShBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLAorICAg
ICAgICBqc2NWYWx1ZUdldEpTVmFsdWUoSlNDX1ZBTFVFKHN0cmluZykpLCBudWxscHRyKSk7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJW
YWx1ZS5nZXQoKSk7CisgICAgZ2NoYXIqIGJ1ZmYgPSBzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFs
bG9jMChsZW5ndGgpKTsKKworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyVmFsdWUuZ2V0
KCksIGJ1ZmYsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gYnVmZjsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWE3ZTA3ZjAwMzQ5MmI3
MWI0MjRjMGVmOWZlMmZmNjBhNjdkYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZh
dW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBKU0NTdHJpbmdfaAorI2RlZmluZSBKU0NTdHJpbmdfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgor
I2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlND
X1RZUEVfU1RSSU5HICAgICAgICAgICAgKGpzY19zdHJpbmdfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
SlNDX1NUUklORyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBKU0NfVFlQRV9TVFJJTkcsIEpTQ1N0cmluZykpCisjZGVmaW5lIEpTQ19JU19TVFJJTkco
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVf
U1RSSU5HKSkKKyNkZWZpbmUgSlNDX1NUUklOR19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9TVFJJTkcsIEpTQ1N0cmluZ0NsYXNzKSkK
KyNkZWZpbmUgSlNDX0lTX1NUUklOR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBKU0NfVFlQRV9TVFJJTkcpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDU3Ry
aW5nICAgICAgSlNDU3RyaW5nOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1N0cmluZ0NsYXNzIEpTQ1N0
cmluZ0NsYXNzOworCitzdHJ1Y3QgX0pTQ1N0cmluZyB7CisgICAgSlNDVmFsdWUgcGFyZW50Owor
fTsKKworc3RydWN0IF9KU0NTdHJpbmdDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitHVHlwZQoranNjX3N0cmluZ19nZXRfdHlwZSAgKHZvaWQpOworCitKU0NW
YWx1ZSAqCitqc2Nfc3RyaW5nX25ldyAgICAgICAoSlNDQ29udGV4dCAgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnZhbHVlKTsKKworZ2NoYXIgKgoranNjX3N0
cmluZ19nZXRfdmFsdWUgKEpTQ1N0cmluZyAgICpzdHJpbmcpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJp
bmdQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFjZGFkMzc3YWQyNmMzODcyNmJlNzJlZDkzNDA3YmI4Y2VjNWRh
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
U3RyaW5nUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKworSlNDVmFsdWUqIGpzY1N0
cmluZ0NyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMzgxMzQ0NzI1
ZWMxNjQwMjMzNGY5MWQwNWI5NDRmNjQ2YjYwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNwcApAQCAtMCwwICsxLDcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFt
YXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0NVbmRlZmluZWQuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJl
Zi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDVW5kZWZpbmVkCisgKiBAU2hvcnRfZGVzY3JpcHRp
b246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCB1bmRlZmluZWQgdmFsdWVzCisgKgor
ICogSlNDVW5kZWZpbmVkIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCB1bmRlZmluZWQg
dmFsdWVzIGluc2lkZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZ
UEUoSlNDVW5kZWZpbmVkLCBqc2NfdW5kZWZpbmVkLCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGlj
IHZvaWQganNjX3VuZGVmaW5lZF9jbGFzc19pbml0KEpTQ1VuZGVmaW5lZENsYXNzKikKK3sKK30K
Kworc3RhdGljIHZvaWQganNjX3VuZGVmaW5lZF9pbml0KEpTQ1VuZGVmaW5lZCopCit7Cit9CisK
K0pTQ1ZhbHVlKiBqc2NVbmRlZmluZWRDcmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1
ZVJlZiBqc1ZhbHVlKQoreworICAgIEFTU0VSVChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7Cisg
ICAgQVNTRVJUKEpTVmFsdWVJc1VuZGVmaW5lZChqc1ZhbHVlKSk7CisKKyAgICBKU0NWYWx1ZSog
dW5kZWZpbmVkID0gSlNDX1ZBTFVFKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9VTkRFRklORUQsICJj
b250ZXh0IiwgY29udGV4dCwgbnVsbHB0cikpOworICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZSh1bmRl
ZmluZWQsIGpzVmFsdWUpOworCisgICAgcmV0dXJuIHVuZGVmaW5lZDsKK30KKworLyoqCisgKiBq
c2NfdW5kZWZpbmVkX25ldzoKKyAqIEBjb250ZXh0OiBUaGUgI0pTQ0NvbnRleHQgdGhhdCB3aWxs
IGNvbnRhaW4gdGhlIHZhbHVlCisgKiBAdmFsdWU6IFRoZSB1bmRlZmluZWQgdmFsdWUgdGhhdCB0
aGUgI0pTQ1VuZGVmaW5lZCB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pT
Q1VuZGVmaW5lZCB3aXRoIEB2YWx1ZSBhcyB0aGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zOiBUaGUg
bmV3bHkgY3JlYXRlZCAjSlNDVW5kZWZpbmVkIG9iamVjdAorICovCitKU0NWYWx1ZSoganNjX3Vu
ZGVmaW5lZF9uZXcoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNj
VW5kZWZpbmVkQ3JlYXRlKGNvbnRleHQsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCkpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NVbmRlZmluZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzRjN2ZlYTM5ZDM1M2NlZTRiNjRhMGE5
YWFhMjQxZWI4OWI4MzllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1VuZGVmaW5lZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2Ft
aWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBKU0NVbmRlZmluZWRfaAorI2RlZmluZSBKU0NVbmRlZmluZWRfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgor
I2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlND
X1RZUEVfVU5ERUZJTkVEICAgICAgICAgICAgKGpzY191bmRlZmluZWRfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgSlNDX1VOREVGSU5FRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBKU0NfVFlQRV9VTkRFRklORUQsIEpTQ1VuZGVmaW5lZCkpCisjZGVmaW5l
IEpTQ19JU19VTkRFRklORUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgSlNDX1RZUEVfVU5ERUZJTkVEKSkKKyNkZWZpbmUgSlNDX1VOREVGSU5FRF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9V
TkRFRklORUQsIEpTQ1VuZGVmaW5lZENsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1VOREVGSU5FRF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9V
TkRFRklORUQpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDVW5kZWZpbmVkICAgICAgSlNDVW5kZWZp
bmVkOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1VuZGVmaW5lZENsYXNzIEpTQ1VuZGVmaW5lZENsYXNz
OworCitzdHJ1Y3QgX0pTQ1VuZGVmaW5lZCB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKwor
c3RydWN0IF9KU0NVbmRlZmluZWRDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitHVHlwZQoranNjX3VuZGVmaW5lZF9nZXRfdHlwZSAodm9pZCk7CisKK0pTQ1Zh
bHVlICoKK2pzY191bmRlZmluZWRfbmV3ICAgICAgKEpTQ0NvbnRleHQgKmNvbnRleHQpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NVbmRlZmluZWRQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZWE2ZjJiZmM4NWE2ODgw
MjJjMDg3ZmM5NGQ1ZDcwZGNhZTA2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NVbmRl
ZmluZWQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKworSlND
VmFsdWUqIGpzY1VuZGVmaW5lZENyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzA3
MjZkN2YwZThkMDU2NTY4YzBhMzlkY2M4M2Q4Y2VlMjU3MzRlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMCwwICsxLDE1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3Bp
byBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKyNpbmNsdWRlICJKU0ND
b250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ051bWJlci5oIgorI2luY2x1ZGUgIkpTQ1By
aXZhdGUuaCIKKyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZh
dGUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworLyoqCisgKiBT
RUNUSU9OOiBKU0NWYWx1ZQorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBCYXNlIGNsYXNzIHJlcHJl
c2VudGluZyBKYXZhU2NyaXB0Q29yZSB2YWx1ZXMKKyAqIEBUaXRsZTogSlNDVmFsdWUKKyAqCisg
KiBKU0NWYWx1ZSBpcyB0aGUgYmFzZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCB2YWx1ZXMgaW5z
aWRlCisgKiBKYXZhU2NyaXB0Q29yZS4gQWN0dWFsIHZhbHVlcyBhcmUgc3VidHlwZXMgb2YgdGhp
cyBjbGFzcy4gVGhlCisgKiBjdXJyZW50IHN1YmNsYXNzZXMgYXJlOiAjSlNDU3RyaW5nLCAjSlND
TnVtYmVyIGFuZCAjSlNDQm9vbGVhbi4KKyAqCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1Zh
bHVlUHJpdmF0ZSB7CisgICAgSlNDQ29udGV4dCogY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIHZh
bHVlOworfSBKU0NWYWx1ZVByaXZhdGU7CisKK1dFQktJVF9ERUZJTkVfQUJTVFJBQ1RfVFlQRShK
U0NWYWx1ZSwganNjX3ZhbHVlLCBHX1RZUEVfSU5JVElBTExZX1VOT1dORUQpCisKK2VudW0gewor
ICAgIGtQUk9QXzAsCisKKyAgICBrUFJPUF9DT05URVhULAorfTsKKworc3RhdGljIHZvaWQganNj
VmFsdWVHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBrUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IEpTQ19WQUxVRShvYmplY3QpLT5wcml2LT5jb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjVmFsdWVT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBrUFJPUF9DT05URVhUOiB7CisgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBK
U0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgSlNDX1ZBTFVF
KG9iamVjdCktPnByaXYtPmNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBnX29iamVjdF9hZGRf
d2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHQpLCAoZ3BvaW50ZXIqKSYoSlNDX1ZBTFVFKG9i
amVjdCktPnByaXYtPmNvbnRleHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY1ZhbHVlRGlzcG9z
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gSlNDX1ZB
TFVFKG9iamVjdCktPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y29udGV4dCkgeworICAgICAgICBK
U0NvbnRleHRSZWYganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250
ZXh0KTsKKworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGpzQ29udGV4dCwgcHJpdi0+dmFsdWUp
OworICAgICAgICBwcml2LT52YWx1ZSA9IG51bGxwdHI7CisKKyAgICAgICAgZ19vYmplY3RfcmVt
b3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChwcml2LT5jb250ZXh0KSwgKGdwb2ludGVyKikmcHJp
di0+Y29udGV4dCk7CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgIH0KKwor
ICAgIEdfT0JKRUNUX0NMQVNTKGpzY192YWx1ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY192YWx1ZV9jbGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3Mq
IGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhr
bGFzcyk7CisKKyAgICBvYmpDbGFzcy0+Z2V0X3Byb3BlcnR5ID0ganNjVmFsdWVHZXRQcm9wZXJ0
eTsKKyAgICBvYmpDbGFzcy0+c2V0X3Byb3BlcnR5ID0ganNjVmFsdWVTZXRQcm9wZXJ0eTsKKyAg
ICBvYmpDbGFzcy0+ZGlzcG9zZSA9IGpzY1ZhbHVlRGlzcG9zZTsKKworICAgIC8qKgorICAgICAq
IEpTQ1ZhbHVlOmNvbnRleHQ6CisgICAgICoKKyAgICAgKiBUaGUgI0pTQ0NvbnRleHQgb2YgdGhl
IHZhbHVlLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
Q2xhc3MsCisgICAgICAgIGtQUk9QX0NPTlRFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoImNvbnRleHQiLAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkphdmFT
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQiLAorICAgICAgICAgICAgSlNDX1RZUEVfQ09OVEVYVCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSB8
IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK0pTQ0NvbnRleHQqIGpzY1ZhbHVlR2V0
Q29udGV4dChKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKEpTQ19JU19WQUxVRSh2YWx1
ZSkpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisKKyAgICBy
ZXR1cm4gcHJpdi0+Y29udGV4dDsKK30KKworSlNWYWx1ZVJlZiBqc2NWYWx1ZUdldEpTVmFsdWUo
SlNDVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKwor
ICAgIHJldHVybiB2YWx1ZS0+cHJpdi0+dmFsdWU7Cit9CisKK3ZvaWQganNjVmFsdWVTZXRKU1Zh
bHVlKEpTQ1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIEFTU0VSVChK
U0NfSVNfVkFMVUUodmFsdWUpKTsKKyAgICBBU1NFUlQoanNWYWx1ZSk7CisKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBKU0NvbnRleHRSZWYganNDb250ZXh0
ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0KTsKKworICAgIEFTU0VSVCgh
cHJpdi0+dmFsdWUpOworCisgICAgcHJpdi0+dmFsdWUgPSBqc1ZhbHVlOworICAgIEpTVmFsdWVQ
cm90ZWN0KGpzQ29udGV4dCwganNWYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MDcyM2ZlNjlkZmI1ZjBiNTI5ZDdkNzBkZTY1
NjUwZDMwMGQzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgSlNDVmFsdWVfaAorI2RlZmluZSBKU0NWYWx1ZV9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVkFMVUUgICAg
ICAgICAgICAoanNjX3ZhbHVlX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19WQUxVRShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WQUxV
RSwgSlNDVmFsdWUpKQorI2RlZmluZSBKU0NfSVNfVkFMVUUob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0Nf
VkFMVUVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
SlNDX1RZUEVfVkFMVUUsIEpTQ1ZhbHVlQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfVkFMVUVfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVkFM
VUUpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWUgICAgICAgIEpTQ1ZhbHVlOwordHlwZWRl
ZiBzdHJ1Y3QgX0pTQ1ZhbHVlQ2xhc3MgICBKU0NWYWx1ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ1ZhbHVlUHJpdmF0ZSBKU0NWYWx1ZVByaXZhdGU7CisKKworc3RydWN0IF9KU0NWYWx1ZSB7
CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX0pTQ1ZhbHVlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitHVHlwZQoranNjX3ZhbHVlX2dldF90eXBlICh2b2lkKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmFsdWVQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwNjYxNGRmZjc3MWYzYzUxZWY1MGI1ZWJmNzUzZTU2YzMx
OWMzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NWYWx1ZVByaXZhdGUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKK0pTQ0NvbnRleHQqIGpzY1ZhbHVlR2V0Q29udGV4dChKU0NWYWx1ZSopOworCitK
U1ZhbHVlUmVmIGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSopOworCit2b2lkIGpzY1ZhbHVl
U2V0SlNWYWx1ZShKU0NWYWx1ZSosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL2pzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhYWNjMmVjOTkxNWNhMjkwNTU1ZTgxZThjMTllODE1ZjBh
MWY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
anNjLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbD
o28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIGpz
Y19oCisjZGVmaW5lIGpzY19oCisKKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgorI2luY2x1
ZGUgPGpzYy9KU0NWYWx1ZS5oPgorI2luY2x1ZGUgPGpzYy9KU0NCb29sZWFuLmg+CisjaW5jbHVk
ZSA8anNjL0pTQ051bWJlci5oPgorI2luY2x1ZGUgPGpzYy9KU0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDxqc2MvSlNDVW5kZWZpbmVkLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDFlOTNkNGJkYTc2MGUzMTVkMTU5MzEwYmZhOGJhN2EwZjMwMTc5M2UuLmZk
MGMxYmMwMjBiMjA5ZThmZjk0MWE1NDAzNTU2NWZmYTcyMDdlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTEzOTUsNyArMTM5NSw3IEBAIGVuZGlmICgpCiAjIEZvcmNl
IHN0YWdpbmcgb2Ygc2hhcmVkIHNjcmlwdHMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZGlyZWN0bHkg
dXNlZCB0byBidWlsZCBKYXZhU2NyaXB0Q29yZS4KIAogYWRkX2N1c3RvbV90YXJnZXQoc3RhZ2VT
aGFyZWRTY3JpcHRzIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTfSkKLWFkZF9kZXBl
bmRlbmNpZXMoSmF2YVNjcmlwdENvcmUgc3RhZ2VTaGFyZWRTY3JpcHRzKQorYWRkX2RlcGVuZGVu
Y2llcyhKYXZhU2NyaXB0Q29yZSBzdGFnZVNoYXJlZFNjcmlwdHMgJHtKYXZhU2NyaXB0Q29yZV9F
WFRSQV9ERVBFTkRFTkNJRVN9KQogCiBpZiAoTVNWQykKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQo
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDc5MWFiYTQ5YTNj
MjU1NTI5ZTAwMDU4MzBlZmYwMzE3MzMwZWY1NS4uYjNlZDQwZmFkZjFmZDYwYzgxOTNjZjQ5ZTdi
MTQ3NDMzMTc3NzUyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpA
QCAtNDgsMyArNDgsNDcgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVTCiBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKKyMgRGVmaW5pdGlvbnMgZm9yIEphdmFTY3JpcHRD
b3JlIGdsaWIgYmluZGluZ3MKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtGT1JXQVJESU5HX0hFQURF
UlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliKQorIyBhbGxvd3MgaW5jbHVkZXMgbGlrZSAjaW5j
bHVkZSA8anNjL2pzYy5oPiB3aGljaCBzaW11bGF0ZXMgaW5zdGFsbGVkIGhlYWRlcnMuCithZGRf
Y3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2
YVNjcmlwdENvcmUvZ2xpYi9qc2MKKyAgICBERVBFTkRTICR7SkFWQVNDUklQVENPUkVfRElSfS9B
UEkvZ2xpYgorICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQ
SS9nbGliICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYi9qc2MK
KykKKworYWRkX2N1c3RvbV90YXJnZXQoSmF2YVNjcmlwdENvcmVHbGliLWZha2UtYXBpLWhlYWRl
cnMKKyAgICBERVBFTkRTICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUv
Z2xpYi9qc2MKKykKKworc2V0KEphdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFUworICAg
IEphdmFTY3JpcHRDb3JlR2xpYi1mYWtlLWFwaS1oZWFkZXJzCispCisKK2luY2x1ZGVfZGlyZWN0
b3JpZXMoCisgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGli
CispCisKK3NldChKYXZhU2NyaXB0Q29yZUdsaWJfU09VUkNFUworICAgIEFQSS9nbGliL0pTQ0Jv
b2xlYW4uY3BwCisgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NO
dW1iZXIuY3BwCisgICAgQVBJL2dsaWIvSlNDU3RyaW5nLmNwcAorICAgIEFQSS9nbGliL0pTQ1Vu
ZGVmaW5lZC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKykKKworc2V0KEphdmFTY3Jp
cHRDb3JlR2xpYl9IRUFERVJTCisgICAgQVBJL2dsaWIvSlNDQm9vbGVhbi5oCisgICAgQVBJL2ds
aWIvSlNDQ29udGV4dC5oCisgICAgQVBJL2dsaWIvSlNDTnVtYmVyLmgKKyAgICBBUEkvZ2xpYi9K
U0NTdHJpbmcuaAorICAgIEFQSS9nbGliL0pTQ1VuZGVmaW5lZC5oCisgICAgQVBJL2dsaWIvSlND
VmFsdWUuaAorICAgIEFQSS9nbGliL2pzYy5oCispCisKK2xpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKKyAgICAke0phdmFTY3JpcHRDb3JlR2xpYl9TT1VSQ0VTfQorKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhmNjY3ZGI1NDVj
ZDg0YzQ0MmI5ZmFkODUxYTdiNGM0OGY1MjgxYTQuLmJiYTJkMzgxNGY1ZDNmMjRlODBjZmRlZTdl
ODI2MzcxYTM4ODk0ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQ
cm9jw7NwaW8gQW1hcmFsICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0
aWFsIGltcGxlbWVudGF0aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1w
bGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisg
ICAgICAgIGFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJraXQtZ3RrIG1haWxpbmcg
bGlzdCB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93
ZWJraXQtZ3RrLzIwMTYtT2N0b2Jlci8wMDI4MzQuaHRtbAorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBBZGRlZCBydWxlcyB0byBpZ25vcmUgbmV3IEphdmFT
Y3JpcHRDb3JlIGdsaWIKKyAgICAgICAgcHVibGljIGhlYWRlciBmaWxlcyBhbmQgc3RvcHBlZCBj
aGVja2luZyByZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXMKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOiBBZGRlZCBpbnN0cnVjdGlvbnMgdG8gYnVpbGQgVGVz
dEphdmFTY3JpcHRDb3JlR2xpYgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNj
cmlwdENvcmVHbGliL21haW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVmFsdWUuaDog
QWRkZWQuCisKIDIwMTYtMTAtMTggIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFdlYlJUQzogW0dUS10gVXBkYXRlIGpoYnVpbGQgZW52aXJvbm1lbnQg
Zm9yIE9wZW5XZWJSVEMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRl
eCBlMmZhNGZkM2E5N2E2YzdmZDJiODc4NDNjMjUyZmMyZWIxOTdkODY3Li5jYzk5Mzk1MmUzODE1
MDE4YjNjNGY0ZDhjOGUyZDQ5ZGFlNmI4YzY5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyLnB5CkBAIC0xNjMsNyArMTYzLDEwIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9
IFsKICAgICAoWyMgYXNzZW1ibGVyIGhhcyBsb3RzIG9mIG9wY29kZXMgdGhhdCB1c2UgdW5kZXJz
Y29yZXMsIHNvCiAgICAgICAjIHdlIGRvbid0IGNoZWNrIGZvciB1bmRlcnNjb3JlcyBpbiB0aGF0
IGRpcmVjdG9yeS4KICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3Jl
JywgJ2Fzc2VtYmxlcicpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlw
dENvcmUnLCAnaml0JywgJ0pJVCcpXSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0ph
dmFTY3JpcHRDb3JlJywgJ2ppdCcsICdKSVQnKSwKKyAgICAgICMgZ2xpYiBiaW5kaW5ncyB1c2Ug
dW5kZXJzY29yZXMgaW4gZnVuY3Rpb24gbmFtZXMsIHNvIHdlCisgICAgICAjIGRvbid0IGNoZWNr
IGZvciB1bmRlcnNjb3JlcyBpbiBnbGliIGJpbmRpbmdzCisgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicpXSwKICAgICAgWyItcmVhZGFi
aWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzIl0pLAogICAgIChbIyBKSVRTdHVicyBoYXMgYW4gdXN1
YWwgc3ludGF4IHdoaWNoIGNhdXNlcyBmYWxzZSBhbGFybXMgZm9yIGEgZmV3IGNoZWNrcy4KICAg
ICAgIG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaml0JywgJ0pJVFN0dWJzLmNwcCcp
XSwKQEAgLTMwNyw3ICszMTAsMTEgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwog
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmpl
Y3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ0RPTScpLAogCiAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgn
KSwKLSAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAn
SW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyld
CisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0lu
amVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1leHRlbnNpb24uaCcpLAor
CisgICAgIyBHT2JqZWN0IGJpbmRpbmdzIGZvciBKYXZhU2NyaXB0Q29yZS4KKyAgICByZS5jb21w
aWxlKHJlLmVzY2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdB
UEknLCAnZ2xpYicpICsgb3MucGF0aC5zZXApICsgcidKU0MoPyEuKlByaXZhdGVcLmgpLipcLmgk
JyksCisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywg
J2dsaWInLCAnanNjLmgnKV0KIAogIyBGaWxlcyB0byBza2lwIHRoYXQgYXJlIG1vcmUgY29tbW9u
IG9yIG9idmlvdXMuCiAjCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
R1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA5
MWEyYzllN2JkMzEzOGNhNTA3OGNmNWE4NGM2NzEwMDlmMzVhMzgwLi5mMzI0Mjk5ODc1ODRjNjNl
ZjY2NDUwMzU1MGIyMjc0NjI2MmJjNWI1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTE1LDYgKzE1LDcgQEAgc2V0KEZvcndhcmRpbmdIZWFkZXJzRm9yVGVzdFdlYktp
dEFQSV9OQU1FIFRlc3RXZWJLaXRBUEktZm9yd2FyZGluZy1oZWFkZXJzKQogaW5jbHVkZV9kaXJl
Y3RvcmllcygKICAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9CiAgICAgJHtGT1JXQVJESU5H
X0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZQorICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJ
Un0vSmF2YVNjcmlwdENvcmUvZ2xpYgogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkv
Qy9zb3VwCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2d0awogICAgICR7V0VC
S0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrCkBAIC0xNDksMyArMTUwLDIyIEBAIGxpc3QoQVBQ
RU5EIFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9n
bGliL0dVbmlxdWVQdHIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2ds
aWIvV29ya1F1ZXVlR0xpYi5jcHAKICkKKworIyBEZWZpbml0aW9ucyBmb3IgSmF2YVNjcmlwdENv
cmUgZ2xpYiBiaW5kaW5ncworc2V0KFRlc3RKYXZhU2NyaXB0Q29yZUdsaWJfU09VUkNFUworICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvbWFpbi5jcHAK
KyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RK
U0NWYWx1ZS5jcHAKKykKKworYWRkX2V4ZWN1dGFibGUoVGVzdEphdmFTY3JpcHRDb3JlR2xpYgor
ICAgICR7VGVzdEphdmFTY3JpcHRDb3JlR2xpYl9TT1VSQ0VTfQorKQorCit0YXJnZXRfbGlua19s
aWJyYXJpZXMoVGVzdEphdmFTY3JpcHRDb3JlR2xpYgorICAgIGdsaWItMi4wCisgICAgSmF2YVNj
cmlwdENvcmUKKykKKworYWRkX3Rlc3QoVGVzdEphdmFTY3JpcHRDb3JlR2xpYiAke1RFU1RXRUJL
SVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RK
YXZhU2NyaXB0Q29yZUdsaWIpCitzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0SmF2YVNjcmlwdENv
cmVHbGliIFBST1BFUlRJRVMgVElNRU9VVCA2MCkKK3NldF90YXJnZXRfcHJvcGVydGllcyhUZXN0
SmF2YVNjcmlwdENvcmVHbGliIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7
VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L0phdmFTY3JpcGNDb3JlL2ds
aWIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3Jl
L2dsaWIvVGVzdEpTQ1ZhbHVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNj
cmlwdENvcmUvZ2xpYi9UZXN0SlNDVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkMDIyYmNkOGI1ZmM0
ZWViNmFjNGY4NjVhZTdjNjk3Njg4NmI0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQ1ZhbHVlLmNwcApAQCAt
MCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEpTQ1ZhbHVlLmgiCisKKyNpbmNsdWRlIDxqc2MvSlNDQm9vbGVhbi5o
PgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ051bWJlci5o
PgorI2luY2x1ZGUgPGpzYy9KU0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVW5kZWZpbmVk
Lmg+CisKKy8vIFRlc3RpbmcgYm9vbGVhbiB2YWx1ZXMKK3ZvaWQgdGVzdEpTQ0Jvb2xlYW5MaWZl
Y3ljbGUoKQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsK
KyAgICBKU0NWYWx1ZSogc2V0VmFsdWUgPSBqc2NfYm9vbGVhbl9uZXcoY29udGV4dCwgdHJ1ZSk7
CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHNldFZhbHVlKSwgKGdw
b2ludGVyKikmc2V0VmFsdWUpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAi
dHJ1ZSIsIHNldFZhbHVlKTsKKworICAgIEpTQ1ZhbHVlKiBnZXRWYWx1ZSA9IGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LCAidHJ1ZSIpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50
ZXIoR19PQkpFQ1QoZ2V0VmFsdWUpLCAoZ3BvaW50ZXIqKSZnZXRWYWx1ZSk7CisKKyAgICBnX2Fz
c2VydChKU0NfSVNfQk9PTEVBTihnZXRWYWx1ZSkpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtf
cG9pbnRlcihHX09CSkVDVChjb250ZXh0KSwgKGdwb2ludGVyKikmY29udGV4dCk7CisgICAgZ19v
YmplY3RfdW5yZWYoY29udGV4dCk7CisKKyAgICBnX2Fzc2VydCghY29udGV4dCk7Cit9CisKK3Zv
aWQgdGVzdEpTQ0Jvb2xlYW5WYWx1ZXMoKQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBq
c2NfY29udGV4dF9uZXcoKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7
CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChjb250ZXh0KSwgKGdwb2lu
dGVyKikmY29udGV4dCk7CisKKyAgICBKU0NWYWx1ZSogdW5kZWYgPSBqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dCwgIm5vbi1leGlzdGFudC1wcm9wZXJ0eSIpOworCisgICAganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGNvbnRleHQsICJ0cnVlIiwgIGpzY19ib29sZWFuX25ldyhjb250ZXh0LCB0
cnVlKSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJmYWxzZSIsIGpzY19i
b29sZWFuX25ldyhjb250ZXh0LCBmYWxzZSkpOworCisgICAgSlNDVmFsdWUqIGJvb2xUcnVlID0g
anNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJ0cnVlIik7CisgICAgSlNDVmFsdWUqIGJv
b2xGYWxzZSA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAiZmFsc2UiKTsKKworICAg
IGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQodW5kZWYpKTsKKyAgICBnX2Fzc2VydChKU0NfSVNf
Qk9PTEVBTihib29sVHJ1ZSkpOworICAgIGdfYXNzZXJ0KEpTQ19JU19CT09MRUFOKGJvb2xGYWxz
ZSkpOworCisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfYm9vbGVhbl9nZXRfdmFsdWUoSlNDX0JPT0xF
QU4oYm9vbFRydWUpKSk7CisgICAgZ19hc3NlcnRfZmFsc2UoanNjX2Jvb2xlYW5fZ2V0X3ZhbHVl
KEpTQ19CT09MRUFOKGJvb2xGYWxzZSkpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQp
OworICAgIGdfYXNzZXJ0KCFjb250ZXh0KTsKK30KKwordm9pZCB0ZXN0SlNDQm9vbGVhbigpCit7
CisgICAgdGVzdEpTQ0Jvb2xlYW5MaWZlY3ljbGUoKTsKKyAgICB0ZXN0SlNDQm9vbGVhblZhbHVl
cygpOworfQorCisvLyBUZXN0aW5nIG51bWVyaWMgdmFsdWVzCitzdGF0aWMgdm9pZCBpbml0Q29u
dGV4dERvdWJsZShKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfYXNzZXJ0KEpTQ19JU19D
T05URVhUKGNvbnRleHQpKTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAi
bnVtYmVyLW4iLCBqc2NfbnVtYmVyX25ld19kb3VibGUoY29udGV4dCwgLTEuMikpOworICAgIGpz
Y19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAibnVtYmVyLXoiLCBqc2NfbnVtYmVyX25ld19k
b3VibGUoY29udGV4dCwgMC4wMDApKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4
dCwgIm51bWJlci1wIiwganNjX251bWJlcl9uZXdfZG91YmxlKGNvbnRleHQsIDMuNykpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0SlNDTnVtYmVyRG91YmxlKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgSlNDVmFsdWUqIG4gPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJl
ci1uIik7CisgICAgSlNDVmFsdWUqIHogPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwg
Im51bWJlci16Iik7CisgICAgSlNDVmFsdWUqIHAgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dCwgIm51bWJlci1wIik7CisKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKG4pKTsKKyAg
ICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHopKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVS
KHApKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobiksIChncG9p
bnRlciopJm4pOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoeiksIChn
cG9pbnRlciopJnopOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocCks
IChncG9pbnRlciopJnApOworCisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX251bWJlcl9nZXRf
dmFsdWVfYXNfZG91YmxlKEpTQ19OVU1CRVIobikpLCA9PSwgLTEuMik7CisgICAgZ19hc3NlcnRf
Y21wZmxvYXQoanNjX251bWJlcl9nZXRfdmFsdWVfYXNfZG91YmxlKEpTQ19OVU1CRVIoeikpLCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX251bWJlcl9nZXRfdmFsdWVfYXNfZG91
YmxlKEpTQ19OVU1CRVIocCkpLCA9PSwgMy43KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRl
eHQpOworfQorCitzdGF0aWMgdm9pZCBpbml0Q29udGV4dFVJbnQoSlNDQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBnX2Fzc2VydChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci1uIiwganNjX251bWJlcl9uZXdfdWlu
dDMyKGNvbnRleHQsIC0xKSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJu
dW1iZXIteiIsIGpzY19udW1iZXJfbmV3X3VpbnQzMihjb250ZXh0LCAwKSk7CisgICAganNjX2Nv
bnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJudW1iZXItcCIsIGpzY19udW1iZXJfbmV3X3VpbnQz
Mihjb250ZXh0LCAyMTQ3NDgzNjQ4KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NOdW1iZXJV
SW50KEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSlNDVmFsdWUqIG4gPSBqc2NfY29udGV4
dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci1uIik7CisgICAgSlNDVmFsdWUqIHogPSBqc2Nf
Y29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci16Iik7CisgICAgSlNDVmFsdWUqIHAg
PSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci1wIik7CisKKyAgICBnX2Fz
c2VydChKU0NfSVNfTlVNQkVSKG4pKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHopKTsK
KyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHApKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFr
X3BvaW50ZXIoR19PQkpFQ1QobiksIChncG9pbnRlciopJm4pOworICAgIGdfb2JqZWN0X2FkZF93
ZWFrX3BvaW50ZXIoR19PQkpFQ1QoeiksIChncG9pbnRlciopJnopOworICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocCksIChncG9pbnRlciopJnApOworCisgICAgZ19hc3Nl
cnRfY21wdWludChqc2NfbnVtYmVyX2dldF92YWx1ZV9hc191aW50MzIoSlNDX05VTUJFUihuKSks
ID09LCA0Mjk0OTY3Mjk1KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19udW1iZXJfZ2V0X3Zh
bHVlX2FzX3VpbnQzMihKU0NfTlVNQkVSKHopKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQoanNjX251bWJlcl9nZXRfdmFsdWVfYXNfdWludDMyKEpTQ19OVU1CRVIocCkpLCA9PSwgMjE0
NzQ4MzY0OCk7CisKKyAgICBnX29iamVjdF91bnJlZihjb250ZXh0KTsKK30KKworc3RhdGljIHZv
aWQgaW5pdENvbnRleHRJbnQoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX2Fzc2VydChK
U0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29u
dGV4dCwgIm51bWJlci1uIiwganNjX251bWJlcl9uZXdfaW50MzIoY29udGV4dCwgLTIxNDc0ODM2
NDgpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci16IiwganNj
X251bWJlcl9uZXdfaW50MzIoY29udGV4dCwgMCkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0LCAibnVtYmVyLXAiLCBqc2NfbnVtYmVyX25ld19pbnQzMihjb250ZXh0LCAyMTQ3
NDgzNjQ3KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NOdW1iZXJJbnQoSlNDQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBKU0NWYWx1ZSogbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250
ZXh0LCAibnVtYmVyLW4iKTsKKyAgICBKU0NWYWx1ZSogeiA9IGpzY19jb250ZXh0X2dldF92YWx1
ZShjb250ZXh0LCAibnVtYmVyLXoiKTsKKyAgICBKU0NWYWx1ZSogcCA9IGpzY19jb250ZXh0X2dl
dF92YWx1ZShjb250ZXh0LCAibnVtYmVyLXAiKTsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1C
RVIobikpOworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIoeikpOworICAgIGdfYXNzZXJ0KEpT
Q19JU19OVU1CRVIocCkpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVD
VChuKSwgKGdwb2ludGVyKikmbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09C
SkVDVCh6KSwgKGdwb2ludGVyKikmeik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihH
X09CSkVDVChwKSwgKGdwb2ludGVyKikmcCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX251
bWJlcl9nZXRfdmFsdWVfYXNfaW50MzIoSlNDX05VTUJFUihuKSksID09LCAtMjE0NzQ4MzY0OCk7
CisgICAgZ19hc3NlcnRfY21waW50KGpzY19udW1iZXJfZ2V0X3ZhbHVlX2FzX2ludDMyKEpTQ19O
VU1CRVIoeikpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY19udW1iZXJfZ2V0X3Zh
bHVlX2FzX2ludDMyKEpTQ19OVU1CRVIocCkpLCA9PSwgMjE0NzQ4MzY0Nyk7CisKKyAgICBnX29i
amVjdF91bnJlZihjb250ZXh0KTsKK30KKwordm9pZCB0ZXN0SlNDTnVtYmVyKCkKK3sKKyAgICBK
U0NDb250ZXh0KiBjb250ZXh0RG91YmxlID0ganNjX2NvbnRleHRfbmV3KCk7CisgICAgSlNDQ29u
dGV4dCogY29udGV4dFVJbnQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBKU0NDb250ZXh0KiBj
b250ZXh0SW50ID0ganNjX2NvbnRleHRfbmV3KCk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19w
b2ludGVyKEdfT0JKRUNUKGNvbnRleHREb3VibGUpLCAoZ3BvaW50ZXIqKSZjb250ZXh0RG91Ymxl
KTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHRVSW50KSwg
KGdwb2ludGVyKikmY29udGV4dFVJbnQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIo
R19PQkpFQ1QoY29udGV4dEludCksIChncG9pbnRlciopJmNvbnRleHRJbnQpOworCisgICAgaW5p
dENvbnRleHREb3VibGUoY29udGV4dERvdWJsZSk7CisgICAgdGVzdEpTQ051bWJlckRvdWJsZShj
b250ZXh0RG91YmxlKTsKKyAgICBnX2Fzc2VydCghY29udGV4dERvdWJsZSk7CisKKyAgICBpbml0
Q29udGV4dFVJbnQoY29udGV4dFVJbnQpOworICAgIHRlc3RKU0NOdW1iZXJVSW50KGNvbnRleHRV
SW50KTsKKyAgICBnX2Fzc2VydCghY29udGV4dFVJbnQpOworCisgICAgaW5pdENvbnRleHRJbnQo
Y29udGV4dEludCk7CisgICAgdGVzdEpTQ051bWJlckludChjb250ZXh0SW50KTsKKyAgICBnX2Fz
c2VydCghY29udGV4dEludCk7Cit9CisKKy8vIFRlc3Rpbmcgc3RyaW5nIHZhbHVlcwordm9pZCB0
ZXN0SlNDU3RyaW5nKCkKK3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjX2NvbnRleHRf
bmV3KCk7CisgICAgSlNDVmFsdWUqIHN0cmluZ1ZhbHVlID0ganNjX3N0cmluZ19uZXcoY29udGV4
dCwgInRoZSBzdHJpbmcgdmFsdWUiKTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LCAic3RyaW5nIiwgc3RyaW5nVmFsdWUpOworCisgICAgSlNDVmFsdWUqIG5vbkV4aXN0YW50
ID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJub24tZXhpc3RhbnQiKTsKKyAgICBn
X2Fzc2VydChKU0NfSVNfVU5ERUZJTkVEKG5vbkV4aXN0YW50KSk7CisKKyAgICBKU0NWYWx1ZSog
c3RyaW5nID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJzdHJpbmciKTsKKyAgICBn
X2Fzc2VydChKU0NfSVNfU1RSSU5HKHN0cmluZykpOworCisgICAgY2hhciogdmFsdWUgPSBqc2Nf
c3RyaW5nX2dldF92YWx1ZShKU0NfU1RSSU5HKHN0cmluZykpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZSwgPT0sICJ0aGUgc3RyaW5nIHZhbHVlIik7CisgICAgZ19mcmVlKHZhbHVlKTsKKwor
ICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4dCksIChncG9pbnRl
ciopJmNvbnRleHQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1Qoc3Ry
aW5nVmFsdWUpLCAoZ3BvaW50ZXIqKSZzdHJpbmdWYWx1ZSk7CisgICAgZ19vYmplY3RfYWRkX3dl
YWtfcG9pbnRlcihHX09CSkVDVChub25FeGlzdGFudCksIChncG9pbnRlciopJm5vbkV4aXN0YW50
KTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHN0cmluZyksIChncG9p
bnRlciopJnN0cmluZyk7CisKKyAgICBnX29iamVjdF91bnJlZihjb250ZXh0KTsKKyAgICBnX2Fz
c2VydCghY29udGV4dCk7Cit9CisKKy8vIFRlc3RpbmcgdW5kZWZpbmVkIHZhbHVlcwordm9pZCB0
ZXN0SlNDVW5kZWZpbmVkKCkKK3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjX2NvbnRl
eHRfbmV3KCk7CisgICAgSlNDVmFsdWUqIGJvb2xlYW5WYWx1ZSA9IGpzY19ib29sZWFuX25ldyhj
b250ZXh0LCB0cnVlKTsKKyAgICBKU0NWYWx1ZSogdW5kZWZpbmVkVmFsdWUgPSBqc2NfdW5kZWZp
bmVkX25ldyhjb250ZXh0KTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAi
Ym9vbGVhbiIsIGJvb2xlYW5WYWx1ZSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQsICJ1bmRlZmluZWQiLCB1bmRlZmluZWRWYWx1ZSk7CisKKyAgICBKU0NWYWx1ZSogbm9uRXhp
c3RhbnQgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm5vbi1leGlzdGFudCIpOwor
ICAgIGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQobm9uRXhpc3RhbnQpKTsKKworICAgIEpTQ1Zh
bHVlKiB1bmRlZmluZWQgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgInVuZGVmaW5l
ZCIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQodW5kZWZpbmVkKSk7CisKKyAgICBK
U0NWYWx1ZSogYm9vbGVhbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAiYm9vbGVh
biIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19CT09MRUFOKGJvb2xlYW4pKTsKKyAgICBnX2Fzc2Vy
dCghSlNDX0lTX1VOREVGSU5FRChib29sZWFuKSk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19w
b2ludGVyKEdfT0JKRUNUKGNvbnRleHQpLCAoZ3BvaW50ZXIqKSZjb250ZXh0KTsKKyAgICBnX29i
amVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGJvb2xlYW5WYWx1ZSksIChncG9pbnRlciop
JmJvb2xlYW5WYWx1ZSk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCh1
bmRlZmluZWRWYWx1ZSksIChncG9pbnRlciopJnVuZGVmaW5lZFZhbHVlKTsKKyAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG5vbkV4aXN0YW50KSwgKGdwb2ludGVyKikmbm9u
RXhpc3RhbnQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QodW5kZWZp
bmVkKSwgKGdwb2ludGVyKikmdW5kZWZpbmVkKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2lu
dGVyKEdfT0JKRUNUKGJvb2xlYW4pLCAoZ3BvaW50ZXIqKSZib29sZWFuKTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKGNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjb250ZXh0KTsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlND
VmFsdWUuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9U
ZXN0SlNDVmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjRlOGM2NTU3NmUzNzMwYmRkZDQwYWU1OTI5Yjc0
NDBiMTBmMDAxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0NWYWx1ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0
ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK3ZvaWQgdGVzdEpTQ0Jvb2xlYW4oKTsK
K3ZvaWQgdGVzdEpTQ051bWJlcigpOwordm9pZCB0ZXN0SlNDU3RyaW5nKCk7Cit2b2lkIHRlc3RK
U0NVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmUvZ2xpYi9tYWluLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmUvZ2xpYi9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2RjODk3MDQ1MmE5OGU2ZTQz
N2RkM2U0MjRkZjdkZDU0NzVmNzFmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL21haW4uY3BwCkBAIC0wLDAgKzEsMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
VGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDVmFsdWUuaCIKKyNpbmNsdWRlIDxnbGli
Lmg+CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9qc2Mt
dmFsdWUvYm9vbGVhbiIsICAgdGVzdEpTQ0Jvb2xlYW4pOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L2pzYy9qc2MtdmFsdWUvbnVtYmVyIiwgICAgdGVzdEpTQ051bWJlcik7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvanNjL2pzYy12YWx1ZS9zdHJpbmciLCAgICB0ZXN0SlNDU3RyaW5nKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi9qc2MvanNjLXZhbHVlL3VuZGVmaW5lZCIsIHRlc3RKU0NVbmRlZmlu
ZWQpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295368</attachid>
            <date>2016-11-23 07:47:07 -0800</date>
            <delta_ts>2018-02-22 06:46:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164061-20161123134651.patch</filename>
            <type>text/plain</type>
            <size>72369</size>
            <attacher name="Estêvão Samuel Procópio Amaral">tevaum</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Mjk3ZGVjZDEyNzFkZGQ4ZTMxZmM2MzljYjI3NDAwMzc3M2FjZDdlLi42MmRhNDhlMzE3MTljYThh
ZmNkNmU3NjU0ZGFhMWFkNWU4YmMxNWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFs
ICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0
aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisgICAgICAgIGFjY29yZGlu
ZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJraXQtZ3RrIG1haWxpbmcgbGlzdCB0aHJlYWQKKyAg
ICAgICAgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJraXQtZ3RrLzIwMTYt
T2N0b2Jlci8wMDI4MzQuaHRtbAorCisgICAgICAgICogQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHA6
IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0Jvb2xlYW4uaDogQWRkZWQuCisgICAgICAg
ICogQVBJL2dsaWIvSlNDQm9vbGVhblByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2ds
aWIvSlNDQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHQu
aDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogQVBJL2dsaWIvSlNDTnVtYmVyLmNwcDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDTnVtYmVyLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ051bWJlclBy
aXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDUHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBBUEkvZ2xpYi9KU0NTdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkv
Z2xpYi9KU0NTdHJpbmcuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDU3RyaW5nUHJp
dmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NVbmRlZmluZWQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NVbmRlZmluZWQuaDogQWRkZWQuCisgICAgICAgICog
QVBJL2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xp
Yi9KU0NWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBBUEkvZ2xpYi9qc2MuaDogQWRkZWQuCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZGVkIEphdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFUyB0byBpbnN0YWxsIEphdmFTY3Jp
cHRDb3JlCisgICAgICAgIGdsaWIgZm9yd2FyZGluZyBoZWFkZXJzCisgICAgICAgICogUGxhdGZv
cm1HVEsuY21ha2U6IEFkZGVkIHJ1bGVzIGZvciBidWlsZGluZyBKYXZhU2NyaXB0Q29yZSBnbGli
IGJpbmRpbmdzCisKIDIwMTYtMTAtMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIEFSTSBidWlsZGZpeCBhZnRlciByMjA3NDc1Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Jvb2xlYW4uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNiMTJmMzgzN2ExNGNiMDU0OTg3NmZhNzE3ZTBjMTViMmIzMTgxNzAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9vbGVhbi5jcHAKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNDQm9vbGVhbi5oIgorCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUu
aCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NCb29sZWFuCisgKiBAU2hvcnRf
ZGVzY3JpcHRpb246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCBib29sZWFuIHZhbHVl
cworICoKKyAqIEpTQ0Jvb2xlYW4gaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGJvb2xl
YW4gdmFsdWVzIGluc2lkZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5F
X1RZUEUoSlNDQm9vbGVhbiwganNjX2Jvb2xlYW4sIEpTQ19UWVBFX1ZBTFVFKQorCitzdGF0aWMg
dm9pZCBqc2NfYm9vbGVhbl9jbGFzc19pbml0KEpTQ0Jvb2xlYW5DbGFzcyopCit7Cit9CisKK3N0
YXRpYyB2b2lkIGpzY19ib29sZWFuX2luaXQoSlNDQm9vbGVhbiopCit7Cit9CisKK0pTQ1ZhbHVl
KiBqc2NCb29sZWFuQ3JlYXRlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1
ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIEFTU0VSVChK
U1ZhbHVlSXNCb29sZWFuKGpzVmFsdWUpKTsKKworICAgIEpTQ1ZhbHVlKiBib29sZWFuID0gSlND
X1ZBTFVFKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9CT09MRUFOLCAiY29udGV4dCIsIGNvbnRleHQs
IG51bGxwdHIpKTsKKyAgICBqc2NWYWx1ZVNldEpTVmFsdWUoYm9vbGVhbiwganNWYWx1ZSk7CisK
KyAgICByZXR1cm4gYm9vbGVhbjsKK30KKworLyoqCisgKiBqc2NfYm9vbGVhbl9uZXc6CisgKiBA
Y29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZQorICog
QHZhbHVlOiBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IHRoZSAjSlNDQm9vbGVhbiB3aWxsIHJlcHJl
c2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pTQ0Jvb2xlYW4gd2l0aCBAdmFsdWUgYXMgdGhl
IHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ0Jvb2xlYW4gb2Jq
ZWN0CisgKi8KK0pTQ1ZhbHVlKiBqc2NfYm9vbGVhbl9uZXcoSlNDQ29udGV4dCogY29udGV4dCwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRF
WFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0Jvb2xlYW5DcmVhdGUoY29u
dGV4dCwgSlNWYWx1ZU1ha2VCb29sZWFuKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCks
IHZhbHVlKSk7Cit9CisKKy8qKgorICoganNjX2Jvb2xlYW5fZ2V0X3ZhbHVlOgorICogQHZhbHVl
OiB0aGUgI0pTQ0Jvb2xlYW4gY29udGFpbmluZyB0aGUgdmFsdWUKKyAqCisgKiBSZXRyaWV2ZXMg
dGhlIGJvb2xlYW4gdmFsdWUgZnJvbSAjSlNDQm9vbGVhbgorICoKKyAqIFJldHVybnM6ICNnYm9v
bGVhbgorICovCitnYm9vbGVhbiBqc2NfYm9vbGVhbl9nZXRfdmFsdWUoSlNDQm9vbGVhbiogYm9v
bGVhbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQk9PTEVBTihib29sZWFu
KSwgRkFMU0UpOworCisgICAgSlNDQ29udGV4dCogY29udGV4dCA9IGpzY1ZhbHVlR2V0Q29udGV4
dChKU0NfVkFMVUUoYm9vbGVhbikpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oanNj
Q29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ19WQUxV
RShib29sZWFuKSkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0Jvb2xlYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29s
ZWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2IzOWM1YTk0NzM0ODVlODZjOGJkYTE2ZDJkZmQxMDEwNDllMzJh
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NC
b29sZWFuLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TD
qnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IEpTQ0Jvb2xlYW5faAorI2RlZmluZSBKU0NCb29sZWFuX2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFs
dWUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX0JPT0xFQU4gICAgICAg
ICAgICAoanNjX2Jvb2xlYW5fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0JPT0xFQU4ob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfQk9P
TEVBTiwgSlNDQm9vbGVhbikpCisjZGVmaW5lIEpTQ19JU19CT09MRUFOKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX0JPT0xFQU4pKQorI2Rl
ZmluZSBKU0NfQk9PTEVBTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBKU0NfVFlQRV9CT09MRUFOLCBKU0NCb29sZWFuQ2xhc3MpKQorI2RlZmluZSBK
U0NfSVNfQk9PTEVBTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBKU0NfVFlQRV9CT09MRUFOKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Jvb2xlYW4gICAg
ICBKU0NCb29sZWFuOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Jvb2xlYW5DbGFzcyBKU0NCb29sZWFu
Q2xhc3M7CisKK3N0cnVjdCBfSlNDQm9vbGVhbiB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsK
Kworc3RydWN0IF9KU0NCb29sZWFuQ2xhc3MgeworICAgIEpTQ1ZhbHVlQ2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworR1R5cGUKK2pzY19ib29sZWFuX2dldF90eXBlICAodm9pZCk7CisKK0pTQ1Zh
bHVlICoKK2pzY19ib29sZWFuX25ldyAgICAgICAoSlNDQ29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgdmFsdWUpOworCitnYm9vbGVhbgoranNjX2Jv
b2xlYW5fZ2V0X3ZhbHVlIChKU0NCb29sZWFuICpib29sZWFuKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQm9v
bGVhblByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NCb29sZWFu
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3YWUwMDQxNTQ3YmU5MGMzYTY4NmM5NDM2YjQ3MzAxZDdl
NDI1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQm9vbGVhblByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNv
bT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQm9vbGVhbi5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKworSlNDVmFsdWUqIGpzY0Jvb2xlYW5DcmVhdGUo
SlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2YzVmZjA0MzliMDhlZmY2Njc3YWM1ZDhl
Y2E2MGFmMmYwNmU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2Ft
aWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKwor
I2luY2x1ZGUgIkpTQ0Jvb2xlYW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZh
dGUuaCIKKyNpbmNsdWRlICJKU0NOdW1iZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ1N0cmluZ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NVbmRlZmlu
ZWRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVBy
aXZhdGUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisKKy8qKgorICogU0VDVElPTjogSlNDQ29udGV4dAorICogQFNo
b3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0Q29yZSBleGVjdXRpb24gY29udGV4dAorICogQFRp
dGxlOiBKU0NDb250ZXh0CisgKgorICogQSBKU0NDb250ZXh0IGlzIHRoZSBjZW50cmFsIGNsYXNz
IG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBBUEkuIEl0IGlzCisgKiByZXNwb25zaWJsZSBmb3IgZXZh
bHVhdGlvbiBvZiBzY3JpcHRzIGluIHRoZSBleGVjdXRpb24gY29udGV4dCwKKyAqIHNldHRpbmcg
YW5kIGdldHRpbmcgdmFsdWVzIGZyb20gdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCB0byBtYWtl
CisgKiBuYXRpdmUgb2JqZWN0cywgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGFjY2Vzc2libGUgdG8g
SmF2YVNjcmlwdC4KKyAqCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRl
IHsKKyAgICBKU1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRSZWY+IGNvbnRleHQ7Cit9IEpTQ0Nv
bnRleHRQcml2YXRlOworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ29udGV4dCwganNjX2NvbnRl
eHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVhUKG9iamVjdCkpOwor
CisgICAgSlNDQ29udGV4dCogY29udGV4dCA9IEpTQ19DT05URVhUKG9iamVjdCk7CisgICAgY29u
dGV4dC0+cHJpdi0+Y29udGV4dCA9IEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4oQWRv
cHQsIEpTR2xvYmFsQ29udGV4dENyZWF0ZShudWxscHRyKSk7CisKKyAgICBHX09CSkVDVF9DTEFT
Uyhqc2NfY29udGV4dF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCBqc2NfY29udGV4dF9jbGFzc19pbml0KEpTQ0NvbnRleHRDbGFzcyoga2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25zdHJ1Y3Rl
ZDsKK30KKworSlNHbG9iYWxDb250ZXh0UmVmIGpzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRFVChjb250ZXh0KSk7CisK
KyAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKTsKK30KKworLyoqCisgKiBq
c2NfY29udGV4dF9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlNDQ29udGV4dCBlbnZpcm9u
bWVudCB0byBleGVjdXRlIEphdmFTY3JpcHQKKyAqIGNvZGUuCisgKgorICogUmV0dXJuczogVGhl
IG5ld2x5IGNyZWF0ZWQgI0pTQ0NvbnRleHQgb2JqZWN0CisgKi8KK0pTQ0NvbnRleHQqIGpzY19j
b250ZXh0X25ldygpCit7CisgICAgcmV0dXJuIEpTQ19DT05URVhUKGdfb2JqZWN0X25ldyhKU0Nf
VFlQRV9DT05URVhULCBudWxscHRyKSk7Cit9CisKK3N0YXRpYyBKU0NWYWx1ZSoganNWYWx1ZVRv
SlNDVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAg
IEFTU0VSVChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgQVNTRVJUKGpzVmFsdWUpOwor
CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworCisgICAgaWYg
KEpTVmFsdWVJc1N0cmluZyhwcml2LT5jb250ZXh0LmdldCgpLCBqc1ZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGpzY1N0cmluZ0NyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKTsKKworICAgIGlmIChKU1Zh
bHVlSXNCb29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIGpzVmFsdWUpKQorICAgICAgICByZXR1
cm4ganNjQm9vbGVhbkNyZWF0ZShjb250ZXh0LCBqc1ZhbHVlKTsKKworICAgIGlmIChKU1ZhbHVl
SXNOdW1iZXIocHJpdi0+Y29udGV4dC5nZXQoKSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBq
c2NOdW1iZXJDcmVhdGUoY29udGV4dCwganNWYWx1ZSk7CisKKyAgICBpZiAoSlNWYWx1ZUlzVW5k
ZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4ganNj
VW5kZWZpbmVkQ3JlYXRlKGNvbnRleHQsIGpzVmFsdWUpOworCisgICAgaWYgKEpTVmFsdWVJc051
bGwocHJpdi0+Y29udGV4dC5nZXQoKSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworLyoqCisgKiBqc2NfY29udGV4dF9nZXRfdmFsdWU6CisgKiBAY29udGV4dDogdGhlICNKU0ND
b250ZXh0IHRoYXQgdGhlIHZhbHVlIHdpbGwgYmUgcmV0cmlldmVkIGZyb20KKyAqIEBuYW1lOiB0
aGUgbmFtZSBvZiB0aGUgZ2xvYmFsIG9iamVjdCBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgcmV0cmll
dmVkCisgKgorICogUmV0cmlldmVzIHByb3BlcnRpZXMgZnJvbSB0aGUgSmF2YVNjcmlwdCBnbG9i
YWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAorICogdGhlICNKU0NDb250ZXh0LiBWYWx1ZXMgYXJl
IHJlcHJlc2VudGVkIGJ5IHN1YnR5cGVzIG9mIEpTQ1ZhbHVlLgorICoKKyAqIFJldHVybnM6IEEg
I0pTQ1ZhbHVlIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0
eQorICovCitKU0NWYWx1ZSoganNjX2NvbnRleHRfZ2V0X3ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5h
bWUsIG51bGxwdHIpOworCisgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0
R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eShjb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpLCBnbG9iYWxPYmplY3QsIHN0ck5hbWUu
Z2V0KCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzVmFsdWVUb0pTQ1ZhbHVlKGNvbnRleHQs
IGpzVmFsdWUpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X3NldF92YWx1ZToKKyAqIEBjb250
ZXh0OiB0aGUgI0pTQ0NvbnRleHQgd2hlcmUgdGhlIHZhbHVlIHdpbGwgYmUgc2V0CisgKiBAbmFt
ZTogdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBvYmplY3QgcHJvcGVydHkgdGhhdCB3aWxsIGJlIHNl
dAorICogQHZhbHVlOiB0aGUgdmFsdWUKKyAqCisgKiBTZXRzIHByb3BlcnRpZXMgaW4gdGhlIEph
dmFTY3JpcHQgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSAjSlNDQ29udGV4
dC4gVmFsdWVzIGFyZSByZXByZXNlbnRlZCBieSBzdWJ0eXBlcyBvZiBKU0NWYWx1ZS4KKyAqLwor
dm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgZ2No
YXIqIG5hbWUsIEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19J
U19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisKKyAgICBKU0NDb250ZXh0UHJp
dmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkpOworICAg
IEpTVmFsdWVSZWYganNWYWx1ZSA9IGpzY1ZhbHVlR2V0SlNWYWx1ZSh2YWx1ZSk7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0ck5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KHByaXYtPmNvbnRleHQu
Z2V0KCksIG9iamVjdCwgc3RyTmFtZS5nZXQoKSwganNWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lLCBudWxscHRyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5OTYzZWE4YjM4NmFhOWI4YmMwMzJkZGY0NDM1ZTA3Njhh
NDhlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
RXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBKU0NDb250ZXh0X2gKKyNkZWZpbmUgSlNDQ29udGV4dF9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgSlNDX1RZUEVfQ09OVEVYVCAgICAgICAgICAgIChqc2NfY29udGV4dF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBKU0NfQ09OVEVYVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0KSkKKyNkZWZp
bmUgSlNDX0lTX0NPTlRFWFQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgSlNDX1RZUEVfQ09OVEVYVCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0NMQVNTKGNs
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRF
WFQsIEpTQ0NvbnRleHRDbGFzcykpCisjZGVmaW5lIEpTQ19JU19DT05URVhUX0NMQVNTKGNsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQpKQor
Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dCAgICAgICAgSlNDQ29udGV4dDsKK3R5cGVkZWYg
c3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgICBKU0NDb250ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfSlNDQ29udGV4dFByaXZhdGUgSlNDQ29udGV4dFByaXZhdGU7CisKK3N0cnVjdCBfSlNDQ29u
dGV4dCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJp
djsKK307CisKK3N0cnVjdCBfSlNDQ29udGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAodm9pZCk7CisK
K0pTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfbmV3ICAgICAgICh2b2lkKTsKKworSlNDVmFsdWUg
KgoranNjX2NvbnRleHRfZ2V0X3ZhbHVlIChKU0NDb250ZXh0ICAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUpOworCit2b2lkCitqc2NfY29udGV4dF9z
ZXRfdmFsdWUgKEpTQ0NvbnRleHQgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgKnZh
bHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMTZlMmExNDdj
OTM5NGZhYjIzZTk5ZWUzMDdlYzViMzk5ZTliYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaApAQCAtMCwwICsxLDI1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlv
IEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlND
Q29udGV4dC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorCitK
U0dsb2JhbENvbnRleHRSZWYganNjQ29udGV4dEdldEpTQ29udGV4dChKU0NDb250ZXh0Kik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5ZjA1ZDEzNGIyY2QwNDRhY2JmYmEwMWYzYmRmN2VkYWQ3NTBhMmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmNwcApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFBy
b2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNDTnVtYmVyLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXRoQ29tbW9uLmg+CisKKy8q
KgorICogQFRpdGxlOiBKU0NOdW1iZXIKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1ZhbHVl
IHN1YnR5cGUgdG8gcmVwcmVzZW50IG51bWVyaWMgdmFsdWVzCisgKgorICogSlNDTnVtYmVyIGlz
IHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBudW1lcmljIHZhbHVlcyBpbnNpZGUKKyAqIEph
dmFTY3JpcHRDb3JlLgorICoKKyAqLworCitHX0RFRklORV9UWVBFKEpTQ051bWJlciwganNjX251
bWJlciwgSlNDX1RZUEVfVkFMVUUpCisKK3N0YXRpYyB2b2lkIGpzY19udW1iZXJfY2xhc3NfaW5p
dChKU0NOdW1iZXJDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkIGpzY19udW1iZXJfaW5pdChK
U0NOdW1iZXIqKQoreworfQorCitKU0NWYWx1ZSoganNjTnVtYmVyQ3JlYXRlKEpTQ0NvbnRleHQq
IGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSkKK3sKKyAgICBBU1NFUlQoSlNDX0lTX0NPTlRF
WFQoY29udGV4dCkpOworICAgIEFTU0VSVChKU1ZhbHVlSXNOdW1iZXIoanNWYWx1ZSkpOworCisg
ICAgSlNDVmFsdWUqIG51bWJlciA9IEpTQ19WQUxVRShnX29iamVjdF9uZXcoSlNDX1RZUEVfTlVN
QkVSLCAiY29udGV4dCIsIGNvbnRleHQsIG51bGxwdHIpKTsKKyAgICBqc2NWYWx1ZVNldEpTVmFs
dWUobnVtYmVyLCBqc1ZhbHVlKTsKKworICAgIHJldHVybiBudW1iZXI7Cit9CisKKy8qKgorICog
anNjX251bWJlcl9uZXdfZG91YmxlOgorICogQGNvbnRleHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0
IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEB2YWx1ZTogVGhlIGRvdWJsZSB2YWx1ZSB0aGF0
IHRoZSAjSlNDTnVtYmVyIHdpbGwgcmVwcmVzZW50CisgKgorICogQ3JlYXRlcyBhIG5ldyAjSlND
TnVtYmVyIHdpdGggQHZhbHVlIGFzIHRoZSB2YWx1ZQorICoKKyAqIFJldHVybnM6IFRoZSBuZXds
eSBjcmVhdGVkICNKU0NOdW1iZXIgb2JqZWN0CisgKi8KK0pTQ1ZhbHVlKiBqc2NfbnVtYmVyX25l
d19kb3VibGUoSlNDQ29udGV4dCogY29udGV4dCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAg
ICByZXR1cm4ganNjTnVtYmVyQ3JlYXRlKGNvbnRleHQsIEpTVmFsdWVNYWtlTnVtYmVyKGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIHZhbHVlKSk7Cit9CisKKy8qKgorICoganNjX251
bWJlcl9uZXdfaW50MzI6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBj
b250YWluIHRoZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgaW50MzIgdmFsdWUgdGhhdCB0aGUgI0pT
Q051bWJlciB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pTQ051bWJlciB3
aXRoIEB2YWx1ZSBhcyB0aGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3bHkgY3JlYXRl
ZCAjSlNDTnVtYmVyIG9iamVjdAorICovCitKU0NWYWx1ZSoganNjX251bWJlcl9uZXdfaW50MzIo
SlNDQ29udGV4dCogY29udGV4dCwgZ2ludDMyIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBq
c2NOdW1iZXJDcmVhdGUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdW1iZXIoanNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSwgdmFsdWUpKTsKK30KKworLyoqCisgKiBqc2NfbnVtYmVyX25ld191
aW50MzI6CisgKiBAY29udGV4dDogVGhlICNKU0NDb250ZXh0IHRoYXQgd2lsbCBjb250YWluIHRo
ZSB2YWx1ZQorICogQHZhbHVlOiBUaGUgdWludDMyIHZhbHVlIHRoYXQgdGhlICNKU0NOdW1iZXIg
d2lsbCByZXByZXNlbnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNKU0NOdW1iZXIgd2l0aCBAdmFs
dWUgYXMgdGhlIHZhbHVlCisgKgorICogUmV0dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ051
bWJlciBvYmplY3QKKyAqLworSlNDVmFsdWUqIGpzY19udW1iZXJfbmV3X3VpbnQzMihKU0NDb250
ZXh0KiBjb250ZXh0LCBndWludDMyIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NOdW1i
ZXJDcmVhdGUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdW1iZXIoanNjQ29udGV4dEdldEpTQ29udGV4
dChjb250ZXh0KSwgdmFsdWUpKTsKK30KKworc3RhdGljIGdkb3VibGUganNjTnVtYmVyR2V0VmFs
dWUoSlNDTnVtYmVyKiBudW1iZXIpCit7CisgICAgQVNTRVJUKEpTQ19JU19OVU1CRVIobnVtYmVy
KSk7CisKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjVmFsdWVHZXRDb250ZXh0KEpTQ19W
QUxVRShudW1iZXIpKTsKKworICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoanNjQ29udGV4dEdl
dEpTQ29udGV4dChjb250ZXh0KSwganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ19WQUxVRShudW1iZXIp
KSwgbnVsbHB0cik7Cit9CisKKy8qKgorICoganNjX251bWJlcl9nZXRfdmFsdWVfYXNfZG91Ymxl
OgorICogQHZhbHVlOiB0aGUgI0pTQ051bWJlciBjb250YWluaW5nIHRoZSB2YWx1ZQorICoKKyAq
IFJldHJpZXZlcyB0aGUgbnVtZXJpYyAoZG91YmxlKSB2YWx1ZSBmcm9tICNKU0NOdW1iZXIKKyAq
CisgKiBSZXR1cm5zOiAjZ2RvdWJsZQorICovCitnZG91YmxlIGpzY19udW1iZXJfZ2V0X3ZhbHVl
X2FzX2RvdWJsZShKU0NOdW1iZXIqIG51bWJlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfTlVNQkVSKG51bWJlciksIDApOworCisgICAgcmV0dXJuIGpzY051bWJlckdldFZh
bHVlKG51bWJlcik7Cit9CisKKy8qKgorICoganNjX251bWJlcl9nZXRfdmFsdWVfYXNfdWludDMy
OgorICogQHZhbHVlOiB0aGUgI0pTQ051bWJlciBjb250YWluaW5nIHRoZSB2YWx1ZQorICoKKyAq
IFJldHJpZXZlcyB0aGUgbnVtZXJpYyAodW5zaWduZWQgaW50KSB2YWx1ZSBmcm9tICNKU0NOdW1i
ZXIKKyAqCisgKiBSZXR1cm5zOiAjZ3VpbnQzMgorICovCitndWludDMyIGpzY19udW1iZXJfZ2V0
X3ZhbHVlX2FzX3VpbnQzMihKU0NOdW1iZXIqIG51bWJlcikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChKU0NfSVNfTlVNQkVSKG51bWJlciksIDApOworCisgICAgcmV0dXJuIEpTQzo6dG9V
SW50MzIoanNjTnVtYmVyR2V0VmFsdWUobnVtYmVyKSk7Cit9CisKKy8qKgorICoganNjX251bWJl
cl9nZXRfdmFsdWVfYXNfaW50MzI6CisgKiBAdmFsdWU6IHRoZSAjSlNDTnVtYmVyIGNvbnRhaW5p
bmcgdGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBudW1lcmljIChpbnQpIHZhbHVlIGZy
b20gI0pTQ051bWJlcgorICoKKyAqIFJldHVybnM6ICNnaW50MzIKKyAqLworZ2ludDMyIGpzY19u
dW1iZXJfZ2V0X3ZhbHVlX2FzX2ludDMyKEpTQ051bWJlciogbnVtYmVyKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19OVU1CRVIobnVtYmVyKSwgMCk7CisKKyAgICByZXR1cm4g
SlNDOjp0b0ludDMyKGpzY051bWJlckdldFZhbHVlKG51bWJlcikpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkMzU3NDJmM2Y1Nzhi
YmVkYTNhNGVmYjkzODcyOTA5MjJiM2E4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDTnVtYmVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRl
dmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEpTQ051bWJlcl9oCisjZGVmaW5lIEpTQ051bWJlcl9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+
CisjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBK
U0NfVFlQRV9OVU1CRVIgICAgICAgICAgICAoanNjX251bWJlcl9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBKU0NfTlVNQkVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyKSkKKyNkZWZpbmUgSlNDX0lTX05VTUJF
UihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQ
RV9OVU1CRVIpKQorI2RlZmluZSBKU0NfTlVNQkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX05VTUJFUiwgSlNDTnVtYmVyQ2xhc3Mp
KQorI2RlZmluZSBKU0NfSVNfTlVNQkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX05VTUJFUikpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NO
dW1iZXIgICAgICBKU0NOdW1iZXI7Cit0eXBlZGVmIHN0cnVjdCBfSlNDTnVtYmVyQ2xhc3MgSlND
TnVtYmVyQ2xhc3M7CisKK3N0cnVjdCBfSlNDTnVtYmVyIHsKKyAgICBKU0NWYWx1ZSBwYXJlbnQ7
Cit9OworCitzdHJ1Y3QgX0pTQ051bWJlckNsYXNzIHsKKyAgICBKU0NWYWx1ZUNsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK0dUeXBlCitqc2NfbnVtYmVyX2dldF90eXBlICAgKHZvaWQpOworCitK
U0NWYWx1ZSAqCitqc2NfbnVtYmVyX25ld19kb3VibGUgKEpTQ0NvbnRleHQgICAgICAgICAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAgICB2YWx1ZSk7
CisKK0pTQ1ZhbHVlICoKK2pzY19udW1iZXJfbmV3X2ludDMyICAoSlNDQ29udGV4dCAgICAgICAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBnaW50MzIgICAgICAgICAgICAgIHZh
bHVlKTsKKworSlNDVmFsdWUgKgoranNjX251bWJlcl9uZXdfdWludDMyIChKU0NDb250ZXh0ICAg
ICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICAgICAg
ICAgdmFsdWUpOworCitnZG91YmxlCitqc2NfbnVtYmVyX2dldF92YWx1ZV9hc19kb3VibGUgKEpT
Q051bWJlciAqbnVtYmVyKTsKKworZ3VpbnQzMgoranNjX251bWJlcl9nZXRfdmFsdWVfYXNfdWlu
dDMyIChKU0NOdW1iZXIgKm51bWJlcik7CisKK2dpbnQzMgoranNjX251bWJlcl9nZXRfdmFsdWVf
YXNfaW50MzIgIChKU0NOdW1iZXIgKm51bWJlcik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ051bWJlclByaXZh
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXJQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTg0ZWIyOGRjZTBhOGZmNWNlNWE5NWM1YzFiNjBlODViMGFiYTQ2MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NOdW1iZXJQ
cml2YXRlLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TD
qnbDo28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkpTQ051bWJlci5oIgorCitKU0NWYWx1ZSoganNjTnVtYmVyQ3Jl
YXRlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwYjU0MDMzNTQzZWQ1ZWIzMzczZjZlODc4
MjJjMjE0YjcyMDEyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNkZWZpbmUgV0VCS0lUX0RFRklORV9UWVBFKFR5cGVOYW1l
LCB0eXBlX25hbWUsIFRZUEVfUEFSRU5UKSBfV0VCS0lUX0RFRklORV9UWVBFX0VYVEVOREVEKFR5
cGVOYW1lLCB0eXBlX25hbWUsIFRZUEVfUEFSRU5ULCAwLCB7IH0pCisjZGVmaW5lIFdFQktJVF9E
RUZJTkVfQUJTVFJBQ1RfVFlQRShUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCkgX1dF
QktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRChUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVO
VCwgR19UWVBFX0ZMQUdfQUJTVFJBQ1QsIHsgfSkKKyNkZWZpbmUgV0VCS0lUX0RFRklORV9UWVBF
X1dJVEhfQ09ERShUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCwgQ29kZSkgX1dFQktJ
VF9ERUZJTkVfVFlQRV9FWFRFTkRFRF9CRUdJTihUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BB
UkVOVCwgMCkge0NvZGU7fSBfV0VCS0lUX0RFRklORV9UWVBFX0VYVEVOREVEX0VORCgpCisKKyNk
ZWZpbmUgX1dFQktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRChUeXBlTmFtZSwgdHlwZV9uYW1lLCBU
WVBFX1BBUkVOVCwgZmxhZ3MsIENvZGUpIF9XRUJLSVRfREVGSU5FX1RZUEVfRVhURU5ERURfQkVH
SU4oVHlwZU5hbWUsIHR5cGVfbmFtZSwgVFlQRV9QQVJFTlQsIGZsYWdzKSB7Q29kZTt9IF9XRUJL
SVRfREVGSU5FX1RZUEVfRVhURU5ERURfRU5EKCkKKyNkZWZpbmUgX1dFQktJVF9ERUZJTkVfVFlQ
RV9FWFRFTkRFRF9CRUdJTihUeXBlTmFtZSwgdHlwZV9uYW1lLCBUWVBFX1BBUkVOVCwgZmxhZ3Mp
IFwKK1wKK3N0YXRpYyB2b2lkIHR5cGVfbmFtZSMjX2NsYXNzX2luaXQoVHlwZU5hbWUjI0NsYXNz
KiBrbGFzcyk7IFwKK3N0YXRpYyBncG9pbnRlciB0eXBlX25hbWUjI19wYXJlbnRfY2xhc3MgPSAw
OyBcCitzdGF0aWMgdm9pZCB0eXBlX25hbWUjI19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpIFwK
K3sgXAorICAgIFR5cGVOYW1lKiBzZWxmID0gKFR5cGVOYW1lKilvYmplY3Q7IFwKKyAgICBzZWxm
LT5wcml2LT5+VHlwZU5hbWUjI1ByaXZhdGUoKTsgXAorICAgIEdfT0JKRUNUX0NMQVNTKHR5cGVf
bmFtZSMjX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7IFwKK30gXAorXAorc3RhdGlj
IHZvaWQgdHlwZV9uYW1lIyNfY2xhc3NfaW50ZXJuX2luaXQoZ3BvaW50ZXIga2xhc3MpIFwKK3sg
XAorICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OyBcCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoVHlwZU5hbWUj
I1ByaXZhdGUpKTsgXAorICAgIHR5cGVfbmFtZSMjX3BhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFz
c19wZWVrX3BhcmVudChrbGFzcyk7IFwKKyAgICB0eXBlX25hbWUjI19jbGFzc19pbml0KChUeXBl
TmFtZSMjQ2xhc3MqKWtsYXNzKTsgXAorICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB0eXBl
X25hbWUjI19maW5hbGl6ZTsgXAorfSBcCitcCitzdGF0aWMgdm9pZCB0eXBlX25hbWUjI19pbml0
KFR5cGVOYW1lKiBzZWxmKSBcCit7IFwKKyAgICBUeXBlTmFtZSMjUHJpdmF0ZSogcHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzZWxmLCB0eXBlX25hbWUjI19nZXRfdHlwZSgpLCBU
eXBlTmFtZSMjUHJpdmF0ZSk7IFwKKyAgICBzZWxmLT5wcml2ID0gcHJpdjsgXAorICAgIG5ldyAo
cHJpdikgVHlwZU5hbWUjI1ByaXZhdGUoKTsgXAorfVwKK0dUeXBlIHR5cGVfbmFtZSMjX2dldF90
eXBlKHZvaWQpIFwKK3sgXAorICAgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnX2RlZmluZV90eXBl
X2lkX192b2xhdGlsZSA9IDA7IFwKKyAgICBpZiAoZ19vbmNlX2luaXRfZW50ZXIoJmdfZGVmaW5l
X3R5cGVfaWRfX3ZvbGF0aWxlKSkgeyBcCisgICAgICAgIEdUeXBlIGdfZGVmaW5lX3R5cGVfaWQg
PSBcCisgICAgICAgICAgICBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljX3NpbXBsZSggXAorICAgICAg
ICAgICAgICAgIFRZUEVfUEFSRU5ULCBcCisgICAgICAgICAgICAgICAgZ19pbnRlcm5fc3RhdGlj
X3N0cmluZygjVHlwZU5hbWUpLCBcCisgICAgICAgICAgICAgICAgc2l6ZW9mKFR5cGVOYW1lIyND
bGFzcyksIFwKKyAgICAgICAgICAgICAgICAoR0NsYXNzSW5pdEZ1bmMpdHlwZV9uYW1lIyNfY2xh
c3NfaW50ZXJuX2luaXQsIFwKKyAgICAgICAgICAgICAgICBzaXplb2YoVHlwZU5hbWUpLCBcCisg
ICAgICAgICAgICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKXR5cGVfbmFtZSMjX2luaXQsIFwKKyAg
ICAgICAgICAgICAgICAoR1R5cGVGbGFncylmbGFncyk7IFwKKyAgICAgICAgLy8gQ3VzdG9tIGNv
ZGUgZm9sbG93cy4KKyNkZWZpbmUgX1dFQktJVF9ERUZJTkVfVFlQRV9FWFRFTkRFRF9FTkQoKSBc
CisgICAgICAgIGdfb25jZV9pbml0X2xlYXZlKCZnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSwg
Z19kZWZpbmVfdHlwZV9pZCk7IFwKKyAgICB9IFwKKyAgICByZXR1cm4gZ19kZWZpbmVfdHlwZV9p
ZF9fdm9sYXRpbGU7IFwKK30gLy8gQ2xvc2VzIHR5cGVfbmFtZSMjX2dldF90eXBlKCkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1
ZDM4ZmY2OTJkYTc1N2I5MGVlNjdjODRmZmU1NGJhYTkwMjk3N2MKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nLmNwcApAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PD
s3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNDU3RyaW5nLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKy8qKgorICogQFRpdGxlOiBKU0NT
dHJpbmcKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogI0pTQ1ZhbHVlIHN1YnR5cGUgdG8gcmVwcmVz
ZW50IHN0cmluZ3MKKyAqCisgKiBKU0NTdHJpbmcgaXMgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVz
ZW50IHN0cmluZyB2YWx1ZXMgaW5zaWRlCisgKiBKYXZhU2NyaXB0Q29yZS4KKyAqCisgKi8KKwor
R19ERUZJTkVfVFlQRShKU0NTdHJpbmcsIGpzY19zdHJpbmcsIEpTQ19UWVBFX1ZBTFVFKQorCitz
dGF0aWMgdm9pZCBqc2Nfc3RyaW5nX2NsYXNzX2luaXQoSlNDU3RyaW5nQ2xhc3MqKQoreworfQor
CitzdGF0aWMgdm9pZCBqc2Nfc3RyaW5nX2luaXQoSlNDU3RyaW5nKikKK3sKK30KKworSlNDVmFs
dWUqIGpzY1N0cmluZ0NyZWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFs
dWUpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBBU1NFUlQo
SlNWYWx1ZUlzU3RyaW5nKGpzVmFsdWUpKTsKKworICAgIEpTQ1ZhbHVlKiBzdHJpbmcgPSBKU0Nf
VkFMVUUoZ19vYmplY3RfbmV3KEpTQ19UWVBFX1NUUklORywgImNvbnRleHQiLCBjb250ZXh0LCBu
dWxscHRyKSk7CisgICAganNjVmFsdWVTZXRKU1ZhbHVlKHN0cmluZywganNWYWx1ZSk7CisKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCisvKioKKyAqIGpzY19zdHJpbmdfbmV3OgorICogQGNvbnRl
eHQ6IFRoZSAjSlNDQ29udGV4dCB0aGF0IHdpbGwgY29udGFpbiB0aGUgdmFsdWUKKyAqIEBzdHI6
IFRoZSBzdHJpbmcgdGhhdCB0aGUgI0pTQ1N0cmluZyB3aWxsIHJlcHJlc2VudAorICoKKyAqIENy
ZWF0ZXMgYSBuZXcgI0pTQ1N0cmluZyB3aXRoIEBzdHIgYXMgdGhlIHZhbHVlCisgKgorICogUmV0
dXJuczogVGhlIG5ld2x5IGNyZWF0ZWQgI0pTQ1N0cmluZyBvYmplY3QKKyAqLworSlNDVmFsdWUq
IGpzY19zdHJpbmdfbmV3KEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBzdHIpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxw
dHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ciwgbnVsbHB0cik7CisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cikpOworICAgIEpTVmFsdWVSZWYganNWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5n
KGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIHZhbHVlLmdldCgpKTsKKworICAgIHJl
dHVybiBqc2NTdHJpbmdDcmVhdGUoY29udGV4dCwganNWYWx1ZSk7Cit9CisKKy8qKgorICoganNj
X3N0cmluZ19nZXRfdmFsdWU6CisgKiBAdmFsdWU6IHRoZSAjSlNDU3RyaW5nIGNvbnRhaW5pbmcg
dGhlIHZhbHVlCisgKgorICogUmV0cmlldmVzIHRoZSBzdHJpbmcgZnJvbSAjSlNDU3RyaW5nCisg
KgorICogUmV0dXJuczogI2djaGFyKiB0aGF0IG11c3QgYmUgZnJlZWQgYnkgdGhlIHVzZXIKKyAq
LworZ2NoYXIqIGpzY19zdHJpbmdfZ2V0X3ZhbHVlKEpTQ1N0cmluZyogc3RyaW5nKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19TVFJJTkcoc3RyaW5nKSwgbnVsbHB0cik7CisK
KyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjVmFsdWVHZXRDb250ZXh0KEpTQ19WQUxVRShz
dHJpbmcpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJWYWx1ZShBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLAorICAg
ICAgICBqc2NWYWx1ZUdldEpTVmFsdWUoSlNDX1ZBTFVFKHN0cmluZykpLCBudWxscHRyKSk7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJW
YWx1ZS5nZXQoKSk7CisgICAgZ2NoYXIqIGJ1ZmYgPSBzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFs
bG9jMChsZW5ndGgpKTsKKworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyVmFsdWUuZ2V0
KCksIGJ1ZmYsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gYnVmZjsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWE3ZTA3ZjAwMzQ5MmI3
MWI0MjRjMGVmOWZlMmZmNjBhNjdkYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ1N0cmluZy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZh
dW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBKU0NTdHJpbmdfaAorI2RlZmluZSBKU0NTdHJpbmdfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgor
I2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlND
X1RZUEVfU1RSSU5HICAgICAgICAgICAgKGpzY19zdHJpbmdfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
SlNDX1NUUklORyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBKU0NfVFlQRV9TVFJJTkcsIEpTQ1N0cmluZykpCisjZGVmaW5lIEpTQ19JU19TVFJJTkco
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVf
U1RSSU5HKSkKKyNkZWZpbmUgSlNDX1NUUklOR19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9TVFJJTkcsIEpTQ1N0cmluZ0NsYXNzKSkK
KyNkZWZpbmUgSlNDX0lTX1NUUklOR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBKU0NfVFlQRV9TVFJJTkcpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDU3Ry
aW5nICAgICAgSlNDU3RyaW5nOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1N0cmluZ0NsYXNzIEpTQ1N0
cmluZ0NsYXNzOworCitzdHJ1Y3QgX0pTQ1N0cmluZyB7CisgICAgSlNDVmFsdWUgcGFyZW50Owor
fTsKKworc3RydWN0IF9KU0NTdHJpbmdDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitHVHlwZQoranNjX3N0cmluZ19nZXRfdHlwZSAgKHZvaWQpOworCitKU0NW
YWx1ZSAqCitqc2Nfc3RyaW5nX25ldyAgICAgICAoSlNDQ29udGV4dCAgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnZhbHVlKTsKKworZ2NoYXIgKgoranNjX3N0
cmluZ19nZXRfdmFsdWUgKEpTQ1N0cmluZyAgICpzdHJpbmcpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NTdHJp
bmdQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDU3RyaW5nUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFjZGFkMzc3YWQyNmMzODcyNmJlNzJlZDkzNDA3YmI4Y2VjNWRh
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
U3RyaW5nUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKworSlNDVmFsdWUqIGpzY1N0
cmluZ0NyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMzgxMzQ0NzI1
ZWMxNjQwMjMzNGY5MWQwNWI5NDRmNjQ2YjYwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkLmNwcApAQCAtMCwwICsxLDcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFt
YXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0NVbmRlZmluZWQuaCIKKworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJl
Zi5oPgorCisvKioKKyAqIEBUaXRsZTogSlNDVW5kZWZpbmVkCisgKiBAU2hvcnRfZGVzY3JpcHRp
b246ICNKU0NWYWx1ZSBzdWJ0eXBlIHRvIHJlcHJlc2VudCB1bmRlZmluZWQgdmFsdWVzCisgKgor
ICogSlNDVW5kZWZpbmVkIGlzIHRoZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCB1bmRlZmluZWQg
dmFsdWVzIGluc2lkZQorICogSmF2YVNjcmlwdENvcmUuCisgKgorICovCisKK0dfREVGSU5FX1RZ
UEUoSlNDVW5kZWZpbmVkLCBqc2NfdW5kZWZpbmVkLCBKU0NfVFlQRV9WQUxVRSkKKworc3RhdGlj
IHZvaWQganNjX3VuZGVmaW5lZF9jbGFzc19pbml0KEpTQ1VuZGVmaW5lZENsYXNzKikKK3sKK30K
Kworc3RhdGljIHZvaWQganNjX3VuZGVmaW5lZF9pbml0KEpTQ1VuZGVmaW5lZCopCit7Cit9CisK
K0pTQ1ZhbHVlKiBqc2NVbmRlZmluZWRDcmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1
ZVJlZiBqc1ZhbHVlKQoreworICAgIEFTU0VSVChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7Cisg
ICAgQVNTRVJUKEpTVmFsdWVJc1VuZGVmaW5lZChqc1ZhbHVlKSk7CisKKyAgICBKU0NWYWx1ZSog
dW5kZWZpbmVkID0gSlNDX1ZBTFVFKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9VTkRFRklORUQsICJj
b250ZXh0IiwgY29udGV4dCwgbnVsbHB0cikpOworICAgIGpzY1ZhbHVlU2V0SlNWYWx1ZSh1bmRl
ZmluZWQsIGpzVmFsdWUpOworCisgICAgcmV0dXJuIHVuZGVmaW5lZDsKK30KKworLyoqCisgKiBq
c2NfdW5kZWZpbmVkX25ldzoKKyAqIEBjb250ZXh0OiBUaGUgI0pTQ0NvbnRleHQgdGhhdCB3aWxs
IGNvbnRhaW4gdGhlIHZhbHVlCisgKiBAdmFsdWU6IFRoZSB1bmRlZmluZWQgdmFsdWUgdGhhdCB0
aGUgI0pTQ1VuZGVmaW5lZCB3aWxsIHJlcHJlc2VudAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0pT
Q1VuZGVmaW5lZCB3aXRoIEB2YWx1ZSBhcyB0aGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zOiBUaGUg
bmV3bHkgY3JlYXRlZCAjSlNDVW5kZWZpbmVkIG9iamVjdAorICovCitKU0NWYWx1ZSoganNjX3Vu
ZGVmaW5lZF9uZXcoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNj
VW5kZWZpbmVkQ3JlYXRlKGNvbnRleHQsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCkpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NVbmRlZmluZWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NVbmRlZmluZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzRjN2ZlYTM5ZDM1M2NlZTRiNjRhMGE5
YWFhMjQxZWI4OWI4MzllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1VuZGVmaW5lZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0ZXZhdW1AZ2Ft
aWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBKU0NVbmRlZmluZWRfaAorI2RlZmluZSBKU0NVbmRlZmluZWRfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgor
I2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlND
X1RZUEVfVU5ERUZJTkVEICAgICAgICAgICAgKGpzY191bmRlZmluZWRfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgSlNDX1VOREVGSU5FRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBKU0NfVFlQRV9VTkRFRklORUQsIEpTQ1VuZGVmaW5lZCkpCisjZGVmaW5l
IEpTQ19JU19VTkRFRklORUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgSlNDX1RZUEVfVU5ERUZJTkVEKSkKKyNkZWZpbmUgSlNDX1VOREVGSU5FRF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9V
TkRFRklORUQsIEpTQ1VuZGVmaW5lZENsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1VOREVGSU5FRF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9V
TkRFRklORUQpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDVW5kZWZpbmVkICAgICAgSlNDVW5kZWZp
bmVkOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1VuZGVmaW5lZENsYXNzIEpTQ1VuZGVmaW5lZENsYXNz
OworCitzdHJ1Y3QgX0pTQ1VuZGVmaW5lZCB7CisgICAgSlNDVmFsdWUgcGFyZW50OworfTsKKwor
c3RydWN0IF9KU0NVbmRlZmluZWRDbGFzcyB7CisgICAgSlNDVmFsdWVDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitHVHlwZQoranNjX3VuZGVmaW5lZF9nZXRfdHlwZSAodm9pZCk7CisKK0pTQ1Zh
bHVlICoKK2pzY191bmRlZmluZWRfbmV3ICAgICAgKEpTQ0NvbnRleHQgKmNvbnRleHQpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NVbmRlZmluZWRQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZWE2ZjJiZmM4NWE2ODgw
MjJjMDg3ZmM5NGQ1ZDcwZGNhZTA2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVW5kZWZpbmVkUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NVbmRl
ZmluZWQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisKKworSlND
VmFsdWUqIGpzY1VuZGVmaW5lZENyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzA3
MjZkN2YwZThkMDU2NTY4YzBhMzlkY2M4M2Q4Y2VlMjU3MzRlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMCwwICsxLDE1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVsIFByb2PDs3Bp
byBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0Jvb2xlYW4uaCIKKyNpbmNsdWRlICJKU0ND
b250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ051bWJlci5oIgorI2luY2x1ZGUgIkpTQ1By
aXZhdGUuaCIKKyNpbmNsdWRlICJKU0NTdHJpbmcuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZh
dGUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworLyoqCisgKiBT
RUNUSU9OOiBKU0NWYWx1ZQorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBCYXNlIGNsYXNzIHJlcHJl
c2VudGluZyBKYXZhU2NyaXB0Q29yZSB2YWx1ZXMKKyAqIEBUaXRsZTogSlNDVmFsdWUKKyAqCisg
KiBKU0NWYWx1ZSBpcyB0aGUgYmFzZSBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCB2YWx1ZXMgaW5z
aWRlCisgKiBKYXZhU2NyaXB0Q29yZS4gQWN0dWFsIHZhbHVlcyBhcmUgc3VidHlwZXMgb2YgdGhp
cyBjbGFzcy4gVGhlCisgKiBjdXJyZW50IHN1YmNsYXNzZXMgYXJlOiAjSlNDU3RyaW5nLCAjSlND
TnVtYmVyIGFuZCAjSlNDQm9vbGVhbi4KKyAqCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1Zh
bHVlUHJpdmF0ZSB7CisgICAgSlNDQ29udGV4dCogY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIHZh
bHVlOworfSBKU0NWYWx1ZVByaXZhdGU7CisKK1dFQktJVF9ERUZJTkVfQUJTVFJBQ1RfVFlQRShK
U0NWYWx1ZSwganNjX3ZhbHVlLCBHX1RZUEVfSU5JVElBTExZX1VOT1dORUQpCisKK2VudW0gewor
ICAgIGtQUk9QXzAsCisKKyAgICBrUFJPUF9DT05URVhULAorfTsKKworc3RhdGljIHZvaWQganNj
VmFsdWVHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBrUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IEpTQ19WQUxVRShvYmplY3QpLT5wcml2LT5jb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjVmFsdWVT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBrUFJPUF9DT05URVhUOiB7CisgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBK
U0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgSlNDX1ZBTFVF
KG9iamVjdCktPnByaXYtPmNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBnX29iamVjdF9hZGRf
d2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHQpLCAoZ3BvaW50ZXIqKSYoSlNDX1ZBTFVFKG9i
amVjdCktPnByaXYtPmNvbnRleHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY1ZhbHVlRGlzcG9z
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gSlNDX1ZB
TFVFKG9iamVjdCktPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y29udGV4dCkgeworICAgICAgICBK
U0NvbnRleHRSZWYganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250
ZXh0KTsKKworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGpzQ29udGV4dCwgcHJpdi0+dmFsdWUp
OworICAgICAgICBwcml2LT52YWx1ZSA9IG51bGxwdHI7CisKKyAgICAgICAgZ19vYmplY3RfcmVt
b3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChwcml2LT5jb250ZXh0KSwgKGdwb2ludGVyKikmcHJp
di0+Y29udGV4dCk7CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgIH0KKwor
ICAgIEdfT0JKRUNUX0NMQVNTKGpzY192YWx1ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY192YWx1ZV9jbGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3Mq
IGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhr
bGFzcyk7CisKKyAgICBvYmpDbGFzcy0+Z2V0X3Byb3BlcnR5ID0ganNjVmFsdWVHZXRQcm9wZXJ0
eTsKKyAgICBvYmpDbGFzcy0+c2V0X3Byb3BlcnR5ID0ganNjVmFsdWVTZXRQcm9wZXJ0eTsKKyAg
ICBvYmpDbGFzcy0+ZGlzcG9zZSA9IGpzY1ZhbHVlRGlzcG9zZTsKKworICAgIC8qKgorICAgICAq
IEpTQ1ZhbHVlOmNvbnRleHQ6CisgICAgICoKKyAgICAgKiBUaGUgI0pTQ0NvbnRleHQgb2YgdGhl
IHZhbHVlLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
Q2xhc3MsCisgICAgICAgIGtQUk9QX0NPTlRFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoImNvbnRleHQiLAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkphdmFT
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQiLAorICAgICAgICAgICAgSlNDX1RZUEVfQ09OVEVYVCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSB8
IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK0pTQ0NvbnRleHQqIGpzY1ZhbHVlR2V0
Q29udGV4dChKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKEpTQ19JU19WQUxVRSh2YWx1
ZSkpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisKKyAgICBy
ZXR1cm4gcHJpdi0+Y29udGV4dDsKK30KKworSlNWYWx1ZVJlZiBqc2NWYWx1ZUdldEpTVmFsdWUo
SlNDVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKwor
ICAgIHJldHVybiB2YWx1ZS0+cHJpdi0+dmFsdWU7Cit9CisKK3ZvaWQganNjVmFsdWVTZXRKU1Zh
bHVlKEpTQ1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIEFTU0VSVChK
U0NfSVNfVkFMVUUodmFsdWUpKTsKKyAgICBBU1NFUlQoanNWYWx1ZSk7CisKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBKU0NvbnRleHRSZWYganNDb250ZXh0
ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0KTsKKworICAgIEFTU0VSVCgh
cHJpdi0+dmFsdWUpOworCisgICAgcHJpdi0+dmFsdWUgPSBqc1ZhbHVlOworICAgIEpTVmFsdWVQ
cm90ZWN0KGpzQ29udGV4dCwganNWYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MDcyM2ZlNjlkZmI1ZjBiNTI5ZDdkNzBkZTY1
NjUwZDMwMGQzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgSlNDVmFsdWVfaAorI2RlZmluZSBKU0NWYWx1ZV9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVkFMVUUgICAg
ICAgICAgICAoanNjX3ZhbHVlX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19WQUxVRShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WQUxV
RSwgSlNDVmFsdWUpKQorI2RlZmluZSBKU0NfSVNfVkFMVUUob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0Nf
VkFMVUVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
SlNDX1RZUEVfVkFMVUUsIEpTQ1ZhbHVlQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfVkFMVUVfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVkFM
VUUpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWUgICAgICAgIEpTQ1ZhbHVlOwordHlwZWRl
ZiBzdHJ1Y3QgX0pTQ1ZhbHVlQ2xhc3MgICBKU0NWYWx1ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ1ZhbHVlUHJpdmF0ZSBKU0NWYWx1ZVByaXZhdGU7CisKKworc3RydWN0IF9KU0NWYWx1ZSB7
CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX0pTQ1ZhbHVlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitHVHlwZQoranNjX3ZhbHVlX2dldF90eXBlICh2b2lkKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmFsdWVQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwNjYxNGRmZjc3MWYzYzUxZWY1MGI1ZWJmNzUzZTU2YzMx
OWMzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NWYWx1ZVByaXZhdGUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEVzdMOqdsOjbyBTYW11ZWwgUHJvY8OzcGlvIEFtYXJhbCA8dGV2YXVtQGdhbWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKK0pTQ0NvbnRleHQqIGpzY1ZhbHVlR2V0Q29udGV4dChKU0NWYWx1ZSopOworCitK
U1ZhbHVlUmVmIGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSopOworCit2b2lkIGpzY1ZhbHVl
U2V0SlNWYWx1ZShKU0NWYWx1ZSosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL2pzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhYWNjMmVjOTkxNWNhMjkwNTU1ZTgxZThjMTllODE1ZjBh
MWY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
anNjLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbD
o28gU2FtdWVsIFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIGpz
Y19oCisjZGVmaW5lIGpzY19oCisKKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgorI2luY2x1
ZGUgPGpzYy9KU0NWYWx1ZS5oPgorI2luY2x1ZGUgPGpzYy9KU0NCb29sZWFuLmg+CisjaW5jbHVk
ZSA8anNjL0pTQ051bWJlci5oPgorI2luY2x1ZGUgPGpzYy9KU0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDxqc2MvSlNDVW5kZWZpbmVkLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDFlOTNkNGJkYTc2MGUzMTVkMTU5MzEwYmZhOGJhN2EwZjMwMTc5M2UuLmZk
MGMxYmMwMjBiMjA5ZThmZjk0MWE1NDAzNTU2NWZmYTcyMDdlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTEzOTUsNyArMTM5NSw3IEBAIGVuZGlmICgpCiAjIEZvcmNl
IHN0YWdpbmcgb2Ygc2hhcmVkIHNjcmlwdHMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZGlyZWN0bHkg
dXNlZCB0byBidWlsZCBKYXZhU2NyaXB0Q29yZS4KIAogYWRkX2N1c3RvbV90YXJnZXQoc3RhZ2VT
aGFyZWRTY3JpcHRzIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTfSkKLWFkZF9kZXBl
bmRlbmNpZXMoSmF2YVNjcmlwdENvcmUgc3RhZ2VTaGFyZWRTY3JpcHRzKQorYWRkX2RlcGVuZGVu
Y2llcyhKYXZhU2NyaXB0Q29yZSBzdGFnZVNoYXJlZFNjcmlwdHMgJHtKYXZhU2NyaXB0Q29yZV9F
WFRSQV9ERVBFTkRFTkNJRVN9KQogCiBpZiAoTVNWQykKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQo
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNDc5MWFiYTQ5YTNj
MjU1NTI5ZTAwMDU4MzBlZmYwMzE3MzMwZWY1NS4uYjNlZDQwZmFkZjFmZDYwYzgxOTNjZjQ5ZTdi
MTQ3NDMzMTc3NzUyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpA
QCAtNDgsMyArNDgsNDcgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVTCiBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKKyMgRGVmaW5pdGlvbnMgZm9yIEphdmFTY3JpcHRD
b3JlIGdsaWIgYmluZGluZ3MKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtGT1JXQVJESU5HX0hFQURF
UlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliKQorIyBhbGxvd3MgaW5jbHVkZXMgbGlrZSAjaW5j
bHVkZSA8anNjL2pzYy5oPiB3aGljaCBzaW11bGF0ZXMgaW5zdGFsbGVkIGhlYWRlcnMuCithZGRf
Y3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2
YVNjcmlwdENvcmUvZ2xpYi9qc2MKKyAgICBERVBFTkRTICR7SkFWQVNDUklQVENPUkVfRElSfS9B
UEkvZ2xpYgorICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQ
SS9nbGliICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYi9qc2MK
KykKKworYWRkX2N1c3RvbV90YXJnZXQoSmF2YVNjcmlwdENvcmVHbGliLWZha2UtYXBpLWhlYWRl
cnMKKyAgICBERVBFTkRTICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUv
Z2xpYi9qc2MKKykKKworc2V0KEphdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFUworICAg
IEphdmFTY3JpcHRDb3JlR2xpYi1mYWtlLWFwaS1oZWFkZXJzCispCisKK2luY2x1ZGVfZGlyZWN0
b3JpZXMoCisgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGli
CispCisKK3NldChKYXZhU2NyaXB0Q29yZUdsaWJfU09VUkNFUworICAgIEFQSS9nbGliL0pTQ0Jv
b2xlYW4uY3BwCisgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NO
dW1iZXIuY3BwCisgICAgQVBJL2dsaWIvSlNDU3RyaW5nLmNwcAorICAgIEFQSS9nbGliL0pTQ1Vu
ZGVmaW5lZC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKykKKworc2V0KEphdmFTY3Jp
cHRDb3JlR2xpYl9IRUFERVJTCisgICAgQVBJL2dsaWIvSlNDQm9vbGVhbi5oCisgICAgQVBJL2ds
aWIvSlNDQ29udGV4dC5oCisgICAgQVBJL2dsaWIvSlNDTnVtYmVyLmgKKyAgICBBUEkvZ2xpYi9K
U0NTdHJpbmcuaAorICAgIEFQSS9nbGliL0pTQ1VuZGVmaW5lZC5oCisgICAgQVBJL2dsaWIvSlND
VmFsdWUuaAorICAgIEFQSS9nbGliL2pzYy5oCispCisKK2xpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKKyAgICAke0phdmFTY3JpcHRDb3JlR2xpYl9TT1VSQ0VTfQorKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhmNjY3ZGI1NDVj
ZDg0YzQ0MmI5ZmFkODUxYTdiNGM0OGY1MjgxYTQuLmJiYTJkMzgxNGY1ZDNmMjRlODBjZmRlZTdl
ODI2MzcxYTM4ODk0ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNi0xMC0yNyAgRXN0w6p2w6NvIFNhbXVlbCBQ
cm9jw7NwaW8gQW1hcmFsICA8dGV2YXVtQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBJbml0
aWFsIGltcGxlbWVudGF0aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzaW1w
bGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIEphdmFTY3JpcHRDb3JlIGJpbmRpbmdzCisg
ICAgICAgIGFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvbiB3ZWJraXQtZ3RrIG1haWxpbmcg
bGlzdCB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93
ZWJraXQtZ3RrLzIwMTYtT2N0b2Jlci8wMDI4MzQuaHRtbAorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBBZGRlZCBydWxlcyB0byBpZ25vcmUgbmV3IEphdmFT
Y3JpcHRDb3JlIGdsaWIKKyAgICAgICAgcHVibGljIGhlYWRlciBmaWxlcyBhbmQgc3RvcHBlZCBj
aGVja2luZyByZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXMKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOiBBZGRlZCBpbnN0cnVjdGlvbnMgdG8gYnVpbGQgVGVz
dEphdmFTY3JpcHRDb3JlR2xpYgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNj
cmlwdENvcmVHbGliL21haW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlR2xpYi9UZXN0SlNDVmFsdWUuaDog
QWRkZWQuCisKIDIwMTYtMTAtMTggIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFdlYlJUQzogW0dUS10gVXBkYXRlIGpoYnVpbGQgZW52aXJvbm1lbnQg
Zm9yIE9wZW5XZWJSVEMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRl
eCBlMmZhNGZkM2E5N2E2YzdmZDJiODc4NDNjMjUyZmMyZWIxOTdkODY3Li5jYzk5Mzk1MmUzODE1
MDE4YjNjNGY0ZDhjOGUyZDQ5ZGFlNmI4YzY5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyLnB5CkBAIC0xNjMsNyArMTYzLDEwIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9
IFsKICAgICAoWyMgYXNzZW1ibGVyIGhhcyBsb3RzIG9mIG9wY29kZXMgdGhhdCB1c2UgdW5kZXJz
Y29yZXMsIHNvCiAgICAgICAjIHdlIGRvbid0IGNoZWNrIGZvciB1bmRlcnNjb3JlcyBpbiB0aGF0
IGRpcmVjdG9yeS4KICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3Jl
JywgJ2Fzc2VtYmxlcicpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlw
dENvcmUnLCAnaml0JywgJ0pJVCcpXSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0ph
dmFTY3JpcHRDb3JlJywgJ2ppdCcsICdKSVQnKSwKKyAgICAgICMgZ2xpYiBiaW5kaW5ncyB1c2Ug
dW5kZXJzY29yZXMgaW4gZnVuY3Rpb24gbmFtZXMsIHNvIHdlCisgICAgICAjIGRvbid0IGNoZWNr
IGZvciB1bmRlcnNjb3JlcyBpbiBnbGliIGJpbmRpbmdzCisgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicpXSwKICAgICAgWyItcmVhZGFi
aWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzIl0pLAogICAgIChbIyBKSVRTdHVicyBoYXMgYW4gdXN1
YWwgc3ludGF4IHdoaWNoIGNhdXNlcyBmYWxzZSBhbGFybXMgZm9yIGEgZmV3IGNoZWNrcy4KICAg
ICAgIG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaml0JywgJ0pJVFN0dWJzLmNwcCcp
XSwKQEAgLTMwNyw3ICszMTAsMTEgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwog
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmpl
Y3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ0RPTScpLAogCiAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgn
KSwKLSAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAn
SW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyld
CisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0lu
amVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1leHRlbnNpb24uaCcpLAor
CisgICAgIyBHT2JqZWN0IGJpbmRpbmdzIGZvciBKYXZhU2NyaXB0Q29yZS4KKyAgICByZS5jb21w
aWxlKHJlLmVzY2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdB
UEknLCAnZ2xpYicpICsgb3MucGF0aC5zZXApICsgcidKU0MoPyEuKlByaXZhdGVcLmgpLipcLmgk
JyksCisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywg
J2dsaWInLCAnanNjLmgnKV0KIAogIyBGaWxlcyB0byBza2lwIHRoYXQgYXJlIG1vcmUgY29tbW9u
IG9yIG9idmlvdXMuCiAjCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
R1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA5
MWEyYzllN2JkMzEzOGNhNTA3OGNmNWE4NGM2NzEwMDlmMzVhMzgwLi5mMzI0Mjk5ODc1ODRjNjNl
ZjY2NDUwMzU1MGIyMjc0NjI2MmJjNWI1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTE1LDYgKzE1LDcgQEAgc2V0KEZvcndhcmRpbmdIZWFkZXJzRm9yVGVzdFdlYktp
dEFQSV9OQU1FIFRlc3RXZWJLaXRBUEktZm9yd2FyZGluZy1oZWFkZXJzKQogaW5jbHVkZV9kaXJl
Y3RvcmllcygKICAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9CiAgICAgJHtGT1JXQVJESU5H
X0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZQorICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJ
Un0vSmF2YVNjcmlwdENvcmUvZ2xpYgogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkv
Qy9zb3VwCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2d0awogICAgICR7V0VC
S0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrCkBAIC0xNDksMyArMTUwLDIyIEBAIGxpc3QoQVBQ
RU5EIFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9n
bGliL0dVbmlxdWVQdHIuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2ds
aWIvV29ya1F1ZXVlR0xpYi5jcHAKICkKKworIyBEZWZpbml0aW9ucyBmb3IgSmF2YVNjcmlwdENv
cmUgZ2xpYiBiaW5kaW5ncworc2V0KFRlc3RKYXZhU2NyaXB0Q29yZUdsaWJfU09VUkNFUworICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvbWFpbi5jcHAK
KyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RK
U0NWYWx1ZS5jcHAKKykKKworYWRkX2V4ZWN1dGFibGUoVGVzdEphdmFTY3JpcHRDb3JlR2xpYgor
ICAgICR7VGVzdEphdmFTY3JpcHRDb3JlR2xpYl9TT1VSQ0VTfQorKQorCit0YXJnZXRfbGlua19s
aWJyYXJpZXMoVGVzdEphdmFTY3JpcHRDb3JlR2xpYgorICAgIGdsaWItMi4wCisgICAgSmF2YVNj
cmlwdENvcmUKKykKKworYWRkX3Rlc3QoVGVzdEphdmFTY3JpcHRDb3JlR2xpYiAke1RFU1RXRUJL
SVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RK
YXZhU2NyaXB0Q29yZUdsaWIpCitzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0SmF2YVNjcmlwdENv
cmVHbGliIFBST1BFUlRJRVMgVElNRU9VVCA2MCkKK3NldF90YXJnZXRfcHJvcGVydGllcyhUZXN0
SmF2YVNjcmlwdENvcmVHbGliIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7
VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L0phdmFTY3JpcGNDb3JlL2ds
aWIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3Jl
L2dsaWIvVGVzdEpTQ1ZhbHVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNj
cmlwdENvcmUvZ2xpYi9UZXN0SlNDVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkMDIyYmNkOGI1ZmM0
ZWViNmFjNGY4NjVhZTdjNjk3Njg4NmI0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQ1ZhbHVlLmNwcApAQCAt
MCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFc3TDqnbDo28gU2FtdWVs
IFByb2PDs3BpbyBBbWFyYWwgPHRldmF1bUBnYW1pbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEpTQ1ZhbHVlLmgiCisKKyNpbmNsdWRlIDxqc2MvSlNDQm9vbGVhbi5o
PgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ051bWJlci5o
PgorI2luY2x1ZGUgPGpzYy9KU0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVW5kZWZpbmVk
Lmg+CisKKy8vIFRlc3RpbmcgYm9vbGVhbiB2YWx1ZXMKK3ZvaWQgdGVzdEpTQ0Jvb2xlYW5MaWZl
Y3ljbGUoKQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBqc2NfY29udGV4dF9uZXcoKTsK
KyAgICBKU0NWYWx1ZSogc2V0VmFsdWUgPSBqc2NfYm9vbGVhbl9uZXcoY29udGV4dCwgdHJ1ZSk7
CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHNldFZhbHVlKSwgKGdw
b2ludGVyKikmc2V0VmFsdWUpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAi
dHJ1ZSIsIHNldFZhbHVlKTsKKworICAgIEpTQ1ZhbHVlKiBnZXRWYWx1ZSA9IGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LCAidHJ1ZSIpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50
ZXIoR19PQkpFQ1QoZ2V0VmFsdWUpLCAoZ3BvaW50ZXIqKSZnZXRWYWx1ZSk7CisKKyAgICBnX2Fz
c2VydChKU0NfSVNfQk9PTEVBTihnZXRWYWx1ZSkpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtf
cG9pbnRlcihHX09CSkVDVChjb250ZXh0KSwgKGdwb2ludGVyKikmY29udGV4dCk7CisgICAgZ19v
YmplY3RfdW5yZWYoY29udGV4dCk7CisKKyAgICBnX2Fzc2VydCghY29udGV4dCk7Cit9CisKK3Zv
aWQgdGVzdEpTQ0Jvb2xlYW5WYWx1ZXMoKQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBq
c2NfY29udGV4dF9uZXcoKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7
CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChjb250ZXh0KSwgKGdwb2lu
dGVyKikmY29udGV4dCk7CisKKyAgICBKU0NWYWx1ZSogdW5kZWYgPSBqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dCwgIm5vbi1leGlzdGFudC1wcm9wZXJ0eSIpOworCisgICAganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGNvbnRleHQsICJ0cnVlIiwgIGpzY19ib29sZWFuX25ldyhjb250ZXh0LCB0
cnVlKSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJmYWxzZSIsIGpzY19i
b29sZWFuX25ldyhjb250ZXh0LCBmYWxzZSkpOworCisgICAgSlNDVmFsdWUqIGJvb2xUcnVlID0g
anNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJ0cnVlIik7CisgICAgSlNDVmFsdWUqIGJv
b2xGYWxzZSA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAiZmFsc2UiKTsKKworICAg
IGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQodW5kZWYpKTsKKyAgICBnX2Fzc2VydChKU0NfSVNf
Qk9PTEVBTihib29sVHJ1ZSkpOworICAgIGdfYXNzZXJ0KEpTQ19JU19CT09MRUFOKGJvb2xGYWxz
ZSkpOworCisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfYm9vbGVhbl9nZXRfdmFsdWUoSlNDX0JPT0xF
QU4oYm9vbFRydWUpKSk7CisgICAgZ19hc3NlcnRfZmFsc2UoanNjX2Jvb2xlYW5fZ2V0X3ZhbHVl
KEpTQ19CT09MRUFOKGJvb2xGYWxzZSkpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRleHQp
OworICAgIGdfYXNzZXJ0KCFjb250ZXh0KTsKK30KKwordm9pZCB0ZXN0SlNDQm9vbGVhbigpCit7
CisgICAgdGVzdEpTQ0Jvb2xlYW5MaWZlY3ljbGUoKTsKKyAgICB0ZXN0SlNDQm9vbGVhblZhbHVl
cygpOworfQorCisvLyBUZXN0aW5nIG51bWVyaWMgdmFsdWVzCitzdGF0aWMgdm9pZCBpbml0Q29u
dGV4dERvdWJsZShKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfYXNzZXJ0KEpTQ19JU19D
T05URVhUKGNvbnRleHQpKTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAi
bnVtYmVyLW4iLCBqc2NfbnVtYmVyX25ld19kb3VibGUoY29udGV4dCwgLTEuMikpOworICAgIGpz
Y19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAibnVtYmVyLXoiLCBqc2NfbnVtYmVyX25ld19k
b3VibGUoY29udGV4dCwgMC4wMDApKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4
dCwgIm51bWJlci1wIiwganNjX251bWJlcl9uZXdfZG91YmxlKGNvbnRleHQsIDMuNykpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0SlNDTnVtYmVyRG91YmxlKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgSlNDVmFsdWUqIG4gPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJl
ci1uIik7CisgICAgSlNDVmFsdWUqIHogPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwg
Im51bWJlci16Iik7CisgICAgSlNDVmFsdWUqIHAgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dCwgIm51bWJlci1wIik7CisKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKG4pKTsKKyAg
ICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHopKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVS
KHApKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobiksIChncG9p
bnRlciopJm4pOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoeiksIChn
cG9pbnRlciopJnopOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocCks
IChncG9pbnRlciopJnApOworCisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX251bWJlcl9nZXRf
dmFsdWVfYXNfZG91YmxlKEpTQ19OVU1CRVIobikpLCA9PSwgLTEuMik7CisgICAgZ19hc3NlcnRf
Y21wZmxvYXQoanNjX251bWJlcl9nZXRfdmFsdWVfYXNfZG91YmxlKEpTQ19OVU1CRVIoeikpLCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX251bWJlcl9nZXRfdmFsdWVfYXNfZG91
YmxlKEpTQ19OVU1CRVIocCkpLCA9PSwgMy43KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbnRl
eHQpOworfQorCitzdGF0aWMgdm9pZCBpbml0Q29udGV4dFVJbnQoSlNDQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBnX2Fzc2VydChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci1uIiwganNjX251bWJlcl9uZXdfdWlu
dDMyKGNvbnRleHQsIC0xKSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJu
dW1iZXIteiIsIGpzY19udW1iZXJfbmV3X3VpbnQzMihjb250ZXh0LCAwKSk7CisgICAganNjX2Nv
bnRleHRfc2V0X3ZhbHVlKGNvbnRleHQsICJudW1iZXItcCIsIGpzY19udW1iZXJfbmV3X3VpbnQz
Mihjb250ZXh0LCAyMTQ3NDgzNjQ4KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NOdW1iZXJV
SW50KEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSlNDVmFsdWUqIG4gPSBqc2NfY29udGV4
dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci1uIik7CisgICAgSlNDVmFsdWUqIHogPSBqc2Nf
Y29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci16Iik7CisgICAgSlNDVmFsdWUqIHAg
PSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci1wIik7CisKKyAgICBnX2Fz
c2VydChKU0NfSVNfTlVNQkVSKG4pKTsKKyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHopKTsK
KyAgICBnX2Fzc2VydChKU0NfSVNfTlVNQkVSKHApKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFr
X3BvaW50ZXIoR19PQkpFQ1QobiksIChncG9pbnRlciopJm4pOworICAgIGdfb2JqZWN0X2FkZF93
ZWFrX3BvaW50ZXIoR19PQkpFQ1QoeiksIChncG9pbnRlciopJnopOworICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocCksIChncG9pbnRlciopJnApOworCisgICAgZ19hc3Nl
cnRfY21wdWludChqc2NfbnVtYmVyX2dldF92YWx1ZV9hc191aW50MzIoSlNDX05VTUJFUihuKSks
ID09LCA0Mjk0OTY3Mjk1KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19udW1iZXJfZ2V0X3Zh
bHVlX2FzX3VpbnQzMihKU0NfTlVNQkVSKHopKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQoanNjX251bWJlcl9nZXRfdmFsdWVfYXNfdWludDMyKEpTQ19OVU1CRVIocCkpLCA9PSwgMjE0
NzQ4MzY0OCk7CisKKyAgICBnX29iamVjdF91bnJlZihjb250ZXh0KTsKK30KKworc3RhdGljIHZv
aWQgaW5pdENvbnRleHRJbnQoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX2Fzc2VydChK
U0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29u
dGV4dCwgIm51bWJlci1uIiwganNjX251bWJlcl9uZXdfaW50MzIoY29udGV4dCwgLTIxNDc0ODM2
NDgpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dCwgIm51bWJlci16IiwganNj
X251bWJlcl9uZXdfaW50MzIoY29udGV4dCwgMCkpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0LCAibnVtYmVyLXAiLCBqc2NfbnVtYmVyX25ld19pbnQzMihjb250ZXh0LCAyMTQ3
NDgzNjQ3KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NOdW1iZXJJbnQoSlNDQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBKU0NWYWx1ZSogbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250
ZXh0LCAibnVtYmVyLW4iKTsKKyAgICBKU0NWYWx1ZSogeiA9IGpzY19jb250ZXh0X2dldF92YWx1
ZShjb250ZXh0LCAibnVtYmVyLXoiKTsKKyAgICBKU0NWYWx1ZSogcCA9IGpzY19jb250ZXh0X2dl
dF92YWx1ZShjb250ZXh0LCAibnVtYmVyLXAiKTsKKworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1C
RVIobikpOworICAgIGdfYXNzZXJ0KEpTQ19JU19OVU1CRVIoeikpOworICAgIGdfYXNzZXJ0KEpT
Q19JU19OVU1CRVIocCkpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVD
VChuKSwgKGdwb2ludGVyKikmbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09C
SkVDVCh6KSwgKGdwb2ludGVyKikmeik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihH
X09CSkVDVChwKSwgKGdwb2ludGVyKikmcCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX251
bWJlcl9nZXRfdmFsdWVfYXNfaW50MzIoSlNDX05VTUJFUihuKSksID09LCAtMjE0NzQ4MzY0OCk7
CisgICAgZ19hc3NlcnRfY21waW50KGpzY19udW1iZXJfZ2V0X3ZhbHVlX2FzX2ludDMyKEpTQ19O
VU1CRVIoeikpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY19udW1iZXJfZ2V0X3Zh
bHVlX2FzX2ludDMyKEpTQ19OVU1CRVIocCkpLCA9PSwgMjE0NzQ4MzY0Nyk7CisKKyAgICBnX29i
amVjdF91bnJlZihjb250ZXh0KTsKK30KKwordm9pZCB0ZXN0SlNDTnVtYmVyKCkKK3sKKyAgICBK
U0NDb250ZXh0KiBjb250ZXh0RG91YmxlID0ganNjX2NvbnRleHRfbmV3KCk7CisgICAgSlNDQ29u
dGV4dCogY29udGV4dFVJbnQgPSBqc2NfY29udGV4dF9uZXcoKTsKKyAgICBKU0NDb250ZXh0KiBj
b250ZXh0SW50ID0ganNjX2NvbnRleHRfbmV3KCk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19w
b2ludGVyKEdfT0JKRUNUKGNvbnRleHREb3VibGUpLCAoZ3BvaW50ZXIqKSZjb250ZXh0RG91Ymxl
KTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHRVSW50KSwg
KGdwb2ludGVyKikmY29udGV4dFVJbnQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIo
R19PQkpFQ1QoY29udGV4dEludCksIChncG9pbnRlciopJmNvbnRleHRJbnQpOworCisgICAgaW5p
dENvbnRleHREb3VibGUoY29udGV4dERvdWJsZSk7CisgICAgdGVzdEpTQ051bWJlckRvdWJsZShj
b250ZXh0RG91YmxlKTsKKyAgICBnX2Fzc2VydCghY29udGV4dERvdWJsZSk7CisKKyAgICBpbml0
Q29udGV4dFVJbnQoY29udGV4dFVJbnQpOworICAgIHRlc3RKU0NOdW1iZXJVSW50KGNvbnRleHRV
SW50KTsKKyAgICBnX2Fzc2VydCghY29udGV4dFVJbnQpOworCisgICAgaW5pdENvbnRleHRJbnQo
Y29udGV4dEludCk7CisgICAgdGVzdEpTQ051bWJlckludChjb250ZXh0SW50KTsKKyAgICBnX2Fz
c2VydCghY29udGV4dEludCk7Cit9CisKKy8vIFRlc3Rpbmcgc3RyaW5nIHZhbHVlcwordm9pZCB0
ZXN0SlNDU3RyaW5nKCkKK3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjX2NvbnRleHRf
bmV3KCk7CisgICAgSlNDVmFsdWUqIHN0cmluZ1ZhbHVlID0ganNjX3N0cmluZ19uZXcoY29udGV4
dCwgInRoZSBzdHJpbmcgdmFsdWUiKTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LCAic3RyaW5nIiwgc3RyaW5nVmFsdWUpOworCisgICAgSlNDVmFsdWUqIG5vbkV4aXN0YW50
ID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJub24tZXhpc3RhbnQiKTsKKyAgICBn
X2Fzc2VydChKU0NfSVNfVU5ERUZJTkVEKG5vbkV4aXN0YW50KSk7CisKKyAgICBKU0NWYWx1ZSog
c3RyaW5nID0ganNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQsICJzdHJpbmciKTsKKyAgICBn
X2Fzc2VydChKU0NfSVNfU1RSSU5HKHN0cmluZykpOworCisgICAgY2hhciogdmFsdWUgPSBqc2Nf
c3RyaW5nX2dldF92YWx1ZShKU0NfU1RSSU5HKHN0cmluZykpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZSwgPT0sICJ0aGUgc3RyaW5nIHZhbHVlIik7CisgICAgZ19mcmVlKHZhbHVlKTsKKwor
ICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4dCksIChncG9pbnRl
ciopJmNvbnRleHQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1Qoc3Ry
aW5nVmFsdWUpLCAoZ3BvaW50ZXIqKSZzdHJpbmdWYWx1ZSk7CisgICAgZ19vYmplY3RfYWRkX3dl
YWtfcG9pbnRlcihHX09CSkVDVChub25FeGlzdGFudCksIChncG9pbnRlciopJm5vbkV4aXN0YW50
KTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHN0cmluZyksIChncG9p
bnRlciopJnN0cmluZyk7CisKKyAgICBnX29iamVjdF91bnJlZihjb250ZXh0KTsKKyAgICBnX2Fz
c2VydCghY29udGV4dCk7Cit9CisKKy8vIFRlc3RpbmcgdW5kZWZpbmVkIHZhbHVlcwordm9pZCB0
ZXN0SlNDVW5kZWZpbmVkKCkKK3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0ganNjX2NvbnRl
eHRfbmV3KCk7CisgICAgSlNDVmFsdWUqIGJvb2xlYW5WYWx1ZSA9IGpzY19ib29sZWFuX25ldyhj
b250ZXh0LCB0cnVlKTsKKyAgICBKU0NWYWx1ZSogdW5kZWZpbmVkVmFsdWUgPSBqc2NfdW5kZWZp
bmVkX25ldyhjb250ZXh0KTsKKworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LCAi
Ym9vbGVhbiIsIGJvb2xlYW5WYWx1ZSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQsICJ1bmRlZmluZWQiLCB1bmRlZmluZWRWYWx1ZSk7CisKKyAgICBKU0NWYWx1ZSogbm9uRXhp
c3RhbnQgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgIm5vbi1leGlzdGFudCIpOwor
ICAgIGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQobm9uRXhpc3RhbnQpKTsKKworICAgIEpTQ1Zh
bHVlKiB1bmRlZmluZWQgPSBqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dCwgInVuZGVmaW5l
ZCIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19VTkRFRklORUQodW5kZWZpbmVkKSk7CisKKyAgICBK
U0NWYWx1ZSogYm9vbGVhbiA9IGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LCAiYm9vbGVh
biIpOworICAgIGdfYXNzZXJ0KEpTQ19JU19CT09MRUFOKGJvb2xlYW4pKTsKKyAgICBnX2Fzc2Vy
dCghSlNDX0lTX1VOREVGSU5FRChib29sZWFuKSk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19w
b2ludGVyKEdfT0JKRUNUKGNvbnRleHQpLCAoZ3BvaW50ZXIqKSZjb250ZXh0KTsKKyAgICBnX29i
amVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGJvb2xlYW5WYWx1ZSksIChncG9pbnRlciop
JmJvb2xlYW5WYWx1ZSk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCh1
bmRlZmluZWRWYWx1ZSksIChncG9pbnRlciopJnVuZGVmaW5lZFZhbHVlKTsKKyAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG5vbkV4aXN0YW50KSwgKGdwb2ludGVyKikmbm9u
RXhpc3RhbnQpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QodW5kZWZp
bmVkKSwgKGdwb2ludGVyKikmdW5kZWZpbmVkKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2lu
dGVyKEdfT0JKRUNUKGJvb2xlYW4pLCAoZ3BvaW50ZXIqKSZib29sZWFuKTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKGNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjb250ZXh0KTsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlND
VmFsdWUuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9U
ZXN0SlNDVmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjRlOGM2NTU3NmUzNzMwYmRkZDQwYWU1OTI5Yjc0
NDBiMTBmMDAxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0NWYWx1ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1hcmFsIDx0
ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK3ZvaWQgdGVzdEpTQ0Jvb2xlYW4oKTsK
K3ZvaWQgdGVzdEpTQ051bWJlcigpOwordm9pZCB0ZXN0SlNDU3RyaW5nKCk7Cit2b2lkIHRlc3RK
U0NVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmUvZ2xpYi9tYWluLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmUvZ2xpYi9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2RjODk3MDQ1MmE5OGU2ZTQz
N2RkM2U0MjRkZjdkZDU0NzVmNzFmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL21haW4uY3BwCkBAIC0wLDAgKzEsMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgRXN0w6p2w6NvIFNhbXVlbCBQcm9jw7NwaW8gQW1h
cmFsIDx0ZXZhdW1AZ2FtaWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
VGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDVmFsdWUuaCIKKyNpbmNsdWRlIDxnbGli
Lmg+CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9qc2Mt
dmFsdWUvYm9vbGVhbiIsICAgdGVzdEpTQ0Jvb2xlYW4pOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L2pzYy9qc2MtdmFsdWUvbnVtYmVyIiwgICAgdGVzdEpTQ051bWJlcik7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvanNjL2pzYy12YWx1ZS9zdHJpbmciLCAgICB0ZXN0SlNDU3RyaW5nKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi9qc2MvanNjLXZhbHVlL3VuZGVmaW5lZCIsIHRlc3RKU0NVbmRlZmlu
ZWQpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30K
</data>
<flag name="review"
          id="317968"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334449</attachid>
            <date>2018-02-22 06:46:14 -0800</date>
            <delta_ts>2018-03-06 09:43:17 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>jsc-glib-api-diff</filename>
            <type>text/plain</type>
            <size>215632</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCmluZGV4
IDM5NThjZjQ5MjVmLi5hYWU1ZDQxOGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5oPgogCi0jaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRCB8fCBkZWZpbmVk
KEpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKQEAgLTU1LDYg
KzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBKU0Nf
T0JKQ19BUElfRU5BQkxFRAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVEIHx8IGRlZmlu
ZWQoSlNDX0dMSUJfQVBJX0VOQUJMRUQpCiAKICNlbmRpZiAvLyBKU0FQSVdyYXBwZXJPYmplY3Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBl
ck9iamVjdEdMaWIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3Jh
cHBlck9iamVjdEdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yY2QzYmVhY2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisKKyNpbmNsdWRl
ICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKK307CisKK3N0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcj4ganNXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI7CisgICAgcmV0dXJuICZq
c1dyYXBwZXJPYmplY3RIYW5kbGVPd25lci5nZXQoKTsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqKQoreworICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXND
ZWxsKCkpOworICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlck9iamVjdCktPnJlbGVhc2VT
b29uKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0PihzdGF0aWNfY2Fz
dDxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0Kj4od3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKSkpOworICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBsOjphc1dl
YWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKK30KKworYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIC8vIFdlIHVz
ZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2
ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKKyAgICAvLyB0aGUgc2FtZSB3cmFwcGVkIG9i
amVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBv
YmplY3RzIGFsaXZlLgorICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpTQzo6SGVhcDo6aXNNYXJrZWQod3Jh
cHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRh
aW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworfQorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OworCit0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKwordGVtcGxh
dGUgPD4KK1N0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKK30KKworSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnNldFdyYXBwZWRPYmplY3Qodm9pZCogd3JhcHBlZE9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW1fd3JhcHBlZE9iamVjdCk7CisgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVj
dDsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGMxMGFmMjVjMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgIkFQSUNhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJBUElD
YXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Rh
dGljIEpTVmFsdWVSZWYgY2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4o
dG9KUyhmdW5jdGlvbikpLT5jYWxsKGNhbGxlckNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpTT2JqZWN0UmVmIGNh
bGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiBj
b25zdHJ1Y3Rvciwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoY29uc3RydWN0b3IpKS0+Y29uc3RydWN0KGNhbGxl
ckNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworY29u
c3QgQ2xhc3NJbmZvIEpTQ0NhbGxiYWNrRnVuY3Rpb246OnNfaW5mbyA9IHsgIkNhbGxiYWNrRnVu
Y3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQ0NhbGxiYWNrRnVuY3Rpb24pIH07CisKK0pTQ0NhbGxiYWNrRnVu
Y3Rpb24qIEpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgVHlwZSB0eXBlLCBKU0NDbGFzcyog
anNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0dXJuVHlwZSwg
VmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCk7CisgICAgSlND
Q2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0NDYWxsYmFja0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNDQ2FsbGJhY2tGdW5jdGlvbih2bSwgc3Ry
dWN0dXJlLCB0eXBlLCBqc2NDbGFzcywgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1l
KTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK0pTQ0NhbGxiYWNrRnVuY3Rpb246OkpTQ0Nh
bGxiYWNrRnVuY3Rpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVHlwZSB0eXBlLCBK
U0NDbGFzcyoganNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0
dXJuVHlwZSwgVmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCisgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKHZtLCBzdHJ1Y3R1cmUsIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNhbGw8SlNDQ2FsbGJhY2tG
dW5jdGlvbj4sIHR5cGUgPT0gVHlwZTo6Q29uc3RydWN0b3IgPyBBUElDYWxsYmFja0Z1bmN0aW9u
Ojpjb25zdHJ1Y3Q8SlNDQ2FsbGJhY2tGdW5jdGlvbj4gOiBudWxscHRyKQorICAgICwgbV9mdW5j
dGlvbkNhbGxiYWNrKGNhbGxBc0Z1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RDYWxsYmFjayhj
YWxsQXNDb25zdHJ1Y3RvcikKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9jbGFzcyhqc2ND
bGFzcykKKyAgICAsIG1fY2xvc3VyZShXVEZNb3ZlKGNsb3N1cmUpKQorICAgICwgbV9yZXR1cm5U
eXBlKHJldHVyblR5cGUpCisgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IFR5cGU6OkNvbnN0cnVjdG9yIHx8IGpzY0Ns
YXNzKTsKKyAgICBpZiAoR19DTE9TVVJFX05FRURTX01BUlNIQUwobV9jbG9zdXJlLmdldCgpKSkK
KyAgICAgICAgZ19jbG9zdXJlX3NldF9tYXJzaGFsKG1fY2xvc3VyZS5nZXQoKSwgZ19jY2xvc3Vy
ZV9tYXJzaGFsX2dlbmVyaWMpOworfQorCitKU1ZhbHVlUmVmIEpTQ0NhbGxiYWNrRnVuY3Rpb246
OmNhbGwoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxl
ckNvbnRleHQpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29u
dGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAo
bV90eXBlID09IFR5cGU6OkNvbnN0cnVjdG9yKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY2Fu
bm90IGNhbGwgYSBjbGFzcyBjb25zdHJ1Y3RvciB3aXRob3V0IHxuZXd8IikpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisgICAgfQorCisgICAgYXV0
byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCksIHRv
UmVmKHRoaXMpLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
Z3BvaW50ZXIgaW5zdGFuY2UgPSBudWxscHRyOworICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6TWV0
aG9kKSB7CisgICAgICAgIGluc3RhbmNlID0ganNjQ29udGV4dFdyYXBwZWRPYmplY3QoY29udGV4
dC5nZXQoKSwgdGhpc09iamVjdCk7CisgICAgICAgIGlmICghaW5zdGFuY2UpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4
dCksIEFTQ0lJTGl0ZXJhbCgiaW52YWxpZCBpbnN0YW5jZSB0eXBlIGluIG1ldGhvZCIpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoanNDb250ZXh0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEdDbG9zdXJlIGFsd2F5cyBleHBlY3QgdG8gaGF2ZSBhdCBs
ZWFzdCB0aGUgaW5zdGFuY2UgcGFyYW1ldGVyLgorICAgIGJvb2wgYWRkSW5zdGFuY2UgPSBpbnN0
YW5jZSB8fCBtX3BhcmFtZXRlcnMuaXNFbXB0eSgpOworCisgICAgYXV0byBwYXJhbWV0ZXJDb3Vu
dCA9IHN0ZDo6bWluKG1fcGFyYW1ldGVycy5zaXplKCksIGFyZ3VtZW50Q291bnQpOworICAgIGlm
IChhZGRJbnN0YW5jZSkKKyAgICAgICAgcGFyYW1ldGVyQ291bnQrKzsKKyAgICBhdXRvKiB2YWx1
ZXMgPSBzdGF0aWNfY2FzdDxHVmFsdWUqPihnX2FsbG9jYShzaXplb2YoR1ZhbHVlKSAqIHBhcmFt
ZXRlckNvdW50KSk7CisgICAgbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKEdWYWx1ZSkgKiBwYXJh
bWV0ZXJDb3VudCk7CisKKyAgICBzaXplX3QgZmlyc3RQYXJhbWV0ZXIgPSAwOworICAgIGlmIChh
ZGRJbnN0YW5jZSkgeworICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlc1swXSwgR19UWVBFX1BP
SU5URVIpOworICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKCZ2YWx1ZXNbMF0sIGluc3RhbmNl
KTsKKyAgICAgICAgZmlyc3RQYXJhbWV0ZXIgPSAxOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RQYXJhbWV0ZXI7IGkgPCBwYXJhbWV0ZXJDb3VudCAmJiAhKmV4Y2VwdGlvbjsgKytp
KQorICAgICAgICBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3Vt
ZW50c1tpIC0gZmlyc3RQYXJhbWV0ZXJdLCBtX3BhcmFtZXRlcnNbaSAtIGZpcnN0UGFyYW1ldGVy
XSwgJnZhbHVlc1tpXSwgZXhjZXB0aW9uKTsKKworICAgIEdWYWx1ZSByZXR1cm5WYWx1ZSA9IEdf
VkFMVUVfSU5JVDsKKyAgICBpZiAobV9yZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FKQorICAgICAg
ICBnX3ZhbHVlX2luaXQoJnJldHVyblZhbHVlLCBtX3JldHVyblR5cGUpOworCisgICAgaWYgKCEq
ZXhjZXB0aW9uKQorICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgbV9y
ZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FID8gJnJldHVyblZhbHVlIDogbnVsbHB0ciwgcGFyYW1l
dGVyQ291bnQsIHZhbHVlcywgbnVsbHB0cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50OyArK2kpCisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlc1tpXSk7
CisKKyAgICBpZiAoYXV0byoganNjRXhjZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlv
bihjb250ZXh0LmdldCgpKSkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkdldEpT
VmFsdWUoanNjRXhjZXB0aW9uKTsKKworICAgIGpzY0NvbnRleHRQb3BDYWxsYmFjayhjb250ZXh0
LmdldCgpLCBXVEZNb3ZlKGNhbGxiYWNrRGF0YSkpOworCisgICAgaWYgKG1fcmV0dXJuVHlwZSA9
PSBHX1RZUEVfTk9ORSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29u
dGV4dCk7CisKKyAgICBhdXRvKiByZXR2YWwgPSAqZXhjZXB0aW9uID8gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoanNDb250ZXh0KSA6IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoY29udGV4dC5nZXQo
KSwgJnJldHVyblZhbHVlLCBleGNlcHRpb24pOworICAgIGdfdmFsdWVfdW5zZXQoJnJldHVyblZh
bHVlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitKU09iamVjdFJlZiBKU0NDYWxsYmFja0Z1
bmN0aW9uOjpjb25zdHJ1Y3QoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxlckNvbnRleHQpKTsK
KyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9HbG9iYWxSZWYoZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAobV9yZXR1cm5UeXBl
ID09IEdfVFlQRV9OT05FKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3JzIGNh
bm5vdCBiZSB2b2lkIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
YXV0byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCks
IHRvUmVmKHRoaXMpLCBudWxscHRyLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
R1ZhbHVlIHJldHVyblZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmcmV0
dXJuVmFsdWUsIG1fcmV0dXJuVHlwZSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBHQ2xvc3VyZSBhbHdheXMgZXhwZWN0IHRvIGhhdmUgYXQgbGVhc3Qg
dGhlIGluc3RhbmNlIHBhcmFtZXRlci4KKyAgICAgICAgR1ZhbHVlIGR1bW15VmFsdWUgPSBHX1ZB
TFVFX0lOSVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmZHVtbXlWYWx1ZSwgR19UWVBFX1BPSU5U
RVIpOworICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgJnJldHVyblZh
bHVlLCAxLCAmZHVtbXlWYWx1ZSwgbnVsbHB0cik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJmR1
bW15VmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gcGFyYW1ldGVyQ291bnQgPSBz
dGQ6Om1pbihtX3BhcmFtZXRlcnMuc2l6ZSgpLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgYXV0
byogdmFsdWVzID0gc3RhdGljX2Nhc3Q8R1ZhbHVlKj4oZ19hbGxvY2Eoc2l6ZW9mKEdWYWx1ZSkg
KiBwYXJhbWV0ZXJDb3VudCkpOworICAgICAgICBtZW1zZXQodmFsdWVzLCAwLCBzaXplb2YoR1Zh
bHVlKSAqIHBhcmFtZXRlckNvdW50KTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50ICYmICEqZXhjZXB0aW9uOyArK2kpCisgICAgICAgICAgICBqc2NDb250
ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3VtZW50c1tpXSwgbV9wYXJhbWV0
ZXJzW2ldLCAmdmFsdWVzW2ldLCBleGNlcHRpb24pOworCisgICAgICAgIGlmICghKmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIGdfY2xvc3VyZV9pbnZva2UobV9jbG9zdXJlLmdldCgpLCAmcmV0dXJu
VmFsdWUsIHBhcmFtZXRlckNvdW50LCB2YWx1ZXMsIG51bGxwdHIpOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGdfdmFs
dWVfdW5zZXQoJnZhbHVlc1tpXSk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIGpzY0V4Y2VwdGlv
biA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpCisgICAgICAgICpl
eGNlcHRpb24gPSBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKGpzY0V4Y2VwdGlvbik7CisKKyAgICBq
c2NDb250ZXh0UG9wQ2FsbGJhY2soY29udGV4dC5nZXQoKSwgV1RGTW92ZShjYWxsYmFja0RhdGEp
KTsKKworICAgIGlmICgqZXhjZXB0aW9uKSB7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3dpdGNoIChn
X3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKCZyZXR1cm5WYWx1ZSkpKSB7CisgICAgY2Fz
ZSBHX1RZUEVfUE9JTlRFUjoKKyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgICAgIGlmIChh
dXRvKiBwdHIgPSByZXR1cm5WYWx1ZS5kYXRhWzBdLnZfcG9pbnRlcikgeworICAgICAgICAgICAg
YXV0byogcmV0dmFsID0ganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihtX2NsYXNzLmdldCgp
LCBwdHIpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmcmV0dXJuVmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRvUmVmKHJldHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgQVNDSUlMaXRl
cmFsKCJjb25zdHJ1Y3RvciByZXR1cm5lZCBudWxsIikpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiaW52YWxpZCB0eXBlICIsIGdfdHlwZV9uYW1l
KEdfVkFMVUVfVFlQRSgmcmV0dXJuVmFsdWUpKSwgIiByZXR1cm5lZCBieSBjb25zdHJ1Y3RvciIp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBKU0NDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0
aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCktPkpTQ0NhbGxiYWNrRnVuY3Rpb246
On5KU0NDYWxsYmFja0Z1bmN0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4NWI2M2M0YmFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNr
RnVuY3Rpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CisgICAgZnJpZW5kIHN0cnVjdCBBUElDYWxsYmFja0Z1bmN0aW9uOwor
cHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCisgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgRnVuY3Rpb24sCisgICAgICAgIE1ldGhvZCwKKyAgICAgICAg
Q29uc3RydWN0b3IKKyAgICB9OworCisgICAgc3RhdGljIEpTQ0NhbGxiYWNrRnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBUeXBlLCBKU0ND
bGFzcyosIEdSZWZQdHI8R0Nsb3N1cmU+JiYsIEdUeXBlLCBWZWN0b3I8R1R5cGU+JiYpOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIEpTVmFsdWVSZWYgY2FsbChKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJl
ZiBjb25zdHJ1Y3QoSlNDb250ZXh0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKworcHJpdmF0ZToK
KyAgICBKU0NDYWxsYmFja0Z1bmN0aW9uKFZNJiwgU3RydWN0dXJlKiwgVHlwZSwgSlNDQ2xhc3Mq
LCBHUmVmUHRyPEdDbG9zdXJlPiYmLCBHVHlwZSwgVmVjdG9yPEdUeXBlPiYmKTsKKworICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5jdGlvbkNhbGxiYWNrKCkgeyByZXR1cm4g
bV9mdW5jdGlvbkNhbGxiYWNrOyB9CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrIGNvbnN0cnVjdENhbGxiYWNrKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RDYWxsYmFjazsgfQor
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIG1fZnVuY3Rpb25DYWxsYmFjazsK
KyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgbV9jb25zdHJ1Y3RDYWxsYmFj
azsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBHUmVmUHRyPEpTQ0NsYXNzPiBtX2NsYXNzOworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IG1fY2xvc3VyZTsKKyAgICBHVHlwZSBtX3JldHVyblR5cGU7Cisg
ICAgVmVjdG9yPEdUeXBlPiBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNzIyYTVkMjg5MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAKQEAgLTAsMCAr
MSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzLmgiCisKKyNpbmNsdWRlICJKU0NDYWxsYmFj
a0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlND
Q29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
VmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfQ09OVEVYVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9QQVJFTlQKK307CisKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDbGFzc1ByaXZhdGUgeworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7Cisg
ICAgQ1N0cmluZyBuYW1lOworICAgIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBHRGVzdHJveU5v
dGlmeSBkZXN0cm95RnVuY3Rpb247CisgICAgSlNDQ2xhc3MqIHBhcmVudENsYXNzOworICAgIEpT
Qzo6V2VhazxKU0M6OkpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgSGFzaE1hcDxDU3RyaW5nLCBK
U0M6OldlYWs8SlNDOjpKU09iamVjdD4+IGNvbnN0cnVjdG9yczsKK30gSlNDQ2xhc3NQcml2YXRl
OworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ2xhc3MsIGpzY19jbGFzcywgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQganNjQ2xhc3NHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAg
IEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBqc2NDbGFzcy0+cHJpdi0+Y29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGpzY0Ns
YXNzLT5wcml2LT5uYW1lLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QVJFTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjQ2xhc3MtPnByaXYt
PnBhcmVudENsYXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NTZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFy
YW1TcGVjKQoreworICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAg
anNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBKU0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGpz
Y0NsYXNzLT5wcml2LT5uYW1lID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudCA9
IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICBqc2NDbGFzcy0+cHJpdi0+
cGFyZW50Q2xhc3MgPSBKU0NfQ0xBU1MocGFyZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NEaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBKU0NfQ0xB
U1Mob2JqZWN0KTsKKyAgICBpZiAoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpIHsKKyAgICAgICAg
SlNDbGFzc1JlbGVhc2UoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpOworICAgICAgICBqc2NDbGFz
cy0+cHJpdi0+anNDbGFzcyA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mo
anNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQganNjQ2xhc3NDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1Rf
Q0xBU1MoanNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAg
ICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBKU0NfQ0xBU1Mob2JqZWN0KS0+cHJpdjsKKyAgICBK
U0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7Cisg
ICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBwcml2LT5uYW1lLmRhdGEoKTsKKyAgICBwcml2LT5q
c0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHByb3RvdHlwZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc1Byb3RvdHlwZSIsIHByaXYtPm5h
bWUuZGF0YSgpKSk7CisgICAgSlNDbGFzc0RlZmluaXRpb24gcHJvdG90eXBlRGVmaW5pdGlvbiA9
IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIHByb3RvdHlwZURlZmluaXRpb24uY2xhc3NO
YW1lID0gcHJvdG90eXBlTmFtZS5nZXQoKTsKKyAgICBKU0NsYXNzUmVmIHByb3RvdHlwZUNsYXNz
ID0gSlNDbGFzc0NyZWF0ZSgmcHJvdG90eXBlRGVmaW5pdGlvbik7CisgICAgcHJpdi0+cHJvdG90
eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlSlNXcmFwcGVyKHByaXYtPmNvbnRleHQsIHByb3Rv
dHlwZUNsYXNzKTsKKyAgICBKU0NsYXNzUmVsZWFzZShwcm90b3R5cGVDbGFzcyk7CisKKyAgICBp
ZiAocHJpdi0+cGFyZW50Q2xhc3MpCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCksIHRvUmVmKHByaXYtPnByb3RvdHlwZS5n
ZXQoKSksIHRvUmVmKHByaXYtPnBhcmVudENsYXNzLT5wcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQganNjX2NsYXNzX2NsYXNzX2luaXQoSlNDQ2xhc3NDbGFzcyoga2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBvYmpDbGFzcy0+Y29uc3RydWN0ZWQgPSBqc2NDbGFzc0NvbnN0cnVjdGVkOworICAg
IG9iakNsYXNzLT5kaXNwb3NlID0ganNjQ2xhc3NEaXNwb3NlOworICAgIG9iakNsYXNzLT5nZXRf
cHJvcGVydHkgPSBqc2NDbGFzc0dldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5zZXRfcHJvcGVy
dHkgPSBqc2NDbGFzc1NldFByb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkpTQ0Nv
bnRleHQiLAorICAgICAgICAgICAgIkpTQyBDb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBF
X0NPTlRFWFQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAg
ICAgICAiTmFtZSIsCisgICAgICAgICAgICAiVGhlIGNsYXNzIG5hbWUiLAorICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfUEFSRU5ULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBhcmVudCIsCisgICAg
ICAgICAgICAiUGFydGVudCIsCisgICAgICAgICAgICAiVGhlIHBhcmVudCBjbGFzcyIsCisgICAg
ICAgICAgICBKU0NfVFlQRV9DTEFTUywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsK
K30KKworR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENsYXNzLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3MgPSBh
ZG9wdEdSZWYoSlNDX0NMQVNTKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DTEFTUywgImNvbnRleHQi
LCBjb250ZXh0LCAibmFtZSIsIG5hbWUsICJwYXJlbnQiLCBwYXJlbnRDbGFzcywgbnVsbHB0cikp
KTsKKyAgICBqc2NDbGFzcy0+cHJpdi0+ZGVzdHJveUZ1bmN0aW9uID0gZGVzdHJveUZ1bmN0aW9u
OworICAgIHJldHVybiBqc2NDbGFzczsKK30KKworSlNDbGFzc1JlZiBqc2NDbGFzc0dldEpTQ2xh
c3MoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIHJldHVybiBqc2NDbGFzcy0+cHJpdi0+anND
bGFzczsKK30KKworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihK
U0NDbGFzcyoganNjQ2xhc3MsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QpCit7CisgICAgSlNDQ2xh
c3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgcmV0dXJuIGpzY0NvbnRleHRH
ZXRPckNyZWF0ZUpTV3JhcHBlcihwcml2LT5jb250ZXh0LCBwcml2LT5qc0NsYXNzLCB0b1JlZihw
cml2LT5wcm90b3R5cGUuZ2V0KCkpLCB3cmFwcGVkT2JqZWN0LCBwcml2LT5kZXN0cm95RnVuY3Rp
b24pOworfQorCit2b2lkIGpzY0NsYXNzSW52YWxpZGF0ZShKU0NDbGFzcyoganNjQ2xhc3MpCit7
CisgICAganNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBudWxscHRyOworfQorCitjb25zdCBjaGFy
KiBqc2NfY2xhc3NfZ2V0X25hbWUoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0
dXJuIGpzY0NsYXNzLT5wcml2LT5uYW1lLmRhdGEoKTsKK30KKworSlNDQ2xhc3MqIGpzY19jbGFz
c19nZXRfcGFyZW50KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2ND
bGFzcy0+cHJpdi0+cGFyZW50Q2xhc3M7Cit9CisKK3ZvaWQganNjX2NsYXNzX2FkZF9jb25zdHJ1
Y3RvcihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxs
YmFjaywgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1Db3VudCwgLi4uKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChjYWxsYmFjayk7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBqc2NDbGFz
cy0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisgICAgaWYg
KCFuYW1lKQorICAgICAgICBuYW1lID0gcHJpdi0+bmFtZS5kYXRhKCk7CisKKyAgICB2YV9saXN0
IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgcGFyYW1Db3VudCk7CisgICAgVmVjdG9yPEdUeXBl
PiBwYXJhbWV0ZXJzOworICAgIGlmIChwYXJhbUNvdW50KSB7CisgICAgICAgIHBhcmFtZXRlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXJhbUNvdW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMudW5j
aGVja2VkQXBwZW5kKHZhX2FyZyhhcmdzLCBHVHlwZSkpOworICAgIH0KKyAgICB2YV9lbmQoYXJn
cyk7CisKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1
cmVfbmV3KGNhbGxiYWNrLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCkpOworICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOworICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpDb25zdHJ1
Y3RvciwganNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgIGF1dG8gY29uc3RydWN0b3IgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVW
YWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihmdW5jdGlvbk9iamVjdCkpOworICAgIEdSZWZQdHI8
SlNDVmFsdWU+IHByb3RvdHlwZSA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIHRvUmVmKHByaXYtPnByb3RvdHlwZS5nZXQoKSkpOworICAgIGF1dG8gbm9uRW51bWVy
YWJsZSA9IHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BF
UlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSk7CisgICAganNj
X3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShjb25zdHJ1Y3Rvci5nZXQoKSwgInBy
b3RvdHlwZSIsIG5vbkVudW1lcmFibGUsIHByb3RvdHlwZS5nZXQoKSk7CisgICAganNjX3ZhbHVl
X29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShwcm90b3R5cGUuZ2V0KCksICJjb25zdHJ1Y3Rv
ciIsIG5vbkVudW1lcmFibGUsIGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICBwcml2LT5jb25zdHJ1
Y3RvcnMuc2V0KG5hbWUsIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBpZiAobmFtZSA9PSBwcml2LT5u
YW1lKQorICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUocHJpdi0+Y29udGV4dCwgbmFtZSwg
Y29uc3RydWN0b3IuZ2V0KCkpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cml2LT5jb25zdHJ1Y3RvcnMuY29udGFpbnMocHJpdi0+bmFtZSkpOworICAgICAgICBhdXRvKiBt
YWluQ29uc3RydWN0b3JPYmplY3QgPSBwcml2LT5jb25zdHJ1Y3RvcnMuZ2V0KHByaXYtPm5hbWUp
OworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBtYWluQ29uc3RydWN0b3IgPSBqc2NDb250ZXh0
R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihtYWluQ29uc3RydWN0b3JPYmpl
Y3QpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkobWFpbkNvbnN0cnVj
dG9yLmdldCgpLCBuYW1lLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIGpz
Y19jbGFzc19hZGRfbWV0aG9kKEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwg
R0NhbGxiYWNrIGNhbGxiYWNrLCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50
LCAuLi4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY2FsbGJh
Y2spOworCisgICAgSlNDQ2xhc3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAg
Z19yZXR1cm5faWZfZmFpbChwcml2LT5jb250ZXh0KTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAg
ICB2YV9zdGFydChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRl
cnM7CisgICAgaWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1Db3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBl
bmQodmFfYXJnKGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2Fs
bGJhY2ssIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0KSk7CisgICAgSlNDOjpWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
YXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBTdHJpbmc6OmZyb21VVEY4KG5h
bWUpLAorICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1ldGhvZCwganNj
Q2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFyYW1ldGVycykp
KTsKKyAgICBhdXRvIG1ldGhvZCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm90b3R5cGUg
PSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2LT5w
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBhdXRvIG5vbkVudW1lcmFibGUgPSBzdGF0aWNfY2FzdDxK
U0NWYWx1ZVByb3BlcnR5RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgfCBK
U0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEUpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2RhdGEocHJvdG90eXBlLmdldCgpLCBuYW1lLCBub25FbnVtZXJhYmxlLCBtZXRo
b2QuZ2V0KCkpOworfQorCit2b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlNDQ2xhc3MqIGpz
Y0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBn
ZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNf
Q0xBU1MoanNjQ2xhc3MpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwocHJvcGVydHlUeXBlICE9IEdfVFlQRV9JTlZBTElEICYmIHByb3BlcnR5VHlw
ZSAhPSBHX1RZUEVfTk9ORSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChnZXR0ZXIgfHwgc2V0dGVy
KTsKKworICAgIEpTQ0NsYXNzUHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5wcml2OworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocHJpdi0+Y29udGV4dCk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBw
cm90b3R5cGUgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1Jl
Zihwcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9w
cm9wZXJ0eV9hY2Nlc3Nvcihwcm90b3R5cGUuZ2V0KCksIG5hbWUsIEpTQ19WQUxVRV9QUk9QRVJU
WV9DT05GSUdVUkFCTEUsIHByb3BlcnR5VHlwZSwgZ2V0dGVyLCBzZXR0ZXIpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMjAyZTY4NmJmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuaApAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pTQ19IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPGpzYy9q
c2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIEpTQ0Ns
YXNzX2gKKyNkZWZpbmUgSlNDQ2xhc3NfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ0xBU1MgICAgICAgICAgICAoanNjX2Ns
YXNzX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19DTEFTUyhvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DTEFTUywgSlNDQ2xhc3MpKQor
I2RlZmluZSBKU0NfSVNfQ0xBU1Mob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgSlNDX1RZUEVfQ0xBU1MpKQorI2RlZmluZSBKU0NfQ0xBU1NfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQ0xBU1Ms
IEpTQ0NsYXNzQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfQ0xBU1NfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQ0xBU1MpKQorI2RlZmluZSBK
U0NfQ0xBU1NfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgSlNDX1RZUEVfQ0xBU1MsIEpTQ0NsYXNzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlND
Q2xhc3MgSlNDQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3NDbGFzcyBKU0NDbGFzc0Ns
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzUHJpdmF0ZSBKU0NDbGFzc1ByaXZhdGU7CisK
K3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7CisKK3N0cnVjdCBfSlNDQ2xh
c3MgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgSlND
Q2xhc3NQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NDbGFzc0NsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAo
dm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7
Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfY2xhc3NfZ2V0X3R5cGUgICAgICAgICh2b2lkKTsK
KworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19jbGFzc19nZXRfbmFtZSAgICAgICAgKEpTQ0Ns
YXNzICAgKmpzY19jbGFzcyk7CisKK0pTQ19BUEkgSlNDQ2xhc3MgKgoranNjX2NsYXNzX2dldF9w
YXJlbnQgICAgICAoSlNDQ2xhc3MgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSB2b2lkCitqc2Nf
Y2xhc3NfYWRkX2NvbnN0cnVjdG9yIChKU0NDbGFzcyAgICpqc2NfY2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbGxiYWNrICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VHlwZSAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlND
X0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX21ldGhvZCAgICAgIChKU0NDbGFzcyAgICpqc2NfY2xh
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgY2FsbGJhY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVHlwZSAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX3Byb3BlcnR5ICAgIChKU0ND
bGFzcyAgICpqc2NfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgcHJvcGVydHlf
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgIGdldHRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgIHNldHRlcik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBKU0NDbGFzc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjJmMzY0NGQ0ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3MuaCIKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CisKK0dSZWZQdHI8SlNDQ2xhc3M+IGpzY0NsYXNzQ3JlYXRlKEpTQ0NvbnRleHQqLCBjb25z
dCBjaGFyKiwgSlNDQ2xhc3MqLCBHRGVzdHJveU5vdGlmeSk7CitKU0NsYXNzUmVmIGpzY0NsYXNz
R2V0SlNDbGFzcyhKU0NDbGFzcyopOworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0
ZUpTV3JhcHBlcihKU0NDbGFzcyosIGdwb2ludGVyKTsKK3ZvaWQganNjQ2xhc3NJbnZhbGlkYXRl
KEpTQ0NsYXNzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5ZDUyNGUxMmIy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Nv
bnRleHQuY3BwCkBAIC0wLDAgKzEsNTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisK
KyNpbmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ0V4Y2VwdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmlydHVh
bE1hY2hpbmVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1hcC5oIgorI2luY2x1ZGUg
IkpTUmV0YWluUHRyLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworZW51bSB7
CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9WSVJUVUFMX01BQ0hJTkUsCit9OworCitzdHJ1Y3Qg
RXhjZXB0aW9uSGFuZGxlciB7CisgICAgRXhjZXB0aW9uSGFuZGxlcihKU0NFeGNlcHRpb25IYW5k
bGVyIGhhbmRsZXIsIHZvaWQqIHVzZXJEYXRhID0gbnVsbHB0ciwgR0Rlc3Ryb3lOb3RpZnkgZGVz
dHJveU5vdGlmeUZ1bmN0aW9uID0gbnVsbHB0cikKKyAgICAgICAgOiBoYW5kbGVyKGhhbmRsZXIp
CisgICAgICAgICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgICAgICwgZGVzdHJveU5vdGlmeUZ1
bmN0aW9uKGRlc3Ryb3lOb3RpZnlGdW5jdGlvbikKKyAgICB7CisgICAgfQorCisgICAgfkV4Y2Vw
dGlvbkhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGRlc3Ryb3lOb3RpZnlGdW5jdGlvbikK
KyAgICAgICAgICAgIGRlc3Ryb3lOb3RpZnlGdW5jdGlvbih1c2VyRGF0YSk7CisgICAgfQorCisg
ICAgRXhjZXB0aW9uSGFuZGxlcihFeGNlcHRpb25IYW5kbGVyJiYgb3RoZXIpCisgICAgeworICAg
ICAgICBzdGQ6OnN3YXAoaGFuZGxlciwgb3RoZXIuaGFuZGxlcik7CisgICAgICAgIHN0ZDo6c3dh
cCh1c2VyRGF0YSwgb3RoZXIudXNlckRhdGEpOworICAgICAgICBzdGQ6OnN3YXAoZGVzdHJveU5v
dGlmeUZ1bmN0aW9uLCBvdGhlci5kZXN0cm95Tm90aWZ5RnVuY3Rpb24pOworICAgIH0KKworICAg
IEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgRXhjZXB0aW9uSGFuZGxlciYpID0gZGVsZXRlOworICAg
IEV4Y2VwdGlvbkhhbmRsZXImIG9wZXJhdG9yPShjb25zdCBFeGNlcHRpb25IYW5kbGVyJikgPSBk
ZWxldGU7CisKKyAgICBKU0NFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgeyBudWxscHRyIH07Cisg
ICAgdm9pZCogdXNlckRhdGEgeyBudWxscHRyIH07CisgICAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJv
eU5vdGlmeUZ1bmN0aW9uIHsgbnVsbHB0ciB9OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Nv
bnRleHRQcml2YXRlIHsKKyAgICBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bTsKKyAgICBK
U1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRSZWY+IGpzQ29udGV4dDsKKyAgICBHUmVmUHRyPEpT
Q0V4Y2VwdGlvbj4gZXhjZXB0aW9uOworICAgIFZlY3RvcjxFeGNlcHRpb25IYW5kbGVyPiBleGNl
cHRpb25IYW5kbGVyczsKK30gSlNDQ29udGV4dFByaXZhdGU7CisKK1dFQktJVF9ERUZJTkVfVFlQ
RShKU0NDb250ZXh0LCBqc2NfY29udGV4dCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
anNjQ29udGV4dFNldFZpcnR1YWxNYWNoaW5lKEpTQ0NvbnRleHQqIGNvbnRleHQsIEdSZWZQdHI8
SlNDVmlydHVhbE1hY2hpbmU+JiYgdm0pCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYg
PSBjb250ZXh0LT5wcml2OworICAgIGlmICh2bSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
cHJpdi0+dm0pOworICAgICAgICBwcml2LT52bSA9IFdURk1vdmUodm0pOworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcHJpdi0+anNDb250ZXh0KTsKKyAgICAgICAgcHJpdi0+anNDb250ZXh0ID0g
SlNSZXRhaW5QdHI8SlNHbG9iYWxDb250ZXh0UmVmPihBZG9wdCwgSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlSW5Hcm91cChqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChwcml2LT52bS5nZXQo
KSksIG51bGxwdHIpKTsKKyAgICAgICAgdG9KU0dsb2JhbE9iamVjdChwcml2LT5qc0NvbnRleHQu
Z2V0KCkpLT5zZXRXcmFwcGVyTWFwKHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpXcmFwcGVyTWFwPihj
b250ZXh0KSk7CisgICAgICAgIGpzY1ZpcnR1YWxNYWNoaW5lQWRkQ29udGV4dChwcml2LT52bS5n
ZXQoKSwgY29udGV4dCk7CisgICAgfSBlbHNlIGlmICghcHJpdi0+dm0pIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQocHJpdi0+anNDb250ZXh0KTsKKyAgICAgICAganNjVmlydHVhbE1hY2hpbmVS
ZW1vdmVDb250ZXh0KHByaXYtPnZtLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgcHJpdi0+anND
b250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgcHJpdi0+dm0gPSBudWxscHRyOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQganNjQ29udGV4dEdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAg
SlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBKU0NfQ09OVEVYVChvYmplY3QpLT5wcml2OworCisg
ICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfVklSVFVBTF9NQUNISU5FOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHByaXYtPnZtLmdldCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQganNjQ29udGV4dFNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgSlNDQ29u
dGV4dCogY29udGV4dCA9IEpTQ19DT05URVhUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJ
RCkgeworICAgIGNhc2UgUFJPUF9WSVJUVUFMX01BQ0hJTkU6CisgICAgICAgIGlmIChncG9pbnRl
ciB2bSA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICBqc2NDb250ZXh0
U2V0VmlydHVhbE1hY2hpbmUoY29udGV4dCwgR1JlZlB0cjxKU0NWaXJ0dWFsTWFjaGluZT4oSlND
X1ZJUlRVQUxfTUFDSElORSh2bSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBw
YXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ29udGV4dENvbnN0cnVjdGVk
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfY29udGV4dF9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworCisgICAgSlNDQ29udGV4dCogY29udGV4
dCA9IEpTQ19DT05URVhUKG9iamVjdCk7CisgICAgaWYgKCFjb250ZXh0LT5wcml2LT52bSkKKyAg
ICAgICAganNjQ29udGV4dFNldFZpcnR1YWxNYWNoaW5lKGNvbnRleHQsIGFkb3B0R1JlZihqc2Nf
dmlydHVhbF9tYWNoaW5lX25ldygpKSk7CisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKEV4Y2VwdGlvbkhhbmRsZXIoW10oSlNDQ29udGV4dCogY29udGV4dCwgSlND
RXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7CisgICAgICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgIH0pKTsKK30KKworc3RhdGlj
IHZvaWQganNjQ29udGV4dERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGpzY0NvbnRleHRTZXRWaXJ0
dWFsTWFjaGluZShjb250ZXh0LCBudWxscHRyKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19j
b250ZXh0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
anNjX2NvbnRleHRfY2xhc3NfaW5pdChKU0NDb250ZXh0Q2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmdldF9wcm9wZXJ0eSA9IGpzY0NvbnRleHRHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
c2V0X3Byb3BlcnR5ID0ganNjQ29udGV4dFNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5jb25z
dHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25zdHJ1Y3RlZDsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9
IGpzY0NvbnRleHREaXNwb3NlOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9WSVJUVUFMX01BQ0hJTkUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmlydHVhbC1tYWNoaW5lIiwKKyAgICAgICAg
ICAgICJKU0NWaXJ0dWFsTWFjaGluZSIsCisgICAgICAgICAgICAiSlNDIFZpcnR1YWwgTWFjaGlu
ZSIsCisgICAgICAgICAgICBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1f
Q09OU1RSVUNUX09OTFkpKSk7Cit9CisKK0dSZWZQdHI8SlNDQ29udGV4dD4ganNjQ29udGV4dEdl
dE9yQ3JlYXRlKEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQpCit7CisgICAgYXV0byB2bSA9
IGpzY1ZpcnR1YWxNYWNoaW5lR2V0T3JDcmVhdGUodG9SZWYoJnRvSlMoanNDb250ZXh0KS0+dm0o
KSkpOworICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGpzY1ZpcnR1YWxNYWNoaW5l
R2V0Q29udGV4dCh2bS5nZXQoKSwganNDb250ZXh0KTsKKyAgICByZXR1cm4gY29udGV4dCA/IGNv
bnRleHQgOiBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKHZt
LmdldCgpKSk7Cit9CisKK0pTR2xvYmFsQ29udGV4dFJlZiBqc2NDb250ZXh0R2V0SlNDb250ZXh0
KEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVQoY29udGV4
dCkpOworCisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAg
IHJldHVybiBwcml2LT5qc0NvbnRleHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBKU0M6OldyYXBwZXJN
YXAmIHdyYXBwZXJNYXAoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBtYXAgPSB0
b0pTR2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSktPndyYXBwZXJN
YXAoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtYXApOworICAgIHJldHVybiAqbWFwOworfQorCitH
UmVmUHRyPEpTQ1ZhbHVlPiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShKU0NDb250ZXh0KiBj
b250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgcmV0dXJuIHdyYXBwZXJNYXAoY29u
dGV4dCkuZ29iamVjdFdyYXBwZXIoanNWYWx1ZSk7Cit9CisKK3ZvaWQganNjQ29udGV4dFZhbHVl
RGVzdHJveWVkKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSkKK3sKKyAg
ICB3cmFwcGVyTWFwKGNvbnRleHQpLnVud3JhcChqc1ZhbHVlKTsKK30KKworSlNDOjpKU09iamVj
dCoganNjQ29udGV4dEdldEpTV3JhcHBlcihKU0NDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciB3
cmFwcGVkT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGVyTWFwKGNvbnRleHQpLmpzV3JhcHBl
cih3cmFwcGVkT2JqZWN0KTsKK30KKworSlNDOjpKU09iamVjdCoganNjQ29udGV4dEdldE9yQ3Jl
YXRlSlNXcmFwcGVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNW
YWx1ZVJlZiBwcm90b3R5cGUsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QsIEdEZXN0cm95Tm90aWZ5
IGRlc3Ryb3lGdW5jdGlvbikKK3sKKyAgICBpZiAoYXV0byoganNXcmFwcGVyID0ganNjQ29udGV4
dEdldEpTV3JhcHBlcihjb250ZXh0LCB3cmFwcGVkT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGpz
V3JhcHBlcjsKKworICAgIHJldHVybiB3cmFwcGVyTWFwKGNvbnRleHQpLmNyZWF0ZUpTV3JhcHBw
ZXIoanNDbGFzcywgcHJvdG90eXBlLCB3cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pOwor
fQorCitncG9pbnRlciBqc2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0NDb250ZXh0KiBjb250ZXh0
LCBKU09iamVjdFJlZiBqc09iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0
KS53cmFwcGVkT2JqZWN0KHRvSlMoanNPYmplY3QpKTsKK30KKworQ2FsbGJhY2tEYXRhIGpzY0Nv
bnRleHRQdXNoQ2FsbGJhY2soSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBjYWxsZWVW
YWx1ZSwgSlNWYWx1ZVJlZiB0aGlzVmFsdWUsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmKiBhcmd1bWVudHMpCit7CisgICAgVGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1
cnJlbnQoKTsKKyAgICBhdXRvKiBwcmV2aW91c1N0YWNrID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tE
YXRhKj4odGhyZWFkLm1fYXBpRGF0YSk7CisgICAgQ2FsbGJhY2tEYXRhIGRhdGEgPSB7IGNvbnRl
eHQsIFdURk1vdmUoY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uKSwgY2FsbGVlVmFsdWUsIHRoaXNW
YWx1ZSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBwcmV2aW91c1N0YWNrIH07CisgICAgdGhy
ZWFkLm1fYXBpRGF0YSA9ICZkYXRhOworICAgIHJldHVybiBkYXRhOworfQorCit2b2lkIGpzY0Nv
bnRleHRQb3BDYWxsYmFjayhKU0NDb250ZXh0KiBjb250ZXh0LCBDYWxsYmFja0RhdGEmJiBkYXRh
KQoreworICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CisgICAgY29udGV4
dC0+cHJpdi0+ZXhjZXB0aW9uID0gV1RGTW92ZShkYXRhLnByZXNlcnZlZEV4Y2VwdGlvbik7Cisg
ICAgdGhyZWFkLm1fYXBpRGF0YSA9IGRhdGEubmV4dDsKK30KKworSlNWYWx1ZVJlZiBqc2NDb250
ZXh0R0FycmF5VG9KU0FycmF5KEpTQ0NvbnRleHQqIGNvbnRleHQsIEdQdHJBcnJheSogZ0FycmF5
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYg
PSBjb250ZXh0LT5wcml2OworICAgIGF1dG8qIGpzQXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShw
cml2LT5qc0NvbnRleHQuZ2V0KCksIDAsIG51bGxwdHIsIGV4Y2VwdGlvbik7CisgICAgaWYgKCpl
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChwcml2LT5qc0Nv
bnRleHQuZ2V0KCkpOworCisgICAgaWYgKCFnQXJyYXkpCisgICAgICAgIHJldHVybiBqc0FycmF5
OworCisgICAgYXV0byoganNBcnJheU9iamVjdCA9IEpTVmFsdWVUb09iamVjdChwcml2LT5qc0Nv
bnRleHQuZ2V0KCksIGpzQXJyYXksIGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24pCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChwcml2LT5qc0NvbnRleHQuZ2V0KCkp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdBcnJheS0+bGVuOyArK2kpIHsKKyAg
ICAgICAgZ3BvaW50ZXIgaXRlbSA9IGdfcHRyX2FycmF5X2luZGV4KGdBcnJheSwgaSk7CisgICAg
ICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KHBy
aXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheU9iamVjdCwgaSwgSlNWYWx1ZU1ha2VOdWxsKHBy
aXYtPmpzQ29udGV4dC5nZXQoKSksIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UgaWYgKEpTQ19J
U19WQUxVRShpdGVtKSkKKyAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KHBy
aXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheU9iamVjdCwgaSwganNjVmFsdWVHZXRKU1ZhbHVl
KEpTQ19WQUxVRShpdGVtKSksIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSksIG1ha2VTdHJpbmcoImludmFsaWQgaXRlbSB0eXBlIGluIEdQdHJBcnJheSIp
KSk7CisKKyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQocHJpdi0+anNDb250ZXh0LmdldCgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4ganNBcnJheTsKK30KKworc3RhdGljIEdSZWZQdHI8R1B0ckFycmF5PiBqc2NDb250ZXh0SlNB
cnJheVRvR0FycmF5KEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNBcnJheSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29u
dGV4dC0+cHJpdjsKKyAgICBpZiAoSlNWYWx1ZUlzTnVsbChwcml2LT5qc0NvbnRleHQuZ2V0KCks
IGpzQXJyYXkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghSlNWYWx1ZUlz
QXJyYXkocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5KSkgeworICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0
KCkpLCBtYWtlU3RyaW5nKCJpbnZhbGlkIGpzIHR5cGUgZm9yIEdQdHJBcnJheSIpKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8qIGpzQXJyYXlPYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5LCBleGNlcHRpb24p
OworICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5ndGhTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgYXV0byoganNMZW5ndGggPSBKU09iamVj
dEdldFByb3BlcnR5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheU9iamVjdCwgbGVuZ3Ro
U3RyaW5nLmdldCgpLCBleGNlcHRpb24pOworICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbGVuZ3RoID0gSlNDOjp0b1VJbnQzMihKU1ZhbHVl
VG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0xlbmd0aCwgZXhjZXB0aW9uKSk7Cisg
ICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR1JlZlB0
cjxHUHRyQXJyYXk+IGdBcnJheSA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVl
X2Z1bmMoZ19vYmplY3RfdW5yZWYpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgYXV0byoganNJdGVtID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBpLCBleGNlcHRpb24p
OworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzSXRlbSA/IGpzY0NvbnRl
eHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGpzSXRlbSkubGVha1JlZigpIDogbnVsbHB0cik7
CisgICAgfQorCisgICAgcmV0dXJuIGdBcnJheTsKK30KKworSlNWYWx1ZVJlZiBqc2NDb250ZXh0
R1ZhbHVlVG9KU1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdiA9
IGNvbnRleHQtPnByaXY7CisKKyAgICBzd2l0Y2ggKGdfdHlwZV9mdW5kYW1lbnRhbChHX1ZBTFVF
X1RZUEUodmFsdWUpKSkgeworICAgIGNhc2UgR19UWVBFX0JPT0xFQU46CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZUJvb2xlYW4ocHJpdi0+anNDb250ZXh0LmdldCgpLCBnX3ZhbHVlX2dldF9i
b29sZWFuKHZhbHVlKSk7CisgICAgY2FzZSBHX1RZUEVfQ0hBUjoKKyAgICBjYXNlIEdfVFlQRV9J
TlQ6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0
KCksIHZhbHVlLT5kYXRhWzBdLnZfaW50KTsKKyAgICBjYXNlIEdfVFlQRV9FTlVNOgorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBnX3ZhbHVl
X2dldF9lbnVtKHZhbHVlKSk7CisgICAgY2FzZSBHX1RZUEVfRkxBR1M6CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGdfdmFsdWVfZ2V0X2Zs
YWdzKHZhbHVlKSk7CisgICAgY2FzZSBHX1RZUEVfVUNIQVI6CisgICAgY2FzZSBHX1RZUEVfVUlO
VDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQo
KSwgdmFsdWUtPmRhdGFbMF0udl91aW50KTsKKyAgICBjYXNlIEdfVFlQRV9GTE9BVDoKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUt
PmRhdGFbMF0udl9mbG9hdCk7CisgICAgY2FzZSBHX1RZUEVfRE9VQkxFOgorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVsw
XS52X2RvdWJsZSk7CisgICAgY2FzZSBHX1RZUEVfTE9ORzoKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9sb25n
KTsKKyAgICBjYXNlIEdfVFlQRV9VTE9ORzoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVt
YmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl91bG9uZyk7CisgICAg
Y2FzZSBHX1RZUEVfSU5UNjQ6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2
LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfaW50NjQpOworICAgIGNhc2UgR19U
WVBFX1VJTlQ2NDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl91aW50NjQpOworICAgIGNhc2UgR19UWVBFX1NU
UklORzogeworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmcoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKHByaXYtPmpzQ29udGV4dC5nZXQo
KSwganNTdHJpbmcuZ2V0KCkpOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9QT0lOVEVSOgorICAg
IGNhc2UgR19UWVBFX09CSkVDVDoKKyAgICAgICAgaWYgKGF1dG8qIHB0ciA9IHZhbHVlLT5kYXRh
WzBdLnZfcG9pbnRlcikgeworICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQ
RSh2YWx1ZSksIEpTQ19UWVBFX1ZBTFVFKSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNjVmFs
dWVHZXRKU1ZhbHVlKEpTQ19WQUxVRShwdHIpKTsKKworICAgICAgICAgICAgaWYgKGF1dG8qIGpz
V3JhcHBlciA9IGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoY29udGV4dCwgcHRyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdG9SZWYoanNXcmFwcGVyKTsKKworICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgp
KSwgQVNDSUlMaXRlcmFsKCJ1bnN1cHBvcnRlZCBwb2ludGVyIHR5cGUiKSkpOworICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKHByaXYtPmpzQ29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVsbChwcml2LT5qc0NvbnRleHQu
Z2V0KCkpOworICAgIGNhc2UgR19UWVBFX0JPWEVEOgorICAgICAgICBpZiAoZ190eXBlX2lzX2Eo
R19WQUxVRV9UWVBFKHZhbHVlKSwgR19UWVBFX1BUUl9BUlJBWSkpCisgICAgICAgICAgICByZXR1
cm4ganNjQ29udGV4dEdBcnJheVRvSlNBcnJheShjb250ZXh0LCBzdGF0aWNfY2FzdDxHUHRyQXJy
YXkqPih2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpLCBleGNlcHRpb24pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdfVFlQRV9QQVJBTToKKyAgICBjYXNlIEdfVFlQRV9JTlRFUkZBQ0U6Cisg
ICAgY2FzZSBHX1RZUEVfVkFSSUFOVDoKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhw
cml2LT5qc0NvbnRleHQuZ2V0KCkpLCBtYWtlU3RyaW5nKCJ1bnN1cHBvcnRlZCB0eXBlICIsIGdf
dHlwZV9uYW1lKEdfVkFMVUVfVFlQRSh2YWx1ZSkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIGpzY0NvbnRleHRK
U1ZhbHVlVG9HVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlLCBH
VHlwZSB0eXBlLCBHVmFsdWUqIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
SlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGdfdmFsdWVfaW5p
dCh2YWx1ZSwgdHlwZSk7CisKKyAgICBhdXRvIGZ1bmRhbWVudGFsVHlwZSA9IGdfdHlwZV9mdW5k
YW1lbnRhbChHX1ZBTFVFX1RZUEUodmFsdWUpKTsKKyAgICBzd2l0Y2ggKGZ1bmRhbWVudGFsVHlw
ZSkgeworICAgIGNhc2UgR19UWVBFX0lOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVl
LCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRp
b24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfRkxPQVQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0Lmdl
dCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZ
UEVfRE9VQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIEpTVmFsdWVUb051
bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9CT09MRUFOOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCBKU1ZhbHVlVG9Cb29sZWFuKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNW
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9TVFJJTkc6IHsKKyAgICAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAg
ICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzaXplX3Qg
bWF4U2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZy5nZXQo
KSk7CisgICAgICAgIGF1dG8qIHN0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyht
YXhTaXplKSk7CisgICAgICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoanNTdHJpbmcuZ2V0KCks
IHN0cmluZywgbWF4U2l6ZSk7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHN0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9DSEFSOgorICAg
ICAgICBnX3ZhbHVlX3NldF9zY2hhcih2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR19UWVBFX1VDSEFSOgorICAgICAgICBnX3ZhbHVlX3NldF91Y2hhcih2YWx1ZSwgSlNWYWx1
ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1VJTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X3VpbnQodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFs
dWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9QT0lOVEVS
OgorICAgIGNhc2UgR19UWVBFX09CSkVDVDogeworICAgICAgICBncG9pbnRlciB3cmFwcGVkT2Jq
ZWN0ID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoIUpTVmFsdWVJc051bGwocHJpdi0+anNDb250
ZXh0LmdldCgpLCBqc1ZhbHVlKSkgeworICAgICAgICAgICAgYXV0byBqc09iamVjdCA9IEpTVmFs
dWVUb09iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB3cmFwcGVkT2JqZWN0ID0ganNjQ29udGV4dFdyYXBwZWRPYmplY3QoY29udGV4dCwg
anNPYmplY3QpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVkT2JqZWN0ICYmIGdfdHlwZV9pc19h
KEdfVkFMVUVfVFlQRSh2YWx1ZSksIEpTQ19UWVBFX1ZBTFVFKSkgeworICAgICAgICAgICAgICAg
IGF1dG8ganNjVmFsdWUgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc1Zh
bHVlKTsKKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIGpzY1ZhbHVl
LmdldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIXdyYXBwZWRPYmplY3QpIHsKKyAgICAgICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0KCkpLCBB
U0NJSUxpdGVyYWwoImludmFsaWQgcG9pbnRlciB0eXBlIikpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuZGFtZW50
YWxUeXBlID09IEdfVFlQRV9QT0lOVEVSKQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRl
cih2YWx1ZSwgd3JhcHBlZE9iamVjdCk7CisgICAgICAgIGVsc2UgaWYgKEdfSVNfT0JKRUNUKHdy
YXBwZWRPYmplY3QpKQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3cmFw
cGVkT2JqZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVm
KEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgQVNDSUlM
aXRlcmFsKCJ3cmFwcGVkIG9iamVjdCBpcyBub3QgYSBHT2JqZWN0IikpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0xPTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUs
IGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VTE9ORzoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0Nv
bnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdfVFlQRV9JTlQ2NDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50NjQodmFsdWUsIEpTVmFs
dWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VSU5UNjQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQ2NCh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwg
anNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX0VO
VU06CisgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2
LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdfVFlQRV9GTEFHUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxhZ3ModmFsdWUs
IEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlv
bikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9CT1hFRDoKKyAgICAgICAgaWYg
KGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQRSh2YWx1ZSksIEdfVFlQRV9QVFJfQVJSQVkpKSB7Cisg
ICAgICAgICAgICBhdXRvIGdBcnJheSA9IGpzY0NvbnRleHRKU0FycmF5VG9HQXJyYXkoY29udGV4
dCwganNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGlmICghKmV4Y2VwdGlvbikKKyAg
ICAgICAgICAgICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQodmFsdWUsIGdBcnJheS5sZWFrUmVmKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZBTExUSFJPVUdIOwor
ICAgIGNhc2UgR19UWVBFX1BBUkFNOgorICAgIGNhc2UgR19UWVBFX0lOVEVSRkFDRToKKyAgICBj
YXNlIEdfVFlQRV9WQVJJQU5UOgorICAgIGRlZmF1bHQ6CisgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpzQ29udGV4dC5nZXQoKSksIG1h
a2VTdHJpbmcoInVuc3VwcG9ydGVkIHR5cGUgIiwgZ190eXBlX25hbWUoR19WQUxVRV9UWVBFKHZh
bHVlKSkpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworSlNDQ29udGV4dCoganNjX2Nv
bnRleHRfbmV3KCkKK3sKKyAgICByZXR1cm4gSlNDX0NPTlRFWFQoZ19vYmplY3RfbmV3KEpTQ19U
WVBFX0NPTlRFWFQsIG51bGxwdHIpKTsKK30KKworSlNDQ29udGV4dCoganNjX2NvbnRleHRfbmV3
X3dpdGhfdmlydHVhbF9tYWNoaW5lKEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU0NfSVNfVklSVFVBTF9NQUNISU5FKHZtKSwgbnVsbHB0cik7Cisg
ICAgcmV0dXJuIEpTQ19DT05URVhUKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DT05URVhULCAidmly
dHVhbC1tYWNoaW5lIiwgdm0sIG51bGxwdHIpKTsKK30KKworSlNDVmlydHVhbE1hY2hpbmUqIGpz
Y19jb250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7
CisKKyAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+dm0uZ2V0KCk7Cit9CisKK0pTQ0V4Y2VwdGlv
bioganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihKU0NDb250ZXh0ICpjb250ZXh0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsK
KworICAgIHJldHVybiBjb250ZXh0LT5wcml2LT5leGNlcHRpb24uZ2V0KCk7Cit9CisKK3ZvaWQg
anNjX2NvbnRleHRfdGhyb3coSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogZXJyb3JN
ZXNzYWdlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkp
OworCisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIEpT
VmFsdWVSZWYganNNZXNzYWdlID0gbnVsbHB0cjsKKyAgICBpZiAoZXJyb3JNZXNzYWdlKSB7Cisg
ICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtZXNzYWdlKEFkb3B0LCBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAganNNZXNzYWdlID0g
SlNWYWx1ZU1ha2VTdHJpbmcocHJpdi0+anNDb250ZXh0LmdldCgpLCBtZXNzYWdlLmdldCgpKTsK
KyAgICB9CisKKyAgICBwcml2LT5leGNlcHRpb24gPSBqc2NFeGNlcHRpb25DcmVhdGUoY29udGV4
dCwgSlNPYmplY3RNYWtlRXJyb3IocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc01lc3NhZ2UgPyAx
IDogMCwgJmpzTWVzc2FnZSwgbnVsbHB0cikpOworfQorCit2b2lkIGpzY19jb250ZXh0X3Rocm93
X2V4Y2VwdGlvbihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisKKyAgICBjb250
ZXh0LT5wcml2LT5leGNlcHRpb24gPSBleGNlcHRpb247Cit9CisKK3ZvaWQganNjX2NvbnRleHRf
cHVzaF9leGNlcHRpb25faGFuZGxlcihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb25I
YW5kbGVyIGhhbmRsZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95
Tm90aWZ5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaGFuZGxlcik7CisKKyAgICBjb250ZXh0LT5wcml2LT5l
eGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLCB1c2VyRGF0YSwgZGVzdHJveU5vdGlm
eSB9KTsKK30KKwordm9pZCBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNv
bnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbkhh
bmRsZXJzLnNpemUoKSA+IDEpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxl
cnMucmVtb3ZlTGFzdCgpOworfQorCitib29sIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5l
ZWRlZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzRXhjZXB0aW9uKQoreworICAg
IGlmICghanNFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZXhj
ZXB0aW9uID0ganNjRXhjZXB0aW9uQ3JlYXRlKGNvbnRleHQsIGpzRXhjZXB0aW9uKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgp
KTsKKyAgICBjb25zdCBhdXRvJiBleGNlcHRpb25IYW5kbGVyID0gY29udGV4dC0+cHJpdi0+ZXhj
ZXB0aW9uSGFuZGxlcnMubGFzdCgpOworICAgIGV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlcihjb250
ZXh0LCBleGNlcHRpb24uZ2V0KCksIGV4Y2VwdGlvbkhhbmRsZXIudXNlckRhdGEpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0pTQ0NvbnRleHQqIGpzY19jb250ZXh0X2dldF9jdXJyZW50KCkK
K3sKKyAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tEYXRhKj4oVGhyZWFkOjpj
dXJyZW50KCkubV9hcGlEYXRhKTsKKyAgICByZXR1cm4gZGF0YSA/IGRhdGEtPmNvbnRleHQuZ2V0
KCkgOiBudWxscHRyOworfQorCitKU0NWYWx1ZSoganNjX2NvbnRleHRfZXZhbHVhdGUoSlNDQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY29kZSkKK3sKKyAgICByZXR1cm4ganNjX2NvbnRl
eHRfZXZhbHVhdGVfd2l0aF9zb3VyY2VfdXJpKGNvbnRleHQsIGNvZGUsIG51bGxwdHIpOworfQor
CitKU0NWYWx1ZSoganNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3VyY2VfdXJpKEpTQ0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvZGUsIGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29kZSwgbnVsbHB0cik7CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlw
dEpTKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb2RlKSk7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNvdXJjZVVSSSA9IHVyaSA/IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHVyaSkpIDogbnVsbHB0cjsKKyAgICBKU1ZhbHVlUmVmIHJlc3Vs
dCA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgpLCBzY3Jp
cHRKUy5nZXQoKSwgbnVsbHB0ciwgc291cmNlVVJJLmdldCgpLCAxLCAmZXhjZXB0aW9uKTsKKyAg
ICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlv
bikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCByZXN1bHQpLmxl
YWtSZWYoKTsKK30KKwordm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogbmFtZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
bmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKworICAg
IGF1dG8gY29udGV4dE9iamVjdCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQs
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkp
KTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShjb250ZXh0T2JqZWN0LmdldCgp
LCBuYW1lLCB2YWx1ZSk7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfY29udGV4dF9nZXRfdmFsdWUoSlND
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGNvbnRleHRPYmplY3QgPSBq
c2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmpl
Y3QoY29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIGpzY192YWx1
ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGNvbnRleHRPYmplY3QuZ2V0KCksIG5hbWUpOworfQorCitK
U0NDbGFzcyoganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoSlNDQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENsYXNzLCBHRGVzdHJveU5vdGlmeSBk
ZXN0cm95RnVuY3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRF
WFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIG51
bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFwYXJlbnRDbGFzcyB8fCBKU0NfSVNf
Q0xBU1MocGFyZW50Q2xhc3MpLCBudWxscHRyKTsKKworICAgIGF1dG8ganNjQ2xhc3MgPSBqc2ND
bGFzc0NyZWF0ZShjb250ZXh0LCBuYW1lLCBwYXJlbnRDbGFzcywgZGVzdHJveUZ1bmN0aW9uKTsK
KyAgICB3cmFwcGVyTWFwKGNvbnRleHQpLnJlZ2lzdGVyQ2xhc3MoanNjQ2xhc3MuZ2V0KCkpOwor
ICAgIHJldHVybiBqc2NDbGFzcy5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4zNzgyZjBlOWMxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDQ29udGV4dF9oCisjZGVm
aW5lIEpTQ0NvbnRleHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxq
c2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NFeGNlcHRpb24uaD4KKyNpbmNsdWRl
IDxqc2MvSlNDQ2xhc3MuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKyNpbmNsdWRlIDxq
c2MvSlNDVmlydHVhbE1hY2hpbmUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19U
WVBFX0NPTlRFWFQgICAgICAgICAgICAoanNjX2NvbnRleHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
SlNDX0NPTlRFWFQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgSlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dCkpCisjZGVmaW5lIEpTQ19JU19DT05U
RVhUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19U
WVBFX0NPTlRFWFQpKQorI2RlZmluZSBKU0NfQ09OVEVYVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0
Q2xhc3MpKQorI2RlZmluZSBKU0NfSVNfQ09OVEVYVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9DT05URVhUKSkKKyNkZWZpbmUgSlNDX0NP
TlRFWFRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
SlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pT
Q0NvbnRleHQgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgSlND
Q29udGV4dENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIEpTQ0NvbnRl
eHRQcml2YXRlOworCit0eXBlZGVmIHZvaWQgKCogSlNDRXhjZXB0aW9uSGFuZGxlcikgKEpTQ0Nv
bnRleHQgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SlNDRXhjZXB0aW9uICpleGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyICAgICAgdXNlcl9kYXRhKTsKKworc3RydWN0IF9KU0NDb250ZXh0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ0NvbnRl
eHRQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2
b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsK
K307CisKK0pTQ19BUEkgR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAgICAgICAgICAgICAg
ICAodm9pZCk7CisKK0pTQ19BUEkgSlNDQ29udGV4dCAqCitqc2NfY29udGV4dF9uZXcgICAgICAg
ICAgICAgICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJIEpTQ0NvbnRleHQgKgoranNjX2NvbnRl
eHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lIChKU0NWaXJ0dWFsTWFjaGluZSAgKnZtKTsKKwor
SlNDX0FQSSBKU0NWaXJ0dWFsTWFjaGluZSAqCitqc2NfY29udGV4dF9nZXRfdmlydHVhbF9tYWNo
aW5lICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgSlNDRXhj
ZXB0aW9uICoKK2pzY19jb250ZXh0X2dldF9leGNlcHRpb24gICAgICAgICAgICAoSlNDQ29udGV4
dCAgICAgICAgICpjb250ZXh0KTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF90aHJvdyAg
ICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICplcnJvcl9t
ZXNzYWdlKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24gICAg
ICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSlNDRXhjZXB0aW9uICAgICAgICpleGNlcHRpb24pOworCitKU0Nf
QVBJIHZvaWQKK2pzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIgICAoSlNDQ29udGV4
dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBKU0NFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgdXNlcl9kYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgIGRlc3Ryb3lfbm90
aWZ5KTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIg
ICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgSlNDQ29udGV4dCAq
Citqc2NfY29udGV4dF9nZXRfY3VycmVudCAgICAgICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJ
IEpTQ1ZhbHVlICoKK2pzY19jb250ZXh0X2V2YWx1YXRlICAgICAgICAgICAgICAgICAoSlNDQ29u
dGV4dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICAgICAgICAgKmNvZGUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pz
Y19jb250ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaSAoSlNDQ29udGV4dCAgICAgICAgICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICAgICAgICAgKmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgICAgICAgICAqdXJpKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF9zZXRf
dmFsdWUgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAgICAg
ICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfY29udGV4dF9nZXRfdmFsdWUg
ICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1lKTsKKwor
SlNDX0FQSSBKU0NDbGFzcyAqCitqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyAgICAgICAgICAg
KEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBKU0NDbGFzcyAgICAgICAgICAgKnBhcmVudF9jbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgICAgICBk
ZXN0cm95X2Z1bmN0aW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIEpTQ0NvbnRleHRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRl
eHRQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTgwZGExODBi
N2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dFByaXZhdGUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2lu
Y2x1ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorI2luY2x1ZGUgIkpT
Q29udGV4dFJlZi5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworR1JlZlB0cjxK
U0NDb250ZXh0PiBqc2NDb250ZXh0R2V0T3JDcmVhdGUoSlNHbG9iYWxDb250ZXh0UmVmKTsKK0pT
R2xvYmFsQ29udGV4dFJlZiBqc2NDb250ZXh0R2V0SlNDb250ZXh0KEpTQ0NvbnRleHQqKTsKK0dS
ZWZQdHI8SlNDVmFsdWU+IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKEpTQ0NvbnRleHQqLCBK
U1ZhbHVlUmVmKTsKK3ZvaWQganNjQ29udGV4dFZhbHVlRGVzdHJveWVkKEpTQ0NvbnRleHQqLCBK
U1ZhbHVlUmVmKTsKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoSlNDQ29u
dGV4dCosIGdwb2ludGVyKTsKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRPckNyZWF0ZUpT
V3JhcHBlcihKU0NDb250ZXh0KiwgSlNDbGFzc1JlZiwgSlNWYWx1ZVJlZiBwcm90b3R5cGUgPSBu
dWxscHRyLCBncG9pbnRlciA9IG51bGxwdHIsIEdEZXN0cm95Tm90aWZ5ID0gbnVsbHB0cik7Citn
cG9pbnRlciBqc2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0NDb250ZXh0KiwgSlNPYmplY3RSZWYp
OworCitzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKKyAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRl
eHQ7CisgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IHByZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBK
U1ZhbHVlUmVmIGNhbGxlZVZhbHVlOworICAgIEpTVmFsdWVSZWYgdGhpc1ZhbHVlOworICAgIHNp
emVfdCBhcmd1bWVudENvdW50OworICAgIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50czsKKwor
ICAgIENhbGxiYWNrRGF0YSogbmV4dDsKK307CitDYWxsYmFja0RhdGEganNjQ29udGV4dFB1c2hD
YWxsYmFjayhKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZiBjYWxsZWVWYWx1ZSwgSlNWYWx1ZVJlZiB0
aGlzVmFsdWUsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmKiBhcmd1bWVu
dHMpOwordm9pZCBqc2NDb250ZXh0UG9wQ2FsbGJhY2soSlNDQ29udGV4dCosIENhbGxiYWNrRGF0
YSYmKTsKKworYm9vbCBqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoSlNDQ29udGV4
dCosIEpTVmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NDb250ZXh0R0FycmF5VG9KU0FycmF5KEpT
Q0NvbnRleHQqLCBHUHRyQXJyYXkqLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworSlNWYWx1ZVJl
ZiBqc2NDb250ZXh0R1ZhbHVlVG9KU1ZhbHVlKEpTQ0NvbnRleHQqLCBjb25zdCBHVmFsdWUqLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pOwordm9pZCBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKEpT
Q0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBHVHlwZSwgR1ZhbHVlKiwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRGVmaW5lcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jM2ZmYTJiNGZkYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgKQEAg
LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NP
TVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NEZWZpbmVzX2gKKyNkZWZpbmUgSlNDRGVmaW5l
c19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRlZiBHX09TX1dJTjMyCisjICAgIGlmIGRl
ZmluZWQoQlVJTERJTkdfSmF2YVNjcmlwdENvcmUpIHx8IGRlZmluZWQoU1RBVElDQUxMWV9MSU5L
RURfV0lUSF9KYXZhU2NyaXB0Q29yZSkKKyMgICAgICAgIGRlZmluZSBKU0NfQVBJIF9fZGVjbHNw
ZWMoZGxsZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgICBkZWZpbmUgSlNDX0FQSSBfX2RlY2xz
cGVjKGRsbGltcG9ydCkKKyMgICAgZW5kaWYKKyNlbHNlCisjICAgIGRlZmluZSBKU0NfQVBJIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisjZW5kaWYKKworI2RlZmluZSBK
U0NfREVQUkVDQVRFRCBKU0NfQVBJIEdfREVQUkVDQVRFRAorI2RlZmluZSBKU0NfREVQUkVDQVRF
RF9GT1IoZikgSlNDX0FQSSBHX0RFUFJFQ0FURURfRk9SKGYpCisKKyNlbmRpZiAvKiBKU0NEZWZp
bmVzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NF
eGNlcHRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzMGQzOTU5M2Zm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4
Y2VwdGlvbi5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0V4Y2VwdGlvbi5o
IgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgi
CisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1
ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK3R5cGVkZWYgc3RydWN0
IF9KU0NFeGNlcHRpb25Qcml2YXRlIHsKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0OworICAgIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGpzRXhjZXB0aW9uOworICAgIGJvb2wgY2FjaGVkOwor
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVzc2FnZTsKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwor
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlVVJJOworfSBKU0NFeGNlcHRpb25Qcml2YXRlOwor
CitXRUJLSVRfREVGSU5FX1RZUEUoSlNDRXhjZXB0aW9uLCBqc2NfZXhjZXB0aW9uLCBHX1RZUEVf
T0JKRUNUKQorCitzdGF0aWMgdm9pZCBqc2NFeGNlcHRpb25EaXNwb3NlKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBKU0NFeGNlcHRpb25Qcml2YXRlKiBwcml2ID0gSlNDX0VYQ0VQVElPTihvYmpl
Y3QpLT5wcml2OworICAgIGlmIChwcml2LT5jb250ZXh0KSB7CisgICAgICAgIGdfb2JqZWN0X3Jl
bW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocHJpdi0+Y29udGV4dCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmcHJpdi0+Y29udGV4dCkpOworICAgICAgICBwcml2LT5jb250ZXh0ID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfZXhjZXB0aW9uX3BhcmVudF9j
bGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQganNjX2V4Y2VwdGlvbl9j
bGFzc19pbml0KEpTQ0V4Y2VwdGlvbkNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iakNsYXNzLT5kaXNwb3Nl
ID0ganNjRXhjZXB0aW9uRGlzcG9zZTsKK30KKworR1JlZlB0cjxKU0NFeGNlcHRpb24+IGpzY0V4
Y2VwdGlvbkNyZWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzRXhjZXB0aW9u
KQoreworICAgIEdSZWZQdHI8SlNDRXhjZXB0aW9uPiBleGNlcHRpb24gPSBhZG9wdEdSZWYoSlND
X0VYQ0VQVElPTihnX29iamVjdF9uZXcoSlNDX1RZUEVfRVhDRVBUSU9OLCBudWxscHRyKSkpOwor
ICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7Cisg
ICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGpzQ29udGV4dCk7CisgICAgSlNDOjpWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
ZXhjZXB0aW9uLT5wcml2LT5qc0V4Y2VwdGlvbi5zZXQodm0sIHRvSlMoSlNWYWx1ZVRvT2JqZWN0
KGpzQ29udGV4dCwganNFeGNlcHRpb24sIG51bGxwdHIpKSk7CisgICAgLy8gVGhlIGNvbnRleHQg
aGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgZXhjZXB0aW9uLCBzbyB3ZSBjYW4ndCByZWYg
dGhlIGNvbnRleHQuIFdlIHVzZSBhIHdlYWsKKyAgICAvLyBwb2ludGVyIGluc3RlYWQgdG8gaW52
YWxpZGF0ZSB0aGUgZXhjZXB0aW9uIGlmIHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZCBiZWZvcmUu
CisgICAgZXhjZXB0aW9uLT5wcml2LT5jb250ZXh0ID0gY29udGV4dDsKKyAgICBnX29iamVjdF9h
ZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJmV4Y2VwdGlvbi0+cHJpdi0+Y29udGV4dCkpOworICAgIHJldHVybiBleGNlcHRpb247Cit9
CisKK0pTVmFsdWVSZWYganNjRXhjZXB0aW9uR2V0SlNWYWx1ZShKU0NFeGNlcHRpb24qIGV4Y2Vw
dGlvbikKK3sKKyAgICByZXR1cm4gdG9SZWYoZXhjZXB0aW9uLT5wcml2LT5qc0V4Y2VwdGlvbi5n
ZXQoKSk7Cit9CisKK3ZvaWQganNjRXhjZXB0aW9uRW5zdXJlUHJvcGVydGllcyhKU0NFeGNlcHRp
b24qIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NFeGNlcHRpb25Qcml2YXRlKiBwcml2ID0gZXhjZXB0
aW9uLT5wcml2OworICAgIGlmIChwcml2LT5jYWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IHByaXYtPmNhY2hlZCA9IHRydWU7CisKKyAgICBhdXRvIHZhbHVlID0ganNjQ29udGV4dEdldE9y
Q3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYocHJpdi0+anNFeGNlcHRpb24uZ2V0KCkp
KTsKKyAgICBhdXRvIHByb3BlcnR5VmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9n
ZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJtZXNzYWdlIikpOworICAgIGlmICghanNjX3ZhbHVl
X2lzX3VuZGVmaW5lZChwcm9wZXJ0eVZhbHVlLmdldCgpKSkKKyAgICAgICAgcHJpdi0+bWVzc2Fn
ZS5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHByb3BlcnR5VmFsdWUuZ2V0KCkpKTsKKyAgICBw
cm9wZXJ0eVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZh
bHVlLmdldCgpLCAibGluZSIpKTsKKyAgICBpZiAoIWpzY192YWx1ZV9pc191bmRlZmluZWQocHJv
cGVydHlWYWx1ZS5nZXQoKSkpCisgICAgICAgIHByaXYtPmxpbmVOdW1iZXIgPSBqc2NfdmFsdWVf
dG9faW50MzIocHJvcGVydHlWYWx1ZS5nZXQoKSk7CisgICAgcHJvcGVydHlWYWx1ZSA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgInNvdXJjZVVS
TCIpKTsKKyAgICBpZiAoIWpzY192YWx1ZV9pc191bmRlZmluZWQocHJvcGVydHlWYWx1ZS5nZXQo
KSkpCisgICAgICAgIHByaXYtPnNvdXJjZVVSSS5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHBy
b3BlcnR5VmFsdWUuZ2V0KCkpKTsKK30KKworY29uc3QgY2hhcioganNjX2V4Y2VwdGlvbl9nZXRf
bWVzc2FnZShKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbiksIG51bGxwdHIpOworCisgICAgSlNDRXhj
ZXB0aW9uUHJpdmF0ZSogcHJpdiA9IGV4Y2VwdGlvbi0+cHJpdjsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChwcml2LT5jb250ZXh0LCBudWxscHRyKTsKKworICAgIGpzY0V4Y2VwdGlvbkVuc3Vy
ZVByb3BlcnRpZXMoZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gcHJpdi0+bWVzc2FnZS5nZXQoKTsK
K30KKworZ3VpbnQganNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoSlNDRXhjZXB0aW9uKiBl
eGNlcHRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihl
eGNlcHRpb24pLCAwKTsKKworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYgPSBleGNlcHRp
b24tPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJpdi0+Y29udGV4dCwgMCk7CisK
KyAgICBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IHByaXYtPmxpbmVOdW1iZXI7Cit9CisKK2NvbnN0IGNoYXIqIGpzY19leGNlcHRpb25fZ2V0X3Nv
dXJjZV91cmkoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBudWxscHRyKTsKKworICAgIEpTQ0V4
Y2VwdGlvblByaXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBqc2NFeGNlcHRpb25FbnN1
cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYtPnNvdXJjZVVSSS5nZXQo
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNl
cHRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDJhOGQ4MDg4MmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9u
LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFU
SU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBKU0NFeGNlcHRpb25faAorI2RlZmluZSBKU0NFeGNlcHRpb25f
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfRVhDRVBUSU9OICAgICAgICAg
ICAgKGpzY19leGNlcHRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0VYQ0VQVElPTihvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9F
WENFUFRJT04sIEpTQ0V4Y2VwdGlvbikpCisjZGVmaW5lIEpTQ19JU19FWENFUFRJT04ob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfRVhDRVBU
SU9OKSkKKyNkZWZpbmUgSlNDX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04sIEpTQ0V4Y2VwdGlvbkNs
YXNzKSkKKyNkZWZpbmUgSlNDX0lTX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04pKQorI2RlZmluZSBKU0Nf
RVhDRVBUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIEpTQ19UWVBFX0VYQ0VQVElPTiwgSlNDRXhjZXB0aW9uQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfSlNDRXhjZXB0aW9uIEpTQ0V4Y2VwdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNl
cHRpb25DbGFzcyBKU0NFeGNlcHRpb25DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRp
b25Qcml2YXRlIEpTQ0V4Y2VwdGlvblByaXZhdGU7CisKK3N0cnVjdCBfSlNDRXhjZXB0aW9uIHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ0V4Y2Vw
dGlvblByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX0pTQ0V4Y2VwdGlvbkNsYXNzIHsKKyAg
ICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQw
KSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAo
Kl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9p
ZCk7Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfZXhjZXB0aW9uX2dldF90eXBlICAgICAgICAo
dm9pZCk7CisKK0pTQ19BUEkgY29uc3QgY2hhciAqCitqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdl
ICAgICAoSlNDRXhjZXB0aW9uICpleGNlcHRpb24pOworCitKU0NfQVBJIGd1aW50Citqc2NfZXhj
ZXB0aW9uX2dldF9saW5lX251bWJlciAoSlNDRXhjZXB0aW9uICpleGNlcHRpb24pOworCitKU0Nf
QVBJIGNvbnN0IGNoYXIgKgoranNjX2V4Y2VwdGlvbl9nZXRfc291cmNlX3VyaSAgKEpTQ0V4Y2Vw
dGlvbiAqZXhjZXB0aW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIEpTQ0V4Y2VwdGlv
bl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhj
ZXB0aW9uUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2Vw
dGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmI1
ZGJjMGQxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDRXhjZXB0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1Jl
ZlB0ci5oPgorCitHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4ganNjRXhjZXB0aW9uQ3JlYXRlKEpTQ0Nv
bnRleHQqLCBKU1ZhbHVlUmVmKTsKK0pTVmFsdWVSZWYganNjRXhjZXB0aW9uR2V0SlNWYWx1ZShK
U0NFeGNlcHRpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NHTGliV3JhcHBlck9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmMyY2FiYTliNWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmgKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNDR0xpYldyYXBwZXJPYmplY3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIEpTQ0dMaWJXcmFwcGVyT2JqZWN0KGdwb2ludGVyIG9iamVj
dCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQorICAgICAgICA6IG1fb2JqZWN0KG9i
amVjdCkKKyAgICAgICAgLCBtX2Rlc3Ryb3lGdW5jdGlvbihkZXN0cm95RnVuY3Rpb24pCisgICAg
eworICAgIH0KKworICAgIH5KU0NHTGliV3JhcHBlck9iamVjdCgpCisgICAgeworICAgICAgICBp
ZiAobV9kZXN0cm95RnVuY3Rpb24pCisgICAgICAgICAgICBtX2Rlc3Ryb3lGdW5jdGlvbihtX29i
amVjdCk7CisgICAgfQorCisgICAgZ3BvaW50ZXIgb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBncG9pbnRlciBtX29iamVjdCB7IG51bGxwdHIgfTsK
KyAgICBHRGVzdHJveU5vdGlmeSBtX2Rlc3Ryb3lGdW5jdGlvbiB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NW
YWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVjMjgyZTg1
NzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q1ZhbHVlLmNwcApAQCAtMCwwICsxLDU5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKwor
I2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJKU0NDYWxsYmFja0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgi
CisjaW5jbHVkZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworZW51bSB7
CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9DT05URVhULAorfTsKKwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ1ZhbHVlUHJpdmF0ZSB7CisgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0OworICAg
IEpTVmFsdWVSZWYganNWYWx1ZTsKK30gSlNDVmFsdWVQcml2YXRlOworCitXRUJLSVRfREVGSU5F
X1RZUEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
anNjVmFsdWVHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSog
cHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wSUQpIHsK
KyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBw
YXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjVmFsdWVTZXRQcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19WQUxV
RShvYmplY3QpLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1Bf
Q09OVEVYVDoKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IEpTQ19DT05URVhUKGdfdmFsdWVfZ2V0
X29iamVjdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3Bl
Yyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWYWx1ZURpc3Bvc2UoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5w
cml2OworCisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsKKyAgICAgICAgYXV0byoganNDb250ZXh0
ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSk7CisgICAgICAgIGpz
Y0NvbnRleHRWYWx1ZURlc3Ryb3llZChwcml2LT5jb250ZXh0LmdldCgpLCBwcml2LT5qc1ZhbHVl
KTsKKyAgICAgICAgcHJpdi0+anNWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPmNvbnRl
eHQgPSBudWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY192YWx1ZV9wYXJl
bnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY192YWx1ZV9j
bGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2Jq
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBvYmpDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0ganNjVmFsdWVHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
anNjVmFsdWVTZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9IGpzY1ZhbHVlRGlz
cG9zZTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisg
ICAgICAgIFBST1BfQ09OVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICJKU0NDb250ZXh0IiwKKyAgICAgICAgICAg
ICJKU0MgQ29udGV4dCIsCisgICAgICAgICAgICBKU0NfVFlQRV9DT05URVhULAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BB
UkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitKU1ZhbHVlUmVmIGpzY1ZhbHVlR2V0SlNWYWx1
ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLT5wcml2LT5qc1ZhbHVlOwor
fQorCitKU0NWYWx1ZSoganNjVmFsdWVDcmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1
ZVJlZiBqc1ZhbHVlKQoreworICAgIGF1dG8qIHZhbHVlID0gSlNDX1ZBTFVFKGdfb2JqZWN0X25l
dyhKU0NfVFlQRV9WQUxVRSwgImNvbnRleHQiLCBjb250ZXh0LCBudWxscHRyKSk7CisgICAgSlNW
YWx1ZVByb3RlY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNWYWx1ZSk7Cisg
ICAgdmFsdWUtPnByaXYtPmpzVmFsdWUgPSBqc1ZhbHVlOworICAgIHJldHVybiB2YWx1ZTsKK30K
KworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKEpTQ0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51
bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQs
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCkpKS5s
ZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9pc191bmRlZmluZWQoSlNDVmFsdWUq
IHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSks
IEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAg
IHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5j
b250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVf
bmV3X251bGwoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29u
dGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdWxsKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCkpKS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1
ZV9pc19udWxsKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChK
U0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYg
PSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzTnVsbChqc2NDb250ZXh0R2V0SlND
b250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworSlNDVmFs
dWUqIGpzY192YWx1ZV9uZXdfbnVtYmVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBudW1i
ZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCks
IG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRl
eHQsIEpTVmFsdWVNYWtlTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIG51
bWJlcikpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX251bWJlcihKU0NW
YWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZh
bHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7
CisgICAgcmV0dXJuIEpTVmFsdWVJc051bWJlcihqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYt
PmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworZG91YmxlIGpzY192YWx1ZV90
b19kb3VibGUoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpT
Q19JU19WQUxVRSh2YWx1ZSksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCkpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZVRv
TnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYt
PmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnaW50MzIganNjX3ZhbHVlX3RvX2ludDMyKEpTQ1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKGpzY192YWx1ZV90b19kb3VibGUodmFsdWUpKTsK
K30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfYm9vbGVhbihKU0NDb250ZXh0KiBjb250ZXh0
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09O
VEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3Jl
YXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VCb29sZWFuKGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQoY29udGV4dCksIHZhbHVlKSkubGVha1JlZigpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVf
aXNfYm9vbGVhbihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc0Jvb2xlYW4oanNjQ29udGV4dEdl
dEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKK2di
b29sZWFuIGpzY192YWx1ZV90b19ib29sZWFuKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NW
YWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZVRvQm9v
bGVhbihqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5q
c1ZhbHVlKTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfc3RyaW5nKEpTQ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBKU1ZhbHVlUmVmIGpz
U3RyaW5nVmFsdWU7CisgICAgaWYgKHN0cmluZykgeworICAgICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
cmluZykpOworICAgICAgICBqc1N0cmluZ1ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNjQ29u
dGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNTdHJpbmcuZ2V0KCkpOworICAgIH0gZWxzZQor
ICAgICAgICBqc1N0cmluZ1ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNy
ZWF0ZVZhbHVlKGNvbnRleHQsIGpzU3RyaW5nVmFsdWUpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xl
YW4ganNjX3ZhbHVlX2lzX3N0cmluZyhKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQ
cml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc1N0cmluZyhq
c2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVl
KTsKK30KKworY2hhcioganNjX3ZhbHVlX3RvX3N0cmluZyhKU0NWYWx1ZSogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisK
KyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3Ry
aW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJp
di0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pKTsKKyAgICBpZiAo
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6ZV90IG1heFNpemUg
PSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoanNTdHJpbmcuZ2V0KCkpOworICAg
IGF1dG8qIHN0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhtYXhTaXplKSk7Cisg
ICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZy5nZXQoKSwgc3RyaW5nLCBtYXhTaXpl
KTsKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19hcnJh
eShKU0NDb250ZXh0KiBjb250ZXh0LCBHVHlwZSBmaXJzdEl0ZW1UeXBlLCAuLi4pCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOwor
CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzQ29udGV4
dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgYXV0byoganNBcnJheSA9
IEpTT2JqZWN0TWFrZUFycmF5KGpzQ29udGV4dCwgMCwgbnVsbHB0ciwgJmV4Y2VwdGlvbik7Cisg
ICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBleGNlcHRp
b24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGpzQXJyYXlPYmplY3Qg
PSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBqc0FycmF5LCAmZXhjZXB0aW9uKTsKKyAgICBp
ZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAg
IHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmaXJzdEl0ZW1UeXBlKTsKKyAgICBH
VHlwZSBpdGVtVHlwZSA9IGZpcnN0SXRlbVR5cGU7CisgICAgd2hpbGUgKGl0ZW1UeXBlICE9IEdf
VFlQRV9OT05FKSB7CisgICAgICAgIEdWYWx1ZSBpdGVtOworICAgICAgICBHVW5pcXVlT3V0UHRy
PGNoYXI+IGVycm9yOworICAgICAgICBHX1ZBTFVFX0NPTExFQ1RfSU5JVCgmaXRlbSwgaXRlbVR5
cGUsIGFyZ3MsIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
ICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3Jl
YXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiZmFpbGVkIHRvIGNvbGxl
Y3QgYXJyYXkgaXRlbTogIiwgZXJyb3IuZ2V0KCkpKSk7CisgICAgICAgICAgICBqc2NDb250ZXh0
SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAg
IGpzQXJyYXkgPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvKiBqc1ZhbHVlID0ganNjQ29udGV4dEdWYWx1ZVRvSlNWYWx1ZShjb250ZXh0LCAm
aXRlbSwgJmV4Y2VwdGlvbik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJml0ZW0pOworICAgICAg
ICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlv
bikpIHsKKyAgICAgICAgICAgIGpzQXJyYXkgPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChqc0NvbnRl
eHQsIGpzQXJyYXlPYmplY3QsIGluZGV4LCBqc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICAgICAg
aWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBleGNlcHRpb24p
KSB7CisgICAgICAgICAgICBqc0FycmF5ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaXRlbVR5cGUgPSB2YV9hcmcoYXJncywgR1R5cGUpOworICAg
ICAgICBpbmRleCsrOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4ganNB
cnJheSA/IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGpzQXJyYXkpLmxlYWtS
ZWYoKSA6IG51bGxwdHI7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2FycmF5X2Zyb21f
Z2FycmF5KEpTQ0NvbnRleHQqIGNvbnRleHQsIEdQdHJBcnJheSogZ0FycmF5KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKwor
ICAgIGlmICghZ0FycmF5IHx8ICFnQXJyYXktPmxlbikKKyAgICAgICAgcmV0dXJuIGpzY192YWx1
ZV9uZXdfYXJyYXkoY29udGV4dCwgR19UWVBFX05PTkUpOworCisgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzQXJyYXkgPSBqc2NDb250ZXh0R0FycmF5VG9K
U0FycmF5KGNvbnRleHQsIGdBcnJheSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRI
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250
ZXh0LCBqc0FycmF5KS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9pc19hcnJh
eShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZB
TFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUt
PnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc0FycmF5KGpzY0NvbnRleHRHZXRKU0NvbnRleHQo
cHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitKU0NWYWx1ZSoganNj
X3ZhbHVlX25ld19vYmplY3QoSlNDQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgaW5zdGFuY2Us
IEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNf
Q09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWlu
c3RhbmNlIHx8IEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0dXJu
IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGluc3RhbmNlID8gdG9SZWYoanNj
Q2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihqc2NDbGFzcywgaW5zdGFuY2UpKSA6IEpTT2JqZWN0
TWFrZShqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBudWxscHRyLCBudWxscHRyKSku
bGVha1JlZigpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfb2JqZWN0KEpTQ1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBG
QUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBy
ZXR1cm4gSlNWYWx1ZUlzT2JqZWN0KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4
dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVfb2JqZWN0
X2lzX2luc3RhbmNlX29mKEpTQ1ZhbHVlKiB2YWx1ZSwgSlNDQ2xhc3MqIGpzY0NsYXNzKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBGQUxTRSk7CisK
KyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiBjb25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUocHJp
di0+Y29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgIGF1
dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQo
KSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIEpTT2JqZWN0UmVm
IG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIGNvbnN0cnVjdG9yLT5wcml2LT5q
c1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoanNDb250
ZXh0LCBwcml2LT5qc1ZhbHVlLCBvYmplY3QsIG51bGxwdHIpOworfQorCit2b2lkIGpzY192YWx1
ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogbmFtZSwg
SlNDVmFsdWUqIHByb3BlcnR5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVF
KHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChuYW1lKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKEpTQ19JU19WQUxVRShwcm9wZXJ0eSkpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29u
dGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4
dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eShqc0NvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lLmdldCgpLCBwcm9wZXJ0
eS0+cHJpdi0+anNWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAmZXhjZXB0aW9uKTsK
KyAgICBqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQo
KSwgZXhjZXB0aW9uKTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3Bl
cnR5KEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChuYW1lLCBudWxscHRyKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9
IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxs
cHRyOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQs
IHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisK
KyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBK
U09iamVjdEdldFByb3BlcnR5KGpzQ29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCks
ICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQo
cHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1
ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGpzY0Nv
bnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIHJlc3VsdCkubGVha1Jl
ZigpOworfQorCit2b2lkIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KEpT
Q1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgaW5kZXgsIEpTQ1ZhbHVlKiBwcm9wZXJ0eSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoSlNDX0lTX1ZBTFVFKHByb3BlcnR5KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHBy
aXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlND
b250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
bnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250
ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAg
ICAgIHJldHVybjsKKworICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGpzQ29udGV4dCwg
b2JqZWN0LCBpbmRleCwgcHJvcGVydHktPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAg
IGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBl
eGNlcHRpb24pOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlf
YXRfaW5kZXgoSlNDVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIEpTQ1Zh
bHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpz
Y0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJl
ZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVU
b09iamVjdChqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChq
c2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhj
ZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNv
bnRleHQuZ2V0KCkpOworCisKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGpzQ29udGV4dCwgb2JqZWN0LCBpbmRleCwgJmV4Y2VwdGlvbik7CisgICAg
aWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgp
LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJp
di0+Y29udGV4dC5nZXQoKSk7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFs
dWUocHJpdi0+Y29udGV4dC5nZXQoKSwgcmVzdWx0KS5sZWFrUmVmKCk7Cit9CisKK3N0YXRpYyBH
UmVmUHRyPEpTQ1ZhbHVlPiBqc2NWYWx1ZUNhbGxGdW5jdGlvbihKU0NWYWx1ZSogdmFsdWUsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBHVHlwZSBmaXJzdFBh
cmFtZXRlclR5cGUsIHZhX2xpc3QgYXJncykKK3sKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYg
PSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250
ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBu
dWxscHRyOworICAgIFZlY3RvcjxKU1ZhbHVlUmVmPiBhcmd1bWVudHM7CisgICAgR1R5cGUgcGFy
YW1ldGVyVHlwZSA9IGZpcnN0UGFyYW1ldGVyVHlwZTsKKyAgICB3aGlsZSAocGFyYW1ldGVyVHlw
ZSAhPSBHX1RZUEVfTk9ORSkgeworICAgICAgICBHVmFsdWUgcGFyYW1ldGVyOworICAgICAgICBH
VW5pcXVlT3V0UHRyPGNoYXI+IGVycm9yOworICAgICAgICBHX1ZBTFVFX0NPTExFQ1RfSU5JVCgm
cGFyYW1ldGVyLCBwYXJhbWV0ZXJUeXBlLCBhcmdzLCBHX1ZBTFVFX05PQ09QWV9DT05URU5UUywg
JmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBleGNl
cHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIG1ha2VT
dHJpbmcoImZhaWxlZCB0byBjb2xsZWN0IGZ1bmN0aW9uIHBhcmFtYXRlcjogIiwgZXJyb3IuZ2V0
KCkpKSk7CisgICAgICAgICAgICBqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJp
di0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdEdS
ZWYoanNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSkpOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byoganNWYWx1ZSA9IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUo
cHJpdi0+Y29udGV4dC5nZXQoKSwgJnBhcmFtZXRlciwgJmV4Y2VwdGlvbik7CisgICAgICAgIGdf
dmFsdWVfdW5zZXQoJnBhcmFtZXRlcik7CisgICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAg
ICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgp
LCBqc1ZhbHVlKTsKKworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzVmFsdWUpOworICAgICAg
ICBwYXJhbWV0ZXJUeXBlID0gdmFfYXJnKGFyZ3MsIEdUeXBlKTsKKyAgICB9CisKKyAgICBKU1Zh
bHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LCBmdW5jdGlv
biwgdGhpc09iamVjdCwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5j
b250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpKTsKKworICAgIHJldHVybiBq
c2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCByZXN1bHQpOwor
fQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKEpTQ1ZhbHVlKiB2
YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgR1R5cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCAuLi4pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2ND
b250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9P
YmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNj
Q29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2Vw
dGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250
ZXh0LmdldCgpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtZXRob2ROYW1lKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJl
ZiBmdW5jdGlvblZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShqc0NvbnRleHQsIG9iamVjdCwg
bWV0aG9kTmFtZS5nZXQoKSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAg
ICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisK
KyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIGZ1
bmN0aW9uVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0
dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAg
dmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFyYW1ldGVyVHlwZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBqc2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1ZSwgZnVuY3Rpb24sIG9i
amVjdCwgZmlyc3RQYXJhbWV0ZXJUeXBlLCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAg
ICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKK30KKwordm9pZCBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBKU0NWYWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3MsIEpTQ1ZhbHVlKiBwcm9wZXJ0eVZhbHVl
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChwcm9wZXJ0eU5hbWUpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZGVzY3JpcHRvciA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChwcml2LT5jb250ZXh0LmdldCgpLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdHJ1ZVZhbHVlID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfYm9vbGVhbihwcml2LT5jb250ZXh0LmdldCgpLCBUUlVFKSk7CisgICAgaWYg
KGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX0NPTkZJR1VSQUJMRSkKKyAgICAgICAganNjX3Zh
bHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgImNvbmZpZ3VyYWJsZSIs
IHRydWVWYWx1ZS5nZXQoKSk7CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX0VO
VU1FUkFCTEUpCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0
b3IuZ2V0KCksICJlbnVtZXJhYmxlIiwgdHJ1ZVZhbHVlLmdldCgpKTsKKyAgICBpZiAocHJvcGVy
dHlWYWx1ZSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRv
ci5nZXQoKSwgInZhbHVlIiwgcHJvcGVydHlWYWx1ZSk7CisgICAgaWYgKGZsYWdzICYgSlNDX1ZB
TFVFX1BST1BFUlRZX1dSSVRBQkxFKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9w
ZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAid3JpdGFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworICAg
IEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFs
dWUocHJpdi0+Y29udGV4dC5nZXQoKSwgIk9iamVjdCIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKG9iamVj
dC5nZXQoKSwgImRlZmluZVByb3BlcnR5IiwKKyAgICAgICAgSlNDX1RZUEVfVkFMVUUsIHZhbHVl
LCBHX1RZUEVfU1RSSU5HLCBwcm9wZXJ0eU5hbWUsIEpTQ19UWVBFX1ZBTFVFLCBkZXNjcmlwdG9y
LmdldCgpLCBHX1RZUEVfTk9ORSkpOworfQorCit2b2lkIGpzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2FjY2Vzc29yKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBKU0NWYWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3MsIEdUeXBlIHByb3BlcnR5VHlwZSwgR0Nh
bGxiYWNrIGdldHRlciwgR0NhbGxiYWNrIHNldHRlcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlOYW1l
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfSU5WQUxJRCAm
JiBwcm9wZXJ0eVR5cGUgIT0gR19UWVBFX05PTkUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ2V0
dGVyIHx8IHNldHRlcik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJp
djsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBkZXNjcmlwdG9yID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiB0cnVlVmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19i
b29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0Nf
VkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3Nl
dF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiY29uZmlndXJhYmxlIiwgdHJ1ZVZhbHVlLmdl
dCgpKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJMRSkKKyAg
ICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgImVu
dW1lcmFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSkpOworICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOworICAgIGlmIChnZXR0ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3Vy
ZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhnZXR0ZXIsIG51bGxwdHIsIG51bGxwdHIpKTsK
KyAgICAgICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBBU0NJSUxpdGVy
YWwoImdldCIpLAorICAgICAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpN
ZXRob2QsIG51bGxwdHIsIFdURk1vdmUoY2xvc3VyZSksIHByb3BlcnR5VHlwZSwgeyB9KSk7Cisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0ganNjQ29udGV4dEdldE9yQ3JlYXRl
VmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgZnVuY3Rpb25PYmplY3QpOworICAgICAgICBqc2Nf
dmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiZ2V0IiwgZnVuY3Rp
b24uZ2V0KCkpOworICAgIH0KKyAgICBpZiAoc2V0dGVyKSB7CisgICAgICAgIEdSZWZQdHI8R0Ns
b3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoc2V0dGVyLCBudWxscHRy
LCBudWxscHRyKSk7CisgICAgICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpK
U0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgQVNDSUlMaXRlcmFsKCJzZXQiKSwKKyAgICAgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tGdW5j
dGlvbjo6VHlwZTo6TWV0aG9kLCBudWxscHRyLCBXVEZNb3ZlKGNsb3N1cmUpLCBHX1RZUEVfTk9O
RSwgeyBwcm9wZXJ0eVR5cGUgfSkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlv
biA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIGZ1bmN0
aW9uT2JqZWN0KTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3Jp
cHRvci5nZXQoKSwgInNldCIsIGZ1bmN0aW9uLmdldCgpKTsKKyAgICB9CisgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShwcml2LT5j
b250ZXh0LmdldCgpLCAiT2JqZWN0IikpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2Qob2JqZWN0LmdldCgpLCAi
ZGVmaW5lUHJvcGVydHkiLAorICAgICAgICBKU0NfVFlQRV9WQUxVRSwgdmFsdWUsIEdfVFlQRV9T
VFJJTkcsIHByb3BlcnR5TmFtZSwgSlNDX1RZUEVfVkFMVUUsIGRlc2NyaXB0b3IuZ2V0KCksIEdf
VFlQRV9OT05FKSk7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKEpTQ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgR1R5
cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1Db3VudCwgLi4uKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjYWxsYmFjaywgbnVsbHB0cik7CisKKyAgICB2YV9saXN0IGFyZ3M7
CisgICAgdmFfc3RhcnQoYXJncywgcGFyYW1Db3VudCk7CisgICAgVmVjdG9yPEdUeXBlPiBwYXJh
bWV0ZXJzOworICAgIGlmIChwYXJhbUNvdW50KSB7CisgICAgICAgIHBhcmFtZXRlcnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShwYXJhbUNvdW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMudW5jaGVja2Vk
QXBwZW5kKHZhX2FyZyhhcmdzLCBHVHlwZSkpOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisK
KyAgICBHUmVmUHRyPEdDbG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3
KGNhbGxiYWNrLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCkpOworICAgIEpTQzo6Vk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1
dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVh
dGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbmFtZSA/IFN0cmluZzo6ZnJvbVVU
RjgobmFtZSkgOiBBU0NJSUxpdGVyYWwoImFub255bW91cyIpLAorICAgICAgICBKU0M6OkpTQ0Nh
bGxiYWNrRnVuY3Rpb246OlR5cGU6OkZ1bmN0aW9uLCBudWxscHRyLCBXVEZNb3ZlKGNsb3N1cmUp
LCByZXR1cm5UeXBlLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKSk7CisgICAgcmV0dXJuIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGZ1bmN0aW9uT2JqZWN0KS5sZWFrUmVmKCk7Cit9
CisKK2dib29sZWFuIGpzY192YWx1ZV9pc19mdW5jdGlvbihKU0NWYWx1ZSogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisg
ICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250
ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0g
SlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7Cisg
ICAgcmV0dXJuICFleGNlcHRpb24gPyBKU09iamVjdElzRnVuY3Rpb24oanNDb250ZXh0LCBvYmpl
Y3QpIDogRkFMU0U7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChKU0NW
YWx1ZSogdmFsdWUsIEdUeXBlIGZpcnN0UGFyYW1ldGVyVHlwZSwgLi4uKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgSlND
VmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0g
anNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb24gPSBKU1Zh
bHVlVG9PYmplY3QoanNDb250ZXh0LCB2YWx1ZS0+cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7
CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0
LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmlu
ZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3Rh
cnQoYXJncywgZmlyc3RQYXJhbWV0ZXJUeXBlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGpzY1ZhbHVl
Q2FsbEZ1bmN0aW9uKHZhbHVlLCBmdW5jdGlvbiwgbnVsbHB0ciwgZmlyc3RQYXJhbWV0ZXJUeXBl
LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYo
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMyYmYzNTliOTRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKQEAgLTAsMCAr
MSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZp
bmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJv
ciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgSlNDVmFsdWVfaAorI2RlZmluZSBKU0NWYWx1ZV9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBKU0NfVFlQRV9WQUxVRSAgICAgICAgICAgIChqc2NfdmFsdWVfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgSlNDX1ZBTFVFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZSkpCisjZGVmaW5lIEpTQ19J
U19WQUxVRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBK
U0NfVFlQRV9WQUxVRSkpCisjZGVmaW5lIEpTQ19WQUxVRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWVDbGFz
cykpCisjZGVmaW5lIEpTQ19JU19WQUxVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9WQUxVRSkpCisjZGVmaW5lIEpTQ19WQUxVRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBKU0NfVFlQRV9W
QUxVRSwgSlNDVmFsdWVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZSBKU0NWYWx1
ZTsKK3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZUNsYXNzIEpTQ1ZhbHVlQ2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfSlNDVmFsdWVQcml2YXRlIEpTQ1ZhbHVlUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1
Y3QgX0pTQ0NsYXNzIEpTQ0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgSlNDQ29u
dGV4dDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJB
QkxFID0gMSA8PCAwLAorICAgIEpTQ19WQUxVRV9QUk9QRVJUWV9FTlVNRVJBQkxFICAgPSAxIDw8
IDEsCisgICAgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFICAgICA9IDEgPDwgMgorfSBKU0NW
YWx1ZVByb3BlcnR5RmxhZ3M7CisKK3N0cnVjdCBfSlNDVmFsdWUgeworICAgIEdPYmplY3QgcGFy
ZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgSlNDVmFsdWVQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9KU0NWYWx1ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBl
Citqc2NfdmFsdWVfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK0pT
Q19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld191bmRlZmluZWQgICAgICAgICAgICAgICAg
ICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0KTsKKworSlNDX0FQSSBnYm9vbGVhbgor
anNjX3ZhbHVlX2lzX3VuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAg
ICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19udWxs
ICAgICAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0KTsK
KworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX251bGwgICAgICAgICAgICAgICAgICAg
ICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUg
KgoranNjX3ZhbHVlX25ld19udW1iZXIgICAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQg
ICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAgICAgICAgICAgICAgICBudW1iZXIpOworSlNDX0FQSSBnYm9vbGVhbgor
anNjX3ZhbHVlX2lzX251bWJlciAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAg
ICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgZG91YmxlCitqc2NfdmFsdWVfdG9fZG91YmxlICAg
ICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlND
X0FQSSBnaW50MzIKK2pzY192YWx1ZV90b19pbnQzMiAgICAgICAgICAgICAgICAgICAgICAgIChK
U0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192
YWx1ZV9uZXdfYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAg
ICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiAgICAgICAgICAgICAgdmFsdWUpOworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVl
X2lzX2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV90b19ib29sZWFuICAgICAgICAg
ICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpT
Q1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfc3RyaW5nICAgICAgICAgICAgICAgICAgICAgIChKU0ND
b250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqc3RyaW5nKTsKKworSlNDX0FQSSBn
Ym9vbGVhbgoranNjX3ZhbHVlX2lzX3N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1Zh
bHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgY2hhciAqCitqc2NfdmFsdWVfdG9f
c3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVl
KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2FycmF5ICAgICAgICAgICAg
ICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIGZpcnN0
X2l0ZW1fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4pOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfYXJyYXlfZnJvbV9nYXJy
YXkgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUHRyQXJyYXkgICAgICAgICAgICAqYXJy
YXkpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfYXJyYXkgICAgICAgICAgICAg
ICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NW
YWx1ZSAqCitqc2NfdmFsdWVfbmV3X29iamVjdCAgICAgICAgICAgICAgICAgICAgICAoSlNDQ29u
dGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIGluc3RhbmNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ0NsYXNzICAgICAgICAgICAgICpqc2Nf
Y2xhc3MpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfb2JqZWN0ICAgICAgICAg
ICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBn
Ym9vbGVhbgoranNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZiAgICAgICAgICAgKEpTQ1Zh
bHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU0NDbGFzcyAgICAgICAgICAgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSB2
b2lkCitqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eSAgICAgICAgICAgICAoSlNDVmFsdWUg
ICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAgICAgICpwcm9wZXJ0eSk7CisK
K0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkgICAgICAg
ICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqbmFtZSk7CisKK0pT
Q19BUEkgdm9pZAoranNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXggICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICAgKnByb3Bl
cnR5KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0
eV9hdF9pbmRleCAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBpbmRl
eCk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9k
ICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSAgICAgICAg
ICAgICAgICAgZmlyc3RfcGFyYW1ldGVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfdmFsdWVfb2JqZWN0
X2RlZmluZV9wcm9wZXJ0eV9kYXRhICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICpwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAgICAgICAgICAqcHJvcGVydHlf
dmFsdWUpOworCitKU0NfQVBJIHZvaWQKK2pzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5
X2FjY2Vzc29yIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKnByb3BlcnR5
X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFs
dWVQcm9wZXJ0eUZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICBwcm9wZXJ0eV90eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBn
ZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxi
YWNrICAgICAgICAgICAgIHNldHRlcik7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVl
X25ld19mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSAgICAgICAgICAgICAgICAgcmV0dXJu
X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
ICAgICAgICAgICAgICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLik7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19mdW5j
dGlvbiAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwor
CitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9mdW5jdGlvbl9jYWxsICAgICAgICAgICAg
ICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIGZpcnN0X3BhcmFt
ZXRlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4u
Lik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBKU0NWYWx1ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYyMTQ0MzUzZjU1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCitKU1ZhbHVlUmVmIGpzY1ZhbHVlR2V0
SlNWYWx1ZShKU0NWYWx1ZSopOworSlNDVmFsdWUqIGpzY1ZhbHVlQ3JlYXRlKEpTQ0NvbnRleHQq
LCBKU1ZhbHVlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmlydHVhbE1hY2hpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5mYzZhNDRmYmI0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvV1RGR1R5cGUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5l
UHJpdmF0ZSB7CisgICAgSlNDb250ZXh0R3JvdXBSZWYganNDb250ZXh0R3JvdXA7CisgICAgSGFz
aE1hcDxKU0dsb2JhbENvbnRleHRSZWYsIEpTQ0NvbnRleHQqPiBjb250ZXh0Q2FjaGU7Cit9IEpT
Q1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZTsKKworV0VCS0lUX0RFRklORV9UWVBFKEpTQ1ZpcnR1YWxN
YWNoaW5lLCBqc2NfdmlydHVhbF9tYWNoaW5lLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgU3Rh
dGljTG9jayB3cmFwcGVyQ2FjaGVNdXRleDsKKworc3RhdGljIEhhc2hNYXA8SlNDb250ZXh0R3Jv
dXBSZWYsIEpTQ1ZpcnR1YWxNYWNoaW5lKj4mIHdyYXBwZXJNYXAoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoTWFwPEpTQ29udGV4dEdyb3VwUmVmLCBKU0NWaXJ0dWFsTWFjaGlu
ZSo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIHZvaWQgYWRkV3JhcHBlcihK
U0NvbnRleHRHcm91cFJlZiBncm91cCwgSlNDVmlydHVhbE1hY2hpbmUqIHZtKQoreworICAgIHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4KTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghd3JhcHBlck1hcCgpLmNvbnRhaW5zKGdyb3VwKSk7CisgICAgd3JhcHBl
ck1hcCgpLnNldChncm91cCwgdm0pOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVXcmFwcGVyKEpT
Q29udGV4dEdyb3VwUmVmIGdyb3VwKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh3cmFwcGVyTWFw
KCkuY29udGFpbnMoZ3JvdXApKTsKKyAgICB3cmFwcGVyTWFwKCkucmVtb3ZlKGdyb3VwKTsKK30K
Kworc3RhdGljIHZvaWQganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0R3JvdXAoSlNDVmlydHVh
bE1hY2hpbmUgKnZtLCBKU0NvbnRleHRHcm91cFJlZiBncm91cCkKK3sKKyAgICBpZiAoZ3JvdXAp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7Cisg
ICAgICAgIHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCA9IGdyb3VwOworICAgICAgICBKU0NvbnRl
eHRHcm91cFJldGFpbih2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgICAgICBhZGRXcmFw
cGVyKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCwgdm0pOworICAgIH0gZWxzZSBpZiAodm0tPnBy
aXYtPmpzQ29udGV4dEdyb3VwKSB7CisgICAgICAgIHJlbW92ZVdyYXBwZXIodm0tPnByaXYtPmpz
Q29udGV4dEdyb3VwKTsKKyAgICAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKHZtLT5wcml2LT5q
c0NvbnRleHRHcm91cCk7CisgICAgICAgIHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCA9IG51bGxw
dHI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWaXJ0dWFsTWFjaGluZUVuc3VyZUNvbnRl
eHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSAqdm0pCit7CisgICAgaWYgKHZtLT5wcml2LT5qc0Nv
bnRleHRHcm91cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byoganNDb250ZXh0R3JvdXAg
PSBKU0NvbnRleHRHcm91cENyZWF0ZSgpOworICAgIGpzY1ZpcnR1YWxNYWNoaW5lU2V0Q29udGV4
dEdyb3VwKHZtLCBqc0NvbnRleHRHcm91cCk7CisgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGpz
Q29udGV4dEdyb3VwKTsKK30KKworc3RhdGljIHZvaWQganNjVmlydHVhbE1hY2hpbmVEaXNwb3Nl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NWaXJ0dWFsTWFjaGluZSogdm0gPSBKU0NfVklS
VFVBTF9NQUNISU5FKG9iamVjdCk7CisgICAganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0R3Jv
dXAodm0sIG51bGxwdHIpOworCisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX3ZpcnR1YWxfbWFjaGlu
ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY192
aXJ0dWFsX21hY2hpbmVfY2xhc3NfaW5pdChKU0NWaXJ0dWFsTWFjaGluZUNsYXNzKiBrbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwor
ICAgIG9iakNsYXNzLT5kaXNwb3NlID0ganNjVmlydHVhbE1hY2hpbmVEaXNwb3NlOworfQorCitH
UmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiBqc2NWaXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKEpT
Q29udGV4dEdyb3VwUmVmIGpzQ29udGV4dEdyb3VwKQoreworICAgIEdSZWZQdHI8SlNDVmlydHVh
bE1hY2hpbmU+IHZtID0gd3JhcHBlck1hcCgpLmdldChqc0NvbnRleHRHcm91cCk7CisgICAgaWYg
KCF2bSkgeworICAgICAgICB2bSA9IGFkb3B0R1JlZihqc2NfdmlydHVhbF9tYWNoaW5lX25ldygp
KTsKKyAgICAgICAganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0R3JvdXAodm0uZ2V0KCksIGpz
Q29udGV4dEdyb3VwKTsKKyAgICB9CisgICAgcmV0dXJuIHZtOworfQorCitKU0NvbnRleHRHcm91
cFJlZiBqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSog
dm0pCit7CisgICAganNjVmlydHVhbE1hY2hpbmVFbnN1cmVDb250ZXh0R3JvdXAodm0pOworICAg
IHJldHVybiB2bS0+cHJpdi0+anNDb250ZXh0R3JvdXA7Cit9CisKK3ZvaWQganNjVmlydHVhbE1h
Y2hpbmVBZGRDb250ZXh0KEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSwgSlNDQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAg
IGF1dG8ganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBS
RUxFQVNFX0FTU0VSVChKU0NvbnRleHRHZXRHcm91cChqc0NvbnRleHQpID09IHZtLT5wcml2LT5q
c0NvbnRleHRHcm91cCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLT5wcml2LT5jb250ZXh0Q2Fj
aGUuY29udGFpbnMoanNDb250ZXh0KSk7CisgICAgdm0tPnByaXYtPmNvbnRleHRDYWNoZS5zZXQo
anNDb250ZXh0LCBjb250ZXh0KTsKK30KKwordm9pZCBqc2NWaXJ0dWFsTWFjaGluZVJlbW92ZUNv
bnRleHQoSlNDVmlydHVhbE1hY2hpbmUqIHZtLCBKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAg
IFJFTEVBU0VfQVNTRVJUKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgYXV0byBqc0Nv
bnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIFJFTEVBU0VfQVNT
RVJUKEpTQ29udGV4dEdldEdyb3VwKGpzQ29udGV4dCkgPT0gdm0tPnByaXYtPmpzQ29udGV4dEdy
b3VwKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS0+cHJpdi0+Y29udGV4dENhY2hlLmNvbnRhaW5z
KGpzQ29udGV4dCkpOworICAgIHZtLT5wcml2LT5jb250ZXh0Q2FjaGUucmVtb3ZlKGpzQ29udGV4
dCk7Cit9CisKK0pTQ0NvbnRleHQqIGpzY1ZpcnR1YWxNYWNoaW5lR2V0Q29udGV4dChKU0NWaXJ0
dWFsTWFjaGluZSogdm0sIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQpCit7CisgICAgcmV0
dXJuIHZtLT5wcml2LT5jb250ZXh0Q2FjaGUuZ2V0KGpzQ29udGV4dCk7Cit9CisKK0pTQ1ZpcnR1
YWxNYWNoaW5lKiBqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpCit7CisgICAgcmV0dXJuIEpTQ19W
SVJUVUFMX01BQ0hJTkUoZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSwgbnVs
bHB0cikpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
Q1ZpcnR1YWxNYWNoaW5lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmly
dHVhbE1hY2hpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjVj
NjQzZTA5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDVmlydHVhbE1hY2hpbmUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pTQ19IX0lOU0lERV9fKSAmJiAh
ZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPGpzYy9qc2MuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIEpTQ1ZpcnR1YWxNYWNoaW5l
X2gKKyNkZWZpbmUgSlNDVmlydHVhbE1hY2hpbmVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FICAg
ICAgICAgICAgKGpzY192aXJ0dWFsX21hY2hpbmVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX1ZJ
UlRVQUxfTUFDSElORShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUsIEpTQ1ZpcnR1YWxNYWNoaW5lKSkKKyNk
ZWZpbmUgSlNDX0lTX1ZJUlRVQUxfTUFDSElORShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUpKQorI2RlZmluZSBK
U0NfVklSVFVBTF9NQUNISU5FX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSwgSlNDVmlydHVhbE1hY2hpbmVD
bGFzcykpCisjZGVmaW5lIEpTQ19JU19WSVJUVUFMX01BQ0hJTkVfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FKSkK
KyNkZWZpbmUgSlNDX1ZJUlRVQUxfTUFDSElORV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUsIEpTQ1ZpcnR1
YWxNYWNoaW5lQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDVmlydHVhbE1hY2hpbmUgSlND
VmlydHVhbE1hY2hpbmU7Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmlydHVhbE1hY2hpbmVDbGFzcyBK
U0NWaXJ0dWFsTWFjaGluZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5l
UHJpdmF0ZSBKU0NWaXJ0dWFsTWFjaGluZVByaXZhdGU7CisKK3N0cnVjdCBfSlNDVmlydHVhbE1h
Y2hpbmUgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAg
SlNDVmlydHVhbE1hY2hpbmVQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NWaXJ0dWFs
TWFjaGluZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9p
ZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAo
dm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfdmlydHVhbF9t
YWNoaW5lX2dldF90eXBlICh2b2lkKTsKKworSlNDX0FQSSBKU0NWaXJ0dWFsTWFjaGluZSAqCitq
c2NfdmlydHVhbF9tYWNoaW5lX25ldyAgICAgICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIEpTQ1ZpcnR1YWxNYWNoaW5lX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZjOWU3MDcwNGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmVQcml2
YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJK
U0NWaXJ0dWFsTWFjaGluZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworR1Jl
ZlB0cjxKU0NWaXJ0dWFsTWFjaGluZT4ganNjVmlydHVhbE1hY2hpbmVHZXRPckNyZWF0ZShKU0Nv
bnRleHRHcm91cFJlZik7CitKU0NvbnRleHRHcm91cFJlZiBqc2NWaXJ0dWFsTWFjaGluZUdldENv
bnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSopOwordm9pZCBqc2NWaXJ0dWFsTWFjaGluZUFk
ZENvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUqLCBKU0NDb250ZXh0Kik7Cit2b2lkIGpzY1ZpcnR1
YWxNYWNoaW5lUmVtb3ZlQ29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSosIEpTQ0NvbnRleHQqKTsK
K0pTQ0NvbnRleHQqIGpzY1ZpcnR1YWxNYWNoaW5lR2V0Q29udGV4dChKU0NWaXJ0dWFsTWFjaGlu
ZSosIEpTR2xvYmFsQ29udGV4dFJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDV3JhcHBlck1hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmJlMGU3ZDE0YjViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJNYXAuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0NXcmFwcGVyTWFwLmgiCisKKyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAi
SlNBUElXcmFwcGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5j
bHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVj
dC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitX
cmFwcGVyTWFwOjpXcmFwcGVyTWFwKEpTQ0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fY2FjaGVkSlNXcmFwcGVycyhzdGQ6Om1ha2VfdW5pcXVlPEpT
Qzo6V2Vha0dDTWFwPGdwb2ludGVyLCBKU0M6OkpTT2JqZWN0Pj4odG9KUyhqc2NDb250ZXh0R2V0
SlNDb250ZXh0KG1fY29udGV4dCkpLT52bSgpKSkKK3sKK30KKworV3JhcHBlck1hcDo6fldyYXBw
ZXJNYXAoKQoreworICAgIGZvciAoY29uc3QgYXV0byYganNjQ2xhc3MgOiBtX2NsYXNzTWFwLnZh
bHVlcygpKQorICAgICAgICBqc2NDbGFzc0ludmFsaWRhdGUoanNjQ2xhc3MuZ2V0KCkpOworfQor
CitHUmVmUHRyPEpTQ1ZhbHVlPiBXcmFwcGVyTWFwOjpnb2JqZWN0V3JhcHBlcihKU1ZhbHVlUmVm
IGpzVmFsdWUpCit7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4
dChtX2NvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGpzQ29udGV4
dCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHRvSlNHbG9iYWxPYmplY3QoanNDb250ZXh0KS0+d3Jh
cHBlck1hcCgpID09IHRoaXMpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gbV9jYWNo
ZWRHT2JqZWN0V3JhcHBlcnMuZ2V0KGpzVmFsdWUpOworICAgIGlmICghdmFsdWUpIHsKKyAgICAg
ICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjVmFsdWVDcmVhdGUobV9jb250ZXh0LCBqc1ZhbHVlKSk7
CisgICAgICAgIG1fY2FjaGVkR09iamVjdFdyYXBwZXJzLnNldChqc1ZhbHVlLCB2YWx1ZS5nZXQo
KSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBXcmFwcGVyTWFwOjp1bndy
YXAoSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FjaGVkR09i
amVjdFdyYXBwZXJzLmNvbnRhaW5zKGpzVmFsdWUpKTsKKyAgICBtX2NhY2hlZEdPYmplY3RXcmFw
cGVycy5yZW1vdmUoanNWYWx1ZSk7Cit9CisKK3ZvaWQgV3JhcHBlck1hcDo6cmVnaXN0ZXJDbGFz
cyhKU0NDbGFzcyoganNjQ2xhc3MpCit7CisgICAgYXV0byoganNDbGFzcyA9IGpzY0NsYXNzR2V0
SlNDbGFzcyhqc2NDbGFzcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY2xhc3NNYXAuY29udGFp
bnMoanNDbGFzcykpOworICAgIG1fY2xhc3NNYXAuc2V0KGpzQ2xhc3MsIGpzY0NsYXNzKTsKK30K
KworSlNPYmplY3QqIFdyYXBwZXJNYXA6OmNyZWF0ZUpTV3JhcHBwZXIoSlNDbGFzc1JlZiBqc0Ns
YXNzLCBKU1ZhbHVlUmVmIHByb3RvdHlwZSwgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCwgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQoreworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQobV9jb250ZXh0KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGpzQ29udGV4dCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHZtKTsKKyAgICBhdXRvKiBvYmplY3QgPSBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlND
OjpKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsaWJXcmFwcGVyT2JqZWN0U3Ry
dWN0dXJlKCksIGpzQ2xhc3MsIG51bGxwdHIpOworICAgIGlmICh3cmFwcGVkT2JqZWN0KSB7Cisg
ICAgICAgIG9iamVjdC0+c2V0V3JhcHBlZE9iamVjdChuZXcgSlNDOjpKU0NHTGliV3JhcHBlck9i
amVjdCh3cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pKTsKKyAgICAgICAgbV9jYWNoZWRK
U1dyYXBwZXJzLT5zZXQod3JhcHBlZE9iamVjdCwgb2JqZWN0KTsKKyAgICB9CisgICAgaWYgKHBy
b3RvdHlwZSkKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoanNDb250ZXh0LCB0b1JlZihv
YmplY3QpLCBwcm90b3R5cGUpOworICAgIGVsc2UgaWYgKGF1dG8qIGpzUHJvdG90eXBlID0ganND
bGFzcy0+cHJvdG90eXBlKGV4ZWMpKQorICAgICAgICBvYmplY3QtPnNldFByb3RvdHlwZURpcmVj
dCh2bSwganNQcm90b3R5cGUpOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK0pTT2JqZWN0KiBX
cmFwcGVyTWFwOjpqc1dyYXBwZXIoZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCkgY29uc3QKK3sKKyAg
ICBpZiAoIXdyYXBwZWRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBtX2NhY2hlZEpTV3JhcHBlcnMtPmdldCh3cmFwcGVkT2JqZWN0KTsKK30KKworZ3BvaW50ZXIg
V3JhcHBlck1hcDo6d3JhcHBlZE9iamVjdChKU09iamVjdCoganNPYmplY3QpIGNvbnN0Cit7Cisg
ICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChtX2NvbnRleHQpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhqc0NvbnRleHQpKTsKKyAgICBWTSYgdm0gPSB0
b0pTKGpzQ29udGV4dCktPnZtKCk7CisgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cyh2bSwgSlND
OjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6aW5mbygpKSkgewor
ICAgICAgICBpZiAoYXV0byogd3JhcHBlciA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Kj4oanNPYmplY3QpLT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SlNDOjpKU0NHTGliV3JhcHBlck9iamVjdCo+KHdyYXBwZXIpLT5vYmplY3Qo
KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJNYXAu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI4MjkwMWY5NDEyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJNYXAuaApA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNCYXNlLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlICJXZWFrR0NNYXAuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3MgSlNDQ2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfSlNDQ29udGV4dCBKU0NDb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVl
IEpTQ1ZhbHVlOworCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNPYmplY3Q7CisKK2NsYXNz
IFdyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGV4cGxpY2l0IFdyYXBwZXJNYXAoSlNDQ29udGV4dCopOworICAgIH5XcmFwcGVyTWFwKCk7CisK
KyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBnb2JqZWN0V3JhcHBlcihKU1ZhbHVlUmVmKTsKKyAgICB2
b2lkIHVud3JhcChKU1ZhbHVlUmVmKTsKKworICAgIHZvaWQgcmVnaXN0ZXJDbGFzcyhKU0NDbGFz
cyopOworCisgICAgSlNPYmplY3QqIGNyZWF0ZUpTV3JhcHBwZXIoSlNDbGFzc1JlZiwgSlNWYWx1
ZVJlZiBwcm90b3R5cGUsIGdwb2ludGVyLCBHRGVzdHJveU5vdGlmeSk7CisgICAgSlNPYmplY3Qq
IGpzV3JhcHBlcihncG9pbnRlciB3cmFwcGVkT2JqZWN0KSBjb25zdDsKKyAgICBncG9pbnRlciB3
cmFwcGVkT2JqZWN0KEpTT2JqZWN0KiBqc09iamVjdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
SlNDQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgIEhhc2hNYXA8SlNWYWx1ZVJl
ZiwgSlNDVmFsdWUqPiBtX2NhY2hlZEdPYmplY3RXcmFwcGVyczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SlNDOjpXZWFrR0NNYXA8Z3BvaW50ZXIsIEpTQzo6SlNPYmplY3Q+PiBtX2NhY2hlZEpTV3Jh
cHBlcnM7CisgICAgSGFzaE1hcDxKU0NsYXNzUmVmLCBHUmVmUHRyPEpTQ0NsYXNzPj4gbV9jbGFz
c01hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L2pzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOWQ1OGIyNTQy
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2Mu
aApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgX19KU0NfSF9fCisjZGVmaW5lIF9fSlNDX0hfXworCisjZGVmaW5lIF9fSlNDX0hf
SU5TSURFX18KKworI2luY2x1ZGUgPGpzYy9KU0NDbGFzcy5oPgorI2luY2x1ZGUgPGpzYy9KU0ND
b250ZXh0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0RlZmluZXMuaD4KKyNpbmNsdWRlIDxqc2MvSlND
RXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pT
Q1ZpcnR1YWxNYWNoaW5lLmg+CisKKyN1bmRlZiBfX0pTQ19IX0lOU0lERV9fCisKKyNlbmRpZiAv
KiBfX0pTQ19IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA5NDAz
NmRmOTIxMy4uMDI0YTQ4MTZjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTExNzgsNyArMTE3OCw3IEBAIGVuZGlmICgpCiAjIEZvcmNlIHN0YWdpbmcgb2Ygc2hhcmVk
IHNjcmlwdHMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZGlyZWN0bHkgdXNlZCB0byBidWlsZCBKYXZh
U2NyaXB0Q29yZS4KIAogYWRkX2N1c3RvbV90YXJnZXQoc3RhZ2VTaGFyZWRTY3JpcHRzIERFUEVO
RFMgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTfSkKLWFkZF9kZXBlbmRlbmNpZXMoSmF2YVNjcmlw
dENvcmUgc3RhZ2VTaGFyZWRTY3JpcHRzKQorYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29y
ZSBzdGFnZVNoYXJlZFNjcmlwdHMgJHtKYXZhU2NyaXB0Q29yZV9FWFRSQV9ERVBFTkRFTkNJRVN9
KQogCiBpZiAoTVNWQykKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNmU4YTg4M2RjZGMuLjNlNzk1NmFmNjIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xLDEwICsxLDI1IEBACiBz
ZXQoSmF2YVNjcmlwdENvcmVfT1VUUFVUX05BTUUgamF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRH
VEtfQVBJX1ZFUlNJT059KQogCitmaWxlKE1BS0VfRElSRUNUT1JZICR7Rk9SV0FSRElOR19IRUFE
RVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYikKKworbGlzdChBUFBFTkQgSmF2YVNjcmlwdENv
cmVfU09VUkNFUworICAgIEFQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCisgICAg
QVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5jcHAKKyAgICBBUEkvZ2xpYi9KU0NDbGFzcy5j
cHAKKyAgICBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAorICAgIEFQSS9nbGliL0pTQ0V4Y2VwdGlv
bi5jcHAKKyAgICBBUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKKyAgICBBUEkvZ2xpYi9KU0NWaXJ0dWFs
TWFjaGluZS5jcHAKKyAgICBBUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcAorKQorCiBsaXN0KEFQ
UEVORCBKYXZhU2NyaXB0Q29yZV9VTklGSUVEX1NPVVJDRV9MSVNUX0ZJTEVTCiAgICAgIlNvdXJj
ZXNHVEsudHh0IgogKQogCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xV
REVfRElSRUNUT1JJRVMKKyAgICAiJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0
Q29yZS9nbGliIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIiCiAgICAgIiR7
SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIiCiApCiAKQEAgLTUwLDYg
KzY1LDcgQEAgZW5kaWYgKCkKIAogYWRkX2RlZmluaXRpb25zKC1EU1RBVElDQUxMWV9MSU5LRURf
V0lUSF9XVEYpCiBhZGRfZGVmaW5pdGlvbnMoLURMSUJESVI9IiR7TElCX0lOU1RBTExfRElSfSIp
CithZGRfZGVmaW5pdGlvbnMoLURKU0NfQ09NUElMQVRJT04pCiAKIGxpc3QoQVBQRU5EIEphdmFT
Y3JpcHRDb3JlX0xJQlJBUklFUwogICAgICR7R0xJQl9MSUJSQVJJRVN9CkBAIC01NywzICs3Mywx
NiBAQCBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtHTElCX0lOQ0xV
REVfRElSU30KICkKKworIyBUaGVzZSBzeW1ib2xpYyBsaW5rIGFsbG93cyBpbmNsdWRlcyBsaWtl
ICNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPiB3aGljaCBzaW11bGF0ZXMgaW5zdGFsbGVkIGhl
YWRlcnMuCithZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7Rk9SV0FSRElOR19IRUFE
RVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYi9qc2MKKyAgICBERVBFTkRTICR7SkFWQVNDUklQ
VENPUkVfRElSfS9BUEkvZ2xpYgorICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L0FQSS9nbGliICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENv
cmUvZ2xpYi9qc2MKKykKK2FkZF9jdXN0b21fdGFyZ2V0KEpTQy1mYWtlLWFwaS1oZWFkZXJzCisg
ICAgREVQRU5EUyAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIv
anNjCispCitzZXQoSmF2YVNjcmlwdENvcmVfRVhUUkFfREVQRU5ERU5DSUVTCisgICAgSlNDLWZh
a2UtYXBpLWhlYWRlcnMKKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMzQw
OGVjMTQ3ZTEuLmY2OGM4YmFlZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApA
QCAtOTksNiArOTksMTAgQEAgZXh0ZXJuICJDIiB2b2lkIG9iamNfYXV0b3JlbGVhc2VQb29sUG9w
KHZvaWQgKmNvbnRleHQpOwogI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEZPVU5EQVRJT04pCiAKKyNp
ZiBVU0UoR0xJQikKKyNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDYyLDcgKzQ2Niw3
IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogCiB2b2lkIEhlYXA6OnJlbGVh
c2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCkKIHsKLSNpZiBVU0UoRk9VTkRBVElPTikKKyNpZiBV
U0UoRk9VTkRBVElPTikgfHwgVVNFKEdMSUIpCiAgICAgLy8gV2UgbmVlZCB0byBndWFyZCBhZ2Fp
bnN0IHRoZSBjYXNlIHRoYXQgcmVsZWFzaW5nIGFuIG9iamVjdCBjYW4gY3JlYXRlIG1vcmUgb2Jq
ZWN0cyBkdWUgdG8gdGhlCiAgICAgLy8gcmVsZWFzZSBjYWxsaW5nIGludG8gSlMuIFdoZW4gdGhv
c2UgSlMgY2FsbChzKSBleGl0IGFuZCBhbGwgbG9ja3MgYXJlIGJlaW5nIGRyb3BwZWQgd2UgZW5k
IHVwCiAgICAgLy8gYmFjayBoZXJlIGFuZCBjb3VsZCB0cnkgdG8gcmVjdXJzaXZlbHkgcmVsZWFz
ZSBvYmplY3RzLiBXZSBndWFyZCB0aGF0IHdpdGggYSByZWN1cnNpdmUgZW50cnkKQEAgLTQ3NCwx
NSArNDc4LDE5IEBAIHZvaWQgSGVhcDo6cmVsZWFzZURlbGF5ZWRSZWxlYXNlZE9iamVjdHMoKQog
ICAgICAgICB3aGlsZSAoIW1fZGVsYXllZFJlbGVhc2VPYmplY3RzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
Ci0gICAgICAgICAgICBWZWN0b3I8UmV0YWluUHRyPENGVHlwZVJlZj4+IG9iamVjdHNUb1JlbGVh
c2UgPSBXVEZNb3ZlKG1fZGVsYXllZFJlbGVhc2VPYmplY3RzKTsKKyAgICAgICAgICAgIGF1dG8g
b2JqZWN0c1RvUmVsZWFzZSA9IFdURk1vdmUobV9kZWxheWVkUmVsZWFzZU9iamVjdHMpOwogCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkcm9wIGxvY2tzIGJl
Zm9yZSBjYWxsaW5nIG91dCB0byBhcmJpdHJhcnkgY29kZS4KICAgICAgICAgICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobV92bSk7CiAKKyNpZiBVU0UoRk9VTkRBVElP
TikKICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0ID0gb2JqY19hdXRvcmVsZWFzZVBvb2xQ
dXNoKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBvYmplY3RzVG9SZWxlYXNlLmNsZWFyKCk7
CisjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgICAgICAgICAgICAgb2JqY19hdXRvcmVsZWFzZVBv
b2xQb3AoY29udGV4dCk7CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCA1YjUxZGE1ZWU2Yy4uZjJhMDcxMmIzOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTg5LDYgKzg5LDEwIEBAIGNsYXNzIFZN
OwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBDdXJyZW50VGhyZWFkU3RhdGU7CiAKKyNp
ZiBVU0UoR0xJQikKK2NsYXNzIEpTQ0dMaWJXcmFwcGVyT2JqZWN0OworI2VuZGlmCisKIG5hbWVz
cGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiBjbGFzcyBXb3JrbGlzdDsKQEAgLTI3
Miw2ICsyNzYsOSBAQCBwdWJsaWM6CiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCByZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJik7CiAjZW5kaWYKKyNp
ZiBVU0UoR0xJQikKKyAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NHTGli
V3JhcHBlck9iamVjdD4mJik7CisjZW5kaWYKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dD
TWFwKTsKQEAgLTY0Miw2ICs2NDksMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmV0YWluUHRy
PENGVHlwZVJlZj4+IG1fZGVsYXllZFJlbGVhc2VPYmplY3RzOwogICAgIHVuc2lnbmVkIG1fZGVs
YXllZFJlbGVhc2VSZWN1cnNpb25Db3VudDsKICNlbmRpZgorI2lmIFVTRShHTElCKQorICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SlNDR0xpYldyYXBwZXJPYmplY3Q+PiBtX2RlbGF5ZWRSZWxl
YXNlT2JqZWN0czsKKyAgICB1bnNpZ25lZCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQg
eyAwIH07CisjZW5kaWYKIAogICAgIEhhc2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFw
czsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCmluZGV4IGU1
NjFjOTY1MzcwLi4wYTFkYjI5ZDRmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCkBAIC0xNjcsNiArMTY3LDEzIEBAIGlubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VT
b29uKFJldGFpblB0cjxUPiYmIG9iamVjdCkKIH0KICNlbmRpZgogCisjaWYgVVNFKEdMSUIpCitp
bmxpbmUgdm9pZCBIZWFwOjpyZWxlYXNlU29vbihzdGQ6OnVuaXF1ZV9wdHI8SlNDR0xpYldyYXBw
ZXJPYmplY3Q+JiYgb2JqZWN0KQoreworICAgIG1fZGVsYXllZFJlbGVhc2VPYmplY3RzLmFwcGVu
ZChXVEZNb3ZlKG9iamVjdCkpOworfQorI2VuZGlmCisKIGlubGluZSB2b2lkIEhlYXA6OmluY3Jl
bWVudERlZmVycmFsRGVwdGgoKQogewogICAgIEFTU0VSVCghbWF5QmVHQ1RocmVhZCgpIHx8IG1f
d29ybGRJc1N0b3BwZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCmluZGV4IGMyOTkyMjZlYTZlLi41YmMzYzZkYjhiZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTg1
LDYgKzE4NSwxMSBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxl
ci5oIgogI2VuZGlmCiAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorI2luY2x1ZGUgIkpT
Q0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0NXcmFwcGVyTWFwLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3Bl
cnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKQEAgLTU2Nyw3ICs1NzIsMTYgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgICAgICAgICBpbml0LnNldChKU0NhbGxi
YWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBp
bml0Lm93bmVyLCBpbml0Lm93bmVyLT5tX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAgICAg
ICB9KTsKICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgbV9n
bGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtdIChjb25z
dCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChK
U0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwg
aW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKKyAg
ICBtX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlLmluaXRMYXRlcigKKyAgICAgICAgW10gKGNv
bnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0
KEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGlu
aXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7
CisgICAgICAgIH0pOworI2VuZGlmCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQodm0sIHRoaXMs
IEFycmF5UHJvdG90eXBlOjpjcmVhdGUodm0sIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIAogICAg
IG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbVW5kZWNpZGVkU2hhcGUg
Pj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQodm0sIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoVW5kZWNpZGVk
KSk7CkBAIC0xMzU3LDYgKzEzNzEsMTAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAgICAgdGhpc09iamVjdC0+bV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVy
ZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX29iamNXcmFwcGVyT2JqZWN0U3Ry
dWN0dXJlLnZpc2l0KHZpc2l0b3IpOworI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJM
RUQKKyAgICB0aGlzT2JqZWN0LT5tX2dsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLnZpc2l0
KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fZ2xpYldyYXBwZXJPYmplY3RTdHJ1Y3R1cmUu
dmlzaXQodmlzaXRvcik7CiAjZW5kaWYKICAgICB0aGlzT2JqZWN0LT5tX251bGxQcm90b3R5cGVP
YmplY3RTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9lcnJvclN0cnVjdHVyZSk7CkBAIC0xNTg3LDQgKzE2MDUsMTEgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogdGhpc1ZhbHVlKQog
ICAgIHNldEdsb2JhbFRoaXModm0sIHRoaXNWYWx1ZSk7CiB9CiAKKyNpZmRlZiBKU0NfR0xJQl9B
UElfRU5BQkxFRAordm9pZCBKU0dsb2JhbE9iamVjdDo6c2V0V3JhcHBlck1hcChzdGQ6OnVuaXF1
ZV9wdHI8V3JhcHBlck1hcD4mJiBtYXApCit7CisgICAgbV93cmFwcGVyTWFwID0gV1RGTW92ZSht
YXApOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggY2VmZTZkNTVhNzIuLjg5YzFl
YzljNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTExNiw2ICsxMTYsMTAgQEAgY2xhc3MgVmFyaWFibGVFbnZpcm9ubWVudDsKIHN0
cnVjdCBBY3RpdmF0aW9uU3RhY2tOb2RlOwogc3RydWN0IEhhc2hUYWJsZTsKIAorI2lmZGVmIEpT
Q19HTElCX0FQSV9FTkFCTEVECitjbGFzcyBXcmFwcGVyTWFwOworI2VuZGlmCisKIHRlbXBsYXRl
PHR5cGVuYW1lIFdhdGNocG9pbnQ+IGNsYXNzIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50OwogCiAjZGVmaW5lIERFRklORV9TVEFOREFSRF9CVUlMVElOKG1hY3JvLCB1cHBl
ck5hbWUsIGxvd2VyTmFtZSkgbWFjcm8odXBwZXJOYW1lLCBsb3dlck5hbWUsIGxvd2VyTmFtZSwg
SlMgIyMgdXBwZXJOYW1lLCB1cHBlck5hbWUsIG9iamVjdCkKQEAgLTMyNCw2ICszMjgsMTAgQEAg
cHVibGljOgogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgTGF6eVByb3BlcnR5PEpTR2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CiAg
ICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fb2JqY1dyYXBwZXJP
YmplY3RTdHJ1Y3R1cmU7CisjZW5kaWYKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAg
IExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2dsaWJDYWxsYmFja0Z1
bmN0aW9uU3RydWN0dXJlOworICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0
dXJlPiBtX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlOwogI2VuZGlmCiAgICAgTGF6eVByb3Bl
cnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVj
dHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxlZVN0cnVjdHVyZTsKQEAg
LTYzNSw2ICs2NDMsMTAgQEAgcHVibGljOgogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAg
U3RydWN0dXJlKiBvYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0
dXJlKiBvYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqY1dy
YXBwZXJPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisjZW5kaWYKKyNpZmRlZiBKU0NfR0xJ
Ql9BUElfRU5BQkxFRAorICAgIFN0cnVjdHVyZSogZ2xpYkNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX2dsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCh0
aGlzKTsgfQorICAgIFN0cnVjdHVyZSogZ2xpYldyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlLmdldCh0aGlzKTsgfQogI2Vu
ZGlmCiAgICAgU3RydWN0dXJlKiBkYXRlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRl
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbnVsbFByb3RvdHlwZU9iamVj
dFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVy
ZS5nZXQodGhpcyk7IH0KQEAgLTg4OCw3ICs5MDAsMTEgQEAgcHVibGljOgogICAgIEpTV3JhcHBl
ck1hcCogd3JhcHBlck1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlck1hcC5nZXQoKTsgfQog
ICAgIHZvaWQgc2V0V3JhcHBlck1hcChKU1dyYXBwZXJNYXAqIG1hcCkgeyBtX3dyYXBwZXJNYXAg
PSBtYXA7IH0KICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAg
V3JhcHBlck1hcCogd3JhcHBlck1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlck1hcC5nZXQo
KTsgfQorICAgIHZvaWQgc2V0V3JhcHBlck1hcChzdGQ6OnVuaXF1ZV9wdHI8V3JhcHBlck1hcD4m
Jik7CisjZW5kaWYKKwogICAgIFRocmVhZExvY2FsQ2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBj
b25zdCB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
QEAgLTkyMSw3ICs5MzcsOSBAQCBwcml2YXRlOgogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAg
ICAgUmV0YWluUHRyPEpTV3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOwogI2VuZGlmCi0gICAgCisj
aWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V3JhcHBlck1h
cD4gbV93cmFwcGVyTWFwOworI2VuZGlmCiAgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1f
dGhyZWFkTG9jYWxDYWNoZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggN2NkOGNjMjli
MDMuLjMyNzZiM2E3MDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtMTY4LDYgKzE2OCw3IEBA
IGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX0dUS19fPTEpCiBhZGRfZGVmaW5pdGlvbnMoLURH
RVRURVhUX1BBQ0tBR0U9IldlYktpdDJHVEstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059IikKIGFk
ZF9kZWZpbml0aW9ucygtRERBVEFfRElSPSIke0NNQUtFX0lOU1RBTExfREFUQURJUn0iKQogYWRk
X2RlZmluaXRpb25zKC1EV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORz0iJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059IikKK2FkZF9kZWZpbml0aW9ucygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQog
CiBzZXQoR1RLX0xJQlJBUklFUyAke0dUSzNfTElCUkFSSUVTfSkKIHNldChHVEtfSU5DTFVERV9E
SVJTICR7R1RLM19JTkNMVURFX0RJUlN9KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5CmluZGV4IDliNDM4NzliODQxLi4zNTY4NmQxOGNmNiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMTUxLDYgKzE1MSw3IEBAIF9QQVRIX1JVTEVTX1NQ
RUNJRklFUiA9IFsKICAgICAoWwogICAgICAgIyBUaGUgR1RLKyBhbmQgV1BFIEFQSXMgdXNlIHVw
cGVyIGNhc2UsIHVuZGVyc2NvcmUgc2VwYXJhdGVkLCB3b3JkcyBpbgogICAgICAgIyBjZXJ0YWlu
IHR5cGVzIG9mIGVudW1zIChlLmcuIHNpZ25hbHMsIHByb3BlcnRpZXMpLgorICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSwKICAgICAg
IG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdTaGFyZWQnLCAnQVBJJywgJ2dsaWIn
KSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAn
QVBJJywgJ2dsaWInKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdV
SVByb2Nlc3MnLCAnQVBJJywgJ2d0aycpLApAQCAtMzM0LDcgKzMzNSw4IEBAIF9ORVZFUl9TS0lQ
UEVEX0ZJTEVTID0gX05FVkVSX1NLSVBQRURfSlNfRklMRVMgKyBbCiBfU0tJUFBFRF9GSUxFU19X
SVRIX1dBUk5JTkcgPSBbCiAgICAgb3MucGF0aC5qb2luKCdUb29scycsICdUZXN0V2ViS2l0QVBJ
JywgJ1Rlc3RzJywgJ1dlYktpdEd0aycpLAogCi0gICAgIyBXZWJLaXQqLmggZmlsZXMgaW4gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL1tndGt8d3BlXSwgZXhjZXB0IHRob3NlIGVuZGluZyBp
biBQcml2YXRlLmggYXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBub3QgZm9sbG93IFdlYktpdCBj
b2Rpbmcgc3R5bGUuCisgICAgIyBXZWJLaXQqLmggYW5kIEpTQyouaCBmaWxlcyBpbiwgZXhjZXB0
IHRob3NlIGVuZGluZyBpbiBQcml2YXRlLmggYXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBub3Qg
Zm9sbG93IFdlYktpdCBjb2Rpbmcgc3R5bGUuCisgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3Mu
cGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSArIG9z
LnBhdGguc2VwKSArIHInSlNDKD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAogICAgIHJlLmNvbXBp
bGUocmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3Mn
LCAnQVBJJywgJ2d0aycpICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVcLmgp
LipcLmgkJyksCiAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2Un
LCAnV2ViS2l0JywgJ1VJUHJvY2VzcycsICdBUEknLCAnd3BlJykgKyBvcy5wYXRoLnNlcCkgKyBy
J1dlYktpdCg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwKICAgICByZS5jb21waWxlKHJlLmVzY2Fw
ZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnV2ViUHJvY2VzcycsICdJbmplY3Rl
ZEJ1bmRsZScsICdBUEknLCAnZ3RrJykgKyBvcy5wYXRoLnNlcCkgKyByJ1dlYktpdCg/IS4qUHJp
dmF0ZVwuaCkuKlwuaCQnKSwKQEAgLTM0Myw2ICszNDUsNyBAQCBfU0tJUFBFRF9GSUxFU19XSVRI
X1dBUk5JTkcgPSBbCiAgICAgIyBHT2JqZWN0IERPTSBiaW5kaW5ncyBjb3BpZWQgZnJvbSBnZW5l
cmF0ZWQgY29kZSB1c2luZyBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgogICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYktpdCcsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQ
SScsICdndGsnLCAnRE9NJyksCiAKKyAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2Ny
aXB0Q29yZScsICdBUEknLCAnZ2xpYicsICdqc2MuaCcpLAogICAgIG9zLnBhdGguam9pbignU291
cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwK
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScs
ICd3cGUnLCAnd2Via2l0LmgnKSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQn
LCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ3dlYmtpdC13
ZWItZXh0ZW5zaW9uLmgnKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4
IDRhZWY2OTUzY2QxLi5mZWI0NTRmNzJlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RL
LmNtYWtlCkBAIC0xNSw2ICsxNSw3IEBAIHNldChGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RXZWJL
aXRBUElfTkFNRSBUZXN0V2ViS2l0QVBJLWZvcndhcmRpbmctaGVhZGVycykKIGluY2x1ZGVfZGly
ZWN0b3JpZXMoCiAgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfQogICAgICR7Rk9SV0FSRElO
R19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUKKyAgICAke0ZPUldBUkRJTkdfSEVBREVSU19E
SVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIKICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkv
Qy9zb3VwCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvZ3RrCiAgICAgJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0awpAQCAtMTE1LDYgKzExNiwxNSBAQCBsaXN0KEFQUEVO
RCBUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xp
Yi9Xb3JrUXVldWVHTGliLmNwcAogKQogCithZGRfZXhlY3V0YWJsZShUZXN0SlNDICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHApCit0YXJn
ZXRfbGlua19saWJyYXJpZXMoVGVzdEpTQworICAgICR7R0xJQl9MSUJSQVJJRVN9CisgICAgSmF2
YVNjcmlwdENvcmUKKykKK2FkZF90ZXN0KFRlc3RKU0MgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVf
T1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNjcmlwdENvcmUvVGVzdEpTQykKK3NldF90ZXN0c19wcm9w
ZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBUSU1FT1VUIDYwKQorc2V0X3RhcmdldF9wcm9wZXJ0
aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VC
S0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNjcmlwdENvcmUpCisKIGlmIChD
T01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdT
KFRlc3RXZWJLaXQgLVduby1zaWduLWNvbXBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtV25vLXVuZGVmCkBAIC0xMjMsNCArMTMzLDggQEAgaWYgKENPTVBJ
TEVSX0lTX0dDQ19PUl9DTEFORykKICAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVz
dFdlYkNvcmUgLVduby1zaWduLWNvbXBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLVduby11bmRlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCisKKyAgICBXRUJLSVRfQUREX1RB
UkdFVF9DWFhfRkxBR1MoVGVzdEpTQyAtV25vLXNpZ24tY29tcGFyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC1Xbm8tdW5kZWYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCiBlbmRpZiAoKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rl
c3RKU0MuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGli
L1Rlc3RKU0MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNzZk
YzJiZDEyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2
YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcApAQCAtMCwwICsxLDE1OTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworLy8g
SW5jbHVkZSBKU0NDb250ZXh0UHJpdmF0ZS5oIHRvIGJlIGFibGUgdG8gcnVuIGdhcmJhZ2UgY29s
bGVjdG9yIGZvciB0ZXN0aW5nLgorI2RlZmluZSBKU0NfQ09NUElMQVRJT04gMQorI2luY2x1ZGUg
ImpzYy9KU0NDb250ZXh0UHJpdmF0ZS5oIgorI3VuZGVmIEpTQ19DT01QSUxBVElPTgorCisjaW5j
bHVkZSA8anNjL2pzYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCitjbGFzcyBM
ZWFrQ2hlY2tlciB7CitwdWJsaWM6CisgICAgTGVha0NoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB+TGVha0NoZWNrZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fd2F0Y2hlZE9iamVjdHMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfcHJpbnQoIkxlYWtlZCBv
YmplY3RzOiIpOworICAgICAgICBmb3IgKGF1dG8qIG9iamVjdCA6IG1fd2F0Y2hlZE9iamVjdHMp
CisgICAgICAgICAgICBnX3ByaW50KCIgJXMoJXApIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5j
ZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5zdGFuY2UqPihvYmplY3QpKSwgb2JqZWN0KTsKKyAg
ICAgICAgZ19wcmludCgiXG4iKTsKKyAgICAgICAgZ19hc3NlcnQobV93YXRjaGVkT2JqZWN0cy5p
c0VtcHR5KCkpOworICAgIH0KKworICAgIHZvaWQgd2F0Y2godm9pZCogb2JqZWN0KQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQoR19JU19PQkpFQ1Qob2JqZWN0KSk7CisgICAgICAgIG1fd2F0Y2hl
ZE9iamVjdHMuYWRkKG9iamVjdCk7CisgICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNU
KG9iamVjdCksIFtdKGdwb2ludGVyIHVzZXJEYXRhLCBHT2JqZWN0KiBvYmplY3QpIHsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PExlYWtDaGVja2VyKj4odXNlckRhdGEpLT5tX3dhdGNoZWRPYmpl
Y3RzLnJlbW92ZShvYmplY3QpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSGFzaFNldDx2b2lkKj4gbV93YXRjaGVkT2JqZWN0czsKK307CisKK2NsYXNzIEV4Y2Vw
dGlvbkhhbmRsZXIgeworcHVibGljOgorICAgIEV4Y2VwdGlvbkhhbmRsZXIoSlNDQ29udGV4dCog
Y29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgICAgIGpz
Y19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250ZXh0LCBbXShKU0NDb250ZXh0
KiwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7CisgICAgICAgICAgICBnX2Vy
cm9yKCJVTkVYUEVDVEVEIEVYQ0VQVElPTjogJXMiLCBqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdl
KGV4Y2VwdGlvbikpOworICAgICAgICB9LCBudWxscHRyLCBudWxscHRyKTsKKyAgICB9CisKKyAg
ICB+RXhjZXB0aW9uSGFuZGxlcigpCisgICAgeworICAgICAgICBwb3AoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHB1c2goSlNDRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyLCBncG9pbnRlciB1c2VyRGF0
YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0cikKKyAgICB7CisgICAg
ICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250ZXh0LCBoYW5kbGVy
LCB1c2VyRGF0YSwgZGVzdHJveUZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcCgpCisg
ICAgeworICAgICAgICBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250ZXh0
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNDQ29udGV4dCogbV9jb250ZXh0OworfTsKKwor
I2RlZmluZSBnX2Fzc2VydF90aHJvd19iZWdpbihoYW5kbGVyLCBkaWRUaHJvdykgXAorICAgIGRp
ZFRocm93ID0gZmFsc2U7IFwKKyAgICBoYW5kbGVyLnB1c2goW10oSlNDQ29udGV4dCosIEpTQ0V4
Y2VwdGlvbiosIGdwb2ludGVyIHVzZXJEYXRhKSB7IFwKKyAgICAgICAgKnN0YXRpY19jYXN0PGJv
b2wqPih1c2VyRGF0YSkgPSB0cnVlOyBcCisgICAgfSwgJmRpZFRocm93LCBudWxscHRyKTsKKwor
I2RlZmluZSBnX2Fzc2VydF9kaWRfdGhyb3coaGFuZGxlciwgZGlkVGhyb3cpIFwKKyAgICBoYW5k
bGVyLnBvcCgpOyBcCisgICAgZ19hc3NlcnQoZGlkVGhyb3cpOyBcCisgICAgZGlkVGhyb3cgPSBm
YWxzZTsKKworZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnZ2luZyhKU0NvbnRleHRSZWYpOworCitzdGF0aWMgdm9pZCBqc2NDb250ZXh0R2FyYmFnZUNv
bGxlY3QoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNv
bGxlY3RGb3JEZWJ1Z2dpbmcoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RKU0NCYXNpYygpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tl
ciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgYXV0byogZGVmYXVsdFZNID0ganNjX2NvbnRleHRfZ2V0X3ZpcnR1
YWxfbWFjaGluZShjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoZGVmYXVsdFZNKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChkZWZhdWx0Vk0pOworCisgICAgICAgIEdSZWZQdHI8SlND
VmlydHVhbE1hY2hpbmU+IHZtID0gYWRvcHRHUmVmKGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkp
OworICAgICAgICBjaGVja2VyLndhdGNoKHZtLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodm0u
Z2V0KCkgIT0gZGVmYXVsdFZNKTsKKworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRl
eHQyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZSh2bS5n
ZXQoKSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQyLmdldCgpKTsKKyAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyMihjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQoanNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0Mi5nZXQo
KSkgPT0gdm0uZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDMg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKGRlZmF1bHRW
TSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQzLmdldCgpKTsKKyAgICAgICAgRXhj
ZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyMyhjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0My5nZXQoKSkg
PT0ganNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0LmdldCgpKSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUxID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdf
bnVtYmVyKGNvbnRleHQuZ2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUx
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZTEuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZTEu
Z2V0KCkpLCA9PSwgMjUpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5n
ZXQoKSwgInZhbHVlMSIsIHZhbHVlMS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCks
ICJ2YWx1ZTEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlMS5nZXQoKSk7CisKKyAgICAgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQyLmdldCgpLCAidmFs
dWUxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAg
cmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0My5nZXQoKSwg
InZhbHVlMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworCisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0My5nZXQoKSwgInZhbHVlMSIsIHZhbHVl
MS5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0My5nZXQoKSwgInZhbHVlMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgIT0gdmFsdWUxLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkp
LCA9PSwgMjUpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsK
KyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiMiArIDIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihy
ZXN1bHQuZ2V0KCkpLCA9PSwgNCk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0
MiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiMiArIDIi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Mi5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KHJlc3VsdC5nZXQoKSA9PSByZXN1bHQyLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiByZXN1bHQzID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICIzICsgMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQzLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHJlc3VsdDMuZ2V0KCkpOworCisgICAg
ICAgIGF1dG8qIHJlc3VsdFB0ciA9IHJlc3VsdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0ID0gbnVs
bHB0cjsKKyAgICAgICAgcmVzdWx0MiA9IG51bGxwdHI7CisgICAgICAgIHJlc3VsdDMgPSBudWxs
cHRyOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQ0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQ0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251
bWJlcihyZXN1bHQ0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIocmVzdWx0NC5nZXQoKSksID09LCA0KTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0
NC5nZXQoKSAhPSByZXN1bHRQdHIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNr
ZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQu
Z2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiMiArIDIiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJmb3VyIiwgcmVzdWx0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4
dC5nZXQoKSwgImZvdXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwg
NCk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAg
ICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImZvdXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidHdv
ID0gMjsgZm91ciA9IHR3byArIHR3byIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5n
ZXQoKSksID09LCA0KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInR3byIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192
YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAyKTsKKworICAgICAgICB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImZvdXIiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChyZXN1
bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdDIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZp
dmUgPSA0IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdDIuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChyZXN1bHQyLmdldCgpID09IHZhbHVlLmdldCgpKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RKU0NUeXBlcygpCit7CisgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAg
ICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3
KCkpOworICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgRXhjZXB0aW9uSGFu
ZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQo
KSwgMTI1KSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KGpzY192YWx1ZV90b19kb3VibGUodmFsdWUuZ2V0KCkpLCA9PSwgMTI1Lik7CisgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAxMjUpOworICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IHZhbHVlU3RyaW5nKGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUu
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMTI1
Iik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJpIiwgdmFsdWUu
Z2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImkiKSk7CisgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7
CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0Lmdl
dCgpLCAxMi41KSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KGpzY192YWx1ZV90b19kb3VibGUodmFsdWUuZ2V0KCkpLCA9PSwgMTIuNSk7CisgICAgZ19h
c3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAxMik7Cisg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOwor
ICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMTIuNSIpOworICAg
IGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZCIsIHZhbHVlLmdldCgpKTsK
KyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJkIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19ib29sZWFuKGNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbih2
YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdl
dCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlLmdldCgpKSwgPT0sIDEpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19z
dHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0
KCksID09LCAidHJ1ZSIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgp
LCAiYjEiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYjEiKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisK
KyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oY29udGV4dC5nZXQo
KSwgRkFMU0UpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfYm9vbGVhbih2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBGQUxTRSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0
cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImZhbHNlIik7CisgICAganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiMiIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiMiIp
KTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0
LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfc3RyaW5nKGNvbnRleHQuZ2V0KCksICJIZWxsbyBXb3JsZCIpKTsKKyAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5nKHZh
bHVlLmdldCgpKSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2
YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0s
ICJIZWxsbyBXb3JsZCIpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVl
LmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMy
KHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0
LmdldCgpLCAiczEiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczEiKSk7CisgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQo
KSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3N0cmluZyhjb250ZXh0
LmdldCgpLCBudWxscHRyKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIHZhbHVlU3Ry
aW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiIik7CisgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIGpzY19jb250
ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczIiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczIi
KSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3Vs
dC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfbmV3X3N0cmluZyhjb250ZXh0LmdldCgpLCAiMTIuNSIpKTsKKyAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlLmdl
dCgpKSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxMi41
Iik7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRS
VUUpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGpzY192YWx1ZV90b19kb3VibGUodmFsdWUuZ2V0
KCkpLCA9PSwgMTIuNSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2
YWx1ZS5nZXQoKSksID09LCAxMik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJzMyIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzMyIpKTsKKyAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgp
KTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYXJyYXkoY29udGV4dC5n
ZXQoKSwgR19UWVBFX05PTkUpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYXJyYXkodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfb2JqZWN0KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJp
bmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIiKTsKKyAgICBqc2NfY29udGV4dF9zZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgImExIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImExIikpOworICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkg
PT0gdmFsdWUuZ2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGFycmF5TGVuZ3RoID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3Ro
IikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgPT0sIDApOworICAg
IEdSZWZQdHI8SlNDVmFsdWU+IGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251
bWJlcihjb250ZXh0LmdldCgpLCAxKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0
KCkpOworICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdl
dCgpLCBqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCBhcnJheUl0ZW0uZ2V0
KCkpOworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3By
b3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlM
ZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5n
dGguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5
TGVuZ3RoLmdldCgpKSwgPT0sIDEpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90
b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcu
Z2V0KCksID09LCAiMSIpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3
X251bWJlcihjb250ZXh0LmdldCgpLCA1KSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0u
Z2V0KCkpOworICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVl
LmdldCgpLCBqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCBhcnJheUl0ZW0u
Z2V0KCkpOworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0
X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJy
YXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlM
ZW5ndGguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFy
cmF5TGVuZ3RoLmdldCgpKSwgPT0sIDIpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1
ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAiMSw1Iik7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEwKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJh
eUl0ZW0uZ2V0KCkpOworICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4
KHZhbHVlLmdldCgpLCAzLCBhcnJheUl0ZW0uZ2V0KCkpOworICAgIGFycmF5TGVuZ3RoID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3Ro
IikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgPT0sIDQpOworICAg
IGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9p
bmRleCh2YWx1ZS5nZXQoKSwgMCkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgp
KTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5SXRlbS5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlJdGVtLmdldCgpKSwg
PT0sIDEpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9w
cm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJy
YXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5SXRl
bS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlJ
dGVtLmdldCgpKSwgPT0sIDUpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
b2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMikpOworICAgIGNoZWNr
ZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5k
ZWZpbmVkKGFycmF5SXRlbS5nZXQoKSkpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2Nf
dmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMykpOworICAg
IGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKGFycmF5SXRlbS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIoYXJyYXlJdGVtLmdldCgpKSwgPT0sIDEwKTsKKyAgICBhcnJheUxlbmd0aCA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxl
bmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBhcnJh
eUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgo
dmFsdWUuZ2V0KCksIGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSkgKyAxKSk7
CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc191bmRlZmluZWQoYXJyYXlJdGVtLmdldCgpKSk7CisKKyAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiBhcnJheSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5KGNvbnRleHQuZ2V0KCks
IEdfVFlQRV9JTlQsIDEsIEdfVFlQRV9TVFJJTkcsICJ0d28iLCBHX1RZUEVfQk9PTEVBTiwgVFJV
RSwgSlNDX1RZUEVfVkFMVUUsIHZhbHVlLmdldCgpLCBHX1RZUEVfTk9ORSkpOworICAgIGNoZWNr
ZXIud2F0Y2goYXJyYXkuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19hcnJheShh
cnJheS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoYXJyYXkuZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbihhcnJheS5nZXQoKSkgPT0g
VFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheS5nZXQo
KSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKGFy
cmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwg
IjEsdHdvLHRydWUsMSw1LCwxMCIpOworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGFycmF5LmdldCgpLCAibGVuZ3RoIikpOworICAgIGNo
ZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3Zh
bHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgPT0sIDQpOworICAgIGFycmF5SXRlbSA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleChhcnJheS5n
ZXQoKSwgMCkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5SXRlbS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlJdGVtLmdldCgpKSwgPT0sIDEpOworICAg
IGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9p
bmRleChhcnJheS5nZXQoKSwgMSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgp
KTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5nKGFycmF5SXRlbS5nZXQoKSkpOwor
ICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcoYXJyYXlJdGVtLmdldCgp
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInR3byIpOwor
ICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9h
dF9pbmRleChhcnJheS5nZXQoKSwgMikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdl
dCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihhcnJheUl0ZW0uZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbihhcnJheUl0ZW0uZ2V0KCkpID09
IFRSVUUpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9w
cm9wZXJ0eV9hdF9pbmRleChhcnJheS5nZXQoKSwgMykpOworICAgIGNoZWNrZXIud2F0Y2goYXJy
YXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydChhcnJheUl0ZW0uZ2V0KCkgPT0gdmFsdWUuZ2V0
KCkpOworCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGdBcnJheSA9IGFkb3B0R1JlZihnX3B0cl9h
cnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19vYmplY3RfdW5yZWYpKTsKKyAgICBnX3B0cl9hcnJh
eV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAx
KSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19zdHJp
bmcoY29udGV4dC5nZXQoKSwgInR3byIpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5Lmdl
dCgpLCBqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oY29udGV4dC5nZXQoKSwgVFJVRSkpOworICAgIGdf
cHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGdfb2JqZWN0X3JlZih2YWx1ZS5nZXQoKSkpOwor
ICAgIGFycmF5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYXJyYXlfZnJvbV9nYXJyYXkoY29u
dGV4dC5nZXQoKSwgZ0FycmF5LmdldCgpKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheS5nZXQo
KSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2FycmF5KGFycmF5LmdldCgpKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChhcnJheS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV90b19ib29sZWFuKGFycmF5LmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5LmdldCgpKSwgPT0sIDApOworICAgIHZh
bHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcoYXJyYXkuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMSx0d28sdHJ1ZSwxLDUsLDEw
Iik7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJv
cGVydHkoYXJyYXkuZ2V0KCksICJsZW5ndGgiKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUxl
bmd0aC5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUxlbmd0
aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlM
ZW5ndGguZ2V0KCkpLCA9PSwgZ0FycmF5LT5sZW4pOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwor
ICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19vYmplY3QodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVh
bih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2Nf
dmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVl
U3RyaW5nLmdldCgpLCA9PSwgIltvYmplY3QgT2JqZWN0XSIpOworICAgIGpzY19jb250ZXh0X3Nl
dF92YWx1ZShjb250ZXh0LmdldCgpLCAibyIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJvIikpOworICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkg
PT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld191
bmRlZmluZWQoY29udGV4dC5nZXQoKSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkp
OworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwg
MCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQo
KSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ1bmRlZmlu
ZWQiKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInUiLCB2YWx1
ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShj
b250ZXh0LmdldCgpLCAidSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVsbChjb250ZXh0LmdldCgpKSk7CisgICAgY2hlY2tl
ci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bGwodmFs
dWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQo
KSkgPT0gRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFs
dWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0
cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQo
KSwgPT0sICJudWxsIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCks
ICJuIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9n
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgIm4iKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7Cit9CisK
K3N0YXRpYyBpbnQgZm9vKGludCBuKQoreworICAgIHJldHVybiBuICogMjsKK30KKworc3RhdGlj
IHZvaWQgY2FsbGJhY2soSlNDVmFsdWUqIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8SlNDVmFs
dWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLCBH
X1RZUEVfSU5ULCAyMDAsIEdfVFlQRV9OT05FKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X3VuZGVmaW5lZCh2YWx1ZS5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCBkb3VibGVBbmRTZXRJ
blJlc3VsdChpbnQgbikKK3sKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfbmV3X251bWJlcihqc2NfY29udGV4dF9nZXRfY3VycmVudCgpLCBuICogMikp
OworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShqc2NfY29udGV4dF9nZXRfY3VycmVudCgpLCAi
cmVzdWx0IiwgdmFsdWUuZ2V0KCkpOworfQorCitzdGF0aWMgaW50IHN1bUZ1bmN0aW9uKEdQdHJB
cnJheSogYXJyYXkpCit7CisgICAgaW50IHJldHZhbCA9IDA7CisKKyAgICBnX3B0cl9hcnJheV9m
b3JlYWNoKGFycmF5LCBbXShncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICBnX2Fzc2VydChKU0NfSVNfVkFMVUUoZGF0YSkpOworICAgICAgICBKU0NWYWx1ZSogaXRl
bSA9IEpTQ19WQUxVRShkYXRhKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJl
cihpdGVtKSk7CisgICAgICAgICpzdGF0aWNfY2FzdDxpbnQqPih1c2VyRGF0YSkgKz0ganNjX3Zh
bHVlX3RvX2ludDMyKGl0ZW0pOworICAgIH0sICZyZXR2YWwpOworCisgICAgcmV0dXJuIHJldHZh
bDsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ0Z1bmN0aW9uKCkKK3sKKyAgICB7CisgICAgICAg
IExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
Y29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxl
cihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCksICJmb28iLCBH
X0NBTExCQUNLKGZvbyksIEdfVFlQRV9JTlQsIDEsIEdfVFlQRV9JTlQpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0LmdldCgpLCAiZm9vIiwgZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImZvbygyMDApIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgp
KSwgPT0sIDQwMCk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24uZ2V0KCksIEdfVFlQRV9JTlQsIDIw
MCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KHZhbHVlLmdldCgpID09IHJlc3VsdC5nZXQoKSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0Nv
bnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4
Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImZvbyA9IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gKiAyOyB9IikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZv
bygyMDApIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24uZ2V0KCksIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05P
TkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KHZhbHVlLmdldCgpID09IHJlc3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgeworICAgICAg
ICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNo
KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRs
ZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24g
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAiY2FsbGJh
Y2siLCBHX0NBTExCQUNLKGNhbGxiYWNrKSwgR19UWVBFX05PTkUsIDEsIEpTQ19UWVBFX1ZBTFVF
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImNhbGxiYWNrIiwgZnVuY3Rpb24uZ2V0
KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInZhciByZXN1bHQgPSAwOyBjYWxsYmFjayhm
dW5jdGlvbihuKXsgcmVzdWx0ID0gbiAqIDI7IH0pOyByZXN1bHQiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251
bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNDAwKTsKKworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJlc3VsdCA9IDAiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgMCk7CisKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gZGJsID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24o
Y29udGV4dC5nZXQoKSwgImRvdWJsZUFuZFNldEluUmVzdWx0IiwgR19DQUxMQkFDSyhkb3VibGVB
bmRTZXRJblJlc3VsdCksIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfSU5UKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZGJsLmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24uZ2V0KCksIEpTQ19U
WVBFX1ZBTFVFLCBkYmwuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMy
KHJlc3VsdC5nZXQoKSksID09LCA0MDApOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0No
ZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0
LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRl
eHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAic3Vt
RnVuY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuIgorICAgICAgICAgICAgIiAgICB2YXIgcmVz
dWx0ID0gMDtcbiIKKyAgICAgICAgICAgICIgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgeyByZXN1
bHQgKz0gYXJyYXlbaV07IH1cbiIKKyAgICAgICAgICAgICIgICAgcmV0dXJuIHJlc3VsdDtcbiIK
KyAgICAgICAgICAgICJ9IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmdW5jdGlvbi5nZXQoKSkp
OworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGFycmF5ID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfYXJyYXkoY29udGV4dC5nZXQoKSwgR19UWVBFX0lOVCwgMiwgR19UWVBFX0lOVCwgNCwg
R19UWVBFX0lOVCwgNiwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChhcnJh
eS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24uZ2V0KCksIEpTQ19UWVBFX1ZBTFVFLCBh
cnJheS5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQo
KSksID09LCAxMik7CisKKyAgICAgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGdBcnJheSA9IGFkb3B0
R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19vYmplY3RfdW5yZWYpKTsKKyAg
ICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIo
Y29udGV4dC5nZXQoKSwgMSkpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgp
LCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAzKSk7CisgICAgICAgIGdfcHRy
X2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0
KCksIDUpKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25f
Y2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX1BUUl9BUlJBWSwgZ0FycmF5LmdldCgpLCBHX1RZ
UEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDkpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0
cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFu
ZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8
SlNDVmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29u
dGV4dC5nZXQoKSwgInN1bUZ1bmN0aW9uIiwgR19DQUxMQkFDSyhzdW1GdW5jdGlvbiksIEdfVFlQ
RV9JTlQsIDEsIEdfVFlQRV9QVFJfQVJSQVkpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5j
dGlvbi5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgp
LCAic3VtRnVuY3Rpb24iLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCks
ICJzdW1GdW5jdGlvbihbMiw0LDZdKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQo
KSksID09LCAxMik7CisKKyAgICAgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGdBcnJheSA9IGFkb3B0
R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19vYmplY3RfdW5yZWYpKTsKKyAg
ICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIo
Y29udGV4dC5nZXQoKSwgMSkpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgp
LCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAzKSk7CisgICAgICAgIGdfcHRy
X2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0
KCksIDUpKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25f
Y2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX1BUUl9BUlJBWSwgZ0FycmF5LmdldCgpLCBHX1RZ
UEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDkpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ09iamVjdCgpCit7CisgICAgeworICAgICAgICBM
ZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIo
Y29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJjbGFzcyBGb28geyBmb28o
bikgeyByZXR1cm4gbiAqIDI7IH0gfTsgZm9vID0gbmV3IEZvbzsiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVj
dChmb28uZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQoKSwgImZvbyIsIEdf
VFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3Vs
dC5nZXQoKSksID09LCA0MDApOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAg
ICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOwor
ICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9k
KGZvby5nZXQoKSwgImJhciIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhy
b3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
TGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChj
b250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVy
KGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxs
cHRyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJl
cihjb250ZXh0LmdldCgpLCAyNSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5Lmdl
dCgpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9i
amVjdC5nZXQoKSwgInZhbCIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oMCks
IHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2
YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52
YWw7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDI1KTsKKworICAg
ICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2lu
KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIid1c2Ugc3RyaWN0JzsgZi52YWwg
PSAzMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAg
dmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYu
cHJvcGVydHlJc0VudW1lcmFibGUoJ3ZhbCcpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHZhbHVl
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdl
dCgpKSA9PSBGQUxTRSk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImRlbGV0ZSBmLnZhbDsiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWw7IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJl
cih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCA1MikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4o
ZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgInZhbCIsIHN0YXRpY19jYXN0PEpTQ1Zh
bHVlUHJvcGVydHlGbGFncz4oMCksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
ZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKworICAgICAgICBwcm9wZXJ0
eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAzMikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVl
X29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJ2YWwyIiwgc3RhdGlj
X2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJM
RSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSksIHByb3BlcnR5LmdldCgpKTsKKyAgICAg
ICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYudmFsMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMzIpOwor
CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICIndXNlIHN0cmljdCc7IGYudmFsMiA9IDQ1OyIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDI7IikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2
YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMy
KHZhbHVlLmdldCgpKSwgPT0sIDQ1KTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5wcm9wZXJ0eUlzRW51bWVyYWJsZSgn
dmFsMicpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKworICAg
ICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0Lmdl
dCgpLCAxMjUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7CisgICAg
ICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEob2JqZWN0LmdldCgpLCAi
dmFsMyIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BF
UlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSksIHByb3BlcnR5
LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYudmFsMzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0
KCkpLCA9PSwgMTI1KTsKKworICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxNTApKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChw
cm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5
X2RhdGEob2JqZWN0LmdldCgpLCAidmFsMyIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlG
bGFncz4oSlNDX1ZBTFVFX1BST1BFUlRZX0NPTkZJR1VSQUJMRSksIHByb3BlcnR5LmdldCgpKTsK
KyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYudmFsMzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwg
MTUwKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZGVsZXRlIGYudmFsMzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
dmFsdWUuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQodmFs
dWUuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCksICJmb28iLCBHX0NBTExC
QUNLKGZvbyksIEdfVFlQRV9JTlQsIDEsIEdfVFlQRV9JTlQpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJmb28iLCBzdGF0aWNfY2FzdDxKU0NWYWx1ZVBy
b3BlcnR5RmxhZ3M+KDApLCBmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChv
YmplY3QuZ2V0KCksICJmb28iLCBHX1RZUEVfSU5ULCAyMDAsIEdfVFlQRV9OT05FKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNDAwKTsKKworICAgICAgICBnX2Fz
c2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2Qob2JqZWN0Lmdl
dCgpLCAiZm9vIiwgR19UWVBFX1BPSU5URVIsICIyMDAiLCBHX1RZUEVfTk9ORSkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJv
dyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgfQorCisgICAgeworICAgICAgICBM
ZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIo
Y29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMTI1KSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfaXNf
b2JqZWN0KHZhbHVlLmdldCgpKSk7CisKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOwor
ICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
b2JqZWN0X2ludm9rZV9tZXRob2QodmFsdWUuZ2V0KCksICJmb28iLCBHX1RZUEVfSU5ULCAyMDAs
IEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOwor
ICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgX0ZvbyBGb287CitzdHJ1Y3QgX0ZvbyB7CisgICAg
aW50IGZvbzsKKyAgICBGb28qIHNpYmxpbmc7Cit9OworCitzdGF0aWMgRm9vKiBmb29DcmVhdGUo
KQoreworICAgIHJldHVybiBnX25ldzAoRm9vLCAxKTsKK30KKworc3RhdGljIEZvbyogZm9vQ3Jl
YXRlV2l0aEZvbyhpbnQgdmFsdWUpCit7CisgICAgYXV0byogZiA9IGZvb0NyZWF0ZSgpOworICAg
IGYtPmZvbyA9IHZhbHVlOworICAgIHJldHVybiBmOworfQorCitzdGF0aWMgdm9pZCBmb29GcmVl
KEZvbyogZm9vKQoreworICAgIGdfZnJlZShmb28pOworfQorCitzdGF0aWMgdm9pZCBzZXRGb28o
Rm9vKiBmb28sIGludCB2YWx1ZSkKK3sKKyAgICBmb28tPmZvbyA9IHZhbHVlOworfQorCitzdGF0
aWMgaW50IGdldEZvbyhGb28qIGZvbykKK3sKKyAgICByZXR1cm4gZm9vLT5mb287Cit9CisKK3N0
YXRpYyB2b2lkIHNldFNpYmxpbmcoRm9vKiBmb28sIEZvbyogc2libGluZykKK3sKKyAgICBmb28t
PnNpYmxpbmcgPSBzaWJsaW5nOworfQorCitzdGF0aWMgRm9vKiBnZXRTaWJsaW5nKEZvbyogZm9v
KQoreworICAgIHJldHVybiBmb28tPnNpYmxpbmc7Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpcGx5
Rm9vKEZvbyogZm9vLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICBmb28tPmZvbyAqPSBtdWx0aXBs
aWVyOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IGJhejsKK30gQmF6OworCitzdGF0
aWMgQmF6KiBiYXpDcmVhdGUoKQoreworICAgIHJldHVybiBnX25ldzAoQmF6LCAxKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdEpTQ0NsYXNzKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2Vy
IGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQo
KSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rl
cl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNz
KTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19jbGFzc19nZXRfcGFyZW50KGpzY0NsYXNzKSk7CisK
KyAgICAgICAganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19D
QUxMQkFDSyhmb29DcmVhdGUpLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAgICAgICBjaGVja2VyLndh
dGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoZm9v
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YoZm9vLmdldCgpLCBqc2NDbGFzcykpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgaW5z
dGFuY2VvZiBGb287IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAg
ICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgImdldEZvbyIsIEdfQ0FMTEJBQ0so
Z2V0Rm9vKSwgR19UWVBFX0lOVCwgMCwgR19UWVBFX05PTkUpOworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2Qo
Zm9vLmdldCgpLCAiZ2V0Rm9vIiwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFs
dWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2
YWx1ZS5nZXQoKSksID09LCAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZTIg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZ2V0Rm9v
KCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUyLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQodmFsdWUuZ2V0KCkgPT0gdmFsdWUyLmdldCgpKTsKKworICAgICAgICBqc2NfY2xhc3Nf
YWRkX21ldGhvZChqc2NDbGFzcywgInNldEZvbyIsIEdfQ0FMTEJBQ0soc2V0Rm9vKSwgR19UWVBF
X05PTkUsIDEsIEdfVFlQRV9JTlQpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQoKSwgInNldEZvbyIsIEdfVFlQRV9JTlQs
IDI1LCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmLmdldEZvbygpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwg
PT0sIDI1KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYuc2V0Rm9vKDQ1KSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2Jq
ZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgpLCAiZ2V0Rm9vIiwgR19UWVBFX05PTkUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA0NSk7CisKKyAgICAgICAganNjX2Ns
YXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgIkNyZWF0ZVdpdGhGb28iLCBHX0NBTExCQUNL
KGZvb0NyZWF0ZVdpdGhGb28pLCBHX1RZUEVfUE9JTlRFUiwgMSwgR19UWVBFX0lOVCk7CisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbzIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYyID0gbmV3IEZvby5DcmVhdGVXaXRoRm9vKDQyKTsiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goZm9vMi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc19vYmplY3QoZm9vMi5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
b2JqZWN0X2lzX2luc3RhbmNlX29mKGZvbzIuZ2V0KCksIGpzY0NsYXNzKSk7CisgICAgICAgIGdf
YXNzZXJ0KGZvby5nZXQoKSAhPSBmb28yLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMiBpbnN0YW5jZW9mIEZv
bzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyIGluc3Rh
bmNlb2YgRm9vLkNyZWF0ZVdpdGhGb287IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3Vs
dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0
KCkpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwg
R19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbykpOworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiZjIuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQyKTsK
KyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmMi5mb28gPSA1MiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZjIuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwg
PT0sIDUyKTsKKworICAgICAgICBKU0NDbGFzcyogb3RoZXJDbGFzcyA9IGpzY19jb250ZXh0X3Jl
Z2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJCYXoiLCBudWxscHRyLCBnX2ZyZWUpOworICAg
ICAgICBjaGVja2VyLndhdGNoKG90aGVyQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2Ns
YXNzX2dldF9wYXJlbnQob3RoZXJDbGFzcykpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfY29u
c3RydWN0b3Iob3RoZXJDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXpDcmVhdGUpLCBHX1RZ
UEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworCisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFs
dWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwgb3RoZXJDbGFzcykpOworICAgICAg
ICBnX2Fzc2VydCghanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28yLmdldCgpLCBv
dGhlckNsYXNzKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmF6ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiYXogPSBuZXcgQmF6KCk7Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKGJhei5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19vYmplY3QoYmF6LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBvdGhlckNsYXNzKSk7CisgICAgICAg
IGdfYXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGJhei5nZXQoKSwganNj
Q2xhc3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7Cisg
ICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAg
IEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAg
ICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250
ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlm
eT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNzKTsKKworICAgICAg
ICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNL
KGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgIGpz
Y19jbGFzc19hZGRfcHJvcGVydHkoanNjQ2xhc3MsICJzaWJsaW5nIiwgR19UWVBFX1BPSU5URVIs
IEdfQ0FMTEJBQ0soZ2V0U2libGluZyksIEdfQ0FMTEJBQ0soc2V0U2libGluZykpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZjEgPSBuZXcgRm9vKCk7IGYyID0gbmV3IEZvbygpOyBmMi5z
aWJsaW5nID0gZjEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmMSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgImYxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGYxLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmMS5nZXQoKSkpOwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmMiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgImYyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGYyLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmMi5nZXQoKSkpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5zaWJsaW5nIikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gZjEu
Z2V0KCkpOworCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGYxLmdldCgp
LCAic2libGluZyIsIGYyLmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYxLnNpYmxpbmciKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh2YWx1ZS5nZXQoKSA9
PSBmMi5nZXQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2Vy
OworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAg
ICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisK
KyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mo
Y29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisKKyAg
ICAgICAganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxM
QkFDSyhmb29DcmVhdGUpLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAgICAg
ICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19D
QUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbykpOworCisgICAgICAgIEZvbyogZiA9
IGZvb0NyZWF0ZVdpdGhGb28oMjUpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgZiwganNjQ2xhc3Mp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwganNjQ2xhc3MpKTsKKworICAgICAg
ICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiLCBmb28uZ2V0KCkpOwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgaW5zdGFuY2VvZiBGb287IikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9f
Ym9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZm9vIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19u
dW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICBzZXRGb28oZiwgNDIp
OworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImYuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwg
PT0sIDQyKTsKKworICAgICAgICBKU0NDbGFzcyogYmF6Q2xhc3MgPSBqc2NfY29udGV4dF9yZWdp
c3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiQmF6IiwgbnVsbHB0ciwgZ19mcmVlKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChiYXpDbGFzcyk7CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9jb25z
dHJ1Y3RvcihiYXpDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXpDcmVhdGUpLCBHX1RZUEVf
UE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworCisgICAgICAgIEJheiogYnogPSBiYXpDcmVhdGUo
KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmF6ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9u
ZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGJ6LCBiYXpDbGFzcykpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGJhei5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3Qo
YmF6LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFu
Y2Vfb2YoYmF6LmdldCgpLCBiYXpDbGFzcykpOworICAgICAgICBnX2Fzc2VydCghanNjX3ZhbHVl
X29iamVjdF9pc19pbnN0YW5jZV9vZihiYXouZ2V0KCksIGpzY0NsYXNzKSk7CisgICAgICAgIGdf
YXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwgYmF6Q2xh
c3MpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImJ6
IiwgYmF6LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJieiBpbnN0YW5jZW9mIEJhejsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19i
b29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYnogaW5zdGFuY2VvZiBGb287IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydCghanNj
X3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIGluc3RhbmNlb2Yg
QmF6OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnQoIWpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIGpz
Y192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGJhei5nZXQoKSwgImZvbyIsIGZvby5nZXQoKSk7
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiYnouZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSBmb28uZ2V0KCkpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBl
eGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2ND
bGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBu
dWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfY29u
c3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBF
X1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0
eShqc2NDbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxM
QkFDSyhzZXRGb28pKTsKKworICAgICAgICBGb28qIGYgPSBmb29DcmVhdGVXaXRoRm9vKDI1KTsK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdf
b2JqZWN0KGNvbnRleHQuZ2V0KCksIGYsIGpzY0NsYXNzKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmb28u
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9v
Zihmb28uZ2V0KCksIGpzY0NsYXNzKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJmMSIsIGZvby5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3Nl
dF92YWx1ZShjb250ZXh0LmdldCgpLCAiZjIiLCBmb28uZ2V0KCkpOworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImYxID09PSBmMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDUwKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocHJvcGVydHkuZ2V0KCkpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0
eShmb28uZ2V0KCksICJuIiwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYxLm4iKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNTApOworICAgIH0KKworICAgIHsK
KyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9
IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRy
LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9w
YXJlbnQoanNjQ2xhc3MpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpz
Y0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAw
LCBHX1RZUEVfTk9ORSk7CisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVydHkoanNjQ2xhc3Ms
ICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEZvbyksIEdfQ0FMTEJBQ0soc2V0Rm9v
KSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29i
amVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19p
bnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY0NsYXNzKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQo
KSwgMTI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBq
c2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShmb28uZ2V0KCksICJmb28iLCB2YWx1ZS5nZXQo
KSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLl9fbG9va3VwR2V0dGVyX18oJ2Zvbycp
LmNhbGwoZikiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKworICAgICAgICBib29s
IGRpZFRocm93ID0gZmFsc2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlv
bkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLl9fbG9va3VwR2V0dGVyX18oJ2ZvbycpLmNh
bGwoe30pIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgfQor
CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpT
Q0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVy
IGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpz
Y0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIs
IG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xh
c3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxz
ZTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhy
b3cpOworICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRy
LCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSk7Cisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5l
ZChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRs
ZXIsIGRpZFRocm93KTsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGb28gcGFy
ZW50OworICAgIGludCBiYXI7Cit9IEJhcjsKKworc3RhdGljIEJhciogYmFyQ3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gZ19uZXcwKEJhciwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhckZyZWUoQmFy
KiBiYXIpCit7CisgICAgZ19mcmVlKGJhcik7Cit9CisKK3N0YXRpYyB2b2lkIHNldEJhcihCYXIq
IGJhciwgaW50IHZhbHVlKQoreworICAgIGJhci0+YmFyID0gdmFsdWU7Cit9CisKK3N0YXRpYyBp
bnQgZ2V0QmFyKEJhciogYmFyKQoreworICAgIHJldHVybiBiYXItPmJhcjsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEpTQ1Byb3RvdHlwZXMoKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIg
Y2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgp
KTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0
KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBmb29DbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVy
X2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdE
ZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vQ2xhc3Mp
OworICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9wYXJlbnQoZm9vQ2xhc3MpKTsKKyAg
ICAgICAganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihmb29DbGFzcywgbnVsbHB0ciwgR19DQUxM
QkFDSyhmb29DcmVhdGUpLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAgICAg
ICBqc2NfY2xhc3NfYWRkX21ldGhvZChmb29DbGFzcywgIm11bHRpcGx5IiwgR19DQUxMQkFDSyht
dWx0aXBseUZvbyksIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfSU5UKTsKKyAgICAgICAganNjX2Ns
YXNzX2FkZF9wcm9wZXJ0eShmb29DbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0so
Z2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pKTsKKworICAgICAgICBKU0NDbGFzcyogYmFyQ2xh
c3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiQmFyIiwgZm9v
Q2xhc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGJhckZyZWUpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChiYXJDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0KGpzY19jbGFzc19n
ZXRfcGFyZW50KGJhckNsYXNzKSA9PSBmb29DbGFzcyk7CisgICAgICAgIGpzY19jbGFzc19hZGRf
Y29uc3RydWN0b3IoYmFyQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soYmFyQ3JlYXRlKSwgR19U
WVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9w
ZXJ0eShiYXJDbGFzcywgImJhciIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0QmFyKSwgR19D
QUxMQkFDSyhzZXRCYXIpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9v
KCk7IGIgPSBuZXcgQmFyKCk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmLl9fcHJvdG9fXyA9PSBGb28ucHJvdG90eXBlIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9f
Ym9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiLl9fcHJvdG9fXyA9PSBCYXIucHJvdG90
eXBlIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiLl9fcHJv
dG9fXy5fX3Byb3RvX18gPT0gRm9vLnByb3RvdHlwZSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihy
ZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVz
dWx0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2Jq
ZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2lu
c3RhbmNlX29mKGZvby5nZXQoKSwgZm9vQ2xhc3MpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192
YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBiYXJDbGFzcykpOworICAgICAg
ICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYgaW5zdGFuY2VvZiBGb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYgaW5zdGFuY2VvZiBCYXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0Lmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0
KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXIgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiIikpOworICAgICAgICBjaGVja2VyLndh
dGNoKGJhci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoYmFy
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YoYmFyLmdldCgpLCBiYXJDbGFzcykpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2Jq
ZWN0X2lzX2luc3RhbmNlX29mKGJhci5nZXQoKSwgZm9vQ2xhc3MpKTsKKworICAgICAgICByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIgaW5z
dGFuY2VvZiBCYXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImIgaW5zdGFuY2VvZiBGb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwor
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiYi5iYXIgPSAyNTsgYi5mb28gPSA0MjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5iYXIiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChq
c2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMjUpOworICAgICAgICB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5mb28iKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDIpOworCisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5t
dWx0aXBseSgyKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiYi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgODQpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlRXJyb3IoKQoreworICAgIGpzY19jb250ZXh0
X3Rocm93KGpzY19jb250ZXh0X2dldF9jdXJyZW50KCksICJBUEkgZXhjZXB0aW9uIik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RKU0NFeGNlcHRpb25zKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4
dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNv
bnRleHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvbyIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICAvLyBCeSBkZWZhdWx0IGV4
Y2VwdGlvbnMgYXJlIG5vdCBjYXVnaHQuCisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191
bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19j
b250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KEpT
Q19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0
aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2Uo
ZXhjZXB0aW9uKSwgPT0sICJDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb28iKTsKKyAgICAgICAgZ19h
c3NlcnRfY21wdWludChqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlcihleGNlcHRpb24pLCA9
PSwgMSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpKGV4
Y2VwdGlvbikpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsK
KyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IDI1O1xuZm9vOyIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpz
Y19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhj
ZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfZXhjZXB0aW9uX2dldF9saW5l
X251bWJlcihleGNlcHRpb24pLCA9PSwgMik7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFr
Q2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCghanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihj
b250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaShjb250ZXh0LmdldCgp
LCAiZm9vIiwgImZpbGU6Ly8vZm9vL3NjcmlwdC5qcyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmlu
ZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0
X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19F
WENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkoZXhj
ZXB0aW9uKSwgPT0sICJmaWxlOi8vL2Zvby9zY3JpcHQuanMiKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY29udGV4dF9nZXRf
ZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBm
dW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCks
ICJjcmVhdGVFcnJvciIsIEdfQ0FMTEJBQ0soY3JlYXRlRXJyb3IpLCBHX1RZUEVfTk9ORSwgMCwg
R19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5jdGlvbi5nZXQoKSk7Cisg
ICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiY3JlYXRlRXJyb3Ii
LCBmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ2YXIgcmVzdWx0
OyB0cnkgeyBjcmVhdGVFcnJvcigpOyB9IGNhdGNoIChlKSB7IHJlc3VsdCA9ICdDYXVnaHQgZXhj
ZXB0aW9uJzsgfSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhqc2NfdmFsdWVfdG9fc3RyaW5nKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0U3RyaW5nLmdldCgpLCA9
PSwgIkNhdWdodCBleGNlcHRpb24iKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19jb250ZXh0X2dl
dF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFyIHJlc3VsdDsgY3JlYXRl
RXJyb3IoKTsgcmVzdWx0ID0gJ05vIGV4Y2VwdGlvbic7IikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmlu
ZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0
X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19F
WENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0
aW9uKSwgPT0sICJBUEkgZXhjZXB0aW9uIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoanNj
X2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoZXhjZXB0aW9uKSwgPT0sIDEpOworICAgICAgICBn
X2Fzc2VydCghanNjX2V4Y2VwdGlvbl9nZXRfc291cmNlX3VyaShleGNlcHRpb24pKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2Nf
Y29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBzdHJ1Y3Qg
VGVzdCB7CisgICAgICAgICAgICBKU0NDb250ZXh0KiBjb250ZXh0OworICAgICAgICAgICAgR1Jl
ZlB0cjxKU0NFeGNlcHRpb24+IGV4Y2VwdGlvbjsKKyAgICAgICAgICAgIGJvb2wgd2FzRGVsZXRl
ZDsKKyAgICAgICAgfTsKKworICAgICAgICBUZXN0IHRlc3QgPSB7IGNvbnRleHQuZ2V0KCksIG51
bGxwdHIsIGZhbHNlIH07CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRs
ZXIoY29udGV4dC5nZXQoKSwgW10oSlNDQ29udGV4dCogY29udGV4dCwgSlNDRXhjZXB0aW9uKiBl
eGNlcHRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvKiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8VGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGNvbnRl
eHQgPT0gdGVzdC0+Y29udGV4dCk7CisgICAgICAgICAgICBnX2Fzc2VydCghdGVzdC0+ZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT53YXNEZWxldGVkKTsKKyAgICAgICAg
ICAgIHRlc3QtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfSwgJnRlc3QsIFtdKGdw
b2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxUZXN0Kj4odXNlckRh
dGEpLT53YXNEZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgLy8gRXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgdGhlIHVzZXIgaGFuZGxlci4KKyAgICAg
ICAgZ19hc3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9OKHRlc3QuZXhjZXB0aW9uLmdldCgpKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2godGVzdC5leGNlcHRpb24uZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZSh0ZXN0LmV4Y2VwdGlvbi5n
ZXQoKSksID09LCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vIik7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHVpbnQoanNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIodGVzdC5leGNlcHRpb24uZ2V0
KCkpLCA9PSwgMSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2Vf
dXJpKHRlc3QuZXhjZXB0aW9uLmdldCgpKSk7CisKKyAgICAgICAgZ19hc3NlcnQoIXRlc3Qud2Fz
RGVsZXRlZCk7CisgICAgICAgIGpzY19jb250ZXh0X3BvcF9leGNlcHRpb25faGFuZGxlcihjb250
ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodGVzdC53YXNEZWxldGVkKTsKKworICAgICAg
ICB0ZXN0LmV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgICAgIHRlc3Qud2FzRGVsZXRlZCA9IGZh
bHNlOworICAgICAgICBqc2NfY29udGV4dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQu
Z2V0KCksIFtdKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uLCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byogdGVzdCA9IHN0YXRpY19jYXN0
PFRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBnX2Fzc2VydChjb250ZXh0ID09IHRlc3Qt
PmNvbnRleHQpOworICAgICAgICAgICAgZ19hc3NlcnQoIXRlc3QtPmV4Y2VwdGlvbik7CisgICAg
ICAgICAgICBnX2Fzc2VydCghdGVzdC0+d2FzRGVsZXRlZCk7CisgICAgICAgICAgICB0ZXN0LT5l
eGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgICAgICBqc2NfY29udGV4dF90aHJvd19leGNl
cHRpb24oY29udGV4dCwgZXhjZXB0aW9uKTsKKyAgICAgICAgfSwgJnRlc3QsIFtdKGdwb2ludGVy
IHVzZXJEYXRhKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxUZXN0Kj4odXNlckRhdGEpLT53
YXNEZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmb28iKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgLy8gRXhjZXB0aW9uIHdhcyBo
YW5kbGVkIGJ5IHRoZSB1c2VyIGhhbmRsZXIsIGJ1dCBub3QgY2F1Z2h0LgorICAgICAgICBhdXRv
KiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbikpOworICAgICAgICBj
aGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgICAgIGdfYXNzZXJ0KGV4Y2VwdGlvbiA9PSB0
ZXN0LmV4Y2VwdGlvbi5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnQoIXRlc3Qud2FzRGVsZXRl
ZCk7CisgICAgICAgIGpzY19jb250ZXh0X3BvcF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQodGVzdC53YXNEZWxldGVkKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RKU0NQcm9taXNlcygpCit7CisgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsK
KyAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
bmV3KCkpOworICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgRXhjZXB0aW9u
SGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gcHJvbWlzZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4
dC5nZXQoKSwgIlByb21pc2UiKSk7CisgICAgY2hlY2tlci53YXRjaChwcm9taXNlLmdldCgpKTsK
KyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfZnVuY3Rpb24ocHJvbWlzZS5nZXQoKSkpOworCisg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJ0eXBlb2YgUHJvbWlzZSIpKTsKKyAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyhyZXN1bHQu
Z2V0KCkpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhqc2NfdmFsdWVfdG9f
c3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcu
Z2V0KCksID09LCAiZnVuY3Rpb24iKTsKKworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0ID0gMDsgUHJvbWlzZS5yZXNvbHZl
KDQyKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXN1bHQgPSB2YWx1ZTsgfSk7IikpOworICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZh
bHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAicmVz
dWx0IikpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNj
X3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQyKTsKK30KKworc3RhdGljIGJvb2wg
c19mb29XYXNGcmVlZDsKKworc3RhdGljIHZvaWQgZm9vRnJlZUFuZExvZyhGb28qIGZvbykKK3sK
KyAgICBmb29GcmVlKGZvbyk7CisgICAgc19mb29XYXNGcmVlZCA9IHRydWU7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RKU0NHYXJiYWdlQ29sbGVjdG9yKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4
dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250
ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikp
OworICAgICAgICBjaGVja2VyLndhdGNoKG9iamVjdC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQu
Z2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihmb28uZ2V0KCkpLCA9PSwgMjUpOworICAgICAg
ICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShvYmplY3QuZ2V0KCksICJmb28iLCBmb28u
Z2V0KCkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
ZiIsIG9iamVjdC5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChvYmplY3Qu
Z2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKworICAgICAgICBvYmplY3QgPSBudWxscHRyOworICAg
ICAgICBmb28gPSBudWxscHRyOworICAgICAgICByZXN1bHQgPSBudWxscHRyOworICAgICAgICBq
c2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgIG9iamVjdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAgZm9vID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLmZvbyIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
bnVtYmVyKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3Rv
X2ludDMyKGZvby5nZXQoKSksID09LCAyNSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gdW5kZWZpbmVkIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAganNjQ29udGV4
dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc19vYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92
YWx1ZShjb250ZXh0LmdldCgpLCAiZiIsIG9iamVjdC5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChvYmpl
Y3QuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAgICAgICAgZm9vID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLmZvbyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVy
KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMy
KGZvby5nZXQoKSksID09LCAyNSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tl
ciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgc19mb29XYXNGcmVlZCA9IGZhbHNlOworCisgICAgICAgIEpTQ0Ns
YXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCks
ICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVl
QW5kTG9nKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAgICBnX2Fz
c2VydCghanNjX2NsYXNzX2dldF9wYXJlbnQoanNjQ2xhc3MpKTsKKworICAgICAgICBqc2NfY2xh
c3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0
ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihvYmpl
Y3QuZ2V0KCksIGpzY0NsYXNzKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KG9i
amVjdC5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IHVuZGVmaW5lZCIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIGdfYXNzZXJ0
KCFzX2Zvb1dhc0ZyZWVkKTsKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCghc19mb29XYXNGcmVlZCk7CisKKyAgICAgICAg
b2JqZWN0ID0gbnVsbHB0cjsKKyAgICAgICAgZ19hc3NlcnQoIXNfZm9vV2FzRnJlZWQpOworICAg
ICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KHNfZm9vV2FzRnJlZWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdHNKU0NW
aXJ0dWFsTWFjaGluZSgpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOwor
ICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAg
ICAgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiSlNDVmlydHVhbE1hY2hpbmVUZXN0
IiwgWyZdIHsKKyAgICAgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3Jl
Z2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9j
YXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlQW5kTG9nKSk7CisgICAgICAgICAgICBjaGVja2Vy
LndhdGNoKGpzY0NsYXNzKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3Bh
cmVudChqc2NDbGFzcykpOworCisgICAgICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9y
KGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVS
LCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3Qg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcg
Rm9vKCk7IikpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworICAg
ICAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2Yob2JqZWN0
LmdldCgpLCBqc2NDbGFzcykpOworICAgICAgICB9KTsKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9y
Q29tcGxldGlvbigpOworICAgICAgICB0aHJlYWQtPmRldGFjaCgpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKwor
ICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgfQor
CisgICAgeworICAgICAgICBWZWN0b3I8UmVmPFRocmVhZD4sIDU+IHRocmVhZHM7CisgICAgICAg
IGJvb2wgb2sgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTsgKytp
KSB7CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZChUaHJlYWQ6OmNyZWF0ZSgiSlNDVmlydHVh
bE1hY2hpbmVUZXN0IiwgWyZva10geworICAgICAgICAgICAgICAgIEdSZWZQdHI8SlNDVmlydHVh
bE1hY2hpbmU+IHZtID0gYWRvcHRHUmVmKGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkpOworICAg
ICAgICAgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUodm0uZ2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICBqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLAorICAgICAgICAgICAgICAg
ICAgICAidmFyIGFycmF5ID0gW3t9XTtcbiIKKyAgICAgICAgICAgICAgICAgICAgImZvciAodmFy
IGkgPSAwOyBpIDwgMjA7ICsraSkge1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgIHZhciBu
ZXdBcnJheSA9IG5ldyBBcnJheShhcnJheS5sZW5ndGggKiAyKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgIiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5ld0FycmF5Lmxlbmd0aDsgKytqKVxuIgor
ICAgICAgICAgICAgICAgICAgICAiICAgICAgICBuZXdBcnJheVtqXSA9IHtwYXJlbnQ6IGFycmF5
W2ogLyAyXX07XG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgYXJyYXkgPSBuZXdBcnJheTtc
biIKKyAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9u
KGNvbnRleHQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGdfbWVzc2FnZSgiVW5jYXVn
aHQgZXhjZXB0aW9uOiAlcyIsIGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYXJyYXkiKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFqc2NfdmFsdWVfaXNfb2JqZWN0KHZhbHVlLmdldCgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBnX21lc3NhZ2UoIkRpZCBub3QgZmluZCBcImFycmF5XCIgdmFyaWFibGUiKTsKKyAgICAg
ICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworICAgICAgICAg
ICAgfSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiB0aHJlYWRz
KSB7CisgICAgICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgICAg
ICB0aHJlYWQtPmRldGFjaCgpOworICAgICAgICB9CisKKyAgICAgICAgZ19hc3NlcnQob2spOwor
ICAgIH0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGdfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgbnVsbHB0cik7CisKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9q
c2MvYmFzaWMiLCB0ZXN0SlNDQmFzaWMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy90eXBl
cyIsIHRlc3RKU0NUeXBlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2Z1bmN0aW9uIiwg
dGVzdEpTQ0Z1bmN0aW9uKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2Mvb2JqZWN0IiwgdGVz
dEpTQ09iamVjdCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2NsYXNzIiwgdGVzdEpTQ0Ns
YXNzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvcHJvdG90eXBlcyIsIHRlc3RKU0NQcm90
b3R5cGVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZXhjZXB0aW9ucyIsIHRlc3RKU0NF
eGNlcHRpb25zKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvcHJvbWlzZXMiLCB0ZXN0SlND
UHJvbWlzZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9nYXJiYWdlLWNvbGxlY3RvciIs
IHRlc3RKU0NHYXJiYWdlQ29sbGVjdG9yKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2Mvdm0i
LCB0ZXN0c0pTQ1ZpcnR1YWxNYWNoaW5lKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335108</attachid>
            <date>2018-03-06 09:43:17 -0800</date>
            <delta_ts>2018-03-08 05:30:32 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>jsc-glib-api.diff</filename>
            <type>text/plain</type>
            <size>217512</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCmluZGV4
IDM5NThjZjQ5MjVmLi5hYWU1ZDQxOGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5oPgogCi0jaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRCB8fCBkZWZpbmVk
KEpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKQEAgLTU1LDYg
KzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBKU0Nf
T0JKQ19BUElfRU5BQkxFRAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVEIHx8IGRlZmlu
ZWQoSlNDX0dMSUJfQVBJX0VOQUJMRUQpCiAKICNlbmRpZiAvLyBKU0FQSVdyYXBwZXJPYmplY3Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBl
ck9iamVjdEdMaWIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3Jh
cHBlck9iamVjdEdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yY2QzYmVhY2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisKKyNpbmNsdWRl
ICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKK307CisKK3N0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcj4ganNXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI7CisgICAgcmV0dXJuICZq
c1dyYXBwZXJPYmplY3RIYW5kbGVPd25lci5nZXQoKTsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqKQoreworICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXND
ZWxsKCkpOworICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlck9iamVjdCktPnJlbGVhc2VT
b29uKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0PihzdGF0aWNfY2Fz
dDxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0Kj4od3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKSkpOworICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBsOjphc1dl
YWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKK30KKworYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIC8vIFdlIHVz
ZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2
ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKKyAgICAvLyB0aGUgc2FtZSB3cmFwcGVkIG9i
amVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBv
YmplY3RzIGFsaXZlLgorICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpTQzo6SGVhcDo6aXNNYXJrZWQod3Jh
cHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRh
aW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworfQorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OworCit0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKwordGVtcGxh
dGUgPD4KK1N0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKK30KKworSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnNldFdyYXBwZWRPYmplY3Qodm9pZCogd3JhcHBlZE9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW1fd3JhcHBlZE9iamVjdCk7CisgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVj
dDsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGMxMGFmMjVjMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgIkFQSUNhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJBUElD
YXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Rh
dGljIEpTVmFsdWVSZWYgY2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4o
dG9KUyhmdW5jdGlvbikpLT5jYWxsKGNhbGxlckNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpTT2JqZWN0UmVmIGNh
bGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiBj
b25zdHJ1Y3Rvciwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoY29uc3RydWN0b3IpKS0+Y29uc3RydWN0KGNhbGxl
ckNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworY29u
c3QgQ2xhc3NJbmZvIEpTQ0NhbGxiYWNrRnVuY3Rpb246OnNfaW5mbyA9IHsgIkNhbGxiYWNrRnVu
Y3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQ0NhbGxiYWNrRnVuY3Rpb24pIH07CisKK0pTQ0NhbGxiYWNrRnVu
Y3Rpb24qIEpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgVHlwZSB0eXBlLCBKU0NDbGFzcyog
anNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0dXJuVHlwZSwg
VmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCk7CisgICAgSlND
Q2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0NDYWxsYmFja0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNDQ2FsbGJhY2tGdW5jdGlvbih2bSwgc3Ry
dWN0dXJlLCB0eXBlLCBqc2NDbGFzcywgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1l
KTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK0pTQ0NhbGxiYWNrRnVuY3Rpb246OkpTQ0Nh
bGxiYWNrRnVuY3Rpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVHlwZSB0eXBlLCBK
U0NDbGFzcyoganNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0
dXJuVHlwZSwgVmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCisgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKHZtLCBzdHJ1Y3R1cmUsIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNhbGw8SlNDQ2FsbGJhY2tG
dW5jdGlvbj4sIHR5cGUgPT0gVHlwZTo6Q29uc3RydWN0b3IgPyBBUElDYWxsYmFja0Z1bmN0aW9u
Ojpjb25zdHJ1Y3Q8SlNDQ2FsbGJhY2tGdW5jdGlvbj4gOiBudWxscHRyKQorICAgICwgbV9mdW5j
dGlvbkNhbGxiYWNrKGNhbGxBc0Z1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RDYWxsYmFjayhj
YWxsQXNDb25zdHJ1Y3RvcikKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9jbGFzcyhqc2ND
bGFzcykKKyAgICAsIG1fY2xvc3VyZShXVEZNb3ZlKGNsb3N1cmUpKQorICAgICwgbV9yZXR1cm5U
eXBlKHJldHVyblR5cGUpCisgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IFR5cGU6OkNvbnN0cnVjdG9yIHx8IGpzY0Ns
YXNzKTsKKyAgICBpZiAoR19DTE9TVVJFX05FRURTX01BUlNIQUwobV9jbG9zdXJlLmdldCgpKSkK
KyAgICAgICAgZ19jbG9zdXJlX3NldF9tYXJzaGFsKG1fY2xvc3VyZS5nZXQoKSwgZ19jY2xvc3Vy
ZV9tYXJzaGFsX2dlbmVyaWMpOworfQorCitKU1ZhbHVlUmVmIEpTQ0NhbGxiYWNrRnVuY3Rpb246
OmNhbGwoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxl
ckNvbnRleHQpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29u
dGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAo
bV90eXBlID09IFR5cGU6OkNvbnN0cnVjdG9yKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY2Fu
bm90IGNhbGwgYSBjbGFzcyBjb25zdHJ1Y3RvciB3aXRob3V0IHxuZXd8IikpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisgICAgfQorCisgICAgYXV0
byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCksIHRv
UmVmKHRoaXMpLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
Z3BvaW50ZXIgaW5zdGFuY2UgPSBudWxscHRyOworICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6TWV0
aG9kKSB7CisgICAgICAgIGluc3RhbmNlID0ganNjQ29udGV4dFdyYXBwZWRPYmplY3QoY29udGV4
dC5nZXQoKSwgdGhpc09iamVjdCk7CisgICAgICAgIGlmICghaW5zdGFuY2UpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4
dCksIEFTQ0lJTGl0ZXJhbCgiaW52YWxpZCBpbnN0YW5jZSB0eXBlIGluIG1ldGhvZCIpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoanNDb250ZXh0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEdDbG9zdXJlIGFsd2F5cyBleHBlY3QgdG8gaGF2ZSBhdCBs
ZWFzdCB0aGUgaW5zdGFuY2UgcGFyYW1ldGVyLgorICAgIGJvb2wgYWRkSW5zdGFuY2UgPSBpbnN0
YW5jZSB8fCBtX3BhcmFtZXRlcnMuaXNFbXB0eSgpOworCisgICAgYXV0byBwYXJhbWV0ZXJDb3Vu
dCA9IHN0ZDo6bWluKG1fcGFyYW1ldGVycy5zaXplKCksIGFyZ3VtZW50Q291bnQpOworICAgIGlm
IChhZGRJbnN0YW5jZSkKKyAgICAgICAgcGFyYW1ldGVyQ291bnQrKzsKKyAgICBhdXRvKiB2YWx1
ZXMgPSBzdGF0aWNfY2FzdDxHVmFsdWUqPihnX2FsbG9jYShzaXplb2YoR1ZhbHVlKSAqIHBhcmFt
ZXRlckNvdW50KSk7CisgICAgbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKEdWYWx1ZSkgKiBwYXJh
bWV0ZXJDb3VudCk7CisKKyAgICBzaXplX3QgZmlyc3RQYXJhbWV0ZXIgPSAwOworICAgIGlmIChh
ZGRJbnN0YW5jZSkgeworICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlc1swXSwgR19UWVBFX1BP
SU5URVIpOworICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKCZ2YWx1ZXNbMF0sIGluc3RhbmNl
KTsKKyAgICAgICAgZmlyc3RQYXJhbWV0ZXIgPSAxOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RQYXJhbWV0ZXI7IGkgPCBwYXJhbWV0ZXJDb3VudCAmJiAhKmV4Y2VwdGlvbjsgKytp
KQorICAgICAgICBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3Vt
ZW50c1tpIC0gZmlyc3RQYXJhbWV0ZXJdLCBtX3BhcmFtZXRlcnNbaSAtIGZpcnN0UGFyYW1ldGVy
XSwgJnZhbHVlc1tpXSwgZXhjZXB0aW9uKTsKKworICAgIEdWYWx1ZSByZXR1cm5WYWx1ZSA9IEdf
VkFMVUVfSU5JVDsKKyAgICBpZiAobV9yZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FKQorICAgICAg
ICBnX3ZhbHVlX2luaXQoJnJldHVyblZhbHVlLCBtX3JldHVyblR5cGUpOworCisgICAgaWYgKCEq
ZXhjZXB0aW9uKQorICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgbV9y
ZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FID8gJnJldHVyblZhbHVlIDogbnVsbHB0ciwgcGFyYW1l
dGVyQ291bnQsIHZhbHVlcywgbnVsbHB0cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50OyArK2kpCisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlc1tpXSk7
CisKKyAgICBpZiAoYXV0byoganNjRXhjZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlv
bihjb250ZXh0LmdldCgpKSkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkdldEpT
VmFsdWUoanNjRXhjZXB0aW9uKTsKKworICAgIGpzY0NvbnRleHRQb3BDYWxsYmFjayhjb250ZXh0
LmdldCgpLCBXVEZNb3ZlKGNhbGxiYWNrRGF0YSkpOworCisgICAgaWYgKG1fcmV0dXJuVHlwZSA9
PSBHX1RZUEVfTk9ORSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29u
dGV4dCk7CisKKyAgICBhdXRvKiByZXR2YWwgPSAqZXhjZXB0aW9uID8gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoanNDb250ZXh0KSA6IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoY29udGV4dC5nZXQo
KSwgJnJldHVyblZhbHVlLCBleGNlcHRpb24pOworICAgIGdfdmFsdWVfdW5zZXQoJnJldHVyblZh
bHVlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitKU09iamVjdFJlZiBKU0NDYWxsYmFja0Z1
bmN0aW9uOjpjb25zdHJ1Y3QoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxlckNvbnRleHQpKTsK
KyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9HbG9iYWxSZWYoZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAobV9yZXR1cm5UeXBl
ID09IEdfVFlQRV9OT05FKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3JzIGNh
bm5vdCBiZSB2b2lkIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
YXV0byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCks
IHRvUmVmKHRoaXMpLCBudWxscHRyLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
R1ZhbHVlIHJldHVyblZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmcmV0
dXJuVmFsdWUsIG1fcmV0dXJuVHlwZSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBHQ2xvc3VyZSBhbHdheXMgZXhwZWN0IHRvIGhhdmUgYXQgbGVhc3Qg
dGhlIGluc3RhbmNlIHBhcmFtZXRlci4KKyAgICAgICAgR1ZhbHVlIGR1bW15VmFsdWUgPSBHX1ZB
TFVFX0lOSVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmZHVtbXlWYWx1ZSwgR19UWVBFX1BPSU5U
RVIpOworICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgJnJldHVyblZh
bHVlLCAxLCAmZHVtbXlWYWx1ZSwgbnVsbHB0cik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJmR1
bW15VmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gcGFyYW1ldGVyQ291bnQgPSBz
dGQ6Om1pbihtX3BhcmFtZXRlcnMuc2l6ZSgpLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgYXV0
byogdmFsdWVzID0gc3RhdGljX2Nhc3Q8R1ZhbHVlKj4oZ19hbGxvY2Eoc2l6ZW9mKEdWYWx1ZSkg
KiBwYXJhbWV0ZXJDb3VudCkpOworICAgICAgICBtZW1zZXQodmFsdWVzLCAwLCBzaXplb2YoR1Zh
bHVlKSAqIHBhcmFtZXRlckNvdW50KTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50ICYmICEqZXhjZXB0aW9uOyArK2kpCisgICAgICAgICAgICBqc2NDb250
ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3VtZW50c1tpXSwgbV9wYXJhbWV0
ZXJzW2ldLCAmdmFsdWVzW2ldLCBleGNlcHRpb24pOworCisgICAgICAgIGlmICghKmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIGdfY2xvc3VyZV9pbnZva2UobV9jbG9zdXJlLmdldCgpLCAmcmV0dXJu
VmFsdWUsIHBhcmFtZXRlckNvdW50LCB2YWx1ZXMsIG51bGxwdHIpOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGdfdmFs
dWVfdW5zZXQoJnZhbHVlc1tpXSk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIGpzY0V4Y2VwdGlv
biA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpCisgICAgICAgICpl
eGNlcHRpb24gPSBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKGpzY0V4Y2VwdGlvbik7CisKKyAgICBq
c2NDb250ZXh0UG9wQ2FsbGJhY2soY29udGV4dC5nZXQoKSwgV1RGTW92ZShjYWxsYmFja0RhdGEp
KTsKKworICAgIGlmICgqZXhjZXB0aW9uKSB7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3dpdGNoIChn
X3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKCZyZXR1cm5WYWx1ZSkpKSB7CisgICAgY2Fz
ZSBHX1RZUEVfUE9JTlRFUjoKKyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgICAgIGlmIChh
dXRvKiBwdHIgPSByZXR1cm5WYWx1ZS5kYXRhWzBdLnZfcG9pbnRlcikgeworICAgICAgICAgICAg
YXV0byogcmV0dmFsID0ganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihtX2NsYXNzLmdldCgp
LCBwdHIpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmcmV0dXJuVmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRvUmVmKHJldHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgQVNDSUlMaXRl
cmFsKCJjb25zdHJ1Y3RvciByZXR1cm5lZCBudWxsIikpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiaW52YWxpZCB0eXBlICIsIGdfdHlwZV9uYW1l
KEdfVkFMVUVfVFlQRSgmcmV0dXJuVmFsdWUpKSwgIiByZXR1cm5lZCBieSBjb25zdHJ1Y3RvciIp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBKU0NDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0
aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCktPkpTQ0NhbGxiYWNrRnVuY3Rpb246
On5KU0NDYWxsYmFja0Z1bmN0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4NWI2M2M0YmFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNr
RnVuY3Rpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CisgICAgZnJpZW5kIHN0cnVjdCBBUElDYWxsYmFja0Z1bmN0aW9uOwor
cHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCisgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgRnVuY3Rpb24sCisgICAgICAgIE1ldGhvZCwKKyAgICAgICAg
Q29uc3RydWN0b3IKKyAgICB9OworCisgICAgc3RhdGljIEpTQ0NhbGxiYWNrRnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBUeXBlLCBKU0ND
bGFzcyosIEdSZWZQdHI8R0Nsb3N1cmU+JiYsIEdUeXBlLCBWZWN0b3I8R1R5cGU+JiYpOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIEpTVmFsdWVSZWYgY2FsbChKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJl
ZiBjb25zdHJ1Y3QoSlNDb250ZXh0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKworcHJpdmF0ZToK
KyAgICBKU0NDYWxsYmFja0Z1bmN0aW9uKFZNJiwgU3RydWN0dXJlKiwgVHlwZSwgSlNDQ2xhc3Mq
LCBHUmVmUHRyPEdDbG9zdXJlPiYmLCBHVHlwZSwgVmVjdG9yPEdUeXBlPiYmKTsKKworICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5jdGlvbkNhbGxiYWNrKCkgeyByZXR1cm4g
bV9mdW5jdGlvbkNhbGxiYWNrOyB9CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrIGNvbnN0cnVjdENhbGxiYWNrKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RDYWxsYmFjazsgfQor
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIG1fZnVuY3Rpb25DYWxsYmFjazsK
KyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgbV9jb25zdHJ1Y3RDYWxsYmFj
azsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBHUmVmUHRyPEpTQ0NsYXNzPiBtX2NsYXNzOworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IG1fY2xvc3VyZTsKKyAgICBHVHlwZSBtX3JldHVyblR5cGU7Cisg
ICAgVmVjdG9yPEdUeXBlPiBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNzIyYTVkMjg5MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAKQEAgLTAsMCAr
MSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzLmgiCisKKyNpbmNsdWRlICJKU0NDYWxsYmFj
a0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlND
Q29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
VmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfQ09OVEVYVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9QQVJFTlQKK307CisKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDbGFzc1ByaXZhdGUgeworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7Cisg
ICAgQ1N0cmluZyBuYW1lOworICAgIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBHRGVzdHJveU5v
dGlmeSBkZXN0cm95RnVuY3Rpb247CisgICAgSlNDQ2xhc3MqIHBhcmVudENsYXNzOworICAgIEpT
Qzo6V2VhazxKU0M6OkpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgSGFzaE1hcDxDU3RyaW5nLCBK
U0M6OldlYWs8SlNDOjpKU09iamVjdD4+IGNvbnN0cnVjdG9yczsKK30gSlNDQ2xhc3NQcml2YXRl
OworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ2xhc3MsIGpzY19jbGFzcywgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQganNjQ2xhc3NHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAg
IEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBqc2NDbGFzcy0+cHJpdi0+Y29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGpzY0Ns
YXNzLT5wcml2LT5uYW1lLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QVJFTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjQ2xhc3MtPnByaXYt
PnBhcmVudENsYXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NTZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFy
YW1TcGVjKQoreworICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAg
anNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBKU0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGpz
Y0NsYXNzLT5wcml2LT5uYW1lID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudCA9
IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICBqc2NDbGFzcy0+cHJpdi0+
cGFyZW50Q2xhc3MgPSBKU0NfQ0xBU1MocGFyZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NEaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBKU0NfQ0xB
U1Mob2JqZWN0KTsKKyAgICBpZiAoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpIHsKKyAgICAgICAg
SlNDbGFzc1JlbGVhc2UoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpOworICAgICAgICBqc2NDbGFz
cy0+cHJpdi0+anNDbGFzcyA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mo
anNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQganNjQ2xhc3NDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1Rf
Q0xBU1MoanNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAg
ICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBKU0NfQ0xBU1Mob2JqZWN0KS0+cHJpdjsKKyAgICBK
U0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7Cisg
ICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBwcml2LT5uYW1lLmRhdGEoKTsKKyAgICBwcml2LT5q
c0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHByb3RvdHlwZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc1Byb3RvdHlwZSIsIHByaXYtPm5h
bWUuZGF0YSgpKSk7CisgICAgSlNDbGFzc0RlZmluaXRpb24gcHJvdG90eXBlRGVmaW5pdGlvbiA9
IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIHByb3RvdHlwZURlZmluaXRpb24uY2xhc3NO
YW1lID0gcHJvdG90eXBlTmFtZS5nZXQoKTsKKyAgICBKU0NsYXNzUmVmIHByb3RvdHlwZUNsYXNz
ID0gSlNDbGFzc0NyZWF0ZSgmcHJvdG90eXBlRGVmaW5pdGlvbik7CisgICAgcHJpdi0+cHJvdG90
eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlSlNXcmFwcGVyKHByaXYtPmNvbnRleHQsIHByb3Rv
dHlwZUNsYXNzKTsKKyAgICBKU0NsYXNzUmVsZWFzZShwcm90b3R5cGVDbGFzcyk7CisKKyAgICBp
ZiAocHJpdi0+cGFyZW50Q2xhc3MpCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCksIHRvUmVmKHByaXYtPnByb3RvdHlwZS5n
ZXQoKSksIHRvUmVmKHByaXYtPnBhcmVudENsYXNzLT5wcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQganNjX2NsYXNzX2NsYXNzX2luaXQoSlNDQ2xhc3NDbGFzcyoga2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBvYmpDbGFzcy0+Y29uc3RydWN0ZWQgPSBqc2NDbGFzc0NvbnN0cnVjdGVkOworICAg
IG9iakNsYXNzLT5kaXNwb3NlID0ganNjQ2xhc3NEaXNwb3NlOworICAgIG9iakNsYXNzLT5nZXRf
cHJvcGVydHkgPSBqc2NDbGFzc0dldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5zZXRfcHJvcGVy
dHkgPSBqc2NDbGFzc1NldFByb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkpTQ0Nv
bnRleHQiLAorICAgICAgICAgICAgIkpTQyBDb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBF
X0NPTlRFWFQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAg
ICAgICAiTmFtZSIsCisgICAgICAgICAgICAiVGhlIGNsYXNzIG5hbWUiLAorICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfUEFSRU5ULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBhcmVudCIsCisgICAg
ICAgICAgICAiUGFydGVudCIsCisgICAgICAgICAgICAiVGhlIHBhcmVudCBjbGFzcyIsCisgICAg
ICAgICAgICBKU0NfVFlQRV9DTEFTUywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsK
K30KKworR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENsYXNzLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3MgPSBh
ZG9wdEdSZWYoSlNDX0NMQVNTKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DTEFTUywgImNvbnRleHQi
LCBjb250ZXh0LCAibmFtZSIsIG5hbWUsICJwYXJlbnQiLCBwYXJlbnRDbGFzcywgbnVsbHB0cikp
KTsKKyAgICBqc2NDbGFzcy0+cHJpdi0+ZGVzdHJveUZ1bmN0aW9uID0gZGVzdHJveUZ1bmN0aW9u
OworICAgIHJldHVybiBqc2NDbGFzczsKK30KKworSlNDbGFzc1JlZiBqc2NDbGFzc0dldEpTQ2xh
c3MoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIHJldHVybiBqc2NDbGFzcy0+cHJpdi0+anND
bGFzczsKK30KKworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihK
U0NDbGFzcyoganNjQ2xhc3MsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QpCit7CisgICAgSlNDQ2xh
c3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgcmV0dXJuIGpzY0NvbnRleHRH
ZXRPckNyZWF0ZUpTV3JhcHBlcihwcml2LT5jb250ZXh0LCBwcml2LT5qc0NsYXNzLCB0b1JlZihw
cml2LT5wcm90b3R5cGUuZ2V0KCkpLCB3cmFwcGVkT2JqZWN0LCBwcml2LT5kZXN0cm95RnVuY3Rp
b24pOworfQorCit2b2lkIGpzY0NsYXNzSW52YWxpZGF0ZShKU0NDbGFzcyoganNjQ2xhc3MpCit7
CisgICAganNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBudWxscHRyOworfQorCitjb25zdCBjaGFy
KiBqc2NfY2xhc3NfZ2V0X25hbWUoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0
dXJuIGpzY0NsYXNzLT5wcml2LT5uYW1lLmRhdGEoKTsKK30KKworSlNDQ2xhc3MqIGpzY19jbGFz
c19nZXRfcGFyZW50KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2ND
bGFzcy0+cHJpdi0+cGFyZW50Q2xhc3M7Cit9CisKK3ZvaWQganNjX2NsYXNzX2FkZF9jb25zdHJ1
Y3RvcihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxs
YmFjaywgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1Db3VudCwgLi4uKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChjYWxsYmFjayk7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBqc2NDbGFz
cy0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisgICAgaWYg
KCFuYW1lKQorICAgICAgICBuYW1lID0gcHJpdi0+bmFtZS5kYXRhKCk7CisKKyAgICB2YV9saXN0
IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgcGFyYW1Db3VudCk7CisgICAgVmVjdG9yPEdUeXBl
PiBwYXJhbWV0ZXJzOworICAgIGlmIChwYXJhbUNvdW50KSB7CisgICAgICAgIHBhcmFtZXRlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXJhbUNvdW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMudW5j
aGVja2VkQXBwZW5kKHZhX2FyZyhhcmdzLCBHVHlwZSkpOworICAgIH0KKyAgICB2YV9lbmQoYXJn
cyk7CisKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1
cmVfbmV3KGNhbGxiYWNrLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCkpOworICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOworICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpDb25zdHJ1
Y3RvciwganNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgIGF1dG8gY29uc3RydWN0b3IgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVW
YWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihmdW5jdGlvbk9iamVjdCkpOworICAgIEdSZWZQdHI8
SlNDVmFsdWU+IHByb3RvdHlwZSA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIHRvUmVmKHByaXYtPnByb3RvdHlwZS5nZXQoKSkpOworICAgIGF1dG8gbm9uRW51bWVy
YWJsZSA9IHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BF
UlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSk7CisgICAganNj
X3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShjb25zdHJ1Y3Rvci5nZXQoKSwgInBy
b3RvdHlwZSIsIG5vbkVudW1lcmFibGUsIHByb3RvdHlwZS5nZXQoKSk7CisgICAganNjX3ZhbHVl
X29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShwcm90b3R5cGUuZ2V0KCksICJjb25zdHJ1Y3Rv
ciIsIG5vbkVudW1lcmFibGUsIGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICBwcml2LT5jb25zdHJ1
Y3RvcnMuc2V0KG5hbWUsIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBpZiAobmFtZSA9PSBwcml2LT5u
YW1lKQorICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUocHJpdi0+Y29udGV4dCwgbmFtZSwg
Y29uc3RydWN0b3IuZ2V0KCkpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cml2LT5jb25zdHJ1Y3RvcnMuY29udGFpbnMocHJpdi0+bmFtZSkpOworICAgICAgICBhdXRvKiBt
YWluQ29uc3RydWN0b3JPYmplY3QgPSBwcml2LT5jb25zdHJ1Y3RvcnMuZ2V0KHByaXYtPm5hbWUp
OworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBtYWluQ29uc3RydWN0b3IgPSBqc2NDb250ZXh0
R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihtYWluQ29uc3RydWN0b3JPYmpl
Y3QpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkobWFpbkNvbnN0cnVj
dG9yLmdldCgpLCBuYW1lLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIGpz
Y19jbGFzc19hZGRfbWV0aG9kKEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwg
R0NhbGxiYWNrIGNhbGxiYWNrLCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50
LCAuLi4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY2FsbGJh
Y2spOworCisgICAgSlNDQ2xhc3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAg
Z19yZXR1cm5faWZfZmFpbChwcml2LT5jb250ZXh0KTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAg
ICB2YV9zdGFydChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRl
cnM7CisgICAgaWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1Db3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBl
bmQodmFfYXJnKGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2Fs
bGJhY2ssIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0KSk7CisgICAgSlNDOjpWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
YXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBTdHJpbmc6OmZyb21VVEY4KG5h
bWUpLAorICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1ldGhvZCwganNj
Q2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFyYW1ldGVycykp
KTsKKyAgICBhdXRvIG1ldGhvZCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm90b3R5cGUg
PSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2LT5w
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBhdXRvIG5vbkVudW1lcmFibGUgPSBzdGF0aWNfY2FzdDxK
U0NWYWx1ZVByb3BlcnR5RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgfCBK
U0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEUpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2RhdGEocHJvdG90eXBlLmdldCgpLCBuYW1lLCBub25FbnVtZXJhYmxlLCBtZXRo
b2QuZ2V0KCkpOworfQorCit2b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlNDQ2xhc3MqIGpz
Y0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBn
ZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNf
Q0xBU1MoanNjQ2xhc3MpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwocHJvcGVydHlUeXBlICE9IEdfVFlQRV9JTlZBTElEICYmIHByb3BlcnR5VHlw
ZSAhPSBHX1RZUEVfTk9ORSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChnZXR0ZXIgfHwgc2V0dGVy
KTsKKworICAgIEpTQ0NsYXNzUHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5wcml2OworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocHJpdi0+Y29udGV4dCk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBw
cm90b3R5cGUgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1Jl
Zihwcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9w
cm9wZXJ0eV9hY2Nlc3Nvcihwcm90b3R5cGUuZ2V0KCksIG5hbWUsIEpTQ19WQUxVRV9QUk9QRVJU
WV9DT05GSUdVUkFCTEUsIHByb3BlcnR5VHlwZSwgZ2V0dGVyLCBzZXR0ZXIpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMjAyZTY4NmJmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuaApAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pTQ19IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPGpzYy9q
c2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIEpTQ0Ns
YXNzX2gKKyNkZWZpbmUgSlNDQ2xhc3NfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ0xBU1MgICAgICAgICAgICAoanNjX2Ns
YXNzX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19DTEFTUyhvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DTEFTUywgSlNDQ2xhc3MpKQor
I2RlZmluZSBKU0NfSVNfQ0xBU1Mob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgSlNDX1RZUEVfQ0xBU1MpKQorI2RlZmluZSBKU0NfQ0xBU1NfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQ0xBU1Ms
IEpTQ0NsYXNzQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfQ0xBU1NfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQ0xBU1MpKQorI2RlZmluZSBK
U0NfQ0xBU1NfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgSlNDX1RZUEVfQ0xBU1MsIEpTQ0NsYXNzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlND
Q2xhc3MgSlNDQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3NDbGFzcyBKU0NDbGFzc0Ns
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzUHJpdmF0ZSBKU0NDbGFzc1ByaXZhdGU7CisK
K3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7CisKK3N0cnVjdCBfSlNDQ2xh
c3MgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgSlND
Q2xhc3NQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NDbGFzc0NsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAo
dm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7
Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfY2xhc3NfZ2V0X3R5cGUgICAgICAgICh2b2lkKTsK
KworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19jbGFzc19nZXRfbmFtZSAgICAgICAgKEpTQ0Ns
YXNzICAgKmpzY19jbGFzcyk7CisKK0pTQ19BUEkgSlNDQ2xhc3MgKgoranNjX2NsYXNzX2dldF9w
YXJlbnQgICAgICAoSlNDQ2xhc3MgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSB2b2lkCitqc2Nf
Y2xhc3NfYWRkX2NvbnN0cnVjdG9yIChKU0NDbGFzcyAgICpqc2NfY2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbGxiYWNrICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VHlwZSAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlND
X0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX21ldGhvZCAgICAgIChKU0NDbGFzcyAgICpqc2NfY2xh
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgY2FsbGJhY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVHlwZSAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX3Byb3BlcnR5ICAgIChKU0ND
bGFzcyAgICpqc2NfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgcHJvcGVydHlf
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgIGdldHRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgIHNldHRlcik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBKU0NDbGFzc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjJmMzY0NGQ0ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3MuaCIKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CisKK0dSZWZQdHI8SlNDQ2xhc3M+IGpzY0NsYXNzQ3JlYXRlKEpTQ0NvbnRleHQqLCBjb25z
dCBjaGFyKiwgSlNDQ2xhc3MqLCBHRGVzdHJveU5vdGlmeSk7CitKU0NsYXNzUmVmIGpzY0NsYXNz
R2V0SlNDbGFzcyhKU0NDbGFzcyopOworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0
ZUpTV3JhcHBlcihKU0NDbGFzcyosIGdwb2ludGVyKTsKK3ZvaWQganNjQ2xhc3NJbnZhbGlkYXRl
KEpTQ0NsYXNzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJjYTllODc4Zjc4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Nv
bnRleHQuY3BwCkBAIC0wLDAgKzEsNTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisK
KyNpbmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ0V4Y2VwdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmlydHVh
bE1hY2hpbmVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1hcC5oIgorI2luY2x1ZGUg
IkpTUmV0YWluUHRyLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfVklSVFVBTF9NQUNISU5FLAorfTsKKworc3RydWN0IEV4Y2VwdGlvbkhhbmRsZXIgeworICAg
IEV4Y2VwdGlvbkhhbmRsZXIoSlNDRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyLCB2b2lkKiB1c2Vy
RGF0YSA9IG51bGxwdHIsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnlGdW5jdGlvbiA9IG51
bGxwdHIpCisgICAgICAgIDogaGFuZGxlcihoYW5kbGVyKQorICAgICAgICAsIHVzZXJEYXRhKHVz
ZXJEYXRhKQorICAgICAgICAsIGRlc3Ryb3lOb3RpZnlGdW5jdGlvbihkZXN0cm95Tm90aWZ5RnVu
Y3Rpb24pCisgICAgeworICAgIH0KKworICAgIH5FeGNlcHRpb25IYW5kbGVyKCkKKyAgICB7Cisg
ICAgICAgIGlmIChkZXN0cm95Tm90aWZ5RnVuY3Rpb24pCisgICAgICAgICAgICBkZXN0cm95Tm90
aWZ5RnVuY3Rpb24odXNlckRhdGEpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkhhbmRsZXIoRXhj
ZXB0aW9uSGFuZGxlciYmIG90aGVyKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKGhhbmRsZXIs
IG90aGVyLmhhbmRsZXIpOworICAgICAgICBzdGQ6OnN3YXAodXNlckRhdGEsIG90aGVyLnVzZXJE
YXRhKTsKKyAgICAgICAgc3RkOjpzd2FwKGRlc3Ryb3lOb3RpZnlGdW5jdGlvbiwgb3RoZXIuZGVz
dHJveU5vdGlmeUZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25IYW5kbGVyKGNvbnN0
IEV4Y2VwdGlvbkhhbmRsZXImKSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25IYW5kbGVyJiBvcGVy
YXRvcj0oY29uc3QgRXhjZXB0aW9uSGFuZGxlciYpID0gZGVsZXRlOworCisgICAgSlNDRXhjZXB0
aW9uSGFuZGxlciBoYW5kbGVyIHsgbnVsbHB0ciB9OworICAgIHZvaWQqIHVzZXJEYXRhIHsgbnVs
bHB0ciB9OworICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnlGdW5jdGlvbiB7IG51bGxw
dHIgfTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0UHJpdmF0ZSB7CisgICAgR1Jl
ZlB0cjxKU0NWaXJ0dWFsTWFjaGluZT4gdm07CisgICAgSlNSZXRhaW5QdHI8SlNHbG9iYWxDb250
ZXh0UmVmPiBqc0NvbnRleHQ7CisgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IGV4Y2VwdGlvbjsK
KyAgICBWZWN0b3I8RXhjZXB0aW9uSGFuZGxlcj4gZXhjZXB0aW9uSGFuZGxlcnM7Cit9IEpTQ0Nv
bnRleHRQcml2YXRlOworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ29udGV4dCwganNjX2NvbnRl
eHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFj
aGluZShKU0NDb250ZXh0KiBjb250ZXh0LCBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiYmIHZt
KQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBp
ZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByaXYtPnZtKTsKKyAgICAgICAgcHJp
di0+dm0gPSBXVEZNb3ZlKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByaXYtPmpzQ29u
dGV4dCk7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cmR1cF9wcmludGYoIiVw
LWpzQ29udGV4dCIsICZUaHJlYWQ6OmN1cnJlbnQoKSkpOworICAgICAgICBpZiAoYXV0byogZGF0
YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHByaXYtPnZtLmdldCgpKSwgbmFtZS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIHByaXYtPmpzQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTR2xvYmFs
Q29udGV4dFJlZj4oZGF0YSk7CisgICAgICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVD
VChwcml2LT52bS5nZXQoKSksIG5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHByaXYtPmpzQ29udGV4dCA9IEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4
dFJlZj4oQWRvcHQsIEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoanNjVmlydHVhbE1hY2hp
bmVHZXRDb250ZXh0R3JvdXAocHJpdi0+dm0uZ2V0KCkpLCBudWxscHRyKSk7CisgICAgICAgIHRv
SlNHbG9iYWxPYmplY3QocHJpdi0+anNDb250ZXh0LmdldCgpKS0+c2V0V3JhcHBlck1hcChzdGQ6
Om1ha2VfdW5pcXVlPEpTQzo6V3JhcHBlck1hcD4oY29udGV4dCkpOworICAgICAgICBqc2NWaXJ0
dWFsTWFjaGluZUFkZENvbnRleHQocHJpdi0+dm0uZ2V0KCksIGNvbnRleHQpOworICAgIH0gZWxz
ZSBpZiAoIXByaXYtPnZtKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByaXYtPmpzQ29udGV4
dCk7CisgICAgICAgIGpzY1ZpcnR1YWxNYWNoaW5lUmVtb3ZlQ29udGV4dChwcml2LT52bS5nZXQo
KSwgY29udGV4dCk7CisgICAgICAgIHByaXYtPmpzQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAg
IHByaXYtPnZtID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRH
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0g
SlNDX0NPTlRFWFQob2JqZWN0KS0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcElEKSB7CisgICAg
Y2FzZSBQUk9QX1ZJUlRVQUxfTUFDSElORToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCBwcml2LT52bS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRTZXRQcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVY
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfVklSVFVB
TF9NQUNISU5FOgorICAgICAgICBpZiAoZ3BvaW50ZXIgdm0gPSBnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKQorICAgICAgICAgICAganNjQ29udGV4dFNldFZpcnR1YWxNYWNoaW5lKGNvbnRleHQs
IEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+KEpTQ19WSVJUVUFMX01BQ0hJTkUodm0pKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGpzY0NvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
R19PQkpFQ1RfQ0xBU1MoanNjX2NvbnRleHRfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2Jq
ZWN0KTsKKworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOwor
ICAgIGlmICghY29udGV4dC0+cHJpdi0+dm0pCisgICAgICAgIGpzY0NvbnRleHRTZXRWaXJ0dWFs
TWFjaGluZShjb250ZXh0LCBhZG9wdEdSZWYoanNjX3ZpcnR1YWxfbWFjaGluZV9uZXcoKSkpOwor
CisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKEV4Y2VwdGlvbkhh
bmRsZXIoW10oSlNDQ29udGV4dCogY29udGV4dCwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24sIGdw
b2ludGVyKSB7CisgICAgICAgIGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbihjb250ZXh0LCBl
eGNlcHRpb24pOworICAgIH0pKTsKK30KKworc3RhdGljIHZvaWQganNjQ29udGV4dERpc3Bvc2Uo
R09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQgPSBKU0NfQ09OVEVY
VChvYmplY3QpOworICAgIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFjaGluZShjb250ZXh0LCBudWxs
cHRyKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19jb250ZXh0X3BhcmVudF9jbGFzcyktPmRp
c3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQganNjX2NvbnRleHRfY2xhc3NfaW5pdChK
U0NDb250ZXh0Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xhc3MtPmdldF9wcm9wZXJ0eSA9IGpzY0Nv
bnRleHRHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+c2V0X3Byb3BlcnR5ID0ganNjQ29udGV4
dFNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5jb25zdHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25z
dHJ1Y3RlZDsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9IGpzY0NvbnRleHREaXNwb3NlOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJP
UF9WSVJUVUFMX01BQ0hJTkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAidmlydHVhbC1tYWNoaW5lIiwKKyAgICAgICAgICAgICJKU0NWaXJ0dWFsTWFjaGluZSIs
CisgICAgICAgICAgICAiSlNDIFZpcnR1YWwgTWFjaGluZSIsCisgICAgICAgICAgICBKU0NfVFlQ
RV9WSVJUVUFMX01BQ0hJTkUsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
V0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisK
K0dSZWZQdHI8SlNDQ29udGV4dD4ganNjQ29udGV4dEdldE9yQ3JlYXRlKEpTR2xvYmFsQ29udGV4
dFJlZiBqc0NvbnRleHQpCit7CisgICAgYXV0byB2bSA9IGpzY1ZpcnR1YWxNYWNoaW5lR2V0T3JD
cmVhdGUodG9SZWYoJnRvSlMoanNDb250ZXh0KS0+dm0oKSkpOworICAgIGlmIChHUmVmUHRyPEpT
Q0NvbnRleHQ+IGNvbnRleHQgPSBqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHQodm0uZ2V0KCks
IGpzQ29udGV4dCkpCisgICAgICAgIHJldHVybiBjb250ZXh0OworCisgICAgR1VuaXF1ZVB0cjxj
aGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXAtanNDb250ZXh0IiwgJlRocmVhZDo6Y3VycmVu
dCgpKSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qodm0uZ2V0KCkpLCBuYW1lLmdl
dCgpLCBqc0NvbnRleHQpOworICAgIHJldHVybiBqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFs
X21hY2hpbmUodm0uZ2V0KCkpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYganNjQ29udGV4dEdl
dEpTQ29udGV4dChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VSVChKU0NfSVNfQ09O
VEVUKGNvbnRleHQpKTsKKworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+
cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+anNDb250ZXh0LmdldCgpOworfQorCitzdGF0aWMgSlND
OjpXcmFwcGVyTWFwJiB3cmFwcGVyTWFwKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgYXV0
byogbWFwID0gdG9KU0dsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkp
LT53cmFwcGVyTWFwKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKKyAgICByZXR1cm4gKm1h
cDsKK30KKworR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoSlND
Q29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIHJldHVybiB3cmFw
cGVyTWFwKGNvbnRleHQpLmdvYmplY3RXcmFwcGVyKGpzVmFsdWUpOworfQorCit2b2lkIGpzY0Nv
bnRleHRWYWx1ZURlc3Ryb3llZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFs
dWUpCit7CisgICAgd3JhcHBlck1hcChjb250ZXh0KS51bndyYXAoanNWYWx1ZSk7Cit9CisKK0pT
Qzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoSlNDQ29udGV4dCogY29udGV4dCwg
Z3BvaW50ZXIgd3JhcHBlZE9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0
KS5qc1dyYXBwZXIod3JhcHBlZE9iamVjdCk7Cit9CisKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZUpTV3JhcHBlcihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NsYXNzUmVmIGpz
Q2xhc3MsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBncG9pbnRlciB3cmFwcGVkT2JqZWN0LCBHRGVz
dHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgaWYgKGF1dG8qIGpzV3JhcHBlciA9
IGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoY29udGV4dCwgd3JhcHBlZE9iamVjdCkpCisgICAgICAg
IHJldHVybiBqc1dyYXBwZXI7CisKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0KS5jcmVh
dGVKU1dyYXBwcGVyKGpzQ2xhc3MsIHByb3RvdHlwZSwgd3JhcHBlZE9iamVjdCwgZGVzdHJveUZ1
bmN0aW9uKTsKK30KKworZ3BvaW50ZXIganNjQ29udGV4dFdyYXBwZWRPYmplY3QoSlNDQ29udGV4
dCogY29udGV4dCwgSlNPYmplY3RSZWYganNPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwZXJN
YXAoY29udGV4dCkud3JhcHBlZE9iamVjdCh0b0pTKGpzT2JqZWN0KSk7Cit9CisKK0NhbGxiYWNr
RGF0YSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVS
ZWYgY2FsbGVlVmFsdWUsIEpTVmFsdWVSZWYgdGhpc1ZhbHVlLCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiogYXJndW1lbnRzKQoreworICAgIFRocmVhZCYgdGhyZWFkID0g
VGhyZWFkOjpjdXJyZW50KCk7CisgICAgYXV0byogcHJldmlvdXNTdGFjayA9IHN0YXRpY19jYXN0
PENhbGxiYWNrRGF0YSo+KHRocmVhZC5tX2FwaURhdGEpOworICAgIENhbGxiYWNrRGF0YSBkYXRh
ID0geyBjb250ZXh0LCBXVEZNb3ZlKGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbiksIGNhbGxlZVZh
bHVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgcHJldmlvdXNTdGFjayB9
OworICAgIHRocmVhZC5tX2FwaURhdGEgPSAmZGF0YTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwor
dm9pZCBqc2NDb250ZXh0UG9wQ2FsbGJhY2soSlNDQ29udGV4dCogY29udGV4dCwgQ2FsbGJhY2tE
YXRhJiYgZGF0YSkKK3sKKyAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwor
ICAgIGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbiA9IFdURk1vdmUoZGF0YS5wcmVzZXJ2ZWRFeGNl
cHRpb24pOworICAgIHRocmVhZC5tX2FwaURhdGEgPSBkYXRhLm5leHQ7Cit9CisKK0pTVmFsdWVS
ZWYganNjQ29udGV4dEdBcnJheVRvSlNBcnJheShKU0NDb250ZXh0KiBjb250ZXh0LCBHUHRyQXJy
YXkqIGdBcnJheSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2
YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBhdXRvKiBqc0FycmF5ID0gSlNPYmplY3RN
YWtlQXJyYXkocHJpdi0+anNDb250ZXh0LmdldCgpLCAwLCBudWxscHRyLCBleGNlcHRpb24pOwor
ICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
cHJpdi0+anNDb250ZXh0LmdldCgpKTsKKworICAgIGlmICghZ0FycmF5KQorICAgICAgICByZXR1
cm4ganNBcnJheTsKKworICAgIGF1dG8qIGpzQXJyYXlPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3Qo
cHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5LCBleGNlcHRpb24pOworICAgIGlmICgqZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQocHJpdi0+anNDb250
ZXh0LmdldCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnQXJyYXktPmxlbjsg
KytpKSB7CisgICAgICAgIGdwb2ludGVyIGl0ZW0gPSBnX3B0cl9hcnJheV9pbmRleChnQXJyYXks
IGkpOworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGksIEpTVmFsdWVN
YWtlTnVsbChwcml2LT5qc0NvbnRleHQuZ2V0KCkpLCBleGNlcHRpb24pOworICAgICAgICBlbHNl
IGlmIChKU0NfSVNfVkFMVUUoaXRlbSkpCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGksIGpzY1ZhbHVl
R2V0SlNWYWx1ZShKU0NfVkFMVUUoaXRlbSkpLCBleGNlcHRpb24pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhw
cml2LT5qc0NvbnRleHQuZ2V0KCkpLCBtYWtlU3RyaW5nKCJpbnZhbGlkIGl0ZW0gdHlwZSBpbiBH
UHRyQXJyYXkiKSkpOworCisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisgICAgfQor
CisgICAgcmV0dXJuIGpzQXJyYXk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdQdHJBcnJheT4ganNj
Q29udGV4dEpTQXJyYXlUb0dBcnJheShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpz
QXJyYXksIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSog
cHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgaWYgKEpTVmFsdWVJc051bGwocHJpdi0+anNDb250
ZXh0LmdldCgpLCBqc0FycmF5KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAo
IUpTVmFsdWVJc0FycmF5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSkpIHsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anND
b250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygiaW52YWxpZCBqcyB0eXBlIGZvciBHUHRyQXJyYXki
KSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvKiBqc0FycmF5
T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSwg
ZXhjZXB0aW9uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoU3RyaW5nKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIGF1dG8qIGpzTGVuZ3Ro
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmpl
Y3QsIGxlbmd0aFN0cmluZy5nZXQoKSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGxlbmd0aCA9IEpTQzo6dG9VSW50
MzIoSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNMZW5ndGgsIGV4Y2Vw
dGlvbikpOworICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIEdSZWZQdHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3
X3dpdGhfZnJlZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8qIGpzSXRlbSA9IEpTT2JqZWN0R2V0
UHJvcGVydHlBdEluZGV4KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheU9iamVjdCwgaSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc0l0ZW0g
PyBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc0l0ZW0pLmxlYWtSZWYoKSA6
IG51bGxwdHIpOworICAgIH0KKworICAgIHJldHVybiBnQXJyYXk7Cit9CisKK0pTVmFsdWVSZWYg
anNjQ29udGV4dEdWYWx1ZVRvSlNWYWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4dFByaXZh
dGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworCisgICAgc3dpdGNoIChnX3R5cGVfZnVuZGFtZW50
YWwoR19WQUxVRV9UWVBFKHZhbHVlKSkpIHsKKyAgICBjYXNlIEdfVFlQRV9CT09MRUFOOgorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgZ192
YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgIGNhc2UgR19UWVBFX0NIQVI6CisgICAgY2Fz
ZSBHX1RZUEVfSU5UOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anND
b250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X2ludCk7CisgICAgY2FzZSBHX1RZUEVfRU5V
TToKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQo
KSwgZ192YWx1ZV9nZXRfZW51bSh2YWx1ZSkpOworICAgIGNhc2UgR19UWVBFX0ZMQUdTOgorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBnX3Zh
bHVlX2dldF9mbGFncyh2YWx1ZSkpOworICAgIGNhc2UgR19UWVBFX1VDSEFSOgorICAgIGNhc2Ug
R19UWVBFX1VJTlQ6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0Nv
bnRleHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfdWludCk7CisgICAgY2FzZSBHX1RZUEVfRkxP
QVQ6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0
KCksIHZhbHVlLT5kYXRhWzBdLnZfZmxvYXQpOworICAgIGNhc2UgR19UWVBFX0RPVUJMRToKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFs
dWUtPmRhdGFbMF0udl9kb3VibGUpOworICAgIGNhc2UgR19UWVBFX0xPTkc6CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5kYXRh
WzBdLnZfbG9uZyk7CisgICAgY2FzZSBHX1RZUEVfVUxPTkc6CisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfdWxv
bmcpOworICAgIGNhc2UgR19UWVBFX0lOVDY0OgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VO
dW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X2ludDY0KTsKKyAg
ICBjYXNlIEdfVFlQRV9VSU5UNjQ6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihw
cml2LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfdWludDY0KTsKKyAgICBjYXNl
IEdfVFlQRV9TVFJJTkc6IHsKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3Ry
aW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhwcml2LT5qc0Nv
bnRleHQuZ2V0KCksIGpzU3RyaW5nLmdldCgpKTsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfUE9J
TlRFUjoKKyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgY2FzZSBHX1RZUEVfQk9YRUQ6Cisg
ICAgICAgIGlmIChhdXRvKiBwdHIgPSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBqc1dyYXBwZXIgPSBqc2NDb250ZXh0R2V0SlNXcmFwcGVyKGNvbnRl
eHQsIHB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVmKGpzV3JhcHBlcik7CisKKyAg
ICAgICAgICAgIGlmIChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUodmFsdWUpLCBKU0NfVFlQRV9W
QUxVRSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NfVkFM
VUUocHRyKSk7CisKKyAgICAgICAgICAgIGlmIChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUodmFs
dWUpLCBHX1RZUEVfUFRSX0FSUkFZKSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNjQ29udGV4
dEdBcnJheVRvSlNBcnJheShjb250ZXh0LCBzdGF0aWNfY2FzdDxHUHRyQXJyYXkqPihwdHIpLCBl
eGNlcHRpb24pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZU51bGwocHJpdi0+anNDb250ZXh0LmdldCgpKTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdfVFlQRV9QQVJBTToKKyAgICBjYXNlIEdfVFlQRV9JTlRFUkZBQ0U6CisgICAgY2FzZSBHX1RZ
UEVfVkFSSUFOVDoKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRl
eHQuZ2V0KCkpLCBtYWtlU3RyaW5nKCJ1bnN1cHBvcnRlZCB0eXBlICIsIGdfdHlwZV9uYW1lKEdf
VkFMVUVfVFlQRSh2YWx1ZSkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChw
cml2LT5qc0NvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIGpzY0NvbnRleHRKU1ZhbHVlVG9HVmFs
dWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlLCBHVHlwZSB0eXBlLCBH
VmFsdWUqIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4dFBy
aXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGdfdmFsdWVfaW5pdCh2YWx1ZSwgdHlw
ZSk7CisKKyAgICBhdXRvIGZ1bmRhbWVudGFsVHlwZSA9IGdfdHlwZV9mdW5kYW1lbnRhbChHX1ZB
TFVFX1RZUEUodmFsdWUpKTsKKyAgICBzd2l0Y2ggKGZ1bmRhbWVudGFsVHlwZSkgeworICAgIGNh
c2UgR19UWVBFX0lOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBKU1ZhbHVlVG9O
dW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfRkxPQVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zs
b2F0KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfRE9VQkxFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5q
c0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdfVFlQRV9CT09MRUFOOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCBKU1ZhbHVlVG9Cb29sZWFuKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9TVFJJTkc6IHsKKyAgICAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KHByaXYt
PmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGlmICgqZXhj
ZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IEpT
U3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZy5nZXQoKSk7CisgICAgICAg
IGF1dG8qIHN0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhtYXhTaXplKSk7Cisg
ICAgICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoanNTdHJpbmcuZ2V0KCksIHN0cmluZywgbWF4
U2l6ZSk7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHN0cmluZyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9DSEFSOgorICAgICAgICBnX3ZhbHVl
X3NldF9zY2hhcih2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwg
anNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1VD
SEFSOgorICAgICAgICBnX3ZhbHVlX3NldF91Y2hhcih2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHBy
aXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR19UWVBFX1VJTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUs
IEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlv
bikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9QT0lOVEVSOgorICAgIGNhc2Ug
R19UWVBFX09CSkVDVDoKKyAgICBjYXNlIEdfVFlQRV9CT1hFRDogeworICAgICAgICBncG9pbnRl
ciB3cmFwcGVkT2JqZWN0ID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoIUpTVmFsdWVJc051bGwo
cHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlKSkgeworICAgICAgICAgICAgYXV0byBqc09i
amVjdCA9IEpTVmFsdWVUb09iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4
Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIHdyYXBwZWRPYmplY3QgPSBqc2NDb250ZXh0V3JhcHBlZE9i
amVjdChjb250ZXh0LCBqc09iamVjdCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZWRPYmplY3Qp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwg
SlNDX1RZUEVfVkFMVUUpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8ganNjVmFsdWUgPSBq
c2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc1ZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBqc2NWYWx1ZS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgR19UWVBFX1BUUl9BUlJB
WSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBnQXJyYXkgPSBqc2NDb250ZXh0SlNBcnJh
eVRvR0FycmF5KGNvbnRleHQsIGpzVmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghKmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFsdWVfdGFr
ZV9ib3hlZCh2YWx1ZSwgZ0FycmF5LmxlYWtSZWYoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0KCkpLCBB
U0NJSUxpdGVyYWwoImludmFsaWQgcG9pbnRlciB0eXBlIikpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmRhbWVudGFs
VHlwZSA9PSBHX1RZUEVfUE9JTlRFUikKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIo
dmFsdWUsIHdyYXBwZWRPYmplY3QpOworICAgICAgICBlbHNlIGlmIChmdW5kYW1lbnRhbFR5cGUg
PT0gR19UWVBFX0JPWEVEKQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdy
YXBwZWRPYmplY3QpOworICAgICAgICBlbHNlIGlmIChHX0lTX09CSkVDVCh3cmFwcGVkT2JqZWN0
KSkKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd3JhcHBlZE9iamVjdCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpzQ29udGV4dC5nZXQoKSksIEFTQ0lJTGl0ZXJhbCgid3Jh
cHBlZCBvYmplY3QgaXMgbm90IGEgR09iamVjdCIpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEdfVFlQRV9MT05HOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBK
U1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24p
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfVUxPTkc6CisgICAgICAgIGdfdmFs
dWVfc2V0X3Vsb25nKHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgp
LCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVf
SU5UNjQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludDY0KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIo
cHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHX1RZUEVfVUlOVDY0OgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQo
dmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4
Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9FTlVNOgorICAgICAg
ICBnX3ZhbHVlX3NldF9lbnVtKHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0
LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1RZUEVfRkxBR1M6CisgICAgICAgIGdfdmFsdWVfc2V0X2ZsYWdzKHZhbHVlLCBKU1ZhbHVlVG9O
dW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfUEFSQU06CisgICAgY2FzZSBHX1RZUEVfSU5URVJG
QUNFOgorICAgIGNhc2UgR19UWVBFX1ZBUklBTlQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgKmV4
Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0
LmdldCgpKSwgbWFrZVN0cmluZygidW5zdXBwb3J0ZWQgdHlwZSAiLCBnX3R5cGVfbmFtZShHX1ZB
TFVFX1RZUEUodmFsdWUpKSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitKU0NDb250
ZXh0KiBqc2NfY29udGV4dF9uZXcoKQoreworICAgIHJldHVybiBKU0NfQ09OVEVYVChnX29iamVj
dF9uZXcoSlNDX1RZUEVfQ09OVEVYVCwgbnVsbHB0cikpOworfQorCitKU0NDb250ZXh0KiBqc2Nf
Y29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUoSlNDVmlydHVhbE1hY2hpbmUqIHZtKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WSVJUVUFMX01BQ0hJTkUodm0pLCBu
dWxscHRyKTsKKyAgICByZXR1cm4gSlNDX0NPTlRFWFQoZ19vYmplY3RfbmV3KEpTQ19UWVBFX0NP
TlRFWFQsICJ2aXJ0dWFsLW1hY2hpbmUiLCB2bSwgbnVsbHB0cikpOworfQorCitKU0NWaXJ0dWFs
TWFjaGluZSoganNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShKU0NDb250ZXh0KiBjb250
ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQp
LCBudWxscHRyKTsKKworICAgIHJldHVybiBjb250ZXh0LT5wcml2LT52bS5nZXQoKTsKK30KKwor
SlNDRXhjZXB0aW9uKiBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKEpTQ0NvbnRleHQgKmNvbnRl
eHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCks
IG51bGxwdHIpOworCisgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbi5nZXQoKTsK
K30KKwordm9pZCBqc2NfY29udGV4dF90aHJvdyhKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfQ09OVEVY
VChjb250ZXh0KSk7CisKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnBy
aXY7CisgICAgSlNWYWx1ZVJlZiBqc01lc3NhZ2UgPSBudWxscHRyOworICAgIGlmIChlcnJvck1l
c3NhZ2UpIHsKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1lc3NhZ2UoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGVycm9yTWVzc2FnZSkpOworICAgICAgICBq
c01lc3NhZ2UgPSBKU1ZhbHVlTWFrZVN0cmluZyhwcml2LT5qc0NvbnRleHQuZ2V0KCksIG1lc3Nh
Z2UuZ2V0KCkpOworICAgIH0KKworICAgIHByaXYtPmV4Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkNy
ZWF0ZShjb250ZXh0LCBKU09iamVjdE1ha2VFcnJvcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpz
TWVzc2FnZSA/IDEgOiAwLCAmanNNZXNzYWdlLCBudWxscHRyKSk7Cit9CisKK3ZvaWQganNjX2Nv
bnRleHRfdGhyb3dfZXhjZXB0aW9uKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ0V4Y2VwdGlvbiog
ZXhjZXB0aW9uKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4
dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsK
KworICAgIGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKK30KKwordm9pZCBq
c2NfY29udGV4dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpT
Q0V4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwgZ3BvaW50ZXIgdXNlckRhdGEsIEdEZXN0cm95Tm90
aWZ5IGRlc3Ryb3lOb3RpZnkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfQ09OVEVY
VChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChoYW5kbGVyKTsKKworICAgIGNvbnRl
eHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXIsIHVzZXJEYXRhLCBk
ZXN0cm95Tm90aWZ5IH0pOworfQorCit2b2lkIGpzY19jb250ZXh0X3BvcF9leGNlcHRpb25faGFu
ZGxlcihKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udGV4dC0+cHJpdi0+
ZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpID4gMSk7CisKKyAgICBjb250ZXh0LT5wcml2LT5leGNl
cHRpb25IYW5kbGVycy5yZW1vdmVMYXN0KCk7Cit9CisKK2Jvb2wganNjQ29udGV4dEhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNFeGNlcHRp
b24pCit7CisgICAgaWYgKCFqc0V4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBleGNlcHRpb24gPSBqc2NFeGNlcHRpb25DcmVhdGUoY29udGV4dCwganNFeGNlcHRp
b24pOworICAgIFJFTEVBU0VfQVNTRVJUKCFjb250ZXh0LT5wcml2LT5leGNlcHRpb25IYW5kbGVy
cy5pc0VtcHR5KCkpOworICAgIGNvbnN0IGF1dG8mIGV4Y2VwdGlvbkhhbmRsZXIgPSBjb250ZXh0
LT5wcml2LT5leGNlcHRpb25IYW5kbGVycy5sYXN0KCk7CisgICAgZXhjZXB0aW9uSGFuZGxlci5o
YW5kbGVyKGNvbnRleHQsIGV4Y2VwdGlvbi5nZXQoKSwgZXhjZXB0aW9uSGFuZGxlci51c2VyRGF0
YSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSlNDQ29udGV4dCoganNjX2NvbnRleHRfZ2V0
X2N1cnJlbnQoKQoreworICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxDYWxsYmFja0RhdGEq
PihUaHJlYWQ6OmN1cnJlbnQoKS5tX2FwaURhdGEpOworICAgIHJldHVybiBkYXRhID8gZGF0YS0+
Y29udGV4dC5nZXQoKSA6IG51bGxwdHI7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfY29udGV4dF9ldmFs
dWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjb2RlKQoreworICAgIHJldHVy
biBqc2NfY29udGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91cmkoY29udGV4dCwgY29kZSwgbnVs
bHB0cik7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfY29udGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91
cmkoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY29kZSwgY29uc3QgY2hhciogdXJp
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBu
dWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb2RlLCBudWxscHRyKTsKKworICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gc2NyaXB0SlMoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvZGUp
KTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc291cmNlVVJJID0gdXJpID8gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJpKSkgOiBudWxscHRyOworICAgIEpTVmFs
dWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQu
Z2V0KCksIHNjcmlwdEpTLmdldCgpLCBudWxscHRyLCBzb3VyY2VVUkkuZ2V0KCksIDEsICZleGNl
cHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4
dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKGNv
bnRleHQpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQs
IHJlc3VsdCkubGVha1JlZigpOworfQorCit2b2lkIGpzY19jb250ZXh0X3NldF92YWx1ZShKU0ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBKU0NWYWx1ZSogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChuYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1
ZSkpOworCisgICAgYXV0byBjb250ZXh0T2JqZWN0ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFs
dWUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQtPnByaXYtPmpzQ29u
dGV4dC5nZXQoKSkpOworICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGNvbnRleHRP
YmplY3QuZ2V0KCksIG5hbWUsIHZhbHVlKTsKK30KKworSlNDVmFsdWUqIGpzY19jb250ZXh0X2dl
dF92YWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBudWxscHRyKTsKKworICAgIGF1dG8gY29udGV4
dE9iamVjdCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkpKTsKKyAgICByZXR1
cm4ganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkoY29udGV4dE9iamVjdC5nZXQoKSwgbmFt
ZSk7Cit9CisKK0pTQ0NsYXNzKiBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhKU0NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBKU0NDbGFzcyogcGFyZW50Q2xhc3MsIEdEZXN0
cm95Tm90aWZ5IGRlc3Ryb3lGdW5jdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChK
U0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwobmFtZSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIXBhcmVudENsYXNz
IHx8IEpTQ19JU19DTEFTUyhwYXJlbnRDbGFzcyksIG51bGxwdHIpOworCisgICAgYXV0byBqc2ND
bGFzcyA9IGpzY0NsYXNzQ3JlYXRlKGNvbnRleHQsIG5hbWUsIHBhcmVudENsYXNzLCBkZXN0cm95
RnVuY3Rpb24pOworICAgIHdyYXBwZXJNYXAoY29udGV4dCkucmVnaXN0ZXJDbGFzcyhqc2NDbGFz
cy5nZXQoKSk7CisgICAgcmV0dXJuIGpzY0NsYXNzLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjM3ODJmMGU5YzEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJ
REVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNj
Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NDb250
ZXh0X2gKKyNkZWZpbmUgSlNDQ29udGV4dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisjaW5jbHVkZSA8anNjL0pTQ0V4Y2VwdGlvbi5o
PgorI2luY2x1ZGUgPGpzYy9KU0NDbGFzcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgor
I2luY2x1ZGUgPGpzYy9KU0NWaXJ0dWFsTWFjaGluZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgSlNDX1RZUEVfQ09OVEVYVCAgICAgICAgICAgIChqc2NfY29udGV4dF9nZXRfdHlwZSgp
KQorI2RlZmluZSBKU0NfQ09OVEVYVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0KSkKKyNkZWZpbmUg
SlNDX0lTX0NPTlRFWFQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgSlNDX1RZUEVfQ09OVEVYVCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQs
IEpTQ0NvbnRleHRDbGFzcykpCisjZGVmaW5lIEpTQ19JU19DT05URVhUX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX0NPTlRFWFQpKQorI2Rl
ZmluZSBKU0NfQ09OVEVYVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0Q2xhc3MpKQorCit0eXBlZGVm
IHN0cnVjdCBfSlNDQ29udGV4dCBKU0NDb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRl
eHRDbGFzcyBKU0NDb250ZXh0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dFByaXZh
dGUgSlNDQ29udGV4dFByaXZhdGU7CisKK3R5cGVkZWYgdm9pZCAoKiBKU0NFeGNlcHRpb25IYW5k
bGVyKSAoSlNDQ29udGV4dCAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICB1c2VyX2RhdGEpOworCitzdHJ1Y3QgX0pT
Q0NvbnRleHQgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisg
ICAgSlNDQ29udGV4dFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX0pTQ0NvbnRleHRDbGFz
cyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfanNjX3Jl
c2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMSkgKHZvaWQpOworICAg
IHZvaWQgKCpfanNjX3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVk
MykgKHZvaWQpOworfTsKKworSlNDX0FQSSBHVHlwZQoranNjX2NvbnRleHRfZ2V0X3R5cGUgICAg
ICAgICAgICAgICAgICh2b2lkKTsKKworSlNDX0FQSSBKU0NDb250ZXh0ICoKK2pzY19jb250ZXh0
X25ldyAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK0pTQ19BUEkgSlNDQ29udGV4dCAq
Citqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUgKEpTQ1ZpcnR1YWxNYWNoaW5l
ICAqdm0pOworCitKU0NfQVBJIEpTQ1ZpcnR1YWxNYWNoaW5lICoKK2pzY19jb250ZXh0X2dldF92
aXJ0dWFsX21hY2hpbmUgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0KTsKKworSlND
X0FQSSBKU0NFeGNlcHRpb24gKgoranNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbiAgICAgICAgICAg
IChKU0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQpOworCitKU0NfQVBJIHZvaWQKK2pzY19jb250
ZXh0X3Rocm93ICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAg
ICAgKmVycm9yX21lc3NhZ2UpOworCitKU0NfQVBJIHZvaWQKK2pzY19jb250ZXh0X3Rocm93X2V4
Y2VwdGlvbiAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NFeGNlcHRpb24gICAgICAgKmV4Y2VwdGlv
bik7CisKK0pTQ19BUEkgdm9pZAoranNjX2NvbnRleHRfcHVzaF9leGNlcHRpb25faGFuZGxlciAg
IChKU0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpTQ0V4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICB1c2VyX2RhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5ICAgICAg
ZGVzdHJveV9ub3RpZnkpOworCitKU0NfQVBJIHZvaWQKK2pzY19jb250ZXh0X3BvcF9leGNlcHRp
b25faGFuZGxlciAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0KTsKKworSlNDX0FQSSBK
U0NDb250ZXh0ICoKK2pzY19jb250ZXh0X2dldF9jdXJyZW50ICAgICAgICAgICAgICAodm9pZCk7
CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX2NvbnRleHRfZXZhbHVhdGUgICAgICAgICAgICAg
ICAgIChKU0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqY29kZSk7CisKK0pTQ19BUEkgSlND
VmFsdWUgKgoranNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3VyY2VfdXJpIChKU0NDb250ZXh0
ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgICAgICAgICAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICp1cmkpOworCitKU0NfQVBJIHZvaWQKK2pzY19j
b250ZXh0X3NldF92YWx1ZSAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAg
ICAgICAgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1Zh
bHVlICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY19jb250ZXh0
X2dldF92YWx1ZSAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAg
Km5hbWUpOworCitKU0NfQVBJIEpTQ0NsYXNzICoKK2pzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNz
ICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ0NsYXNzICAgICAgICAgICAqcGFyZW50
X2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5v
dGlmeSAgICAgIGRlc3Ryb3lfZnVuY3Rpb24pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
SlNDQ29udGV4dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDb250ZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45ODBkYTE4MGI3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElD
YXN0LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisj
aW5jbHVkZSAiSlNDb250ZXh0UmVmLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgor
CitHUmVmUHRyPEpTQ0NvbnRleHQ+IGpzY0NvbnRleHRHZXRPckNyZWF0ZShKU0dsb2JhbENvbnRl
eHRSZWYpOworSlNHbG9iYWxDb250ZXh0UmVmIGpzY0NvbnRleHRHZXRKU0NvbnRleHQoSlNDQ29u
dGV4dCopOworR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoSlND
Q29udGV4dCosIEpTVmFsdWVSZWYpOwordm9pZCBqc2NDb250ZXh0VmFsdWVEZXN0cm95ZWQoSlND
Q29udGV4dCosIEpTVmFsdWVSZWYpOworSlNDOjpKU09iamVjdCoganNjQ29udGV4dEdldEpTV3Jh
cHBlcihKU0NDb250ZXh0KiwgZ3BvaW50ZXIpOworSlNDOjpKU09iamVjdCoganNjQ29udGV4dEdl
dE9yQ3JlYXRlSlNXcmFwcGVyKEpTQ0NvbnRleHQqLCBKU0NsYXNzUmVmLCBKU1ZhbHVlUmVmIHBy
b3RvdHlwZSA9IG51bGxwdHIsIGdwb2ludGVyID0gbnVsbHB0ciwgR0Rlc3Ryb3lOb3RpZnkgPSBu
dWxscHRyKTsKK2dwb2ludGVyIGpzY0NvbnRleHRXcmFwcGVkT2JqZWN0KEpTQ0NvbnRleHQqLCBK
U09iamVjdFJlZik7CisKK3N0cnVjdCBDYWxsYmFja0RhdGEgeworICAgIEdSZWZQdHI8SlNDQ29u
dGV4dD4gY29udGV4dDsKKyAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gcHJlc2VydmVkRXhjZXB0
aW9uOworICAgIEpTVmFsdWVSZWYgY2FsbGVlVmFsdWU7CisgICAgSlNWYWx1ZVJlZiB0aGlzVmFs
dWU7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQ7CisgICAgY29uc3QgSlNWYWx1ZVJlZiogYXJn
dW1lbnRzOworCisgICAgQ2FsbGJhY2tEYXRhKiBuZXh0OworfTsKK0NhbGxiYWNrRGF0YSBqc2ND
b250ZXh0UHVzaENhbGxiYWNrKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmIGNhbGxlZVZhbHVlLCBK
U1ZhbHVlUmVmIHRoaXNWYWx1ZSwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYqIGFyZ3VtZW50cyk7Cit2b2lkIGpzY0NvbnRleHRQb3BDYWxsYmFjayhKU0NDb250ZXh0Kiwg
Q2FsbGJhY2tEYXRhJiYpOworCitib29sIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CitKU1ZhbHVlUmVmIGpzY0NvbnRleHRHQXJyYXlU
b0pTQXJyYXkoSlNDQ29udGV4dCosIEdQdHJBcnJheSosIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CitKU1ZhbHVlUmVmIGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoSlNDQ29udGV4dCosIGNvbnN0
IEdWYWx1ZSosIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7Cit2b2lkIGpzY0NvbnRleHRKU1ZhbHVl
VG9HVmFsdWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYsIEdUeXBlLCBHVmFsdWUqLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0RlZmluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZp
bmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMzZmZhMmI0ZmRi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Rl
ZmluZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pTQ19IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPGpzYy9qc2MuaD4gY2FuIGJlIGlu
Y2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIEpTQ0RlZmluZXNfaAorI2RlZmlu
ZSBKU0NEZWZpbmVzX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lmZGVmIEdfT1NfV0lOMzIK
KyMgICAgaWYgZGVmaW5lZChCVUlMRElOR19KYXZhU2NyaXB0Q29yZSkgfHwgZGVmaW5lZChTVEFU
SUNBTExZX0xJTktFRF9XSVRIX0phdmFTY3JpcHRDb3JlKQorIyAgICAgICAgZGVmaW5lIEpTQ19B
UEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgIGVsc2UKKyMgICAgICAgIGRlZmluZSBKU0Nf
QVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICBlbmRpZgorI2Vsc2UKKyMgICAgZGVmaW5l
IEpTQ19BUEkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKKyNlbmRpZgor
CisjZGVmaW5lIEpTQ19ERVBSRUNBVEVEIEpTQ19BUEkgR19ERVBSRUNBVEVECisjZGVmaW5lIEpT
Q19ERVBSRUNBVEVEX0ZPUihmKSBKU0NfQVBJIEdfREVQUkVDQVRFRF9GT1IoZikKKworI2VuZGlm
IC8qIEpTQ0RlZmluZXNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDRXhjZXB0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MzMwZDM5NTkzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDRXhjZXB0aW9uLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlND
RXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYv
Z2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgX0pTQ0V4Y2VwdGlvblByaXZhdGUgeworICAgIEpTQ0NvbnRleHQqIGNvbnRl
eHQ7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4ganNFeGNlcHRpb247CisgICAgYm9v
bCBjYWNoZWQ7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBtZXNzYWdlOworICAgIHVuc2lnbmVkIGxp
bmVOdW1iZXI7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzb3VyY2VVUkk7Cit9IEpTQ0V4Y2VwdGlv
blByaXZhdGU7CisKK1dFQktJVF9ERUZJTkVfVFlQRShKU0NFeGNlcHRpb24sIGpzY19leGNlcHRp
b24sIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGpzY0V4Y2VwdGlvbkRpc3Bvc2UoR09i
amVjdCogb2JqZWN0KQoreworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYgPSBKU0NfRVhD
RVBUSU9OKG9iamVjdCktPnByaXY7CisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsKKyAgICAgICAg
Z19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChwcml2LT5jb250ZXh0KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZwcml2LT5jb250ZXh0KSk7CisgICAgICAgIHByaXYtPmNv
bnRleHQgPSBudWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19leGNlcHRp
b25fcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBqc2Nf
ZXhjZXB0aW9uX2NsYXNzX2luaXQoSlNDRXhjZXB0aW9uQ2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmRpc3Bvc2UgPSBqc2NFeGNlcHRpb25EaXNwb3NlOworfQorCitHUmVmUHRyPEpTQ0V4Y2Vw
dGlvbj4ganNjRXhjZXB0aW9uQ3JlYXRlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYg
anNFeGNlcHRpb24pCit7CisgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IGV4Y2VwdGlvbiA9IGFk
b3B0R1JlZihKU0NfRVhDRVBUSU9OKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9FWENFUFRJT04sIG51
bGxwdHIpKSk7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChj
b250ZXh0KTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoanNDb250ZXh0KTsKKyAg
ICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKKyAgICBleGNlcHRpb24tPnByaXYtPmpzRXhjZXB0aW9uLnNldCh2bSwgdG9KUyhKU1Zh
bHVlVG9PYmplY3QoanNDb250ZXh0LCBqc0V4Y2VwdGlvbiwgbnVsbHB0cikpKTsKKyAgICAvLyBU
aGUgY29udGV4dCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBleGNlcHRpb24sIHNvIHdl
IGNhbid0IHJlZiB0aGUgY29udGV4dC4gV2UgdXNlIGEgd2VhaworICAgIC8vIHBvaW50ZXIgaW5z
dGVhZCB0byBpbnZhbGlkYXRlIHRoZSBleGNlcHRpb24gaWYgdGhlIGNvbnRleHQgaXMgZGVzdHJv
eWVkIGJlZm9yZS4KKyAgICBleGNlcHRpb24tPnByaXYtPmNvbnRleHQgPSBjb250ZXh0OworICAg
IGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4dCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmZXhjZXB0aW9uLT5wcml2LT5jb250ZXh0KSk7CisgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKK30KKworSlNWYWx1ZVJlZiBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKEpTQ0V4Y2Vw
dGlvbiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiB0b1JlZihleGNlcHRpb24tPnByaXYtPmpz
RXhjZXB0aW9uLmdldCgpKTsKK30KKwordm9pZCBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVz
KEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHBy
aXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgaWYgKHByaXYtPmNhY2hlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJpdi0+Y2FjaGVkID0gdHJ1ZTsKKworICAgIGF1dG8gdmFsdWUgPSBqc2ND
b250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2LT5qc0V4Y2Vw
dGlvbi5nZXQoKSkpOworICAgIGF1dG8gcHJvcGVydHlWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgIm1lc3NhZ2UiKSk7CisgICAgaWYg
KCFqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHByb3BlcnR5VmFsdWUuZ2V0KCkpKQorICAgICAgICBw
cml2LT5tZXNzYWdlLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcocHJvcGVydHlWYWx1ZS5nZXQo
KSkpOworICAgIHByb3BlcnR5VmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRf
cHJvcGVydHkodmFsdWUuZ2V0KCksICJsaW5lIikpOworICAgIGlmICghanNjX3ZhbHVlX2lzX3Vu
ZGVmaW5lZChwcm9wZXJ0eVZhbHVlLmdldCgpKSkKKyAgICAgICAgcHJpdi0+bGluZU51bWJlciA9
IGpzY192YWx1ZV90b19pbnQzMihwcm9wZXJ0eVZhbHVlLmdldCgpKTsKKyAgICBwcm9wZXJ0eVZh
bHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdldCgp
LCAic291cmNlVVJMIikpOworICAgIGlmICghanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChwcm9wZXJ0
eVZhbHVlLmdldCgpKSkKKyAgICAgICAgcHJpdi0+c291cmNlVVJJLnJlc2V0KGpzY192YWx1ZV90
b19zdHJpbmcocHJvcGVydHlWYWx1ZS5nZXQoKSkpOworfQorCitjb25zdCBjaGFyKiBqc2NfZXhj
ZXB0aW9uX2dldF9tZXNzYWdlKEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSwgbnVsbHB0cik7CisK
KyAgICBKU0NFeGNlcHRpb25Qcml2YXRlKiBwcml2ID0gZXhjZXB0aW9uLT5wcml2OworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHByaXYtPmNvbnRleHQsIG51bGxwdHIpOworCisgICAganNjRXhj
ZXB0aW9uRW5zdXJlUHJvcGVydGllcyhleGNlcHRpb24pOworICAgIHJldHVybiBwcml2LT5tZXNz
YWdlLmdldCgpOworfQorCitndWludCBqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlcihKU0NF
eGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNf
RVhDRVBUSU9OKGV4Y2VwdGlvbiksIDApOworCisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJp
diA9IGV4Y2VwdGlvbi0+cHJpdjsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwcml2LT5jb250
ZXh0LCAwKTsKKworICAgIGpzY0V4Y2VwdGlvbkVuc3VyZVByb3BlcnRpZXMoZXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gcHJpdi0+bGluZU51bWJlcjsKK30KKworY29uc3QgY2hhcioganNjX2V4Y2Vw
dGlvbl9nZXRfc291cmNlX3VyaShKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbiksIG51bGxwdHIpOwor
CisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IGV4Y2VwdGlvbi0+cHJpdjsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChwcml2LT5jb250ZXh0LCBudWxscHRyKTsKKworICAgIGpzY0V4
Y2VwdGlvbkVuc3VyZVByb3BlcnRpZXMoZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gcHJpdi0+c291
cmNlVVJJLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0V4Y2VwdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4
Y2VwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MmE4ZDgw
ODgyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NFeGNlcHRpb24uaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pTQ19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChK
U0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVk
IGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIEpTQ0V4Y2VwdGlvbl9oCisjZGVmaW5lIEpT
Q0V4Y2VwdGlvbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9K
U0NEZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9FWENFUFRJ
T04gICAgICAgICAgICAoanNjX2V4Y2VwdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfRVhD
RVBUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IEpTQ19UWVBFX0VYQ0VQVElPTiwgSlNDRXhjZXB0aW9uKSkKKyNkZWZpbmUgSlNDX0lTX0VYQ0VQ
VElPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0Nf
VFlQRV9FWENFUFRJT04pKQorI2RlZmluZSBKU0NfRVhDRVBUSU9OX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX0VYQ0VQVElPTiwgSlND
RXhjZXB0aW9uQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfRVhDRVBUSU9OX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX0VYQ0VQVElPTikpCisj
ZGVmaW5lIEpTQ19FWENFUFRJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgSlNDX1RZUEVfRVhDRVBUSU9OLCBKU0NFeGNlcHRpb25DbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb24gSlNDRXhjZXB0aW9uOwordHlwZWRlZiBzdHJ1
Y3QgX0pTQ0V4Y2VwdGlvbkNsYXNzIEpTQ0V4Y2VwdGlvbkNsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ0V4Y2VwdGlvblByaXZhdGUgSlNDRXhjZXB0aW9uUHJpdmF0ZTsKKworc3RydWN0IF9KU0NF
eGNlcHRpb24geworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisg
ICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfSlNDRXhjZXB0aW9u
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNl
cnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUKK2pzY19leGNlcHRpb25fZ2V0X3R5
cGUgICAgICAgICh2b2lkKTsKKworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19leGNlcHRpb25f
Z2V0X21lc3NhZ2UgICAgIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbik7CisKK0pTQ19BUEkgZ3Vp
bnQKK2pzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVyIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlv
bik7CisKK0pTQ19BUEkgY29uc3QgY2hhciAqCitqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJp
ICAoSlNDRXhjZXB0aW9uICpleGNlcHRpb24pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
SlNDRXhjZXB0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NFeGNlcHRpb25Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDRXhjZXB0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iYjVkYmMwZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb24uaCIKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CisKK0dSZWZQdHI8SlNDRXhjZXB0aW9uPiBqc2NFeGNlcHRpb25D
cmVhdGUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NFeGNlcHRpb25H
ZXRKU1ZhbHVlKEpTQ0V4Y2VwdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDR0xpYldyYXBwZXJPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYzJjYWJhOWI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDR0xpYldyYXBwZXJPYmplY3QuaApAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NHTGliV3JhcHBlck9iamVjdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSlNDR0xpYldyYXBwZXJPYmplY3QoZ3Bv
aW50ZXIgb2JqZWN0LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCisgICAgICAgIDog
bV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZGVzdHJveUZ1bmN0aW9uKGRlc3Ryb3lGdW5j
dGlvbikKKyAgICB7CisgICAgfQorCisgICAgfkpTQ0dMaWJXcmFwcGVyT2JqZWN0KCkKKyAgICB7
CisgICAgICAgIGlmIChtX2Rlc3Ryb3lGdW5jdGlvbikKKyAgICAgICAgICAgIG1fZGVzdHJveUZ1
bmN0aW9uKG1fb2JqZWN0KTsKKyAgICB9CisKKyAgICBncG9pbnRlciBvYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdDsgfQorCitwcml2YXRlOgorICAgIGdwb2ludGVyIG1fb2JqZWN0IHsg
bnVsbHB0ciB9OworICAgIEdEZXN0cm95Tm90aWZ5IG1fZGVzdHJveUZ1bmN0aW9uIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ1ZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMTAyNmZjMTZmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDVmFsdWUuY3BwCkBAIC0wLDAgKzEsNjAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NW
YWx1ZS5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250
ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NWYWx1
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgPGdvYmplY3Qv
Z3ZhbHVlY29sbGVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5o
PgorCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0NPTlRFWFQsCit9OworCit0eXBl
ZGVmIHN0cnVjdCBfSlNDVmFsdWVQcml2YXRlIHsKKyAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNv
bnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlOworfSBKU0NWYWx1ZVByaXZhdGU7CisKK1dF
QktJVF9ERUZJTkVfVFlQRShKU0NWYWx1ZSwganNjX3ZhbHVlLCBHX1RZUEVfT0JKRUNUKQorCitz
dGF0aWMgdm9pZCBqc2NWYWx1ZUdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gSlNDX1ZBTFVFKG9iamVjdCktPnByaXY7CisKKyAgICBzd2l0Y2gg
KHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWYWx1ZVNl
dFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gSlNDX1ZBTFVFKG9iamVjdCktPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAg
IGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBwcml2LT5jb250ZXh0ID0gSlNDX0NPTlRFWFQo
Z192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJ
RCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY1ZhbHVlRGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gSlNDX1ZBTFVF
KG9iamVjdCktPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y29udGV4dCkgeworICAgICAgICBhdXRv
KiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkp
OworCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlKTsK
KyAgICAgICAganNjQ29udGV4dFZhbHVlRGVzdHJveWVkKHByaXYtPmNvbnRleHQuZ2V0KCksIHBy
aXYtPmpzVmFsdWUpOworICAgICAgICBwcml2LT5qc1ZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAg
cHJpdi0+Y29udGV4dCA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MoanNj
X3ZhbHVlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
anNjX3ZhbHVlX2NsYXNzX2luaXQoSlNDVmFsdWVDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIG9iakNsYXNz
LT5nZXRfcHJvcGVydHkgPSBqc2NWYWx1ZUdldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5zZXRf
cHJvcGVydHkgPSBqc2NWYWx1ZVNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5kaXNwb3NlID0g
anNjVmFsdWVEaXNwb3NlOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmpDbGFzcywKKyAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkpTQ0NvbnRleHQiLAor
ICAgICAgICAgICAgIkpTQyBDb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBFX0NPTlRFWFQs
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURX
UklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK0pTVmFsdWVSZWYganNjVmFs
dWVHZXRKU1ZhbHVlKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUtPnByaXYt
PmpzVmFsdWU7Cit9CisKK0pTQ1ZhbHVlKiBqc2NWYWx1ZUNyZWF0ZShKU0NDb250ZXh0KiBjb250
ZXh0LCBKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgYXV0byogdmFsdWUgPSBKU0NfVkFMVUUo
Z19vYmplY3RfbmV3KEpTQ19UWVBFX1ZBTFVFLCAiY29udGV4dCIsIGNvbnRleHQsIG51bGxwdHIp
KTsKKyAgICBKU1ZhbHVlUHJvdGVjdChqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBq
c1ZhbHVlKTsKKyAgICB2YWx1ZS0+cHJpdi0+anNWYWx1ZSA9IGpzVmFsdWU7CisgICAgcmV0dXJu
IHZhbHVlOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld191bmRlZmluZWQoSlNDQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChj
b250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFs
dWUoY29udGV4dCwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoanNjQ29udGV4dEdldEpTQ29udGV4dChj
b250ZXh0KSkpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX3VuZGVmaW5l
ZChKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZB
TFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUt
PnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChqc2NDb250ZXh0R2V0SlNDb250
ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworSlNDQ29udGV4
dCoganNjX3ZhbHVlX2dldF9jb250ZXh0KEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIHJldHVy
biB2YWx1ZS0+cHJpdi0+Y29udGV4dC5nZXQoKTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9u
ZXdfbnVsbChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NDb250
ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVlTWFrZU51bGwoanNjQ29udGV4dEdl
dEpTQ29udGV4dChjb250ZXh0KSkpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVl
X2lzX251bGwoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpT
Q19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9
IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKGpzY0NvbnRleHRHZXRKU0Nv
bnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitKU0NWYWx1
ZSoganNjX3ZhbHVlX25ld19udW1iZXIoSlNDQ29udGV4dCogY29udGV4dCwgZG91YmxlIG51bWJl
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwg
bnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4
dCwgSlNWYWx1ZU1ha2VOdW1iZXIoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwgbnVt
YmVyKSkubGVha1JlZigpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfbnVtYmVyKEpTQ1Zh
bHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFs
dWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsK
KyAgICByZXR1cm4gSlNWYWx1ZUlzTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+
Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitkb3VibGUganNjX3ZhbHVlX3Rv
X2RvdWJsZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlND
X0lTX1ZBTFVFKHZhbHVlKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlVG9O
dW1iZXIoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+
anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2dpbnQzMiBqc2NfdmFsdWVfdG9faW50MzIoSlNDVmFsdWUqIHZhbHVlKQor
eworICAgIHJldHVybiBKU0M6OnRvSW50MzIoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1ZSkpOwor
fQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19ib29sZWFuKEpTQ0NvbnRleHQqIGNvbnRleHQs
IGdib29sZWFuIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05U
RVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVh
dGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVlTWFrZUJvb2xlYW4oanNjQ29udGV4dEdldEpTQ29udGV4
dChjb250ZXh0KSwgdmFsdWUpKS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9p
c19ib29sZWFuKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChK
U0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYg
PSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzQm9vbGVhbihqc2NDb250ZXh0R2V0
SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworZ2Jv
b2xlYW4ganNjX3ZhbHVlX3RvX2Jvb2xlYW4oSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1Zh
bHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlVG9Cb29s
ZWFuKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpz
VmFsdWUpOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19zdHJpbmcoSlNDQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIEpTVmFsdWVSZWYganNT
dHJpbmdWYWx1ZTsKKyAgICBpZiAoc3RyaW5nKSB7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBqc1N0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3Ry
aW5nKSk7CisgICAgICAgIGpzU3RyaW5nVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBqc1N0cmluZy5nZXQoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGpzU3RyaW5nVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhqc2NDb250ZXh0R2V0SlND
b250ZXh0KGNvbnRleHQpLCBudWxscHRyKTsKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3Jl
YXRlVmFsdWUoY29udGV4dCwganNTdHJpbmdWYWx1ZSkubGVha1JlZigpOworfQorCitnYm9vbGVh
biBqc2NfdmFsdWVfaXNfc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVBy
aXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaW5nKGpz
Y0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUp
OworfQorCitjaGFyKiBqc2NfdmFsdWVfdG9fc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKwor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJp
bmcoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2
LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbikpOworICAgIGlmIChq
c2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhj
ZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzaXplX3QgbWF4U2l6ZSA9
IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZy5nZXQoKSk7CisgICAg
YXV0byogc3RyaW5nID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKG1heFNpemUpKTsKKyAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGpzU3RyaW5nLmdldCgpLCBzdHJpbmcsIG1heFNpemUp
OworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2FycmF5
KEpTQ0NvbnRleHQqIGNvbnRleHQsIEdUeXBlIGZpcnN0SXRlbVR5cGUsIC4uLikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisK
KyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganNDb250ZXh0
ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBhdXRvKiBqc0FycmF5ID0g
SlNPYmplY3RNYWtlQXJyYXkoanNDb250ZXh0LCAwLCBudWxscHRyLCAmZXhjZXB0aW9uKTsKKyAg
ICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlv
bikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byoganNBcnJheU9iamVjdCA9
IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIGpzQXJyYXksICZleGNlcHRpb24pOworICAgIGlm
IChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9uKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAg
dmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0SXRlbVR5cGUpOworICAgIEdU
eXBlIGl0ZW1UeXBlID0gZmlyc3RJdGVtVHlwZTsKKyAgICB3aGlsZSAoaXRlbVR5cGUgIT0gR19U
WVBFX05PTkUpIHsKKyAgICAgICAgR1ZhbHVlIGl0ZW07CisgICAgICAgIEdVbmlxdWVPdXRQdHI8
Y2hhcj4gZXJyb3I7CisgICAgICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUKCZpdGVtLCBpdGVtVHlw
ZSwgYXJncywgR19WQUxVRV9OT0NPUFlfQ09OVEVOVFMsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
ICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVh
dGVUeXBlRXJyb3IodG9KUyhqc0NvbnRleHQpLCBtYWtlU3RyaW5nKCJmYWlsZWQgdG8gY29sbGVj
dCBhcnJheSBpdGVtOiAiLCBlcnJvci5nZXQoKSkpKTsKKyAgICAgICAgICAgIGpzY0NvbnRleHRI
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBleGNlcHRpb24pOworICAgICAgICAgICAg
anNBcnJheSA9IG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8qIGpzVmFsdWUgPSBqc2NDb250ZXh0R1ZhbHVlVG9KU1ZhbHVlKGNvbnRleHQsICZp
dGVtLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmaXRlbSk7CisgICAgICAg
IGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9u
KSkgeworICAgICAgICAgICAganNBcnJheSA9IG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGpzQ29udGV4
dCwganNBcnJheU9iamVjdCwgaW5kZXgsIGpzVmFsdWUsICZleGNlcHRpb24pOworICAgICAgICBp
ZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikp
IHsKKyAgICAgICAgICAgIGpzQXJyYXkgPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVtVHlwZSA9IHZhX2FyZyhhcmdzLCBHVHlwZSk7CisgICAg
ICAgIGluZGV4Kys7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVybiBqc0Fy
cmF5ID8ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNBcnJheSkubGVha1Jl
ZigpIDogbnVsbHB0cjsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfYXJyYXlfZnJvbV9n
YXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1B0ckFycmF5KiBnQXJyYXkpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisg
ICAgaWYgKCFnQXJyYXkgfHwgIWdBcnJheS0+bGVuKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVl
X25ld19hcnJheShjb250ZXh0LCBHX1RZUEVfTk9ORSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganNBcnJheSA9IGpzY0NvbnRleHRHQXJyYXlUb0pT
QXJyYXkoY29udGV4dCwgZ0FycmF5LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRl
eHQsIGpzQXJyYXkpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX2FycmF5
KEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFM
VUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+
cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzQXJyYXkoanNjQ29udGV4dEdldEpTQ29udGV4dChw
cml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKK0pTQ1ZhbHVlKiBqc2Nf
dmFsdWVfbmV3X29iamVjdChKU0NDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBpbnN0YW5jZSwg
SlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19D
T05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghaW5z
dGFuY2UgfHwgSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4g
anNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgaW5zdGFuY2UgPyB0b1JlZihqc2ND
bGFzc0dldE9yQ3JlYXRlSlNXcmFwcGVyKGpzY0NsYXNzLCBpbnN0YW5jZSkpIDogSlNPYmplY3RN
YWtlKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIG51bGxwdHIsIG51bGxwdHIpKS5s
ZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9pc19vYmplY3QoSlNDVmFsdWUqIHZh
bHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZB
TFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJl
dHVybiBKU1ZhbHVlSXNPYmplY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0
LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9vYmplY3Rf
aXNfaW5zdGFuY2Vfb2YoSlNDVmFsdWUqIHZhbHVlLCBKU0NDbGFzcyoganNjQ2xhc3MpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIEZBTFNFKTsKKwor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIEdSZWZQdHI8SlND
VmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShwcml2
LT5jb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpKSk7CisgICAgYXV0
byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgp
KTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYg
b2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgY29uc3RydWN0b3ItPnByaXYtPmpz
VmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgcmV0dXJuIEpTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3Rvcihqc0NvbnRl
eHQsIHByaXYtPmpzVmFsdWUsIG9iamVjdCwgbnVsbHB0cik7Cit9CisKK3ZvaWQganNjX3ZhbHVl
X29iamVjdF9zZXRfcHJvcGVydHkoSlNDVmFsdWUqIHZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBK
U0NWYWx1ZSogcHJvcGVydHkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUo
dmFsdWUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoSlNDX0lTX1ZBTFVFKHByb3BlcnR5KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYg
PSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250
ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVs
bHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0
LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAg
IHJldHVybjsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eU5hbWUoQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU09iamVjdFNl
dFByb3BlcnR5KGpzQ29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHByb3BlcnR5
LT5wcml2LT5qc1ZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOwor
ICAgIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgp
LCBleGNlcHRpb24pOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVy
dHkoSlNDVmFsdWUqIHZhbHVlLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG5hbWUsIG51bGxwdHIpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0g
dmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4
dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxw
dHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwg
cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNl
cHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICBy
ZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoanNDb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChw
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVl
X25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICByZXR1cm4ganNjQ29u
dGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgcmVzdWx0KS5sZWFrUmVm
KCk7Cit9CisKK3ZvaWQganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgoSlND
VmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwgSlNDVmFsdWUqIHByb3BlcnR5KQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChKU0NfSVNfVkFMVUUocHJvcGVydHkpKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJp
diA9IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0Nv
bnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBu
dWxscHRyOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRl
eHQsIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoanNDb250ZXh0LCBv
YmplY3QsIGluZGV4LCBwcm9wZXJ0eS0+cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAg
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4
Y2VwdGlvbik7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9h
dF9pbmRleChKU0NWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNj
Q29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29u
dGV4dC5nZXQoKSk7CisKKworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoanNDb250ZXh0LCBvYmplY3QsIGluZGV4LCAmZXhjZXB0aW9uKTsKKyAgICBp
ZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCks
IGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2
LT5jb250ZXh0LmdldCgpKTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1
ZShwcml2LT5jb250ZXh0LmdldCgpLCByZXN1bHQpLmxlYWtSZWYoKTsKK30KKworc3RhdGljIEdS
ZWZQdHI8SlNDVmFsdWU+IGpzY1ZhbHVlQ2FsbEZ1bmN0aW9uKEpTQ1ZhbHVlKiB2YWx1ZSwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEdUeXBlIGZpcnN0UGFy
YW1ldGVyVHlwZSwgdmFfbGlzdCBhcmdzKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9
IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisgICAgVmVjdG9yPEpTVmFsdWVSZWY+IGFyZ3VtZW50czsKKyAgICBHVHlwZSBwYXJh
bWV0ZXJUeXBlID0gZmlyc3RQYXJhbWV0ZXJUeXBlOworICAgIHdoaWxlIChwYXJhbWV0ZXJUeXBl
ICE9IEdfVFlQRV9OT05FKSB7CisgICAgICAgIEdWYWx1ZSBwYXJhbWV0ZXI7CisgICAgICAgIEdV
bmlxdWVPdXRQdHI8Y2hhcj4gZXJyb3I7CisgICAgICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUKCZw
YXJhbWV0ZXIsIHBhcmFtZXRlclR5cGUsIGFyZ3MsIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTLCAm
ZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgbWFrZVN0
cmluZygiZmFpbGVkIHRvIGNvbGxlY3QgZnVuY3Rpb24gcGFyYW1hdGVyOiAiLCBlcnJvci5nZXQo
KSkpKTsKKyAgICAgICAgICAgIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2
LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0R1Jl
Zihqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKSk7CisgICAgICAg
IH0KKworICAgICAgICBhdXRvKiBqc1ZhbHVlID0ganNjQ29udGV4dEdWYWx1ZVRvSlNWYWx1ZShw
cml2LT5jb250ZXh0LmdldCgpLCAmcGFyYW1ldGVyLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgZ192
YWx1ZV91bnNldCgmcGFyYW1ldGVyKTsKKyAgICAgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNl
cHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICAg
ICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCks
IGpzVmFsdWUpOworCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNWYWx1ZSk7CisgICAgICAg
IHBhcmFtZXRlclR5cGUgPSB2YV9hcmcoYXJncywgR1R5cGUpOworICAgIH0KKworICAgIEpTVmFs
dWVSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihqc0NvbnRleHQsIGZ1bmN0aW9u
LCB0aGlzT2JqZWN0LCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuZGF0YSgpLCAmZXhjZXB0
aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNv
bnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSkpOworCisgICAgcmV0dXJuIGpz
Y0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIHJlc3VsdCk7Cit9
CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoSlNDVmFsdWUqIHZh
bHVlLCBjb25zdCBjaGFyKiBuYW1lLCBHVHlwZSBmaXJzdFBhcmFtZXRlclR5cGUsIC4uLikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBudWxscHRyKTsKKworICAgIEpTQ1ZhbHVl
UHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBl
eGNlcHRpb24gPSBudWxscHRyOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09i
amVjdChqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2ND
b250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRl
eHQuZ2V0KCkpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1ldGhvZE5hbWUoQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU1ZhbHVlUmVm
IGZ1bmN0aW9uVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGpzQ29udGV4dCwgb2JqZWN0LCBt
ZXRob2ROYW1lLmdldCgpLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAg
IHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKwor
ICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgZnVu
Y3Rpb25WYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICB2
YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZmlyc3RQYXJhbWV0ZXJUeXBlKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGpzY1ZhbHVlQ2FsbEZ1bmN0aW9uKHZhbHVlLCBmdW5jdGlvbiwgb2Jq
ZWN0LCBmaXJzdFBhcmFtZXRlclR5cGUsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKworICAg
IHJldHVybiByZXN1bHQubGVha1JlZigpOworfQorCit2b2lkIGpzY192YWx1ZV9vYmplY3RfZGVm
aW5lX3Byb3BlcnR5X2RhdGEoSlNDVmFsdWUqIHZhbHVlLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5h
bWUsIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBmbGFncywgSlNDVmFsdWUqIHByb3BlcnR5VmFsdWUp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHByb3BlcnR5TmFtZSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYg
PSB2YWx1ZS0+cHJpdjsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBkZXNjcmlwdG9yID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB0cnVlVmFsdWUgPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX25ld19ib29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAo
ZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKQorICAgICAgICBqc2NfdmFs
dWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiY29uZmlndXJhYmxlIiwg
dHJ1ZVZhbHVlLmdldCgpKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfRU5V
TUVSQUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRv
ci5nZXQoKSwgImVudW1lcmFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworICAgIGlmIChwcm9wZXJ0
eVZhbHVlKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9y
LmdldCgpLCAidmFsdWUiLCBwcm9wZXJ0eVZhbHVlKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0NfVkFM
VUVfUFJPUEVSVFlfV1JJVEFCTEUpCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3Bl
cnR5KGRlc2NyaXB0b3IuZ2V0KCksICJ3cml0YWJsZSIsIHRydWVWYWx1ZS5nZXQoKSk7CisgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1
ZShwcml2LT5jb250ZXh0LmdldCgpLCAiT2JqZWN0IikpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2Qob2JqZWN0
LmdldCgpLCAiZGVmaW5lUHJvcGVydHkiLAorICAgICAgICBKU0NfVFlQRV9WQUxVRSwgdmFsdWUs
IEdfVFlQRV9TVFJJTkcsIHByb3BlcnR5TmFtZSwgSlNDX1RZUEVfVkFMVUUsIGRlc2NyaXB0b3Iu
Z2V0KCksIEdfVFlQRV9OT05FKSk7Cit9CisKK3ZvaWQganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfYWNjZXNzb3IoSlNDVmFsdWUqIHZhbHVlLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5h
bWUsIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBmbGFncywgR1R5cGUgcHJvcGVydHlUeXBlLCBHQ2Fs
bGJhY2sgZ2V0dGVyLCBHQ2FsbGJhY2sgc2V0dGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
SlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcm9wZXJ0eU5hbWUp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlUeXBlICE9IEdfVFlQRV9JTlZBTElEICYm
IHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfTk9ORSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChnZXR0
ZXIgfHwgc2V0dGVyKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2
OworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGRlc2NyaXB0b3IgPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X25ld19vYmplY3QocHJpdi0+Y29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAg
IEdSZWZQdHI8SlNDVmFsdWU+IHRydWVWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Jv
b2xlYW4ocHJpdi0+Y29udGV4dC5nZXQoKSwgVFJVRSkpOworICAgIGlmIChmbGFncyAmIEpTQ19W
QUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUpCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0
X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJjb25maWd1cmFibGUiLCB0cnVlVmFsdWUuZ2V0
KCkpOworICAgIGlmIChmbGFncyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9FTlVNRVJBQkxFKQorICAg
ICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiZW51
bWVyYWJsZSIsIHRydWVWYWx1ZS5nZXQoKSk7CisKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSk7CisgICAg
SlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CisgICAgaWYgKGdldHRlcikgeworICAgICAgICBHUmVmUHRyPEdDbG9zdXJlPiBjbG9zdXJl
ID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGdldHRlciwgbnVsbHB0ciwgbnVsbHB0cikpOwor
ICAgICAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpTQzo6SlNDQ2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIEFTQ0lJTGl0ZXJh
bCgiZ2V0IiksCisgICAgICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1l
dGhvZCwgbnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgcHJvcGVydHlUeXBlLCB7IH0pKTsKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVW
YWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCBmdW5jdGlvbk9iamVjdCk7CisgICAgICAgIGpzY192
YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJnZXQiLCBmdW5jdGlv
bi5nZXQoKSk7CisgICAgfQorICAgIGlmIChzZXR0ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xv
c3VyZT4gY2xvc3VyZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhzZXR0ZXIsIG51bGxwdHIs
IG51bGxwdHIpKTsKKyAgICAgICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpT
Q0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBBU0NJSUxpdGVyYWwoInNldCIpLAorICAgICAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0
aW9uOjpUeXBlOjpNZXRob2QsIG51bGxwdHIsIFdURk1vdmUoY2xvc3VyZSksIEdfVFlQRV9OT05F
LCB7IHByb3BlcnR5VHlwZSB9KSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9u
ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgZnVuY3Rp
b25PYmplY3QpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlw
dG9yLmdldCgpLCAic2V0IiwgZnVuY3Rpb24uZ2V0KCkpOworICAgIH0KKyAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKHByaXYtPmNv
bnRleHQuZ2V0KCksICJPYmplY3QiKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJk
ZWZpbmVQcm9wZXJ0eSIsCisgICAgICAgIEpTQ19UWVBFX1ZBTFVFLCB2YWx1ZSwgR19UWVBFX1NU
UklORywgcHJvcGVydHlOYW1lLCBKU0NfVFlQRV9WQUxVRSwgZGVzY3JpcHRvci5nZXQoKSwgR19U
WVBFX05PTkUpKTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oSlNDQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNrIGNhbGxiYWNrLCBHVHlw
ZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGNhbGxiYWNrLCBudWxscHRyKTsKKworICAgIHZhX2xpc3QgYXJnczsK
KyAgICB2YV9zdGFydChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFt
ZXRlcnM7CisgICAgaWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGFyYW1Db3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRB
cHBlbmQodmFfYXJnKGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKwor
ICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXco
Y2FsbGJhY2ssIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSk7CisgICAgSlNDOjpWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgYXV0
byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBuYW1lID8gU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSA6IEFTQ0lJTGl0ZXJhbCgiYW5vbnltb3VzIiksCisgICAgICAgIEpTQzo6SlNDQ2Fs
bGJhY2tGdW5jdGlvbjo6VHlwZTo6RnVuY3Rpb24sIG51bGxwdHIsIFdURk1vdmUoY2xvc3VyZSks
IHJldHVyblR5cGUsIFdURk1vdmUocGFyYW1ldGVycykpKTsKKyAgICByZXR1cm4ganNjQ29udGV4
dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgZnVuY3Rpb25PYmplY3QpLmxlYWtSZWYoKTsKK30K
KworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX2Z1bmN0aW9uKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAg
ICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRl
eHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBK
U1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAg
ICByZXR1cm4gIWV4Y2VwdGlvbiA/IEpTT2JqZWN0SXNGdW5jdGlvbihqc0NvbnRleHQsIG9iamVj
dCkgOiBGQUxTRTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKEpTQ1Zh
bHVlKiB2YWx1ZSwgR1R5cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisKKyAgICBKU0NW
YWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBq
c2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFs
dWVUb09iamVjdChqc0NvbnRleHQsIHZhbHVlLT5wcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsK
KyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQu
Z2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5l
ZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFy
dChhcmdzLCBmaXJzdFBhcmFtZXRlclR5cGUpOworICAgIGF1dG8gcmVzdWx0ID0ganNjVmFsdWVD
YWxsRnVuY3Rpb24odmFsdWUsIGZ1bmN0aW9uLCBudWxscHRyLCBmaXJzdFBhcmFtZXRlclR5cGUs
IGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVybiByZXN1bHQubGVha1JlZigp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzAyNDRmNmZiZWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApAQCAtMCwwICsx
LDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmlu
ZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9y
ICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBKU0NWYWx1ZV9oCisjZGVmaW5lIEpTQ1ZhbHVlX2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0RlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIEpTQ19UWVBFX1ZBTFVFICAgICAgICAgICAgKGpzY192YWx1ZV9nZXRfdHlwZSgp
KQorI2RlZmluZSBKU0NfVkFMVUUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfVkFMVUUsIEpTQ1ZhbHVlKSkKKyNkZWZpbmUgSlNDX0lT
X1ZBTFVFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpT
Q19UWVBFX1ZBTFVFKSkKKyNkZWZpbmUgSlNDX1ZBTFVFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNz
KSkKKyNkZWZpbmUgSlNDX0lTX1ZBTFVFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIEpTQ19UWVBFX1ZBTFVFKSkKKyNkZWZpbmUgSlNDX1ZBTFVFX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX1ZB
TFVFLCBKU0NWYWx1ZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlIEpTQ1ZhbHVl
OwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlQ2xhc3MgSlNDVmFsdWVDbGFzczsKK3R5cGVkZWYg
c3RydWN0IF9KU0NWYWx1ZVByaXZhdGUgSlNDVmFsdWVQcml2YXRlOworCit0eXBlZGVmIHN0cnVj
dCBfSlNDQ2xhc3MgSlNDQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dCBKU0NDb250
ZXh0OworCit0eXBlZGVmIGVudW0geworICAgIEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFC
TEUgPSAxIDw8IDAsCisgICAgSlNDX1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUgICA9IDEgPDwg
MSwKKyAgICBKU0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEUgICAgID0gMSA8PCAyCit9IEpTQ1Zh
bHVlUHJvcGVydHlGbGFnczsKKworc3RydWN0IF9KU0NWYWx1ZSB7CisgICAgR09iamVjdCBwYXJl
bnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBKU0NWYWx1ZVByaXZhdGUgKnByaXY7Cit9
OworCitzdHJ1Y3QgX0pTQ1ZhbHVlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUK
K2pzY192YWx1ZV9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworSlND
X0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZCAgICAgICAgICAgICAgICAg
ICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQpOworCitKU0NfQVBJIGdib29sZWFuCitq
c2NfdmFsdWVfaXNfdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAg
ICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NDb250ZXh0ICoKK2pzY192YWx1ZV9nZXRfY29u
dGV4dCAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwor
CitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfbnVsbCAgICAgICAgICAgICAgICAg
ICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgZ2Jvb2xl
YW4KK2pzY192YWx1ZV9pc19udWxsICAgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAg
ICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdf
bnVtYmVyICAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgICAg
ICAgICAgICAgICAgbnVtYmVyKTsKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19udW1i
ZXIgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwor
CitKU0NfQVBJIGRvdWJsZQoranNjX3ZhbHVlX3RvX2RvdWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgZ2ludDMyCitqc2Nf
dmFsdWVfdG9faW50MzIgICAgICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAg
ICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2Jvb2xlYW4g
ICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAg
ICAgIHZhbHVlKTsKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19ib29sZWFuICAgICAg
ICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJ
IGdib29sZWFuCitqc2NfdmFsdWVfdG9fYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAoSlND
VmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFs
dWVfbmV3X3N0cmluZyAgICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAgICAgICAgICAgKnN0cmluZyk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1
ZV9pc19zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAq
dmFsdWUpOworCitKU0NfQVBJIGNoYXIgKgoranNjX3ZhbHVlX3RvX3N0cmluZyAgICAgICAgICAg
ICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlND
VmFsdWUgKgoranNjX3ZhbHVlX25ld19hcnJheSAgICAgICAgICAgICAgICAgICAgICAgKEpTQ0Nv
bnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICBmaXJzdF9pdGVtX3R5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlNDX0FQSSBK
U0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2FycmF5X2Zyb21fZ2FycmF5ICAgICAgICAgICAoSlND
Q29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1B0ckFycmF5ICAgICAgICAgICAgKmFycmF5KTsKKworSlNDX0FQSSBn
Ym9vbGVhbgoranNjX3ZhbHVlX2lzX2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1Zh
bHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVl
X25ld19vYmplY3QgICAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyICAgICAgICAgICAgICBpbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBKU0NDbGFzcyAgICAgICAgICAgICAqanNjX2NsYXNzKTsKKworSlNDX0FQ
SSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX29iamVjdCAgICAgICAgICAgICAgICAgICAgICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1
ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAq
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDQ2xh
c3MgICAgICAgICAgICAgKmpzY19jbGFzcyk7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVlX29i
amVjdF9zZXRfcHJvcGVydHkgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICAgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBKU0NWYWx1ZSAgICAgICAgICAgICAqcHJvcGVydHkpOworCitKU0NfQVBJIEpTQ1ZhbHVl
ICoKK2pzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5ICAgICAgICAgICAgIChKU0NWYWx1ZSAg
ICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUpOworCitKU0NfQVBJIHZvaWQKK2pzY192
YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4ICAgIChKU0NWYWx1ZSAgICAgICAgICAg
ICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vp
bnQgICAgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAgICAgICpwcm9wZXJ0eSk7CisKK0pTQ19BUEkg
SlNDVmFsdWUgKgoranNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXggICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgaW5kZXgpOworCitKU0NfQVBJIEpT
Q1ZhbHVlICoKK2pzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZCAgICAgICAgICAgIChKU0NW
YWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIGZpcnN0X3Bh
cmFtZXRlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLik7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlf
ZGF0YSAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqcHJvcGVydHlf
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1
ZVByb3BlcnR5RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICAgKnByb3BlcnR5X3ZhbHVlKTsKKworSlNDX0FQ
SSB2b2lkCitqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9hY2Nlc3NvciAoSlNDVmFs
dWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpwcm9wZXJ0eV9uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBm
bGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSAg
ICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgZ2V0dGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBz
ZXR0ZXIpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfZnVuY3Rpb24gICAg
ICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAq
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJh
Y2sgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIHJldHVybl90eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBu
X3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4p
OworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfZnVuY3Rpb24gICAgICAgICAgICAg
ICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1
ZSAqCitqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbCAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUg
ICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICBmaXJzdF9wYXJhbWV0ZXJfdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogSlNDVmFsdWVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi42MjE0NDM1M2Y1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNDVmFsdWUuaCIKKworSlNWYWx1ZVJlZiBqc2NWYWx1ZUdldEpTVmFsdWUoSlNDVmFsdWUq
KTsKK0pTQ1ZhbHVlKiBqc2NWYWx1ZUNyZWF0ZShKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hp
bmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5l
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmM2YTQ0ZmJiNDYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmly
dHVhbE1hY2hpbmUuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NWaXJ0dWFs
TWFjaGluZS5oIgorCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJK
U0NWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBl
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUgeworICAgIEpT
Q29udGV4dEdyb3VwUmVmIGpzQ29udGV4dEdyb3VwOworICAgIEhhc2hNYXA8SlNHbG9iYWxDb250
ZXh0UmVmLCBKU0NDb250ZXh0Kj4gY29udGV4dENhY2hlOworfSBKU0NWaXJ0dWFsTWFjaGluZVBy
aXZhdGU7CisKK1dFQktJVF9ERUZJTkVfVFlQRShKU0NWaXJ0dWFsTWFjaGluZSwganNjX3ZpcnR1
YWxfbWFjaGluZSwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIFN0YXRpY0xvY2sgd3JhcHBlckNh
Y2hlTXV0ZXg7CisKK3N0YXRpYyBIYXNoTWFwPEpTQ29udGV4dEdyb3VwUmVmLCBKU0NWaXJ0dWFs
TWFjaGluZSo+JiB3cmFwcGVyTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxKU0NvbnRleHRHcm91cFJlZiwgSlNDVmlydHVhbE1hY2hpbmUqPj4gbWFwOworICAgIHJl
dHVybiBtYXA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFdyYXBwZXIoSlNDb250ZXh0R3JvdXBSZWYg
Z3JvdXAsIEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayh3cmFwcGVyQ2FjaGVNdXRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXdy
YXBwZXJNYXAoKS5jb250YWlucyhncm91cCkpOworICAgIHdyYXBwZXJNYXAoKS5zZXQoZ3JvdXAs
IHZtKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlV3JhcHBlcihKU0NvbnRleHRHcm91cFJlZiBn
cm91cCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh3cmFwcGVyQ2Fj
aGVNdXRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQod3JhcHBlck1hcCgpLmNvbnRhaW5zKGdyb3Vw
KSk7CisgICAgd3JhcHBlck1hcCgpLnJlbW92ZShncm91cCk7Cit9CisKK3N0YXRpYyB2b2lkIGpz
Y1ZpcnR1YWxNYWNoaW5lU2V0Q29udGV4dEdyb3VwKEpTQ1ZpcnR1YWxNYWNoaW5lICp2bSwgSlND
b250ZXh0R3JvdXBSZWYgZ3JvdXApCit7CisgICAgaWYgKGdyb3VwKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCF2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgICAgICB2bS0+cHJpdi0+
anNDb250ZXh0R3JvdXAgPSBncm91cDsKKyAgICAgICAgSlNDb250ZXh0R3JvdXBSZXRhaW4odm0t
PnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICAgICAgYWRkV3JhcHBlcih2bS0+cHJpdi0+anND
b250ZXh0R3JvdXAsIHZtKTsKKyAgICB9IGVsc2UgaWYgKHZtLT5wcml2LT5qc0NvbnRleHRHcm91
cCkgeworICAgICAgICByZW1vdmVXcmFwcGVyKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwUmVsZWFzZSh2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOwor
ICAgICAgICB2bS0+cHJpdi0+anNDb250ZXh0R3JvdXAgPSBudWxscHRyOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQganNjVmlydHVhbE1hY2hpbmVFbnN1cmVDb250ZXh0R3JvdXAoSlNDVmlydHVh
bE1hY2hpbmUgKnZtKQoreworICAgIGlmICh2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8qIGpzQ29udGV4dEdyb3VwID0gSlNDb250ZXh0R3JvdXBD
cmVhdGUoKTsKKyAgICBqc2NWaXJ0dWFsTWFjaGluZVNldENvbnRleHRHcm91cCh2bSwganNDb250
ZXh0R3JvdXApOworICAgIEpTQ29udGV4dEdyb3VwUmVsZWFzZShqc0NvbnRleHRHcm91cCk7Cit9
CisKK3N0YXRpYyB2b2lkIGpzY1ZpcnR1YWxNYWNoaW5lRGlzcG9zZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgSlNDVmlydHVhbE1hY2hpbmUqIHZtID0gSlNDX1ZJUlRVQUxfTUFDSElORShvYmpl
Y3QpOworICAgIGpzY1ZpcnR1YWxNYWNoaW5lU2V0Q29udGV4dEdyb3VwKHZtLCBudWxscHRyKTsK
KworICAgIEdfT0JKRUNUX0NMQVNTKGpzY192aXJ0dWFsX21hY2hpbmVfcGFyZW50X2NsYXNzKS0+
ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBqc2NfdmlydHVhbF9tYWNoaW5lX2Ns
YXNzX2luaXQoSlNDVmlydHVhbE1hY2hpbmVDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmpDbGFzcy0+ZGlz
cG9zZSA9IGpzY1ZpcnR1YWxNYWNoaW5lRGlzcG9zZTsKK30KKworR1JlZlB0cjxKU0NWaXJ0dWFs
TWFjaGluZT4ganNjVmlydHVhbE1hY2hpbmVHZXRPckNyZWF0ZShKU0NvbnRleHRHcm91cFJlZiBq
c0NvbnRleHRHcm91cCkKK3sKKyAgICBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bSA9IHdy
YXBwZXJNYXAoKS5nZXQoanNDb250ZXh0R3JvdXApOworICAgIGlmICghdm0pIHsKKyAgICAgICAg
dm0gPSBhZG9wdEdSZWYoanNjX3ZpcnR1YWxfbWFjaGluZV9uZXcoKSk7CisgICAgICAgIGpzY1Zp
cnR1YWxNYWNoaW5lU2V0Q29udGV4dEdyb3VwKHZtLmdldCgpLCBqc0NvbnRleHRHcm91cCk7Cisg
ICAgfQorICAgIHJldHVybiB2bTsKK30KKworSlNDb250ZXh0R3JvdXBSZWYganNjVmlydHVhbE1h
Y2hpbmVHZXRDb250ZXh0R3JvdXAoSlNDVmlydHVhbE1hY2hpbmUqIHZtKQoreworICAgIGpzY1Zp
cnR1YWxNYWNoaW5lRW5zdXJlQ29udGV4dEdyb3VwKHZtKTsKKyAgICByZXR1cm4gdm0tPnByaXYt
PmpzQ29udGV4dEdyb3VwOworfQorCit2b2lkIGpzY1ZpcnR1YWxNYWNoaW5lQWRkQ29udGV4dChK
U0NWaXJ0dWFsTWFjaGluZSogdm0sIEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICBhdXRvIGpzQ29udGV4dCA9
IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
b250ZXh0R2V0R3JvdXAoanNDb250ZXh0KSA9PSB2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCF2bS0+cHJpdi0+Y29udGV4dENhY2hlLmNvbnRhaW5zKGpzQ29u
dGV4dCkpOworICAgIHZtLT5wcml2LT5jb250ZXh0Q2FjaGUuc2V0KGpzQ29udGV4dCwgY29udGV4
dCk7Cit9CisKK3ZvaWQganNjVmlydHVhbE1hY2hpbmVSZW1vdmVDb250ZXh0KEpTQ1ZpcnR1YWxN
YWNoaW5lKiB2bSwgSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh2
bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgIGF1dG8ganNDb250ZXh0ID0ganNjQ29udGV4
dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NvbnRleHRHZXRH
cm91cChqc0NvbnRleHQpID09IHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgUkVMRUFT
RV9BU1NFUlQodm0tPnByaXYtPmNvbnRleHRDYWNoZS5jb250YWlucyhqc0NvbnRleHQpKTsKKyAg
ICB2bS0+cHJpdi0+Y29udGV4dENhY2hlLnJlbW92ZShqc0NvbnRleHQpOworfQorCitKU0NDb250
ZXh0KiBqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUqIHZtLCBK
U0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0KQoreworICAgIHJldHVybiB2bS0+cHJpdi0+Y29u
dGV4dENhY2hlLmdldChqc0NvbnRleHQpOworfQorCitKU0NWaXJ0dWFsTWFjaGluZSoganNjX3Zp
cnR1YWxfbWFjaGluZV9uZXcoKQoreworICAgIHJldHVybiBKU0NfVklSVFVBTF9NQUNISU5FKGdf
b2JqZWN0X25ldyhKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUsIG51bGxwdHIpKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI1YzY0M2UwOWIwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNo
aW5lLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJ
TEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3Rs
eS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NWaXJ0dWFsTWFjaGluZV9oCisjZGVmaW5lIEpTQ1Zp
cnR1YWxNYWNoaW5lX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8anNj
L0pTQ0RlZmluZXMuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSAgICAgICAgICAgIChqc2Nfdmly
dHVhbF9tYWNoaW5lX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19WSVJUVUFMX01BQ0hJTkUob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVf
VklSVFVBTF9NQUNISU5FLCBKU0NWaXJ0dWFsTWFjaGluZSkpCisjZGVmaW5lIEpTQ19JU19WSVJU
VUFMX01BQ0hJTkUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FKSkKKyNkZWZpbmUgSlNDX1ZJUlRVQUxfTUFDSElO
RV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0Nf
VFlQRV9WSVJUVUFMX01BQ0hJTkUsIEpTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MpKQorI2RlZmluZSBK
U0NfSVNfVklSVFVBTF9NQUNISU5FX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSkpCisjZGVmaW5lIEpTQ19WSVJU
VUFMX01BQ0hJTkVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FLCBKU0NWaXJ0dWFsTWFjaGluZUNsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5lIEpTQ1ZpcnR1YWxNYWNoaW5lOwor
dHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MgSlNDVmlydHVhbE1hY2hpbmVD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUgSlNDVmlydHVh
bE1hY2hpbmVQcml2YXRlOworCitzdHJ1Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5lIHsKKyAgICBHT2Jq
ZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ1ZpcnR1YWxNYWNoaW5l
UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfSlNDVmlydHVhbE1hY2hpbmVDbGFzcyB7Cisg
ICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVk
MCkgKHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQg
KCpfanNjX3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMykgKHZv
aWQpOworfTsKKworSlNDX0FQSSBHVHlwZQoranNjX3ZpcnR1YWxfbWFjaGluZV9nZXRfdHlwZSAo
dm9pZCk7CisKK0pTQ19BUEkgSlNDVmlydHVhbE1hY2hpbmUgKgoranNjX3ZpcnR1YWxfbWFjaGlu
ZV9uZXcgICAgICAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBKU0NWaXJ0dWFs
TWFjaGluZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmlydHVhbE1hY2hpbmVQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDVmlydHVhbE1hY2hpbmVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjhmYzllNzA3MDRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmlydHVhbE1hY2hpbmUu
aCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK0dSZWZQdHI8SlNDVmlydHVhbE1h
Y2hpbmU+IGpzY1ZpcnR1YWxNYWNoaW5lR2V0T3JDcmVhdGUoSlNDb250ZXh0R3JvdXBSZWYpOwor
SlNDb250ZXh0R3JvdXBSZWYganNjVmlydHVhbE1hY2hpbmVHZXRDb250ZXh0R3JvdXAoSlNDVmly
dHVhbE1hY2hpbmUqKTsKK3ZvaWQganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KEpTQ1ZpcnR1
YWxNYWNoaW5lKiwgSlNDQ29udGV4dCopOwordm9pZCBqc2NWaXJ0dWFsTWFjaGluZVJlbW92ZUNv
bnRleHQoSlNDVmlydHVhbE1hY2hpbmUqLCBKU0NDb250ZXh0Kik7CitKU0NDb250ZXh0KiBqc2NW
aXJ0dWFsTWFjaGluZUdldENvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUqLCBKU0dsb2JhbENvbnRl
eHRSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dy
YXBwZXJNYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJN
YXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZTBlN2QxNGI1
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NX
cmFwcGVyTWFwLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1h
cC5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVj
dC5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlND
YWxsYmFja09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworV3JhcHBlck1hcDo6V3JhcHBl
ck1hcChKU0NDb250ZXh0KiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX2NhY2hlZEpTV3JhcHBlcnMoc3RkOjptYWtlX3VuaXF1ZTxKU0M6OldlYWtHQ01hcDxncG9p
bnRlciwgSlNDOjpKU09iamVjdD4+KHRvSlMoanNjQ29udGV4dEdldEpTQ29udGV4dChtX2NvbnRl
eHQpKS0+dm0oKSkpCit7Cit9CisKK1dyYXBwZXJNYXA6On5XcmFwcGVyTWFwKCkKK3sKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGpzY0NsYXNzIDogbV9jbGFzc01hcC52YWx1ZXMoKSkKKyAgICAgICAg
anNjQ2xhc3NJbnZhbGlkYXRlKGpzY0NsYXNzLmdldCgpKTsKK30KKworR1JlZlB0cjxKU0NWYWx1
ZT4gV3JhcHBlck1hcDo6Z29iamVjdFdyYXBwZXIoSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAg
IGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQobV9jb250ZXh0KTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhqc0NvbnRleHQpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCh0b0pTR2xvYmFsT2JqZWN0KGpzQ29udGV4dCktPndyYXBwZXJNYXAoKSA9PSB0aGlz
KTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IG1fY2FjaGVkR09iamVjdFdyYXBwZXJz
LmdldChqc1ZhbHVlKTsKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIHZhbHVlID0gYWRvcHRH
UmVmKGpzY1ZhbHVlQ3JlYXRlKG1fY29udGV4dCwganNWYWx1ZSkpOworICAgICAgICBtX2NhY2hl
ZEdPYmplY3RXcmFwcGVycy5zZXQoanNWYWx1ZSwgdmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgV3JhcHBlck1hcDo6dW53cmFwKEpTVmFsdWVSZWYganNW
YWx1ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2NhY2hlZEdPYmplY3RXcmFwcGVycy5jb250
YWlucyhqc1ZhbHVlKSk7CisgICAgbV9jYWNoZWRHT2JqZWN0V3JhcHBlcnMucmVtb3ZlKGpzVmFs
dWUpOworfQorCit2b2lkIFdyYXBwZXJNYXA6OnJlZ2lzdGVyQ2xhc3MoSlNDQ2xhc3MqIGpzY0Ns
YXNzKQoreworICAgIGF1dG8qIGpzQ2xhc3MgPSBqc2NDbGFzc0dldEpTQ2xhc3MoanNjQ2xhc3Mp
OworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NsYXNzTWFwLmNvbnRhaW5zKGpzQ2xhc3MpKTsKKyAg
ICBtX2NsYXNzTWFwLnNldChqc0NsYXNzLCBqc2NDbGFzcyk7Cit9CisKK0pTT2JqZWN0KiBXcmFw
cGVyTWFwOjpjcmVhdGVKU1dyYXBwcGVyKEpTQ2xhc3NSZWYganNDbGFzcywgSlNWYWx1ZVJlZiBw
cm90b3R5cGUsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lG
dW5jdGlvbikKK3sKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0
KG1fY29udGV4dCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
YXV0byogb2JqZWN0ID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZSgpLCBqc0NsYXNz
LCBudWxscHRyKTsKKyAgICBpZiAod3JhcHBlZE9iamVjdCkgeworICAgICAgICBvYmplY3QtPnNl
dFdyYXBwZWRPYmplY3QobmV3IEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3Qod3JhcHBlZE9iamVj
dCwgZGVzdHJveUZ1bmN0aW9uKSk7CisgICAgICAgIG1fY2FjaGVkSlNXcmFwcGVycy0+c2V0KHdy
YXBwZWRPYmplY3QsIG9iamVjdCk7CisgICAgfQorICAgIGlmIChwcm90b3R5cGUpCisgICAgICAg
IEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzQ29udGV4dCwgdG9SZWYob2JqZWN0KSwgcHJvdG90eXBl
KTsKKyAgICBlbHNlIGlmIChhdXRvKiBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MtPnByb3RvdHlwZShl
eGVjKSkKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGVEaXJlY3Qodm0sIGpzUHJvdG90eXBl
KTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitKU09iamVjdCogV3JhcHBlck1hcDo6anNXcmFw
cGVyKGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0Cit7CisgICAgaWYgKCF3cmFwcGVkT2Jq
ZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jYWNoZWRKU1dyYXBw
ZXJzLT5nZXQod3JhcHBlZE9iamVjdCk7Cit9CisKK2dwb2ludGVyIFdyYXBwZXJNYXA6OndyYXBw
ZWRPYmplY3QoSlNPYmplY3QqIGpzT2JqZWN0KSBjb25zdAoreworICAgIGF1dG8qIGpzQ29udGV4
dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQobV9jb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKHRvSlMoanNDb250ZXh0KSk7CisgICAgVk0mIHZtID0gdG9KUyhqc0NvbnRleHQpLT52
bSgpOworICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHModm0sIEpTQzo6SlNDYWxsYmFja09iamVj
dDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD46OmluZm8oKSkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHdyYXBwZXIgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGpzT2JqZWN0
KS0+d3JhcHBlZE9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQzo6
SlNDR0xpYldyYXBwZXJPYmplY3QqPih3cmFwcGVyKS0+b2JqZWN0KCk7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4yODI5MDFmOTQxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmgKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2Vha0dDTWFwLmgi
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzIEpTQ0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRl
eHQgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZSBKU0NWYWx1ZTsKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTT2JqZWN0OworCitjbGFzcyBXcmFwcGVyTWFwIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXcmFwcGVy
TWFwKEpTQ0NvbnRleHQqKTsKKyAgICB+V3JhcHBlck1hcCgpOworCisgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gZ29iamVjdFdyYXBwZXIoSlNWYWx1ZVJlZik7CisgICAgdm9pZCB1bndyYXAoSlNWYWx1
ZVJlZik7CisKKyAgICB2b2lkIHJlZ2lzdGVyQ2xhc3MoSlNDQ2xhc3MqKTsKKworICAgIEpTT2Jq
ZWN0KiBjcmVhdGVKU1dyYXBwcGVyKEpTQ2xhc3NSZWYsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBn
cG9pbnRlciwgR0Rlc3Ryb3lOb3RpZnkpOworICAgIEpTT2JqZWN0KiBqc1dyYXBwZXIoZ3BvaW50
ZXIgd3JhcHBlZE9iamVjdCkgY29uc3Q7CisgICAgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdChKU09i
amVjdCoganNPYmplY3QpIGNvbnN0OworCitwcml2YXRlOgorICAgIEpTQ0NvbnRleHQqIG1fY29u
dGV4dCB7IG51bGxwdHIgfTsKKyAgICBIYXNoTWFwPEpTVmFsdWVSZWYsIEpTQ1ZhbHVlKj4gbV9j
YWNoZWRHT2JqZWN0V3JhcHBlcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6V2Vha0dDTWFw
PGdwb2ludGVyLCBKU0M6OkpTT2JqZWN0Pj4gbV9jYWNoZWRKU1dyYXBwZXJzOworICAgIEhhc2hN
YXA8SlNDbGFzc1JlZiwgR1JlZlB0cjxKU0NDbGFzcz4+IG1fY2xhc3NNYXA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9qc2MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzlkNThiMjU0MjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgKQEAgLTAsMCArMSwzNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fSlNDX0hf
XworI2RlZmluZSBfX0pTQ19IX18KKworI2RlZmluZSBfX0pTQ19IX0lOU0lERV9fCisKKyNpbmNs
dWRlIDxqc2MvSlNDQ2xhc3MuaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPgorI2luY2x1
ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisjaW5jbHVkZSA8anNjL0pTQ0V4Y2VwdGlvbi5oPgorI2lu
Y2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorI2luY2x1ZGUgPGpzYy9KU0NWaXJ0dWFsTWFjaGluZS5o
PgorCisjdW5kZWYgX19KU0NfSF9JTlNJREVfXworCisjZW5kaWYgLyogX19KU0NfSF9fICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZWRhNWVlYjk2OTIuLjJiNWVmMDBk
MTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjA4LDcgKzEyMDgs
NyBAQCBlbmRpZiAoKQogIyBGb3JjZSBzdGFnaW5nIG9mIHNoYXJlZCBzY3JpcHRzLCBldmVuIGlm
IHRoZXkgYXJlbid0IGRpcmVjdGx5IHVzZWQgdG8gYnVpbGQgSmF2YVNjcmlwdENvcmUuCiAKIGFk
ZF9jdXN0b21fdGFyZ2V0KHN0YWdlU2hhcmVkU2NyaXB0cyBERVBFTkRTICR7SmF2YVNjcmlwdENv
cmVfU0NSSVBUU30pCi1hZGRfZGVwZW5kZW5jaWVzKEphdmFTY3JpcHRDb3JlIHN0YWdlU2hhcmVk
U2NyaXB0cykKK2FkZF9kZXBlbmRlbmNpZXMoSmF2YVNjcmlwdENvcmUgc3RhZ2VTaGFyZWRTY3Jp
cHRzICR7SmF2YVNjcmlwdENvcmVfRVhUUkFfREVQRU5ERU5DSUVTfSkKIAogaWYgKE1TVkMpCiAg
ICAgYWRkX2N1c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDZmMDk1NmM1MzIxLi4xNDE5YjkyYWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwxMCArMSwyNSBAQAogc2V0KEphdmFTY3JpcHRDb3Jl
X09VVFBVVF9OQU1FIGphdmFzY3JpcHRjb3JlZ3RrLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSkK
IAorZmlsZShNQUtFX0RJUkVDVE9SWSAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3Jp
cHRDb3JlL2dsaWIpCisKK2xpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKKyAgICBB
UEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAorICAgIEFQSS9nbGliL0pTQ0NhbGxi
YWNrRnVuY3Rpb24uY3BwCisgICAgQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCisgICAgQVBJL2dsaWIv
SlNDQ29udGV4dC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NFeGNlcHRpb24uY3BwCisgICAgQVBJL2ds
aWIvSlNDVmFsdWUuY3BwCisgICAgQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuY3BwCisgICAg
QVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAKKykKKwogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENv
cmVfVU5JRklFRF9TT1VSQ0VfTElTVF9GSUxFUwogICAgICJTb3VyY2VzR1RLLnR4dCIKICkKIAog
bGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgIiR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYiIKKyAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS9nbGliIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vaW5zcGVjdG9yL3JlbW90ZS9nbGliIgogKQogCkBAIC00Myw2ICs1OCw3IEBAIGVuZGlmICgp
CiAKIGFkZF9kZWZpbml0aW9ucygtRFNUQVRJQ0FMTFlfTElOS0VEX1dJVEhfV1RGKQogYWRkX2Rl
ZmluaXRpb25zKC1ETElCRElSPSIke0xJQl9JTlNUQUxMX0RJUn0iKQorYWRkX2RlZmluaXRpb25z
KC1ESlNDX0NPTVBJTEFUSU9OKQogCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJ
RVMKICAgICAke0dMSUJfTElCUkFSSUVTfQpAQCAtNTAsMyArNjYsMTYgQEAgbGlzdChBUFBFTkQg
SmF2YVNjcmlwdENvcmVfTElCUkFSSUVTCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNU
RU1fSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKKyMg
VGhlc2Ugc3ltYm9saWMgbGluayBhbGxvd3MgaW5jbHVkZXMgbGlrZSAjaW5jbHVkZSA8anNjL0pT
Q0NvbnRleHQuaD4gd2hpY2ggc2ltdWxhdGVzIGluc3RhbGxlZCBoZWFkZXJzLgorYWRkX2N1c3Rv
bV9jb21tYW5kKAorICAgIE9VVFBVVCAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3Jp
cHRDb3JlL2dsaWIvanNjCisgICAgREVQRU5EUyAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2ds
aWIKKyAgICBDT01NQU5EIGxuIC1uIC1zIC1mICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xp
YiAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIvanNjCispCith
ZGRfY3VzdG9tX3RhcmdldChKU0MtZmFrZS1hcGktaGVhZGVycworICAgIERFUEVORFMgJHtGT1JX
QVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliL2pzYworKQorc2V0KEphdmFT
Y3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFUworICAgIEpTQy1mYWtlLWFwaS1oZWFkZXJzCisp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IGE1M2E0NDY5MDg2Li45ZWVjNGMy
MDg0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTk4LDYgKzk4LDEwIEBA
IGV4dGVybiAiQyIgdm9pZCBvYmpjX2F1dG9yZWxlYXNlUG9vbFBvcCh2b2lkICpjb250ZXh0KTsK
ICNlbmRpZgogI2VuZGlmIC8vIFVTRShGT1VOREFUSU9OKQogCisjaWYgVVNFKEdMSUIpCisjaW5j
bHVkZSAiSlNDR0xpYldyYXBwZXJPYmplY3QuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ2MSw3ICs0NjUsNyBAQCB2b2lkIEhlYXA6Omxh
c3RDaGFuY2VUb0ZpbmFsaXplKCkKIAogdm9pZCBIZWFwOjpyZWxlYXNlRGVsYXllZFJlbGVhc2Vk
T2JqZWN0cygpCiB7Ci0jaWYgVVNFKEZPVU5EQVRJT04pCisjaWYgVVNFKEZPVU5EQVRJT04pIHx8
IFVTRShHTElCKQogICAgIC8vIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgY2FzZSB0aGF0
IHJlbGVhc2luZyBhbiBvYmplY3QgY2FuIGNyZWF0ZSBtb3JlIG9iamVjdHMgZHVlIHRvIHRoZQog
ICAgIC8vIHJlbGVhc2UgY2FsbGluZyBpbnRvIEpTLiBXaGVuIHRob3NlIEpTIGNhbGwocykgZXhp
dCBhbmQgYWxsIGxvY2tzIGFyZSBiZWluZyBkcm9wcGVkIHdlIGVuZCB1cAogICAgIC8vIGJhY2sg
aGVyZSBhbmQgY291bGQgdHJ5IHRvIHJlY3Vyc2l2ZWx5IHJlbGVhc2Ugb2JqZWN0cy4gV2UgZ3Vh
cmQgdGhhdCB3aXRoIGEgcmVjdXJzaXZlIGVudHJ5CkBAIC00NzMsMTUgKzQ3NywxOSBAQCB2b2lk
IEhlYXA6OnJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCkKICAgICAgICAgd2hpbGUgKCFt
X2RlbGF5ZWRSZWxlYXNlT2JqZWN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKIAotICAgICAgICAgICAgVmVj
dG9yPFJldGFpblB0cjxDRlR5cGVSZWY+PiBvYmplY3RzVG9SZWxlYXNlID0gV1RGTW92ZShtX2Rl
bGF5ZWRSZWxlYXNlT2JqZWN0cyk7CisgICAgICAgICAgICBhdXRvIG9iamVjdHNUb1JlbGVhc2Ug
PSBXVEZNb3ZlKG1fZGVsYXllZFJlbGVhc2VPYmplY3RzKTsKIAogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZHJvcCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQg
dG8gYXJiaXRyYXJ5IGNvZGUuCiAgICAgICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKG1fdm0pOwogCisjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgICAgICAgICAg
ICAgdm9pZCogY29udGV4dCA9IG9iamNfYXV0b3JlbGVhc2VQb29sUHVzaCgpOworI2VuZGlmCiAg
ICAgICAgICAgICAgICAgb2JqZWN0c1RvUmVsZWFzZS5jbGVhcigpOworI2lmIFVTRShGT1VOREFU
SU9OKQogICAgICAgICAgICAgICAgIG9iamNfYXV0b3JlbGVhc2VQb29sUG9wKGNvbnRleHQpOwor
I2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKaW5kZXggNWI1MWRhNWVlNmMuLmYyYTA3MTJiMzk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCkBAIC04OSw2ICs4OSwxMCBAQCBjbGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01h
cEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRlOwogCisjaWYgVVNFKEdMSUIpCitjbGFz
cyBKU0NHTGliV3JhcHBlck9iamVjdDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNz
IFNwZWN1bGF0aXZlSklUOwogY2xhc3MgV29ya2xpc3Q7CkBAIC0yNzIsNiArMjc2LDkgQEAgcHVi
bGljOgogI2lmIFVTRShGT1VOREFUSU9OKQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYpOwogI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAg
dm9pZCByZWxlYXNlU29vbihzdGQ6OnVuaXF1ZV9wdHI8SlNDR0xpYldyYXBwZXJPYmplY3Q+JiYp
OworI2VuZGlmCiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDTWFw
KFdlYWtHQ01hcEJhc2UqIHdlYWtHQ01hcCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1
bnJlZ2lzdGVyV2Vha0dDTWFwKFdlYWtHQ01hcEJhc2UqIHdlYWtHQ01hcCk7CkBAIC02NDIsNiAr
NjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJldGFpblB0cjxDRlR5cGVSZWY+PiBtX2Rl
bGF5ZWRSZWxlYXNlT2JqZWN0czsKICAgICB1bnNpZ25lZCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJz
aW9uQ291bnQ7CiAjZW5kaWYKKyNpZiBVU0UoR0xJQikKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEpTQ0dMaWJXcmFwcGVyT2JqZWN0Pj4gbV9kZWxheWVkUmVsZWFzZU9iamVjdHM7CisgICAg
dW5zaWduZWQgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50IHsgMCB9OworI2VuZGlmCiAK
ICAgICBIYXNoU2V0PFdlYWtHQ01hcEJhc2UqPiBtX3dlYWtHQ01hcHM7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAppbmRleCBlNTYxYzk2NTM3MC4uMGExZGIy
OWQ0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaApAQCAtMTY3
LDYgKzE2NywxMyBAQCBpbmxpbmUgdm9pZCBIZWFwOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8VD4m
JiBvYmplY3QpCiB9CiAjZW5kaWYKIAorI2lmIFVTRShHTElCKQoraW5saW5lIHZvaWQgSGVhcDo6
cmVsZWFzZVNvb24oc3RkOjp1bmlxdWVfcHRyPEpTQ0dMaWJXcmFwcGVyT2JqZWN0PiYmIG9iamVj
dCkKK3sKKyAgICBtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cy5hcHBlbmQoV1RGTW92ZShvYmplY3Qp
KTsKK30KKyNlbmRpZgorCiBpbmxpbmUgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRo
KCkKIHsKICAgICBBU1NFUlQoIW1heUJlR0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApp
bmRleCA3MzRmNmFlMzMxYi4uYmY1MGZkYTI0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE4NSw2ICsxODUsMTEgQEAKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNlbmRpZgogCisj
aWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyNpbmNsdWRlICJKU0NDYWxsYmFja0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1hcC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCkBAIC01NjcsNyArNTcyLDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICAgICAgaW5pdC5zZXQoSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5v
d25lci0+bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CiAjZW5kaWYKLSAg
ICAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIG1fZ2xpYkNhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3Ry
dWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNDQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CisgICAgbV9nbGliV3JhcHBlck9i
amVjdFN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxT
dHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVy
LCBpbml0Lm93bmVyLT5tX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKKyNl
bmRpZgogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICAKICAgICBtX29yaWdpbmFsQXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW1VuZGVjaWRlZFNoYXBlID4+IEluZGV4aW5nU2hhcGVT
aGlmdF0uc2V0KHZtLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFVuZGVjaWRlZCkpOwpAQCAtMTM4MCw2ICsx
Mzk0LDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIHRo
aXNPYmplY3QtPm1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdGhpc09iamVjdC0+bV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgdGhpc09iamVj
dC0+bV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0
aGlzT2JqZWN0LT5tX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwog
I2VuZGlmCiAgICAgdGhpc09iamVjdC0+bV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnZp
c2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXJyb3JTdHJ1
Y3R1cmUpOwpAQCAtMTYxMCw0ICsxNjI4LDExIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICBzZXRHbG9iYWxUaGlz
KHZtLCB0aGlzVmFsdWUpOwogfQogCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKK3ZvaWQg
SlNHbG9iYWxPYmplY3Q6OnNldFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+
JiYgbWFwKQoreworICAgIG1fd3JhcHBlck1hcCA9IFdURk1vdmUobWFwKTsKK30KKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCmluZGV4IGNlZmU2ZDU1YTcyLi44OWMxZWM5YzYzMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0xMTYsNiAr
MTE2LDEwIEBAIGNsYXNzIFZhcmlhYmxlRW52aXJvbm1lbnQ7CiBzdHJ1Y3QgQWN0aXZhdGlvblN0
YWNrTm9kZTsKIHN0cnVjdCBIYXNoVGFibGU7CiAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxF
RAorY2xhc3MgV3JhcHBlck1hcDsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBv
aW50PiBjbGFzcyBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDsKIAogI2Rl
ZmluZSBERUZJTkVfU1RBTkRBUkRfQlVJTFRJTihtYWNybywgdXBwZXJOYW1lLCBsb3dlck5hbWUp
IG1hY3JvKHVwcGVyTmFtZSwgbG93ZXJOYW1lLCBsb3dlck5hbWUsIEpTICMjIHVwcGVyTmFtZSwg
dXBwZXJOYW1lLCBvYmplY3QpCkBAIC0zMjQsNiArMzI4LDEwIEBAIHB1YmxpYzoKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0
dXJlPiBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlOwor
I2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZTsK
KyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliV3JhcHBl
ck9iamVjdFN0cnVjdHVyZTsKICNlbmRpZgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVj
dCwgU3RydWN0dXJlPiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxsZWVTdHJ1Y3R1cmU7CkBAIC02MzUsNiArNjQzLDEwIEBA
IHB1YmxpYzoKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFN0cnVjdHVyZSogb2JqY0Nh
bGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNDYWxsYmFja0Z1
bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogb2JqY1dyYXBwZXJP
YmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0
dXJlLmdldCh0aGlzKTsgfQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAg
ICBTdHJ1Y3R1cmUqIGdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KKyAgICBTdHJ1
Y3R1cmUqIGdsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9nbGli
V3JhcHBlck9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICNlbmRpZgogICAgIFN0cnVjdHVy
ZSogZGF0ZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0ZVN0cnVjdHVyZS5nZXQodGhp
cyk7IH0KICAgICBTdHJ1Y3R1cmUqIG51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CkBA
IC04ODgsNyArOTAwLDExIEBAIHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAo
KSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNldFdyYXBw
ZXJNYXAoSlNXcmFwcGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYK
LSAgICAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIFdyYXBwZXJNYXAqIHdyYXBw
ZXJNYXAoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+JiYpOworI2VuZGlmCisKICAg
ICBUaHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4gKm1f
dGhyZWFkTG9jYWxDYWNoZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC05MjEsNyArOTM3LDkg
QEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFJldGFpblB0cjxKU1dy
YXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19HTElCX0FQ
SV9FTkFCTEVECisgICAgc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsK
KyNlbmRpZgogICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2FsQ2FjaGU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJj
ZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDIwY2EwN2UxNTJhLi5lY2MwZWRmMmNjNyAx
MDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTE2Nyw2ICsxNjcsNyBAQCBhZGRfZGVmaW5pdGlvbnMo
LURCVUlMRElOR19HVEtfXz0xKQogYWRkX2RlZmluaXRpb25zKC1ER0VUVEVYVF9QQUNLQUdFPSJX
ZWJLaXQyR1RLLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCiBhZGRfZGVmaW5pdGlvbnMoLURE
QVRBX0RJUj0iJHtDTUFLRV9JTlNUQUxMX0RBVEFESVJ9IikKIGFkZF9kZWZpbml0aW9ucygtRFdF
QktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkc9IiR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCith
ZGRfZGVmaW5pdGlvbnMoLURKU0NfR0xJQl9BUElfRU5BQkxFRCkKIAogc2V0KEdUS19MSUJSQVJJ
RVMgJHtHVEszX0xJQlJBUklFU30pCiBzZXQoR1RLX0lOQ0xVREVfRElSUyAke0dUSzNfSU5DTFVE
RV9ESVJTfSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCA5YjQz
ODc5Yjg0MS4uMzU2ODZkMThjZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkKQEAgLTE1MSw2ICsxNTEsNyBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAg
KFsKICAgICAgICMgVGhlIEdUSysgYW5kIFdQRSBBUElzIHVzZSB1cHBlciBjYXNlLCB1bmRlcnNj
b3JlIHNlcGFyYXRlZCwgd29yZHMgaW4KICAgICAgICMgY2VydGFpbiB0eXBlcyBvZiBlbnVtcyAo
ZS5nLiBzaWduYWxzLCBwcm9wZXJ0aWVzKS4KKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywg
J0phdmFTY3JpcHRDb3JlJywgJ0FQSScsICdnbGliJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJLaXQnLCAnU2hhcmVkJywgJ0FQSScsICdnbGliJyksCiAgICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICdnbGliJyksCiAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScs
ICdndGsnKSwKQEAgLTMzNCw3ICszMzUsOCBAQCBfTkVWRVJfU0tJUFBFRF9GSUxFUyA9IF9ORVZF
Ul9TS0lQUEVEX0pTX0ZJTEVTICsgWwogX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwog
ICAgIG9zLnBhdGguam9pbignVG9vbHMnLCAnVGVzdFdlYktpdEFQSScsICdUZXN0cycsICdXZWJL
aXRHdGsnKSwKIAotICAgICMgV2ViS2l0Ki5oIGZpbGVzIGluIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9bZ3RrfHdwZV0sIGV4Y2VwdCB0aG9zZSBlbmRpbmcgaW4gUHJpdmF0ZS5oIGFyZSBB
UEkgaGVhZGVycywgd2hpY2ggZG8gbm90IGZvbGxvdyBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAg
ICMgV2ViS2l0Ki5oIGFuZCBKU0MqLmggZmlsZXMgaW4sIGV4Y2VwdCB0aG9zZSBlbmRpbmcgaW4g
UHJpdmF0ZS5oIGFyZSBBUEkgaGVhZGVycywgd2hpY2ggZG8gbm90IGZvbGxvdyBXZWJLaXQgY29k
aW5nIHN0eWxlLgorICAgIHJlLmNvbXBpbGUocmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNl
JywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQSScsICdnbGliJykgKyBvcy5wYXRoLnNlcCkgKyByJ0pT
Qyg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwKICAgICByZS5jb21waWxlKHJlLmVzY2FwZShvcy5w
YXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnKSAr
IG9zLnBhdGguc2VwKSArIHInV2ViS2l0KD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAogICAgIHJl
LmNvbXBpbGUocmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVBy
b2Nlc3MnLCAnQVBJJywgJ3dwZScpICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZh
dGVcLmgpLipcLmgkJyksCiAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViS2l0JywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywg
J2d0aycpICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVcLmgpLipcLmgkJyks
CkBAIC0zNDMsNiArMzQ1LDcgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogICAg
ICMgR09iamVjdCBET00gYmluZGluZ3MgY29waWVkIGZyb20gZ2VuZXJhdGVkIGNvZGUgdXNpbmcg
ZGlmZmVyZW50IGNvZGluZyBzdHlsZS4KICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJL
aXQnLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ0RPTScp
LAogCisgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywg
J2dsaWInLCAnanNjLmgnKSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAn
VUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnd2Via2l0Mi5oJyksCiAgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnV2ViS2l0JywgJ1VJUHJvY2VzcycsICdBUEknLCAnd3BlJywgJ3dlYmtpdC5o
JyksCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0JywgJ1dlYlByb2Nlc3MnLCAn
SW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyks
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA0YWVmNjk1M2NkMS4uZmVi
NDU0ZjcyZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21h
a2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTUsNiAr
MTUsNyBAQCBzZXQoRm9yd2FyZGluZ0hlYWRlcnNGb3JUZXN0V2ViS2l0QVBJX05BTUUgVGVzdFdl
YktpdEFQSS1mb3J3YXJkaW5nLWhlYWRlcnMpCiBpbmNsdWRlX2RpcmVjdG9yaWVzKAogICAgICR7
Rk9SV0FSRElOR19IRUFERVJTX0RJUn0KICAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0ph
dmFTY3JpcHRDb3JlCisgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29y
ZS9nbGliCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0Mvc291cAogICAgICR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2d0awogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L0FQSS9ndGsKQEAgLTExNSw2ICsxMTYsMTUgQEAgbGlzdChBUFBFTkQgVGVzdFdURl9TT1VSQ0VT
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dsaWIvV29ya1F1ZXVlR0xpYi5j
cHAKICkKIAorYWRkX2V4ZWN1dGFibGUoVGVzdEpTQyAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVz
KFRlc3RKU0MKKyAgICAke0dMSUJfTElCUkFSSUVTfQorICAgIEphdmFTY3JpcHRDb3JlCispCith
ZGRfdGVzdChUZXN0SlNDICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9
L0phdmFTY3JpcHRDb3JlL1Rlc3RKU0MpCitzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0SlNDIFBS
T1BFUlRJRVMgVElNRU9VVCA2MCkKK3NldF90YXJnZXRfcHJvcGVydGllcyhUZXN0SlNDIFBST1BF
UlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L0phdmFTY3JpcHRDb3JlKQorCiBpZiAoQ09NUElMRVJfSVNfR0NDX09S
X0NMQU5HKQogICAgIFdFQktJVF9BRERfVEFSR0VUX0NYWF9GTEFHUyhUZXN0V2ViS2l0IC1Xbm8t
c2lnbi1jb21wYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LVduby11bmRlZgpAQCAtMTIzLDQgKzEzMyw4IEBAIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xB
TkcpCiAgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJDb3JlIC1Xbm8tc2ln
bi1jb21wYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1X
bm8tdW5kZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVdu
by11bnVzZWQtcGFyYW1ldGVyKQorCisgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRl
c3RKU0MgLVduby1zaWduLWNvbXBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtV25vLXVuZGVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLVduby11bnVzZWQtcGFyYW1ldGVyKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTAwZmU1NDE0ZDcKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIv
VGVzdEpTQy5jcHAKQEAgLTAsMCArMSwxNjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8vIEluY2x1ZGUgSlNDQ29udGV4
dFByaXZhdGUuaCB0byBiZSBhYmxlIHRvIHJ1biBnYXJiYWdlIGNvbGxlY3RvciBmb3IgdGVzdGlu
Zy4KKyNkZWZpbmUgSlNDX0NPTVBJTEFUSU9OIDEKKyNpbmNsdWRlICJqc2MvSlNDQ29udGV4dFBy
aXZhdGUuaCIKKyN1bmRlZiBKU0NfQ09NUElMQVRJT04KKworI2luY2x1ZGUgPGpzYy9qc2MuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworY2xhc3MgTGVha0NoZWNrZXIgeworcHVi
bGljOgorICAgIExlYWtDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgfkxlYWtDaGVja2VyKCkK
KyAgICB7CisgICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBnX3ByaW50KCJMZWFrZWQgb2JqZWN0czoiKTsKKyAgICAg
ICAgZm9yIChhdXRvKiBvYmplY3QgOiBtX3dhdGNoZWRPYmplY3RzKQorICAgICAgICAgICAgZ19w
cmludCgiICVzKCVwKSIsIGdfdHlwZV9uYW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2Fz
dDxHVHlwZUluc3RhbmNlKj4ob2JqZWN0KSksIG9iamVjdCk7CisgICAgICAgIGdfcHJpbnQoIlxu
Iik7CisgICAgICAgIGdfYXNzZXJ0KG1fd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKTsKKyAgICB9
CisKKyAgICB2b2lkIHdhdGNoKHZvaWQqIG9iamVjdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0
KEdfSVNfT0JKRUNUKG9iamVjdCkpOworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmpl
Y3QpOworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChvYmplY3QpLCBbXShncG9p
bnRlciB1c2VyRGF0YSwgR09iamVjdCogb2JqZWN0KSB7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxMZWFrQ2hlY2tlcio+KHVzZXJEYXRhKS0+bV93YXRjaGVkT2JqZWN0cy5yZW1vdmUob2JqZWN0
KTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhhc2hTZXQ8dm9p
ZCo+IG1fd2F0Y2hlZE9iamVjdHM7Cit9OworCitjbGFzcyBFeGNlcHRpb25IYW5kbGVyIHsKK3B1
YmxpYzoKKyAgICBFeGNlcHRpb25IYW5kbGVyKEpTQ0NvbnRleHQqIGNvbnRleHQpCisgICAgICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgICAgICBqc2NfY29udGV4dF9wdXNoX2V4
Y2VwdGlvbl9oYW5kbGVyKG1fY29udGV4dCwgW10oSlNDQ29udGV4dCosIEpTQ0V4Y2VwdGlvbiog
ZXhjZXB0aW9uLCBncG9pbnRlcikgeworICAgICAgICAgICAgZ19lcnJvcigiVU5FWFBFQ1RFRCBF
WENFUFRJT046ICVzIiwganNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZShleGNlcHRpb24pKTsKKyAg
ICAgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgfQorCisgICAgfkV4Y2VwdGlvbkhhbmRs
ZXIoKQorICAgIHsKKyAgICAgICAgcG9wKCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEpTQ0V4
Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwgZ3BvaW50ZXIgdXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5
IGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIpCisgICAgeworICAgICAgICBqc2NfY29udGV4dF9w
dXNoX2V4Y2VwdGlvbl9oYW5kbGVyKG1fY29udGV4dCwgaGFuZGxlciwgdXNlckRhdGEsIGRlc3Ry
b3lGdW5jdGlvbik7CisgICAgfQorCisgICAgdm9pZCBwb3AoKQorICAgIHsKKyAgICAgICAganNj
X2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVyKG1fY29udGV4dCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEpTQ0NvbnRleHQqIG1fY29udGV4dDsKK307CisKKyNkZWZpbmUgZ19hc3NlcnRf
dGhyb3dfYmVnaW4oaGFuZGxlciwgZGlkVGhyb3cpIFwKKyAgICBkaWRUaHJvdyA9IGZhbHNlOyBc
CisgICAgaGFuZGxlci5wdXNoKFtdKEpTQ0NvbnRleHQqLCBKU0NFeGNlcHRpb24qLCBncG9pbnRl
ciB1c2VyRGF0YSkgeyBcCisgICAgICAgICpzdGF0aWNfY2FzdDxib29sKj4odXNlckRhdGEpID0g
dHJ1ZTsgXAorICAgIH0sICZkaWRUaHJvdywgbnVsbHB0cik7CisKKyNkZWZpbmUgZ19hc3NlcnRf
ZGlkX3Rocm93KGhhbmRsZXIsIGRpZFRocm93KSBcCisgICAgaGFuZGxlci5wb3AoKTsgXAorICAg
IGdfYXNzZXJ0KGRpZFRocm93KTsgXAorICAgIGRpZFRocm93ID0gZmFsc2U7CisKK2V4dGVybiAi
QyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0
UmVmKTsKKworc3RhdGljIHZvaWQganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KEpTQ0NvbnRleHQq
IGNvbnRleHQpCit7CisgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5n
KGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
SlNDQmFzaWMoKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAg
ICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25l
dygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhj
ZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAg
IGF1dG8qIGRlZmF1bHRWTSA9IGpzY19jb250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoY29udGV4
dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGRlZmF1bHRWTSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goZGVmYXVsdFZNKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiB2
bSA9IGFkb3B0R1JlZihqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaCh2bS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHZtLmdldCgpICE9IGRlZmF1bHRW
TSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0MiA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUodm0uZ2V0KCkpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0Mi5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIg
ZXhjZXB0aW9uSGFuZGxlcjIoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY19j
b250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoY29udGV4dDIuZ2V0KCkpID09IHZtLmdldCgpKTsK
KworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQzID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZShkZWZhdWx0Vk0pKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb250ZXh0My5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhj
ZXB0aW9uSGFuZGxlcjMoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY19jb250
ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoY29udGV4dDMuZ2V0KCkpID09IGpzY19jb250ZXh0X2dl
dF92aXJ0dWFsX21hY2hpbmUoY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHZhbHVlMSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0Lmdl
dCgpLCAyNSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlMS5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dCh2YWx1ZTEuZ2V0KCkpID09IGNvbnRleHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlMS5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlMS5n
ZXQoKSksID09LCAyNSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0Lmdl
dCgpLCAidmFsdWUxIiwgdmFsdWUxLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
InZhbHVlMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUxLmdldCgpKTsKKworICAgICAgICByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dDIuZ2V0KCksICJ2YWx1
ZTEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5nZXQoKSkgPT0gY29udGV4dDIuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQo
KSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dDMuZ2V0KCksICJ2YWx1ZTEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5n
ZXQoKSkgPT0gY29udGV4dDMuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
dW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0My5nZXQoKSwgInZhbHVlMSIsIHZhbHVlMS5nZXQoKSk7CisgICAgICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0My5nZXQoKSwgInZhbHVl
MSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0My5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSAhPSB2YWx1ZTEuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAy
NSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAg
ICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3
KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNl
cHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0Lmdl
dCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251
bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNCk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gcmVzdWx0MiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiMiArIDIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Mi5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQyLmdldCgpKSA9PSBjb250
ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHJlc3VsdDIuZ2V0
KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdDMgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIjMgKyAxIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdDMuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0
X2NvbnRleHQocmVzdWx0My5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KHJlc3VsdC5nZXQoKSA9PSByZXN1bHQzLmdldCgpKTsKKworICAgICAgICBhdXRvKiByZXN1
bHRQdHIgPSByZXN1bHQuZ2V0KCk7CisgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAg
IHJlc3VsdDIgPSBudWxscHRyOworICAgICAgICByZXN1bHQzID0gbnVsbHB0cjsKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0NCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiMiArIDIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
NC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQ0
LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X251bWJlcihyZXN1bHQ0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIocmVzdWx0NC5nZXQoKSksID09LCA0KTsKKyAgICAgICAgZ19hc3NlcnQocmVz
dWx0NC5nZXQoKSAhPSByZXN1bHRQdHIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0No
ZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0
LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRl
eHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiMiArIDIiKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVl
X2dldF9jb250ZXh0KHJlc3VsdC5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgIGpz
Y19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZm91ciIsIHJlc3VsdC5nZXQoKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb3VyIikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9jb250ZXh0
KHZhbHVlLmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNj
X3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQpOworICAgICAgICBnX2Fzc2VydChy
ZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmb3VyIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0LmdldCgp
ID09IHZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgp
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInR3byA9IDI7IGZvdXIgPSB0d28gKyB0d28i
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwg
PT0sIDQpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAidHdvIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9j
b250ZXh0KHZhbHVlLmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDIpOworCisgICAgICAgIHZh
bHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZm91
ciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gcmVzdWx0MiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZml2ZSA9IDQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Mi5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdDIuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdEpTQ1R5cGVzKCkKK3sKKyAgICBMZWFrQ2hlY2tlciBjaGVj
a2VyOworICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9uZXcoKSk7CisgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICBFeGNl
cHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250
ZXh0LmdldCgpLCAxMjUpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wZmxvYXQoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1ZS5nZXQoKSksID09LCAxMjUuKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDEy
NSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRS
VUUpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gdmFsdWVTdHJpbmcoanNjX3ZhbHVlX3RvX3N0cmlu
Zyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICIxMjUiKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImki
LCB2YWx1ZS5nZXQoKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiaSIpKTsKKyAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVl
LmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNv
bnRleHQuZ2V0KCksIDEyLjUpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfY21wZmxvYXQoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1ZS5nZXQoKSksID09LCAxMi41KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0s
IDEyKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0g
VFJVRSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxMi41
Iik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJkIiwgdmFsdWUu
Z2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgImQiKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
IGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oY29udGV4dC5nZXQoKSwgVFJVRSkpOworICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19i
b29sZWFuKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4o
dmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3Zh
bHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sICJ0cnVlIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksICJiMSIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiMSIpKTsKKyAgICBjaGVja2VyLndh
dGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdl
dCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYm9vbGVhbihjb250
ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAg
IHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiZmFsc2UiKTsKKyAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImIyIiwgdmFsdWUuZ2V0KCkpOwor
ICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQo
KSwgImIyIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19zdHJpbmcoY29udGV4dC5nZXQoKSwgIkhlbGxvIFdvcmxkIikpOworICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19z
dHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9f
c3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdl
dCgpLCA9PSwgIkhlbGxvIFdvcmxkIik7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xl
YW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJzMSIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzMSIpKTsKKyAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZh
bHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfc3RyaW5n
KGNvbnRleHQuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAg
dmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIiKTsKKyAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAg
anNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzMiIsIHZhbHVlLmdldCgpKTsK
KyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJzMiIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3Nl
cnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfc3RyaW5nKGNvbnRleHQuZ2V0KCksICIxMi41IikpOworICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19zdHJpbmco
dmFsdWUuZ2V0KCkpKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5n
KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9
PSwgIjEyLjUiKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQo
KSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX3ZhbHVlX3RvX2RvdWJsZSh2
YWx1ZS5nZXQoKSksID09LCAxMi41KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3Rv
X2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDEyKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgInMzIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMzIikpOworICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFs
dWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShj
b250ZXh0LmdldCgpLCBHX1RZUEVfTk9ORSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19hcnJheSh2YWx1ZS5nZXQoKSkpOworICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICB2
YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIiIpOworICAgIGpzY19jb250
ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYTEiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYTEi
KSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3Vs
dC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYXJyYXlMZW5n
dGggPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCks
ICJsZW5ndGgiKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwg
MCk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5
SXRlbS5nZXQoKSk7CisgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgo
dmFsdWUuZ2V0KCksIGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksIGFycmF5
SXRlbS5nZXQoKSk7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVj
dF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJsZW5ndGgiKSk7CisgICAgY2hlY2tlci53YXRj
aChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihh
cnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50
MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwgMSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNj
X3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1
ZVN0cmluZy5nZXQoKSwgPT0sICIxIik7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDUpKTsKKyAgICBjaGVja2VyLndhdGNoKGFy
cmF5SXRlbS5nZXQoKSk7CisgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5k
ZXgodmFsdWUuZ2V0KCksIGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksIGFy
cmF5SXRlbS5nZXQoKSk7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJsZW5ndGgiKSk7CisgICAgY2hlY2tlci53
YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJl
cihhcnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwgMik7CisgICAgdmFsdWVTdHJpbmcucmVzZXQo
anNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2
YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxLDUiKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMTApKTsKKyAgICBjaGVja2VyLndh
dGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlf
YXRfaW5kZXgodmFsdWUuZ2V0KCksIDMsIGFycmF5SXRlbS5nZXQoKSk7CisgICAgYXJyYXlMZW5n
dGggPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCks
ICJsZW5ndGgiKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwg
NCk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3Bl
cnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCAwKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0
ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlJdGVtLmdl
dCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUl0ZW0u
Z2V0KCkpLCA9PSwgMSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmpl
Y3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCAxKSk7CisgICAgY2hlY2tlci53
YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIo
YXJyYXlJdGVtLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQz
MihhcnJheUl0ZW0uZ2V0KCkpLCA9PSwgNSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCAyKSk7Cisg
ICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc191bmRlZmluZWQoYXJyYXlJdGVtLmdldCgpKSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCAz
KSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19udW1iZXIoYXJyYXlJdGVtLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50
KGpzY192YWx1ZV90b19pbnQzMihhcnJheUl0ZW0uZ2V0KCkpLCA9PSwgMTApOworICAgIGFycmF5
TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdl
dCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOwor
ICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9h
dF9pbmRleCh2YWx1ZS5nZXQoKSwganNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgp
KSArIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChhcnJheUl0ZW0uZ2V0KCkpKTsKKworICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IGFycmF5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYXJyYXkoY29udGV4
dC5nZXQoKSwgR19UWVBFX0lOVCwgMSwgR19UWVBFX1NUUklORywgInR3byIsIEdfVFlQRV9CT09M
RUFOLCBUUlVFLCBKU0NfVFlQRV9WQUxVRSwgdmFsdWUuZ2V0KCksIEdfVFlQRV9OT05FKSk7Cisg
ICAgY2hlY2tlci53YXRjaChhcnJheS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X2FycmF5KGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChh
cnJheS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKGFycmF5Lmdl
dCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFy
cmF5LmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19z
dHJpbmcoYXJyYXkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0
KCksID09LCAiMSx0d28sdHJ1ZSwxLDUsLDEwIik7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkoYXJyYXkuZ2V0KCksICJsZW5ndGgiKSk7
CisgICAgY2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX251bWJlcihhcnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwgNCk7CisgICAgYXJy
YXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4
KGFycmF5LmdldCgpLCAwKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlJdGVtLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUl0ZW0uZ2V0KCkpLCA9PSwg
MSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3Bl
cnR5X2F0X2luZGV4KGFycmF5LmdldCgpLCAxKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0
ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19zdHJpbmcoYXJyYXlJdGVtLmdl
dCgpKSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhhcnJheUl0
ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAi
dHdvIik7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3By
b3BlcnR5X2F0X2luZGV4KGFycmF5LmdldCgpLCAyKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJh
eUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKGFycmF5SXRl
bS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKGFycmF5SXRlbS5n
ZXQoKSkgPT0gVFJVRSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmpl
Y3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KGFycmF5LmdldCgpLCAzKSk7CisgICAgY2hlY2tlci53
YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0KGFycmF5SXRlbS5nZXQoKSA9PSB2
YWx1ZS5nZXQoKSk7CisKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5ID0gYWRvcHRHUmVm
KGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJlZikpOworICAgIGdf
cHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQu
Z2V0KCksIDEpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVf
bmV3X3N0cmluZyhjb250ZXh0LmdldCgpLCAidHdvIikpOworICAgIGdfcHRyX2FycmF5X2FkZChn
QXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfYm9vbGVhbihjb250ZXh0LmdldCgpLCBUUlVFKSk7
CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwgZ19vYmplY3RfcmVmKHZhbHVlLmdl
dCgpKSk7CisgICAgYXJyYXkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheV9mcm9tX2dh
cnJheShjb250ZXh0LmdldCgpLCBnQXJyYXkuZ2V0KCkpKTsKKyAgICBjaGVja2VyLndhdGNoKGFy
cmF5LmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYXJyYXkoYXJyYXkuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGFycmF5LmdldCgpKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXkuZ2V0KCkpID09IFRSVUUpOworICAg
IGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXkuZ2V0KCkpLCA9PSwgMCk7
CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhhcnJheS5nZXQoKSkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxLHR3byx0cnVl
LDEsNSwsMTAiKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0
X2dldF9wcm9wZXJ0eShhcnJheS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNo
KGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFy
cmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQz
MihhcnJheUxlbmd0aC5nZXQoKSksID09LCBnQXJyYXktPmxlbik7CisKKyAgICB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxs
cHRyKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX29iamVjdCh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90
b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNj
X3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJl
c2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiW29iamVjdCBPYmplY3RdIik7CisgICAganNjX2Nv
bnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJvIiwgdmFsdWUuZ2V0KCkpOworICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgIm8i
KSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3Vs
dC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfbmV3X3VuZGVmaW5lZChjb250ZXh0LmdldCgpKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1
ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZCh2YWx1ZS5nZXQo
KSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBG
QUxTRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQo
KSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZh
bHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwg
InVuZGVmaW5lZCIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
dSIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0
X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ1IikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAg
dmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udWxsKGNvbnRleHQuZ2V0KCkpKTsKKyAg
ICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
bnVsbCh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZh
bHVlLmdldCgpKSA9PSBGQUxTRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19p
bnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFs
dWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgIm51bGwiKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4
dC5nZXQoKSwgIm4iLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAibiIpKTsKKyAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgp
KTsKK30KKworc3RhdGljIGludCBmb28oaW50IG4pCit7CisgICAgcmV0dXJuIG4gKiAyOworfQor
CitzdGF0aWMgdm9pZCBjYWxsYmFjayhKU0NWYWx1ZSogZnVuY3Rpb24pCit7CisgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVu
Y3Rpb24sIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfaXNfdW5kZWZpbmVkKHZhbHVlLmdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvdWJs
ZUFuZFNldEluUmVzdWx0KGludCBuKQoreworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGpzY19jb250ZXh0X2dldF9jdXJyZW50KCks
IG4gKiAyKSk7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGpzY19jb250ZXh0X2dldF9jdXJy
ZW50KCksICJyZXN1bHQiLCB2YWx1ZS5nZXQoKSk7Cit9CisKK3N0YXRpYyBpbnQgc3VtRnVuY3Rp
b24oR1B0ckFycmF5KiBhcnJheSkKK3sKKyAgICBpbnQgcmV0dmFsID0gMDsKKworICAgIGdfcHRy
X2FycmF5X2ZvcmVhY2goYXJyYXksIFtdKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJEYXRh
KSB7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19WQUxVRShkYXRhKSk7CisgICAgICAgIEpTQ1Zh
bHVlKiBpdGVtID0gSlNDX1ZBTFVFKGRhdGEpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKGl0ZW0pKTsKKyAgICAgICAgKnN0YXRpY19jYXN0PGludCo+KHVzZXJEYXRhKSAr
PSBqc2NfdmFsdWVfdG9faW50MzIoaXRlbSk7CisgICAgfSwgJnJldHZhbCk7CisKKyAgICByZXR1
cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDRnVuY3Rpb24oKQoreworICAgIHsK
KyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1
bmN0aW9uID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwg
ImZvbyIsIEdfQ0FMTEJBQ0soZm9vKSwgR19UWVBFX0lOVCwgMSwgR19UWVBFX0lOVCkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb28iLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiZm9vKDIwMCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1
bHQuZ2V0KCkpLCA9PSwgNDAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBF
X0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQ
dHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhh
bmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZm9vID0gZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIDI7IH0iKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZm9vKDIwMCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9
PSwgNDAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX0lOVCwgMjAwLCBH
X1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0
aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBm
dW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCks
ICJjYWxsYmFjayIsIEdfQ0FMTEJBQ0soY2FsbGJhY2spLCBHX1RZUEVfTk9ORSwgMSwgSlNDX1RZ
UEVfVkFMVUUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiY2FsbGJhY2siLCBmdW5j
dGlvbi5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFyIHJlc3VsdCA9IDA7IGNh
bGxiYWNrKGZ1bmN0aW9uKG4peyByZXN1bHQgPSBuICogMjsgfSk7IHJlc3VsdCIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNj
X3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAgICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0
ID0gMCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJl
c3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAwKTsKKwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBkYmwgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19m
dW5jdGlvbihjb250ZXh0LmdldCgpLCAiZG91YmxlQW5kU2V0SW5SZXN1bHQiLCBHX0NBTExCQUNL
KGRvdWJsZUFuZFNldEluUmVzdWx0KSwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9JTlQpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChkYmwuZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQo
KSwgSlNDX1RZUEVfVkFMVUUsIGRibC5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0IikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19u
dW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7CisgICAgfQorCisgICAgeworICAgICAg
ICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNo
KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRs
ZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24g
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwKKyAgICAgICAg
ICAgICJzdW1GdW5jdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4iCisgICAgICAgICAgICAiICAg
IHZhciByZXN1bHQgPSAwO1xuIgorICAgICAgICAgICAgIiAgICBmb3IgKHZhciBpIGluIGFycmF5
KSB7IHJlc3VsdCArPSBhcnJheVtpXTsgfVxuIgorICAgICAgICAgICAgIiAgICByZXR1cm4gcmVz
dWx0O1xuIgorICAgICAgICAgICAgIn0iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rp
b24uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGZ1bmN0aW9u
LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYXJyYXkgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0LmdldCgpLCBHX1RZUEVfSU5ULCAyLCBHX1RZUEVf
SU5ULCA0LCBHX1RZUEVfSU5ULCA2LCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndh
dGNoKGFycmF5LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgSlNDX1RZUEVf
VkFMVUUsIGFycmF5LmdldCgpLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1
ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlLmdldCgpKSwgPT0sIDEyKTsKKworICAgICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5
ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJl
ZikpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3
X251bWJlcihjb250ZXh0LmdldCgpLCAxKSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChnQXJy
YXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDMpKTsKKyAgICAg
ICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIoY29u
dGV4dC5nZXQoKSwgNSkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9m
dW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfUFRSX0FSUkFZLCBnQXJyYXkuZ2V0
KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwg
OSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAg
ICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3
KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNl
cHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19mdW5j
dGlvbihjb250ZXh0LmdldCgpLCAic3VtRnVuY3Rpb24iLCBHX0NBTExCQUNLKHN1bUZ1bmN0aW9u
KSwgR19UWVBFX0lOVCwgMSwgR19UWVBFX1BUUl9BUlJBWSkpOworICAgICAgICBjaGVja2VyLndh
dGNoKGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksICJzdW1GdW5jdGlvbiIsIGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgInN1bUZ1bmN0aW9uKFsyLDQsNl0pIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1
ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlLmdldCgpKSwgPT0sIDEyKTsKKworICAgICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5
ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJl
ZikpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3
X251bWJlcihjb250ZXh0LmdldCgpLCAxKSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChnQXJy
YXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDMpKTsKKyAgICAg
ICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIoY29u
dGV4dC5nZXQoKSwgNSkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9m
dW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfUFRSX0FSUkFZLCBnQXJyYXkuZ2V0
KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwg
OSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDT2JqZWN0KCkKK3sKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28g
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImNsYXNzIEZv
byB7IGZvbyhuKSB7IHJldHVybiBuICogMjsgfSB9OyBmb28gPSBuZXcgRm9vOyIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfb2JqZWN0KGZvby5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgpLCAi
Zm9vIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndh
dGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIo
cmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50
MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7CisKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZh
bHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRU
aHJvdyk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9r
ZV9tZXRob2QoZm9vLmdldCgpLCAiYmFyIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgfQorCisgICAgewor
ICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+
IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlv
bkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gb2Jq
ZWN0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworCisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9u
ZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocHJv
cGVydHkuZ2V0KCkpOworCisgICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5
X2RhdGEob2JqZWN0LmdldCgpLCAidmFsIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZs
YWdzPigwKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgImYiLCBvYmplY3QuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmLnZhbDsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMjUp
OworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRfdGhy
b3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiJ3VzZSBzdHJpY3Qn
OyBmLnZhbCA9IDMyOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKwor
ICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZi5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndmFsJyk7IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xl
YW4odmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4o
dmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZGVsZXRlIGYudmFsOyIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDsiKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIHByb3BlcnR5ID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDUyKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90aHJv
d19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIGpzY192YWx1ZV9v
YmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEob2JqZWN0LmdldCgpLCAidmFsIiwgc3RhdGljX2Nh
c3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPigwKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworCisgICAgICAg
IHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCks
IDMyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOworICAgICAgICBq
c2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgInZhbDIi
LCBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9F
TlVNRVJBQkxFIHwgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKSwgcHJvcGVydHkuZ2V0KCkp
OworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZi52YWwyOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09
LCAzMik7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgIid1c2Ugc3RyaWN0JzsgZi52YWwyID0gNDU7IikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMjsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
bnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDUpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnByb3BlcnR5SXNFbnVt
ZXJhYmxlKCd2YWwyJyk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUp
OworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNv
bnRleHQuZ2V0KCksIDEyNSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgp
KTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmplY3Qu
Z2V0KCksICJ2YWwzIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFM
VUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFIHwgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKSwg
cHJvcGVydHkuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFs
dWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2
YWx1ZS5nZXQoKSksID09LCAxMjUpOworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDE1MCkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJ2YWwzIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQ
cm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKSwgcHJvcGVydHku
Z2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQo
KSksID09LCAxNTApOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJkZWxldGUgZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDM7IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVm
aW5lZCh2YWx1ZS5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9u
ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwgImZvbyIs
IEdfQ0FMTEJBQ0soZm9vKSwgR19UWVBFX0lOVCwgMSwgR19UWVBFX0lOVCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0
X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgImZvbyIsIHN0YXRpY19jYXN0PEpT
Q1ZhbHVlUHJvcGVydHlGbGFncz4oMCksIGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2Vf
bWV0aG9kKG9iamVjdC5nZXQoKSwgImZvbyIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAg
ICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChv
YmplY3QuZ2V0KCksICJmb28iLCBHX1RZUEVfUE9JTlRFUiwgIjIwMCIsIEdfVFlQRV9OT05FKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
ZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1
ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxMjUpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192
YWx1ZV9pc19vYmplY3QodmFsdWUuZ2V0KCkpKTsKKworICAgICAgICBib29sIGRpZFRocm93ID0g
ZmFsc2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRp
ZFRocm93KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZCh2YWx1ZS5nZXQoKSwgImZvbyIsIEdfVFlQRV9J
TlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRU
aHJvdyk7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBfRm9vIEZvbzsKK3N0cnVjdCBfRm9v
IHsKKyAgICBpbnQgZm9vOworICAgIEZvbyogc2libGluZzsKK307CisKK3N0YXRpYyBGb28qIGZv
b0NyZWF0ZSgpCit7CisgICAgcmV0dXJuIGdfbmV3MChGb28sIDEpOworfQorCitzdGF0aWMgRm9v
KiBmb29DcmVhdGVXaXRoRm9vKGludCB2YWx1ZSkKK3sKKyAgICBhdXRvKiBmID0gZm9vQ3JlYXRl
KCk7CisgICAgZi0+Zm9vID0gdmFsdWU7CisgICAgcmV0dXJuIGY7Cit9CisKK3N0YXRpYyB2b2lk
IGZvb0ZyZWUoRm9vKiBmb28pCit7CisgICAgZ19mcmVlKGZvbyk7Cit9CisKK3N0YXRpYyB2b2lk
IHNldEZvbyhGb28qIGZvbywgaW50IHZhbHVlKQoreworICAgIGZvby0+Zm9vID0gdmFsdWU7Cit9
CisKK3N0YXRpYyBpbnQgZ2V0Rm9vKEZvbyogZm9vKQoreworICAgIHJldHVybiBmb28tPmZvbzsK
K30KKworc3RhdGljIHZvaWQgc2V0U2libGluZyhGb28qIGZvbywgRm9vKiBzaWJsaW5nKQorewor
ICAgIGZvby0+c2libGluZyA9IHNpYmxpbmc7Cit9CisKK3N0YXRpYyBGb28qIGdldFNpYmxpbmco
Rm9vKiBmb28pCit7CisgICAgcmV0dXJuIGZvby0+c2libGluZzsKK30KKworc3RhdGljIHZvaWQg
bXVsdGlwbHlGb28oRm9vKiBmb28sIGludCBtdWx0aXBsaWVyKQoreworICAgIGZvby0+Zm9vICo9
IG11bHRpcGxpZXI7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgYmF6OworfSBCYXo7
CisKK3N0YXRpYyBCYXoqIGJhekNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGdfbmV3MChCYXosIDEp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDQ2xhc3MoKQoreworICAgIHsKKyAgICAgICAgTGVh
a0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250
ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNv
bnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0
X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
anNjQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9wYXJlbnQoanNjQ2xh
c3MpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxs
cHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9O
RSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29i
amVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19p
bnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY0NsYXNzKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiZiBpbnN0YW5jZW9mIEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworCisgICAgICAgIGpzY19jbGFzc19hZGRfbWV0aG9kKGpzY0NsYXNzLCAiZ2V0Rm9vIiwgR19D
QUxMQkFDSyhnZXRGb28pLCBHX1RZUEVfSU5ULCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tl
X21ldGhvZChmb28uZ2V0KCksICJnZXRGb28iLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251
bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3Rv
X2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IHZhbHVlMiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
Zi5nZXRGb28oKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZTIuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydCh2YWx1ZS5nZXQoKSA9PSB2YWx1ZTIuZ2V0KCkpOworCisgICAgICAgIGpz
Y19jbGFzc19hZGRfbWV0aG9kKGpzY0NsYXNzLCAic2V0Rm9vIiwgR19DQUxMQkFDSyhzZXRGb28p
LCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgpLCAic2V0Rm9vIiwgR19U
WVBFX0lOVCwgMjUsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYuZ2V0Rm9vKCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFs
dWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5zZXRGb28oNDUpIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChmb28uZ2V0KCksICJnZXRGb28iLCBHX1RZUEVfTk9O
RSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQ1KTsKKworICAgICAg
ICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCAiQ3JlYXRlV2l0aEZvbyIsIEdf
Q0FMTEJBQ0soZm9vQ3JlYXRlV2l0aEZvbyksIEdfVFlQRV9QT0lOVEVSLCAxLCBHX1RZUEVfSU5U
KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vMiA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIgPSBuZXcgRm9vLkNyZWF0ZVdpdGhGb28oNDIp
OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28yLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX29iamVjdChmb28yLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vMi5nZXQoKSwganNjQ2xhc3MpKTsKKyAg
ICAgICAgZ19hc3NlcnQoZm9vLmdldCgpICE9IGZvbzIuZ2V0KCkpOworICAgICAgICByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyIGluc3Rh
bmNlb2YgRm9vOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAg
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
ZjIgaW5zdGFuY2VvZiBGb28uQ3JlYXRlV2l0aEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4o
cmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVydHkoanNjQ2xhc3Ms
ICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEZvbyksIEdfQ0FMTEJBQ0soc2V0Rm9v
KSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmMi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9
PSwgNDIpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYyLmZvbyA9IDUyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJmMi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFs
dWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgNTIpOworCisgICAgICAgIEpTQ0NsYXNzKiBvdGhlckNsYXNzID0ganNjX2Nv
bnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkJheiIsIG51bGxwdHIsIGdfZnJl
ZSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob3RoZXJDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0
KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChvdGhlckNsYXNzKSk7CisKKyAgICAgICAganNjX2NsYXNz
X2FkZF9jb25zdHJ1Y3RvcihvdGhlckNsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGJhekNyZWF0
ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7CisKKyAgICAgICAgZ19hc3NlcnQo
IWpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBvdGhlckNsYXNzKSk7
CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvbzIu
Z2V0KCksIG90aGVyQ2xhc3MpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXogPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImJheiA9IG5ldyBC
YXooKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goYmF6LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChiYXouZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihiYXouZ2V0KCksIG90aGVyQ2xhc3MpKTsK
KyAgICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6Lmdl
dCgpLCBqc2NDbGFzcykpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hl
Y2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkp
OworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2Ns
YXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0
cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOwor
CisgICAgICAgIGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdf
Q0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAg
ICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgInNpYmxpbmciLCBHX1RZUEVf
UE9JTlRFUiwgR19DQUxMQkFDSyhnZXRTaWJsaW5nKSwgR19DQUxMQkFDSyhzZXRTaWJsaW5nKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMSA9IG5ldyBGb28oKTsgZjIgPSBuZXcgRm9v
KCk7IGYyLnNpYmxpbmcgPSBmMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGYxID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZjEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goZjEuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGYxLmdl
dCgpKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGYyID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZjIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goZjIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGYyLmdl
dCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyLnNpYmxpbmciKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh2YWx1ZS5nZXQo
KSA9PSBmMS5nZXQoKSk7CisKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHko
ZjEuZ2V0KCksICJzaWJsaW5nIiwgZjIuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEuc2libGluZyIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHZhbHVl
LmdldCgpID09IGYyLmdldCgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2Vy
IGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQo
KSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rl
cl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNz
KTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRy
LCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7
CisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVydHkoanNjQ2xhc3MsICJmb28iLCBHX1RZUEVf
SU5ULCBHX0NBTExCQUNLKGdldEZvbyksIEdfQ0FMTEJBQ0soc2V0Rm9vKSk7CisKKyAgICAgICAg
Rm9vKiBmID0gZm9vQ3JlYXRlV2l0aEZvbygyNSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IGZvbyA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0LmdldCgpLCBmLCBq
c2NDbGFzcykpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NDbGFzcykpOwor
CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIsIGZvby5n
ZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEZvbzsiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIHNldEZv
byhmLCA0Mik7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQu
Z2V0KCkpLCA9PSwgNDIpOworCisgICAgICAgIEpTQ0NsYXNzKiBiYXpDbGFzcyA9IGpzY19jb250
ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJCYXoiLCBudWxscHRyLCBnX2ZyZWUp
OworICAgICAgICBjaGVja2VyLndhdGNoKGJhekNsYXNzKTsKKworICAgICAgICBqc2NfY2xhc3Nf
YWRkX2NvbnN0cnVjdG9yKGJhekNsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGJhekNyZWF0ZSks
IEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7CisKKyAgICAgICAgQmF6KiBieiA9IGJh
ekNyZWF0ZSgpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXogPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgYnosIGJhekNsYXNzKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2goYmF6LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X29iamVjdChiYXouZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9p
c19pbnN0YW5jZV9vZihiYXouZ2V0KCksIGJhekNsYXNzKSk7CisgICAgICAgIGdfYXNzZXJ0KCFq
c2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGJhei5nZXQoKSwganNjQ2xhc3MpKTsKKyAg
ICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgp
LCBiYXpDbGFzcykpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0Lmdl
dCgpLCAiYnoiLCBiYXouZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImJ6IGluc3RhbmNlb2YgQmF6OyIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJieiBpbnN0YW5jZW9mIEZv
bzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0KCFqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgaW5z
dGFuY2VvZiBCYXo7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydCghanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAg
ICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoYmF6LmdldCgpLCAiZm9vIiwgZm9v
LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJiei5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IGZvby5nZXQoKSk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVm
UHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25I
YW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xh
c3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwg
IkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisKKyAgICAgICAganNjX2NsYXNz
X2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUp
LCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAgICAgICBqc2NfY2xhc3NfYWRk
X3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28p
LCBHX0NBTExCQUNLKHNldEZvbykpOworCisgICAgICAgIEZvbyogZiA9IGZvb0NyZWF0ZVdpdGhG
b28oMjUpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgZiwganNjQ2xhc3MpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2Jq
ZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2lu
c3RhbmNlX29mKGZvby5nZXQoKSwganNjQ2xhc3MpKTsKKworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYxIiwgZm9vLmdldCgpKTsKKyAgICAgICAganNjX2Nv
bnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmMiIsIGZvby5nZXQoKSk7CisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiZjEgPT09IGYyOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0
LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcHJvcGVydHkgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgNTApKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0
X3Byb3BlcnR5KGZvby5nZXQoKSwgIm4iLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEubiIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA1MCk7CisgICAgfQor
CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpT
Q0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVy
IGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpz
Y0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIs
IG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xh
c3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIGpzY19jbGFzc19hZGRfY29uc3Ry
dWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBFX1BP
SU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShq
c2NDbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFD
SyhzZXRGb28pKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2Jq
ZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwganNjQ2xhc3MpKTsKKworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250
ZXh0LmdldCgpLCAxMjUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGZvby5nZXQoKSwgImZvbyIsIHZh
bHVlLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuX19sb29rdXBHZXR0ZXJf
XygnZm9vJykuY2FsbChmKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydCh2YWx1ZS5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworCisgICAg
ICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4o
ZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuX19sb29rdXBHZXR0ZXJfXygn
Zm9vJykuY2FsbCh7fSkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdS
ZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlv
bkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBKU0ND
bGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgp
LCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZm9vRnJl
ZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNzKTsKKyAgICAgICAgZ19hc3NlcnQo
IWpzY19jbGFzc19nZXRfcGFyZW50KGpzY0NsYXNzKSk7CisKKyAgICAgICAgYm9vbCBkaWRUaHJv
dyA9IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVy
LCBkaWRUaHJvdyk7CisgICAgICAgIGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3Ms
IG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9O
T05FKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
dW5kZWZpbmVkKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0
aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAg
IEZvbyBwYXJlbnQ7CisgICAgaW50IGJhcjsKK30gQmFyOworCitzdGF0aWMgQmFyKiBiYXJDcmVh
dGUoKQoreworICAgIHJldHVybiBnX25ldzAoQmFyLCAxKTsKK30KKworc3RhdGljIHZvaWQgYmFy
RnJlZShCYXIqIGJhcikKK3sKKyAgICBnX2ZyZWUoYmFyKTsKK30KKworc3RhdGljIHZvaWQgc2V0
QmFyKEJhciogYmFyLCBpbnQgdmFsdWUpCit7CisgICAgYmFyLT5iYXIgPSB2YWx1ZTsKK30KKwor
c3RhdGljIGludCBnZXRCYXIoQmFyKiBiYXIpCit7CisgICAgcmV0dXJuIGJhci0+YmFyOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0SlNDUHJvdG90eXBlcygpCit7CisgICAgeworICAgICAgICBMZWFr
Q2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29u
dGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGZvb0NsYXNzID0ganNjX2NvbnRleHRf
cmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChm
b29DbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChmb29DbGFz
cykpOworICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGZvb0NsYXNzLCBudWxscHRy
LCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7
CisgICAgICAgIGpzY19jbGFzc19hZGRfbWV0aG9kKGZvb0NsYXNzLCAibXVsdGlwbHkiLCBHX0NB
TExCQUNLKG11bHRpcGx5Rm9vKSwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9JTlQpOworICAgICAg
ICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGZvb0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19D
QUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbykpOworCisgICAgICAgIEpTQ0NsYXNz
KiBiYXJDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJC
YXIiLCBmb29DbGFzcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oYmFyRnJlZSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGJhckNsYXNzKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X2NsYXNzX2dldF9wYXJlbnQoYmFyQ2xhc3MpID09IGZvb0NsYXNzKTsKKyAgICAgICAganNjX2Ns
YXNzX2FkZF9jb25zdHJ1Y3RvcihiYXJDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXJDcmVh
dGUpLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAgICAgICBqc2NfY2xhc3Nf
YWRkX3Byb3BlcnR5KGJhckNsYXNzLCAiYmFyIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRC
YXIpLCBHX0NBTExCQUNLKHNldEJhcikpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9
IG5ldyBGb28oKTsgYiA9IG5ldyBCYXIoKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0LmdldCgpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImYuX19wcm90b19fID09IEZvby5wcm90b3R5cGUiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIuX19wcm90b19fID09IEJh
ci5wcm90b3R5cGUiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImIuX19wcm90b19fLl9fcHJvdG9fXyA9PSBGb28ucHJvdG90eXBlIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19i
b29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9v
bGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmpl
Y3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBmb29DbGFzcykpOworICAgICAgICBnX2Fzc2Vy
dCghanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGJhckNsYXNzKSk7
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZiBpbnN0YW5jZW9mIEZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0Lmdl
dCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEJhciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihy
ZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV90b19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGJhciA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImIiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goYmFyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29i
amVjdChiYXIuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19p
bnN0YW5jZV9vZihiYXIuZ2V0KCksIGJhckNsYXNzKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmFyLmdldCgpLCBmb29DbGFzcykpOworCisgICAg
ICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiYiBpbnN0YW5jZW9mIEJhciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiYiBpbnN0YW5jZW9mIEZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0Lmdl
dCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJiLmJhciA9IDI1OyBiLmZvbyA9IDQyOyIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZh
bHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiLmJh
ciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAyNSk7CisgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJi
LmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA0Mik7CisKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJiLm11bHRpcGx5KDIpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJiLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09
LCA4NCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjcmVhdGVFcnJvcigpCit7CisgICAganNj
X2NvbnRleHRfdGhyb3coanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSwgIkFQSSBleGNlcHRpb24i
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ0V4Y2VwdGlvbnMoKQoreworICAgIHsKKyAgICAg
ICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250
ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNl
cHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9vIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIC8vIEJ5IGRl
ZmF1bHQgZXhjZXB0aW9ucyBhcmUgbm90IGNhdWdodC4KKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgYXV0byogZXhjZXB0aW9u
ID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChleGNlcHRpb24pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRf
bWVzc2FnZShleGNlcHRpb24pLCA9PSwgIkNhbid0IGZpbmQgdmFyaWFibGU6IGZvbyIpOworICAg
ICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVyKGV4Y2Vw
dGlvbiksID09LCAxKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19leGNlcHRpb25fZ2V0X3NvdXJj
ZV91cmkoZXhjZXB0aW9uKSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBj
aGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydCghanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0Lmdl
dCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gMjU7XG5mb287IikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgYXV0byogZXhjZXB0
aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChleGNlcHRpb24pOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19leGNlcHRpb25f
Z2V0X2xpbmVfbnVtYmVyKGV4Y2VwdGlvbiksID09LCAyKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29u
dGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY29udGV4dF9nZXRfZXhj
ZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3VyY2VfdXJpKGNvbnRl
eHQuZ2V0KCksICJmb28iLCAiZmlsZTovLy9mb28vc2NyaXB0LmpzIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgYXV0byogZXhjZXB0aW9uID0ganNj
X2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
SlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChleGNl
cHRpb24pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRfc291cmNl
X3VyaShleGNlcHRpb24pLCA9PSwgImZpbGU6Ly8vZm9vL3NjcmlwdC5qcyIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19jb250
ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4
dC5nZXQoKSwgImNyZWF0ZUVycm9yIiwgR19DQUxMQkFDSyhjcmVhdGVFcnJvciksIEdfVFlQRV9O
T05FLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdl
dCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJjcmVh
dGVFcnJvciIsIGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInZh
ciByZXN1bHQ7IHRyeSB7IGNyZWF0ZUVycm9yKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0Nh
dWdodCBleGNlcHRpb24nOyB9IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19zdHJpbmcocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gcmVzdWx0U3RyaW5nKGpzY192YWx1ZV90b19zdHJp
bmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcu
Z2V0KCksID09LCAiQ2F1Z2h0IGV4Y2VwdGlvbiIpOworICAgICAgICBnX2Fzc2VydCghanNjX2Nv
bnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ2YXIgcmVzdWx0
OyBjcmVhdGVFcnJvcigpOyByZXN1bHQgPSAnTm8gZXhjZXB0aW9uJzsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgYXV0byogZXhjZXB0aW9uID0ganNj
X2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
SlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChleGNl
cHRpb24pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRfbWVzc2Fn
ZShleGNlcHRpb24pLCA9PSwgIkFQSSBleGNlcHRpb24iKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
dWludChqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlcihleGNlcHRpb24pLCA9PSwgMSk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpKGV4Y2VwdGlvbikp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAg
R1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAg
IHN0cnVjdCBUZXN0IHsKKyAgICAgICAgICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7CisgICAgICAg
ICAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uOworICAgICAgICAgICAgYm9vbCB3
YXNEZWxldGVkOworICAgICAgICB9OworCisgICAgICAgIFRlc3QgdGVzdCA9IHsgY29udGV4dC5n
ZXQoKSwgbnVsbHB0ciwgZmFsc2UgfTsKKyAgICAgICAganNjX2NvbnRleHRfcHVzaF9leGNlcHRp
b25faGFuZGxlcihjb250ZXh0LmdldCgpLCBbXShKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNl
cHRpb24qIGV4Y2VwdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8q
IHRlc3QgPSBzdGF0aWNfY2FzdDxUZXN0Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZ19hc3Nl
cnQoY29udGV4dCA9PSB0ZXN0LT5jb250ZXh0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF0ZXN0
LT5leGNlcHRpb24pOworICAgICAgICAgICAgZ19hc3NlcnQoIXRlc3QtPndhc0RlbGV0ZWQpOwor
ICAgICAgICAgICAgdGVzdC0+ZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9LCAmdGVz
dCwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFRlc3Qq
Pih1c2VyRGF0YSktPndhc0RlbGV0ZWQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworICAgICAgICAvLyBFeGNlcHRpb24gd2FzIGNhdWdodCBieSB0aGUgdXNlciBoYW5kbGVy
LgorICAgICAgICBnX2Fzc2VydCghanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0Lmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19FWENFUFRJT04odGVzdC5leGNlcHRpb24u
Z2V0KCkpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh0ZXN0LmV4Y2VwdGlvbi5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cihqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdlKHRlc3QuZXhj
ZXB0aW9uLmdldCgpKSwgPT0sICJDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb28iKTsKKyAgICAgICAg
Z19hc3NlcnRfY21wdWludChqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlcih0ZXN0LmV4Y2Vw
dGlvbi5nZXQoKSksID09LCAxKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19leGNlcHRpb25fZ2V0
X3NvdXJjZV91cmkodGVzdC5leGNlcHRpb24uZ2V0KCkpKTsKKworICAgICAgICBnX2Fzc2VydCgh
dGVzdC53YXNEZWxldGVkKTsKKyAgICAgICAganNjX2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5k
bGVyKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh0ZXN0Lndhc0RlbGV0ZWQpOwor
CisgICAgICAgIHRlc3QuZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgdGVzdC53YXNEZWxl
dGVkID0gZmFsc2U7CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIo
Y29udGV4dC5nZXQoKSwgW10oSlNDQ29udGV4dCogY29udGV4dCwgSlNDRXhjZXB0aW9uKiBleGNl
cHRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvKiB0ZXN0ID0gc3Rh
dGljX2Nhc3Q8VGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGNvbnRleHQg
PT0gdGVzdC0+Y29udGV4dCk7CisgICAgICAgICAgICBnX2Fzc2VydCghdGVzdC0+ZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT53YXNEZWxldGVkKTsKKyAgICAgICAgICAg
IHRlc3QtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgICAgICB9LCAmdGVzdCwgW10o
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFRlc3QqPih1c2Vy
RGF0YSktPndhc0RlbGV0ZWQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvbyIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICAvLyBFeGNlcHRp
b24gd2FzIGhhbmRsZWQgYnkgdGhlIHVzZXIgaGFuZGxlciwgYnV0IG5vdCBjYXVnaHQuCisgICAg
ICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnQoZXhjZXB0
aW9uID09IHRlc3QuZXhjZXB0aW9uLmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydCghdGVzdC53
YXNEZWxldGVkKTsKKyAgICAgICAganNjX2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVyKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh0ZXN0Lndhc0RlbGV0ZWQpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdEpTQ1Byb21pc2VzKCkKK3sKKyAgICBMZWFrQ2hlY2tlciBj
aGVja2VyOworICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9uZXcoKSk7CisgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICBF
eGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiBwcm9taXNlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1
ZShjb250ZXh0LmdldCgpLCAiUHJvbWlzZSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHByb21pc2Uu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19mdW5jdGlvbihwcm9taXNlLmdldCgp
KSk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInR5cGVvZiBQcm9taXNlIikpOworICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5n
KHJlc3VsdC5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcmVzdWx0U3RyaW5nKGpzY192
YWx1ZV90b19zdHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJlc3Vs
dFN0cmluZy5nZXQoKSwgPT0sICJmdW5jdGlvbiIpOworCisgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQgPSAwOyBQcm9taXNl
LnJlc29sdmUoNDIpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7IHJlc3VsdCA9IHZhbHVlOyB9KTsi
KSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJyZXN1bHQiKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2Nt
cGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDIpOworfQorCitzdGF0
aWMgYm9vbCBzX2Zvb1dhc0ZyZWVkOworCitzdGF0aWMgdm9pZCBmb29GcmVlQW5kTG9nKEZvbyog
Zm9vKQoreworICAgIGZvb0ZyZWUoZm9vKTsKKyAgICBzX2Zvb1dhc0ZyZWVkID0gdHJ1ZTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEpTQ0dhcmJhZ2VDb2xsZWN0b3IoKQoreworICAgIHsKKyAgICAg
ICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250
ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5k
bGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0LmdldCgpLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIo
Y29udGV4dC5nZXQoKSwgMjUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGZvby5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGZvby5nZXQoKSksID09LCAyNSk7
CisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KG9iamVjdC5nZXQoKSwgImZv
byIsIGZvby5nZXQoKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KG9iamVjdC5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworCisgICAgICAgIG9iamVjdCA9IG51bGxw
dHI7CisgICAgICAgIGZvbyA9IG51bGxwdHI7CisgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7Cisg
ICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
b2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
ZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICBmb28gPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZm9vIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc19udW1iZXIoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIoZm9vLmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICByZXN1bHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSB1bmRlZmlu
ZWQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBq
c2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsKKyAgICAgICAg
cmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJm
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KG9iamVjdC5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworICAgICAgICBmb28gPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZm9vIikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19udW1iZXIoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIoZm9vLmdldCgpKSwgPT0sIDI1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExl
YWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29u
dGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihj
b250ZXh0LmdldCgpKTsKKworICAgICAgICBzX2Zvb1dhc0ZyZWVkID0gZmFsc2U7CisKKyAgICAg
ICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4
dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGZvb0ZyZWVBbmRMb2cpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAg
ICAgIGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAg
IGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0so
Zm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChv
YmplY3QuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVj
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNl
X29mKG9iamVjdC5nZXQoKSwganNjQ2xhc3MpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQob2JqZWN0LmdldCgpID09IHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gdW5kZWZp
bmVkIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAg
Z19hc3NlcnQoIXNfZm9vV2FzRnJlZWQpOworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxl
Y3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFzX2Zvb1dhc0ZyZWVkKTsKKwor
ICAgICAgICBvYmplY3QgPSBudWxscHRyOworICAgICAgICBnX2Fzc2VydCghc19mb29XYXNGcmVl
ZCk7CisgICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoc19mb29XYXNGcmVlZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0
ZXN0c0pTQ1ZpcnR1YWxNYWNoaW5lKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgp
KTsKKworICAgICAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJKU0NWaXJ0dWFsTWFj
aGluZVRlc3QiLCBbJl0geworICAgICAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2Nv
bnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWVBbmRMb2cpKTsKKyAgICAgICAgICAg
IGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAgICAgICAgZ19hc3NlcnQoIWpzY19jbGFz
c19nZXRfcGFyZW50KGpzY0NsYXNzKSk7CisKKyAgICAgICAgICAgIGpzY19jbGFzc19hZGRfY29u
c3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBF
X1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
ZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgICAgICBjaGVja2VyLndhdGNoKG9iamVjdC5nZXQo
KSk7CisgICAgICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQob2JqZWN0Lmdl
dCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19vYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
b2JqZWN0X2lzX2luc3RhbmNlX29mKG9iamVjdC5nZXQoKSwganNjQ2xhc3MpKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgdGhyZWFk
LT5kZXRhY2goKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKG9iamVjdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19vYmplY3Qob2JqZWN0LmdldCgpKSk7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xs
ZWN0KGNvbnRleHQuZ2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgVmVjdG9yPFJlZjxU
aHJlYWQ+LCA1PiB0aHJlYWRzOworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDU7ICsraSkgeworICAgICAgICAgICAgdGhyZWFkcy5hcHBl
bmQoVGhyZWFkOjpjcmVhdGUoIkpTQ1ZpcnR1YWxNYWNoaW5lVGVzdCIsIFsmb2tdIHsKKyAgICAg
ICAgICAgICAgICBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bSA9IGFkb3B0R1JlZihqc2Nf
dmlydHVhbF9tYWNoaW5lX25ldygpKTsKKyAgICAgICAgICAgICAgICBHUmVmUHRyPEpTQ0NvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNo
aW5lKHZtLmdldCgpKSk7CisgICAgICAgICAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICJ2YXIgYXJyYXkgPSBbe31dO1xuIgorICAgICAgICAgICAgICAgICAgICAi
Zm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgKytpKSB7XG4iCisgICAgICAgICAgICAgICAgICAgICIg
ICAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCAqIDIpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAiICAgIGZvciAodmFyIGogPSAwOyBqIDwgbmV3QXJyYXkubGVuZ3RoOyAr
K2opXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgIG5ld0FycmF5W2pdID0ge3BhcmVu
dDogYXJyYXlbaiAvIDJdfTtcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICBhcnJheSA9IG5l
d0FycmF5O1xuIgorICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICkp
OworICAgICAgICAgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQu
Z2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBleGNl
cHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGdfbWVzc2FnZSgiVW5jYXVnaHQgZXhjZXB0aW9uOiAlcyIsIGpzY19l
eGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0Lmdl
dCgpLCAiYXJyYXkiKSk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9j
b250ZXh0KHZhbHVlLmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWpzY192YWx1ZV9pc19vYmplY3QodmFsdWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGdfbWVzc2FnZSgiRGlkIG5vdCBmaW5kIFwiYXJyYXlcIiB2YXJpYWJsZSIpOworICAgICAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAg
ICB9KSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHRocmVhZCA6IHRocmVhZHMp
IHsKKyAgICAgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgICAg
IHRocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydChvayk7Cisg
ICAgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBudWxscHRyKTsKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pz
Yy9iYXNpYyIsIHRlc3RKU0NCYXNpYyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3R5cGVz
IiwgdGVzdEpTQ1R5cGVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZnVuY3Rpb24iLCB0
ZXN0SlNDRnVuY3Rpb24pOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9vYmplY3QiLCB0ZXN0
SlNDT2JqZWN0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvY2xhc3MiLCB0ZXN0SlNDQ2xh
c3MpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm90b3R5cGVzIiwgdGVzdEpTQ1Byb3Rv
dHlwZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9leGNlcHRpb25zIiwgdGVzdEpTQ0V4
Y2VwdGlvbnMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm9taXNlcyIsIHRlc3RKU0NQ
cm9taXNlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2dhcmJhZ2UtY29sbGVjdG9yIiwg
dGVzdEpTQ0dhcmJhZ2VDb2xsZWN0b3IpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy92bSIs
IHRlc3RzSlNDVmlydHVhbE1hY2hpbmUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335292</attachid>
            <date>2018-03-08 05:30:32 -0800</date>
            <delta_ts>2018-03-16 04:29:19 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>jsc-glib-api.diff</filename>
            <type>text/plain</type>
            <size>218765</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCmluZGV4
IDM5NThjZjQ5MjVmLi5hYWU1ZDQxOGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5oPgogCi0jaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRCB8fCBkZWZpbmVk
KEpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKQEAgLTU1LDYg
KzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBKU0Nf
T0JKQ19BUElfRU5BQkxFRAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVEIHx8IGRlZmlu
ZWQoSlNDX0dMSUJfQVBJX0VOQUJMRUQpCiAKICNlbmRpZiAvLyBKU0FQSVdyYXBwZXJPYmplY3Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBl
ck9iamVjdEdMaWIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3Jh
cHBlck9iamVjdEdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yY2QzYmVhY2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisKKyNpbmNsdWRl
ICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKK307CisKK3N0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcj4ganNXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI7CisgICAgcmV0dXJuICZq
c1dyYXBwZXJPYmplY3RIYW5kbGVPd25lci5nZXQoKTsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqKQoreworICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXND
ZWxsKCkpOworICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlck9iamVjdCktPnJlbGVhc2VT
b29uKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0PihzdGF0aWNfY2Fz
dDxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0Kj4od3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKSkpOworICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBsOjphc1dl
YWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKK30KKworYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIC8vIFdlIHVz
ZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2
ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKKyAgICAvLyB0aGUgc2FtZSB3cmFwcGVkIG9i
amVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBv
YmplY3RzIGFsaXZlLgorICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpTQzo6SGVhcDo6aXNNYXJrZWQod3Jh
cHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRh
aW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworfQorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OworCit0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKwordGVtcGxh
dGUgPD4KK1N0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKK30KKworSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnNldFdyYXBwZWRPYmplY3Qodm9pZCogd3JhcHBlZE9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW1fd3JhcHBlZE9iamVjdCk7CisgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVj
dDsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGMxMGFmMjVjMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgIkFQSUNhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJBUElD
YXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Rh
dGljIEpTVmFsdWVSZWYgY2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4o
dG9KUyhmdW5jdGlvbikpLT5jYWxsKGNhbGxlckNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpTT2JqZWN0UmVmIGNh
bGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiBj
b25zdHJ1Y3Rvciwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoY29uc3RydWN0b3IpKS0+Y29uc3RydWN0KGNhbGxl
ckNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworY29u
c3QgQ2xhc3NJbmZvIEpTQ0NhbGxiYWNrRnVuY3Rpb246OnNfaW5mbyA9IHsgIkNhbGxiYWNrRnVu
Y3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQ0NhbGxiYWNrRnVuY3Rpb24pIH07CisKK0pTQ0NhbGxiYWNrRnVu
Y3Rpb24qIEpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgVHlwZSB0eXBlLCBKU0NDbGFzcyog
anNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0dXJuVHlwZSwg
VmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCk7CisgICAgSlND
Q2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0NDYWxsYmFja0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNDQ2FsbGJhY2tGdW5jdGlvbih2bSwgc3Ry
dWN0dXJlLCB0eXBlLCBqc2NDbGFzcywgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1l
KTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK0pTQ0NhbGxiYWNrRnVuY3Rpb246OkpTQ0Nh
bGxiYWNrRnVuY3Rpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVHlwZSB0eXBlLCBK
U0NDbGFzcyoganNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0
dXJuVHlwZSwgVmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCisgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKHZtLCBzdHJ1Y3R1cmUsIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNhbGw8SlNDQ2FsbGJhY2tG
dW5jdGlvbj4sIHR5cGUgPT0gVHlwZTo6Q29uc3RydWN0b3IgPyBBUElDYWxsYmFja0Z1bmN0aW9u
Ojpjb25zdHJ1Y3Q8SlNDQ2FsbGJhY2tGdW5jdGlvbj4gOiBudWxscHRyKQorICAgICwgbV9mdW5j
dGlvbkNhbGxiYWNrKGNhbGxBc0Z1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RDYWxsYmFjayhj
YWxsQXNDb25zdHJ1Y3RvcikKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9jbGFzcyhqc2ND
bGFzcykKKyAgICAsIG1fY2xvc3VyZShXVEZNb3ZlKGNsb3N1cmUpKQorICAgICwgbV9yZXR1cm5U
eXBlKHJldHVyblR5cGUpCisgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IFR5cGU6OkNvbnN0cnVjdG9yIHx8IGpzY0Ns
YXNzKTsKKyAgICBpZiAoR19DTE9TVVJFX05FRURTX01BUlNIQUwobV9jbG9zdXJlLmdldCgpKSkK
KyAgICAgICAgZ19jbG9zdXJlX3NldF9tYXJzaGFsKG1fY2xvc3VyZS5nZXQoKSwgZ19jY2xvc3Vy
ZV9tYXJzaGFsX2dlbmVyaWMpOworfQorCitKU1ZhbHVlUmVmIEpTQ0NhbGxiYWNrRnVuY3Rpb246
OmNhbGwoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxl
ckNvbnRleHQpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29u
dGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAo
bV90eXBlID09IFR5cGU6OkNvbnN0cnVjdG9yKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY2Fu
bm90IGNhbGwgYSBjbGFzcyBjb25zdHJ1Y3RvciB3aXRob3V0IHxuZXd8IikpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisgICAgfQorCisgICAgYXV0
byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCksIHRv
UmVmKHRoaXMpLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
Z3BvaW50ZXIgaW5zdGFuY2UgPSBudWxscHRyOworICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6TWV0
aG9kKSB7CisgICAgICAgIGluc3RhbmNlID0ganNjQ29udGV4dFdyYXBwZWRPYmplY3QoY29udGV4
dC5nZXQoKSwgdGhpc09iamVjdCk7CisgICAgICAgIGlmICghaW5zdGFuY2UpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4
dCksIEFTQ0lJTGl0ZXJhbCgiaW52YWxpZCBpbnN0YW5jZSB0eXBlIGluIG1ldGhvZCIpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoanNDb250ZXh0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEdDbG9zdXJlIGFsd2F5cyBleHBlY3QgdG8gaGF2ZSBhdCBs
ZWFzdCB0aGUgaW5zdGFuY2UgcGFyYW1ldGVyLgorICAgIGJvb2wgYWRkSW5zdGFuY2UgPSBpbnN0
YW5jZSB8fCBtX3BhcmFtZXRlcnMuaXNFbXB0eSgpOworCisgICAgYXV0byBwYXJhbWV0ZXJDb3Vu
dCA9IHN0ZDo6bWluKG1fcGFyYW1ldGVycy5zaXplKCksIGFyZ3VtZW50Q291bnQpOworICAgIGlm
IChhZGRJbnN0YW5jZSkKKyAgICAgICAgcGFyYW1ldGVyQ291bnQrKzsKKyAgICBhdXRvKiB2YWx1
ZXMgPSBzdGF0aWNfY2FzdDxHVmFsdWUqPihnX2FsbG9jYShzaXplb2YoR1ZhbHVlKSAqIHBhcmFt
ZXRlckNvdW50KSk7CisgICAgbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKEdWYWx1ZSkgKiBwYXJh
bWV0ZXJDb3VudCk7CisKKyAgICBzaXplX3QgZmlyc3RQYXJhbWV0ZXIgPSAwOworICAgIGlmIChh
ZGRJbnN0YW5jZSkgeworICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlc1swXSwgR19UWVBFX1BP
SU5URVIpOworICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKCZ2YWx1ZXNbMF0sIGluc3RhbmNl
KTsKKyAgICAgICAgZmlyc3RQYXJhbWV0ZXIgPSAxOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RQYXJhbWV0ZXI7IGkgPCBwYXJhbWV0ZXJDb3VudCAmJiAhKmV4Y2VwdGlvbjsgKytp
KQorICAgICAgICBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3Vt
ZW50c1tpIC0gZmlyc3RQYXJhbWV0ZXJdLCBtX3BhcmFtZXRlcnNbaSAtIGZpcnN0UGFyYW1ldGVy
XSwgJnZhbHVlc1tpXSwgZXhjZXB0aW9uKTsKKworICAgIEdWYWx1ZSByZXR1cm5WYWx1ZSA9IEdf
VkFMVUVfSU5JVDsKKyAgICBpZiAobV9yZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FKQorICAgICAg
ICBnX3ZhbHVlX2luaXQoJnJldHVyblZhbHVlLCBtX3JldHVyblR5cGUpOworCisgICAgaWYgKCEq
ZXhjZXB0aW9uKQorICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgbV9y
ZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FID8gJnJldHVyblZhbHVlIDogbnVsbHB0ciwgcGFyYW1l
dGVyQ291bnQsIHZhbHVlcywgbnVsbHB0cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50OyArK2kpCisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlc1tpXSk7
CisKKyAgICBpZiAoYXV0byoganNjRXhjZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlv
bihjb250ZXh0LmdldCgpKSkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkdldEpT
VmFsdWUoanNjRXhjZXB0aW9uKTsKKworICAgIGpzY0NvbnRleHRQb3BDYWxsYmFjayhjb250ZXh0
LmdldCgpLCBXVEZNb3ZlKGNhbGxiYWNrRGF0YSkpOworCisgICAgaWYgKG1fcmV0dXJuVHlwZSA9
PSBHX1RZUEVfTk9ORSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29u
dGV4dCk7CisKKyAgICBhdXRvKiByZXR2YWwgPSAqZXhjZXB0aW9uID8gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoanNDb250ZXh0KSA6IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoY29udGV4dC5nZXQo
KSwgJnJldHVyblZhbHVlLCBleGNlcHRpb24pOworICAgIGdfdmFsdWVfdW5zZXQoJnJldHVyblZh
bHVlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitKU09iamVjdFJlZiBKU0NDYWxsYmFja0Z1
bmN0aW9uOjpjb25zdHJ1Y3QoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxlckNvbnRleHQpKTsK
KyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9HbG9iYWxSZWYoZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAobV9yZXR1cm5UeXBl
ID09IEdfVFlQRV9OT05FKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3JzIGNh
bm5vdCBiZSB2b2lkIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
YXV0byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCks
IHRvUmVmKHRoaXMpLCBudWxscHRyLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
R1ZhbHVlIHJldHVyblZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmcmV0
dXJuVmFsdWUsIG1fcmV0dXJuVHlwZSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBHQ2xvc3VyZSBhbHdheXMgZXhwZWN0IHRvIGhhdmUgYXQgbGVhc3Qg
dGhlIGluc3RhbmNlIHBhcmFtZXRlci4KKyAgICAgICAgR1ZhbHVlIGR1bW15VmFsdWUgPSBHX1ZB
TFVFX0lOSVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmZHVtbXlWYWx1ZSwgR19UWVBFX1BPSU5U
RVIpOworICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgJnJldHVyblZh
bHVlLCAxLCAmZHVtbXlWYWx1ZSwgbnVsbHB0cik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJmR1
bW15VmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gcGFyYW1ldGVyQ291bnQgPSBz
dGQ6Om1pbihtX3BhcmFtZXRlcnMuc2l6ZSgpLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgYXV0
byogdmFsdWVzID0gc3RhdGljX2Nhc3Q8R1ZhbHVlKj4oZ19hbGxvY2Eoc2l6ZW9mKEdWYWx1ZSkg
KiBwYXJhbWV0ZXJDb3VudCkpOworICAgICAgICBtZW1zZXQodmFsdWVzLCAwLCBzaXplb2YoR1Zh
bHVlKSAqIHBhcmFtZXRlckNvdW50KTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50ICYmICEqZXhjZXB0aW9uOyArK2kpCisgICAgICAgICAgICBqc2NDb250
ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3VtZW50c1tpXSwgbV9wYXJhbWV0
ZXJzW2ldLCAmdmFsdWVzW2ldLCBleGNlcHRpb24pOworCisgICAgICAgIGlmICghKmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIGdfY2xvc3VyZV9pbnZva2UobV9jbG9zdXJlLmdldCgpLCAmcmV0dXJu
VmFsdWUsIHBhcmFtZXRlckNvdW50LCB2YWx1ZXMsIG51bGxwdHIpOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGdfdmFs
dWVfdW5zZXQoJnZhbHVlc1tpXSk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIGpzY0V4Y2VwdGlv
biA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpCisgICAgICAgICpl
eGNlcHRpb24gPSBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKGpzY0V4Y2VwdGlvbik7CisKKyAgICBq
c2NDb250ZXh0UG9wQ2FsbGJhY2soY29udGV4dC5nZXQoKSwgV1RGTW92ZShjYWxsYmFja0RhdGEp
KTsKKworICAgIGlmICgqZXhjZXB0aW9uKSB7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3dpdGNoIChn
X3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKCZyZXR1cm5WYWx1ZSkpKSB7CisgICAgY2Fz
ZSBHX1RZUEVfUE9JTlRFUjoKKyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgICAgIGlmIChh
dXRvKiBwdHIgPSByZXR1cm5WYWx1ZS5kYXRhWzBdLnZfcG9pbnRlcikgeworICAgICAgICAgICAg
YXV0byogcmV0dmFsID0ganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihtX2NsYXNzLmdldCgp
LCBwdHIpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmcmV0dXJuVmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRvUmVmKHJldHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgQVNDSUlMaXRl
cmFsKCJjb25zdHJ1Y3RvciByZXR1cm5lZCBudWxsIikpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiaW52YWxpZCB0eXBlICIsIGdfdHlwZV9uYW1l
KEdfVkFMVUVfVFlQRSgmcmV0dXJuVmFsdWUpKSwgIiByZXR1cm5lZCBieSBjb25zdHJ1Y3RvciIp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBKU0NDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0
aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCktPkpTQ0NhbGxiYWNrRnVuY3Rpb246
On5KU0NDYWxsYmFja0Z1bmN0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4NWI2M2M0YmFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNr
RnVuY3Rpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CisgICAgZnJpZW5kIHN0cnVjdCBBUElDYWxsYmFja0Z1bmN0aW9uOwor
cHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCisgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgRnVuY3Rpb24sCisgICAgICAgIE1ldGhvZCwKKyAgICAgICAg
Q29uc3RydWN0b3IKKyAgICB9OworCisgICAgc3RhdGljIEpTQ0NhbGxiYWNrRnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBUeXBlLCBKU0ND
bGFzcyosIEdSZWZQdHI8R0Nsb3N1cmU+JiYsIEdUeXBlLCBWZWN0b3I8R1R5cGU+JiYpOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIEpTVmFsdWVSZWYgY2FsbChKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJl
ZiBjb25zdHJ1Y3QoSlNDb250ZXh0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKworcHJpdmF0ZToK
KyAgICBKU0NDYWxsYmFja0Z1bmN0aW9uKFZNJiwgU3RydWN0dXJlKiwgVHlwZSwgSlNDQ2xhc3Mq
LCBHUmVmUHRyPEdDbG9zdXJlPiYmLCBHVHlwZSwgVmVjdG9yPEdUeXBlPiYmKTsKKworICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5jdGlvbkNhbGxiYWNrKCkgeyByZXR1cm4g
bV9mdW5jdGlvbkNhbGxiYWNrOyB9CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrIGNvbnN0cnVjdENhbGxiYWNrKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RDYWxsYmFjazsgfQor
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIG1fZnVuY3Rpb25DYWxsYmFjazsK
KyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgbV9jb25zdHJ1Y3RDYWxsYmFj
azsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBHUmVmUHRyPEpTQ0NsYXNzPiBtX2NsYXNzOworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IG1fY2xvc3VyZTsKKyAgICBHVHlwZSBtX3JldHVyblR5cGU7Cisg
ICAgVmVjdG9yPEdUeXBlPiBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNzIyYTVkMjg5MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAKQEAgLTAsMCAr
MSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzLmgiCisKKyNpbmNsdWRlICJKU0NDYWxsYmFj
a0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlND
Q29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
VmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfQ09OVEVYVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9QQVJFTlQKK307CisKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDbGFzc1ByaXZhdGUgeworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7Cisg
ICAgQ1N0cmluZyBuYW1lOworICAgIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBHRGVzdHJveU5v
dGlmeSBkZXN0cm95RnVuY3Rpb247CisgICAgSlNDQ2xhc3MqIHBhcmVudENsYXNzOworICAgIEpT
Qzo6V2VhazxKU0M6OkpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgSGFzaE1hcDxDU3RyaW5nLCBK
U0M6OldlYWs8SlNDOjpKU09iamVjdD4+IGNvbnN0cnVjdG9yczsKK30gSlNDQ2xhc3NQcml2YXRl
OworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ2xhc3MsIGpzY19jbGFzcywgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQganNjQ2xhc3NHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAg
IEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBqc2NDbGFzcy0+cHJpdi0+Y29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGpzY0Ns
YXNzLT5wcml2LT5uYW1lLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QVJFTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjQ2xhc3MtPnByaXYt
PnBhcmVudENsYXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NTZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFy
YW1TcGVjKQoreworICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAg
anNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBKU0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGpz
Y0NsYXNzLT5wcml2LT5uYW1lID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudCA9
IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICBqc2NDbGFzcy0+cHJpdi0+
cGFyZW50Q2xhc3MgPSBKU0NfQ0xBU1MocGFyZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NEaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBKU0NfQ0xB
U1Mob2JqZWN0KTsKKyAgICBpZiAoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpIHsKKyAgICAgICAg
SlNDbGFzc1JlbGVhc2UoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpOworICAgICAgICBqc2NDbGFz
cy0+cHJpdi0+anNDbGFzcyA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mo
anNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQganNjQ2xhc3NDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1Rf
Q0xBU1MoanNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAg
ICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBKU0NfQ0xBU1Mob2JqZWN0KS0+cHJpdjsKKyAgICBK
U0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7Cisg
ICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBwcml2LT5uYW1lLmRhdGEoKTsKKyAgICBwcml2LT5q
c0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHByb3RvdHlwZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc1Byb3RvdHlwZSIsIHByaXYtPm5h
bWUuZGF0YSgpKSk7CisgICAgSlNDbGFzc0RlZmluaXRpb24gcHJvdG90eXBlRGVmaW5pdGlvbiA9
IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIHByb3RvdHlwZURlZmluaXRpb24uY2xhc3NO
YW1lID0gcHJvdG90eXBlTmFtZS5nZXQoKTsKKyAgICBKU0NsYXNzUmVmIHByb3RvdHlwZUNsYXNz
ID0gSlNDbGFzc0NyZWF0ZSgmcHJvdG90eXBlRGVmaW5pdGlvbik7CisgICAgcHJpdi0+cHJvdG90
eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlSlNXcmFwcGVyKHByaXYtPmNvbnRleHQsIHByb3Rv
dHlwZUNsYXNzKTsKKyAgICBKU0NsYXNzUmVsZWFzZShwcm90b3R5cGVDbGFzcyk7CisKKyAgICBp
ZiAocHJpdi0+cGFyZW50Q2xhc3MpCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCksIHRvUmVmKHByaXYtPnByb3RvdHlwZS5n
ZXQoKSksIHRvUmVmKHByaXYtPnBhcmVudENsYXNzLT5wcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQganNjX2NsYXNzX2NsYXNzX2luaXQoSlNDQ2xhc3NDbGFzcyoga2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBvYmpDbGFzcy0+Y29uc3RydWN0ZWQgPSBqc2NDbGFzc0NvbnN0cnVjdGVkOworICAg
IG9iakNsYXNzLT5kaXNwb3NlID0ganNjQ2xhc3NEaXNwb3NlOworICAgIG9iakNsYXNzLT5nZXRf
cHJvcGVydHkgPSBqc2NDbGFzc0dldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5zZXRfcHJvcGVy
dHkgPSBqc2NDbGFzc1NldFByb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkpTQ0Nv
bnRleHQiLAorICAgICAgICAgICAgIkpTQyBDb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBF
X0NPTlRFWFQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAg
ICAgICAiTmFtZSIsCisgICAgICAgICAgICAiVGhlIGNsYXNzIG5hbWUiLAorICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfUEFSRU5ULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBhcmVudCIsCisgICAg
ICAgICAgICAiUGFydGVudCIsCisgICAgICAgICAgICAiVGhlIHBhcmVudCBjbGFzcyIsCisgICAg
ICAgICAgICBKU0NfVFlQRV9DTEFTUywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsK
K30KKworR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENsYXNzLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3MgPSBh
ZG9wdEdSZWYoSlNDX0NMQVNTKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DTEFTUywgImNvbnRleHQi
LCBjb250ZXh0LCAibmFtZSIsIG5hbWUsICJwYXJlbnQiLCBwYXJlbnRDbGFzcywgbnVsbHB0cikp
KTsKKyAgICBqc2NDbGFzcy0+cHJpdi0+ZGVzdHJveUZ1bmN0aW9uID0gZGVzdHJveUZ1bmN0aW9u
OworICAgIHJldHVybiBqc2NDbGFzczsKK30KKworSlNDbGFzc1JlZiBqc2NDbGFzc0dldEpTQ2xh
c3MoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIHJldHVybiBqc2NDbGFzcy0+cHJpdi0+anND
bGFzczsKK30KKworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihK
U0NDbGFzcyoganNjQ2xhc3MsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QpCit7CisgICAgSlNDQ2xh
c3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgcmV0dXJuIGpzY0NvbnRleHRH
ZXRPckNyZWF0ZUpTV3JhcHBlcihwcml2LT5jb250ZXh0LCBwcml2LT5qc0NsYXNzLCB0b1JlZihw
cml2LT5wcm90b3R5cGUuZ2V0KCkpLCB3cmFwcGVkT2JqZWN0LCBwcml2LT5kZXN0cm95RnVuY3Rp
b24pOworfQorCit2b2lkIGpzY0NsYXNzSW52YWxpZGF0ZShKU0NDbGFzcyoganNjQ2xhc3MpCit7
CisgICAganNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBudWxscHRyOworfQorCitjb25zdCBjaGFy
KiBqc2NfY2xhc3NfZ2V0X25hbWUoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0
dXJuIGpzY0NsYXNzLT5wcml2LT5uYW1lLmRhdGEoKTsKK30KKworSlNDQ2xhc3MqIGpzY19jbGFz
c19nZXRfcGFyZW50KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2ND
bGFzcy0+cHJpdi0+cGFyZW50Q2xhc3M7Cit9CisKK3ZvaWQganNjX2NsYXNzX2FkZF9jb25zdHJ1
Y3RvcihKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxs
YmFjaywgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1Db3VudCwgLi4uKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChjYWxsYmFjayk7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBqc2NDbGFz
cy0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisgICAgaWYg
KCFuYW1lKQorICAgICAgICBuYW1lID0gcHJpdi0+bmFtZS5kYXRhKCk7CisKKyAgICB2YV9saXN0
IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgcGFyYW1Db3VudCk7CisgICAgVmVjdG9yPEdUeXBl
PiBwYXJhbWV0ZXJzOworICAgIGlmIChwYXJhbUNvdW50KSB7CisgICAgICAgIHBhcmFtZXRlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXJhbUNvdW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMudW5j
aGVja2VkQXBwZW5kKHZhX2FyZyhhcmdzLCBHVHlwZSkpOworICAgIH0KKyAgICB2YV9lbmQoYXJn
cyk7CisKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1
cmVfbmV3KGNhbGxiYWNrLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCkpOworICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOworICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpDb25zdHJ1
Y3RvciwganNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgIGF1dG8gY29uc3RydWN0b3IgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVW
YWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihmdW5jdGlvbk9iamVjdCkpOworICAgIEdSZWZQdHI8
SlNDVmFsdWU+IHByb3RvdHlwZSA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIHRvUmVmKHByaXYtPnByb3RvdHlwZS5nZXQoKSkpOworICAgIGF1dG8gbm9uRW51bWVy
YWJsZSA9IHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BF
UlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSk7CisgICAganNj
X3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShjb25zdHJ1Y3Rvci5nZXQoKSwgInBy
b3RvdHlwZSIsIG5vbkVudW1lcmFibGUsIHByb3RvdHlwZS5nZXQoKSk7CisgICAganNjX3ZhbHVl
X29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShwcm90b3R5cGUuZ2V0KCksICJjb25zdHJ1Y3Rv
ciIsIG5vbkVudW1lcmFibGUsIGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICBwcml2LT5jb25zdHJ1
Y3RvcnMuc2V0KG5hbWUsIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBpZiAobmFtZSA9PSBwcml2LT5u
YW1lKQorICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUocHJpdi0+Y29udGV4dCwgbmFtZSwg
Y29uc3RydWN0b3IuZ2V0KCkpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChw
cml2LT5jb25zdHJ1Y3RvcnMuY29udGFpbnMocHJpdi0+bmFtZSkpOworICAgICAgICBhdXRvKiBt
YWluQ29uc3RydWN0b3JPYmplY3QgPSBwcml2LT5jb25zdHJ1Y3RvcnMuZ2V0KHByaXYtPm5hbWUp
OworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBtYWluQ29uc3RydWN0b3IgPSBqc2NDb250ZXh0
R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihtYWluQ29uc3RydWN0b3JPYmpl
Y3QpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkobWFpbkNvbnN0cnVj
dG9yLmdldCgpLCBuYW1lLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIGpz
Y19jbGFzc19hZGRfbWV0aG9kKEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwg
R0NhbGxiYWNrIGNhbGxiYWNrLCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50
LCAuLi4pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY2FsbGJh
Y2spOworCisgICAgSlNDQ2xhc3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAg
Z19yZXR1cm5faWZfZmFpbChwcml2LT5jb250ZXh0KTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAg
ICB2YV9zdGFydChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRl
cnM7CisgICAgaWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1Db3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBl
bmQodmFfYXJnKGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2Fs
bGJhY2ssIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0KSk7CisgICAgSlNDOjpWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
YXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBTdHJpbmc6OmZyb21VVEY4KG5h
bWUpLAorICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1ldGhvZCwganNj
Q2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFyYW1ldGVycykp
KTsKKyAgICBhdXRvIG1ldGhvZCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm90b3R5cGUg
PSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2LT5w
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBhdXRvIG5vbkVudW1lcmFibGUgPSBzdGF0aWNfY2FzdDxK
U0NWYWx1ZVByb3BlcnR5RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgfCBK
U0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEUpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2RhdGEocHJvdG90eXBlLmdldCgpLCBuYW1lLCBub25FbnVtZXJhYmxlLCBtZXRo
b2QuZ2V0KCkpOworfQorCit2b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlNDQ2xhc3MqIGpz
Y0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBn
ZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNf
Q0xBU1MoanNjQ2xhc3MpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwocHJvcGVydHlUeXBlICE9IEdfVFlQRV9JTlZBTElEICYmIHByb3BlcnR5VHlw
ZSAhPSBHX1RZUEVfTk9ORSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChnZXR0ZXIgfHwgc2V0dGVy
KTsKKworICAgIEpTQ0NsYXNzUHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5wcml2OworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocHJpdi0+Y29udGV4dCk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBw
cm90b3R5cGUgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1Jl
Zihwcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9w
cm9wZXJ0eV9hY2Nlc3Nvcihwcm90b3R5cGUuZ2V0KCksIG5hbWUsIEpTQ19WQUxVRV9QUk9QRVJU
WV9DT05GSUdVUkFCTEUsIHByb3BlcnR5VHlwZSwgZ2V0dGVyLCBzZXR0ZXIpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMjAyZTY4NmJmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuaApAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pTQ19IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPGpzYy9q
c2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIEpTQ0Ns
YXNzX2gKKyNkZWZpbmUgSlNDQ2xhc3NfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfQ0xBU1MgICAgICAgICAgICAoanNjX2Ns
YXNzX2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19DTEFTUyhvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9DTEFTUywgSlNDQ2xhc3MpKQor
I2RlZmluZSBKU0NfSVNfQ0xBU1Mob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgSlNDX1RZUEVfQ0xBU1MpKQorI2RlZmluZSBKU0NfQ0xBU1NfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfQ0xBU1Ms
IEpTQ0NsYXNzQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfQ0xBU1NfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfQ0xBU1MpKQorI2RlZmluZSBK
U0NfQ0xBU1NfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgSlNDX1RZUEVfQ0xBU1MsIEpTQ0NsYXNzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlND
Q2xhc3MgSlNDQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3NDbGFzcyBKU0NDbGFzc0Ns
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzUHJpdmF0ZSBKU0NDbGFzc1ByaXZhdGU7CisK
K3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7CisKK3N0cnVjdCBfSlNDQ2xh
c3MgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgSlND
Q2xhc3NQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NDbGFzc0NsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAo
dm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7
Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfY2xhc3NfZ2V0X3R5cGUgICAgICAgICh2b2lkKTsK
KworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19jbGFzc19nZXRfbmFtZSAgICAgICAgKEpTQ0Ns
YXNzICAgKmpzY19jbGFzcyk7CisKK0pTQ19BUEkgSlNDQ2xhc3MgKgoranNjX2NsYXNzX2dldF9w
YXJlbnQgICAgICAoSlNDQ2xhc3MgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSB2b2lkCitqc2Nf
Y2xhc3NfYWRkX2NvbnN0cnVjdG9yIChKU0NDbGFzcyAgICpqc2NfY2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0NhbGxiYWNrICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VHlwZSAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlND
X0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX21ldGhvZCAgICAgIChKU0NDbGFzcyAgICpqc2NfY2xh
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNrICAgY2FsbGJhY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVHlwZSAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX3Byb3BlcnR5ICAgIChKU0ND
bGFzcyAgICpqc2NfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgcHJvcGVydHlf
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgIGdldHRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgIHNldHRlcik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBKU0NDbGFzc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjJmMzY0NGQ0ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3MuaCIKKyNpbmNsdWRlICJKU0NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CisKK0dSZWZQdHI8SlNDQ2xhc3M+IGpzY0NsYXNzQ3JlYXRlKEpTQ0NvbnRleHQqLCBjb25z
dCBjaGFyKiwgSlNDQ2xhc3MqLCBHRGVzdHJveU5vdGlmeSk7CitKU0NsYXNzUmVmIGpzY0NsYXNz
R2V0SlNDbGFzcyhKU0NDbGFzcyopOworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0
ZUpTV3JhcHBlcihKU0NDbGFzcyosIGdwb2ludGVyKTsKK3ZvaWQganNjQ2xhc3NJbnZhbGlkYXRl
KEpTQ0NsYXNzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI4YTFiNGZkYjEy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0Nv
bnRleHQuY3BwCkBAIC0wLDAgKzEsNTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisK
KyNpbmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ0V4Y2VwdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmlydHVh
bE1hY2hpbmVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1hcC5oIgorI2luY2x1ZGUg
IkpTUmV0YWluUHRyLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfVklSVFVBTF9NQUNISU5FLAorfTsKKworc3RydWN0IEV4Y2VwdGlvbkhhbmRsZXIgeworICAg
IEV4Y2VwdGlvbkhhbmRsZXIoSlNDRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyLCB2b2lkKiB1c2Vy
RGF0YSA9IG51bGxwdHIsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnlGdW5jdGlvbiA9IG51
bGxwdHIpCisgICAgICAgIDogaGFuZGxlcihoYW5kbGVyKQorICAgICAgICAsIHVzZXJEYXRhKHVz
ZXJEYXRhKQorICAgICAgICAsIGRlc3Ryb3lOb3RpZnlGdW5jdGlvbihkZXN0cm95Tm90aWZ5RnVu
Y3Rpb24pCisgICAgeworICAgIH0KKworICAgIH5FeGNlcHRpb25IYW5kbGVyKCkKKyAgICB7Cisg
ICAgICAgIGlmIChkZXN0cm95Tm90aWZ5RnVuY3Rpb24pCisgICAgICAgICAgICBkZXN0cm95Tm90
aWZ5RnVuY3Rpb24odXNlckRhdGEpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkhhbmRsZXIoRXhj
ZXB0aW9uSGFuZGxlciYmIG90aGVyKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKGhhbmRsZXIs
IG90aGVyLmhhbmRsZXIpOworICAgICAgICBzdGQ6OnN3YXAodXNlckRhdGEsIG90aGVyLnVzZXJE
YXRhKTsKKyAgICAgICAgc3RkOjpzd2FwKGRlc3Ryb3lOb3RpZnlGdW5jdGlvbiwgb3RoZXIuZGVz
dHJveU5vdGlmeUZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25IYW5kbGVyKGNvbnN0
IEV4Y2VwdGlvbkhhbmRsZXImKSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25IYW5kbGVyJiBvcGVy
YXRvcj0oY29uc3QgRXhjZXB0aW9uSGFuZGxlciYpID0gZGVsZXRlOworCisgICAgSlNDRXhjZXB0
aW9uSGFuZGxlciBoYW5kbGVyIHsgbnVsbHB0ciB9OworICAgIHZvaWQqIHVzZXJEYXRhIHsgbnVs
bHB0ciB9OworICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnlGdW5jdGlvbiB7IG51bGxw
dHIgfTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0UHJpdmF0ZSB7CisgICAgR1Jl
ZlB0cjxKU0NWaXJ0dWFsTWFjaGluZT4gdm07CisgICAgSlNSZXRhaW5QdHI8SlNHbG9iYWxDb250
ZXh0UmVmPiBqc0NvbnRleHQ7CisgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IGV4Y2VwdGlvbjsK
KyAgICBWZWN0b3I8RXhjZXB0aW9uSGFuZGxlcj4gZXhjZXB0aW9uSGFuZGxlcnM7Cit9IEpTQ0Nv
bnRleHRQcml2YXRlOworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ29udGV4dCwganNjX2NvbnRl
eHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFj
aGluZShKU0NDb250ZXh0KiBjb250ZXh0LCBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiYmIHZt
KQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBp
ZiAodm0pIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByaXYtPnZtKTsKKyAgICAgICAgcHJp
di0+dm0gPSBXVEZNb3ZlKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXByaXYtPmpzQ29u
dGV4dCk7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cmR1cF9wcmludGYoIiVw
LWpzQ29udGV4dCIsICZUaHJlYWQ6OmN1cnJlbnQoKSkpOworICAgICAgICBpZiAoYXV0byogZGF0
YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHByaXYtPnZtLmdldCgpKSwgbmFtZS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIHByaXYtPmpzQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTR2xvYmFs
Q29udGV4dFJlZj4oZGF0YSk7CisgICAgICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVD
VChwcml2LT52bS5nZXQoKSksIG5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHByaXYtPmpzQ29udGV4dCA9IEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4
dFJlZj4oQWRvcHQsIEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoanNjVmlydHVhbE1hY2hp
bmVHZXRDb250ZXh0R3JvdXAocHJpdi0+dm0uZ2V0KCkpLCBudWxscHRyKSk7CisgICAgICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IHRvSlNHbG9iYWxPYmplY3QocHJpdi0+anNDb250ZXh0LmdldCgp
KTsKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPndyYXBwZXJNYXAoKSkKKyAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+c2V0V3JhcHBlck1hcChzdGQ6Om1ha2VfdW5pcXVlPEpTQzo6V3JhcHBl
ck1hcD4ocHJpdi0+anNDb250ZXh0LmdldCgpKSk7CisgICAgICAgIGpzY1ZpcnR1YWxNYWNoaW5l
QWRkQ29udGV4dChwcml2LT52bS5nZXQoKSwgY29udGV4dCk7CisgICAgfSBlbHNlIGlmIChwcml2
LT52bSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChwcml2LT5qc0NvbnRleHQpOworICAgICAg
ICBqc2NWaXJ0dWFsTWFjaGluZVJlbW92ZUNvbnRleHQocHJpdi0+dm0uZ2V0KCksIGNvbnRleHQp
OworICAgICAgICBwcml2LT5qc0NvbnRleHQgPSBudWxscHRyOworICAgICAgICBwcml2LT52bSA9
IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NDb250ZXh0R2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBhcmFtU3BlYykKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdiA9IEpTQ19DT05URVhU
KG9iamVjdCktPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9W
SVJUVUFMX01BQ0hJTkU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgcHJpdi0+
dm0uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NDb250ZXh0U2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFt
U3BlYykKK3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0gSlNDX0NPTlRFWFQob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQUk9QX1ZJUlRVQUxfTUFDSElORToK
KyAgICAgICAgaWYgKGdwb2ludGVyIHZtID0gZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSkKKyAg
ICAgICAgICAgIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFjaGluZShjb250ZXh0LCBHUmVmUHRyPEpT
Q1ZpcnR1YWxNYWNoaW5lPihKU0NfVklSVFVBTF9NQUNISU5FKHZtKSkpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBq
c2NDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NM
QVNTKGpzY19jb250ZXh0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAg
ICBKU0NDb250ZXh0KiBjb250ZXh0ID0gSlNDX0NPTlRFWFQob2JqZWN0KTsKKyAgICBpZiAoIWNv
bnRleHQtPnByaXYtPnZtKQorICAgICAgICBqc2NDb250ZXh0U2V0VmlydHVhbE1hY2hpbmUoY29u
dGV4dCwgYWRvcHRHUmVmKGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkpKTsKKworICAgIGNvbnRl
eHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChFeGNlcHRpb25IYW5kbGVyKFtdKEpT
Q0NvbnRleHQqIGNvbnRleHQsIEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uLCBncG9pbnRlcikgewor
ICAgICAgICBqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uKTsK
KyAgICB9KSk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHREaXNwb3NlKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBKU0NDb250ZXh0KiBjb250ZXh0ID0gSlNDX0NPTlRFWFQob2JqZWN0KTsK
KyAgICBqc2NDb250ZXh0U2V0VmlydHVhbE1hY2hpbmUoY29udGV4dCwgbnVsbHB0cik7CisKKyAg
ICBHX09CSkVDVF9DTEFTUyhqc2NfY29udGV4dF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY19jb250ZXh0X2NsYXNzX2luaXQoSlNDQ29udGV4dENs
YXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xB
U1Moa2xhc3MpOworICAgIG9iakNsYXNzLT5nZXRfcHJvcGVydHkgPSBqc2NDb250ZXh0R2V0UHJv
cGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0eSA9IGpzY0NvbnRleHRTZXRQcm9wZXJ0
eTsKKyAgICBvYmpDbGFzcy0+Y29uc3RydWN0ZWQgPSBqc2NDb250ZXh0Q29uc3RydWN0ZWQ7Cisg
ICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NDb250ZXh0RGlzcG9zZTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfVklSVFVBTF9N
QUNISU5FLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZpcnR1
YWwtbWFjaGluZSIsCisgICAgICAgICAgICAiSlNDVmlydHVhbE1hY2hpbmUiLAorICAgICAgICAg
ICAgIkpTQyBWaXJ0dWFsIE1hY2hpbmUiLAorICAgICAgICAgICAgSlNDX1RZUEVfVklSVFVBTF9N
QUNISU5FLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitHUmVmUHRyPEpT
Q0NvbnRleHQ+IGpzY0NvbnRleHRHZXRPckNyZWF0ZShKU0dsb2JhbENvbnRleHRSZWYganNDb250
ZXh0KQoreworICAgIGF1dG8gdm0gPSBqc2NWaXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKHRvUmVm
KCZ0b0pTKGpzQ29udGV4dCktPnZtKCkpKTsKKyAgICBpZiAoR1JlZlB0cjxKU0NDb250ZXh0PiBj
b250ZXh0ID0ganNjVmlydHVhbE1hY2hpbmVHZXRDb250ZXh0KHZtLmdldCgpLCBqc0NvbnRleHQp
KQorICAgICAgICByZXR1cm4gY29udGV4dDsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShn
X3N0cmR1cF9wcmludGYoIiVwLWpzQ29udGV4dCIsICZUaHJlYWQ6OmN1cnJlbnQoKSkpOworICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHZtLmdldCgpKSwgbmFtZS5nZXQoKSwganNDb250
ZXh0KTsKKyAgICByZXR1cm4gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxf
bWFjaGluZSh2bS5nZXQoKSkpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYganNjQ29udGV4dEdl
dEpTQ29udGV4dChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VSVChKU0NfSVNfQ09O
VEVUKGNvbnRleHQpKTsKKworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+
cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+anNDb250ZXh0LmdldCgpOworfQorCitzdGF0aWMgSlND
OjpXcmFwcGVyTWFwJiB3cmFwcGVyTWFwKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgYXV0
byogbWFwID0gdG9KU0dsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkp
LT53cmFwcGVyTWFwKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKKyAgICByZXR1cm4gKm1h
cDsKK30KKworR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoSlND
Q29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIHJldHVybiB3cmFw
cGVyTWFwKGNvbnRleHQpLmdvYmplY3RXcmFwcGVyKGNvbnRleHQsIGpzVmFsdWUpOworfQorCit2
b2lkIGpzY0NvbnRleHRWYWx1ZURlc3Ryb3llZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVl
UmVmIGpzVmFsdWUpCit7CisgICAgd3JhcHBlck1hcChjb250ZXh0KS51bndyYXAoanNWYWx1ZSk7
Cit9CisKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoSlNDQ29udGV4dCog
Y29udGV4dCwgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1h
cChjb250ZXh0KS5qc1dyYXBwZXIod3JhcHBlZE9iamVjdCk7Cit9CisKK0pTQzo6SlNPYmplY3Qq
IGpzY0NvbnRleHRHZXRPckNyZWF0ZUpTV3JhcHBlcihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0Ns
YXNzUmVmIGpzQ2xhc3MsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBncG9pbnRlciB3cmFwcGVkT2Jq
ZWN0LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgaWYgKGF1dG8qIGpz
V3JhcHBlciA9IGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoY29udGV4dCwgd3JhcHBlZE9iamVjdCkp
CisgICAgICAgIHJldHVybiBqc1dyYXBwZXI7CisKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250
ZXh0KS5jcmVhdGVKU1dyYXBwcGVyKGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSwganND
bGFzcywgcHJvdG90eXBlLCB3cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pOworfQorCitn
cG9pbnRlciBqc2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0NDb250ZXh0KiBjb250ZXh0LCBKU09i
amVjdFJlZiBqc09iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0KS53cmFw
cGVkT2JqZWN0KGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSwganNPYmplY3QpOworfQor
CitDYWxsYmFja0RhdGEganNjQ29udGV4dFB1c2hDYWxsYmFjayhKU0NDb250ZXh0KiBjb250ZXh0
LCBKU1ZhbHVlUmVmIGNhbGxlZVZhbHVlLCBKU1ZhbHVlUmVmIHRoaXNWYWx1ZSwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cykKK3sKKyAgICBUaHJlYWQm
IHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgIGF1dG8qIHByZXZpb3VzU3RhY2sgPSBz
dGF0aWNfY2FzdDxDYWxsYmFja0RhdGEqPih0aHJlYWQubV9hcGlEYXRhKTsKKyAgICBDYWxsYmFj
a0RhdGEgZGF0YSA9IHsgY29udGV4dCwgV1RGTW92ZShjb250ZXh0LT5wcml2LT5leGNlcHRpb24p
LCBjYWxsZWVWYWx1ZSwgdGhpc1ZhbHVlLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIHByZXZp
b3VzU3RhY2sgfTsKKyAgICB0aHJlYWQubV9hcGlEYXRhID0gJmRhdGE7CisgICAgcmV0dXJuIGRh
dGE7Cit9CisKK3ZvaWQganNjQ29udGV4dFBvcENhbGxiYWNrKEpTQ0NvbnRleHQqIGNvbnRleHQs
IENhbGxiYWNrRGF0YSYmIGRhdGEpCit7CisgICAgVGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1
cnJlbnQoKTsKKyAgICBjb250ZXh0LT5wcml2LT5leGNlcHRpb24gPSBXVEZNb3ZlKGRhdGEucHJl
c2VydmVkRXhjZXB0aW9uKTsKKyAgICB0aHJlYWQubV9hcGlEYXRhID0gZGF0YS5uZXh0OworfQor
CitKU1ZhbHVlUmVmIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoSlNDQ29udGV4dCogY29udGV4
dCwgR1B0ckFycmF5KiBnQXJyYXksIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0ND
b250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgYXV0byoganNBcnJheSA9
IEpTT2JqZWN0TWFrZUFycmF5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwgMCwgbnVsbHB0ciwgZXhj
ZXB0aW9uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAoIWdBcnJheSkKKyAg
ICAgICAgcmV0dXJuIGpzQXJyYXk7CisKKyAgICBhdXRvKiBqc0FycmF5T2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSwgZXhjZXB0aW9uKTsKKyAg
ICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKHBy
aXYtPmpzQ29udGV4dC5nZXQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ0Fy
cmF5LT5sZW47ICsraSkgeworICAgICAgICBncG9pbnRlciBpdGVtID0gZ19wdHJfYXJyYXlfaW5k
ZXgoZ0FycmF5LCBpKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eUF0SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBp
LCBKU1ZhbHVlTWFrZU51bGwocHJpdi0+anNDb250ZXh0LmdldCgpKSwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgZWxzZSBpZiAoSlNDX0lTX1ZBTFVFKGl0ZW0pKQorICAgICAgICAgICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eUF0SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBp
LCBqc2NWYWx1ZUdldEpTVmFsdWUoSlNDX1ZBTFVFKGl0ZW0pKSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygiaW52YWxpZCBpdGVt
IHR5cGUgaW4gR1B0ckFycmF5IikpKTsKKworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChwcml2LT5qc0NvbnRleHQuZ2V0KCkp
OworICAgIH0KKworICAgIHJldHVybiBqc0FycmF5OworfQorCitzdGF0aWMgR1JlZlB0cjxHUHRy
QXJyYXk+IGpzY0NvbnRleHRKU0FycmF5VG9HQXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgSlNW
YWx1ZVJlZiBqc0FycmF5LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4
dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmIChKU1ZhbHVlSXNOdWxsKHBy
aXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgaWYgKCFKU1ZhbHVlSXNBcnJheShwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXkp
KSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pT
KHByaXYtPmpzQ29udGV4dC5nZXQoKSksIG1ha2VTdHJpbmcoImludmFsaWQganMgdHlwZSBmb3Ig
R1B0ckFycmF5IikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0
byoganNBcnJheU9iamVjdCA9IEpTVmFsdWVUb09iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCks
IGpzQXJyYXksIGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFN0cmluZyhB
ZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRv
KiBqc0xlbmd0aCA9IEpTT2JqZWN0R2V0UHJvcGVydHkocHJpdi0+anNDb250ZXh0LmdldCgpLCBq
c0FycmF5T2JqZWN0LCBsZW5ndGhTdHJpbmcuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgaWYgKCpl
eGNlcHRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBsZW5ndGggPSBK
U0M6OnRvVUludDMyKEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzTGVu
Z3RoLCBleGNlcHRpb24pKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5ID0gYWRvcHRHUmVmKGdfcHRy
X2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJlZikpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBqc0l0ZW0gPSBK
U09iamVjdEdldFByb3BlcnR5QXRJbmRleChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlP
YmplY3QsIGksIGV4Y2VwdGlvbik7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQo
KSwganNJdGVtID8ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNJdGVtKS5s
ZWFrUmVmKCkgOiBudWxscHRyKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ0FycmF5OworfQorCitK
U1ZhbHVlUmVmIGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0Nv
bnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKworICAgIHN3aXRjaCAoZ190eXBl
X2Z1bmRhbWVudGFsKEdfVkFMVUVfVFlQRSh2YWx1ZSkpKSB7CisgICAgY2FzZSBHX1RZUEVfQk9P
TEVBTjoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihwcml2LT5qc0NvbnRleHQu
Z2V0KCksIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9DSEFS
OgorICAgIGNhc2UgR19UWVBFX0lOVDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVy
KHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9pbnQpOworICAgIGNhc2Ug
R19UWVBFX0VOVU06CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0Nv
bnRleHQuZ2V0KCksIGdfdmFsdWVfZ2V0X2VudW0odmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9G
TEFHUzoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5n
ZXQoKSwgZ192YWx1ZV9nZXRfZmxhZ3ModmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9VQ0hBUjoK
KyAgICBjYXNlIEdfVFlQRV9VSU5UOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
cHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3VpbnQpOworICAgIGNhc2Ug
R19UWVBFX0ZMT0FUOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anND
b250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X2Zsb2F0KTsKKyAgICBjYXNlIEdfVFlQRV9E
T1VCTEU6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQu
Z2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlKTsKKyAgICBjYXNlIEdfVFlQRV9MT05HOgor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2
YWx1ZS0+ZGF0YVswXS52X2xvbmcpOworICAgIGNhc2UgR19UWVBFX1VMT05HOgorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0
YVswXS52X3Vsb25nKTsKKyAgICBjYXNlIEdfVFlQRV9JTlQ2NDoKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9p
bnQ2NCk7CisgICAgY2FzZSBHX1RZUEVfVUlOVDY0OgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ2NCk7
CisgICAgY2FzZSBHX1RZUEVfU1RSSU5HOiB7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBqc1N0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmco
cHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1N0cmluZy5nZXQoKSk7CisgICAgfQorICAgIGNhc2Ug
R19UWVBFX1BPSU5URVI6CisgICAgY2FzZSBHX1RZUEVfT0JKRUNUOgorICAgIGNhc2UgR19UWVBF
X0JPWEVEOgorICAgICAgICBpZiAoYXV0byogcHRyID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVy
KSB7CisgICAgICAgICAgICBpZiAoYXV0byoganNXcmFwcGVyID0ganNjQ29udGV4dEdldEpTV3Jh
cHBlcihjb250ZXh0LCBwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0b1JlZihqc1dyYXBw
ZXIpOworCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwg
SlNDX1RZUEVfVkFMVUUpKQorICAgICAgICAgICAgICAgIHJldHVybiBqc2NWYWx1ZUdldEpTVmFs
dWUoSlNDX1ZBTFVFKHB0cikpOworCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxV
RV9UWVBFKHZhbHVlKSwgR19UWVBFX1BUUl9BUlJBWSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoY29udGV4dCwgc3RhdGljX2Nhc3Q8R1B0ckFycmF5
Kj4ocHRyKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VOdWxsKHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHX1RZUEVfUEFSQU06CisgICAgY2FzZSBHX1RZUEVfSU5URVJGQUNFOgorICAg
IGNhc2UgR19UWVBFX1ZBUklBTlQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJp
di0+anNDb250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygidW5zdXBwb3J0ZWQgdHlwZSAiLCBnX3R5
cGVfbmFtZShHX1ZBTFVFX1RZUEUodmFsdWUpKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQocHJpdi0+anNDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBqc2NDb250ZXh0SlNW
YWx1ZVRvR1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSwgR1R5
cGUgdHlwZSwgR1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpT
Q0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBnX3ZhbHVlX2luaXQo
dmFsdWUsIHR5cGUpOworCisgICAgYXV0byBmdW5kYW1lbnRhbFR5cGUgPSBnX3R5cGVfZnVuZGFt
ZW50YWwoR19WQUxVRV9UWVBFKHZhbHVlKSk7CisgICAgc3dpdGNoIChmdW5kYW1lbnRhbFR5cGUp
IHsKKyAgICBjYXNlIEdfVFlQRV9JTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwg
SlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX0ZMT0FUOgorICAgICAgICBnX3Zh
bHVlX3NldF9mbG9hdCh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQo
KSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBF
X0RPVUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCBKU1ZhbHVlVG9OdW1i
ZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgSlNWYWx1ZVRvQm9vbGVhbihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfU1RSSU5HOiB7CisgICAgICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1N0cmluZyhBZG9wdCwgSlNWYWx1ZVRvU3RyaW5n
Q29weShwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAg
ICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc2l6ZV90IG1h
eFNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoanNTdHJpbmcuZ2V0KCkp
OworICAgICAgICBhdXRvKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MobWF4
U2l6ZSkpOworICAgICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGpzU3RyaW5nLmdldCgpLCBz
dHJpbmcsIG1heFNpemUpOworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBzdHJp
bmcpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfQ0hBUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfc2NoYXIodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRl
eHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdfVFlQRV9VQ0hBUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWNoYXIodmFsdWUsIEpTVmFsdWVU
b051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VSU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfUE9JTlRFUjoK
KyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgY2FzZSBHX1RZUEVfQk9YRUQ6IHsKKyAgICAg
ICAgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFKU1Zh
bHVlSXNOdWxsKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSkpIHsKKyAgICAgICAgICAg
IGF1dG8ganNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QocHJpdi0+anNDb250ZXh0LmdldCgpLCBq
c1ZhbHVlLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB3cmFwcGVkT2JqZWN0ID0ganNjQ29udGV4
dFdyYXBwZWRPYmplY3QoY29udGV4dCwganNPYmplY3QpOworICAgICAgICAgICAgaWYgKCF3cmFw
cGVkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQ
RSh2YWx1ZSksIEpTQ19UWVBFX1ZBTFVFKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGpz
Y1ZhbHVlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjVmFsdWUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQRSh2YWx1ZSksIEdfVFlQ
RV9QVFJfQVJSQVkpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZ0FycmF5ID0ganNjQ29u
dGV4dEpTQXJyYXlUb0dBcnJheShjb250ZXh0LCBqc1ZhbHVlLCBleGNlcHRpb24pOworICAgICAg
ICAgICAgICAgICAgICBpZiAoISpleGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBn
X3ZhbHVlX3Rha2VfYm94ZWQodmFsdWUsIGdBcnJheS5sZWFrUmVmKCkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgKmV4
Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0
LmdldCgpKSwgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIHBvaW50ZXIgdHlwZSIpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChm
dW5kYW1lbnRhbFR5cGUgPT0gR19UWVBFX1BPSU5URVIpCisgICAgICAgICAgICBnX3ZhbHVlX3Nl
dF9wb2ludGVyKHZhbHVlLCB3cmFwcGVkT2JqZWN0KTsKKyAgICAgICAgZWxzZSBpZiAoZnVuZGFt
ZW50YWxUeXBlID09IEdfVFlQRV9CT1hFRCkKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2JveGVk
KHZhbHVlLCB3cmFwcGVkT2JqZWN0KTsKKyAgICAgICAgZWxzZSBpZiAoR19JU19PQkpFQ1Qod3Jh
cHBlZE9iamVjdCkpCisgICAgICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdyYXBw
ZWRPYmplY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
SlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0KCkpLCBBU0NJSUxp
dGVyYWwoIndyYXBwZWQgb2JqZWN0IGlzIG5vdCBhIEdPYmplY3QiKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfTE9ORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwg
ZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1VMT05HOgorICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR19UWVBFX0lOVDY0OgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2YWx1ZSwgSlNWYWx1
ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1VJTlQ2NDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWludDY0KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBq
c1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfRU5V
TToKKyAgICAgICAgZ192YWx1ZV9zZXRfZW51bSh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYt
PmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR19UWVBFX0ZMQUdTOgorICAgICAgICBnX3ZhbHVlX3NldF9mbGFncyh2YWx1ZSwg
SlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1BBUkFNOgorICAgIGNhc2UgR19U
WVBFX0lOVEVSRkFDRToKKyAgICBjYXNlIEdfVFlQRV9WQVJJQU5UOgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYt
PmpzQ29udGV4dC5nZXQoKSksIG1ha2VTdHJpbmcoInVuc3VwcG9ydGVkIHR5cGUgIiwgZ190eXBl
X25hbWUoR19WQUxVRV9UWVBFKHZhbHVlKSkpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworSlNDQ29udGV4dCoganNjX2NvbnRleHRfbmV3KCkKK3sKKyAgICByZXR1cm4gSlNDX0NPTlRF
WFQoZ19vYmplY3RfbmV3KEpTQ19UWVBFX0NPTlRFWFQsIG51bGxwdHIpKTsKK30KKworSlNDQ29u
dGV4dCoganNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKEpTQ1ZpcnR1YWxNYWNo
aW5lKiB2bSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVklSVFVBTF9NQUNI
SU5FKHZtKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIEpTQ19DT05URVhUKGdfb2JqZWN0X25ldyhK
U0NfVFlQRV9DT05URVhULCAidmlydHVhbC1tYWNoaW5lIiwgdm0sIG51bGxwdHIpKTsKK30KKwor
SlNDVmlydHVhbE1hY2hpbmUqIGpzY19jb250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoSlNDQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVY
VChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+dm0uZ2V0
KCk7Cit9CisKK0pTQ0V4Y2VwdGlvbioganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihKU0NDb250
ZXh0ICpjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhU
KGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBjb250ZXh0LT5wcml2LT5leGNlcHRp
b24uZ2V0KCk7Cit9CisKK3ZvaWQganNjX2NvbnRleHRfdGhyb3coSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlND
X0lTX0NPTlRFWFQoY29udGV4dCkpOworCisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBj
b250ZXh0LT5wcml2OworICAgIEpTVmFsdWVSZWYganNNZXNzYWdlID0gbnVsbHB0cjsKKyAgICBp
ZiAoZXJyb3JNZXNzYWdlKSB7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtZXNz
YWdlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlcnJvck1lc3NhZ2UpKTsK
KyAgICAgICAganNNZXNzYWdlID0gSlNWYWx1ZU1ha2VTdHJpbmcocHJpdi0+anNDb250ZXh0Lmdl
dCgpLCBtZXNzYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBwcml2LT5leGNlcHRpb24gPSBqc2NF
eGNlcHRpb25DcmVhdGUoY29udGV4dCwgSlNPYmplY3RNYWtlRXJyb3IocHJpdi0+anNDb250ZXh0
LmdldCgpLCBqc01lc3NhZ2UgPyAxIDogMCwgJmpzTWVzc2FnZSwgbnVsbHB0cikpOworfQorCit2
b2lkIGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NF
eGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05U
RVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19FWENFUFRJT04oZXhj
ZXB0aW9uKSk7CisKKyAgICBjb250ZXh0LT5wcml2LT5leGNlcHRpb24gPSBleGNlcHRpb247Cit9
CisKK3ZvaWQganNjX2NvbnRleHRfcHVzaF9leGNlcHRpb25faGFuZGxlcihKU0NDb250ZXh0KiBj
b250ZXh0LCBKU0NFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBH
RGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlND
X0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaGFuZGxlcik7CisK
KyAgICBjb250ZXh0LT5wcml2LT5leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLCB1
c2VyRGF0YSwgZGVzdHJveU5vdGlmeSB9KTsKK30KKwordm9pZCBqc2NfY29udGV4dF9wb3BfZXhj
ZXB0aW9uX2hhbmRsZXIoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnRl
eHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA+IDEpOworCisgICAgY29udGV4dC0+
cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMucmVtb3ZlTGFzdCgpOworfQorCitib29sIGpzY0NvbnRl
eHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGpzRXhjZXB0aW9uKQoreworICAgIGlmICghanNFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gZXhjZXB0aW9uID0ganNjRXhjZXB0aW9uQ3JlYXRlKGNvbnRleHQs
IGpzRXhjZXB0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghY29udGV4dC0+cHJpdi0+ZXhjZXB0
aW9uSGFuZGxlcnMuaXNFbXB0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBleGNlcHRpb25IYW5kbGVy
ID0gY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMubGFzdCgpOworICAgIGV4Y2VwdGlv
bkhhbmRsZXIuaGFuZGxlcihjb250ZXh0LCBleGNlcHRpb24uZ2V0KCksIGV4Y2VwdGlvbkhhbmRs
ZXIudXNlckRhdGEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0pTQ0NvbnRleHQqIGpzY19j
b250ZXh0X2dldF9jdXJyZW50KCkKK3sKKyAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Q2Fs
bGJhY2tEYXRhKj4oVGhyZWFkOjpjdXJyZW50KCkubV9hcGlEYXRhKTsKKyAgICByZXR1cm4gZGF0
YSA/IGRhdGEtPmNvbnRleHQuZ2V0KCkgOiBudWxscHRyOworfQorCitKU0NWYWx1ZSoganNjX2Nv
bnRleHRfZXZhbHVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY29kZSkKK3sK
KyAgICByZXR1cm4ganNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3VyY2VfdXJpKGNvbnRleHQs
IGNvZGUsIG51bGxwdHIpOworfQorCitKU0NWYWx1ZSoganNjX2NvbnRleHRfZXZhbHVhdGVfd2l0
aF9zb3VyY2VfdXJpKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvZGUsIGNvbnN0
IGNoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChj
b250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29kZSwgbnVsbHB0
cik7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHNjcmlwdEpTKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhjb2RlKSk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNvdXJjZVVSSSA9IHVy
aSA/IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVyaSkpIDogbnVsbHB0cjsK
KyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dC0+cHJpdi0+
anNDb250ZXh0LmdldCgpLCBzY3JpcHRKUy5nZXQoKSwgbnVsbHB0ciwgc291cmNlVVJJLmdldCgp
LCAxLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3Vu
ZGVmaW5lZChjb250ZXh0KTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1
ZShjb250ZXh0LCByZXN1bHQpLmxlYWtSZWYoKTsKK30KKwordm9pZCBqc2NfY29udGV4dF9zZXRf
dmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgSlNDVmFsdWUqIHZh
bHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNf
VkFMVUUodmFsdWUpKTsKKworICAgIGF1dG8gY29udGV4dE9iamVjdCA9IGpzY0NvbnRleHRHZXRP
ckNyZWF0ZVZhbHVlKGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0LT5w
cml2LT5qc0NvbnRleHQuZ2V0KCkpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0
eShjb250ZXh0T2JqZWN0LmdldCgpLCBuYW1lLCB2YWx1ZSk7Cit9CisKK0pTQ1ZhbHVlKiBqc2Nf
Y29udGV4dF9nZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVs
bHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBh
dXRvIGNvbnRleHRPYmplY3QgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgpKSk7
CisgICAgcmV0dXJuIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGNvbnRleHRPYmplY3Qu
Z2V0KCksIG5hbWUpOworfQorCitKU0NDbGFzcyoganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mo
SlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENs
YXNzLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKG5hbWUsIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFw
YXJlbnRDbGFzcyB8fCBKU0NfSVNfQ0xBU1MocGFyZW50Q2xhc3MpLCBudWxscHRyKTsKKworICAg
IGF1dG8ganNjQ2xhc3MgPSBqc2NDbGFzc0NyZWF0ZShjb250ZXh0LCBuYW1lLCBwYXJlbnRDbGFz
cywgZGVzdHJveUZ1bmN0aW9uKTsKKyAgICB3cmFwcGVyTWFwKGNvbnRleHQpLnJlZ2lzdGVyQ2xh
c3MoanNjQ2xhc3MuZ2V0KCkpOworICAgIHJldHVybiBqc2NDbGFzcy5nZXQoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNzgyZjBlOWMxMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSwxMjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9f
SlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25s
eSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgSlNDQ29udGV4dF9oCisjZGVmaW5lIEpTQ0NvbnRleHRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NF
eGNlcHRpb24uaD4KKyNpbmNsdWRlIDxqc2MvSlNDQ2xhc3MuaD4KKyNpbmNsdWRlIDxqc2MvSlND
VmFsdWUuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmlydHVhbE1hY2hpbmUuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIEpTQ19UWVBFX0NPTlRFWFQgICAgICAgICAgICAoanNjX2NvbnRleHRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0NPTlRFWFQob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dCkp
CisjZGVmaW5lIEpTQ19JU19DT05URVhUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX0NPTlRFWFQpKQorI2RlZmluZSBKU0NfQ09OVEVYVF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQ
RV9DT05URVhULCBKU0NDb250ZXh0Q2xhc3MpKQorI2RlZmluZSBKU0NfSVNfQ09OVEVYVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9DT05U
RVhUKSkKKyNkZWZpbmUgSlNDX0NPTlRFWFRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgSlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dENsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0
IF9KU0NDb250ZXh0Q2xhc3MgSlNDQ29udGV4dENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Nv
bnRleHRQcml2YXRlIEpTQ0NvbnRleHRQcml2YXRlOworCit0eXBlZGVmIHZvaWQgKCogSlNDRXhj
ZXB0aW9uSGFuZGxlcikgKEpTQ0NvbnRleHQgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSlNDRXhjZXB0aW9uICpleGNlcHRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgdXNlcl9kYXRhKTsKKwor
c3RydWN0IF9KU0NDb250ZXh0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2
YXRlID4qLworICAgIEpTQ0NvbnRleHRQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0ND
b250ZXh0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lk
ICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2
b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUKK2pzY19jb250ZXh0X2dl
dF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK0pTQ19BUEkgSlNDQ29udGV4dCAqCitq
c2NfY29udGV4dF9uZXcgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJIEpT
Q0NvbnRleHQgKgoranNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lIChKU0NWaXJ0
dWFsTWFjaGluZSAgKnZtKTsKKworSlNDX0FQSSBKU0NWaXJ0dWFsTWFjaGluZSAqCitqc2NfY29u
dGV4dF9nZXRfdmlydHVhbF9tYWNoaW5lICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4
dCk7CisKK0pTQ19BUEkgSlNDRXhjZXB0aW9uICoKK2pzY19jb250ZXh0X2dldF9leGNlcHRpb24g
ICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0KTsKKworSlNDX0FQSSB2b2lk
Citqc2NfY29udGV4dF90aHJvdyAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAg
ICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAgICAgICAgICplcnJvcl9tZXNzYWdlKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4
dF90aHJvd19leGNlcHRpb24gICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDRXhjZXB0aW9uICAgICAg
ICpleGNlcHRpb24pOworCitKU0NfQVBJIHZvaWQKK2pzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9u
X2hhbmRsZXIgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU0NFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgdXNl
cl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5v
dGlmeSAgICAgIGRlc3Ryb3lfbm90aWZ5KTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF9w
b3BfZXhjZXB0aW9uX2hhbmRsZXIgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCk7CisK
K0pTQ19BUEkgSlNDQ29udGV4dCAqCitqc2NfY29udGV4dF9nZXRfY3VycmVudCAgICAgICAgICAg
ICAgKHZvaWQpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY19jb250ZXh0X2V2YWx1YXRlICAg
ICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKmNvZGUpOworCitK
U0NfQVBJIEpTQ1ZhbHVlICoKK2pzY19jb250ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaSAo
SlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKmNvZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqdXJpKTsKKworSlNDX0FQSSB2
b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAg
ICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBKU0NWYWx1ZSAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitq
c2NfY29udGV4dF9nZXRfdmFsdWUgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAgICAgICAgICpuYW1lKTsKKworSlNDX0FQSSBKU0NDbGFzcyAqCitqc2NfY29udGV4dF9yZWdp
c3Rlcl9jbGFzcyAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NDbGFzcyAgICAgICAg
ICAgKnBhcmVudF9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0Rlc3Ryb3lOb3RpZnkgICAgICBkZXN0cm95X2Z1bmN0aW9uKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIEpTQ0NvbnRleHRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOTgwZGExODBiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaApAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NW
YWx1ZS5oIgorI2luY2x1ZGUgIkpTQ29udGV4dFJlZi5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dS
ZWZQdHIuaD4KKworR1JlZlB0cjxKU0NDb250ZXh0PiBqc2NDb250ZXh0R2V0T3JDcmVhdGUoSlNH
bG9iYWxDb250ZXh0UmVmKTsKK0pTR2xvYmFsQ29udGV4dFJlZiBqc2NDb250ZXh0R2V0SlNDb250
ZXh0KEpTQ0NvbnRleHQqKTsKK0dSZWZQdHI8SlNDVmFsdWU+IGpzY0NvbnRleHRHZXRPckNyZWF0
ZVZhbHVlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKK3ZvaWQganNjQ29udGV4dFZhbHVlRGVz
dHJveWVkKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRl
eHRHZXRKU1dyYXBwZXIoSlNDQ29udGV4dCosIGdwb2ludGVyKTsKK0pTQzo6SlNPYmplY3QqIGpz
Y0NvbnRleHRHZXRPckNyZWF0ZUpTV3JhcHBlcihKU0NDb250ZXh0KiwgSlNDbGFzc1JlZiwgSlNW
YWx1ZVJlZiBwcm90b3R5cGUgPSBudWxscHRyLCBncG9pbnRlciA9IG51bGxwdHIsIEdEZXN0cm95
Tm90aWZ5ID0gbnVsbHB0cik7CitncG9pbnRlciBqc2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0ND
b250ZXh0KiwgSlNPYmplY3RSZWYpOworCitzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKKyAgICBHUmVm
UHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQ7CisgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IHByZXNl
cnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIGNhbGxlZVZhbHVlOworICAgIEpTVmFsdWVS
ZWYgdGhpc1ZhbHVlOworICAgIHNpemVfdCBhcmd1bWVudENvdW50OworICAgIGNvbnN0IEpTVmFs
dWVSZWYqIGFyZ3VtZW50czsKKworICAgIENhbGxiYWNrRGF0YSogbmV4dDsKK307CitDYWxsYmFj
a0RhdGEganNjQ29udGV4dFB1c2hDYWxsYmFjayhKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZiBjYWxs
ZWVWYWx1ZSwgSlNWYWx1ZVJlZiB0aGlzVmFsdWUsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmKiBhcmd1bWVudHMpOwordm9pZCBqc2NDb250ZXh0UG9wQ2FsbGJhY2soSlND
Q29udGV4dCosIENhbGxiYWNrRGF0YSYmKTsKKworYm9vbCBqc2NDb250ZXh0SGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NDb250
ZXh0R0FycmF5VG9KU0FycmF5KEpTQ0NvbnRleHQqLCBHUHRyQXJyYXkqLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOworSlNWYWx1ZVJlZiBqc2NDb250ZXh0R1ZhbHVlVG9KU1ZhbHVlKEpTQ0NvbnRl
eHQqLCBjb25zdCBHVmFsdWUqLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwordm9pZCBqc2NDb250
ZXh0SlNWYWx1ZVRvR1ZhbHVlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmLCBHVHlwZSwgR1ZhbHVl
KiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2ds
aWIvSlNDRGVmaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5j
M2ZmYTJiNGZkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NEZWZpbmVzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NEZWZpbmVz
X2gKKyNkZWZpbmUgSlNDRGVmaW5lc19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRlZiBH
X09TX1dJTjMyCisjICAgIGlmIGRlZmluZWQoQlVJTERJTkdfSmF2YVNjcmlwdENvcmUpIHx8IGRl
ZmluZWQoU1RBVElDQUxMWV9MSU5LRURfV0lUSF9KYXZhU2NyaXB0Q29yZSkKKyMgICAgICAgIGRl
ZmluZSBKU0NfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgICBk
ZWZpbmUgSlNDX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgZW5kaWYKKyNlbHNlCisj
ICAgIGRlZmluZSBKU0NfQVBJIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkp
CisjZW5kaWYKKworI2RlZmluZSBKU0NfREVQUkVDQVRFRCBKU0NfQVBJIEdfREVQUkVDQVRFRAor
I2RlZmluZSBKU0NfREVQUkVDQVRFRF9GT1IoZikgSlNDX0FQSSBHX0RFUFJFQ0FURURfRk9SKGYp
CisKKyNlbmRpZiAvKiBKU0NEZWZpbmVzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjMzMGQzOTU5M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTQ0V4Y2VwdGlvbi5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBl
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb25Qcml2YXRlIHsKKyAgICBKU0NDb250
ZXh0KiBjb250ZXh0OworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGpzRXhjZXB0aW9u
OworICAgIGJvb2wgY2FjaGVkOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVzc2FnZTsKKyAgICB1
bnNpZ25lZCBsaW5lTnVtYmVyOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlVVJJOworfSBK
U0NFeGNlcHRpb25Qcml2YXRlOworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDRXhjZXB0aW9uLCBq
c2NfZXhjZXB0aW9uLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCBqc2NFeGNlcHRpb25E
aXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NFeGNlcHRpb25Qcml2YXRlKiBwcml2
ID0gSlNDX0VYQ0VQVElPTihvYmplY3QpLT5wcml2OworICAgIGlmIChwcml2LT5jb250ZXh0KSB7
CisgICAgICAgIGdfb2JqZWN0X3JlbW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocHJpdi0+Y29u
dGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcHJpdi0+Y29udGV4dCkpOworICAgICAg
ICBwcml2LT5jb250ZXh0ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhq
c2NfZXhjZXB0aW9uX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQganNjX2V4Y2VwdGlvbl9jbGFzc19pbml0KEpTQ0V4Y2VwdGlvbkNsYXNzKiBrbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwor
ICAgIG9iakNsYXNzLT5kaXNwb3NlID0ganNjRXhjZXB0aW9uRGlzcG9zZTsKK30KKworR1JlZlB0
cjxKU0NFeGNlcHRpb24+IGpzY0V4Y2VwdGlvbkNyZWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGpzRXhjZXB0aW9uKQoreworICAgIEdSZWZQdHI8SlNDRXhjZXB0aW9uPiBleGNl
cHRpb24gPSBhZG9wdEdSZWYoSlNDX0VYQ0VQVElPTihnX29iamVjdF9uZXcoSlNDX1RZUEVfRVhD
RVBUSU9OLCBudWxscHRyKSkpOworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoY29udGV4dCk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGpzQ29u
dGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2tlcih2bSk7CisgICAgZXhjZXB0aW9uLT5wcml2LT5qc0V4Y2VwdGlvbi5zZXQodm0s
IHRvSlMoSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwganNFeGNlcHRpb24sIG51bGxwdHIpKSk7
CisgICAgLy8gVGhlIGNvbnRleHQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgZXhjZXB0
aW9uLCBzbyB3ZSBjYW4ndCByZWYgdGhlIGNvbnRleHQuIFdlIHVzZSBhIHdlYWsKKyAgICAvLyBw
b2ludGVyIGluc3RlYWQgdG8gaW52YWxpZGF0ZSB0aGUgZXhjZXB0aW9uIGlmIHRoZSBjb250ZXh0
IGlzIGRlc3Ryb3llZCBiZWZvcmUuCisgICAgZXhjZXB0aW9uLT5wcml2LT5jb250ZXh0ID0gY29u
dGV4dDsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGNvbnRleHQpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmV4Y2VwdGlvbi0+cHJpdi0+Y29udGV4dCkpOworICAg
IHJldHVybiBleGNlcHRpb247Cit9CisKK0pTVmFsdWVSZWYganNjRXhjZXB0aW9uR2V0SlNWYWx1
ZShKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gdG9SZWYoZXhjZXB0aW9u
LT5wcml2LT5qc0V4Y2VwdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQganNjRXhjZXB0aW9uRW5zdXJl
UHJvcGVydGllcyhKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NFeGNlcHRpb25Q
cml2YXRlKiBwcml2ID0gZXhjZXB0aW9uLT5wcml2OworICAgIGlmIChwcml2LT5jYWNoZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmNhY2hlZCA9IHRydWU7CisKKyAgICBhdXRvIHZh
bHVlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYocHJp
di0+anNFeGNlcHRpb24uZ2V0KCkpKTsKKyAgICBhdXRvIHByb3BlcnR5VmFsdWUgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJtZXNzYWdlIikp
OworICAgIGlmICghanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChwcm9wZXJ0eVZhbHVlLmdldCgpKSkK
KyAgICAgICAgcHJpdi0+bWVzc2FnZS5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHByb3BlcnR5
VmFsdWUuZ2V0KCkpKTsKKyAgICBwcm9wZXJ0eVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9v
YmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGluZSIpKTsKKyAgICBpZiAoIWpzY192
YWx1ZV9pc191bmRlZmluZWQocHJvcGVydHlWYWx1ZS5nZXQoKSkpCisgICAgICAgIHByaXYtPmxp
bmVOdW1iZXIgPSBqc2NfdmFsdWVfdG9faW50MzIocHJvcGVydHlWYWx1ZS5nZXQoKSk7CisgICAg
cHJvcGVydHlWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2
YWx1ZS5nZXQoKSwgInNvdXJjZVVSTCIpKTsKKyAgICBpZiAoIWpzY192YWx1ZV9pc191bmRlZmlu
ZWQocHJvcGVydHlWYWx1ZS5nZXQoKSkpCisgICAgICAgIHByaXYtPnNvdXJjZVVSSS5yZXNldChq
c2NfdmFsdWVfdG9fc3RyaW5nKHByb3BlcnR5VmFsdWUuZ2V0KCkpKTsKK30KKworY29uc3QgY2hh
cioganNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZShKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbiksIG51
bGxwdHIpOworCisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IGV4Y2VwdGlvbi0+cHJp
djsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwcml2LT5jb250ZXh0LCBudWxscHRyKTsKKwor
ICAgIGpzY0V4Y2VwdGlvbkVuc3VyZVByb3BlcnRpZXMoZXhjZXB0aW9uKTsKKyAgICByZXR1cm4g
cHJpdi0+bWVzc2FnZS5nZXQoKTsKK30KKworZ3VpbnQganNjX2V4Y2VwdGlvbl9nZXRfbGluZV9u
dW1iZXIoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCAwKTsKKworICAgIEpTQ0V4Y2VwdGlvblBy
aXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
cHJpdi0+Y29udGV4dCwgMCk7CisKKyAgICBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4
Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYtPmxpbmVOdW1iZXI7Cit9CisKK2NvbnN0IGNoYXIq
IGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBu
dWxscHRyKTsKKworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnBy
aXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisK
KyAgICBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IHByaXYtPnNvdXJjZVVSSS5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NFeGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNDJhOGQ4MDg4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDRXhjZXB0aW9uLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NFeGNlcHRpb25faAor
I2RlZmluZSBKU0NFeGNlcHRpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZ
UEVfRVhDRVBUSU9OICAgICAgICAgICAgKGpzY19leGNlcHRpb25fZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgSlNDX0VYQ0VQVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBKU0NfVFlQRV9FWENFUFRJT04sIEpTQ0V4Y2VwdGlvbikpCisjZGVmaW5lIEpT
Q19JU19FWENFUFRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgSlNDX1RZUEVfRVhDRVBUSU9OKSkKKyNkZWZpbmUgSlNDX0VYQ0VQVElPTl9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9FWENF
UFRJT04sIEpTQ0V4Y2VwdGlvbkNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX0VYQ0VQVElPTl9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9FWENF
UFRJT04pKQorI2RlZmluZSBKU0NfRVhDRVBUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX0VYQ0VQVElPTiwgSlNDRXhjZXB0aW9u
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDRXhjZXB0aW9uIEpTQ0V4Y2VwdGlvbjsKK3R5
cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb25DbGFzcyBKU0NFeGNlcHRpb25DbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9KU0NFeGNlcHRpb25Qcml2YXRlIEpTQ0V4Y2VwdGlvblByaXZhdGU7CisKK3N0
cnVjdCBfSlNDRXhjZXB0aW9uIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2
YXRlID4qLworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX0pT
Q0V4Y2VwdGlvbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAg
dm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQx
KSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAo
Kl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfZXhjZXB0
aW9uX2dldF90eXBlICAgICAgICAodm9pZCk7CisKK0pTQ19BUEkgY29uc3QgY2hhciAqCitqc2Nf
ZXhjZXB0aW9uX2dldF9tZXNzYWdlICAgICAoSlNDRXhjZXB0aW9uICpleGNlcHRpb24pOworCitK
U0NfQVBJIGd1aW50Citqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlciAoSlNDRXhjZXB0aW9u
ICpleGNlcHRpb24pOworCitKU0NfQVBJIGNvbnN0IGNoYXIgKgoranNjX2V4Y2VwdGlvbl9nZXRf
c291cmNlX3VyaSAgKEpTQ0V4Y2VwdGlvbiAqZXhjZXB0aW9uKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIEpTQ0V4Y2VwdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYmI1ZGJjMGQxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0NDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uLmgiCisj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCitHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4ganNj
RXhjZXB0aW9uQ3JlYXRlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKK0pTVmFsdWVSZWYganNj
RXhjZXB0aW9uR2V0SlNWYWx1ZShKU0NFeGNlcHRpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NHTGliV3JhcHBlck9iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMyY2FiYTliNWJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmgK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDR0xpYldyYXBwZXJPYmplY3Qgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEpTQ0dMaWJXcmFwcGVy
T2JqZWN0KGdwb2ludGVyIG9iamVjdCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQor
ICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2Rlc3Ryb3lGdW5jdGlvbihk
ZXN0cm95RnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIH5KU0NHTGliV3JhcHBlck9iamVj
dCgpCisgICAgeworICAgICAgICBpZiAobV9kZXN0cm95RnVuY3Rpb24pCisgICAgICAgICAgICBt
X2Rlc3Ryb3lGdW5jdGlvbihtX29iamVjdCk7CisgICAgfQorCisgICAgZ3BvaW50ZXIgb2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBncG9pbnRlciBt
X29iamVjdCB7IG51bGxwdHIgfTsKKyAgICBHRGVzdHJveU5vdGlmeSBtX2Rlc3Ryb3lGdW5jdGlv
biB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjFiNGEwOTBjMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApAQCAtMCwwICsxLDYxMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNDVmFsdWUuaCIKKworI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJKU0ND
YWxsYmFja0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDVmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNsdWRl
IDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIv
V1RGR1R5cGUuaD4KKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9DT05URVhULAor
fTsKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlUHJpdmF0ZSB7CisgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0OworICAgIEpTVmFsdWVSZWYganNWYWx1ZTsKK30gSlNDVmFsdWVQcml2
YXRlOworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX09C
SkVDVCkKKworc3RhdGljIHZvaWQganNjVmFsdWVHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQorewor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisg
ICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
anNjVmFsdWVTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ1ZhbHVlUHJp
dmF0ZSogcHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgc3dpdGNoIChwcm9w
SUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IEpT
Q19DT05URVhUKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWYWx1
ZURpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9
IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsKKyAg
ICAgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250
ZXh0LmdldCgpKTsKKworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGpzQ29udGV4dCwgcHJpdi0+
anNWYWx1ZSk7CisgICAgICAgIGpzY0NvbnRleHRWYWx1ZURlc3Ryb3llZChwcml2LT5jb250ZXh0
LmdldCgpLCBwcml2LT5qc1ZhbHVlKTsKKyAgICAgICAgcHJpdi0+anNWYWx1ZSA9IG51bGxwdHI7
CisgICAgICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNU
X0NMQVNTKGpzY192YWx1ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIGpzY192YWx1ZV9jbGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3MqIGtsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAg
ICBvYmpDbGFzcy0+Z2V0X3Byb3BlcnR5ID0ganNjVmFsdWVHZXRQcm9wZXJ0eTsKKyAgICBvYmpD
bGFzcy0+c2V0X3Byb3BlcnR5ID0ganNjVmFsdWVTZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
ZGlzcG9zZSA9IGpzY1ZhbHVlRGlzcG9zZTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVYVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICJKU0ND
b250ZXh0IiwKKyAgICAgICAgICAgICJKU0MgQ29udGV4dCIsCisgICAgICAgICAgICBKU0NfVFlQ
RV9DT05URVhULAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitKU1ZhbHVl
UmVmIGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIHZh
bHVlLT5wcml2LT5qc1ZhbHVlOworfQorCitKU0NWYWx1ZSoganNjVmFsdWVDcmVhdGUoSlNDQ29u
dGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIGF1dG8qIHZhbHVlID0g
SlNDX1ZBTFVFKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9WQUxVRSwgImNvbnRleHQiLCBjb250ZXh0
LCBudWxscHRyKSk7CisgICAgSlNWYWx1ZVByb3RlY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChj
b250ZXh0KSwganNWYWx1ZSk7CisgICAgdmFsdWUtPnByaXYtPmpzVmFsdWUgPSBqc1ZhbHVlOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVk
KEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lT
X0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRP
ckNyZWF0ZVZhbHVlKGNvbnRleHQsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzY0NvbnRleHRHZXRK
U0NvbnRleHQoY29udGV4dCkpKS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9p
c191bmRlZmluZWQoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJp
diA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoanNjQ29udGV4
dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisK
K0pTQ0NvbnRleHQqIGpzY192YWx1ZV9nZXRfY29udGV4dChKU0NWYWx1ZSogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisK
KyAgICByZXR1cm4gdmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCk7Cit9CisKK0pTQ1ZhbHVlKiBq
c2NfdmFsdWVfbmV3X251bGwoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1
cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdWxsKGpz
Y0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCkpKS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFu
IGpzY192YWx1ZV9pc19udWxsKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZh
dGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzTnVsbChqc2NDb250
ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30K
KworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfbnVtYmVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIGRv
dWJsZSBudW1iZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQo
Y29udGV4dCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKGNvbnRleHQsIEpTVmFsdWVNYWtlTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29u
dGV4dCksIG51bWJlcikpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX251
bWJlcihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lT
X1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFs
dWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc051bWJlcihqc2NDb250ZXh0R2V0SlNDb250
ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworZG91YmxlIGpz
Y192YWx1ZV90b19kb3VibGUoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCkpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7
CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8gcmVzdWx0ID0g
SlNWYWx1ZVRvTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQo
KSksIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnaW50MzIganNjX3ZhbHVlX3RvX2ludDMyKEpTQ1ZhbHVl
KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKGpzY192YWx1ZV90b19kb3VibGUo
dmFsdWUpKTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfYm9vbGVhbihKU0NDb250ZXh0
KiBjb250ZXh0LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChK
U0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29udGV4
dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VCb29sZWFuKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCksIHZhbHVlKSkubGVha1JlZigpOworfQorCitnYm9vbGVhbiBq
c2NfdmFsdWVfaXNfYm9vbGVhbihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2
YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc0Jvb2xlYW4oanNj
Q29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7
Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV90b19ib29sZWFuKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisK
KyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNW
YWx1ZVRvQm9vbGVhbihqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkp
LCBwcml2LT5qc1ZhbHVlKTsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfc3RyaW5nKEpT
Q0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBKU1Zh
bHVlUmVmIGpzU3RyaW5nVmFsdWU7CisgICAgaWYgKHN0cmluZykgeworICAgICAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cmluZykpOworICAgICAgICBqc1N0cmluZ1ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJp
bmcoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNTdHJpbmcuZ2V0KCkpOworICAg
IH0gZWxzZQorICAgICAgICBqc1N0cmluZ1ZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNjQ29u
dGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGpzU3RyaW5nVmFsdWUpLmxlYWtSZWYoKTsKK30K
KworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX3N0cmluZyhKU0NWYWx1ZSogdmFsdWUpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAg
SlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJ
c1N0cmluZyhqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2
LT5qc1ZhbHVlKTsKK30KKworY2hhcioganNjX3ZhbHVlX3RvX3N0cmluZyhKU0NWYWx1ZSogdmFs
dWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVs
bHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGpzU3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzY0NvbnRleHRHZXRKU0Nv
bnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pKTsK
KyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQu
Z2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6ZV90
IG1heFNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoanNTdHJpbmcuZ2V0
KCkpOworICAgIGF1dG8qIHN0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhtYXhT
aXplKSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZy5nZXQoKSwgc3RyaW5n
LCBtYXhTaXplKTsKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVl
X25ld19hcnJheShKU0NDb250ZXh0KiBjb250ZXh0LCBHVHlwZSBmaXJzdEl0ZW1UeXBlLCAuLi4p
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51
bGxwdHIpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8q
IGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgYXV0byog
anNBcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGpzQ29udGV4dCwgMCwgbnVsbHB0ciwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0
LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGpzQXJy
YXlPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBqc0FycmF5LCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgaW5kZXgg
PSAwOworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmaXJzdEl0ZW1UeXBl
KTsKKyAgICBHVHlwZSBpdGVtVHlwZSA9IGZpcnN0SXRlbVR5cGU7CisgICAgd2hpbGUgKGl0ZW1U
eXBlICE9IEdfVFlQRV9OT05FKSB7CisgICAgICAgIEdWYWx1ZSBpdGVtOworICAgICAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IGVycm9yOworICAgICAgICBHX1ZBTFVFX0NPTExFQ1RfSU5JVCgmaXRl
bSwgaXRlbVR5cGUsIGFyZ3MsIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTLCAmZXJyb3Iub3V0UHRy
KCkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IHRvUmVm
KEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiZmFpbGVk
IHRvIGNvbGxlY3QgYXJyYXkgaXRlbTogIiwgZXJyb3IuZ2V0KCkpKSk7CisgICAgICAgICAgICBq
c2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIGpzQXJyYXkgPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBhdXRvKiBqc1ZhbHVlID0ganNjQ29udGV4dEdWYWx1ZVRvSlNWYWx1ZShj
b250ZXh0LCAmaXRlbSwgJmV4Y2VwdGlvbik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJml0ZW0p
OworICAgICAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQs
IGV4Y2VwdGlvbikpIHsKKyAgICAgICAgICAgIGpzQXJyYXkgPSBudWxscHRyOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRl
eChqc0NvbnRleHQsIGpzQXJyYXlPYmplY3QsIGluZGV4LCBqc1ZhbHVlLCAmZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBl
eGNlcHRpb24pKSB7CisgICAgICAgICAgICBqc0FycmF5ID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaXRlbVR5cGUgPSB2YV9hcmcoYXJncywgR1R5
cGUpOworICAgICAgICBpbmRleCsrOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBy
ZXR1cm4ganNBcnJheSA/IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGpzQXJy
YXkpLmxlYWtSZWYoKSA6IG51bGxwdHI7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Fy
cmF5X2Zyb21fZ2FycmF5KEpTQ0NvbnRleHQqIGNvbnRleHQsIEdQdHJBcnJheSogZ0FycmF5KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxs
cHRyKTsKKworICAgIGlmICghZ0FycmF5IHx8ICFnQXJyYXktPmxlbikKKyAgICAgICAgcmV0dXJu
IGpzY192YWx1ZV9uZXdfYXJyYXkoY29udGV4dCwgR19UWVBFX05PTkUpOworCisgICAgSlNWYWx1
ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGF1dG8qIGpzQXJyYXkgPSBqc2NDb250ZXh0
R0FycmF5VG9KU0FycmF5KGNvbnRleHQsIGdBcnJheSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBleGNlcHRpb24pKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVW
YWx1ZShjb250ZXh0LCBqc0FycmF5KS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1
ZV9pc19hcnJheShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc0FycmF5KGpzY0NvbnRleHRHZXRK
U0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitKU0NW
YWx1ZSoganNjX3ZhbHVlX25ld19vYmplY3QoSlNDQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIg
aW5zdGFuY2UsIEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWluc3RhbmNlIHx8IEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisg
ICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGluc3RhbmNlID8g
dG9SZWYoanNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihqc2NDbGFzcywgaW5zdGFuY2UpKSA6
IEpTT2JqZWN0TWFrZShqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBudWxscHRyLCBu
dWxscHRyKSkubGVha1JlZigpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfb2JqZWN0KEpT
Q1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUo
dmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJp
djsKKyAgICByZXR1cm4gSlNWYWx1ZUlzT2JqZWN0KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJp
di0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitnYm9vbGVhbiBqc2NfdmFs
dWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxT
RSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgRkFMU0UpOworCisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgLy8gV2UgdXNlIGV2YWx1YXRlIGhl
cmUgYW5kIG5vdCBnZXRfdmFsdWUgYmVjYXVzZSBjbGFzc2VzIGFyZSBub3QgbmVjZXNzYXJpbHkg
YSBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBodHRwOi8vd3d3LmVjbWEt
aW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWdsb2JhbC1lbnZp
cm9ubWVudC1yZWNvcmRzCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUocHJpdi0+Y29udGV4dC5nZXQoKSwgbmFtZSkpOwor
ICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4
dC5nZXQoKSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNP
YmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgY29uc3RydWN0b3It
PnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworCisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWUgPSBKU1ZhbHVlSXNJbnN0
YW5jZU9mQ29uc3RydWN0b3IoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCBvYmplY3QsICZleGNl
cHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+
Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAg
cmV0dXJuIHJldHVyblZhbHVlOworfQorCit2b2lkIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3Bl
cnR5KEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgSlNDVmFsdWUqIHByb3BlcnR5
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChuYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19WQUxVRShw
cm9wZXJ0eSkpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7Cisg
ICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0
LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChw
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShqc0NvbnRl
eHQsIG9iamVjdCwgcHJvcGVydHlOYW1lLmdldCgpLCBwcm9wZXJ0eS0+cHJpdi0+anNWYWx1ZSwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAmZXhjZXB0aW9uKTsKKyAgICBqc2NDb250ZXh0SGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKTsKK30K
KworSlNDVmFsdWUqIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KEpTQ1ZhbHVlKiB2YWx1
ZSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNf
VkFMVUUodmFsdWUpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBu
dWxscHRyKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAg
IGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5n
ZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIEpTT2JqZWN0
UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJp
di0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9u
ZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisKKyAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5
KGpzQ29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCksICZleGNlcHRpb24pOworICAg
IGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQo
KSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHBy
aXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIHJlc3VsdCkubGVha1JlZigpOworfQorCit2b2lkIGpz
Y192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KEpTQ1ZhbHVlKiB2YWx1ZSwgdW5z
aWduZWQgaW5kZXgsIEpTQ1ZhbHVlKiBwcm9wZXJ0eSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVF
KHByb3BlcnR5KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsK
KyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRl
eHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVl
LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAg
IEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGpzQ29udGV4dCwgb2JqZWN0LCBpbmRleCwgcHJv
cGVydHktPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGpzY0NvbnRleHRIYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pOworfQorCitK
U0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoSlNDVmFsdWUq
IHZhbHVlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0Nf
SVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9
IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxs
cHRyOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQs
IHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisK
KyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGpzQ29u
dGV4dCwgb2JqZWN0LCBpbmRleCwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5k
bGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAg
ICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7
CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dC5n
ZXQoKSwgcmVzdWx0KS5sZWFrUmVmKCk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEpTQ1ZhbHVlPiBq
c2NWYWx1ZUNhbGxGdW5jdGlvbihKU0NWYWx1ZSogdmFsdWUsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBHVHlwZSBmaXJzdFBhcmFtZXRlclR5cGUsIHZhX2xp
c3QgYXJncykKK3sKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAg
ICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQu
Z2V0KCkpOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIFZlY3Rv
cjxKU1ZhbHVlUmVmPiBhcmd1bWVudHM7CisgICAgR1R5cGUgcGFyYW1ldGVyVHlwZSA9IGZpcnN0
UGFyYW1ldGVyVHlwZTsKKyAgICB3aGlsZSAocGFyYW1ldGVyVHlwZSAhPSBHX1RZUEVfTk9ORSkg
eworICAgICAgICBHVmFsdWUgcGFyYW1ldGVyOworICAgICAgICBHVW5pcXVlT3V0UHRyPGNoYXI+
IGVycm9yOworICAgICAgICBHX1ZBTFVFX0NPTExFQ1RfSU5JVCgmcGFyYW1ldGVyLCBwYXJhbWV0
ZXJUeXBlLCBhcmdzLCBHX1ZBTFVFX05PQ09QWV9DT05URU5UUywgJmVycm9yLm91dFB0cigpKTsK
KyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBleGNlcHRpb24gPSB0b1JlZihKU0M6
OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIG1ha2VTdHJpbmcoImZhaWxlZCB0byBj
b2xsZWN0IGZ1bmN0aW9uIHBhcmFtYXRlcjogIiwgZXJyb3IuZ2V0KCkpKSk7CisgICAgICAgICAg
ICBqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld191
bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byoganNWYWx1ZSA9IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUocHJpdi0+Y29udGV4dC5nZXQo
KSwgJnBhcmFtZXRlciwgJmV4Y2VwdGlvbik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnBhcmFt
ZXRlcik7CisgICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJp
di0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBqc2NDb250
ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCBqc1ZhbHVlKTsKKworICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKGpzVmFsdWUpOworICAgICAgICBwYXJhbWV0ZXJUeXBlID0g
dmFfYXJnKGFyZ3MsIEdUeXBlKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LCBmdW5jdGlvbiwgdGhpc09iamVjdCwgYXJn
dW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICByZXR1cm4gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVk
KHByaXYtPmNvbnRleHQuZ2V0KCkpKTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVh
dGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCByZXN1bHQpOworfQorCitKU0NWYWx1ZSoganNj
X3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciog
bmFtZSwgR1R5cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2
YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBw
cml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJl
dHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtZXRob2ROYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJlZiBmdW5jdGlvblZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShqc0NvbnRleHQsIG9iamVjdCwgbWV0aG9kTmFtZS5nZXQoKSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChw
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVl
X25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBKU09iamVjdFJlZiBm
dW5jdGlvbiA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIGZ1bmN0aW9uVmFsdWUsICZleGNl
cHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+
Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdf
dW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgdmFfbGlzdCBhcmdzOworICAg
IHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFyYW1ldGVyVHlwZSk7CisgICAgYXV0byByZXN1bHQgPSBq
c2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1ZSwgZnVuY3Rpb24sIG9iamVjdCwgZmlyc3RQYXJhbWV0
ZXJUeXBlLCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0Lmxl
YWtSZWYoKTsKK30KKwordm9pZCBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRh
KEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0NWYWx1ZVByb3Bl
cnR5RmxhZ3MgZmxhZ3MsIEpTQ1ZhbHVlKiBwcm9wZXJ0eVZhbHVlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcm9w
ZXJ0eU5hbWUpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7Cisg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gZGVzY3JpcHRvciA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3
X29iamVjdChwcml2LT5jb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gdHJ1ZVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYm9vbGVh
bihwcml2LT5jb250ZXh0LmdldCgpLCBUUlVFKSk7CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVF
X1BST1BFUlRZX0NPTkZJR1VSQUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJv
cGVydHkoZGVzY3JpcHRvci5nZXQoKSwgImNvbmZpZ3VyYWJsZSIsIHRydWVWYWx1ZS5nZXQoKSk7
CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUpCisgICAgICAg
IGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJlbnVtZXJh
YmxlIiwgdHJ1ZVZhbHVlLmdldCgpKTsKKyAgICBpZiAocHJvcGVydHlWYWx1ZSkKKyAgICAgICAg
anNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgInZhbHVlIiwg
cHJvcGVydHlWYWx1ZSk7CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRB
QkxFKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdl
dCgpLCAid3JpdGFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+
IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUocHJpdi0+Y29udGV4dC5n
ZXQoKSwgIk9iamVjdCIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKG9iamVjdC5nZXQoKSwgImRlZmluZVBy
b3BlcnR5IiwKKyAgICAgICAgSlNDX1RZUEVfVkFMVUUsIHZhbHVlLCBHX1RZUEVfU1RSSU5HLCBw
cm9wZXJ0eU5hbWUsIEpTQ19UWVBFX1ZBTFVFLCBkZXNjcmlwdG9yLmdldCgpLCBHX1RZUEVfTk9O
RSkpOworfQorCit2b2lkIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29y
KEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0NWYWx1ZVByb3Bl
cnR5RmxhZ3MgZmxhZ3MsIEdUeXBlIHByb3BlcnR5VHlwZSwgR0NhbGxiYWNrIGdldHRlciwgR0Nh
bGxiYWNrIHNldHRlcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1
ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlOYW1lKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfSU5WQUxJRCAmJiBwcm9wZXJ0eVR5cGUgIT0g
R19UWVBFX05PTkUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ2V0dGVyIHx8IHNldHRlcik7CisK
KyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiBkZXNjcmlwdG9yID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KHByaXYt
PmNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiB0cnVlVmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19ib29sZWFuKHByaXYtPmNvbnRl
eHQuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfQ09O
RklHVVJBQkxFKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlw
dG9yLmdldCgpLCAiY29uZmlndXJhYmxlIiwgdHJ1ZVZhbHVlLmdldCgpKTsKKyAgICBpZiAoZmxh
Z3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29i
amVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgImVudW1lcmFibGUiLCB0cnVlVmFs
dWUuZ2V0KCkpOworCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSkpOworICAgIEpTQzo6Vk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGlmIChnZXR0
ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3VyZSA9IGFkb3B0R1JlZihnX2Nj
bG9zdXJlX25ldyhnZXR0ZXIsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byogZnVu
Y3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoImdldCIpLAorICAgICAg
ICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpNZXRob2QsIG51bGxwdHIsIFdU
Rk1vdmUoY2xvc3VyZSksIHByb3BlcnR5VHlwZSwgeyB9KSk7CisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IGZ1bmN0aW9uID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4
dC5nZXQoKSwgZnVuY3Rpb25PYmplY3QpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9w
cm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiZ2V0IiwgZnVuY3Rpb24uZ2V0KCkpOworICAgIH0K
KyAgICBpZiAoc2V0dGVyKSB7CisgICAgICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBh
ZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoc2V0dGVyLCBudWxscHRyLCBudWxscHRyKSk7CisgICAg
ICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJz
ZXQiKSwKKyAgICAgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6TWV0aG9k
LCBudWxscHRyLCBXVEZNb3ZlKGNsb3N1cmUpLCBHX1RZUEVfTk9ORSwgeyBwcm9wZXJ0eVR5cGUg
fSkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGpzY0NvbnRleHRHZXRP
ckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICAg
ICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgInNldCIs
IGZ1bmN0aW9uLmdldCgpKTsKKyAgICB9CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gb2JqZWN0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCAiT2Jq
ZWN0IikpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfb2JqZWN0X2ludm9rZV9tZXRob2Qob2JqZWN0LmdldCgpLCAiZGVmaW5lUHJvcGVydHkiLAor
ICAgICAgICBKU0NfVFlQRV9WQUxVRSwgdmFsdWUsIEdfVFlQRV9TVFJJTkcsIHByb3BlcnR5TmFt
ZSwgSlNDX1RZUEVfVkFMVUUsIGRlc2NyaXB0b3IuZ2V0KCksIEdfVFlQRV9OT05FKSk7Cit9CisK
K0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgR1R5cGUgcmV0dXJuVHlwZSwgdW5z
aWduZWQgcGFyYW1Db3VudCwgLi4uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19J
U19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
YWxsYmFjaywgbnVsbHB0cik7CisKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJn
cywgcGFyYW1Db3VudCk7CisgICAgVmVjdG9yPEdUeXBlPiBwYXJhbWV0ZXJzOworICAgIGlmIChw
YXJhbUNvdW50KSB7CisgICAgICAgIHBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShw
YXJhbUNvdW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7
ICsraSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMudW5jaGVja2VkQXBwZW5kKHZhX2FyZyhhcmdz
LCBHVHlwZSkpOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBHUmVmUHRyPEdDbG9z
dXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGNhbGxiYWNrLCBudWxscHRy
LCBudWxscHRyKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCkpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0
ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgbmFtZSA/IFN0cmluZzo6ZnJvbVVURjgobmFtZSkgOiBBU0NJSUxp
dGVyYWwoImFub255bW91cyIpLAorICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5
cGU6OkZ1bmN0aW9uLCBudWxscHRyLCBXVEZNb3ZlKGNsb3N1cmUpLCByZXR1cm5UeXBlLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKSk7CisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVl
KGNvbnRleHQsIGZ1bmN0aW9uT2JqZWN0KS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192
YWx1ZV9pc19mdW5jdGlvbihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdl
dEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpz
Q29udGV4dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJuICFleGNlcHRp
b24gPyBKU09iamVjdElzRnVuY3Rpb24oanNDb250ZXh0LCBvYmplY3QpIDogRkFMU0U7Cit9CisK
K0pTQ1ZhbHVlKiBqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChKU0NWYWx1ZSogdmFsdWUsIEdUeXBl
IGZpcnN0UGFyYW1ldGVyVHlwZSwgLi4uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpT
Q19JU19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29u
dGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoanNDb250
ZXh0LCB2YWx1ZS0+cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRl
eHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24p
KQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5n
ZXQoKSk7CisKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZmlyc3RQYXJh
bWV0ZXJUeXBlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGpzY1ZhbHVlQ2FsbEZ1bmN0aW9uKHZhbHVl
LCBmdW5jdGlvbiwgbnVsbHB0ciwgZmlyc3RQYXJhbWV0ZXJUeXBlLCBhcmdzKTsKKyAgICB2YV9l
bmQoYXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjUxYWEyZDVjNjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5o
PiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDVmFsdWVf
aAorI2RlZmluZSBKU0NWYWx1ZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQ
RV9WQUxVRSAgICAgICAgICAgIChqc2NfdmFsdWVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX1ZB
TFVFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpT
Q19UWVBFX1ZBTFVFLCBKU0NWYWx1ZSkpCisjZGVmaW5lIEpTQ19JU19WQUxVRShvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9WQUxVRSkpCisj
ZGVmaW5lIEpTQ19WQUxVRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWVDbGFzcykpCisjZGVmaW5lIEpTQ19J
U19WQUxVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBK
U0NfVFlQRV9WQUxVRSkpCisjZGVmaW5lIEpTQ19WQUxVRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWVDbGFz
cykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZSBKU0NWYWx1ZTsKK3R5cGVkZWYgc3RydWN0
IF9KU0NWYWx1ZUNsYXNzIEpTQ1ZhbHVlQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWVQ
cml2YXRlIEpTQ1ZhbHVlUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzIEpTQ0Ns
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgSlNDQ29udGV4dDsKKwordHlwZWRlZiBl
bnVtIHsKKyAgICBKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFID0gMSA8PCAwLAorICAg
IEpTQ19WQUxVRV9QUk9QRVJUWV9FTlVNRVJBQkxFICAgPSAxIDw8IDEsCisgICAgSlNDX1ZBTFVF
X1BST1BFUlRZX1dSSVRBQkxFICAgICA9IDEgPDwgMgorfSBKU0NWYWx1ZVByb3BlcnR5RmxhZ3M7
CisKK3N0cnVjdCBfSlNDVmFsdWUgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHBy
aXZhdGUgPiovCisgICAgSlNDVmFsdWVQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NW
YWx1ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAo
Kl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAodm9p
ZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2Nf
cmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBlCitqc2NfdmFsdWVfZ2V0X3R5
cGUgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgor
anNjX3ZhbHVlX25ld191bmRlZmluZWQgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAg
ICAgICAgICpjb250ZXh0KTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX3VuZGVm
aW5lZCAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisK
K0pTQ19BUEkgSlNDQ29udGV4dCAqCitqc2NfdmFsdWVfZ2V0X2NvbnRleHQgICAgICAgICAgICAg
ICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1
ZSAqCitqc2NfdmFsdWVfbmV3X251bGwgICAgICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4
dCAgICAgICAgICAgKmNvbnRleHQpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNf
bnVsbCAgICAgICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVl
KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X251bWJlciAgICAgICAgICAg
ICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICAgICAgICAgICAgICAgIG51bWJl
cik7CitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfbnVtYmVyICAgICAgICAgICAgICAg
ICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBkb3VibGUK
K2pzY192YWx1ZV90b19kb3VibGUgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAg
ICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGdpbnQzMgoranNjX3ZhbHVlX3RvX2ludDMyICAg
ICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pT
Q19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19ib29sZWFuICAgICAgICAgICAgICAgICAg
ICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICB2YWx1ZSk7CitKU0Nf
QVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAo
SlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3Zh
bHVlX3RvX2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAg
ICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19zdHJpbmcgICAg
ICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAg
ICpzdHJpbmcpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfc3RyaW5nICAgICAg
ICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQ
SSBjaGFyICoKK2pzY192YWx1ZV90b19zdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIChKU0NW
YWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1
ZV9uZXdfYXJyYXkgICAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlw
ZSAgICAgICAgICAgICAgICAgZmlyc3RfaXRlbV90eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC4uLik7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3Zh
bHVlX25ld19hcnJheV9mcm9tX2dhcnJheSAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQ
dHJBcnJheSAgICAgICAgICAgICphcnJheSk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1
ZV9pc19hcnJheSAgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAq
dmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfb2JqZWN0ICAgICAg
ICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAg
aW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlND
Q2xhc3MgICAgICAgICAgICAgKmpzY19jbGFzcyk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192
YWx1ZV9pc19vYmplY3QgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAg
ICAqdmFsdWUpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3Rh
bmNlX29mICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpu
YW1lKTsKKworSlNDX0FQSSB2b2lkCitqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eSAgICAg
ICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAg
ICAgICpwcm9wZXJ0eSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX29iamVjdF9n
ZXRfcHJvcGVydHkgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAg
ICAgICAqbmFtZSk7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVy
dHlfYXRfaW5kZXggICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgaW5k
ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUg
ICAgICAgICAgICAgKnByb3BlcnR5KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVf
b2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleCAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgICAgICAgICBpbmRleCk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX29i
amVjdF9pbnZva2VfbWV0aG9kICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICAgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVHlwZSAgICAgICAgICAgICAgICAgZmlyc3RfcGFyYW1ldGVyX3R5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlNDX0FQSSB2b2lk
Citqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhICAgICAoSlNDVmFsdWUgICAg
ICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBmbGFncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAg
ICAgICAgICAqcHJvcGVydHlfdmFsdWUpOworCitKU0NfQVBJIHZvaWQKK2pzY192YWx1ZV9vYmpl
Y3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29yIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAg
ICAgICAgICAgKnByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSlNDVmFsdWVQcm9wZXJ0eUZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICBwcm9wZXJ0
eV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxs
YmFjayAgICAgICAgICAgICBnZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIHNldHRlcik7CisKK0pTQ19BUEkgSlND
VmFsdWUgKgoranNjX3ZhbHVlX25ld19mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgKEpTQ0Nv
bnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAgICBjYWxsYmFj
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSAgICAg
ICAgICAgICAgICAgcmV0dXJuX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG5fcGFyYW1zLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CisKK0pTQ19BUEkgZ2Jvb2xlYW4K
K2pzY192YWx1ZV9pc19mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAg
ICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9mdW5jdGlv
bl9jYWxsICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAg
ICAgICAgIGZpcnN0X3BhcmFtZXRlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4uLik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBKU0NWYWx1
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFs
dWVQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWVQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYyMTQ0MzUzZjU1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCitKU1Zh
bHVlUmVmIGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NWYWx1ZSopOworSlNDVmFsdWUqIGpzY1ZhbHVl
Q3JlYXRlKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYzZhNDRmYmI0NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAKQEAgLTAs
MCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisKKyNpbmNsdWRl
ICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZSB7CisgICAgSlNDb250ZXh0R3JvdXBSZWYganNDb250
ZXh0R3JvdXA7CisgICAgSGFzaE1hcDxKU0dsb2JhbENvbnRleHRSZWYsIEpTQ0NvbnRleHQqPiBj
b250ZXh0Q2FjaGU7Cit9IEpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZTsKKworV0VCS0lUX0RFRklO
RV9UWVBFKEpTQ1ZpcnR1YWxNYWNoaW5lLCBqc2NfdmlydHVhbF9tYWNoaW5lLCBHX1RZUEVfT0JK
RUNUKQorCitzdGF0aWMgU3RhdGljTG9jayB3cmFwcGVyQ2FjaGVNdXRleDsKKworc3RhdGljIEhh
c2hNYXA8SlNDb250ZXh0R3JvdXBSZWYsIEpTQ1ZpcnR1YWxNYWNoaW5lKj4mIHdyYXBwZXJNYXAo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEpTQ29udGV4dEdyb3VwUmVm
LCBKU0NWaXJ0dWFsTWFjaGluZSo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGlj
IHZvaWQgYWRkV3JhcHBlcihKU0NvbnRleHRHcm91cFJlZiBncm91cCwgSlNDVmlydHVhbE1hY2hp
bmUqIHZtKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJD
YWNoZU11dGV4KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghd3JhcHBlck1hcCgpLmNvbnRhaW5zKGdy
b3VwKSk7CisgICAgd3JhcHBlck1hcCgpLnNldChncm91cCwgdm0pOworfQorCitzdGF0aWMgdm9p
ZCByZW1vdmVXcmFwcGVyKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwKQoreworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4KTsKKyAgICBSRUxFQVNF
X0FTU0VSVCh3cmFwcGVyTWFwKCkuY29udGFpbnMoZ3JvdXApKTsKKyAgICB3cmFwcGVyTWFwKCku
cmVtb3ZlKGdyb3VwKTsKK30KKworc3RhdGljIHZvaWQganNjVmlydHVhbE1hY2hpbmVTZXRDb250
ZXh0R3JvdXAoSlNDVmlydHVhbE1hY2hpbmUgKnZtLCBKU0NvbnRleHRHcm91cFJlZiBncm91cCkK
K3sKKyAgICBpZiAoZ3JvdXApIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLT5wcml2LT5q
c0NvbnRleHRHcm91cCk7CisgICAgICAgIHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCA9IGdyb3Vw
OworICAgICAgICBKU0NvbnRleHRHcm91cFJldGFpbih2bS0+cHJpdi0+anNDb250ZXh0R3JvdXAp
OworICAgICAgICBhZGRXcmFwcGVyKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCwgdm0pOworICAg
IH0gZWxzZSBpZiAodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKSB7CisgICAgICAgIHJlbW92ZVdy
YXBwZXIodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICAgICAgSlNDb250ZXh0R3JvdXBS
ZWxlYXNlKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgICAgIHZtLT5wcml2LT5qc0Nv
bnRleHRHcm91cCA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWaXJ0dWFs
TWFjaGluZUVuc3VyZUNvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSAqdm0pCit7CisgICAg
aWYgKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byoganNDb250ZXh0R3JvdXAgPSBKU0NvbnRleHRHcm91cENyZWF0ZSgpOworICAgIGpzY1ZpcnR1
YWxNYWNoaW5lU2V0Q29udGV4dEdyb3VwKHZtLCBqc0NvbnRleHRHcm91cCk7CisgICAgSlNDb250
ZXh0R3JvdXBSZWxlYXNlKGpzQ29udGV4dEdyb3VwKTsKK30KKworc3RhdGljIHZvaWQganNjVmly
dHVhbE1hY2hpbmVEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NWaXJ0dWFsTWFj
aGluZSogdm0gPSBKU0NfVklSVFVBTF9NQUNISU5FKG9iamVjdCk7CisgICAganNjVmlydHVhbE1h
Y2hpbmVTZXRDb250ZXh0R3JvdXAodm0sIG51bGxwdHIpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mo
anNjX3ZpcnR1YWxfbWFjaGluZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIGpzY192aXJ0dWFsX21hY2hpbmVfY2xhc3NfaW5pdChKU0NWaXJ0dWFsTWFj
aGluZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpF
Q1RfQ0xBU1Moa2xhc3MpOworICAgIG9iakNsYXNzLT5kaXNwb3NlID0ganNjVmlydHVhbE1hY2hp
bmVEaXNwb3NlOworfQorCitHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiBqc2NWaXJ0dWFsTWFj
aGluZUdldE9yQ3JlYXRlKEpTQ29udGV4dEdyb3VwUmVmIGpzQ29udGV4dEdyb3VwKQoreworICAg
IEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gd3JhcHBlck1hcCgpLmdldChqc0NvbnRl
eHRHcm91cCk7CisgICAgaWYgKCF2bSkgeworICAgICAgICB2bSA9IGFkb3B0R1JlZihqc2Nfdmly
dHVhbF9tYWNoaW5lX25ldygpKTsKKyAgICAgICAganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0
R3JvdXAodm0uZ2V0KCksIGpzQ29udGV4dEdyb3VwKTsKKyAgICB9CisgICAgcmV0dXJuIHZtOwor
fQorCitKU0NvbnRleHRHcm91cFJlZiBqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChK
U0NWaXJ0dWFsTWFjaGluZSogdm0pCit7CisgICAganNjVmlydHVhbE1hY2hpbmVFbnN1cmVDb250
ZXh0R3JvdXAodm0pOworICAgIHJldHVybiB2bS0+cHJpdi0+anNDb250ZXh0R3JvdXA7Cit9CisK
K3ZvaWQganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSwg
SlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS0+cHJpdi0+anND
b250ZXh0R3JvdXApOworICAgIGF1dG8ganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4
dChjb250ZXh0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NvbnRleHRHZXRHcm91cChqc0NvbnRl
eHQpID09IHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZt
LT5wcml2LT5jb250ZXh0Q2FjaGUuY29udGFpbnMoanNDb250ZXh0KSk7CisgICAgdm0tPnByaXYt
PmNvbnRleHRDYWNoZS5zZXQoanNDb250ZXh0LCBjb250ZXh0KTsKK30KKwordm9pZCBqc2NWaXJ0
dWFsTWFjaGluZVJlbW92ZUNvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUqIHZtLCBKU0NDb250ZXh0
KiBjb250ZXh0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5wcml2LT5qc0NvbnRleHRHcm91
cCk7CisgICAgYXV0byBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ29udGV4dEdldEdyb3VwKGpzQ29udGV4dCkgPT0gdm0t
PnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS0+cHJpdi0+Y29u
dGV4dENhY2hlLmNvbnRhaW5zKGpzQ29udGV4dCkpOworICAgIHZtLT5wcml2LT5jb250ZXh0Q2Fj
aGUucmVtb3ZlKGpzQ29udGV4dCk7Cit9CisKK0pTQ0NvbnRleHQqIGpzY1ZpcnR1YWxNYWNoaW5l
R2V0Q29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSogdm0sIEpTR2xvYmFsQ29udGV4dFJlZiBqc0Nv
bnRleHQpCit7CisgICAgcmV0dXJuIHZtLT5wcml2LT5jb250ZXh0Q2FjaGUuZ2V0KGpzQ29udGV4
dCk7Cit9CisKK0pTQ1ZpcnR1YWxNYWNoaW5lKiBqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpCit7
CisgICAgcmV0dXJuIEpTQ19WSVJUVUFMX01BQ0hJTkUoZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZJ
UlRVQUxfTUFDSElORSwgbnVsbHB0cikpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMjVjNjQzZTA5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuaApAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX0pT
Q19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkg
PGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IEpTQ1ZpcnR1YWxNYWNoaW5lX2gKKyNkZWZpbmUgSlNDVmlydHVhbE1hY2hpbmVfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorI2luY2x1
ZGUgPGpzYy9KU0NWYWx1ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVf
VklSVFVBTF9NQUNISU5FICAgICAgICAgICAgKGpzY192aXJ0dWFsX21hY2hpbmVfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgSlNDX1ZJUlRVQUxfTUFDSElORShvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUsIEpTQ1Zp
cnR1YWxNYWNoaW5lKSkKKyNkZWZpbmUgSlNDX0lTX1ZJUlRVQUxfTUFDSElORShvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9WSVJUVUFMX01B
Q0hJTkUpKQorI2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5FX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSwg
SlNDVmlydHVhbE1hY2hpbmVDbGFzcykpCisjZGVmaW5lIEpTQ19JU19WSVJUVUFMX01BQ0hJTkVf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVf
VklSVFVBTF9NQUNISU5FKSkKKyNkZWZpbmUgSlNDX1ZJUlRVQUxfTUFDSElORV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBKU0NfVFlQRV9WSVJUVUFM
X01BQ0hJTkUsIEpTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlND
VmlydHVhbE1hY2hpbmUgSlNDVmlydHVhbE1hY2hpbmU7Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmly
dHVhbE1hY2hpbmVDbGFzcyBKU0NWaXJ0dWFsTWFjaGluZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZSBKU0NWaXJ0dWFsTWFjaGluZVByaXZhdGU7CisKK3N0
cnVjdCBfSlNDVmlydHVhbE1hY2hpbmUgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8
IHByaXZhdGUgPiovCisgICAgSlNDVmlydHVhbE1hY2hpbmVQcml2YXRlICpwcml2OworfTsKKwor
c3RydWN0IF9KU0NWaXJ0dWFsTWFjaGluZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAo
Kl9qc2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9p
ZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdU
eXBlCitqc2NfdmlydHVhbF9tYWNoaW5lX2dldF90eXBlICh2b2lkKTsKKworSlNDX0FQSSBKU0NW
aXJ0dWFsTWFjaGluZSAqCitqc2NfdmlydHVhbF9tYWNoaW5lX25ldyAgICAgICh2b2lkKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIEpTQ1ZpcnR1YWxNYWNoaW5lX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZVByaXZh
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZVBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZjOWU3MDcw
NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmlydHVhbE1hY2hpbmVQcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJKU0NWaXJ0dWFsTWFjaGluZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dSZWZQdHIuaD4KKworR1JlZlB0cjxKU0NWaXJ0dWFsTWFjaGluZT4ganNjVmlydHVhbE1hY2hp
bmVHZXRPckNyZWF0ZShKU0NvbnRleHRHcm91cFJlZik7CitKU0NvbnRleHRHcm91cFJlZiBqc2NW
aXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSopOwordm9pZCBq
c2NWaXJ0dWFsTWFjaGluZUFkZENvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUqLCBKU0NDb250ZXh0
Kik7Cit2b2lkIGpzY1ZpcnR1YWxNYWNoaW5lUmVtb3ZlQ29udGV4dChKU0NWaXJ0dWFsTWFjaGlu
ZSosIEpTQ0NvbnRleHQqKTsKK0pTQ0NvbnRleHQqIGpzY1ZpcnR1YWxNYWNoaW5lR2V0Q29udGV4
dChKU0NWaXJ0dWFsTWFjaGluZSosIEpTR2xvYmFsQ29udGV4dFJlZik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI3YjY1ZGM1YzM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJNYXAuY3BwCkBAIC0wLDAg
KzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NXcmFwcGVyTWFwLmgiCisKKyNpbmNsdWRlICJBUElD
YXN0LmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDQ2xh
c3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJK
U0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitXcmFwcGVyTWFwOjpXcmFwcGVyTWFwKEpTR2xvYmFsQ29udGV4dFJl
ZiBqc0NvbnRleHQpCisgICAgOiBtX2NhY2hlZEpTV3JhcHBlcnMoc3RkOjptYWtlX3VuaXF1ZTxK
U0M6OldlYWtHQ01hcDxncG9pbnRlciwgSlNDOjpKU09iamVjdD4+KHRvSlMoanNDb250ZXh0KS0+
dm0oKSkpCit7Cit9CisKK1dyYXBwZXJNYXA6On5XcmFwcGVyTWFwKCkKK3sKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGpzY0NsYXNzIDogbV9jbGFzc01hcC52YWx1ZXMoKSkKKyAgICAgICAganNjQ2xh
c3NJbnZhbGlkYXRlKGpzY0NsYXNzLmdldCgpKTsKK30KKworR1JlZlB0cjxKU0NWYWx1ZT4gV3Jh
cHBlck1hcDo6Z29iamVjdFdyYXBwZXIoSlNDQ29udGV4dCoganNjQ29udGV4dCwgSlNWYWx1ZVJl
ZiBqc1ZhbHVlKQoreworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQoanNjQ29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHRvSlMoanNDb250
ZXh0KSk7CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0NvbnRleHQpLT53
cmFwcGVyTWFwKCkgPT0gdGhpcyk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBtX2Nh
Y2hlZEdPYmplY3RXcmFwcGVycy5nZXQoanNWYWx1ZSk7CisgICAgaWYgKCF2YWx1ZSkgeworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NWYWx1ZUNyZWF0ZShqc2NDb250ZXh0LCBqc1ZhbHVl
KSk7CisgICAgICAgIG1fY2FjaGVkR09iamVjdFdyYXBwZXJzLnNldChqc1ZhbHVlLCB2YWx1ZS5n
ZXQoKSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKwordm9pZCBXcmFwcGVyTWFwOjp1
bndyYXAoSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FjaGVk
R09iamVjdFdyYXBwZXJzLmNvbnRhaW5zKGpzVmFsdWUpKTsKKyAgICBtX2NhY2hlZEdPYmplY3RX
cmFwcGVycy5yZW1vdmUoanNWYWx1ZSk7Cit9CisKK3ZvaWQgV3JhcHBlck1hcDo6cmVnaXN0ZXJD
bGFzcyhKU0NDbGFzcyoganNjQ2xhc3MpCit7CisgICAgYXV0byoganNDbGFzcyA9IGpzY0NsYXNz
R2V0SlNDbGFzcyhqc2NDbGFzcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY2xhc3NNYXAuY29u
dGFpbnMoanNDbGFzcykpOworICAgIG1fY2xhc3NNYXAuc2V0KGpzQ2xhc3MsIGpzY0NsYXNzKTsK
K30KKworSlNPYmplY3QqIFdyYXBwZXJNYXA6OmNyZWF0ZUpTV3JhcHBwZXIoSlNHbG9iYWxDb250
ZXh0UmVmIGpzQ29udGV4dCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU1ZhbHVlUmVmIHByb3RvdHlw
ZSwgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9u
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRvSlNHbG9iYWxPYmplY3QoanNDb250ZXh0KS0+d3Jh
cHBlck1hcCgpID09IHRoaXMpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoanNDb250ZXh0
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0p
OworICAgIGF1dG8qIG9iamVjdCA9IEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3Jh
cHBlck9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xpYldyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSwg
anNDbGFzcywgbnVsbHB0cik7CisgICAgaWYgKHdyYXBwZWRPYmplY3QpIHsKKyAgICAgICAgb2Jq
ZWN0LT5zZXRXcmFwcGVkT2JqZWN0KG5ldyBKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0KHdyYXBw
ZWRPYmplY3QsIGRlc3Ryb3lGdW5jdGlvbikpOworICAgICAgICBtX2NhY2hlZEpTV3JhcHBlcnMt
PnNldCh3cmFwcGVkT2JqZWN0LCBvYmplY3QpOworICAgIH0KKyAgICBpZiAocHJvdG90eXBlKQor
ICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShqc0NvbnRleHQsIHRvUmVmKG9iamVjdCksIHBy
b3RvdHlwZSk7CisgICAgZWxzZSBpZiAoYXV0byoganNQcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90
b3R5cGUoZXhlYykpCisgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlRGlyZWN0KHZtLCBqc1By
b3RvdHlwZSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworSlNPYmplY3QqIFdyYXBwZXJNYXA6
OmpzV3JhcHBlcihncG9pbnRlciB3cmFwcGVkT2JqZWN0KSBjb25zdAoreworICAgIGlmICghd3Jh
cHBlZE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY2FjaGVk
SlNXcmFwcGVycy0+Z2V0KHdyYXBwZWRPYmplY3QpOworfQorCitncG9pbnRlciBXcmFwcGVyTWFw
Ojp3cmFwcGVkT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQsIEpTT2JqZWN0UmVm
IGpzT2JqZWN0KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKHRvSlNHbG9iYWxPYmplY3Qo
anNDb250ZXh0KS0+d3JhcHBlck1hcCgpID09IHRoaXMpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodG9KUyhqc0NvbnRleHQpKTsKKyAgICBWTSYgdm0gPSB0b0pTKGpzQ29udGV4dCktPnZtKCk7
CisgICAgYXV0byogb2JqZWN0ID0gdG9KUyhqc09iamVjdCk7CisgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHModm0sIEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD46
OmluZm8oKSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBKU0M6OmpzQ2FzdDxKU0M6
OkpTQVBJV3JhcHBlck9iamVjdCo+KG9iamVjdCktPndyYXBwZWRPYmplY3QoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0Kj4od3JhcHBl
ciktPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
V3JhcHBlck1hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJN
YXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjhiZjgyNjc3OTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3Jh
cHBlck1hcC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlICJW
TS5oIgorI2luY2x1ZGUgIldlYWtHQ01hcC5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFz
czsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVj
dCBfSlNDVmFsdWUgSlNDVmFsdWU7CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVj
dDsKKworY2xhc3MgV3JhcHBlck1hcCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgV3JhcHBlck1hcChKU0dsb2JhbENvbnRleHRSZWYpOworICAg
IH5XcmFwcGVyTWFwKCk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBnb2JqZWN0V3JhcHBlcihK
U0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CisgICAgdm9pZCB1bndyYXAoSlNWYWx1ZVJlZik7CisK
KyAgICB2b2lkIHJlZ2lzdGVyQ2xhc3MoSlNDQ2xhc3MqKTsKKworICAgIEpTT2JqZWN0KiBjcmVh
dGVKU1dyYXBwcGVyKEpTR2xvYmFsQ29udGV4dFJlZiwgSlNDbGFzc1JlZiwgSlNWYWx1ZVJlZiBw
cm90b3R5cGUsIGdwb2ludGVyLCBHRGVzdHJveU5vdGlmeSk7CisgICAgSlNPYmplY3QqIGpzV3Jh
cHBlcihncG9pbnRlciB3cmFwcGVkT2JqZWN0KSBjb25zdDsKKyAgICBncG9pbnRlciB3cmFwcGVk
T2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEhhc2hNYXA8SlNWYWx1ZVJlZiwgSlNDVmFsdWUqPiBtX2NhY2hlZEdPYmplY3RXcmFw
cGVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpXZWFrR0NNYXA8Z3BvaW50ZXIsIEpTQzo6
SlNPYmplY3Q+PiBtX2NhY2hlZEpTV3JhcHBlcnM7CisgICAgSGFzaE1hcDxKU0NsYXNzUmVmLCBH
UmVmUHRyPEpTQ0NsYXNzPj4gbV9jbGFzc01hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5jOWQ1OGIyNTQyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19KU0NfSF9fCisjZGVmaW5lIF9fSlND
X0hfXworCisjZGVmaW5lIF9fSlNDX0hfSU5TSURFX18KKworI2luY2x1ZGUgPGpzYy9KU0NDbGFz
cy5oPgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0RlZmlu
ZXMuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8anNjL0pTQ1Zh
bHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZpcnR1YWxNYWNoaW5lLmg+CisKKyN1bmRlZiBfX0pT
Q19IX0lOU0lERV9fCisKKyNlbmRpZiAvKiBfX0pTQ19IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCAwNDE5NTAwOTBhNC4uMjM5YTBlMWJhZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMDksNyArMTIwOSw3IEBAIGVuZGlmICgpCiAj
IEZvcmNlIHN0YWdpbmcgb2Ygc2hhcmVkIHNjcmlwdHMsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZGly
ZWN0bHkgdXNlZCB0byBidWlsZCBKYXZhU2NyaXB0Q29yZS4KIAogYWRkX2N1c3RvbV90YXJnZXQo
c3RhZ2VTaGFyZWRTY3JpcHRzIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTfSkKLWFk
ZF9kZXBlbmRlbmNpZXMoSmF2YVNjcmlwdENvcmUgc3RhZ2VTaGFyZWRTY3JpcHRzKQorYWRkX2Rl
cGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFnZVNoYXJlZFNjcmlwdHMgJHtKYXZhU2NyaXB0
Q29yZV9FWFRSQV9ERVBFTkRFTkNJRVN9KQogCiBpZiAoTVNWQykKICAgICBhZGRfY3VzdG9tX2Nv
bW1hbmQoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNmYwOTU2
YzUzMjEuLjE0MTliOTJhZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC0xLDEwICsxLDI1IEBACiBzZXQoSmF2YVNjcmlwdENvcmVfT1VUUFVUX05BTUUgamF2
YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059KQogCitmaWxlKE1BS0VfRElS
RUNUT1JZICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYikKKwor
bGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUworICAgIEFQSS9nbGliL0pTQVBJV3Jh
cHBlck9iamVjdEdMaWIuY3BwCisgICAgQVBJL2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
KyAgICBBUEkvZ2xpYi9KU0NDbGFzcy5jcHAKKyAgICBBUEkvZ2xpYi9KU0NDb250ZXh0LmNwcAor
ICAgIEFQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAKKyAgICBBUEkvZ2xpYi9KU0NWYWx1ZS5jcHAK
KyAgICBBUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAKKyAgICBBUEkvZ2xpYi9KU0NXcmFw
cGVyTWFwLmNwcAorKQorCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9VTklGSUVEX1NPVVJD
RV9MSVNUX0ZJTEVTCiAgICAgIlNvdXJjZXNHVEsudHh0IgogKQogCiBsaXN0KEFQUEVORCBKYXZh
U2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAiJHtGT1JXQVJESU5H
X0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliIgorICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vQVBJL2dsaWIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcmVt
b3RlL2dsaWIiCiApCiAKQEAgLTQzLDYgKzU4LDcgQEAgZW5kaWYgKCkKIAogYWRkX2RlZmluaXRp
b25zKC1EU1RBVElDQUxMWV9MSU5LRURfV0lUSF9XVEYpCiBhZGRfZGVmaW5pdGlvbnMoLURMSUJE
SVI9IiR7TElCX0lOU1RBTExfRElSfSIpCithZGRfZGVmaW5pdGlvbnMoLURKU0NfQ09NUElMQVRJ
T04pCiAKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJQlJBUklFUwogICAgICR7R0xJQl9M
SUJSQVJJRVN9CkBAIC01MCwzICs2NiwxNiBAQCBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9M
SUJSQVJJRVMKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KICkKKworIyBUaGVzZSBzeW1ib2xpYyBs
aW5rIGFsbG93cyBpbmNsdWRlcyBsaWtlICNpbmNsdWRlIDxqc2MvSlNDQ29udGV4dC5oPiB3aGlj
aCBzaW11bGF0ZXMgaW5zdGFsbGVkIGhlYWRlcnMuCithZGRfY3VzdG9tX2NvbW1hbmQoCisgICAg
T1VUUFVUICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYi9qc2MK
KyAgICBERVBFTkRTICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYgorICAgIENPTU1BTkQg
bG4gLW4gLXMgLWYgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS9nbGliICR7Rk9SV0FSRElOR19I
RUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYi9qc2MKKykKK2FkZF9jdXN0b21fdGFyZ2V0
KEpTQy1mYWtlLWFwaS1oZWFkZXJzCisgICAgREVQRU5EUyAke0ZPUldBUkRJTkdfSEVBREVSU19E
SVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIvanNjCispCitzZXQoSmF2YVNjcmlwdENvcmVfRVhUUkFf
REVQRU5ERU5DSUVTCisgICAgSlNDLWZha2UtYXBpLWhlYWRlcnMKKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKaW5kZXggYTUzYTQ0NjkwODYuLjllZWM0YzIwODRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtOTgsNiArOTgsMTAgQEAgZXh0ZXJuICJDIiB2b2lk
IG9iamNfYXV0b3JlbGVhc2VQb29sUG9wKHZvaWQgKmNvbnRleHQpOwogI2VuZGlmCiAjZW5kaWYg
Ly8gVVNFKEZPVU5EQVRJT04pCiAKKyNpZiBVU0UoR0xJQikKKyNpbmNsdWRlICJKU0NHTGliV3Jh
cHBlck9iamVjdC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNDYxLDcgKzQ2NSw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxp
emUoKQogCiB2b2lkIEhlYXA6OnJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCkKIHsKLSNp
ZiBVU0UoRk9VTkRBVElPTikKKyNpZiBVU0UoRk9VTkRBVElPTikgfHwgVVNFKEdMSUIpCiAgICAg
Ly8gV2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IHRoZSBjYXNlIHRoYXQgcmVsZWFzaW5nIGFuIG9i
amVjdCBjYW4gY3JlYXRlIG1vcmUgb2JqZWN0cyBkdWUgdG8gdGhlCiAgICAgLy8gcmVsZWFzZSBj
YWxsaW5nIGludG8gSlMuIFdoZW4gdGhvc2UgSlMgY2FsbChzKSBleGl0IGFuZCBhbGwgbG9ja3Mg
YXJlIGJlaW5nIGRyb3BwZWQgd2UgZW5kIHVwCiAgICAgLy8gYmFjayBoZXJlIGFuZCBjb3VsZCB0
cnkgdG8gcmVjdXJzaXZlbHkgcmVsZWFzZSBvYmplY3RzLiBXZSBndWFyZCB0aGF0IHdpdGggYSBy
ZWN1cnNpdmUgZW50cnkKQEAgLTQ3MywxNSArNDc3LDE5IEBAIHZvaWQgSGVhcDo6cmVsZWFzZURl
bGF5ZWRSZWxlYXNlZE9iamVjdHMoKQogICAgICAgICB3aGlsZSAoIW1fZGVsYXllZFJlbGVhc2VP
YmplY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOwogCi0gICAgICAgICAgICBWZWN0b3I8UmV0YWluUHRyPENG
VHlwZVJlZj4+IG9iamVjdHNUb1JlbGVhc2UgPSBXVEZNb3ZlKG1fZGVsYXllZFJlbGVhc2VPYmpl
Y3RzKTsKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0c1RvUmVsZWFzZSA9IFdURk1vdmUobV9kZWxh
eWVkUmVsZWFzZU9iamVjdHMpOwogCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBkcm9wIGxvY2tzIGJlZm9yZSBjYWxsaW5nIG91dCB0byBhcmJpdHJhcnkgY29k
ZS4KICAgICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobV92
bSk7CiAKKyNpZiBVU0UoRk9VTkRBVElPTikKICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0
ID0gb2JqY19hdXRvcmVsZWFzZVBvb2xQdXNoKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBv
YmplY3RzVG9SZWxlYXNlLmNsZWFyKCk7CisjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgICAgICAg
ICAgICAgb2JqY19hdXRvcmVsZWFzZVBvb2xQb3AoY29udGV4dCk7CisjZW5kaWYKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCA1
YjUxZGE1ZWU2Yy4uZjJhMDcxMmIzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAg
LTg5LDYgKzg5LDEwIEBAIGNsYXNzIFZNOwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVjdCBD
dXJyZW50VGhyZWFkU3RhdGU7CiAKKyNpZiBVU0UoR0xJQikKK2NsYXNzIEpTQ0dMaWJXcmFwcGVy
T2JqZWN0OworI2VuZGlmCisKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7
CiBjbGFzcyBXb3JrbGlzdDsKQEAgLTI3Miw2ICsyNzYsOSBAQCBwdWJsaWM6CiAjaWYgVVNFKEZP
VU5EQVRJT04pCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCByZWxlYXNlU29vbihSZXRh
aW5QdHI8VD4mJik7CiAjZW5kaWYKKyNpZiBVU0UoR0xJQikKKyAgICB2b2lkIHJlbGVhc2VTb29u
KHN0ZDo6dW5pcXVlX3B0cjxKU0NHTGliV3JhcHBlck9iamVjdD4mJik7CisjZW5kaWYKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSog
d2Vha0dDTWFwKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NN
YXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKQEAgLTY0Miw2ICs2NDksMTAgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8UmV0YWluUHRyPENGVHlwZVJlZj4+IG1fZGVsYXllZFJlbGVhc2VPYmpl
Y3RzOwogICAgIHVuc2lnbmVkIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudDsKICNlbmRp
ZgorI2lmIFVTRShHTElCKQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SlNDR0xpYldyYXBw
ZXJPYmplY3Q+PiBtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0czsKKyAgICB1bnNpZ25lZCBtX2RlbGF5
ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQgeyAwIH07CisjZW5kaWYKIAogICAgIEhhc2hTZXQ8V2Vh
a0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwSW5saW5lcy5oCmluZGV4IGU1NjFjOTY1MzcwLi4wYTFkYjI5ZDRmMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xNjcsNiArMTY3LDEzIEBAIGlu
bGluZSB2b2lkIEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYmIG9iamVjdCkKIH0KICNl
bmRpZgogCisjaWYgVVNFKEdMSUIpCitpbmxpbmUgdm9pZCBIZWFwOjpyZWxlYXNlU29vbihzdGQ6
OnVuaXF1ZV9wdHI8SlNDR0xpYldyYXBwZXJPYmplY3Q+JiYgb2JqZWN0KQoreworICAgIG1fZGVs
YXllZFJlbGVhc2VPYmplY3RzLmFwcGVuZChXVEZNb3ZlKG9iamVjdCkpOworfQorI2VuZGlmCisK
IGlubGluZSB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFsRGVwdGgoKQogewogICAgIEFTU0VS
VCghbWF5QmVHQ1RocmVhZCgpIHx8IG1fd29ybGRJc1N0b3BwZWQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDQ2MWUwMDNkZmE1
Li5mNWE1ZDg4YzRkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcApAQCAtMTg1LDYgKzE4NSwxMSBAQAogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2VuZGlmCiAKKyNpZmRlZiBKU0NfR0xJQl9B
UElfRU5BQkxFRAorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJK
U0NXcmFwcGVyTWFwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdGF0aWMg
SlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKQEAg
LTU2Nyw3ICs1NzIsMTYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAg
ICAgICAgICBpbml0LnNldChKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBpbml0Lm93bmVyLT5tX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpOwogICAgICAgICB9KTsKICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19H
TElCX0FQSV9FTkFCTEVECisgICAgbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5pbml0
TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7
CisgICAgICAgICAgICBpbml0LnNldChKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSkpOworICAgICAgICB9KTsKKyAgICBtX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlLmlu
aXRMYXRlcigKKyAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQp
IHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2Jq
ZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIH0pOworI2VuZGlmCiAgICAgbV9hcnJh
eVByb3RvdHlwZS5zZXQodm0sIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUodm0sIHRoaXMs
IEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOwogICAgIAogICAgIG1fb3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nU2hhcGVbVW5kZWNpZGVkU2hhcGUgPj4gSW5kZXhpbmdTaGFwZVNoaWZ0XS5zZXQodm0sIHRo
aXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5n
ZXQoKSwgQXJyYXlXaXRoVW5kZWNpZGVkKSk7CkBAIC0xMzgwLDYgKzEzOTQsMTAgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgdGhpc09iamVjdC0+bV9vYmpj
Q2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0
LT5tX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworI2VuZGlmCisj
aWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICB0aGlzT2JqZWN0LT5tX2dsaWJDYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fZ2xp
YldyYXBwZXJPYmplY3RTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAjZW5kaWYKICAgICB0aGlz
T2JqZWN0LT5tX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9lcnJvclN0cnVjdHVyZSk7CkBAIC0xNjEy
LDQgKzE2MzAsMTEgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU09iamVjdCogdGhpc1ZhbHVlKQogICAgIEFTU0VSVCh0eXBlKCkgPT0gR2xvYmFsT2JqZWN0
VHlwZSk7CiB9CiAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAordm9pZCBKU0dsb2JhbE9i
amVjdDo6c2V0V3JhcHBlck1hcChzdGQ6OnVuaXF1ZV9wdHI8V3JhcHBlck1hcD4mJiBtYXApCit7
CisgICAgbV93cmFwcGVyTWFwID0gV1RGTW92ZShtYXApOworfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKaW5kZXggY2VmZTZkNTVhNzIuLjg5YzFlYzljNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTExNiw2ICsxMTYsMTAgQEAg
Y2xhc3MgVmFyaWFibGVFbnZpcm9ubWVudDsKIHN0cnVjdCBBY3RpdmF0aW9uU3RhY2tOb2RlOwog
c3RydWN0IEhhc2hUYWJsZTsKIAorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECitjbGFzcyBX
cmFwcGVyTWFwOworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnQ+IGNsYXNz
IE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50OwogCiAjZGVmaW5lIERFRklO
RV9TVEFOREFSRF9CVUlMVElOKG1hY3JvLCB1cHBlck5hbWUsIGxvd2VyTmFtZSkgbWFjcm8odXBw
ZXJOYW1lLCBsb3dlck5hbWUsIGxvd2VyTmFtZSwgSlMgIyMgdXBwZXJOYW1lLCB1cHBlck5hbWUs
IG9iamVjdCkKQEAgLTMyNCw2ICszMjgsMTAgQEAgcHVibGljOgogI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fb2Jq
Y0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU+IG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmU7CisjZW5kaWYKKyNp
ZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVj
dCwgU3RydWN0dXJlPiBtX2dsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOworICAgIExhenlQ
cm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2dsaWJXcmFwcGVyT2JqZWN0U3Ry
dWN0dXJlOwogI2VuZGlmCiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmU+IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2NhbGxlZVN0cnVjdHVyZTsKQEAgLTYzNSw2ICs2NDMsMTAgQEAgcHVibGljOgog
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgU3RydWN0dXJlKiBvYmpjQ2FsbGJhY2tGdW5j
dGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBvYmpjV3JhcHBlck9iamVjdFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRo
aXMpOyB9CisjZW5kaWYKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIFN0cnVjdHVy
ZSogZ2xpYkNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2dsaWJD
YWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQorICAgIFN0cnVjdHVyZSogZ2xp
YldyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2dsaWJXcmFwcGVyT2Jq
ZWN0U3RydWN0dXJlLmdldCh0aGlzKTsgfQogI2VuZGlmCiAgICAgU3RydWN0dXJlKiBkYXRlU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRlU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAg
IFN0cnVjdHVyZSogbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KQEAgLTg4OCw3ICs5
MDAsMTEgQEAgcHVibGljOgogICAgIEpTV3JhcHBlck1hcCogd3JhcHBlck1hcCgpIGNvbnN0IHsg
cmV0dXJuIG1fd3JhcHBlck1hcC5nZXQoKTsgfQogICAgIHZvaWQgc2V0V3JhcHBlck1hcChKU1dy
YXBwZXJNYXAqIG1hcCkgeyBtX3dyYXBwZXJNYXAgPSBtYXA7IH0KICNlbmRpZgotICAgIAorI2lm
ZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgV3JhcHBlck1hcCogd3JhcHBlck1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1fd3JhcHBlck1hcC5nZXQoKTsgfQorICAgIHZvaWQgc2V0V3JhcHBlck1h
cChzdGQ6OnVuaXF1ZV9wdHI8V3JhcHBlck1hcD4mJik7CisjZW5kaWYKKwogICAgIFRocmVhZExv
Y2FsQ2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBjb25zdCB7IHJldHVybiAqbV90aHJlYWRMb2Nh
bENhY2hlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKQEAgLTkyMSw3ICs5MzcsOSBAQCBwcml2YXRl
OgogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgUmV0YWluUHRyPEpTV3JhcHBlck1hcD4g
bV93cmFwcGVyTWFwOwogI2VuZGlmCi0gICAgCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOworI2VuZGlmCiAg
ICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fdGhyZWFkTG9jYWxDYWNoZTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKaW5kZXggMjBjYTA3ZTE1MmEuLmVjYzBlZGYyY2M3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZQpAQCAtMTY3LDYgKzE2Nyw3IEBAIGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5H
X0dUS19fPTEpCiBhZGRfZGVmaW5pdGlvbnMoLURHRVRURVhUX1BBQ0tBR0U9IldlYktpdDJHVEst
JHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059IikKIGFkZF9kZWZpbml0aW9ucygtRERBVEFfRElSPSIk
e0NNQUtFX0lOU1RBTExfREFUQURJUn0iKQogYWRkX2RlZmluaXRpb25zKC1EV0VCS0lUR1RLX0FQ
SV9WRVJTSU9OX1NUUklORz0iJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059IikKK2FkZF9kZWZpbml0
aW9ucygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBzZXQoR1RLX0xJQlJBUklFUyAke0dUSzNf
TElCUkFSSUVTfSkKIHNldChHVEtfSU5DTFVERV9ESVJTICR7R1RLM19JTkNMVURFX0RJUlN9KQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDliNDM4NzliODQxLi4z
NTY4NmQxOGNmNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAt
MTUxLDYgKzE1MSw3IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAoWwogICAgICAg
IyBUaGUgR1RLKyBhbmQgV1BFIEFQSXMgdXNlIHVwcGVyIGNhc2UsIHVuZGVyc2NvcmUgc2VwYXJh
dGVkLCB3b3JkcyBpbgogICAgICAgIyBjZXJ0YWluIHR5cGVzIG9mIGVudW1zIChlLmcuIHNpZ25h
bHMsIHByb3BlcnRpZXMpLgorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlw
dENvcmUnLCAnQVBJJywgJ2dsaWInKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dl
YktpdCcsICdTaGFyZWQnLCAnQVBJJywgJ2dsaWInKSwKICAgICAgIG9zLnBhdGguam9pbignU291
cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2dsaWInKSwKICAgICAgIG9zLnBh
dGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycpLApA
QCAtMzM0LDcgKzMzNSw4IEBAIF9ORVZFUl9TS0lQUEVEX0ZJTEVTID0gX05FVkVSX1NLSVBQRURf
SlNfRklMRVMgKyBbCiBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCiAgICAgb3MucGF0
aC5qb2luKCdUb29scycsICdUZXN0V2ViS2l0QVBJJywgJ1Rlc3RzJywgJ1dlYktpdEd0aycpLAog
Ci0gICAgIyBXZWJLaXQqLmggZmlsZXMgaW4gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL1tn
dGt8d3BlXSwgZXhjZXB0IHRob3NlIGVuZGluZyBpbiBQcml2YXRlLmggYXJlIEFQSSBoZWFkZXJz
LCB3aGljaCBkbyBub3QgZm9sbG93IFdlYktpdCBjb2Rpbmcgc3R5bGUuCisgICAgIyBXZWJLaXQq
LmggYW5kIEpTQyouaCBmaWxlcyBpbiwgZXhjZXB0IHRob3NlIGVuZGluZyBpbiBQcml2YXRlLmgg
YXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBub3QgZm9sbG93IFdlYktpdCBjb2Rpbmcgc3R5bGUu
CisgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNj
cmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSArIG9zLnBhdGguc2VwKSArIHInSlNDKD8hLipQcml2
YXRlXC5oKS4qXC5oJCcpLAogICAgIHJlLmNvbXBpbGUocmUuZXNjYXBlKG9zLnBhdGguam9pbign
U291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycpICsgb3MucGF0aC5z
ZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCiAgICAgcmUuY29tcGlsZShy
ZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0JywgJ1VJUHJvY2VzcycsICdB
UEknLCAnd3BlJykgKyBvcy5wYXRoLnNlcCkgKyByJ1dlYktpdCg/IS4qUHJpdmF0ZVwuaCkuKlwu
aCQnKSwKICAgICByZS5jb21waWxlKHJlLmVzY2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJLaXQnLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJykgKyBv
cy5wYXRoLnNlcCkgKyByJ1dlYktpdCg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwKQEAgLTM0Myw2
ICszNDUsNyBAQCBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCiAgICAgIyBHT2JqZWN0
IERPTSBiaW5kaW5ncyBjb3BpZWQgZnJvbSBnZW5lcmF0ZWQgY29kZSB1c2luZyBkaWZmZXJlbnQg
Y29kaW5nIHN0eWxlLgogICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdXZWJQ
cm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAnRE9NJyksCiAKKyAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicsICdq
c2MuaCcpLAogICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3Mn
LCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICd3cGUnLCAnd2Via2l0LmgnKSwKICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1
bmRsZScsICdBUEknLCAnZ3RrJywgJ3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgnKSwKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDYyMDJmNDZiYWYwLi5hMWI0MTg5NDllNCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xNSw2ICsxNSw3IEBAIHNl
dChGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RXZWJLaXRBUElfTkFNRSBUZXN0V2ViS2l0QVBJLWZv
cndhcmRpbmctaGVhZGVycykKIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICAgJHtGT1JXQVJESU5H
X0hFQURFUlNfRElSfQogICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENv
cmUKKyAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIKICAg
ICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9zb3VwCiAgICAgJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvQVBJL0MvZ3RrCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0awpA
QCAtMTE2LDYgKzExNywxNSBAQCBsaXN0KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcAogKQogCith
ZGRfZXhlY3V0YWJsZShUZXN0SlNDICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFTY3Jp
cHRDb3JlL2dsaWIvVGVzdEpTQy5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoVGVzdEpTQwor
ICAgICR7R0xJQl9MSUJSQVJJRVN9CisgICAgSmF2YVNjcmlwdENvcmUKKykKK2FkZF90ZXN0KFRl
c3RKU0MgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNjcmlw
dENvcmUvVGVzdEpTQykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBU
SU1FT1VUIDYwKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBSVU5U
SU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0vSmF2YVNjcmlwdENvcmUpCisKIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAg
ICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJLaXQgLVduby1zaWduLWNvbXBh
cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVuZGVm
CkBAIC0xMjQsNCArMTM0LDggQEAgaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKICAgICBX
RUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdFdlYkNvcmUgLVduby1zaWduLWNvbXBhcmUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bmRlZgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVudXNlZC1w
YXJhbWV0ZXIpCisKKyAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdEpTQyAtV25v
LXNpZ24tY29tcGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1X
bm8tdW5kZWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVu
dXNlZC1wYXJhbWV0ZXIpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjMyMzg3MGI5YwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNw
cApAQCAtMCwwICsxLDE2MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworLy8gSW5jbHVkZSBKU0NDb250ZXh0UHJpdmF0ZS5o
IHRvIGJlIGFibGUgdG8gcnVuIGdhcmJhZ2UgY29sbGVjdG9yIGZvciB0ZXN0aW5nLgorI2RlZmlu
ZSBKU0NfQ09NUElMQVRJT04gMQorI2luY2x1ZGUgImpzYy9KU0NDb250ZXh0UHJpdmF0ZS5oIgor
I3VuZGVmIEpTQ19DT01QSUxBVElPTgorCisjaW5jbHVkZSA8anNjL2pzYy5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L2dsaWIvR1VuaXF1ZVB0ci5oPgorCitjbGFzcyBMZWFrQ2hlY2tlciB7CitwdWJsaWM6CisgICAg
TGVha0NoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB+TGVha0NoZWNrZXIoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGdfcHJpbnQoIkxlYWtlZCBvYmplY3RzOiIpOworICAgICAgICBmb3IgKGF1
dG8qIG9iamVjdCA6IG1fd2F0Y2hlZE9iamVjdHMpCisgICAgICAgICAgICBnX3ByaW50KCIgJXMo
JXApIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5z
dGFuY2UqPihvYmplY3QpKSwgb2JqZWN0KTsKKyAgICAgICAgZ19wcmludCgiXG4iKTsKKyAgICAg
ICAgZ19hc3NlcnQobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHZv
aWQgd2F0Y2godm9pZCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoR19JU19PQkpF
Q1Qob2JqZWN0KSk7CisgICAgICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRkKG9iamVjdCk7CisgICAg
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKG9iamVjdCksIFtdKGdwb2ludGVyIHVzZXJE
YXRhLCBHT2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PExlYWtDaGVj
a2VyKj4odXNlckRhdGEpLT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShvYmplY3QpOworICAgICAg
ICB9LCB0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDx2b2lkKj4gbV93YXRj
aGVkT2JqZWN0czsKK307CisKK2NsYXNzIEV4Y2VwdGlvbkhhbmRsZXIgeworcHVibGljOgorICAg
IEV4Y2VwdGlvbkhhbmRsZXIoSlNDQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICB7CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hh
bmRsZXIobV9jb250ZXh0LCBbXShKU0NDb250ZXh0KiwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24s
IGdwb2ludGVyKSB7CisgICAgICAgICAgICBnX2Vycm9yKCJVTkVYUEVDVEVEIEVYQ0VQVElPTjog
JXMiLCBqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdlKGV4Y2VwdGlvbikpOworICAgICAgICB9LCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICB9CisKKyAgICB+RXhjZXB0aW9uSGFuZGxlcigpCisgICAg
eworICAgICAgICBwb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSlNDRXhjZXB0aW9uSGFu
ZGxlciBoYW5kbGVyLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1
bmN0aW9uID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0
aW9uX2hhbmRsZXIobV9jb250ZXh0LCBoYW5kbGVyLCB1c2VyRGF0YSwgZGVzdHJveUZ1bmN0aW9u
KTsKKyAgICB9CisKKyAgICB2b2lkIHBvcCgpCisgICAgeworICAgICAgICBqc2NfY29udGV4dF9w
b3BfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNDQ29udGV4dCogbV9jb250ZXh0OworfTsKKworI2RlZmluZSBnX2Fzc2VydF90aHJvd19iZWdp
bihoYW5kbGVyLCBkaWRUaHJvdykgXAorICAgIGRpZFRocm93ID0gZmFsc2U7IFwKKyAgICBoYW5k
bGVyLnB1c2goW10oSlNDQ29udGV4dCosIEpTQ0V4Y2VwdGlvbiosIGdwb2ludGVyIHVzZXJEYXRh
KSB7IFwKKyAgICAgICAgKnN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSkgPSB0cnVlOyBcCisg
ICAgfSwgJmRpZFRocm93LCBudWxscHRyKTsKKworI2RlZmluZSBnX2Fzc2VydF9kaWRfdGhyb3co
aGFuZGxlciwgZGlkVGhyb3cpIFwKKyAgICBoYW5kbGVyLnBvcCgpOyBcCisgICAgZ19hc3NlcnQo
ZGlkVGhyb3cpOyBcCisgICAgZGlkVGhyb3cgPSBmYWxzZTsKKworZXh0ZXJuICJDIiB2b2lkIEpT
U3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOworCitz
dGF0aWMgdm9pZCBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoSlNDQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoanNjQ29udGV4
dEdldEpTQ29udGV4dChjb250ZXh0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NCYXNpYygp
Cit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRy
PEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5k
bGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgYXV0byogZGVm
YXVsdFZNID0ganNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoZGVmYXVsdFZNKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChkZWZh
dWx0Vk0pOworCisgICAgICAgIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gYWRvcHRH
UmVmKGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZt
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodm0uZ2V0KCkgIT0gZGVmYXVsdFZNKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZSh2bS5nZXQoKSkpOworICAgICAgICBjaGVja2VyLndh
dGNoKGNvbnRleHQyLmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25I
YW5kbGVyMihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX2NvbnRleHRfZ2V0
X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0Mi5nZXQoKSkgPT0gdm0uZ2V0KCkpOworCisgICAgICAg
IEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDMgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3
X3dpdGhfdmlydHVhbF9tYWNoaW5lKGRlZmF1bHRWTSkpOworICAgICAgICBjaGVja2VyLndhdGNo
KGNvbnRleHQzLmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5k
bGVyMyhjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX2NvbnRleHRfZ2V0X3Zp
cnR1YWxfbWFjaGluZShjb250ZXh0My5nZXQoKSkgPT0ganNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxf
bWFjaGluZShjb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFs
dWUxID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDI1KSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUxLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2dldF9jb250ZXh0KHZhbHVlMS5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUxLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUxLmdldCgpKSwgPT0s
IDI1KTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ2YWx1
ZTEiLCB2YWx1ZTEuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFsdWUxIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZTEuZ2V0KCkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Mi5nZXQoKSwgInZhbHVlMSIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0Mi5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0My5n
ZXQoKSwgInZhbHVlMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBj
b250ZXh0My5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQo
cmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQz
LmdldCgpLCAidmFsdWUxIiwgdmFsdWUxLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQzLmdldCgpLCAidmFsdWUxIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9nZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQzLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQocmVzdWx0LmdldCgpICE9IHZhbHVlMS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDI1KTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRs
ZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgIjIgKyAyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJl
c3VsdC5nZXQoKSksID09LCA0KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQy
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQyLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdDIuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gcmVzdWx0Mi5nZXQoKSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0MyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiMyArIDEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0My5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChy
ZXN1bHQzLmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0
LmdldCgpID09IHJlc3VsdDMuZ2V0KCkpOworCisgICAgICAgIGF1dG8qIHJlc3VsdFB0ciA9IHJl
c3VsdC5nZXQoKTsKKyAgICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgcmVzdWx0MiA9
IG51bGxwdHI7CisgICAgICAgIHJlc3VsdDMgPSBudWxscHRyOworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiByZXN1bHQ0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQ0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdDQuZ2V0KCkpID09
IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJl
c3VsdDQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQz
MihyZXN1bHQ0LmdldCgpKSwgPT0sIDQpOworICAgICAgICBnX2Fzc2VydChyZXN1bHQ0LmdldCgp
ICE9IHJlc3VsdFB0cik7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVj
a2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRl
eHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb3VyIiwgcmVzdWx0LmdldCgpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFs
dWUoY29udGV4dC5nZXQoKSwgImZvdXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQodmFsdWUuZ2V0
KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVt
YmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNCk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQo
KSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvdXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUu
Z2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAg
ICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAidHdvID0gMjsgZm91ciA9IHR3byArIHR3byIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNCk7CisK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
Z2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ0d28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
dmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQodmFs
dWUuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMik7CisKKyAgICAgICAgdmFsdWUgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb3VyIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0
LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmaXZl
ID0gNCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQyLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQocmVzdWx0Mi5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB0ZXN0SlNDVHlwZXMoKQoreworICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAg
R1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygp
KTsKKyAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgIEV4Y2VwdGlvbkhhbmRs
ZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgIEdSZWZQdHI8SlNDVmFs
dWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCks
IDEyNSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChq
c2NfdmFsdWVfdG9fZG91YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyNS4pOworICAgIGdfYXNzZXJ0
X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTI1KTsKKyAgICBn
X2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7CisgICAg
R1VuaXF1ZVB0cjxjaGFyPiB2YWx1ZVN0cmluZyhqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdl
dCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEyNSIp
OworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiaSIsIHZhbHVlLmdl
dCgpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJpIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOwor
CisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQo
KSwgMTIuNSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9h
dChqc2NfdmFsdWVfdG9fZG91YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyLjUpOworICAgIGdfYXNz
ZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTIpOworICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAg
ICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEyLjUiKTsKKyAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImQiLCB2YWx1ZS5nZXQoKSk7Cisg
ICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgp
LCAiZCIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQo
cmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfYm9vbGVhbihjb250ZXh0LmdldCgpLCBUUlVFKSk7CisgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFs
dWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQo
KSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1
ZS5nZXQoKSksID09LCAxKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3Ry
aW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgp
LCA9PSwgInRydWUiKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwg
ImIxIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9n
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImIxIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisg
ICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19ib29sZWFuKGNvbnRleHQuZ2V0KCks
IEZBTFNFKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFs
dWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJp
bmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJmYWxzZSIpOworICAgIGpzY19jb250ZXh0
X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYjIiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYjIiKSk7
CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5n
ZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X3N0cmluZyhjb250ZXh0LmdldCgpLCAiSGVsbG8gV29ybGQiKSk7CisgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1
ZS5nZXQoKSkpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFs
dWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAi
SGVsbG8gV29ybGQiKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5n
ZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2
YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5n
ZXQoKSwgInMxIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMxIikpOworICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkp
OworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19zdHJpbmcoY29udGV4dC5n
ZXQoKSwgbnVsbHB0cikpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICB2YWx1ZVN0cmlu
Zy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBGQUxTRSk7CisgICAgZ19hc3NlcnRfY21waW50
KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICBqc2NfY29udGV4
dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMyIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMyIikp
OworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQu
Z2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X25ld19zdHJpbmcoY29udGV4dC5nZXQoKSwgIjEyLjUiKSk7CisgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQo
KSkpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMTIuNSIp
OworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVF
KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfdG9fZG91YmxlKHZhbHVlLmdldCgp
KSwgPT0sIDEyLjUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFs
dWUuZ2V0KCkpLCA9PSwgMTIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0Lmdl
dCgpLCAiczMiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczMiKSk7CisgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7
CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5KGNvbnRleHQuZ2V0
KCksIEdfVFlQRV9OT05FKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX2FycmF5KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX29iamVjdCh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
anNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5n
LnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiIik7CisgICAganNjX2NvbnRleHRfc2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJhMSIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJhMSIpKTsKKyAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09
IHZhbHVlLmdldCgpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBhcnJheUxlbmd0aCA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0aCIp
KTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCAwKTsKKyAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1i
ZXIoY29udGV4dC5nZXQoKSwgMSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgp
KTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQo
KSwganNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgYXJyYXlJdGVtLmdldCgp
KTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9w
ZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVu
Z3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3Ro
LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxl
bmd0aC5nZXQoKSksID09LCAxKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9f
c3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdl
dCgpLCA9PSwgIjEiKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19u
dW1iZXIoY29udGV4dC5nZXQoKSwgNSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdl
dCgpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5n
ZXQoKSwganNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgYXJyYXlJdGVtLmdl
dCgpKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9w
cm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5
TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVu
Z3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJh
eUxlbmd0aC5nZXQoKSksID09LCAyKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVf
dG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5n
LmdldCgpLCA9PSwgIjEsNSIpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxMCkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJ
dGVtLmdldCgpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2
YWx1ZS5nZXQoKSwgMywgYXJyYXlJdGVtLmdldCgpKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0aCIp
KTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCA0KTsKKyAgICBh
cnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5k
ZXgodmFsdWUuZ2V0KCksIDApKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7
CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09
LCAxKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJv
cGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5
SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0u
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRl
bS5nZXQoKSksID09LCA1KTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIDIpKTsKKyAgICBjaGVja2Vy
LndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVm
aW5lZChhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIDMpKTsKKyAgICBj
aGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVl
X3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCAxMCk7CisgICAgYXJyYXlMZW5ndGggPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJsZW5n
dGgiKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgYXJyYXlJ
dGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZh
bHVlLmdldCgpLCBqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpICsgMSkpOwor
ICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfdW5kZWZpbmVkKGFycmF5SXRlbS5nZXQoKSkpOworCisgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gYXJyYXkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0LmdldCgpLCBH
X1RZUEVfSU5ULCAxLCBHX1RZUEVfU1RSSU5HLCAidHdvIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUs
IEpTQ19UWVBFX1ZBTFVFLCB2YWx1ZS5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAgICBjaGVja2Vy
LndhdGNoKGFycmF5LmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYXJyYXkoYXJy
YXkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGFycmF5LmdldCgp
KSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXkuZ2V0KCkpID09IFRS
VUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXkuZ2V0KCkp
LCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhhcnJh
eS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIx
LHR3byx0cnVlLDEsNSwsMTAiKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfb2JqZWN0X2dldF9wcm9wZXJ0eShhcnJheS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVj
a2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
bnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1
ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCA0KTsKKyAgICBhcnJheUl0ZW0gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0
KCksIDApKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCAxKTsKKyAgICBh
cnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5k
ZXgoYXJyYXkuZ2V0KCksIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7
CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyhhcnJheUl0ZW0uZ2V0KCkpKTsKKyAg
ICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKGFycmF5SXRlbS5nZXQoKSkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ0d28iKTsKKyAg
ICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRf
aW5kZXgoYXJyYXkuZ2V0KCksIDIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQo
KSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4oYXJyYXlJdGVtLmdldCgpKSk7
CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXlJdGVtLmdldCgpKSA9PSBU
UlVFKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJv
cGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0KCksIDMpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5
SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQoYXJyYXlJdGVtLmdldCgpID09IHZhbHVlLmdldCgp
KTsKKworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJy
YXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAgZ19wdHJfYXJyYXlf
YWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMSkp
OworICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfc3RyaW5n
KGNvbnRleHQuZ2V0KCksICJ0d28iKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQo
KSwganNjX3ZhbHVlX25ld19ib29sZWFuKGNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBnX3B0
cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBnX29iamVjdF9yZWYodmFsdWUuZ2V0KCkpKTsKKyAg
ICBhcnJheSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5X2Zyb21fZ2FycmF5KGNvbnRl
eHQuZ2V0KCksIGdBcnJheS5nZXQoKSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXkuZ2V0KCkp
OworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19hcnJheShhcnJheS5nZXQoKSkpOworICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoYXJyYXkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChq
c2NfdmFsdWVfdG9fYm9vbGVhbihhcnJheS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1
ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKGFycmF5LmdldCgpKSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEsdHdvLHRydWUsMSw1LCwxMCIp
OworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3Bl
cnR5KGFycmF5LmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5n
dGguZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGgu
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVu
Z3RoLmdldCgpKSwgPT0sIGdBcnJheS0+bGVuKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
b2JqZWN0KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4o
dmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3Zh
bHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sICJbb2JqZWN0IE9iamVjdF0iKTsKKyAgICBqc2NfY29udGV4dF9zZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgIm8iLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAibyIpKTsKKyAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09
IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5k
ZWZpbmVkKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsK
KyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHZhbHVlLmdldCgpKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDAp
OworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidW5kZWZpbmVk
Iik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ1IiwgdmFsdWUu
Z2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgInUiKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
IGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X251bGwoY29udGV4dC5nZXQoKSkpOworICAgIGNoZWNrZXIu
d2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udWxsKHZhbHVl
LmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkp
ID09IEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVl
LmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJp
bmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAibnVsbCIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
biIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0
X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJuIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworfQorCitz
dGF0aWMgaW50IGZvbyhpbnQgbikKK3sKKyAgICByZXR1cm4gbiAqIDI7Cit9CisKK3N0YXRpYyB2
b2lkIGNhbGxiYWNrKEpTQ1ZhbHVlKiBmdW5jdGlvbikKK3sKKyAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbiwgR19U
WVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191
bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgZG91YmxlQW5kU2V0SW5S
ZXN1bHQoaW50IG4pCit7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19udW1iZXIoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSwgbiAqIDIpKTsK
KyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSwgInJl
c3VsdCIsIHZhbHVlLmdldCgpKTsKK30KKworc3RhdGljIGludCBzdW1GdW5jdGlvbihHUHRyQXJy
YXkqIGFycmF5KQoreworICAgIGludCByZXR2YWwgPSAwOworCisgICAgZ19wdHJfYXJyYXlfZm9y
ZWFjaChhcnJheSwgW10oZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAg
ICAgZ19hc3NlcnQoSlNDX0lTX1ZBTFVFKGRhdGEpKTsKKyAgICAgICAgSlNDVmFsdWUqIGl0ZW0g
PSBKU0NfVkFMVUUoZGF0YSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIo
aXRlbSkpOworICAgICAgICAqc3RhdGljX2Nhc3Q8aW50Kj4odXNlckRhdGEpICs9IGpzY192YWx1
ZV90b19pbnQzMihpdGVtKTsKKyAgICB9LCAmcmV0dmFsKTsKKworICAgIHJldHVybiByZXR2YWw7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NGdW5jdGlvbigpCit7CisgICAgeworICAgICAgICBM
ZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIo
Y29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAiZm9vIiwgR19D
QUxMQkFDSyhmb28pLCBHX1RZUEVfSU5ULCAxLCBHX1RZUEVfSU5UKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgImZvbyIsIGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmb28oMjAwKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSks
ID09LCA0MDApOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfSU5ULCAyMDAs
IEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydCh2YWx1ZS5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNl
cHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCks
ICJmb28gPSBmdW5jdGlvbihuKSB7IHJldHVybiBuICogMjsgfSIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmb28o
MjAwKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9m
dW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfSU5ULCAyMDAsIEdfVFlQRV9OT05F
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dCh2YWx1ZS5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
TGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChj
b250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVy
KGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwgImNhbGxiYWNr
IiwgR19DQUxMQkFDSyhjYWxsYmFjayksIEdfVFlQRV9OT05FLCAxLCBKU0NfVFlQRV9WQUxVRSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAganNjX2Nv
bnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJjYWxsYmFjayIsIGZ1bmN0aW9uLmdldCgp
KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ2YXIgcmVzdWx0ID0gMDsgY2FsbGJhY2soZnVu
Y3Rpb24obil7IHJlc3VsdCA9IG4gKiAyOyB9KTsgcmVzdWx0IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1i
ZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQgPSAwIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDApOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IGRibCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNv
bnRleHQuZ2V0KCksICJkb3VibGVBbmRTZXRJblJlc3VsdCIsIEdfQ0FMTEJBQ0soZG91YmxlQW5k
U2V0SW5SZXN1bHQpLCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKGRibC5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBKU0NfVFlQ
RV9WQUxVRSwgZGJsLmdldCgpLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihy
ZXN1bHQuZ2V0KCkpLCA9PSwgNDAwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVj
a2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0
LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLAorICAgICAgICAgICAgInN1bUZ1
bmN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiIKKyAgICAgICAgICAgICIgICAgdmFyIHJlc3Vs
dCA9IDA7XG4iCisgICAgICAgICAgICAiICAgIGZvciAodmFyIGkgaW4gYXJyYXkpIHsgcmVzdWx0
ICs9IGFycmF5W2ldOyB9XG4iCisgICAgICAgICAgICAiICAgIHJldHVybiByZXN1bHQ7XG4iCisg
ICAgICAgICAgICAifSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5jdGlvbi5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoZnVuY3Rpb24uZ2V0KCkpKTsK
KworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBhcnJheSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X2FycmF5KGNvbnRleHQuZ2V0KCksIEdfVFlQRV9JTlQsIDIsIEdfVFlQRV9JTlQsIDQsIEdf
VFlQRV9JTlQsIDYsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goYXJyYXku
Z2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBKU0NfVFlQRV9WQUxVRSwgYXJy
YXkuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkp
LCA9PSwgMTIpOworCisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdS
ZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAg
ICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNv
bnRleHQuZ2V0KCksIDEpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwg
anNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMykpOworICAgICAgICBnX3B0cl9h
cnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgp
LCA1KSk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2Nh
bGwoZnVuY3Rpb24uZ2V0KCksIEdfVFlQRV9QVFJfQVJSQVksIGdBcnJheS5nZXQoKSwgR19UWVBF
X05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA5KTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRs
ZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRl
eHQuZ2V0KCksICJzdW1GdW5jdGlvbiIsIEdfQ0FMTEJBQ0soc3VtRnVuY3Rpb24pLCBHX1RZUEVf
SU5ULCAxLCBHX1RZUEVfUFRSX0FSUkFZKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rp
b24uZ2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwg
InN1bUZ1bmN0aW9uIiwgZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
c3VtRnVuY3Rpb24oWzIsNCw2XSkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkp
LCA9PSwgMTIpOworCisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdS
ZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAg
ICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNv
bnRleHQuZ2V0KCksIDEpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwg
anNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMykpOworICAgICAgICBnX3B0cl9h
cnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgp
LCA1KSk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2Nh
bGwoZnVuY3Rpb24uZ2V0KCksIEdfVFlQRV9QVFJfQVJSQVksIGdBcnJheS5nZXQoKSwgR19UWVBF
X05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA5KTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NPYmplY3QoKQoreworICAgIHsKKyAgICAgICAgTGVh
a0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250
ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNv
bnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiY2xhc3MgRm9vIHsgZm9vKG4p
IHsgcmV0dXJuIG4gKiAyOyB9IH07IGZvbyA9IG5ldyBGb287IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3Qo
Zm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFu
Y2Vfb2YoZm9vLmdldCgpLCAiRm9vIikpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgp
LCAiZm9vIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1i
ZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7CisKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9
IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBk
aWRUaHJvdyk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2lu
dm9rZV9tZXRob2QoZm9vLmdldCgpLCAiYmFyIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9O
RSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgfQorCisgICAg
eworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2Vw
dGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
b2JqZWN0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKG9iamVjdC5nZXQo
KSwgIk9iamVjdCIpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm9wZXJ0eSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAyNSkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2Jq
ZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgInZhbCIsIHN0YXRpY19jYXN0
PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oMCksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNj
X2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsKKwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWw7IikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1
ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlLmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7Cisg
ICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsK
KyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgIid1c2Ugc3RyaWN0JzsgZi52YWwgPSAzMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVk
KHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5k
bGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYucHJvcGVydHlJc0VudW1lcmFibGUoJ3ZhbCcpOyIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19ib29sZWFuKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBGQUxTRSk7CisKKyAgICAgICAgdmFs
dWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImRlbGV0
ZSBmLnZhbDsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
Zi52YWw7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDI1KTsKKwor
ICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0
LmdldCgpLCA1MikpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOwor
ICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQo
KSwgInZhbCIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oMCksIHByb3BlcnR5
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRp
ZFRocm93KTsKKworICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251
bWJlcihjb250ZXh0LmdldCgpLCAzMikpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5
LmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShv
YmplY3QuZ2V0KCksICJ2YWwyIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihK
U0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJM
RSksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMjsiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVy
KHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50
MzIodmFsdWUuZ2V0KCkpLCA9PSwgMzIpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIndXNlIHN0cmljdCc7IGYudmFsMiA9
IDQ1OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIHZh
bHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZh
bDI7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQ1KTsKKworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiZi5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndmFsMicpOyIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFu
KHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZh
bHVlLmdldCgpKSA9PSBUUlVFKTsKKworICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2Nf
dmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxMjUpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3By
b3BlcnR5X2RhdGEob2JqZWN0LmdldCgpLCAidmFsMyIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJv
cGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BFUlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9Q
Uk9QRVJUWV9XUklUQUJMRSksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMzsiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChq
c2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTI1KTsKKworICAgICAgICBwcm9w
ZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxNTAp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGpzY192
YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEob2JqZWN0LmdldCgpLCAidmFsMyIsIHN0
YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BFUlRZX0NPTkZJ
R1VSQUJMRSksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMzsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
bnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTUwKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZGVsZXRlIGYudmFsMzsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWwzOyIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc191bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNv
bnRleHQuZ2V0KCksICJmb28iLCBHX0NBTExCQUNLKGZvbyksIEdfVFlQRV9JTlQsIDEsIEdfVFlQ
RV9JTlQpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAg
ICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJm
b28iLCBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5RmxhZ3M+KDApLCBmdW5jdGlvbi5nZXQo
KSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJmb28iLCBHX1RZUEVfSU5U
LCAyMDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkp
LCA9PSwgNDAwKTsKKworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5k
bGVyLCBkaWRUaHJvdyk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2Jq
ZWN0X2ludm9rZV9tZXRob2Qob2JqZWN0LmdldCgpLCAiZm9vIiwgR19UWVBFX1BPSU5URVIsICIy
MDAiLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7
CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBH
UmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRp
b25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29u
dGV4dC5nZXQoKSwgMTI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfaXNfb2JqZWN0KHZhbHVlLmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKHZhbHVlLmdldCgpLCAi
T2JqZWN0IikpOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgZ19h
c3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZv
a2VfbWV0aG9kKHZhbHVlLmdldCgpLCAiZm9vIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9O
RSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICB9Cit9CisK
K3R5cGVkZWYgc3RydWN0IF9Gb28gRm9vOworc3RydWN0IF9Gb28geworICAgIGludCBmb287Cisg
ICAgRm9vKiBzaWJsaW5nOworfTsKKworc3RhdGljIEZvbyogZm9vQ3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gZ19uZXcwKEZvbywgMSk7Cit9CisKK3N0YXRpYyBGb28qIGZvb0NyZWF0ZVdpdGhGb28o
aW50IHZhbHVlKQoreworICAgIGF1dG8qIGYgPSBmb29DcmVhdGUoKTsKKyAgICBmLT5mb28gPSB2
YWx1ZTsKKyAgICByZXR1cm4gZjsKK30KKworc3RhdGljIHZvaWQgZm9vRnJlZShGb28qIGZvbykK
K3sKKyAgICBnX2ZyZWUoZm9vKTsKK30KKworc3RhdGljIHZvaWQgc2V0Rm9vKEZvbyogZm9vLCBp
bnQgdmFsdWUpCit7CisgICAgZm9vLT5mb28gPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBnZXRG
b28oRm9vKiBmb28pCit7CisgICAgcmV0dXJuIGZvby0+Zm9vOworfQorCitzdGF0aWMgdm9pZCBz
ZXRTaWJsaW5nKEZvbyogZm9vLCBGb28qIHNpYmxpbmcpCit7CisgICAgZm9vLT5zaWJsaW5nID0g
c2libGluZzsKK30KKworc3RhdGljIEZvbyogZ2V0U2libGluZyhGb28qIGZvbykKK3sKKyAgICBy
ZXR1cm4gZm9vLT5zaWJsaW5nOworfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseUZvbyhGb28qIGZv
bywgaW50IG11bHRpcGxpZXIpCit7CisgICAgZm9vLT5mb28gKj0gbXVsdGlwbGllcjsKK30KKwor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBiYXo7Cit9IEJhejsKKworc3RhdGljIEJheiogYmF6
Q3JlYXRlKCkKK3sKKyAgICByZXR1cm4gZ19uZXcwKEJheiwgMSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RKU0NDbGFzcygpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOwor
ICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAg
ICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29u
dGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3Rp
Znk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAg
IGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIGpz
Y19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9v
Q3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQo
KSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImYgaW5zdGFuY2VvZiBGb287IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkp
KTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgImdldEZvbyIsIEdf
Q0FMTEJBQ0soZ2V0Rm9vKSwgR19UWVBFX0lOVCwgMCwgR19UWVBFX05PTkUpOworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9r
ZV9tZXRob2QoZm9vLmdldCgpLCAiZ2V0Rm9vIiwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19u
dW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiB2YWx1ZTIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYuZ2V0Rm9vKCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUyLmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gdmFsdWUyLmdldCgpKTsKKworICAgICAgICBq
c2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgInNldEZvbyIsIEdfQ0FMTEJBQ0soc2V0Rm9v
KSwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9JTlQpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQoKSwgInNldEZvbyIsIEdf
VFlQRV9JTlQsIDI1LCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3Vs
dC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJmLmdldEZvbygpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVl
LmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuc2V0Rm9vKDQ1KSIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2Nf
dmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgpLCAiZ2V0Rm9vIiwgR19UWVBFX05P
TkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA0NSk7CisKKyAgICAg
ICAganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgIkNyZWF0ZVdpdGhGb28iLCBH
X0NBTExCQUNLKGZvb0NyZWF0ZVdpdGhGb28pLCBHX1RZUEVfUE9JTlRFUiwgMSwgR19UWVBFX0lO
VCk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbzIgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyID0gbmV3IEZvby5DcmVhdGVXaXRoRm9vKDQy
KTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vMi5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoZm9vMi5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChq
c2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvbzIuZ2V0KCksIGpzY19jbGFzc19nZXRf
bmFtZShqc2NDbGFzcykpKTsKKyAgICAgICAgZ19hc3NlcnQoZm9vLmdldCgpICE9IGZvbzIuZ2V0
KCkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYyIGluc3RhbmNlb2YgRm9vOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihy
ZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVz
dWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZjIgaW5zdGFuY2VvZiBGb28uQ3JlYXRlV2l0aEZvbzsiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIGpzY19jbGFzc19h
ZGRfcHJvcGVydHkoanNjQ2xhc3MsICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEZv
byksIEdfQ0FMTEJBQ0soc2V0Rm9vKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5mb28iKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVt
YmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDIpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyLmZvbyA9IDUyIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5mb28iKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNTIpOworCisgICAgICAgIEpTQ0NsYXNz
KiBvdGhlckNsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwg
IkJheiIsIG51bGxwdHIsIGdfZnJlZSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob3RoZXJDbGFz
cyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChvdGhlckNsYXNzKSk7
CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3RvcihvdGhlckNsYXNzLCBudWxscHRy
LCBHX0NBTExCQUNLKGJhekNyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7
CisKKyAgICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9v
LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUob3RoZXJDbGFzcykpKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vMi5nZXQoKSwganNjX2NsYXNz
X2dldF9uYW1lKG90aGVyQ2xhc3MpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmF6
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiYXogPSBu
ZXcgQmF6KCk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGJhei5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoYmF6LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBqc2NfY2xhc3Nf
Z2V0X25hbWUob3RoZXJDbGFzcykpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV9vYmpl
Y3RfaXNfaW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3Mp
KSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAg
ICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3
KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNl
cHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAg
SlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5n
ZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZv
b0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisKKyAgICAgICAganNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29D
cmVhdGUpLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworICAgICAgICBqc2NfY2xh
c3NfYWRkX3Byb3BlcnR5KGpzY0NsYXNzLCAic2libGluZyIsIEdfVFlQRV9QT0lOVEVSLCBHX0NB
TExCQUNLKGdldFNpYmxpbmcpLCBHX0NBTExCQUNLKHNldFNpYmxpbmcpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYxID0gbmV3IEZvbygpOyBmMiA9IG5ldyBGb28oKTsgZjIuc2libGlu
ZyA9IGYxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gZjEgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJmMSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmMS5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoZjEuZ2V0KCkpKTsKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gZjIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJmMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmMi5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoZjIuZ2V0KCkpKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZjIuc2libGluZyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHZhbHVlLmdldCgpID09IGYxLmdldCgp
KTsKKworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShmMS5nZXQoKSwgInNp
YmxpbmciLCBmMi5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMS5zaWJsaW5nIikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gZjIu
Z2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAg
ICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAg
ICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRl
eHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5
Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworCisgICAgICAg
IGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0so
Zm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAganNj
X2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJB
Q0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pKTsKKworICAgICAgICBGb28qIGYgPSBmb29D
cmVhdGVXaXRoRm9vKDI1KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGYsIGpzY0NsYXNzKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX29iamVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29i
amVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFz
cykpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYi
LCBmb28uZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgaW5zdGFuY2VvZiBGb287
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZm9vIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDI1KTsKKworICAgICAg
ICBzZXRGb28oZiwgNDIpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVz
dWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIo
cmVzdWx0LmdldCgpKSwgPT0sIDQyKTsKKworICAgICAgICBKU0NDbGFzcyogYmF6Q2xhc3MgPSBq
c2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiQmF6IiwgbnVsbHB0ciwg
Z19mcmVlKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChiYXpDbGFzcyk7CisKKyAgICAgICAganNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3RvcihiYXpDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXpD
cmVhdGUpLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpOworCisgICAgICAgIEJheiog
YnogPSBiYXpDcmVhdGUoKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmF6ID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGJ6LCBiYXpDbGFzcykpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKGJhei5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc19vYmplY3QoYmF6LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9v
YmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmF6Q2xh
c3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29m
KGJhei5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICBnX2Fz
c2VydCghanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFz
c19nZXRfbmFtZShiYXpDbGFzcykpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgImJ6IiwgYmF6LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJieiBpbnN0YW5jZW9mIEJh
ejsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYnogaW5z
dGFuY2VvZiBGb287IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydCghanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmIGluc3RhbmNlb2YgQmF6OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQo
KSkpOworCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGJhei5nZXQoKSwg
ImZvbyIsIGZvby5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYnouZm9vIikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSBmb28u
Z2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAg
ICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAg
ICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRl
eHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5
Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworCisgICAgICAg
IGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0so
Zm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAganNj
X2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJB
Q0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pKTsKKworICAgICAgICBGb28qIGYgPSBmb29D
cmVhdGVXaXRoRm9vKDI1KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGYsIGpzY0NsYXNzKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX29iamVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29i
amVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFz
cykpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYx
IiwgZm9vLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJmMiIsIGZvby5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEgPT09IGYy
OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gcHJvcGVydHkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29u
dGV4dC5nZXQoKSwgNTApKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7
CisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGZvby5nZXQoKSwgIm4iLCBw
cm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEubiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJl
c3VsdC5nZXQoKSksID09LCA1MCk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tl
ciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0
ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFz
cyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOwor
CisgICAgICAgIGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdf
Q0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAg
ICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIsIEdfVFlQRV9JTlQs
IEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pKTsKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQo
KSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0
KCksIDEyNSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAg
anNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZm9vLmdldCgpLCAiZm9vIiwgdmFsdWUuZ2V0
KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5fX2xvb2t1cEdldHRlcl9fKCdmb28n
KS5jYWxsKGYpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0KHZhbHVlLmdldCgpID09IHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgYm9v
bCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRp
b25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5fX2xvb2t1cEdldHRlcl9fKCdmb28nKS5j
YWxsKHt9KSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxK
U0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxl
ciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBq
c2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28i
LCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2Ns
YXNzX2dldF9wYXJlbnQoanNjQ2xhc3MpKTsKKworICAgICAgICBib29sIGRpZFRocm93ID0gZmFs
c2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRo
cm93KTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0
ciwgR19DQUxMQkFDSyhmb29DcmVhdGUpLCBHX1RZUEVfTk9ORSwgMCwgR19UWVBFX05PTkUpOwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmlu
ZWQoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5k
bGVyLCBkaWRUaHJvdyk7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgRm9vIHBh
cmVudDsKKyAgICBpbnQgYmFyOworfSBCYXI7CisKK3N0YXRpYyBCYXIqIGJhckNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIGdfbmV3MChCYXIsIDEpOworfQorCitzdGF0aWMgdm9pZCBiYXJGcmVlKEJh
ciogYmFyKQoreworICAgIGdfZnJlZShiYXIpOworfQorCitzdGF0aWMgdm9pZCBzZXRCYXIoQmFy
KiBiYXIsIGludCB2YWx1ZSkKK3sKKyAgICBiYXItPmJhciA9IHZhbHVlOworfQorCitzdGF0aWMg
aW50IGdldEJhcihCYXIqIGJhcikKK3sKKyAgICByZXR1cm4gYmFyLT5iYXI7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RKU0NQcm90b3R5cGVzKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2Vy
IGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQo
KSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBKU0NDbGFzcyogZm9vQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rl
cl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvb0NsYXNz
KTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19jbGFzc19nZXRfcGFyZW50KGZvb0NsYXNzKSk7Cisg
ICAgICAgIGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoZm9vQ2xhc3MsIG51bGxwdHIsIEdfQ0FM
TEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAg
ICAganNjX2NsYXNzX2FkZF9tZXRob2QoZm9vQ2xhc3MsICJtdWx0aXBseSIsIEdfQ0FMTEJBQ0so
bXVsdGlwbHlGb28pLCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7CisgICAgICAgIGpzY19j
bGFzc19hZGRfcHJvcGVydHkoZm9vQ2xhc3MsICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNL
KGdldEZvbyksIEdfQ0FMTEJBQ0soc2V0Rm9vKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGJhckNs
YXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkJhciIsIGZv
b0NsYXNzLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihiYXJGcmVlKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goYmFyQ2xhc3MpOworICAgICAgICBnX2Fzc2VydChqc2NfY2xhc3Nf
Z2V0X3BhcmVudChiYXJDbGFzcykgPT0gZm9vQ2xhc3MpOworICAgICAgICBqc2NfY2xhc3NfYWRk
X2NvbnN0cnVjdG9yKGJhckNsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGJhckNyZWF0ZSksIEdf
VFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgIGpzY19jbGFzc19hZGRfcHJv
cGVydHkoYmFyQ2xhc3MsICJiYXIiLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEJhciksIEdf
Q0FMTEJBQ0soc2V0QmFyKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZv
bygpOyBiID0gbmV3IEJhcigpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZi5fX3Byb3RvX18gPT0gRm9vLnByb3RvdHlwZSIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3Rv
X2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5fX3Byb3RvX18gPT0gQmFyLnByb3Rv
dHlwZSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5fX3By
b3RvX18uX19wcm90b19fID09IEZvby5wcm90b3R5cGUiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4o
cmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29i
amVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19p
bnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShmb29DbGFzcykpKTsKKyAg
ICAgICAgZ19hc3NlcnQoIWpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgp
LCBqc2NfY2xhc3NfZ2V0X25hbWUoYmFyQ2xhc3MpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEZv
byIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5j
ZW9mIEJhciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnQoIWpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IGJhciA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgImIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goYmFyLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChiYXIuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihiYXIuZ2V0KCksIGpz
Y19jbGFzc19nZXRfbmFtZShiYXJDbGFzcykpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVl
X29iamVjdF9pc19pbnN0YW5jZV9vZihiYXIuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShmb29D
bGFzcykpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImIgaW5zdGFuY2VvZiBCYXIiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xl
YW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFu
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIgaW5zdGFuY2VvZiBGb28iKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19i
b29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5iYXIgPSAyNTsgYi5mb28gPSA0Mjsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiYi5iYXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9
PSwgMjUpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiYi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkp
LCA9PSwgNDIpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiYi5tdWx0aXBseSgyKSIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZh
bHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIo
dmFsdWUuZ2V0KCkpLCA9PSwgODQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlRXJy
b3IoKQoreworICAgIGpzY19jb250ZXh0X3Rocm93KGpzY19jb250ZXh0X2dldF9jdXJyZW50KCks
ICJBUEkgZXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NFeGNlcHRpb25zKCkK
K3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2Nf
Y29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgICAgICAvLyBCeSBkZWZhdWx0IGV4Y2VwdGlvbnMgYXJlIG5vdCBjYXVnaHQuCisgICAgICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAg
IGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpz
Y19leGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0aW9uKSwgPT0sICJDYW4ndCBmaW5kIHZhcmlh
YmxlOiBmb28iKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfZXhjZXB0aW9uX2dldF9s
aW5lX251bWJlcihleGNlcHRpb24pLCA9PSwgMSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfZXhj
ZXB0aW9uX2dldF9zb3VyY2VfdXJpKGV4Y2VwdGlvbikpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250
ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNl
cHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IDI1
O1xuZm9vOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWlu
dChqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlcihleGNlcHRpb24pLCA9PSwgMik7CisgICAg
fQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRy
PEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCghanNj
X2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlX3dpdGhf
c291cmNlX3VyaShjb250ZXh0LmdldCgpLCAiZm9vIiwgImZpbGU6Ly8vZm9vL3NjcmlwdC5qcyIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8q
IGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpzY19leGNl
cHRpb25fZ2V0X3NvdXJjZV91cmkoZXhjZXB0aW9uKSwgPT0sICJmaWxlOi8vL2Zvby9zY3JpcHQu
anMiKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAg
ICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9u
ZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KCFqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3
X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCksICJjcmVhdGVFcnJvciIsIEdfQ0FMTEJBQ0soY3JlYXRl
RXJyb3IpLCBHX1RZUEVfTk9ORSwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LmdldCgpLCAiY3JlYXRlRXJyb3IiLCBmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJ2YXIgcmVzdWx0OyB0cnkgeyBjcmVhdGVFcnJvcigpOyB9IGNhdGNoIChl
KSB7IHJlc3VsdCA9ICdDYXVnaHQgZXhjZXB0aW9uJzsgfSIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfc3RyaW5n
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhq
c2NfdmFsdWVfdG9fc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBz
dHIocmVzdWx0U3RyaW5nLmdldCgpLCA9PSwgIkNhdWdodCBleGNlcHRpb24iKTsKKyAgICAgICAg
Z19hc3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisg
ICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAidmFyIHJlc3VsdDsgY3JlYXRlRXJyb3IoKTsgcmVzdWx0ID0gJ05vIGV4Y2VwdGlvbic7
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8q
IGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpzY19leGNl
cHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0aW9uKSwgPT0sICJBUEkgZXhjZXB0aW9uIik7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoanNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoZXhjZXB0
aW9uKSwgPT0sIDEpOworICAgICAgICBnX2Fzc2VydCghanNjX2V4Y2VwdGlvbl9nZXRfc291cmNl
X3VyaShleGNlcHRpb24pKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0
KCkpKTsKKworICAgICAgICBzdHJ1Y3QgVGVzdCB7CisgICAgICAgICAgICBKU0NDb250ZXh0KiBj
b250ZXh0OworICAgICAgICAgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IGV4Y2VwdGlvbjsKKyAg
ICAgICAgICAgIGJvb2wgd2FzRGVsZXRlZDsKKyAgICAgICAgfTsKKworICAgICAgICBUZXN0IHRl
c3QgPSB7IGNvbnRleHQuZ2V0KCksIG51bGxwdHIsIGZhbHNlIH07CisgICAgICAgIGpzY19jb250
ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dC5nZXQoKSwgW10oSlNDQ29udGV4dCog
Y29udGV4dCwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7Cisg
ICAgICAgICAgICBhdXRvKiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VGVzdCo+KHVzZXJEYXRhKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KGNvbnRleHQgPT0gdGVzdC0+Y29udGV4dCk7CisgICAgICAgICAg
ICBnX2Fzc2VydCghdGVzdC0+ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF0ZXN0
LT53YXNEZWxldGVkKTsKKyAgICAgICAgICAgIHRlc3QtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsK
KyAgICAgICAgfSwgJnRlc3QsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxUZXN0Kj4odXNlckRhdGEpLT53YXNEZWxldGVkID0gdHJ1ZTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmb28iKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgLy8gRXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkg
dGhlIHVzZXIgaGFuZGxlci4KKyAgICAgICAgZ19hc3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNl
cHRpb24oY29udGV4dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9O
KHRlc3QuZXhjZXB0aW9uLmdldCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godGVzdC5leGNl
cHRpb24uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRf
bWVzc2FnZSh0ZXN0LmV4Y2VwdGlvbi5nZXQoKSksID09LCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTog
Zm9vIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoanNjX2V4Y2VwdGlvbl9nZXRfbGluZV9u
dW1iZXIodGVzdC5leGNlcHRpb24uZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIGdfYXNzZXJ0KCFq
c2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpKHRlc3QuZXhjZXB0aW9uLmdldCgpKSk7CisKKyAg
ICAgICAgZ19hc3NlcnQoIXRlc3Qud2FzRGVsZXRlZCk7CisgICAgICAgIGpzY19jb250ZXh0X3Bv
cF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodGVz
dC53YXNEZWxldGVkKTsKKworICAgICAgICB0ZXN0LmV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAg
ICAgIHRlc3Qud2FzRGVsZXRlZCA9IGZhbHNlOworICAgICAgICBqc2NfY29udGV4dF9wdXNoX2V4
Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQuZ2V0KCksIFtdKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpT
Q0V4Y2VwdGlvbiogZXhjZXB0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAg
YXV0byogdGVzdCA9IHN0YXRpY19jYXN0PFRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBn
X2Fzc2VydChjb250ZXh0ID09IHRlc3QtPmNvbnRleHQpOworICAgICAgICAgICAgZ19hc3NlcnQo
IXRlc3QtPmV4Y2VwdGlvbik7CisgICAgICAgICAgICBnX2Fzc2VydCghdGVzdC0+d2FzRGVsZXRl
ZCk7CisgICAgICAgICAgICB0ZXN0LT5leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgICAg
ICBqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgfSwgJnRlc3QsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxUZXN0Kj4odXNlckRhdGEpLT53YXNEZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgLy8gRXhjZXB0aW9uIHdhcyBoYW5kbGVkIGJ5IHRoZSB1c2VyIGhhbmRsZXIsIGJ1dCBu
b3QgY2F1Z2h0LgorICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhj
ZXB0aW9uKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9O
KGV4Y2VwdGlvbikpOworICAgICAgICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgICAg
IGdfYXNzZXJ0KGV4Y2VwdGlvbiA9PSB0ZXN0LmV4Y2VwdGlvbi5nZXQoKSk7CisKKyAgICAgICAg
Z19hc3NlcnQoIXRlc3Qud2FzRGVsZXRlZCk7CisgICAgICAgIGpzY19jb250ZXh0X3BvcF9leGNl
cHRpb25faGFuZGxlcihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodGVzdC53YXNE
ZWxldGVkKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NQcm9taXNlcygpCit7Cisg
ICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgIGNoZWNrZXIud2F0Y2goY29udGV4
dC5nZXQoKSk7CisgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQu
Z2V0KCkpOworCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcHJvbWlzZSA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgIlByb21pc2UiKSk7CisgICAgY2hlY2tl
ci53YXRjaChwcm9taXNlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfZnVuY3Rp
b24ocHJvbWlzZS5nZXQoKSkpOworCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ0eXBlb2YgUHJvbWlz
ZSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHJl
c3VsdFN0cmluZyhqc2NfdmFsdWVfdG9fc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcuZ2V0KCksID09LCAiZnVuY3Rpb24iKTsKKworICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVz
dWx0ID0gMDsgUHJvbWlzZS5yZXNvbHZlKDQyKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXN1
bHQgPSB2YWx1ZTsgfSk7IikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKwor
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92
YWx1ZShjb250ZXh0LmdldCgpLCAicmVzdWx0IikpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0s
IDQyKTsKK30KKworc3RhdGljIGJvb2wgc19mb29XYXNGcmVlZDsKKworc3RhdGljIHZvaWQgZm9v
RnJlZUFuZExvZyhGb28qIGZvbykKK3sKKyAgICBmb29GcmVlKGZvbyk7CisgICAgc19mb29XYXNG
cmVlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NHYXJiYWdlQ29sbGVjdG9yKCkK
K3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRs
ZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBjaGVja2VyLndhdGNoKG9iamVjdC5n
ZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihmb28u
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihmb28u
Z2V0KCkpLCA9PSwgMjUpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShv
YmplY3QuZ2V0KCksICJmb28iLCBmb28uZ2V0KCkpOworCisgICAgICAgIGpzY19jb250ZXh0X3Nl
dF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIsIG9iamVjdC5nZXQoKSk7CisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChvYmplY3QuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKworICAgICAg
ICBvYmplY3QgPSBudWxscHRyOworICAgICAgICBmb28gPSBudWxscHRyOworICAgICAgICByZXN1
bHQgPSBudWxscHRyOworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsK
KyAgICAgICAgZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGZvby5nZXQoKSksID09LCAyNSk7CisKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmID0gdW5kZWZpbmVkIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgp
KSk7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOwor
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3Qob2JqZWN0LmdldCgpKSk7Cisg
ICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIsIG9iamVjdC5n
ZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChvYmplY3QuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJm
LmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGZvby5nZXQoKSksID09LCAyNSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0Nv
bnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4
Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgc19mb29XYXNGcmVlZCA9
IGZhbHNlOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lz
dGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0
PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlQW5kTG9nKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
anNjQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9wYXJlbnQoanNjQ2xh
c3MpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxs
cHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9O
RSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVl
X2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29i
amVjdF9pc19pbnN0YW5jZV9vZihvYmplY3QuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2ND
bGFzcykpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQob2JqZWN0LmdldCgpID09
IHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gdW5kZWZpbmVkIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191
bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgZ19hc3NlcnQoIXNfZm9vV2FzRnJl
ZWQpOworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFzX2Zvb1dhc0ZyZWVkKTsKKworICAgICAgICBvYmplY3QgPSBudWxs
cHRyOworICAgICAgICBnX2Fzc2VydCghc19mb29XYXNGcmVlZCk7CisgICAgICAgIGpzY0NvbnRl
eHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoc19mb29X
YXNGcmVlZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0c0pTQ1ZpcnR1YWxNYWNoaW5l
KCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQ
dHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhh
bmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBhdXRvIHRo
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJKU0NWaXJ0dWFsTWFjaGluZVRlc3QiLCBbJl0geworICAg
ICAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mo
Y29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGZvb0ZyZWVBbmRMb2cpKTsKKyAgICAgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xh
c3MpOworICAgICAgICAgICAgZ19hc3NlcnQoIWpzY19jbGFzc19nZXRfcGFyZW50KGpzY0NsYXNz
KSk7CisKKyAgICAgICAgICAgIGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51
bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9O
T05FKTsKKyAgICAgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7Cisg
ICAgICAgICAgICBjaGVja2VyLndhdGNoKG9iamVjdC5nZXQoKSk7CisgICAgICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQob2JqZWN0LmdldCgpKSA9PSBjb250ZXh0LmdldCgp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3Qob2JqZWN0LmdldCgp
KSk7CisgICAgICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29m
KG9iamVjdC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICB9
KTsKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICB0aHJlYWQt
PmRldGFjaCgpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X29iamVjdChvYmplY3QuZ2V0KCkpKTsKKworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxl
Y3QoY29udGV4dC5nZXQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBWZWN0b3I8UmVmPFRo
cmVhZD4sIDU+IHRocmVhZHM7CisgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVu
ZChUaHJlYWQ6OmNyZWF0ZSgiSlNDVmlydHVhbE1hY2hpbmVUZXN0IiwgWyZva10geworICAgICAg
ICAgICAgICAgIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gYWRvcHRHUmVmKGpzY192
aXJ0dWFsX21hY2hpbmVfbmV3KCkpOworICAgICAgICAgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hp
bmUodm0uZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgInZhciBhcnJheSA9IFt7fV07XG4iCisgICAgICAgICAgICAgICAgICAgICJm
b3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHtcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAg
ICB2YXIgbmV3QXJyYXkgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoICogMik7XG4iCisgICAgICAg
ICAgICAgICAgICAgICIgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdBcnJheS5sZW5ndGg7ICsr
ailcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgbmV3QXJyYXlbal0gPSB7cGFyZW50
OiBhcnJheVtqIC8gMl19O1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgIGFycmF5ID0gbmV3
QXJyYXk7XG4iCisgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgKSk7
CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5n
ZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGV4Y2Vw
dGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ19tZXNzYWdlKCJVbmNhdWdodCBleGNlcHRpb246ICVzIiwganNjX2V4
Y2VwdGlvbl9nZXRfbWVzc2FnZShleGNlcHRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgb2sg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJhcnJheSIpKTsKKyAgICAgICAgICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2Nv
bnRleHQodmFsdWUuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlm
ICghanNjX3ZhbHVlX2lzX29iamVjdCh2YWx1ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZ19tZXNzYWdlKCJEaWQgbm90IGZpbmQgXCJhcnJheVwiIHZhcmlhYmxlIik7CisgICAgICAg
ICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAg
IH0pKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogdGhyZWFkcykg
eworICAgICAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICAgICAg
dGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfYXNzZXJ0KG9rKTsKKyAg
ICB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBnX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIG51bGxwdHIpOworCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNj
L2Jhc2ljIiwgdGVzdEpTQ0Jhc2ljKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvdHlwZXMi
LCB0ZXN0SlNDVHlwZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9mdW5jdGlvbiIsIHRl
c3RKU0NGdW5jdGlvbik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL29iamVjdCIsIHRlc3RK
U0NPYmplY3QpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9jbGFzcyIsIHRlc3RKU0NDbGFz
cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3Byb3RvdHlwZXMiLCB0ZXN0SlNDUHJvdG90
eXBlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2V4Y2VwdGlvbnMiLCB0ZXN0SlNDRXhj
ZXB0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3Byb21pc2VzIiwgdGVzdEpTQ1By
b21pc2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZ2FyYmFnZS1jb2xsZWN0b3IiLCB0
ZXN0SlNDR2FyYmFnZUNvbGxlY3Rvcik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3ZtIiwg
dGVzdHNKU0NWaXJ0dWFsTWFjaGluZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335929</attachid>
            <date>2018-03-16 04:29:19 -0700</date>
            <delta_ts>2018-03-20 03:27:44 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>jsc-glib-api.diff</filename>
            <type>text/plain</type>
            <size>245370</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCmluZGV4
IDM5NThjZjQ5MjVmLi5hYWU1ZDQxOGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5oPgogCi0jaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRCB8fCBkZWZpbmVk
KEpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKQEAgLTU1LDYg
KzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBKU0Nf
T0JKQ19BUElfRU5BQkxFRAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVEIHx8IGRlZmlu
ZWQoSlNDX0dMSUJfQVBJX0VOQUJMRUQpCiAKICNlbmRpZiAvLyBKU0FQSVdyYXBwZXJPYmplY3Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3JhcHBl
ck9iamVjdEdMaWIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQVBJV3Jh
cHBlck9iamVjdEdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yY2QzYmVhY2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisKKyNpbmNsdWRl
ICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKK307CisKK3N0
YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcj4ganNXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI7CisgICAgcmV0dXJuICZq
c1dyYXBwZXJPYmplY3RIYW5kbGVPd25lci5nZXQoKTsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqKQoreworICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXND
ZWxsKCkpOworICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlck9iamVjdCktPnJlbGVhc2VT
b29uKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0PihzdGF0aWNfY2Fz
dDxKU0M6OkpTQ0dMaWJXcmFwcGVyT2JqZWN0Kj4od3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVj
dCgpKSkpOworICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBsOjphc1dl
YWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKK30KKworYm9vbCBKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNDOjpK
U0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIC8vIFdlIHVz
ZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0byBwcmV2
ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKKyAgICAvLyB0aGUgc2FtZSB3cmFwcGVkIG9i
amVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2JhbCBv
YmplY3RzIGFsaXZlLgorICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpTQzo6SGVhcDo6aXNNYXJrZWQod3Jh
cHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNvbnRh
aW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOworfQorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvID0geyAiSlNBUElXcmFwcGVyT2JqZWN0Iiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Nh
bGxiYWNrT2JqZWN0KSB9OworCit0ZW1wbGF0ZTw+IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVj
dDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKwordGVtcGxh
dGUgPD4KK1N0cnVjdHVyZSogSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKK30KKworSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgV2Vha1NldDo6YWxsb2NhdGUodGhpcywganNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpTQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3Q6OnNldFdyYXBwZWRPYmplY3Qodm9pZCogd3JhcHBlZE9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW1fd3JhcHBlZE9iamVjdCk7CisgICAgbV93cmFwcGVkT2JqZWN0ID0gd3JhcHBlZE9iamVj
dDsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YWQ3MGI4Y2EwMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1
bmN0aW9uLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgIkFQSUNhbGxiYWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJBUElD
YXN0LmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDQ29udGV4
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Rh
dGljIEpTVmFsdWVSZWYgY2FsbEFzRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4o
dG9KUyhmdW5jdGlvbikpLT5jYWxsKGNhbGxlckNvbnRleHQsIHRoaXNPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpTT2JqZWN0UmVmIGNh
bGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiBj
b25zdHJ1Y3Rvciwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoY29uc3RydWN0b3IpKS0+Y29uc3RydWN0KGNhbGxl
ckNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKworY29u
c3QgQ2xhc3NJbmZvIEpTQ0NhbGxiYWNrRnVuY3Rpb246OnNfaW5mbyA9IHsgIkNhbGxiYWNrRnVu
Y3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQ0NhbGxiYWNrRnVuY3Rpb24pIH07CisKK0pTQ0NhbGxiYWNrRnVu
Y3Rpb24qIEpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgVHlwZSB0eXBlLCBKU0NDbGFzcyog
anNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0dXJuVHlwZSwg
VmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCk7CisgICAgSlND
Q2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0NDYWxsYmFja0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNDQ2FsbGJhY2tGdW5jdGlvbih2bSwgc3Ry
dWN0dXJlLCB0eXBlLCBqc2NDbGFzcywgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1l
KTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK0pTQ0NhbGxiYWNrRnVuY3Rpb246OkpTQ0Nh
bGxiYWNrRnVuY3Rpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVHlwZSB0eXBlLCBK
U0NDbGFzcyoganNjQ2xhc3MsIEdSZWZQdHI8R0Nsb3N1cmU+JiYgY2xvc3VyZSwgR1R5cGUgcmV0
dXJuVHlwZSwgVmVjdG9yPEdUeXBlPiYmIHBhcmFtZXRlcnMpCisgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKHZtLCBzdHJ1Y3R1cmUsIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNhbGw8SlNDQ2FsbGJhY2tG
dW5jdGlvbj4sIHR5cGUgPT0gVHlwZTo6Q29uc3RydWN0b3IgPyBBUElDYWxsYmFja0Z1bmN0aW9u
Ojpjb25zdHJ1Y3Q8SlNDQ2FsbGJhY2tGdW5jdGlvbj4gOiBudWxscHRyKQorICAgICwgbV9mdW5j
dGlvbkNhbGxiYWNrKGNhbGxBc0Z1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RDYWxsYmFjayhj
YWxsQXNDb25zdHJ1Y3RvcikKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9jbGFzcyhqc2ND
bGFzcykKKyAgICAsIG1fY2xvc3VyZShXVEZNb3ZlKGNsb3N1cmUpKQorICAgICwgbV9yZXR1cm5U
eXBlKHJldHVyblR5cGUpCisgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IFR5cGU6OkNvbnN0cnVjdG9yIHx8IGpzY0Ns
YXNzKTsKKyAgICBpZiAoR19DTE9TVVJFX05FRURTX01BUlNIQUwobV9jbG9zdXJlLmdldCgpKSkK
KyAgICAgICAgZ19jbG9zdXJlX3NldF9tYXJzaGFsKG1fY2xvc3VyZS5nZXQoKSwgZ19jY2xvc3Vy
ZV9tYXJzaGFsX2dlbmVyaWMpOworfQorCitKU1ZhbHVlUmVmIEpTQ0NhbGxiYWNrRnVuY3Rpb246
OmNhbGwoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxl
ckNvbnRleHQpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29u
dGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAo
bV90eXBlID09IFR5cGU6OkNvbnN0cnVjdG9yKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY2Fu
bm90IGNhbGwgYSBjbGFzcyBjb25zdHJ1Y3RvciB3aXRob3V0IHxuZXd8IikpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisgICAgfQorCisgICAgZ3Bv
aW50ZXIgaW5zdGFuY2UgPSBudWxscHRyOworICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6TWV0aG9k
KSB7CisgICAgICAgIGluc3RhbmNlID0ganNjQ29udGV4dFdyYXBwZWRPYmplY3QoY29udGV4dC5n
ZXQoKSwgdGhpc09iamVjdCk7CisgICAgICAgIGlmICghaW5zdGFuY2UpIHsKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCks
IEFTQ0lJTGl0ZXJhbCgiaW52YWxpZCBpbnN0YW5jZSB0eXBlIGluIG1ldGhvZCIpKSk7CisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoanNDb250ZXh0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGF1dG8gY2FsbGJhY2tEYXRhID0ganNjQ29udGV4dFB1c2hDYWxsYmFj
ayhjb250ZXh0LmdldCgpLCB0b1JlZih0aGlzKSwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwg
YXJndW1lbnRzKTsKKworICAgIC8vIEdDbG9zdXJlIGFsd2F5cyBleHBlY3QgdG8gaGF2ZSBhdCBs
ZWFzdCB0aGUgaW5zdGFuY2UgcGFyYW1ldGVyLgorICAgIGJvb2wgYWRkSW5zdGFuY2UgPSBpbnN0
YW5jZSB8fCBtX3BhcmFtZXRlcnMuaXNFbXB0eSgpOworCisgICAgYXV0byBwYXJhbWV0ZXJDb3Vu
dCA9IHN0ZDo6bWluKG1fcGFyYW1ldGVycy5zaXplKCksIGFyZ3VtZW50Q291bnQpOworICAgIGlm
IChhZGRJbnN0YW5jZSkKKyAgICAgICAgcGFyYW1ldGVyQ291bnQrKzsKKyAgICBhdXRvKiB2YWx1
ZXMgPSBzdGF0aWNfY2FzdDxHVmFsdWUqPihnX2FsbG9jYShzaXplb2YoR1ZhbHVlKSAqIHBhcmFt
ZXRlckNvdW50KSk7CisgICAgbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKEdWYWx1ZSkgKiBwYXJh
bWV0ZXJDb3VudCk7CisKKyAgICBzaXplX3QgZmlyc3RQYXJhbWV0ZXIgPSAwOworICAgIGlmIChh
ZGRJbnN0YW5jZSkgeworICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlc1swXSwgR19UWVBFX1BP
SU5URVIpOworICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKCZ2YWx1ZXNbMF0sIGluc3RhbmNl
KTsKKyAgICAgICAgZmlyc3RQYXJhbWV0ZXIgPSAxOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3RQYXJhbWV0ZXI7IGkgPCBwYXJhbWV0ZXJDb3VudCAmJiAhKmV4Y2VwdGlvbjsgKytp
KQorICAgICAgICBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3Vt
ZW50c1tpIC0gZmlyc3RQYXJhbWV0ZXJdLCBtX3BhcmFtZXRlcnNbaSAtIGZpcnN0UGFyYW1ldGVy
XSwgJnZhbHVlc1tpXSwgZXhjZXB0aW9uKTsKKworICAgIEdWYWx1ZSByZXR1cm5WYWx1ZSA9IEdf
VkFMVUVfSU5JVDsKKyAgICBpZiAobV9yZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FKQorICAgICAg
ICBnX3ZhbHVlX2luaXQoJnJldHVyblZhbHVlLCBtX3JldHVyblR5cGUpOworCisgICAgaWYgKCEq
ZXhjZXB0aW9uKQorICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgbV9y
ZXR1cm5UeXBlICE9IEdfVFlQRV9OT05FID8gJnJldHVyblZhbHVlIDogbnVsbHB0ciwgcGFyYW1l
dGVyQ291bnQsIHZhbHVlcywgbnVsbHB0cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50OyArK2kpCisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlc1tpXSk7
CisKKyAgICBpZiAoYXV0byoganNjRXhjZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlv
bihjb250ZXh0LmdldCgpKSkKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkdldEpT
VmFsdWUoanNjRXhjZXB0aW9uKTsKKworICAgIGpzY0NvbnRleHRQb3BDYWxsYmFjayhjb250ZXh0
LmdldCgpLCBXVEZNb3ZlKGNhbGxiYWNrRGF0YSkpOworCisgICAgaWYgKG1fcmV0dXJuVHlwZSA9
PSBHX1RZUEVfTk9ORSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29u
dGV4dCk7CisKKyAgICBhdXRvKiByZXR2YWwgPSAqZXhjZXB0aW9uID8gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoanNDb250ZXh0KSA6IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoY29udGV4dC5nZXQo
KSwgJnJldHVyblZhbHVlLCBleGNlcHRpb24pOworICAgIGdfdmFsdWVfdW5zZXQoJnJldHVyblZh
bHVlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitKU09iamVjdFJlZiBKU0NDYWxsYmFja0Z1
bmN0aW9uOjpjb25zdHJ1Y3QoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKGNhbGxlckNvbnRleHQpKTsK
KyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9HbG9iYWxSZWYoZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAobV9yZXR1cm5UeXBl
ID09IEdfVFlQRV9OT05FKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3JzIGNh
bm5vdCBiZSB2b2lkIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
YXV0byBjYWxsYmFja0RhdGEgPSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKGNvbnRleHQuZ2V0KCks
IHRvUmVmKHRoaXMpLCBudWxscHRyLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMpOworCisgICAg
R1ZhbHVlIHJldHVyblZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmcmV0
dXJuVmFsdWUsIG1fcmV0dXJuVHlwZSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBHQ2xvc3VyZSBhbHdheXMgZXhwZWN0IHRvIGhhdmUgYXQgbGVhc3Qg
dGhlIGluc3RhbmNlIHBhcmFtZXRlci4KKyAgICAgICAgR1ZhbHVlIGR1bW15VmFsdWUgPSBHX1ZB
TFVFX0lOSVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmZHVtbXlWYWx1ZSwgR19UWVBFX1BPSU5U
RVIpOworICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQoKSwgJnJldHVyblZh
bHVlLCAxLCAmZHVtbXlWYWx1ZSwgbnVsbHB0cik7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJmR1
bW15VmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gcGFyYW1ldGVyQ291bnQgPSBz
dGQ6Om1pbihtX3BhcmFtZXRlcnMuc2l6ZSgpLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgYXV0
byogdmFsdWVzID0gc3RhdGljX2Nhc3Q8R1ZhbHVlKj4oZ19hbGxvY2Eoc2l6ZW9mKEdWYWx1ZSkg
KiBwYXJhbWV0ZXJDb3VudCkpOworICAgICAgICBtZW1zZXQodmFsdWVzLCAwLCBzaXplb2YoR1Zh
bHVlKSAqIHBhcmFtZXRlckNvdW50KTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlckNvdW50ICYmICEqZXhjZXB0aW9uOyArK2kpCisgICAgICAgICAgICBqc2NDb250
ZXh0SlNWYWx1ZVRvR1ZhbHVlKGNvbnRleHQuZ2V0KCksIGFyZ3VtZW50c1tpXSwgbV9wYXJhbWV0
ZXJzW2ldLCAmdmFsdWVzW2ldLCBleGNlcHRpb24pOworCisgICAgICAgIGlmICghKmV4Y2VwdGlv
bikKKyAgICAgICAgICAgIGdfY2xvc3VyZV9pbnZva2UobV9jbG9zdXJlLmdldCgpLCAmcmV0dXJu
VmFsdWUsIHBhcmFtZXRlckNvdW50LCB2YWx1ZXMsIG51bGxwdHIpOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGdfdmFs
dWVfdW5zZXQoJnZhbHVlc1tpXSk7CisgICAgfQorCisgICAgaWYgKGF1dG8qIGpzY0V4Y2VwdGlv
biA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpCisgICAgICAgICpl
eGNlcHRpb24gPSBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKGpzY0V4Y2VwdGlvbik7CisKKyAgICBq
c2NDb250ZXh0UG9wQ2FsbGJhY2soY29udGV4dC5nZXQoKSwgV1RGTW92ZShjYWxsYmFja0RhdGEp
KTsKKworICAgIGlmICgqZXhjZXB0aW9uKSB7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3dpdGNoIChn
X3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKCZyZXR1cm5WYWx1ZSkpKSB7CisgICAgY2Fz
ZSBHX1RZUEVfUE9JTlRFUjoKKyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgICAgIGlmIChh
dXRvKiBwdHIgPSByZXR1cm5WYWx1ZS5kYXRhWzBdLnZfcG9pbnRlcikgeworICAgICAgICAgICAg
YXV0byogcmV0dmFsID0ganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihtX2NsYXNzLmdldCgp
LCBwdHIpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmcmV0dXJuVmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRvUmVmKHJldHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoanNDb250ZXh0KSwgQVNDSUlMaXRl
cmFsKCJjb25zdHJ1Y3RvciByZXR1cm5lZCBudWxsIikpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiaW52YWxpZCB0eXBlICIsIGdfdHlwZV9uYW1l
KEdfVkFMVUVfVFlQRSgmcmV0dXJuVmFsdWUpKSwgIiByZXR1cm5lZCBieSBjb25zdHJ1Y3RvciIp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBKU0NDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0
aWNfY2FzdDxKU0NDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCktPkpTQ0NhbGxiYWNrRnVuY3Rpb246
On5KU0NDYWxsYmFja0Z1bmN0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4NWI2M2M0YmFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NhbGxiYWNr
RnVuY3Rpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CisgICAgZnJpZW5kIHN0cnVjdCBBUElDYWxsYmFja0Z1bmN0aW9uOwor
cHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCisgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgRnVuY3Rpb24sCisgICAgICAgIE1ldGhvZCwKKyAgICAgICAg
Q29uc3RydWN0b3IKKyAgICB9OworCisgICAgc3RhdGljIEpTQ0NhbGxiYWNrRnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBUeXBlLCBKU0ND
bGFzcyosIEdSZWZQdHI8R0Nsb3N1cmU+JiYsIEdUeXBlLCBWZWN0b3I8R1R5cGU+JiYpOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIEpTVmFsdWVSZWYgY2FsbChKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJl
ZiBjb25zdHJ1Y3QoSlNDb250ZXh0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKworcHJpdmF0ZToK
KyAgICBKU0NDYWxsYmFja0Z1bmN0aW9uKFZNJiwgU3RydWN0dXJlKiwgVHlwZSwgSlNDQ2xhc3Mq
LCBHUmVmUHRyPEdDbG9zdXJlPiYmLCBHVHlwZSwgVmVjdG9yPEdUeXBlPiYmKTsKKworICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5jdGlvbkNhbGxiYWNrKCkgeyByZXR1cm4g
bV9mdW5jdGlvbkNhbGxiYWNrOyB9CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrIGNvbnN0cnVjdENhbGxiYWNrKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RDYWxsYmFjazsgfQor
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIG1fZnVuY3Rpb25DYWxsYmFjazsK
KyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgbV9jb25zdHJ1Y3RDYWxsYmFj
azsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBHUmVmUHRyPEpTQ0NsYXNzPiBtX2NsYXNzOworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IG1fY2xvc3VyZTsKKyAgICBHVHlwZSBtX3JldHVyblR5cGU7Cisg
ICAgVmVjdG9yPEdUeXBlPiBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MTQ2ZWU5ZGE0NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5jcHAKQEAgLTAsMCAr
MSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzLmgiCisKKyNpbmNsdWRlICJKU0NDYWxsYmFj
a0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDQ2xhc3NQcml2YXRlLmgiCisjaW5jbHVkZSAiSlND
Q29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
VmFsdWVQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfQ09OVEVYVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9QQVJFTlQKK307CisKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDbGFzc1ByaXZhdGUgeworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQ7Cisg
ICAgQ1N0cmluZyBuYW1lOworICAgIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBHRGVzdHJveU5v
dGlmeSBkZXN0cm95RnVuY3Rpb247CisgICAgSlNDQ2xhc3MqIHBhcmVudENsYXNzOworICAgIEpT
Qzo6V2VhazxKU0M6OkpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgSGFzaE1hcDxDU3RyaW5nLCBK
U0M6OldlYWs8SlNDOjpKU09iamVjdD4+IGNvbnN0cnVjdG9yczsKK30gSlNDQ2xhc3NQcml2YXRl
OworCitXRUJLSVRfREVGSU5FX1RZUEUoSlNDQ2xhc3MsIGpzY19jbGFzcywgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQganNjQ2xhc3NHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAg
IEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBqc2NDbGFzcy0+cHJpdi0+Y29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGpzY0Ns
YXNzLT5wcml2LT5uYW1lLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QVJFTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjQ2xhc3MtPnByaXYt
PnBhcmVudENsYXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NTZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFy
YW1TcGVjKQoreworICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAg
anNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBKU0NfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGpz
Y0NsYXNzLT5wcml2LT5uYW1lID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudCA9
IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICBqc2NDbGFzcy0+cHJpdi0+
cGFyZW50Q2xhc3MgPSBKU0NfQ0xBU1MocGFyZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjQ2xhc3NEaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBKU0NfQ0xB
U1Mob2JqZWN0KTsKKyAgICBpZiAoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpIHsKKyAgICAgICAg
SlNDbGFzc1JlbGVhc2UoanNjQ2xhc3MtPnByaXYtPmpzQ2xhc3MpOworICAgICAgICBqc2NDbGFz
cy0+cHJpdi0+anNDbGFzcyA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mo
anNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQganNjQ2xhc3NDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1Rf
Q0xBU1MoanNjX2NsYXNzX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAg
ICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBKU0NfQ0xBU1Mob2JqZWN0KS0+cHJpdjsKKyAgICBK
U0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7Cisg
ICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSBwcml2LT5uYW1lLmRhdGEoKTsKKyAgICBwcml2LT5q
c0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHByb3RvdHlwZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc1Byb3RvdHlwZSIsIHByaXYtPm5h
bWUuZGF0YSgpKSk7CisgICAgSlNDbGFzc0RlZmluaXRpb24gcHJvdG90eXBlRGVmaW5pdGlvbiA9
IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIHByb3RvdHlwZURlZmluaXRpb24uY2xhc3NO
YW1lID0gcHJvdG90eXBlTmFtZS5nZXQoKTsKKyAgICBKU0NsYXNzUmVmIHByb3RvdHlwZUNsYXNz
ID0gSlNDbGFzc0NyZWF0ZSgmcHJvdG90eXBlRGVmaW5pdGlvbik7CisgICAgcHJpdi0+cHJvdG90
eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlSlNXcmFwcGVyKHByaXYtPmNvbnRleHQsIHByb3Rv
dHlwZUNsYXNzKTsKKyAgICBKU0NsYXNzUmVsZWFzZShwcm90b3R5cGVDbGFzcyk7CisKKyAgICBp
ZiAocHJpdi0+cGFyZW50Q2xhc3MpCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCksIHRvUmVmKHByaXYtPnByb3RvdHlwZS5n
ZXQoKSksIHRvUmVmKHByaXYtPnBhcmVudENsYXNzLT5wcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQganNjX2NsYXNzX2NsYXNzX2luaXQoSlNDQ2xhc3NDbGFzcyoga2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNz
KTsKKyAgICBvYmpDbGFzcy0+Y29uc3RydWN0ZWQgPSBqc2NDbGFzc0NvbnN0cnVjdGVkOworICAg
IG9iakNsYXNzLT5kaXNwb3NlID0ganNjQ2xhc3NEaXNwb3NlOworICAgIG9iakNsYXNzLT5nZXRf
cHJvcGVydHkgPSBqc2NDbGFzc0dldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5zZXRfcHJvcGVy
dHkgPSBqc2NDbGFzc1NldFByb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkpTQ0Nv
bnRleHQiLAorICAgICAgICAgICAgIkpTQyBDb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBF
X0NPTlRFWFQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAg
ICAgICAiTmFtZSIsCisgICAgICAgICAgICAiVGhlIGNsYXNzIG5hbWUiLAorICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfUEFSRU5ULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBhcmVudCIsCisgICAg
ICAgICAgICAiUGFydGVudCIsCisgICAgICAgICAgICAiVGhlIHBhcmVudCBjbGFzcyIsCisgICAg
ICAgICAgICBKU0NfVFlQRV9DTEFTUywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsK
K30KKworR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENsYXNzLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3MgPSBh
ZG9wdEdSZWYoSlNDX0NMQVNTKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DTEFTUywgImNvbnRleHQi
LCBjb250ZXh0LCAibmFtZSIsIG5hbWUsICJwYXJlbnQiLCBwYXJlbnRDbGFzcywgbnVsbHB0cikp
KTsKKyAgICBqc2NDbGFzcy0+cHJpdi0+ZGVzdHJveUZ1bmN0aW9uID0gZGVzdHJveUZ1bmN0aW9u
OworICAgIHJldHVybiBqc2NDbGFzczsKK30KKworSlNDbGFzc1JlZiBqc2NDbGFzc0dldEpTQ2xh
c3MoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIHJldHVybiBqc2NDbGFzcy0+cHJpdi0+anND
bGFzczsKK30KKworSlNDOjpKU09iamVjdCoganNjQ2xhc3NHZXRPckNyZWF0ZUpTV3JhcHBlcihK
U0NDbGFzcyoganNjQ2xhc3MsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QpCit7CisgICAgSlNDQ2xh
c3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgcmV0dXJuIGpzY0NvbnRleHRH
ZXRPckNyZWF0ZUpTV3JhcHBlcihwcml2LT5jb250ZXh0LCBwcml2LT5qc0NsYXNzLCB0b1JlZihw
cml2LT5wcm90b3R5cGUuZ2V0KCkpLCB3cmFwcGVkT2JqZWN0LCBwcml2LT5kZXN0cm95RnVuY3Rp
b24pOworfQorCit2b2lkIGpzY0NsYXNzSW52YWxpZGF0ZShKU0NDbGFzcyoganNjQ2xhc3MpCit7
CisgICAganNjQ2xhc3MtPnByaXYtPmNvbnRleHQgPSBudWxscHRyOworfQorCitjb25zdCBjaGFy
KiBqc2NfY2xhc3NfZ2V0X25hbWUoSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0
dXJuIGpzY0NsYXNzLT5wcml2LT5uYW1lLmRhdGEoKTsKK30KKworSlNDQ2xhc3MqIGpzY19jbGFz
c19nZXRfcGFyZW50KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2ND
bGFzcy0+cHJpdi0+cGFyZW50Q2xhc3M7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfY2xhc3NfYWRkX2Nv
bnN0cnVjdG9yKEpTQ0NsYXNzKiBqc2NDbGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNr
IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlm
eSwgR1R5cGUgcmV0dXJuVHlwZSwgdW5zaWduZWQgcGFyYW1Db3VudCwgLi4uKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNhbGxiYWNrLCBudWxscHRyKTsKKworICAgIEpTQ0NsYXNz
UHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5wcml2OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHByaXYtPmNvbnRleHQsIG51bGxwdHIpOworCisgICAgaWYgKCFuYW1lKQorICAgICAgICBuYW1l
ID0gcHJpdi0+bmFtZS5kYXRhKCk7CisKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQo
YXJncywgcGFyYW1Db3VudCk7CisgICAgVmVjdG9yPEdUeXBlPiBwYXJhbWV0ZXJzOworICAgIGlm
IChwYXJhbUNvdW50KSB7CisgICAgICAgIHBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShwYXJhbUNvdW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtQ291
bnQ7ICsraSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMudW5jaGVja2VkQXBwZW5kKHZhX2FyZyhh
cmdzLCBHVHlwZSkpOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBHUmVmUHRyPEdD
bG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGNhbGxiYWNrLCB1c2Vy
RGF0YSwgcmVpbnRlcnByZXRfY2FzdDxHQ2xvc3VyZU5vdGlmeT4oZGVzdHJveU5vdGlmeSkpKTsK
KyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoanNjQ29udGV4dEdldEpTQ29udGV4dChw
cml2LT5jb250ZXh0KSk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSBKU0M6
OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBTdHJpbmc6OmZyb21VVEY4KG5hbWUpLAorICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVu
Y3Rpb246OlR5cGU6OkNvbnN0cnVjdG9yLCBqc2NDbGFzcywgV1RGTW92ZShjbG9zdXJlKSwgcmV0
dXJuVHlwZSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgYXV0byBjb25zdHJ1Y3RvciA9IGpz
Y0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQsIHRvUmVmKGZ1bmN0aW9uT2Jq
ZWN0KSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcHJvdG90eXBlID0ganNjQ29udGV4dEdldE9y
Q3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSk7
CisgICAgYXV0byBub25FbnVtZXJhYmxlID0gc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZs
YWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFIHwgSlNDX1ZBTFVFX1BST1BFUlRZ
X1dSSVRBQkxFKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKGNv
bnN0cnVjdG9yLmdldCgpLCAicHJvdG90eXBlIiwgbm9uRW51bWVyYWJsZSwgcHJvdG90eXBlLmdl
dCgpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKHByb3RvdHlw
ZS5nZXQoKSwgImNvbnN0cnVjdG9yIiwgbm9uRW51bWVyYWJsZSwgY29uc3RydWN0b3IuZ2V0KCkp
OworICAgIHByaXYtPmNvbnN0cnVjdG9ycy5zZXQobmFtZSwgZnVuY3Rpb25PYmplY3QpOworICAg
IHJldHVybiBjb25zdHJ1Y3Rvci5sZWFrUmVmKCk7Cit9CisKK3ZvaWQganNjX2NsYXNzX2FkZF9t
ZXRob2QoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2Fs
bGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBH
VHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY2FsbGJhY2spOworCisgICAgSlNDQ2xhc3NQ
cml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcml2
LT5jb250ZXh0KTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYXJh
bUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRlcnM7CisgICAgaWYgKHBhcmFtQ291
bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhcmFtQ291
bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQor
ICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQodmFfYXJnKGFyZ3MsIEdUeXBl
KSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNs
b3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2FsbGJhY2ssIHVzZXJEYXRhLCByZWlu
dGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkpOworICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRl
eHQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpTQzo6SlND
Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IFN0cmluZzo6ZnJvbVVURjgobmFtZSksCisgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlv
bjo6VHlwZTo6TWV0aG9kLCBqc2NDbGFzcywgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSkpOworICAgIGF1dG8gbWV0aG9kID0ganNjQ29udGV4dEdldE9y
Q3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgZnVuY3Rpb25PYmplY3QpOworICAgIEdSZWZQdHI8
SlNDVmFsdWU+IHByb3RvdHlwZSA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNv
bnRleHQsIHRvUmVmKHByaXYtPnByb3RvdHlwZS5nZXQoKSkpOworICAgIGF1dG8gbm9uRW51bWVy
YWJsZSA9IHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BF
UlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSk7CisgICAganNj
X3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShwcm90b3R5cGUuZ2V0KCksIG5hbWUs
IG5vbkVudW1lcmFibGUsIG1ldGhvZC5nZXQoKSk7Cit9CisKK3ZvaWQganNjX2NsYXNzX2FkZF9w
cm9wZXJ0eShKU0NDbGFzcyoganNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdUeXBlIHByb3Bl
cnR5VHlwZSwgR0NhbGxiYWNrIGdldHRlciwgR0NhbGxiYWNrIHNldHRlciwgZ3BvaW50ZXIgdXNl
ckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnkpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlUeXBlICE9IEdfVFlQRV9JTlZBTElEICYm
IHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfTk9ORSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChnZXR0
ZXIgfHwgc2V0dGVyKTsKKworICAgIEpTQ0NsYXNzUHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5w
cml2OworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpdi0+Y29udGV4dCk7CisKKyAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBwcm90b3R5cGUgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5j
b250ZXh0LCB0b1JlZihwcml2LT5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBqc2NfdmFsdWVfb2Jq
ZWN0X2RlZmluZV9wcm9wZXJ0eV9hY2Nlc3Nvcihwcm90b3R5cGUuZ2V0KCksIG5hbWUsIEpTQ19W
QUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUsIHByb3BlcnR5VHlwZSwgZ2V0dGVyLCBzZXR0ZXIs
IHVzZXJEYXRhLCBkZXN0cm95Tm90aWZ5KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0NsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZj
MDIxYzVmODMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0NsYXNzLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVk
ZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDQ2xhc3NfaAorI2RlZmluZSBKU0ND
bGFzc19oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZp
bmVzLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBKU0NfVFlQRV9DTEFTUyAgICAgICAgICAgIChqc2NfY2xhc3NfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgSlNDX0NMQVNTKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIEpTQ19UWVBFX0NMQVNTLCBKU0NDbGFzcykpCisjZGVmaW5lIEpTQ19JU19DTEFT
UyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQ
RV9DTEFTUykpCisjZGVmaW5lIEpTQ19DTEFTU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9DTEFTUywgSlNDQ2xhc3NDbGFzcykpCisj
ZGVmaW5lIEpTQ19JU19DTEFTU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBKU0NfVFlQRV9DTEFTUykpCisjZGVmaW5lIEpTQ19DTEFTU19HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBKU0NfVFlQRV9DTEFTUywg
SlNDQ2xhc3NDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKK3R5
cGVkZWYgc3RydWN0IF9KU0NDbGFzc0NsYXNzIEpTQ0NsYXNzQ2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfSlNDQ2xhc3NQcml2YXRlIEpTQ0NsYXNzUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgX0pT
Q0NvbnRleHQgSlNDQ29udGV4dDsKKworc3RydWN0IF9KU0NDbGFzcyB7CisgICAgR09iamVjdCBw
YXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBKU0NDbGFzc1ByaXZhdGUgKnByaXY7
Cit9OworCitzdHJ1Y3QgX0pTQ0NsYXNzQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgq
X2pzY19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lk
KTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5
cGUKK2pzY19jbGFzc19nZXRfdHlwZSAgICAgICAgKHZvaWQpOworCitKU0NfQVBJIGNvbnN0IGNo
YXIgKgoranNjX2NsYXNzX2dldF9uYW1lICAgICAgICAoSlNDQ2xhc3MgICAgICAqanNjX2NsYXNz
KTsKKworSlNDX0FQSSBKU0NDbGFzcyAqCitqc2NfY2xhc3NfZ2V0X3BhcmVudCAgICAgIChKU0ND
bGFzcyAgICAgICpqc2NfY2xhc3MpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY19jbGFzc19h
ZGRfY29uc3RydWN0b3IgKEpTQ0NsYXNzICAgICAgKmpzY19jbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQ2FsbGJhY2sgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdwb2ludGVyICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdE
ZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1R5cGUgICAgICAgICAgcmV0dXJuX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCAgICAgICBuX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7
CisKK0pTQ19BUEkgdm9pZAoranNjX2NsYXNzX2FkZF9tZXRob2QgICAgICAoSlNDQ2xhc3MgICAg
ICAqanNjX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAq
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgIGNhbGxiYWNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgdXNlcl9kYXRhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9ub3RpZnks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSAgICAgICAgICByZXR1cm5fdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICAgICAgIG5fcGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY2xhc3Nf
YWRkX3Byb3BlcnR5ICAgIChKU0NDbGFzcyAgICAgICpqc2NfY2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1R5cGUgICAgICAgICAgcHJvcGVydHlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDYWxsYmFjayAgICAgIGdldHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDYWxsYmFjayAgICAgIHNldHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95
Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIEpTQ0Ns
YXNzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0ND
bGFzc1ByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzc1By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmYzNjQ0ZDRk
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q2xhc3NQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNs
dWRlICJKU0NDbGFzcy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NW
YWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworR1JlZlB0cjxKU0NDbGFz
cz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCosIGNvbnN0IGNoYXIqLCBKU0NDbGFzcyosIEdE
ZXN0cm95Tm90aWZ5KTsKK0pTQ2xhc3NSZWYganNjQ2xhc3NHZXRKU0NsYXNzKEpTQ0NsYXNzKik7
CitKU0M6OkpTT2JqZWN0KiBqc2NDbGFzc0dldE9yQ3JlYXRlSlNXcmFwcGVyKEpTQ0NsYXNzKiwg
Z3BvaW50ZXIpOwordm9pZCBqc2NDbGFzc0ludmFsaWRhdGUoSlNDQ2xhc3MqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTgxN2RmMjM0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKQEAgLTAsMCArMSw2
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkpTQ0NsYXNzUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDRXhj
ZXB0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NW
YWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJKU0NXcmFwcGVyTWFwLmgiCisjaW5jbHVkZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUu
aD4KKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9WSVJUVUFMX01BQ0hJTkUsCit9
OworCitzdHJ1Y3QgRXhjZXB0aW9uSGFuZGxlciB7CisgICAgRXhjZXB0aW9uSGFuZGxlcihKU0NF
eGNlcHRpb25IYW5kbGVyIGhhbmRsZXIsIHZvaWQqIHVzZXJEYXRhID0gbnVsbHB0ciwgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveU5vdGlmeUZ1bmN0aW9uID0gbnVsbHB0cikKKyAgICAgICAgOiBoYW5k
bGVyKGhhbmRsZXIpCisgICAgICAgICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgICAgICwgZGVz
dHJveU5vdGlmeUZ1bmN0aW9uKGRlc3Ryb3lOb3RpZnlGdW5jdGlvbikKKyAgICB7CisgICAgfQor
CisgICAgfkV4Y2VwdGlvbkhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGRlc3Ryb3lOb3Rp
ZnlGdW5jdGlvbikKKyAgICAgICAgICAgIGRlc3Ryb3lOb3RpZnlGdW5jdGlvbih1c2VyRGF0YSk7
CisgICAgfQorCisgICAgRXhjZXB0aW9uSGFuZGxlcihFeGNlcHRpb25IYW5kbGVyJiYgb3RoZXIp
CisgICAgeworICAgICAgICBzdGQ6OnN3YXAoaGFuZGxlciwgb3RoZXIuaGFuZGxlcik7CisgICAg
ICAgIHN0ZDo6c3dhcCh1c2VyRGF0YSwgb3RoZXIudXNlckRhdGEpOworICAgICAgICBzdGQ6OnN3
YXAoZGVzdHJveU5vdGlmeUZ1bmN0aW9uLCBvdGhlci5kZXN0cm95Tm90aWZ5RnVuY3Rpb24pOwor
ICAgIH0KKworICAgIEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgRXhjZXB0aW9uSGFuZGxlciYpID0g
ZGVsZXRlOworICAgIEV4Y2VwdGlvbkhhbmRsZXImIG9wZXJhdG9yPShjb25zdCBFeGNlcHRpb25I
YW5kbGVyJikgPSBkZWxldGU7CisKKyAgICBKU0NFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIgeyBu
dWxscHRyIH07CisgICAgdm9pZCogdXNlckRhdGEgeyBudWxscHRyIH07CisgICAgR0Rlc3Ryb3lO
b3RpZnkgZGVzdHJveU5vdGlmeUZ1bmN0aW9uIHsgbnVsbHB0ciB9OworfTsKKwordHlwZWRlZiBz
dHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIHsKKyAgICBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5l
PiB2bTsKKyAgICBKU1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRSZWY+IGpzQ29udGV4dDsKKyAg
ICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uOworICAgIFZlY3RvcjxFeGNlcHRpb25I
YW5kbGVyPiBleGNlcHRpb25IYW5kbGVyczsKK30gSlNDQ29udGV4dFByaXZhdGU7CisKK1dFQktJ
VF9ERUZJTkVfVFlQRShKU0NDb250ZXh0LCBqc2NfY29udGV4dCwgR19UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQganNjQ29udGV4dFNldFZpcnR1YWxNYWNoaW5lKEpTQ0NvbnRleHQqIGNvbnRl
eHQsIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+JiYgdm0pCit7CisgICAgSlNDQ29udGV4dFBy
aXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmICh2bSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcHJpdi0+dm0pOworICAgICAgICBwcml2LT52bSA9IFdURk1vdmUodm0pOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJpdi0+anNDb250ZXh0KTsKKyAgICAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXAtanNDb250ZXh0IiwgJlRocmVhZDo6
Y3VycmVudCgpKSk7CisgICAgICAgIGlmIChhdXRvKiBkYXRhID0gZ19vYmplY3RfZ2V0X2RhdGEo
R19PQkpFQ1QocHJpdi0+dm0uZ2V0KCkpLCBuYW1lLmdldCgpKSkgeworICAgICAgICAgICAgcHJp
di0+anNDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxDb250ZXh0UmVmPihkYXRhKTsKKyAg
ICAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHByaXYtPnZtLmdldCgpKSwgbmFt
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcHJpdi0+anND
b250ZXh0ID0gSlNSZXRhaW5QdHI8SlNHbG9iYWxDb250ZXh0UmVmPihBZG9wdCwgSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cChqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChwcml2
LT52bS5nZXQoKSksIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
U0dsb2JhbE9iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+d3JhcHBlck1hcCgpKQorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRXcmFw
cGVyTWFwKHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpXcmFwcGVyTWFwPihwcml2LT5qc0NvbnRleHQu
Z2V0KCkpKTsKKyAgICAgICAganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KHByaXYtPnZtLmdl
dCgpLCBjb250ZXh0KTsKKyAgICB9IGVsc2UgaWYgKHByaXYtPnZtKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHByaXYtPmpzQ29udGV4dCk7CisgICAgICAgIGpzY1ZpcnR1YWxNYWNoaW5lUmVt
b3ZlQ29udGV4dChwcml2LT52bS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIHByaXYtPmpzQ29u
dGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPnZtID0gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGpzY0NvbnRleHRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpT
Q0NvbnRleHRQcml2YXRlKiBwcml2ID0gSlNDX0NPTlRFWFQob2JqZWN0KS0+cHJpdjsKKworICAg
IHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQUk9QX1ZJUlRVQUxfTUFDSElORToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcml2LT52bS5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGpzY0NvbnRleHRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQp
IHsKKyAgICBjYXNlIFBST1BfVklSVFVBTF9NQUNISU5FOgorICAgICAgICBpZiAoZ3BvaW50ZXIg
dm0gPSBnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKQorICAgICAgICAgICAganNjQ29udGV4dFNl
dFZpcnR1YWxNYWNoaW5lKGNvbnRleHQsIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+KEpTQ19W
SVJUVUFMX01BQ0hJTkUodm0pKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX2NvbnRleHRfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQg
PSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGlmICghY29udGV4dC0+cHJpdi0+dm0pCisgICAg
ICAgIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFjaGluZShjb250ZXh0LCBhZG9wdEdSZWYoanNjX3Zp
cnR1YWxfbWFjaGluZV9uZXcoKSkpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKEV4Y2VwdGlvbkhhbmRsZXIoW10oSlNDQ29udGV4dCogY29udGV4dCwgSlND
RXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7CisgICAgICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgIH0pKTsKK30KKworc3RhdGlj
IHZvaWQganNjQ29udGV4dERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGpzY0NvbnRleHRTZXRWaXJ0
dWFsTWFjaGluZShjb250ZXh0LCBudWxscHRyKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19j
b250ZXh0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
anNjX2NvbnRleHRfY2xhc3NfaW5pdChKU0NDb250ZXh0Q2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmdldF9wcm9wZXJ0eSA9IGpzY0NvbnRleHRHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
c2V0X3Byb3BlcnR5ID0ganNjQ29udGV4dFNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5jb25z
dHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25zdHJ1Y3RlZDsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9
IGpzY0NvbnRleHREaXNwb3NlOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9WSVJUVUFMX01BQ0hJTkUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmlydHVhbC1tYWNoaW5lIiwKKyAgICAgICAg
ICAgICJKU0NWaXJ0dWFsTWFjaGluZSIsCisgICAgICAgICAgICAiSlNDIFZpcnR1YWwgTWFjaGlu
ZSIsCisgICAgICAgICAgICBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1f
Q09OU1RSVUNUX09OTFkpKSk7Cit9CisKK0dSZWZQdHI8SlNDQ29udGV4dD4ganNjQ29udGV4dEdl
dE9yQ3JlYXRlKEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQpCit7CisgICAgYXV0byB2bSA9
IGpzY1ZpcnR1YWxNYWNoaW5lR2V0T3JDcmVhdGUodG9SZWYoJnRvSlMoanNDb250ZXh0KS0+dm0o
KSkpOworICAgIGlmIChHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBqc2NWaXJ0dWFsTWFj
aGluZUdldENvbnRleHQodm0uZ2V0KCksIGpzQ29udGV4dCkpCisgICAgICAgIHJldHVybiBjb250
ZXh0OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXAtanND
b250ZXh0IiwgJlRocmVhZDo6Y3VycmVudCgpKSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1Qodm0uZ2V0KCkpLCBuYW1lLmdldCgpLCBqc0NvbnRleHQpOworICAgIHJldHVybiBhZG9w
dEdSZWYoanNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKHZtLmdldCgpKSk7Cit9
CisKK0pTR2xvYmFsQ29udGV4dFJlZiBqc2NDb250ZXh0R2V0SlNDb250ZXh0KEpTQ0NvbnRleHQq
IGNvbnRleHQpCit7CisgICAgQVNTRVJUKEpTQ19JU19DT05URVQoY29udGV4dCkpOworCisgICAg
SlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIHJldHVybiBwcml2
LT5qc0NvbnRleHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBKU0M6OldyYXBwZXJNYXAmIHdyYXBwZXJN
YXAoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBtYXAgPSB0b0pTR2xvYmFsT2Jq
ZWN0KGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSktPndyYXBwZXJNYXAoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtYXApOworICAgIHJldHVybiAqbWFwOworfQorCitHUmVmUHRyPEpTQ1Zh
bHVlPiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGpzVmFsdWUpCit7CisgICAgcmV0dXJuIHdyYXBwZXJNYXAoY29udGV4dCkuZ29iamVj
dFdyYXBwZXIoY29udGV4dCwganNWYWx1ZSk7Cit9CisKK3ZvaWQganNjQ29udGV4dFZhbHVlRGVz
dHJveWVkKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYganNWYWx1ZSkKK3sKKyAgICB3
cmFwcGVyTWFwKGNvbnRleHQpLnVud3JhcChqc1ZhbHVlKTsKK30KKworSlNDOjpKU09iamVjdCog
anNjQ29udGV4dEdldEpTV3JhcHBlcihKU0NDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciB3cmFw
cGVkT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGVyTWFwKGNvbnRleHQpLmpzV3JhcHBlcih3
cmFwcGVkT2JqZWN0KTsKK30KKworSlNDOjpKU09iamVjdCoganNjQ29udGV4dEdldE9yQ3JlYXRl
SlNXcmFwcGVyKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNWYWx1
ZVJlZiBwcm90b3R5cGUsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QsIEdEZXN0cm95Tm90aWZ5IGRl
c3Ryb3lGdW5jdGlvbikKK3sKKyAgICBpZiAoYXV0byoganNXcmFwcGVyID0ganNjQ29udGV4dEdl
dEpTV3JhcHBlcihjb250ZXh0LCB3cmFwcGVkT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGpzV3Jh
cHBlcjsKKworICAgIHJldHVybiB3cmFwcGVyTWFwKGNvbnRleHQpLmNyZWF0ZUpTV3JhcHBwZXIo
Y29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0NsYXNzLCBwcm90b3R5cGUsIHdyYXBw
ZWRPYmplY3QsIGRlc3Ryb3lGdW5jdGlvbik7Cit9CisKK2dwb2ludGVyIGpzY0NvbnRleHRXcmFw
cGVkT2JqZWN0KEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTT2JqZWN0UmVmIGpzT2JqZWN0KQorewor
ICAgIHJldHVybiB3cmFwcGVyTWFwKGNvbnRleHQpLndyYXBwZWRPYmplY3QoY29udGV4dC0+cHJp
di0+anNDb250ZXh0LmdldCgpLCBqc09iamVjdCk7Cit9CisKK0NhbGxiYWNrRGF0YSBqc2NDb250
ZXh0UHVzaENhbGxiYWNrKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTVmFsdWVSZWYgY2FsbGVlVmFs
dWUsIEpTVmFsdWVSZWYgdGhpc1ZhbHVlLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiogYXJndW1lbnRzKQoreworICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJy
ZW50KCk7CisgICAgYXV0byogcHJldmlvdXNTdGFjayA9IHN0YXRpY19jYXN0PENhbGxiYWNrRGF0
YSo+KHRocmVhZC5tX2FwaURhdGEpOworICAgIENhbGxiYWNrRGF0YSBkYXRhID0geyBjb250ZXh0
LCBXVEZNb3ZlKGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbiksIGNhbGxlZVZhbHVlLCB0aGlzVmFs
dWUsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgcHJldmlvdXNTdGFjayB9OworICAgIHRocmVh
ZC5tX2FwaURhdGEgPSAmZGF0YTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBqc2NDb250
ZXh0UG9wQ2FsbGJhY2soSlNDQ29udGV4dCogY29udGV4dCwgQ2FsbGJhY2tEYXRhJiYgZGF0YSkK
K3sKKyAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgIGNvbnRleHQt
PnByaXYtPmV4Y2VwdGlvbiA9IFdURk1vdmUoZGF0YS5wcmVzZXJ2ZWRFeGNlcHRpb24pOworICAg
IHRocmVhZC5tX2FwaURhdGEgPSBkYXRhLm5leHQ7Cit9CisKK0pTVmFsdWVSZWYganNjQ29udGV4
dEdBcnJheVRvSlNBcnJheShKU0NDb250ZXh0KiBjb250ZXh0LCBHUHRyQXJyYXkqIGdBcnJheSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0g
Y29udGV4dC0+cHJpdjsKKyAgICBhdXRvKiBqc0FycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkocHJp
di0+anNDb250ZXh0LmdldCgpLCAwLCBudWxscHRyLCBleGNlcHRpb24pOworICAgIGlmICgqZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQocHJpdi0+anNDb250
ZXh0LmdldCgpKTsKKworICAgIGlmICghZ0FycmF5KQorICAgICAgICByZXR1cm4ganNBcnJheTsK
KworICAgIGF1dG8qIGpzQXJyYXlPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QocHJpdi0+anNDb250
ZXh0LmdldCgpLCBqc0FycmF5LCBleGNlcHRpb24pOworICAgIGlmICgqZXhjZXB0aW9uKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQocHJpdi0+anNDb250ZXh0LmdldCgpKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnQXJyYXktPmxlbjsgKytpKSB7CisgICAg
ICAgIGdwb2ludGVyIGl0ZW0gPSBnX3B0cl9hcnJheV9pbmRleChnQXJyYXksIGkpOworICAgICAg
ICBpZiAoIWl0ZW0pCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChwcml2
LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGksIEpTVmFsdWVNYWtlTnVsbChwcml2
LT5qc0NvbnRleHQuZ2V0KCkpLCBleGNlcHRpb24pOworICAgICAgICBlbHNlIGlmIChKU0NfSVNf
VkFMVUUoaXRlbSkpCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChwcml2
LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGksIGpzY1ZhbHVlR2V0SlNWYWx1ZShK
U0NfVkFMVUUoaXRlbSkpLCBleGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRl
eHQuZ2V0KCkpLCBtYWtlU3RyaW5nKCJpbnZhbGlkIGl0ZW0gdHlwZSBpbiBHUHRyQXJyYXkiKSkp
OworCisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJu
IGpzQXJyYXk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdQdHJBcnJheT4ganNjQ29udGV4dEpTQXJy
YXlUb0dBcnJheShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzQXJyYXksIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRl
eHQtPnByaXY7CisgICAgaWYgKEpTVmFsdWVJc051bGwocHJpdi0+anNDb250ZXh0LmdldCgpLCBq
c0FycmF5KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIUpTVmFsdWVJc0Fy
cmF5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSkpIHsKKyAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgp
KSwgbWFrZVN0cmluZygiaW52YWxpZCBqcyB0eXBlIGZvciBHUHRyQXJyYXkiKSkpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvKiBqc0FycmF5T2JqZWN0ID0gSlNW
YWx1ZVRvT2JqZWN0KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoU3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIGF1dG8qIGpzTGVuZ3RoID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGxlbmd0aFN0
cmluZy5nZXQoKSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGxlbmd0aCA9IEpTQzo6dG9VSW50MzIoSlNWYWx1ZVRv
TnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNMZW5ndGgsIGV4Y2VwdGlvbikpOworICAg
IGlmICgqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdSZWZQdHI8
R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9m
dW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIGF1dG8qIGpzSXRlbSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdElu
ZGV4KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheU9iamVjdCwgaSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc0l0ZW0gPyBqc2NDb250ZXh0
R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc0l0ZW0pLmxlYWtSZWYoKSA6IG51bGxwdHIpOwor
ICAgIH0KKworICAgIHJldHVybiBnQXJyYXk7Cit9CisKK0pTVmFsdWVSZWYganNjQ29udGV4dEdW
YWx1ZVRvSlNWYWx1ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBj
b250ZXh0LT5wcml2OworCisgICAgc3dpdGNoIChnX3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9U
WVBFKHZhbHVlKSkpIHsKKyAgICBjYXNlIEdfVFlQRV9CT09MRUFOOgorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VCb29sZWFuKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgZ192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZSkpOworICAgIGNhc2UgR19UWVBFX0NIQVI6CisgICAgY2FzZSBHX1RZUEVfSU5U
OgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgp
LCB2YWx1ZS0+ZGF0YVswXS52X2ludCk7CisgICAgY2FzZSBHX1RZUEVfRU5VTToKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgZ192YWx1ZV9n
ZXRfZW51bSh2YWx1ZSkpOworICAgIGNhc2UgR19UWVBFX0ZMQUdTOgorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBnX3ZhbHVlX2dldF9mbGFn
cyh2YWx1ZSkpOworICAgIGNhc2UgR19UWVBFX1VDSEFSOgorICAgIGNhc2UgR19UWVBFX1VJTlQ6
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCks
IHZhbHVlLT5kYXRhWzBdLnZfdWludCk7CisgICAgY2FzZSBHX1RZUEVfRkxPQVQ6CisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5k
YXRhWzBdLnZfZmxvYXQpOworICAgIGNhc2UgR19UWVBFX0RPVUJMRToKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0u
dl9kb3VibGUpOworICAgIGNhc2UgR19UWVBFX0xPTkc6CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfbG9uZyk7
CisgICAgY2FzZSBHX1RZUEVfVUxPTkc6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfdWxvbmcpOworICAgIGNh
c2UgR19UWVBFX0lOVDY0OgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+
anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X2ludDY0KTsKKyAgICBjYXNlIEdfVFlQ
RV9VSU5UNjQ6CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRl
eHQuZ2V0KCksIHZhbHVlLT5kYXRhWzBdLnZfdWludDY0KTsKKyAgICBjYXNlIEdfVFlQRV9TVFJJ
Tkc6CisgICAgICAgIGlmIChjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpIHsKKyAgICAgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1N0
cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nVmFsdWUpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhwcml2LT5qc0NvbnRleHQuZ2V0
KCksIGpzU3RyaW5nLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdWxsKHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisgICAgY2FzZSBHX1RZUEVfUE9JTlRFUjoK
KyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgY2FzZSBHX1RZUEVfQk9YRUQ6CisgICAgICAg
IGlmIChhdXRvKiBwdHIgPSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvKiBqc1dyYXBwZXIgPSBqc2NDb250ZXh0R2V0SlNXcmFwcGVyKGNvbnRleHQsIHB0
cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVmKGpzV3JhcHBlcik7CisKKyAgICAgICAg
ICAgIGlmIChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUodmFsdWUpLCBKU0NfVFlQRV9WQUxVRSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzY1ZhbHVlR2V0SlNWYWx1ZShKU0NfVkFMVUUocHRy
KSk7CisKKyAgICAgICAgICAgIGlmIChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUodmFsdWUpLCBK
U0NfVFlQRV9FWENFUFRJT04pKQorICAgICAgICAgICAgICAgIHJldHVybiBqc2NFeGNlcHRpb25H
ZXRKU1ZhbHVlKEpTQ19FWENFUFRJT04ocHRyKSk7CisKKyAgICAgICAgICAgIGlmIChnX3R5cGVf
aXNfYShHX1ZBTFVFX1RZUEUodmFsdWUpLCBHX1RZUEVfUFRSX0FSUkFZKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNjQ29udGV4dEdBcnJheVRvSlNBcnJheShjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHUHRyQXJyYXkqPihwdHIpLCBleGNlcHRpb24pOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bGwocHJpdi0+anNDb250ZXh0LmdldCgpKTsKKworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9QQVJBTToKKyAgICBjYXNlIEdfVFlQRV9JTlRF
UkZBQ0U6CisgICAgY2FzZSBHX1RZUEVfVkFSSUFOVDoKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJy
b3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0KCkpLCBtYWtlU3RyaW5nKCJ1bnN1cHBvcnRlZCB0
eXBlICIsIGdfdHlwZV9uYW1lKEdfVkFMVUVfVFlQRSh2YWx1ZSkpKSkpOworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIGpz
Y0NvbnRleHRKU1ZhbHVlVG9HVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBq
c1ZhbHVlLCBHVHlwZSB0eXBlLCBHVmFsdWUqIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgSlNDQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGdf
dmFsdWVfaW5pdCh2YWx1ZSwgdHlwZSk7CisKKyAgICBhdXRvIGZ1bmRhbWVudGFsVHlwZSA9IGdf
dHlwZV9mdW5kYW1lbnRhbChHX1ZBTFVFX1RZUEUodmFsdWUpKTsKKyAgICBzd2l0Y2ggKGZ1bmRh
bWVudGFsVHlwZSkgeworICAgIGNhc2UgR19UWVBFX0lOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
aW50KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfRkxPQVQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anND
b250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHX1RZUEVfRE9VQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIEpT
VmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9CT09MRUFOOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCBKU1ZhbHVlVG9Cb29sZWFuKHByaXYtPmpzQ29udGV4dC5n
ZXQoKSwganNWYWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9TVFJJTkc6
CisgICAgICAgIGlmICghSlNWYWx1ZUlzTnVsbChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFs
dWUpKSB7CisgICAgICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmcoQWRv
cHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBl
eGNlcHRpb24pKTsKKyAgICAgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHNpemVfdCBtYXhTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVt
VVRGOENTdHJpbmdTaXplKGpzU3RyaW5nLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8qIHN0cmlu
ZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhtYXhTaXplKSk7CisgICAgICAgICAgICBK
U1N0cmluZ0dldFVURjhDU3RyaW5nKGpzU3RyaW5nLmdldCgpLCBzdHJpbmcsIG1heFNpemUpOwor
ICAgICAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgc3RyaW5nKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIG51bGxwdHIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9DSEFSOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9zY2hhcih2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNW
YWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1VDSEFS
OgorICAgICAgICBnX3ZhbHVlX3NldF91Y2hhcih2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYt
PmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR19UWVBFX1VJTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIEpT
VmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9QT0lOVEVSOgorICAgIGNhc2UgR19U
WVBFX09CSkVDVDoKKyAgICBjYXNlIEdfVFlQRV9CT1hFRDogeworICAgICAgICBncG9pbnRlciB3
cmFwcGVkT2JqZWN0ID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoIUpTVmFsdWVJc051bGwocHJp
di0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlKSkgeworICAgICAgICAgICAgYXV0byBqc09iamVj
dCA9IEpTVmFsdWVUb09iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2Vw
dGlvbik7CisgICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIHdyYXBwZWRPYmplY3QgPSBqc2NDb250ZXh0V3JhcHBlZE9iamVj
dChjb250ZXh0LCBqc09iamVjdCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZWRPYmplY3QpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgSlND
X1RZUEVfVkFMVUUpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8ganNjVmFsdWUgPSBqc2ND
b250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBqc2NWYWx1ZS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgSlNDX1RZUEVfRVhDRVBUSU9O
KSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkNy
ZWF0ZShjb250ZXh0LCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCBleGNlcHRpb24uZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19h
KEdfVkFMVUVfVFlQRSh2YWx1ZSksIEdfVFlQRV9QVFJfQVJSQVkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZ0FycmF5ID0ganNjQ29udGV4dEpTQXJyYXlUb0dBcnJheShjb250ZXh0LCBq
c1ZhbHVlLCBleGNlcHRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoISpleGNlcHRpb24p
CisgICAgICAgICAgICAgICAgICAgICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQodmFsdWUsIGdBcnJh
eS5sZWFrUmVmKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlw
ZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgQVNDSUlMaXRlcmFsKCJpbnZhbGlk
IHBvaW50ZXIgdHlwZSIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChmdW5kYW1lbnRhbFR5cGUgPT0gR19UWVBFX1BPSU5U
RVIpCisgICAgICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVlLCB3cmFwcGVkT2JqZWN0
KTsKKyAgICAgICAgZWxzZSBpZiAoZnVuZGFtZW50YWxUeXBlID09IEdfVFlQRV9CT1hFRCkKKyAg
ICAgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3cmFwcGVkT2JqZWN0KTsKKyAgICAg
ICAgZWxzZSBpZiAoR19JU19PQkpFQ1Qod3JhcHBlZE9iamVjdCkpCisgICAgICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdyYXBwZWRPYmplY3QpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2
LT5qc0NvbnRleHQuZ2V0KCkpLCBBU0NJSUxpdGVyYWwoIndyYXBwZWQgb2JqZWN0IGlzIG5vdCBh
IEdPYmplY3QiKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfTE9O
RzoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYt
PmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR19UWVBFX1VMT05HOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
SlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX0lOVDY0OgorICAgICAgICBnX3Zh
bHVlX3NldF9pbnQ2NCh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQo
KSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBF
X1VJTlQ2NDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCBKU1ZhbHVlVG9OdW1i
ZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVlLCBleGNlcHRpb24pKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHX1RZUEVfRU5VTToKKyAgICAgICAgZ192YWx1ZV9zZXRfZW51bSh2
YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhj
ZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX0ZMQUdTOgorICAgICAg
ICBnX3ZhbHVlX3NldF9mbGFncyh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4
dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R19UWVBFX1BBUkFNOgorICAgIGNhc2UgR19UWVBFX0lOVEVSRkFDRToKKyAgICBjYXNlIEdfVFlQ
RV9WQVJJQU5UOgorICAgIGRlZmF1bHQ6CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6
OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpzQ29udGV4dC5nZXQoKSksIG1ha2VTdHJpbmco
InVuc3VwcG9ydGVkIHR5cGUgIiwgZ190eXBlX25hbWUoR19WQUxVRV9UWVBFKHZhbHVlKSkpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworSlNDQ29udGV4dCoganNjX2NvbnRleHRfbmV3
KCkKK3sKKyAgICByZXR1cm4gSlNDX0NPTlRFWFQoZ19vYmplY3RfbmV3KEpTQ19UWVBFX0NPTlRF
WFQsIG51bGxwdHIpKTsKK30KKworSlNDQ29udGV4dCoganNjX2NvbnRleHRfbmV3X3dpdGhfdmly
dHVhbF9tYWNoaW5lKEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChKU0NfSVNfVklSVFVBTF9NQUNISU5FKHZtKSwgbnVsbHB0cik7CisgICAgcmV0dXJu
IEpTQ19DT05URVhUKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DT05URVhULCAidmlydHVhbC1tYWNo
aW5lIiwgdm0sIG51bGxwdHIpKTsKK30KKworSlNDVmlydHVhbE1hY2hpbmUqIGpzY19jb250ZXh0
X2dldF92aXJ0dWFsX21hY2hpbmUoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4gY29udGV4dC0+cHJpdi0+dm0uZ2V0KCk7Cit9CisKK0pTQ0V4Y2VwdGlvbioganNjX2Nv
bnRleHRfZ2V0X2V4Y2VwdGlvbihKU0NDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJl
dHVybiBjb250ZXh0LT5wcml2LT5leGNlcHRpb24uZ2V0KCk7Cit9CisKK3ZvaWQganNjX2NvbnRl
eHRfdGhyb3coSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworCisgICAg
Y29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uID0gYWRvcHRHUmVmKGpzY19leGNlcHRpb25fbmV3KGNv
bnRleHQsIGVycm9yTWVzc2FnZSkpOworfQorCit2b2lkIGpzY19jb250ZXh0X3Rocm93X2V4Y2Vw
dGlvbihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisKKyAgICBjb250ZXh0LT5w
cml2LT5leGNlcHRpb24gPSBleGNlcHRpb247Cit9CisKK3ZvaWQganNjX2NvbnRleHRfcHVzaF9l
eGNlcHRpb25faGFuZGxlcihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb25IYW5kbGVy
IGhhbmRsZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoaGFuZGxlcik7CisKKyAgICBjb250ZXh0LT5wcml2LT5leGNlcHRp
b25IYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLCB1c2VyRGF0YSwgZGVzdHJveU5vdGlmeSB9KTsK
K30KKwordm9pZCBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIoSlNDQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRsZXJz
LnNpemUoKSA+IDEpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMucmVt
b3ZlTGFzdCgpOworfQorCitib29sIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChK
U0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzRXhjZXB0aW9uKQoreworICAgIGlmICgh
anNFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZXhjZXB0aW9u
ID0ganNjRXhjZXB0aW9uQ3JlYXRlKGNvbnRleHQsIGpzRXhjZXB0aW9uKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKTsKKyAg
ICBjb25zdCBhdXRvJiBleGNlcHRpb25IYW5kbGVyID0gY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9u
SGFuZGxlcnMubGFzdCgpOworICAgIGV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlcihjb250ZXh0LCBl
eGNlcHRpb24uZ2V0KCksIGV4Y2VwdGlvbkhhbmRsZXIudXNlckRhdGEpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0pTQ0NvbnRleHQqIGpzY19jb250ZXh0X2dldF9jdXJyZW50KCkKK3sKKyAg
ICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tEYXRhKj4oVGhyZWFkOjpjdXJyZW50
KCkubV9hcGlEYXRhKTsKKyAgICByZXR1cm4gZGF0YSA/IGRhdGEtPmNvbnRleHQuZ2V0KCkgOiBu
dWxscHRyOworfQorCitKU0NWYWx1ZSoganNjX2NvbnRleHRfZXZhbHVhdGUoSlNDQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogY29kZSkKK3sKKyAgICByZXR1cm4ganNjX2NvbnRleHRfZXZh
bHVhdGVfd2l0aF9zb3VyY2VfdXJpKGNvbnRleHQsIGNvZGUsIG51bGxwdHIpOworfQorCitKU0NW
YWx1ZSoganNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3VyY2VfdXJpKEpTQ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIGNvZGUsIGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoY29kZSwgbnVsbHB0cik7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlwdEpTKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb2RlKSk7CisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHNvdXJjZVVSSSA9IHVyaSA/IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHVyaSkpIDogbnVsbHB0cjsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpT
RXZhbHVhdGVTY3JpcHQoY29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgpLCBzY3JpcHRKUy5n
ZXQoKSwgbnVsbHB0ciwgc291cmNlVVJJLmdldCgpLCAxLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisg
ICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChjb250ZXh0KTsKKworICAgIHJl
dHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCByZXN1bHQpLmxlYWtSZWYo
KTsKK30KKwordm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogbmFtZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKworICAgIGF1dG8g
Y29udGV4dE9iamVjdCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIEpTQ29u
dGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkpKTsKKyAg
ICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShjb250ZXh0T2JqZWN0LmdldCgpLCBuYW1l
LCB2YWx1ZSk7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfY29udGV4dF9nZXRfdmFsdWUoSlNDQ29udGV4
dCogY29udGV4dCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGNvbnRleHRPYmplY3QgPSBqc2NDb250
ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29u
dGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIGpzY192YWx1ZV9vYmpl
Y3RfZ2V0X3Byb3BlcnR5KGNvbnRleHRPYmplY3QuZ2V0KCksIG5hbWUpOworfQorCitKU0NDbGFz
cyoganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogbmFtZSwgSlNDQ2xhc3MqIHBhcmVudENsYXNzLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95
RnVuY3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29u
dGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIG51bGxwdHIp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFwYXJlbnRDbGFzcyB8fCBKU0NfSVNfQ0xBU1Mo
cGFyZW50Q2xhc3MpLCBudWxscHRyKTsKKworICAgIGF1dG8ganNjQ2xhc3MgPSBqc2NDbGFzc0Ny
ZWF0ZShjb250ZXh0LCBuYW1lLCBwYXJlbnRDbGFzcywgZGVzdHJveUZ1bmN0aW9uKTsKKyAgICB3
cmFwcGVyTWFwKGNvbnRleHQpLnJlZ2lzdGVyQ2xhc3MoanNjQ2xhc3MuZ2V0KCkpOworICAgIHJl
dHVybiBqc2NDbGFzcy5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNzgy
ZjBlOWMxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NDb250ZXh0LmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVk
ZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDQ29udGV4dF9oCisjZGVmaW5lIEpT
Q0NvbnRleHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlND
RGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NFeGNlcHRpb24uaD4KKyNpbmNsdWRlIDxqc2Mv
SlNDQ2xhc3MuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmFsdWUuaD4KKyNpbmNsdWRlIDxqc2MvSlND
VmlydHVhbE1hY2hpbmUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX0NP
TlRFWFQgICAgICAgICAgICAoanNjX2NvbnRleHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0NP
TlRFWFQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
SlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dCkpCisjZGVmaW5lIEpTQ19JU19DT05URVhUKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX0NP
TlRFWFQpKQorI2RlZmluZSBKU0NfQ09OVEVYVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9DT05URVhULCBKU0NDb250ZXh0Q2xhc3Mp
KQorI2RlZmluZSBKU0NfSVNfQ09OVEVYVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9DT05URVhUKSkKKyNkZWZpbmUgSlNDX0NPTlRFWFRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgSlNDX1RZ
UEVfQ09OVEVYVCwgSlNDQ29udGV4dENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRl
eHQgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgSlNDQ29udGV4
dENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIEpTQ0NvbnRleHRQcml2
YXRlOworCit0eXBlZGVmIHZvaWQgKCogSlNDRXhjZXB0aW9uSGFuZGxlcikgKEpTQ0NvbnRleHQg
ICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDRXhj
ZXB0aW9uICpleGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdwb2ludGVyICAgICAgdXNlcl9kYXRhKTsKKworc3RydWN0IF9KU0NDb250ZXh0IHsKKyAgICBH
T2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ0NvbnRleHRQcml2
YXRlICpwcml2OworfTsKKworc3RydWN0IF9KU0NDb250ZXh0Q2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNl
cnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsKK307CisK
K0pTQ19BUEkgR1R5cGUKK2pzY19jb250ZXh0X2dldF90eXBlICAgICAgICAgICAgICAgICAodm9p
ZCk7CisKK0pTQ19BUEkgSlNDQ29udGV4dCAqCitqc2NfY29udGV4dF9uZXcgICAgICAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJIEpTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfbmV3
X3dpdGhfdmlydHVhbF9tYWNoaW5lIChKU0NWaXJ0dWFsTWFjaGluZSAgKnZtKTsKKworSlNDX0FQ
SSBKU0NWaXJ0dWFsTWFjaGluZSAqCitqc2NfY29udGV4dF9nZXRfdmlydHVhbF9tYWNoaW5lICAg
ICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgSlNDRXhjZXB0aW9u
ICoKK2pzY19jb250ZXh0X2dldF9leGNlcHRpb24gICAgICAgICAgICAoSlNDQ29udGV4dCAgICAg
ICAgICpjb250ZXh0KTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF90aHJvdyAgICAgICAg
ICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICplcnJvcl9tZXNzYWdl
KTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24gICAgICAgICAg
KEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSlNDRXhjZXB0aW9uICAgICAgICpleGNlcHRpb24pOworCitKU0NfQVBJIHZv
aWQKK2pzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIgICAoSlNDQ29udGV4dCAgICAg
ICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NF
eGNlcHRpb25IYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyICAgICAgICAgICAgdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgIGRlc3Ryb3lfbm90aWZ5KTsK
KworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIgICAgKEpT
Q0NvbnRleHQgICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgSlNDQ29udGV4dCAqCitqc2Nf
Y29udGV4dF9nZXRfY3VycmVudCAgICAgICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJIEpTQ1Zh
bHVlICoKK2pzY19jb250ZXh0X2V2YWx1YXRlICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAg
ICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICAgICAgICAgKmNvZGUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY19jb250
ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaSAoSlNDQ29udGV4dCAgICAgICAgICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAg
ICAgKmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgICAgICAgICAqdXJpKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4dF9zZXRfdmFsdWUg
ICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAgICAgICAgKnZh
bHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfY29udGV4dF9nZXRfdmFsdWUgICAgICAg
ICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1lKTsKKworSlNDX0FQ
SSBKU0NDbGFzcyAqCitqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyAgICAgICAgICAgKEpTQ0Nv
bnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAgICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBKU0NDbGFzcyAgICAgICAgICAgKnBhcmVudF9jbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgICAgICBkZXN0cm95
X2Z1bmN0aW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIEpTQ0NvbnRleHRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHRQcml2
YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTgwZGExODBiN2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4
dFByaXZhdGUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorI2luY2x1ZGUgIkpTQ29udGV4
dFJlZi5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworR1JlZlB0cjxKU0NDb250
ZXh0PiBqc2NDb250ZXh0R2V0T3JDcmVhdGUoSlNHbG9iYWxDb250ZXh0UmVmKTsKK0pTR2xvYmFs
Q29udGV4dFJlZiBqc2NDb250ZXh0R2V0SlNDb250ZXh0KEpTQ0NvbnRleHQqKTsKK0dSZWZQdHI8
SlNDVmFsdWU+IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKEpTQ0NvbnRleHQqLCBKU1ZhbHVl
UmVmKTsKK3ZvaWQganNjQ29udGV4dFZhbHVlRGVzdHJveWVkKEpTQ0NvbnRleHQqLCBKU1ZhbHVl
UmVmKTsKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoSlNDQ29udGV4dCos
IGdwb2ludGVyKTsKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRPckNyZWF0ZUpTV3JhcHBl
cihKU0NDb250ZXh0KiwgSlNDbGFzc1JlZiwgSlNWYWx1ZVJlZiBwcm90b3R5cGUgPSBudWxscHRy
LCBncG9pbnRlciA9IG51bGxwdHIsIEdEZXN0cm95Tm90aWZ5ID0gbnVsbHB0cik7CitncG9pbnRl
ciBqc2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0NDb250ZXh0KiwgSlNPYmplY3RSZWYpOworCitz
dHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKKyAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQ7Cisg
ICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IHByZXNlcnZlZEV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVl
UmVmIGNhbGxlZVZhbHVlOworICAgIEpTVmFsdWVSZWYgdGhpc1ZhbHVlOworICAgIHNpemVfdCBh
cmd1bWVudENvdW50OworICAgIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50czsKKworICAgIENh
bGxiYWNrRGF0YSogbmV4dDsKK307CitDYWxsYmFja0RhdGEganNjQ29udGV4dFB1c2hDYWxsYmFj
ayhKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZiBjYWxsZWVWYWx1ZSwgSlNWYWx1ZVJlZiB0aGlzVmFs
dWUsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmKiBhcmd1bWVudHMpOwor
dm9pZCBqc2NDb250ZXh0UG9wQ2FsbGJhY2soSlNDQ29udGV4dCosIENhbGxiYWNrRGF0YSYmKTsK
KworYm9vbCBqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoSlNDQ29udGV4dCosIEpT
VmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NDb250ZXh0R0FycmF5VG9KU0FycmF5KEpTQ0NvbnRl
eHQqLCBHUHRyQXJyYXkqLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworSlNWYWx1ZVJlZiBqc2ND
b250ZXh0R1ZhbHVlVG9KU1ZhbHVlKEpTQ0NvbnRleHQqLCBjb25zdCBHVmFsdWUqLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOwordm9pZCBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKEpTQ0NvbnRl
eHQqLCBKU1ZhbHVlUmVmLCBHVHlwZSwgR1ZhbHVlKiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRGVmaW5lcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jM2ZmYTJiNGZkYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFU
SU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBKU0NEZWZpbmVzX2gKKyNkZWZpbmUgSlNDRGVmaW5lc19oCisK
KyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRlZiBHX09TX1dJTjMyCisjICAgIGlmIGRlZmluZWQo
QlVJTERJTkdfSmF2YVNjcmlwdENvcmUpIHx8IGRlZmluZWQoU1RBVElDQUxMWV9MSU5LRURfV0lU
SF9KYXZhU2NyaXB0Q29yZSkKKyMgICAgICAgIGRlZmluZSBKU0NfQVBJIF9fZGVjbHNwZWMoZGxs
ZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgICBkZWZpbmUgSlNDX0FQSSBfX2RlY2xzcGVjKGRs
bGltcG9ydCkKKyMgICAgZW5kaWYKKyNlbHNlCisjICAgIGRlZmluZSBKU0NfQVBJIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisjZW5kaWYKKworI2RlZmluZSBKU0NfREVQ
UkVDQVRFRCBKU0NfQVBJIEdfREVQUkVDQVRFRAorI2RlZmluZSBKU0NfREVQUkVDQVRFRF9GT1Io
ZikgSlNDX0FQSSBHX0RFUFJFQ0FURURfRk9SKGYpCisKKyNlbmRpZiAvKiBKU0NEZWZpbmVzX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRp
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg0ZDQ0ZTNiOGIyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlv
bi5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0V4Y2VwdGlvbi5oIgorCisj
aW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5j
bHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUu
aD4KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0V4Y2VwdGlvblByaXZhdGUgeworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQ7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4ganNFeGNlcHRpb247
CisgICAgYm9vbCBjYWNoZWQ7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBtZXNzYWdlOworICAgIHVu
c2lnbmVkIGxpbmVOdW1iZXI7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzb3VyY2VVUkk7Cit9IEpT
Q0V4Y2VwdGlvblByaXZhdGU7CisKK1dFQktJVF9ERUZJTkVfVFlQRShKU0NFeGNlcHRpb24sIGpz
Y19leGNlcHRpb24sIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGpzY0V4Y2VwdGlvbkRp
c3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYg
PSBKU0NfRVhDRVBUSU9OKG9iamVjdCktPnByaXY7CisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsK
KyAgICAgICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChwcml2LT5jb250
ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZwcml2LT5jb250ZXh0KSk7CisgICAgICAg
IHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKGpz
Y19leGNlcHRpb25fcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCBqc2NfZXhjZXB0aW9uX2NsYXNzX2luaXQoSlNDRXhjZXB0aW9uQ2xhc3MqIGtsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7Cisg
ICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NFeGNlcHRpb25EaXNwb3NlOworfQorCitHUmVmUHRy
PEpTQ0V4Y2VwdGlvbj4ganNjRXhjZXB0aW9uQ3JlYXRlKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpT
VmFsdWVSZWYganNFeGNlcHRpb24pCit7CisgICAgR1JlZlB0cjxKU0NFeGNlcHRpb24+IGV4Y2Vw
dGlvbiA9IGFkb3B0R1JlZihKU0NfRVhDRVBUSU9OKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9FWENF
UFRJT04sIG51bGxwdHIpKSk7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoanNDb250
ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICBleGNlcHRpb24tPnByaXYtPmpzRXhjZXB0aW9uLnNldCh2bSwg
dG9KUyhKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBqc0V4Y2VwdGlvbiwgbnVsbHB0cikpKTsK
KyAgICAvLyBUaGUgY29udGV4dCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBleGNlcHRp
b24sIHNvIHdlIGNhbid0IHJlZiB0aGUgY29udGV4dC4gV2UgdXNlIGEgd2VhaworICAgIC8vIHBv
aW50ZXIgaW5zdGVhZCB0byBpbnZhbGlkYXRlIHRoZSBleGNlcHRpb24gaWYgdGhlIGNvbnRleHQg
aXMgZGVzdHJveWVkIGJlZm9yZS4KKyAgICBleGNlcHRpb24tPnByaXYtPmNvbnRleHQgPSBjb250
ZXh0OworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoY29udGV4dCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZXhjZXB0aW9uLT5wcml2LT5jb250ZXh0KSk7CisgICAg
cmV0dXJuIGV4Y2VwdGlvbjsKK30KKworSlNWYWx1ZVJlZiBqc2NFeGNlcHRpb25HZXRKU1ZhbHVl
KEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiB0b1JlZihleGNlcHRpb24t
PnByaXYtPmpzRXhjZXB0aW9uLmdldCgpKTsKK30KKwordm9pZCBqc2NFeGNlcHRpb25FbnN1cmVQ
cm9wZXJ0aWVzKEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIEpTQ0V4Y2VwdGlvblBy
aXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgaWYgKHByaXYtPmNhY2hlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Y2FjaGVkID0gdHJ1ZTsKKworICAgIGF1dG8gdmFs
dWUgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2
LT5qc0V4Y2VwdGlvbi5nZXQoKSkpOworICAgIGF1dG8gcHJvcGVydHlWYWx1ZSA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgIm1lc3NhZ2UiKSk7
CisgICAgaWYgKCFqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHByb3BlcnR5VmFsdWUuZ2V0KCkpKQor
ICAgICAgICBwcml2LT5tZXNzYWdlLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcocHJvcGVydHlW
YWx1ZS5nZXQoKSkpOworICAgIHByb3BlcnR5VmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJsaW5lIikpOworICAgIGlmICghanNjX3Zh
bHVlX2lzX3VuZGVmaW5lZChwcm9wZXJ0eVZhbHVlLmdldCgpKSkKKyAgICAgICAgcHJpdi0+bGlu
ZU51bWJlciA9IGpzY192YWx1ZV90b19pbnQzMihwcm9wZXJ0eVZhbHVlLmdldCgpKTsKKyAgICBw
cm9wZXJ0eVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZh
bHVlLmdldCgpLCAic291cmNlVVJMIikpOworICAgIGlmICghanNjX3ZhbHVlX2lzX3VuZGVmaW5l
ZChwcm9wZXJ0eVZhbHVlLmdldCgpKSkKKyAgICAgICAgcHJpdi0+c291cmNlVVJJLnJlc2V0KGpz
Y192YWx1ZV90b19zdHJpbmcocHJvcGVydHlWYWx1ZS5nZXQoKSkpOworfQorCitKU0NFeGNlcHRp
b24qIGpzY19leGNlcHRpb25fbmV3KEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4
dCksIG51bGxwdHIpOworCisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29u
dGV4dChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIGpzTWVzc2FnZSA9IG51bGxwdHI7CisgICAg
aWYgKG1lc3NhZ2UpIHsKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTWVzc2Fn
ZVN0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobWVzc2FnZSkpOwor
ICAgICAgICBqc01lc3NhZ2UgPSBKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQsIGpzTWVzc2Fn
ZVN0cmluZy5nZXQoKSk7CisgICAgfQorICAgIHJldHVybiBqc2NFeGNlcHRpb25DcmVhdGUoY29u
dGV4dCwgSlNPYmplY3RNYWtlRXJyb3IoanNDb250ZXh0LCBqc01lc3NhZ2UgPyAxIDogMCwgJmpz
TWVzc2FnZSwgbnVsbHB0cikpLmxlYWtSZWYoKTsKK30KKworY29uc3QgY2hhcioganNjX2V4Y2Vw
dGlvbl9nZXRfbWVzc2FnZShKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbiksIG51bGxwdHIpOworCisg
ICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IGV4Y2VwdGlvbi0+cHJpdjsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChwcml2LT5jb250ZXh0LCBudWxscHRyKTsKKworICAgIGpzY0V4Y2Vw
dGlvbkVuc3VyZVByb3BlcnRpZXMoZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gcHJpdi0+bWVzc2Fn
ZS5nZXQoKTsKK30KKworZ3VpbnQganNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoSlNDRXhj
ZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0VY
Q0VQVElPTihleGNlcHRpb24pLCAwKTsKKworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYg
PSBleGNlcHRpb24tPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJpdi0+Y29udGV4
dCwgMCk7CisKKyAgICBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7Cisg
ICAgcmV0dXJuIHByaXYtPmxpbmVOdW1iZXI7Cit9CisKK2NvbnN0IGNoYXIqIGpzY19leGNlcHRp
b25fZ2V0X3NvdXJjZV91cmkoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBudWxscHRyKTsKKwor
ICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBqc2NFeGNl
cHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYtPnNvdXJj
ZVVSSS5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NFeGNlcHRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNl
cHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmZkNTdmYWQy
NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
RXhjZXB0aW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlND
X0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NFeGNlcHRpb25faAorI2RlZmluZSBKU0NF
eGNlcHRpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlND
RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfRVhDRVBUSU9O
ICAgICAgICAgICAgKGpzY19leGNlcHRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0VYQ0VQ
VElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBK
U0NfVFlQRV9FWENFUFRJT04sIEpTQ0V4Y2VwdGlvbikpCisjZGVmaW5lIEpTQ19JU19FWENFUFRJ
T04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZ
UEVfRVhDRVBUSU9OKSkKKyNkZWZpbmUgSlNDX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04sIEpTQ0V4
Y2VwdGlvbkNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04pKQorI2Rl
ZmluZSBKU0NfRVhDRVBUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIEpTQ19UWVBFX0VYQ0VQVElPTiwgSlNDRXhjZXB0aW9uQ2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfSlNDRXhjZXB0aW9uIEpTQ0V4Y2VwdGlvbjsKK3R5cGVkZWYgc3RydWN0
IF9KU0NFeGNlcHRpb25DbGFzcyBKU0NFeGNlcHRpb25DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9K
U0NFeGNlcHRpb25Qcml2YXRlIEpTQ0V4Y2VwdGlvblByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0
IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7CisKK3N0cnVjdCBfSlNDRXhjZXB0aW9uIHsKKyAgICBH
T2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ0V4Y2VwdGlvblBy
aXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX0pTQ0V4Y2VwdGlvbkNsYXNzIHsKKyAgICBHT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9p
ZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2Nf
cmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9
OworCitKU0NfQVBJIEdUeXBlCitqc2NfZXhjZXB0aW9uX2dldF90eXBlICAgICAgICAodm9pZCk7
CisKK0pTQ19BUEkgSlNDRXhjZXB0aW9uICoKK2pzY19leGNlcHRpb25fbmV3ICAgICAgICAgICAg
IChKU0NDb250ZXh0ICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAgICptZXNzYWdlKTsKKworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19leGNl
cHRpb25fZ2V0X21lc3NhZ2UgICAgIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbik7CisKK0pTQ19B
UEkgZ3VpbnQKK2pzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVyIChKU0NFeGNlcHRpb24gKmV4
Y2VwdGlvbik7CisKK0pTQ19BUEkgY29uc3QgY2hhciAqCitqc2NfZXhjZXB0aW9uX2dldF9zb3Vy
Y2VfdXJpICAoSlNDRXhjZXB0aW9uICpleGNlcHRpb24pOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogSlNDRXhjZXB0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb25Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDRXhjZXB0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iYjVkYmMwZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK0dSZWZQdHI8SlNDRXhjZXB0aW9uPiBqc2NFeGNl
cHRpb25DcmVhdGUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NFeGNl
cHRpb25HZXRKU1ZhbHVlKEpTQ0V4Y2VwdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDR0xpYldyYXBwZXJPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzJjYWJhOWI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDR0xpYldyYXBwZXJPYmplY3QuaApAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NHTGliV3JhcHBlck9iamVjdCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSlNDR0xpYldyYXBwZXJPYmpl
Y3QoZ3BvaW50ZXIgb2JqZWN0LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCisgICAg
ICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZGVzdHJveUZ1bmN0aW9uKGRlc3Ry
b3lGdW5jdGlvbikKKyAgICB7CisgICAgfQorCisgICAgfkpTQ0dMaWJXcmFwcGVyT2JqZWN0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX2Rlc3Ryb3lGdW5jdGlvbikKKyAgICAgICAgICAgIG1fZGVz
dHJveUZ1bmN0aW9uKG1fb2JqZWN0KTsKKyAgICB9CisKKyAgICBncG9pbnRlciBvYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX29iamVjdDsgfQorCitwcml2YXRlOgorICAgIGdwb2ludGVyIG1fb2Jq
ZWN0IHsgbnVsbHB0ciB9OworICAgIEdEZXN0cm95Tm90aWZ5IG1fZGVzdHJveUZ1bmN0aW9uIHsg
bnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uM2U1OWRiNzNkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU0NWYWx1ZS5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NhbGxi
YWNrRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJK
U0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgPGdv
YmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZH
VHlwZS5oPgorCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0NPTlRFWFQsCit9Owor
Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWVQcml2YXRlIHsKKyAgICBHUmVmUHRyPEpTQ0NvbnRl
eHQ+IGNvbnRleHQ7CisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlOworfSBKU0NWYWx1ZVByaXZhdGU7
CisKK1dFQktJVF9ERUZJTkVfVFlQRShKU0NWYWx1ZSwganNjX3ZhbHVlLCBHX1RZUEVfT0JKRUNU
KQorCitzdGF0aWMgdm9pZCBqc2NWYWx1ZUdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAg
SlNDVmFsdWVQcml2YXRlKiBwcml2ID0gSlNDX1ZBTFVFKG9iamVjdCktPnByaXY7CisKKyAgICBz
d2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NW
YWx1ZVNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgSlNDVmFsdWVQcml2YXRl
KiBwcml2ID0gSlNDX1ZBTFVFKG9iamVjdCktPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkg
eworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBwcml2LT5jb250ZXh0ID0gSlNDX0NP
TlRFWFQoZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY1ZhbHVlRGlz
cG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gSlND
X1ZBTFVFKG9iamVjdCktPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y29udGV4dCkgeworICAgICAg
ICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQu
Z2V0KCkpOworCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoanNDb250ZXh0LCBwcml2LT5qc1Zh
bHVlKTsKKyAgICAgICAganNjQ29udGV4dFZhbHVlRGVzdHJveWVkKHByaXYtPmNvbnRleHQuZ2V0
KCksIHByaXYtPmpzVmFsdWUpOworICAgICAgICBwcml2LT5qc1ZhbHVlID0gbnVsbHB0cjsKKyAg
ICAgICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xB
U1MoanNjX3ZhbHVlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQganNjX3ZhbHVlX2NsYXNzX2luaXQoSlNDVmFsdWVDbGFzcyoga2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBvYmpDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIG9i
akNsYXNzLT5nZXRfcHJvcGVydHkgPSBqc2NWYWx1ZUdldFByb3BlcnR5OworICAgIG9iakNsYXNz
LT5zZXRfcHJvcGVydHkgPSBqc2NWYWx1ZVNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5kaXNw
b3NlID0ganNjVmFsdWVEaXNwb3NlOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRleHQiLAorICAgICAgICAgICAgIkpTQ0NvbnRl
eHQiLAorICAgICAgICAgICAgIkpTQyBDb250ZXh0IiwKKyAgICAgICAgICAgIEpTQ19UWVBFX0NP
TlRFWFQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFN
X1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK0pTVmFsdWVSZWYg
anNjVmFsdWVHZXRKU1ZhbHVlKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUt
PnByaXYtPmpzVmFsdWU7Cit9CisKK0pTQ1ZhbHVlKiBqc2NWYWx1ZUNyZWF0ZShKU0NDb250ZXh0
KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgYXV0byogdmFsdWUgPSBKU0Nf
VkFMVUUoZ19vYmplY3RfbmV3KEpTQ19UWVBFX1ZBTFVFLCAiY29udGV4dCIsIGNvbnRleHQsIG51
bGxwdHIpKTsKKyAgICBKU1ZhbHVlUHJvdGVjdChqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRl
eHQpLCBqc1ZhbHVlKTsKKyAgICB2YWx1ZS0+cHJpdi0+anNWYWx1ZSA9IGpzVmFsdWU7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld191bmRlZmluZWQoSlND
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09O
VEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3Jl
YXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoanNjQ29udGV4dEdldEpTQ29u
dGV4dChjb250ZXh0KSkpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX3Vu
ZGVmaW5lZChKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlND
X0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0g
dmFsdWUtPnByaXY7CisgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChqc2NDb250ZXh0R2V0
SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworSlND
Q29udGV4dCoganNjX3ZhbHVlX2dldF9jb250ZXh0KEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAg
IHJldHVybiB2YWx1ZS0+cHJpdi0+Y29udGV4dC5nZXQoKTsKK30KKworSlNDVmFsdWUqIGpzY192
YWx1ZV9uZXdfbnVsbChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBq
c2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVlTWFrZU51bGwoanNjQ29u
dGV4dEdldEpTQ29udGV4dChjb250ZXh0KSkpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNj
X3ZhbHVlX2lzX251bGwoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSog
cHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitK
U0NWYWx1ZSoganNjX3ZhbHVlX25ld19udW1iZXIoSlNDQ29udGV4dCogY29udGV4dCwgZG91Ymxl
IG51bWJlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250
ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUo
Y29udGV4dCwgSlNWYWx1ZU1ha2VOdW1iZXIoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0
KSwgbnVtYmVyKSkubGVha1JlZigpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfbnVtYmVy
KEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFM
VUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+
cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQo
cHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQorCitkb3VibGUganNjX3Zh
bHVlX3RvX2RvdWJsZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAg
ICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byByZXN1bHQgPSBKU1Zh
bHVlVG9OdW1iZXIoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwg
cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNl
cHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dpbnQzMiBqc2NfdmFsdWVfdG9faW50MzIoSlNDVmFsdWUqIHZh
bHVlKQoreworICAgIHJldHVybiBKU0M6OnRvSW50MzIoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1
ZSkpOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19ib29sZWFuKEpTQ0NvbnRleHQqIGNv
bnRleHQsIGdib29sZWFuIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19J
U19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0
T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVlTWFrZUJvb2xlYW4oanNjQ29udGV4dEdldEpT
Q29udGV4dChjb250ZXh0KSwgdmFsdWUpKS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192
YWx1ZV9pc19ib29sZWFuKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUq
IHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzQm9vbGVhbihqc2NDb250
ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30K
KworZ2Jvb2xlYW4ganNjX3ZhbHVlX3RvX2Jvb2xlYW4oSlNDVmFsdWUqIHZhbHVlKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAg
IEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVl
VG9Cb29sZWFuKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHBy
aXYtPmpzVmFsdWUpOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19zdHJpbmcoSlNDQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIEpTVmFsdWVS
ZWYganNTdHJpbmdWYWx1ZTsKKyAgICBpZiAoc3RyaW5nKSB7CisgICAgICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBqc1N0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoc3RyaW5nKSk7CisgICAgICAgIGpzU3RyaW5nVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhq
c2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBqc1N0cmluZy5nZXQoKSk7CisgICAgfSBl
bHNlCisgICAgICAgIGpzU3RyaW5nVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhqc2NDb250ZXh0
R2V0SlNDb250ZXh0KGNvbnRleHQpLCBudWxscHRyKTsKKyAgICByZXR1cm4ganNjQ29udGV4dEdl
dE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNTdHJpbmdWYWx1ZSkubGVha1JlZigpOworfQorCitn
Ym9vbGVhbiBqc2NfdmFsdWVfaXNfc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NW
YWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzU3Ry
aW5nKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpz
VmFsdWUpOworfQorCitjaGFyKiBqc2NfdmFsdWVfdG9fc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBudWxscHRy
KTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
anNTdHJpbmcoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoanNjQ29udGV4dEdldEpTQ29udGV4
dChwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbikpOworICAg
IGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQo
KSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzaXplX3QgbWF4
U2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZy5nZXQoKSk7
CisgICAgYXV0byogc3RyaW5nID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKG1heFNpemUp
KTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGpzU3RyaW5nLmdldCgpLCBzdHJpbmcsIG1h
eFNpemUpOworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3
X2FycmF5KEpTQ0NvbnRleHQqIGNvbnRleHQsIEdUeXBlIGZpcnN0SXRlbVR5cGUsIC4uLikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0
cik7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganND
b250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBhdXRvKiBqc0Fy
cmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoanNDb250ZXh0LCAwLCBudWxscHRyLCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byoganNBcnJheU9i
amVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIGpzQXJyYXksICZleGNlcHRpb24pOwor
ICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7
CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0SXRlbVR5cGUpOwor
ICAgIEdUeXBlIGl0ZW1UeXBlID0gZmlyc3RJdGVtVHlwZTsKKyAgICB3aGlsZSAoaXRlbVR5cGUg
IT0gR19UWVBFX05PTkUpIHsKKyAgICAgICAgR1ZhbHVlIGl0ZW07CisgICAgICAgIEdVbmlxdWVP
dXRQdHI8Y2hhcj4gZXJyb3I7CisgICAgICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUKCZpdGVtLCBp
dGVtVHlwZSwgYXJncywgR19WQUxVRV9OT0NPUFlfQ09OVEVOVFMsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgZXhjZXB0aW9uID0gdG9SZWYoSlND
OjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRleHQpLCBtYWtlU3RyaW5nKCJmYWlsZWQgdG8g
Y29sbGVjdCBhcnJheSBpdGVtOiAiLCBlcnJvci5nZXQoKSkpKTsKKyAgICAgICAgICAgIGpzY0Nv
bnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0LCBleGNlcHRpb24pOworICAgICAg
ICAgICAganNBcnJheSA9IG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8qIGpzVmFsdWUgPSBqc2NDb250ZXh0R1ZhbHVlVG9KU1ZhbHVlKGNvbnRl
eHQsICZpdGVtLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmaXRlbSk7Cisg
ICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhj
ZXB0aW9uKSkgeworICAgICAgICAgICAganNBcnJheSA9IG51bGxwdHI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGpz
Q29udGV4dCwganNBcnJheU9iamVjdCwgaW5kZXgsIGpzVmFsdWUsICZleGNlcHRpb24pOworICAg
ICAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2Vw
dGlvbikpIHsKKyAgICAgICAgICAgIGpzQXJyYXkgPSBudWxscHRyOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBpdGVtVHlwZSA9IHZhX2FyZyhhcmdzLCBHVHlwZSk7
CisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVy
biBqc0FycmF5ID8ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNBcnJheSku
bGVha1JlZigpIDogbnVsbHB0cjsKK30KKworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfYXJyYXlf
ZnJvbV9nYXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1B0ckFycmF5KiBnQXJyYXkpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIp
OworCisgICAgaWYgKCFnQXJyYXkgfHwgIWdBcnJheS0+bGVuKQorICAgICAgICByZXR1cm4ganNj
X3ZhbHVlX25ld19hcnJheShjb250ZXh0LCBHX1RZUEVfTk9ORSk7CisKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganNBcnJheSA9IGpzY0NvbnRleHRHQXJy
YXlUb0pTQXJyYXkoY29udGV4dCwgZ0FycmF5LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29u
dGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVl
KGNvbnRleHQsIGpzQXJyYXkpLmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lz
X2FycmF5KEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0Nf
SVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2
YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzQXJyYXkoanNjQ29udGV4dEdldEpTQ29u
dGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKK0pTQ1ZhbHVl
KiBqc2NfdmFsdWVfbmV3X29iamVjdChKU0NDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBpbnN0
YW5jZSwgSlNDQ2xhc3MqIGpzY0NsYXNzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpT
Q19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghaW5zdGFuY2UgfHwgSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgaW5zdGFuY2UgPyB0b1Jl
Zihqc2NDbGFzc0dldE9yQ3JlYXRlSlNXcmFwcGVyKGpzY0NsYXNzLCBpbnN0YW5jZSkpIDogSlNP
YmplY3RNYWtlKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIG51bGxwdHIsIG51bGxw
dHIpKS5sZWFrUmVmKCk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9pc19vYmplY3QoSlNDVmFs
dWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1
ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2Owor
ICAgIHJldHVybiBKU1ZhbHVlSXNPYmplY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5j
b250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKK2dib29sZWFuIGpzY192YWx1ZV9v
YmplY3RfaXNfaW5zdGFuY2Vfb2YoSlNDVmFsdWUqIHZhbHVlLCBjb25zdCBjaGFyKiBuYW1lKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVBy
aXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICAvLyBXZSB1c2UgZXZhbHVhdGUgaGVyZSBh
bmQgbm90IGdldF92YWx1ZSBiZWNhdXNlIGNsYXNzZXMgYXJlIG5vdCBuZWNlc3NhcmlseSBhIHBy
b3BlcnR5IG9mIHRoZSBnbG9iYWwgb2JqZWN0LgorICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZ2xvYmFsLWVudmlyb25t
ZW50LXJlY29yZHMKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShwcml2LT5jb250ZXh0LmdldCgpLCBuYW1lKSk7CisgICAg
YXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0Lmdl
dCgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVj
dFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBjb25zdHJ1Y3Rvci0+cHJp
di0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZSA9IEpTVmFsdWVJc0luc3RhbmNl
T2ZDb25zdHJ1Y3Rvcihqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsIG9iamVjdCwgJmV4Y2VwdGlv
bik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250
ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1
cm4gcmV0dXJuVmFsdWU7Cit9CisKK3ZvaWQganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHko
SlNDVmFsdWUqIHZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBKU0NWYWx1ZSogcHJvcGVydHkpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHByb3Bl
cnR5KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0
KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJl
ZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhj
ZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYt
PmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBwcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKG5hbWUpKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGpzQ29udGV4dCwg
b2JqZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHByb3BlcnR5LT5wcml2LT5qc1ZhbHVlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUsICZleGNlcHRpb24pOworICAgIGpzY0NvbnRleHRIYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pOworfQorCitK
U0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkoSlNDVmFsdWUqIHZhbHVlLCBj
b25zdCBjaGFyKiBuYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxV
RSh2YWx1ZSksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIG51bGxw
dHIpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0
byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgp
KTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYg
b2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5j
b250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191
bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKworICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBwcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG5hbWUpKTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHkoanND
b250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwgJmV4Y2VwdGlvbik7CisgICAgaWYg
KGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBl
eGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+
Y29udGV4dC5nZXQoKSk7CisKKyAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUo
cHJpdi0+Y29udGV4dC5nZXQoKSwgcmVzdWx0KS5sZWFrUmVmKCk7Cit9CisKK3ZvaWQganNjX3Zh
bHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgoSlNDVmFsdWUqIHZhbHVlLCB1bnNpZ25l
ZCBpbmRleCwgSlNDVmFsdWUqIHByb3BlcnR5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlND
X0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUocHJv
cGVydHkpKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAg
IGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5n
ZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIEpTT2JqZWN0
UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJp
di0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoanNDb250ZXh0LCBvYmplY3QsIGluZGV4LCBwcm9wZXJ0
eS0+cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAganNjQ29udGV4dEhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbik7Cit9CisKK0pTQ1Zh
bHVlKiBqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleChKU0NWYWx1ZSogdmFs
dWUsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19W
QUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFs
dWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChw
cml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7
CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgcHJp
di0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKworICAg
IEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoanNDb250ZXh0
LCBvYmplY3QsIGluZGV4LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAg
IHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKwor
ICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgp
LCByZXN1bHQpLmxlYWtSZWYoKTsKK30KKworc3RhdGljIEdSZWZQdHI8SlNDVmFsdWU+IGpzY1Zh
bHVlQ2FsbEZ1bmN0aW9uKEpTQ1ZhbHVlKiB2YWx1ZSwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
Qzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZSBmdW5jdGlvblR5cGUsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIEdUeXBlIGZpcnN0UGFyYW1ldGVyVHlwZSwgdmFfbGlzdCBhcmdzKQoreworICAg
IEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4
dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgVmVjdG9yPEpTVmFsdWVSZWY+IGFy
Z3VtZW50czsKKyAgICBHVHlwZSBwYXJhbWV0ZXJUeXBlID0gZmlyc3RQYXJhbWV0ZXJUeXBlOwor
ICAgIHdoaWxlIChwYXJhbWV0ZXJUeXBlICE9IEdfVFlQRV9OT05FKSB7CisgICAgICAgIEdWYWx1
ZSBwYXJhbWV0ZXI7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gZXJyb3I7CisgICAgICAg
IEdfVkFMVUVfQ09MTEVDVF9JTklUKCZwYXJhbWV0ZXIsIHBhcmFtZXRlclR5cGUsIGFyZ3MsIEdf
VkFMVUVfTk9DT1BZX0NPTlRFTlRTLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBpZiAoZXJy
b3IpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9y
KHRvSlMoanNDb250ZXh0KSwgbWFrZVN0cmluZygiZmFpbGVkIHRvIGNvbGxlY3QgZnVuY3Rpb24g
cGFyYW1hdGVyOiAiLCBlcnJvci5nZXQoKSkpKTsKKyAgICAgICAgICAgIGpzY0NvbnRleHRIYW5k
bGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pOworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5j
b250ZXh0LmdldCgpKSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvKiBqc1ZhbHVlID0ganNj
Q29udGV4dEdWYWx1ZVRvSlNWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCAmcGFyYW1ldGVyLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmcGFyYW1ldGVyKTsKKyAgICAgICAg
aWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgp
LCBleGNlcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIGpzVmFsdWUpOworCisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoanNWYWx1ZSk7CisgICAgICAgIHBhcmFtZXRlclR5cGUgPSB2YV9hcmcoYXJncywgR1R5
cGUpOworICAgIH0KKworICAgIEpTVmFsdWVSZWYgcmVzdWx0OworICAgIHN3aXRjaCAoZnVuY3Rp
b25UeXBlKSB7CisgICAgY2FzZSBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6OkNvbnN0
cnVjdG9yOgorICAgICAgICByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGpzQ29u
dGV4dCwgZnVuY3Rpb24sIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5kYXRhKCksICZleGNl
cHRpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlv
bjo6VHlwZTo6TWV0aG9kOgorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5
cGU6OkZ1bmN0aW9uOgorICAgICAgICByZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGpz
Q29udGV4dCwgZnVuY3Rpb24sIHRoaXNPYmplY3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50
cy5kYXRhKCksICZleGNlcHRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICByZXR1cm4gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVk
KHByaXYtPmNvbnRleHQuZ2V0KCkpKTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVh
dGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCByZXN1bHQpOworfQorCitKU0NWYWx1ZSoganNj
X3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciog
bmFtZSwgR1R5cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2
YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBw
cml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJl
dHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBtZXRob2ROYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgSlNWYWx1ZVJlZiBmdW5jdGlvblZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShqc0NvbnRleHQsIG9iamVjdCwgbWV0aG9kTmFtZS5nZXQoKSwg
JmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChw
cml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVl
X25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAgICBKU09iamVjdFJlZiBm
dW5jdGlvbiA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIGZ1bmN0aW9uVmFsdWUsICZleGNl
cHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+
Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdf
dW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgdmFfbGlzdCBhcmdzOworICAg
IHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFyYW1ldGVyVHlwZSk7CisgICAgYXV0byByZXN1bHQgPSBq
c2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1ZSwgZnVuY3Rpb24sIEpTQzo6SlNDQ2FsbGJhY2tGdW5j
dGlvbjo6VHlwZTo6TWV0aG9kLCBvYmplY3QsIGZpcnN0UGFyYW1ldGVyVHlwZSwgYXJncyk7Cisg
ICAgdmFfZW5kKGFyZ3MpOworCisgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7Cit9CisKK3Zv
aWQganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShKU0NWYWx1ZSogdmFsdWUs
IGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgSlNDVmFsdWVQcm9wZXJ0eUZsYWdzIGZsYWdzLCBK
U0NWYWx1ZSogcHJvcGVydHlWYWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19W
QUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlOYW1lKTsKKworICAg
IEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIEdSZWZQdHI8SlNDVmFs
dWU+IGRlc2NyaXB0b3IgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QocHJpdi0+Y29u
dGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHRy
dWVWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Jvb2xlYW4ocHJpdi0+Y29udGV4dC5n
ZXQoKSwgVFJVRSkpOworICAgIGlmIChmbGFncyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdV
UkFCTEUpCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3Iu
Z2V0KCksICJjb25maWd1cmFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworICAgIGlmIChmbGFncyAm
IEpTQ19WQUxVRV9QUk9QRVJUWV9FTlVNRVJBQkxFKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0
X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiZW51bWVyYWJsZSIsIHRydWVWYWx1ZS5n
ZXQoKSk7CisgICAgaWYgKHByb3BlcnR5VmFsdWUpCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rf
c2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJ2YWx1ZSIsIHByb3BlcnR5VmFsdWUpOwor
ICAgIGlmIChmbGFncyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSkKKyAgICAgICAganNj
X3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgIndyaXRhYmxlIiwg
dHJ1ZVZhbHVlLmdldCgpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksICJPYmplY3QiKSk7
CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmpl
Y3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJkZWZpbmVQcm9wZXJ0eSIsCisgICAgICAg
IEpTQ19UWVBFX1ZBTFVFLCB2YWx1ZSwgR19UWVBFX1NUUklORywgcHJvcGVydHlOYW1lLCBKU0Nf
VFlQRV9WQUxVRSwgZGVzY3JpcHRvci5nZXQoKSwgR19UWVBFX05PTkUpKTsKK30KKwordm9pZCBq
c2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9hY2Nlc3NvcihKU0NWYWx1ZSogdmFsdWUs
IGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgSlNDVmFsdWVQcm9wZXJ0eUZsYWdzIGZsYWdzLCBH
VHlwZSBwcm9wZXJ0eVR5cGUsIEdDYWxsYmFjayBnZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIsIGdw
b2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5KQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChwcm9wZXJ0eU5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlUeXBlICE9IEdf
VFlQRV9JTlZBTElEICYmIHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfTk9ORSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChnZXR0ZXIgfHwgc2V0dGVyKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJp
diA9IHZhbHVlLT5wcml2OworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGRlc2NyaXB0b3IgPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QocHJpdi0+Y29udGV4dC5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0cikpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHRydWVWYWx1ZSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfbmV3X2Jvb2xlYW4ocHJpdi0+Y29udGV4dC5nZXQoKSwgVFJVRSkpOworICAgIGlm
IChmbGFncyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUpCisgICAgICAgIGpzY192
YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJjb25maWd1cmFibGUi
LCB0cnVlVmFsdWUuZ2V0KCkpOworICAgIGlmIChmbGFncyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9F
TlVNRVJBQkxFKQorICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlw
dG9yLmdldCgpLCAiZW51bWVyYWJsZSIsIHRydWVWYWx1ZS5nZXQoKSk7CisKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0
LmdldCgpKSk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CisgICAgaWYgKGdldHRlcikgeworICAgICAgICBHUmVmUHRyPEdD
bG9zdXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGdldHRlciwgdXNlckRh
dGEsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Nsb3N1cmVOb3RpZnk+KGRlc3Ryb3lOb3RpZnkpKSk7Cisg
ICAgICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0
aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgQVNDSUlMaXRlcmFs
KCJnZXQiKSwKKyAgICAgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6TWV0
aG9kLCBudWxscHRyLCBXVEZNb3ZlKGNsb3N1cmUpLCBwcm9wZXJ0eVR5cGUsIHsgfSkpOworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIGZ1bmN0aW9uT2JqZWN0KTsKKyAgICAgICAganNjX3Zh
bHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgImdldCIsIGZ1bmN0aW9u
LmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNldHRlcikgeworICAgICAgICBHUmVmUHRyPEdDbG9z
dXJlPiBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KHNldHRlciwgdXNlckRhdGEs
IGdldHRlciA/IG51bGxwdHIgOiByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0
cm95Tm90aWZ5KSkpOworICAgICAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpTQzo6
SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIEFTQ0lJTGl0ZXJhbCgic2V0IiksCisgICAgICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVu
Y3Rpb246OlR5cGU6Ok1ldGhvZCwgbnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgR19UWVBFX05P
TkUsIHsgcHJvcGVydHlUeXBlIH0pKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rp
b24gPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LmdldCgpLCBmdW5j
dGlvbk9iamVjdCk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGRlc2Ny
aXB0b3IuZ2V0KCksICJzZXQiLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgfQorICAgIEdSZWZQdHI8
SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUocHJpdi0+
Y29udGV4dC5nZXQoKSwgIk9iamVjdCIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKG9iamVjdC5nZXQoKSwg
ImRlZmluZVByb3BlcnR5IiwKKyAgICAgICAgSlNDX1RZUEVfVkFMVUUsIHZhbHVlLCBHX1RZUEVf
U1RSSU5HLCBwcm9wZXJ0eU5hbWUsIEpTQ19UWVBFX1ZBTFVFLCBkZXNjcmlwdG9yLmdldCgpLCBH
X1RZUEVfTk9ORSkpOworfQorCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19mdW5jdGlvbihKU0ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhY2ssIGdw
b2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBHVHlwZSByZXR1
cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGNhbGxiYWNrLCBudWxscHRyKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2
YV9zdGFydChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRlcnM7
CisgICAgaWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1Db3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQo
dmFfYXJnKGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIEdS
ZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2FsbGJh
Y2ssIHVzZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90
aWZ5KSkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlND
b250ZXh0KGNvbnRleHQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRv
UmVmKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIG5hbWUgPyBTdHJpbmc6OmZyb21VVEY4KG5hbWUpIDogQVNDSUlMaXRlcmFs
KCJhbm9ueW1vdXMiKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpG
dW5jdGlvbiwgbnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSkpOworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250
ZXh0LCBmdW5jdGlvbk9iamVjdCkubGVha1JlZigpOworfQorCitnYm9vbGVhbiBqc2NfdmFsdWVf
aXNfZnVuY3Rpb24oSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJp
diA9IHZhbHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0Nv
bnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBu
dWxscHRyOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRl
eHQsIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIHJldHVybiAhZXhjZXB0aW9uID8g
SlNPYmplY3RJc0Z1bmN0aW9uKGpzQ29udGV4dCwgb2JqZWN0KSA6IEZBTFNFOworfQorCitKU0NW
YWx1ZSoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoSlNDVmFsdWUqIHZhbHVlLCBHVHlwZSBmaXJz
dFBhcmFtZXRlclR5cGUsIC4uLikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNf
VkFMVUUodmFsdWUpLCBudWxscHRyKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZh
bHVlLT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQo
cHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRy
OworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwg
cHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNl
cHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pKQorICAgICAgICBy
ZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4dC5nZXQoKSk7CisKKyAg
ICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZmlyc3RQYXJhbWV0ZXJUeXBlKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGpzY1ZhbHVlQ2FsbEZ1bmN0aW9uKHZhbHVlLCBmdW5jdGlvbiwg
SlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpGdW5jdGlvbiwgbnVsbHB0ciwgZmlyc3RQ
YXJhbWV0ZXJUeXBlLCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gcmVz
dWx0LmxlYWtSZWYoKTsKK30KKworZ2Jvb2xlYW4ganNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKEpT
Q1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUo
dmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJp
djsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNv
bnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBK
U09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1Zh
bHVlLCAmZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gIWV4Y2VwdGlvbiA/IEpTT2JqZWN0SXNDb25z
dHJ1Y3Rvcihqc0NvbnRleHQsIG9iamVjdCkgOiBGQUxTRTsKK30KKworSlNDVmFsdWUqIGpzY192
YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsKEpTQ1ZhbHVlKiB2YWx1ZSwgR1R5cGUgZmlyc3RQYXJhbWV0
ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZh
bHVlKSwgbnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJp
djsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNv
bnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBK
U09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHByaXYtPmpz
VmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpz
Y192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgdmFfbGlz
dCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFyYW1ldGVyVHlwZSk7CisgICAgYXV0
byByZXN1bHQgPSBqc2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1ZSwgZnVuY3Rpb24sIEpTQzo6SlND
Q2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6Q29uc3RydWN0b3IsIG51bGxwdHIsIGZpcnN0UGFyYW1l
dGVyVHlwZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgcmV0dXJuIHJlc3VsdC5s
ZWFrUmVmKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZWRjOWFhNDkxNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZS5oCkBA
IC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
ZiAhZGVmaW5lZChfX0pTQ19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04p
CisjZXJyb3IgIk9ubHkgPGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNl
bmRpZgorCisjaWZuZGVmIEpTQ1ZhbHVlX2gKKyNkZWZpbmUgSlNDVmFsdWVfaAorCisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfVkFMVUUgICAgICAgICAgICAoanNjX3ZhbHVlX2dl
dF90eXBlKCkpCisjZGVmaW5lIEpTQ19WQUxVRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9WQUxVRSwgSlNDVmFsdWUpKQorI2RlZmlu
ZSBKU0NfSVNfVkFMVUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0NfVkFMVUVfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUsIEpTQ1Zh
bHVlQ2xhc3MpKQorI2RlZmluZSBKU0NfSVNfVkFMVUVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgSlNDX1RZUEVfVkFMVUUpKQorI2RlZmluZSBKU0NfVkFM
VUVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgSlND
X1RZUEVfVkFMVUUsIEpTQ1ZhbHVlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWUg
SlNDVmFsdWU7Cit0eXBlZGVmIHN0cnVjdCBfSlNDVmFsdWVDbGFzcyBKU0NWYWx1ZUNsYXNzOwor
dHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlUHJpdmF0ZSBKU0NWYWx1ZVByaXZhdGU7CisKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0
IEpTQ0NvbnRleHQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgSlNDX1ZBTFVFX1BST1BFUlRZX0NP
TkZJR1VSQUJMRSA9IDEgPDwgMCwKKyAgICBKU0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJMRSAg
ID0gMSA8PCAxLAorICAgIEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSAgICAgPSAxIDw8IDIK
K30gSlNDVmFsdWVQcm9wZXJ0eUZsYWdzOworCitzdHJ1Y3QgX0pTQ1ZhbHVlIHsKKyAgICBHT2Jq
ZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ1ZhbHVlUHJpdmF0ZSAq
cHJpdjsKK307CisKK3N0cnVjdCBfSlNDVmFsdWVDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZv
aWQgKCpfanNjX3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMikg
KHZvaWQpOworICAgIHZvaWQgKCpfanNjX3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworSlNDX0FQ
SSBHVHlwZQoranNjX3ZhbHVlX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQp
OworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfdW5kZWZpbmVkICAgICAgICAg
ICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgZ2Jv
b2xlYW4KK2pzY192YWx1ZV9pc191bmRlZmluZWQgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1
ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ0NvbnRleHQgKgoranNjX3ZhbHVl
X2dldF9jb250ZXh0ICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19udWxsICAgICAgICAg
ICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0KTsKKworSlNDX0FQ
SSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX251bGwgICAgICAgICAgICAgICAgICAgICAgICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3Zh
bHVlX25ld19udW1iZXIgICAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAg
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSAgICAgICAgICAgICAgICBudW1iZXIpOworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVl
X2lzX251bWJlciAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSk7CisKK0pTQ19BUEkgZG91YmxlCitqc2NfdmFsdWVfdG9fZG91YmxlICAgICAgICAgICAg
ICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBnaW50
MzIKK2pzY192YWx1ZV90b19pbnQzMiAgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAg
ICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdf
Ym9vbGVhbiAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAg
ICAgICAgICAgICAgdmFsdWUpOworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX2Jvb2xl
YW4gICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisK
K0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV90b19ib29sZWFuICAgICAgICAgICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoK
K2pzY192YWx1ZV9uZXdfc3RyaW5nICAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAg
ICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICAgICAgICAgICAqc3RyaW5nKTsKKworSlNDX0FQSSBnYm9vbGVhbgor
anNjX3ZhbHVlX2lzX3N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAg
ICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgY2hhciAqCitqc2NfdmFsdWVfdG9fc3RyaW5nICAg
ICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlND
X0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2FycmF5ICAgICAgICAgICAgICAgICAgICAg
ICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIGZpcnN0X2l0ZW1fdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitK
U0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfYXJyYXlfZnJvbV9nYXJyYXkgICAgICAg
ICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHUHRyQXJyYXkgICAgICAgICAgICAqYXJyYXkpOworCitK
U0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfYXJyYXkgICAgICAgICAgICAgICAgICAgICAg
ICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitq
c2NfdmFsdWVfbmV3X29iamVjdCAgICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAg
ICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgICAgICAgICAgICAgIGluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTQ0NsYXNzICAgICAgICAgICAgICpqc2NfY2xhc3MpOwor
CitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNfb2JqZWN0ICAgICAgICAgICAgICAgICAg
ICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBnYm9vbGVhbgor
anNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZiAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAg
ICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICAgICAgICAgICAqbmFtZSk7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVl
X29iamVjdF9zZXRfcHJvcGVydHkgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICAgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBKU0NWYWx1ZSAgICAgICAgICAgICAqcHJvcGVydHkpOworCitKU0NfQVBJIEpTQ1Zh
bHVlICoKK2pzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5ICAgICAgICAgICAgIChKU0NWYWx1
ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUpOworCitKU0NfQVBJIHZvaWQKK2pz
Y192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4ICAgIChKU0NWYWx1ZSAgICAgICAg
ICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3VpbnQgICAgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAgICAgICpwcm9wZXJ0eSk7CisKK0pTQ19B
UEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXggICAg
KEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgaW5kZXgpOworCitKU0NfQVBJ
IEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZCAgICAgICAgICAgIChK
U0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIGZpcnN0
X3BhcmFtZXRlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC4uLik7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVy
dHlfZGF0YSAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqcHJvcGVy
dHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NW
YWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICAgKnByb3BlcnR5X3ZhbHVlKTsKKworSlND
X0FQSSB2b2lkCitqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9hY2Nlc3NvciAoSlND
VmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICpwcm9wZXJ0eV9uYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlUHJvcGVydHlGbGFn
cyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlw
ZSAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgZ2V0dGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgICAgICAg
ICBzZXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgICAgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgZGVzdHJveV9ub3RpZnkpOwor
CitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfZnVuY3Rpb24gICAgICAgICAgICAg
ICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAqbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICAg
ICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgZGVzdHJveV9ub3Rp
ZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAg
ICAgICAgICAgICAgIHJldHVybl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBuX3BhcmFtcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitKU0NfQVBJIGdib29sZWFu
Citqc2NfdmFsdWVfaXNfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAg
ICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfZnVuY3Rp
b25fY2FsbCAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAg
ICAgICAgICBmaXJzdF9wYXJhbWV0ZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuLi4pOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVfaXNf
Y29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVl
KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbCAgICAg
ICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICBmaXJzdF9w
YXJhbWV0ZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogSlNDVmFsdWVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlUHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MjE0NDM1M2Y1NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaApA
QCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDVmFsdWUuaCIKKworSlNWYWx1ZVJlZiBqc2NWYWx1
ZUdldEpTVmFsdWUoSlNDVmFsdWUqKTsKK0pTQ1ZhbHVlKiBqc2NWYWx1ZUNyZWF0ZShKU0NDb250
ZXh0KiwgSlNWYWx1ZVJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmVyc2lvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmVyc2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiZDdh
YTljODM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ1ZlcnNpb24uY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1ZlcnNpb24u
aCIKKworLyoqCisgKiBTRUNUSU9OOiBKU0NWZXJzaW9uCisgKiBAU2hvcnRfZGVzY3JpcHRpb246
IFByb3ZpZGVzIHRoZSBKYXZhU2NyaXB0Q29yZSB2ZXJzaW9uCisgKiBAVGl0bGU6IEpTQ1ZlcnNp
b24KKyAqCisgKiBQcm92aWRlcyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgcmV0dXJuaW5nIEphdmFT
Y3JpcHRDb3JlJ3MgbWFqb3IsIG1pbm9yIGFuZAorICogbWljcm8gdmVyc2lvbnMgb2YgdGhlIEph
dmFTY3JpcHRDb3JlIGxpYnJhcnkgeW91ciBjb2RlIGlzIHJ1bm5pbmcKKyAqIGFnYWluc3QuIFRo
aXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZQorICogI0pTQ19NQUpPUl9WRVJT
SU9OLCAjSlNDX01JTk9SX1ZFUlNJT04gb3IKKyAqICNKU0NfTUlDUk9fVkVSU0lPTiwgd2hpY2gg
cmVwcmVzZW50IHRoZSB2ZXJzaW9uIG9mIHRoZSBKYXZhU2NyaXB0Q29yZQorICogaGVhZGVycyBp
bmNsdWRlZCB3aGVuIGNvbXBpbGluZyB0aGUgY29kZS4KKyAqCisgKi8KKworLyoqCisgKiBqc2Nf
Z2V0X21ham9yX3ZlcnNpb246CisgKgorICogUmV0dXJucyB0aGUgbWFqb3IgdmVyc2lvbiBudW1i
ZXIgb2YgdGhlIEphdmFTY3JpcHRDb3JlIGxpYnJhcnkuCisgKiAoZS5nLiBpbiBKYXZhU2NyaXB0
Q29yZSB2ZXJzaW9uIDEuOC4zIHRoaXMgaXMgMS4pCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBp
biB0aGUgbGlicmFyeSwgc28gaXQgcmVwcmVzZW50cyB0aGUgSmF2YVNjcmlwdENvcmUgbGlicmFy
eQorICogeW91ciBjb2RlIGlzIHJ1bm5pbmcgYWdhaW5zdC4gQ29udHJhc3Qgd2l0aCB0aGUgI0pT
Q19NQUpPUl9WRVJTSU9OCisgKiBtYWNybywgd2hpY2ggcmVwcmVzZW50cyB0aGUgbWFqb3IgdmVy
c2lvbiBvZiB0aGUgSmF2YVNjcmlwdENvcmUgaGVhZGVycyB5b3UKKyAqIGhhdmUgaW5jbHVkZWQg
d2hlbiBjb21waWxpbmcgeW91ciBjb2RlLgorICoKKyAqIFJldHVybnM6IHRoZSBtYWpvciB2ZXJz
aW9uIG51bWJlciBvZiB0aGUgSmF2YVNjcmlwdENvcmUgbGlicmFyeQorICovCitndWludCBqc2Nf
Z2V0X21ham9yX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gSlNDX01BSk9SX1ZFUlNJT047
Cit9CisKKy8qKgorICoganNjX2dldF9taW5vcl92ZXJzaW9uOgorICoKKyAqIFJldHVybnMgdGhl
IG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5LgorICog
KGUuZy4gaW4gSmF2YVNjcmlwdENvcmUgdmVyc2lvbiAxLjguMyB0aGlzIGlzIDguKQorICoKKyAq
IFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIGxpYnJhcnksIHNvIGl0IHJlcHJlc2VudHMgdGhlIEph
dmFTY3JpcHRDb3JlIGxpYnJhcnkKKyAqIHlvdXIgY29kZSBpcyBydW5uaW5nIGFnYWluc3QuIENv
bnRyYXN0IHdpdGggdGhlICNKU0NfTUlOT1JfVkVSU0lPTgorICogbWFjcm8sIHdoaWNoIHJlcHJl
c2VudHMgdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIEphdmFTY3JpcHRDb3JlIGhlYWRlcnMgeW91
CisgKiBoYXZlIGluY2x1ZGVkIHdoZW4gY29tcGlsaW5nIHlvdXIgY29kZS4KKyAqCisgKiBSZXR1
cm5zOiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEphdmFTY3JpcHRDb3JlIGxpYnJh
cnkKKyAqLworZ3VpbnQganNjX2dldF9taW5vcl92ZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJu
IEpTQ19NSU5PUl9WRVJTSU9OOworfQorCisvKioKKyAqIGpzY19nZXRfbWljcm9fdmVyc2lvbjoK
KyAqCisgKiBSZXR1cm5zIHRoZSBtaWNybyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgSmF2YVNjcmlw
dENvcmUgbGlicmFyeS4KKyAqIChlLmcuIGluIEphdmFTY3JpcHRDb3JlIHZlcnNpb24gMS44LjMg
dGhpcyBpcyAzLikKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGluIHRoZSBsaWJyYXJ5LCBzbyBp
dCByZXByZXNlbnRzIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5CisgKiB5b3VyIGNvZGUgaXMg
cnVubmluZyBhZ2FpbnN0LiBDb250cmFzdCB3aXRoIHRoZSAjSlNDX01JQ1JPX1ZFUlNJT04KKyAq
IG1hY3JvLCB3aGljaCByZXByZXNlbnRzIHRoZSBtaWNybyB2ZXJzaW9uIG9mIHRoZSBKYXZhU2Ny
aXB0Q29yZSBoZWFkZXJzIHlvdQorICogaGF2ZSBpbmNsdWRlZCB3aGVuIGNvbXBpbGluZyB5b3Vy
IGNvZGUuCisgKgorICogUmV0dXJuczogdGhlIG1pY3JvIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBK
YXZhU2NyaXB0Q29yZSBsaWJyYXJ5CisgKi8KK2d1aW50IGpzY19nZXRfbWljcm9fdmVyc2lvbih2
b2lkKQoreworICAgIHJldHVybiBKU0NfTUlDUk9fVkVSU0lPTjsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWZXJzaW9uLmguaW4gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmVyc2lvbi5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi4wNzlmOTUzZDhmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWZXJzaW9uLmguaW4KQEAgLTAsMCArMSw4NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19K
U0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5
IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBKU0NWZXJzaW9uX2gKKyNkZWZpbmUgSlNDVmVyc2lvbl9oCisKKyNpbmNsdWRlIDxqc2MvSlND
RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogSlNDX01BSk9SX1ZFUlNJT046
CisgKgorICogTGlrZSBqc2NfZ2V0X21ham9yX3ZlcnNpb24oKSwgYnV0IGZyb20gdGhlIGhlYWRl
cnMgdXNlZCBhdAorICogYXBwbGljYXRpb24gY29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBmcm9t
IHRoZSBsaWJyYXJ5IGxpbmtlZAorICogYWdhaW5zdCBhdCBhcHBsaWNhdGlvbiBydW4gdGltZS4K
KyAqLworI2RlZmluZSBKU0NfTUFKT1JfVkVSU0lPTiAoQFBST0pFQ1RfVkVSU0lPTl9NQUpPUkAp
CisKKy8qKgorICogSlNDX01JTk9SX1ZFUlNJT046CisgKgorICogTGlrZSBqc2NfZ2V0X21pbm9y
X3ZlcnNpb24oKSwgYnV0IGZyb20gdGhlIGhlYWRlcnMgdXNlZCBhdAorICogYXBwbGljYXRpb24g
Y29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBmcm9tIHRoZSBsaWJyYXJ5IGxpbmtlZAorICogYWdh
aW5zdCBhdCBhcHBsaWNhdGlvbiBydW4gdGltZS4KKyAqLworI2RlZmluZSBKU0NfTUlOT1JfVkVS
U0lPTiAoQFBST0pFQ1RfVkVSU0lPTl9NSU5PUkApCisKKy8qKgorICogSlNDX01JQ1JPX1ZFUlNJ
T046CisgKgorICogTGlrZSBqc2NfZ2V0X21pY3JvX3ZlcnNpb24oKSwgYnV0IGZyb20gdGhlIGhl
YWRlcnMgdXNlZCBhdAorICogYXBwbGljYXRpb24gY29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBm
cm9tIHRoZSBsaWJyYXJ5IGxpbmtlZAorICogYWdhaW5zdCBhdCBhcHBsaWNhdGlvbiBydW4gdGlt
ZS4KKyAqLworI2RlZmluZSBKU0NfTUlDUk9fVkVSU0lPTiAoQFBST0pFQ1RfVkVSU0lPTl9NSUNS
T0ApCisKKy8qKgorICogSlNDX0NIRUNLX1ZFUlNJT046CisgKiBAbWFqb3I6IG1ham9yIHZlcnNp
b24gKGUuZy4gMSBmb3IgdmVyc2lvbiAxLjIuNSkKKyAqIEBtaW5vcjogbWlub3IgdmVyc2lvbiAo
ZS5nLiAyIGZvciB2ZXJzaW9uIDEuMi41KQorICogQG1pY3JvOiBtaWNybyB2ZXJzaW9uIChlLmcu
IDUgZm9yIHZlcnNpb24gMS4yLjUpCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZlcnNp
b24gb2YgdGhlIEphdmFTY3JpcHRDb3JlIGhlYWRlciBmaWxlcworICogaXMgdGhlIHNhbWUgYXMg
b3IgbmV3ZXIgdGhhbiB0aGUgcGFzc2VkLWluIHZlcnNpb24uCisgKi8KKyNkZWZpbmUgSlNDX0NI
RUNLX1ZFUlNJT04obWFqb3IsIG1pbm9yLCBtaWNybykgXAorICAgIChKU0NfTUFKT1JfVkVSU0lP
TiA+IChtYWpvcikgfHwgXAorICAgIChKU0NfTUFKT1JfVkVSU0lPTiA9PSAobWFqb3IpICYmIEpT
Q19NSU5PUl9WRVJTSU9OID4gKG1pbm9yKSkgfHwgXAorICAgIChKU0NfTUFKT1JfVkVSU0lPTiA9
PSAobWFqb3IpICYmIEpTQ19NSU5PUl9WRVJTSU9OID09IChtaW5vcikgJiYgXAorICAgICBKU0Nf
TUlDUk9fVkVSU0lPTiA+PSAobWljcm8pKSkKKworSlNDX0FQSSBndWludAoranNjX2dldF9tYWpv
cl92ZXJzaW9uICh2b2lkKTsKKworSlNDX0FQSSBndWludAoranNjX2dldF9taW5vcl92ZXJzaW9u
ICh2b2lkKTsKKworSlNDX0FQSSBndWludAoranNjX2dldF9taWNyb192ZXJzaW9uICh2b2lkKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIEpTQ1ZlcnNpb25faCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZjNmE0NGZiYjQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5l
LmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDVmlydHVhbE1hY2hpbmUuaCIK
KworI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDVmlydHVhbE1h
Y2hpbmVQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCit0eXBl
ZGVmIHN0cnVjdCBfSlNDVmlydHVhbE1hY2hpbmVQcml2YXRlIHsKKyAgICBKU0NvbnRleHRHcm91
cFJlZiBqc0NvbnRleHRHcm91cDsKKyAgICBIYXNoTWFwPEpTR2xvYmFsQ29udGV4dFJlZiwgSlND
Q29udGV4dCo+IGNvbnRleHRDYWNoZTsKK30gSlNDVmlydHVhbE1hY2hpbmVQcml2YXRlOworCitX
RUJLSVRfREVGSU5FX1RZUEUoSlNDVmlydHVhbE1hY2hpbmUsIGpzY192aXJ0dWFsX21hY2hpbmUs
IEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyBTdGF0aWNMb2NrIHdyYXBwZXJDYWNoZU11dGV4Owor
CitzdGF0aWMgSGFzaE1hcDxKU0NvbnRleHRHcm91cFJlZiwgSlNDVmlydHVhbE1hY2hpbmUqPiYg
d3JhcHBlck1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8SlNDb250
ZXh0R3JvdXBSZWYsIEpTQ1ZpcnR1YWxNYWNoaW5lKj4+IG1hcDsKKyAgICByZXR1cm4gbWFwOwor
fQorCitzdGF0aWMgdm9pZCBhZGRXcmFwcGVyKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwLCBKU0NW
aXJ0dWFsTWFjaGluZSogdm0pCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2sod3JhcHBlckNhY2hlTXV0ZXgpOworICAgIFJFTEVBU0VfQVNTRVJUKCF3cmFwcGVyTWFwKCku
Y29udGFpbnMoZ3JvdXApKTsKKyAgICB3cmFwcGVyTWFwKCkuc2V0KGdyb3VwLCB2bSk7Cit9CisK
K3N0YXRpYyB2b2lkIHJlbW92ZVdyYXBwZXIoSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXApCit7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod3JhcHBlckNhY2hlTXV0ZXgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHdyYXBwZXJNYXAoKS5jb250YWlucyhncm91cCkpOworICAgIHdy
YXBwZXJNYXAoKS5yZW1vdmUoZ3JvdXApOworfQorCitzdGF0aWMgdm9pZCBqc2NWaXJ0dWFsTWFj
aGluZVNldENvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSAqdm0sIEpTQ29udGV4dEdyb3Vw
UmVmIGdyb3VwKQoreworICAgIGlmIChncm91cCkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
dm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICAgICAgdm0tPnByaXYtPmpzQ29udGV4dEdy
b3VwID0gZ3JvdXA7CisgICAgICAgIEpTQ29udGV4dEdyb3VwUmV0YWluKHZtLT5wcml2LT5qc0Nv
bnRleHRHcm91cCk7CisgICAgICAgIGFkZFdyYXBwZXIodm0tPnByaXYtPmpzQ29udGV4dEdyb3Vw
LCB2bSk7CisgICAgfSBlbHNlIGlmICh2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApIHsKKyAgICAg
ICAgcmVtb3ZlV3JhcHBlcih2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgICAgICBKU0Nv
bnRleHRHcm91cFJlbGVhc2Uodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICAgICAgdm0t
PnByaXYtPmpzQ29udGV4dEdyb3VwID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGpzY1ZpcnR1YWxNYWNoaW5lRW5zdXJlQ29udGV4dEdyb3VwKEpTQ1ZpcnR1YWxNYWNoaW5lICp2
bSkKK3sKKyAgICBpZiAodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvKiBqc0NvbnRleHRHcm91cCA9IEpTQ29udGV4dEdyb3VwQ3JlYXRlKCk7Cisg
ICAganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0R3JvdXAodm0sIGpzQ29udGV4dEdyb3VwKTsK
KyAgICBKU0NvbnRleHRHcm91cFJlbGVhc2UoanNDb250ZXh0R3JvdXApOworfQorCitzdGF0aWMg
dm9pZCBqc2NWaXJ0dWFsTWFjaGluZURpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpT
Q1ZpcnR1YWxNYWNoaW5lKiB2bSA9IEpTQ19WSVJUVUFMX01BQ0hJTkUob2JqZWN0KTsKKyAgICBq
c2NWaXJ0dWFsTWFjaGluZVNldENvbnRleHRHcm91cCh2bSwgbnVsbHB0cik7CisKKyAgICBHX09C
SkVDVF9DTEFTUyhqc2NfdmlydHVhbF9tYWNoaW5lX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQganNjX3ZpcnR1YWxfbWFjaGluZV9jbGFzc19pbml0KEpT
Q1ZpcnR1YWxNYWNoaW5lQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqQ2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xhc3MtPmRpc3Bvc2UgPSBqc2NW
aXJ0dWFsTWFjaGluZURpc3Bvc2U7Cit9CisKK0dSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IGpz
Y1ZpcnR1YWxNYWNoaW5lR2V0T3JDcmVhdGUoSlNDb250ZXh0R3JvdXBSZWYganNDb250ZXh0R3Jv
dXApCit7CisgICAgR1JlZlB0cjxKU0NWaXJ0dWFsTWFjaGluZT4gdm0gPSB3cmFwcGVyTWFwKCku
Z2V0KGpzQ29udGV4dEdyb3VwKTsKKyAgICBpZiAoIXZtKSB7CisgICAgICAgIHZtID0gYWRvcHRH
UmVmKGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkpOworICAgICAgICBqc2NWaXJ0dWFsTWFjaGlu
ZVNldENvbnRleHRHcm91cCh2bS5nZXQoKSwganNDb250ZXh0R3JvdXApOworICAgIH0KKyAgICBy
ZXR1cm4gdm07Cit9CisKK0pTQ29udGV4dEdyb3VwUmVmIGpzY1ZpcnR1YWxNYWNoaW5lR2V0Q29u
dGV4dEdyb3VwKEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSkKK3sKKyAgICBqc2NWaXJ0dWFsTWFjaGlu
ZUVuc3VyZUNvbnRleHRHcm91cCh2bSk7CisgICAgcmV0dXJuIHZtLT5wcml2LT5qc0NvbnRleHRH
cm91cDsKK30KKwordm9pZCBqc2NWaXJ0dWFsTWFjaGluZUFkZENvbnRleHQoSlNDVmlydHVhbE1h
Y2hpbmUqIHZtLCBKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHZt
LT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgYXV0byBqc0NvbnRleHQgPSBqc2NDb250ZXh0
R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ29udGV4dEdldEdy
b3VwKGpzQ29udGV4dCkgPT0gdm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghdm0tPnByaXYtPmNvbnRleHRDYWNoZS5jb250YWlucyhqc0NvbnRleHQpKTsKKyAg
ICB2bS0+cHJpdi0+Y29udGV4dENhY2hlLnNldChqc0NvbnRleHQsIGNvbnRleHQpOworfQorCit2
b2lkIGpzY1ZpcnR1YWxNYWNoaW5lUmVtb3ZlQ29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSogdm0s
IEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodm0tPnByaXYtPmpz
Q29udGV4dEdyb3VwKTsKKyAgICBhdXRvIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRl
eHQoY29udGV4dCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDb250ZXh0R2V0R3JvdXAoanNDb250
ZXh0KSA9PSB2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgIFJFTEVBU0VfQVNTRVJUKHZt
LT5wcml2LT5jb250ZXh0Q2FjaGUuY29udGFpbnMoanNDb250ZXh0KSk7CisgICAgdm0tPnByaXYt
PmNvbnRleHRDYWNoZS5yZW1vdmUoanNDb250ZXh0KTsKK30KKworSlNDQ29udGV4dCoganNjVmly
dHVhbE1hY2hpbmVHZXRDb250ZXh0KEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSwgSlNHbG9iYWxDb250
ZXh0UmVmIGpzQ29udGV4dCkKK3sKKyAgICByZXR1cm4gdm0tPnByaXYtPmNvbnRleHRDYWNoZS5n
ZXQoanNDb250ZXh0KTsKK30KKworSlNDVmlydHVhbE1hY2hpbmUqIGpzY192aXJ0dWFsX21hY2hp
bmVfbmV3KCkKK3sKKyAgICByZXR1cm4gSlNDX1ZJUlRVQUxfTUFDSElORShnX29iamVjdF9uZXco
SlNDX1RZUEVfVklSVFVBTF9NQUNISU5FLCBudWxscHRyKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNWM2NDNlMDliMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgSlNDVmlydHVhbE1hY2hpbmVfaAorI2RlZmluZSBKU0NWaXJ0dWFsTWFjaGlu
ZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVz
Lmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUgICAgICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGlu
ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5FKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1ZJUlRVQUxfTUFD
SElORSwgSlNDVmlydHVhbE1hY2hpbmUpKQorI2RlZmluZSBKU0NfSVNfVklSVFVBTF9NQUNISU5F
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBF
X1ZJUlRVQUxfTUFDSElORSkpCisjZGVmaW5lIEpTQ19WSVJUVUFMX01BQ0hJTkVfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVklSVFVB
TF9NQUNISU5FLCBKU0NWaXJ0dWFsTWFjaGluZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZJUlRV
QUxfTUFDSElORV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBKU0NfVFlQRV9WSVJUVUFMX01BQ0hJTkUpKQorI2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5F
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19U
WVBFX1ZJUlRVQUxfTUFDSElORSwgSlNDVmlydHVhbE1hY2hpbmVDbGFzcykpCisKK3R5cGVkZWYg
c3RydWN0IF9KU0NWaXJ0dWFsTWFjaGluZSBKU0NWaXJ0dWFsTWFjaGluZTsKK3R5cGVkZWYgc3Ry
dWN0IF9KU0NWaXJ0dWFsTWFjaGluZUNsYXNzIEpTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3M7Cit0eXBl
ZGVmIHN0cnVjdCBfSlNDVmlydHVhbE1hY2hpbmVQcml2YXRlIEpTQ1ZpcnR1YWxNYWNoaW5lUHJp
dmF0ZTsKKworc3RydWN0IF9KU0NWaXJ0dWFsTWFjaGluZSB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBKU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUgKnBy
aXY7Cit9OworCitzdHJ1Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNl
cnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsKK307CisK
K0pTQ19BUEkgR1R5cGUKK2pzY192aXJ0dWFsX21hY2hpbmVfZ2V0X3R5cGUgKHZvaWQpOworCitK
U0NfQVBJIEpTQ1ZpcnR1YWxNYWNoaW5lICoKK2pzY192aXJ0dWFsX21hY2hpbmVfbmV3ICAgICAg
KHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogSlNDVmlydHVhbE1hY2hpbmVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxN
YWNoaW5lUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1
YWxNYWNoaW5lUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li44ZmM5ZTcwNzA0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNDQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCitHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiBqc2NW
aXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKEpTQ29udGV4dEdyb3VwUmVmKTsKK0pTQ29udGV4dEdy
b3VwUmVmIGpzY1ZpcnR1YWxNYWNoaW5lR2V0Q29udGV4dEdyb3VwKEpTQ1ZpcnR1YWxNYWNoaW5l
Kik7Cit2b2lkIGpzY1ZpcnR1YWxNYWNoaW5lQWRkQ29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSos
IEpTQ0NvbnRleHQqKTsKK3ZvaWQganNjVmlydHVhbE1hY2hpbmVSZW1vdmVDb250ZXh0KEpTQ1Zp
cnR1YWxNYWNoaW5lKiwgSlNDQ29udGV4dCopOworSlNDQ29udGV4dCoganNjVmlydHVhbE1hY2hp
bmVHZXRDb250ZXh0KEpTQ1ZpcnR1YWxNYWNoaW5lKiwgSlNHbG9iYWxDb250ZXh0UmVmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjdiNjVkYzVjMzUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5j
cHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ1dyYXBwZXJNYXAuaCIKKworI2lu
Y2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKKyNpbmNs
dWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ0dMaWJXcmFwcGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmpl
Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1dyYXBwZXJNYXA6OldyYXBwZXJNYXAoSlNHbG9i
YWxDb250ZXh0UmVmIGpzQ29udGV4dCkKKyAgICA6IG1fY2FjaGVkSlNXcmFwcGVycyhzdGQ6Om1h
a2VfdW5pcXVlPEpTQzo6V2Vha0dDTWFwPGdwb2ludGVyLCBKU0M6OkpTT2JqZWN0Pj4odG9KUyhq
c0NvbnRleHQpLT52bSgpKSkKK3sKK30KKworV3JhcHBlck1hcDo6fldyYXBwZXJNYXAoKQorewor
ICAgIGZvciAoY29uc3QgYXV0byYganNjQ2xhc3MgOiBtX2NsYXNzTWFwLnZhbHVlcygpKQorICAg
ICAgICBqc2NDbGFzc0ludmFsaWRhdGUoanNjQ2xhc3MuZ2V0KCkpOworfQorCitHUmVmUHRyPEpT
Q1ZhbHVlPiBXcmFwcGVyTWFwOjpnb2JqZWN0V3JhcHBlcihKU0NDb250ZXh0KiBqc2NDb250ZXh0
LCBKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4
dEdldEpTQ29udGV4dChqc2NDb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhqc0NvbnRleHQpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0b0pTR2xvYmFsT2JqZWN0KGpz
Q29udGV4dCktPndyYXBwZXJNYXAoKSA9PSB0aGlzKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2
YWx1ZSA9IG1fY2FjaGVkR09iamVjdFdyYXBwZXJzLmdldChqc1ZhbHVlKTsKKyAgICBpZiAoIXZh
bHVlKSB7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY1ZhbHVlQ3JlYXRlKGpzY0NvbnRl
eHQsIGpzVmFsdWUpKTsKKyAgICAgICAgbV9jYWNoZWRHT2JqZWN0V3JhcHBlcnMuc2V0KGpzVmFs
dWUsIHZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIFdy
YXBwZXJNYXA6OnVud3JhcChKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9jYWNoZWRHT2JqZWN0V3JhcHBlcnMuY29udGFpbnMoanNWYWx1ZSkpOworICAgIG1fY2Fj
aGVkR09iamVjdFdyYXBwZXJzLnJlbW92ZShqc1ZhbHVlKTsKK30KKwordm9pZCBXcmFwcGVyTWFw
OjpyZWdpc3RlckNsYXNzKEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBhdXRvKiBqc0NsYXNz
ID0ganNjQ2xhc3NHZXRKU0NsYXNzKGpzY0NsYXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9j
bGFzc01hcC5jb250YWlucyhqc0NsYXNzKSk7CisgICAgbV9jbGFzc01hcC5zZXQoanNDbGFzcywg
anNjQ2xhc3MpOworfQorCitKU09iamVjdCogV3JhcHBlck1hcDo6Y3JlYXRlSlNXcmFwcHBlcihK
U0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0LCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTVmFsdWVS
ZWYgcHJvdG90eXBlLCBncG9pbnRlciB3cmFwcGVkT2JqZWN0LCBHRGVzdHJveU5vdGlmeSBkZXN0
cm95RnVuY3Rpb24pCit7CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0Nv
bnRleHQpLT53cmFwcGVyTWFwKCkgPT0gdGhpcyk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhqc0NvbnRleHQpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bSk7CisgICAgYXV0byogb2JqZWN0ID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpT
Qzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbGliV3JhcHBlck9iamVjdFN0
cnVjdHVyZSgpLCBqc0NsYXNzLCBudWxscHRyKTsKKyAgICBpZiAod3JhcHBlZE9iamVjdCkgewor
ICAgICAgICBvYmplY3QtPnNldFdyYXBwZWRPYmplY3QobmV3IEpTQzo6SlNDR0xpYldyYXBwZXJP
YmplY3Qod3JhcHBlZE9iamVjdCwgZGVzdHJveUZ1bmN0aW9uKSk7CisgICAgICAgIG1fY2FjaGVk
SlNXcmFwcGVycy0+c2V0KHdyYXBwZWRPYmplY3QsIG9iamVjdCk7CisgICAgfQorICAgIGlmIChw
cm90b3R5cGUpCisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzQ29udGV4dCwgdG9SZWYo
b2JqZWN0KSwgcHJvdG90eXBlKTsKKyAgICBlbHNlIGlmIChhdXRvKiBqc1Byb3RvdHlwZSA9IGpz
Q2xhc3MtPnByb3RvdHlwZShleGVjKSkKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGVEaXJl
Y3Qodm0sIGpzUHJvdG90eXBlKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitKU09iamVjdCog
V3JhcHBlck1hcDo6anNXcmFwcGVyKGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0Cit7Cisg
ICAgaWYgKCF3cmFwcGVkT2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbV9jYWNoZWRKU1dyYXBwZXJzLT5nZXQod3JhcHBlZE9iamVjdCk7Cit9CisKK2dwb2ludGVy
IFdyYXBwZXJNYXA6OndyYXBwZWRPYmplY3QoSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCwg
SlNPYmplY3RSZWYganNPYmplY3QpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0ds
b2JhbE9iamVjdChqc0NvbnRleHQpLT53cmFwcGVyTWFwKCkgPT0gdGhpcyk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih0b0pTKGpzQ29udGV4dCkpOworICAgIFZNJiB2bSA9IHRvSlMoanNDb250
ZXh0KS0+dm0oKTsKKyAgICBhdXRvKiBvYmplY3QgPSB0b0pTKGpzT2JqZWN0KTsKKyAgICBpZiAo
b2JqZWN0LT5pbmhlcml0cyh2bSwgSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFw
cGVyT2JqZWN0Pjo6aW5mbygpKSkgeworICAgICAgICBpZiAoYXV0byogd3JhcHBlciA9IEpTQzo6
anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4ob2JqZWN0KS0+d3JhcHBlZE9iamVjdCgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQzo6SlNDR0xpYldyYXBwZXJPYmpl
Y3QqPih3cmFwcGVyKS0+b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDV3JhcHBlck1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42
OGJmODI2Nzc5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
Z2xpYi9KU0NXcmFwcGVyTWFwLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQmFzZS5oIgor
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0Ns
YXNzIEpTQ0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgSlNDQ29udGV4dDsKK3R5
cGVkZWYgc3RydWN0IF9KU0NWYWx1ZSBKU0NWYWx1ZTsKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTT2JqZWN0OworCitjbGFzcyBXcmFwcGVyTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXcmFwcGVyTWFwKEpTR2xvYmFsQ29udGV4
dFJlZik7CisgICAgfldyYXBwZXJNYXAoKTsKKworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGdvYmpl
Y3RXcmFwcGVyKEpTQ0NvbnRleHQqLCBKU1ZhbHVlUmVmKTsKKyAgICB2b2lkIHVud3JhcChKU1Zh
bHVlUmVmKTsKKworICAgIHZvaWQgcmVnaXN0ZXJDbGFzcyhKU0NDbGFzcyopOworCisgICAgSlNP
YmplY3QqIGNyZWF0ZUpTV3JhcHBwZXIoSlNHbG9iYWxDb250ZXh0UmVmLCBKU0NsYXNzUmVmLCBK
U1ZhbHVlUmVmIHByb3RvdHlwZSwgZ3BvaW50ZXIsIEdEZXN0cm95Tm90aWZ5KTsKKyAgICBKU09i
amVjdCoganNXcmFwcGVyKGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0OworICAgIGdwb2lu
dGVyIHdyYXBwZWRPYmplY3QoSlNHbG9iYWxDb250ZXh0UmVmLCBKU09iamVjdFJlZikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxKU1ZhbHVlUmVmLCBKU0NWYWx1ZSo+IG1fY2FjaGVk
R09iamVjdFdyYXBwZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OldlYWtHQ01hcDxncG9p
bnRlciwgSlNDOjpKU09iamVjdD4+IG1fY2FjaGVkSlNXcmFwcGVyczsKKyAgICBIYXNoTWFwPEpT
Q2xhc3NSZWYsIEdSZWZQdHI8SlNDQ2xhc3M+PiBtX2NsYXNzTWFwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNj
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvanNjLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRkMWFlZDZlMjkwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0pTQ19IX18KKyNk
ZWZpbmUgX19KU0NfSF9fCisKKyNkZWZpbmUgX19KU0NfSF9JTlNJREVfXworCisjaW5jbHVkZSA8
anNjL0pTQ0NsYXNzLmg+CisjaW5jbHVkZSA8anNjL0pTQ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxq
c2MvSlNDRGVmaW5lcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NFeGNlcHRpb24uaD4KKyNpbmNsdWRl
IDxqc2MvSlNDVmFsdWUuaD4KKyNpbmNsdWRlIDxqc2MvSlNDVmVyc2lvbi5oPgorI2luY2x1ZGUg
PGpzYy9KU0NWaXJ0dWFsTWFjaGluZS5oPgorCisjdW5kZWYgX19KU0NfSF9JTlNJREVfXworCisj
ZW5kaWYgLyogX19KU0NfSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggMDQxOTUwMDkwYTQuLjIzOWEwZTFiYWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMjA5LDcgKzEyMDksNyBAQCBlbmRpZiAoKQogIyBGb3JjZSBzdGFnaW5nIG9m
IHNoYXJlZCBzY3JpcHRzLCBldmVuIGlmIHRoZXkgYXJlbid0IGRpcmVjdGx5IHVzZWQgdG8gYnVp
bGQgSmF2YVNjcmlwdENvcmUuCiAKIGFkZF9jdXN0b21fdGFyZ2V0KHN0YWdlU2hhcmVkU2NyaXB0
cyBERVBFTkRTICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU30pCi1hZGRfZGVwZW5kZW5jaWVzKEph
dmFTY3JpcHRDb3JlIHN0YWdlU2hhcmVkU2NyaXB0cykKK2FkZF9kZXBlbmRlbmNpZXMoSmF2YVNj
cmlwdENvcmUgc3RhZ2VTaGFyZWRTY3JpcHRzICR7SmF2YVNjcmlwdENvcmVfRVhUUkFfREVQRU5E
RU5DSUVTfSkKIAogaWYgKE1TVkMpCiAgICAgYWRkX2N1c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDZmMDk1NmM1MzIxLi42Yjc3ZmM5NjEz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwxMCArMSwy
OSBAQAogc2V0KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIGphdmFzY3JpcHRjb3JlZ3RrLSR7
V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSkKIAorZmlsZShNQUtFX0RJUkVDVE9SWSAke0ZPUldBUkRJ
TkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIpCitmaWxlKE1BS0VfRElSRUNUT1JZ
ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUENPUkVHVEtfQVBJX0RJUn0pCisKK2xpc3QoQVBQ
RU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKKyAgICBBUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmpl
Y3RHTGliLmNwcAorICAgIEFQSS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwCisgICAgQVBJ
L2dsaWIvSlNDQ2xhc3MuY3BwCisgICAgQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAKKyAgICBBUEkv
Z2xpYi9KU0NFeGNlcHRpb24uY3BwCisgICAgQVBJL2dsaWIvSlNDVmFsdWUuY3BwCisgICAgQVBJ
L2dsaWIvSlNDVmVyc2lvbi5jcHAKKyAgICBBUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAK
KyAgICBBUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcAorKQorCiBsaXN0KEFQUEVORCBKYXZhU2Ny
aXB0Q29yZV9VTklGSUVEX1NPVVJDRV9MSVNUX0ZJTEVTCiAgICAgIlNvdXJjZXNHVEsudHh0Igog
KQogCiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKKyAgICAiJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliIgor
ICAgICIke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFR1RLX0FQSV9ESVJ9IgorICAgICIk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFR1RLX0RJUn0iCisgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9BUEkvZ2xpYiIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rv
ci9yZW1vdGUvZ2xpYiIKICkKIApAQCAtMTMsOCArMzIsMjAgQEAgbGlzdChBUFBFTkQgSmF2YVNj
cmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGluc3BlY3Rvci9yZW1vdGUv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JVdGlscy5oCiApCiAKK3NldChKYXZhU2NyaXB0Q29yZV9JTlNU
QUxMRURfSEVBREVSUworICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUENPUkVHVEtfQVBJ
X0RJUn0vSlNDVmVyc2lvbi5oCisgICAgQVBJL2dsaWIvSlNDQ2xhc3MuaAorICAgIEFQSS9nbGli
L0pTQ0NvbnRleHQuaAorICAgIEFQSS9nbGliL0pTQ0RlZmluZXMuaAorICAgIEFQSS9nbGliL0pT
Q0V4Y2VwdGlvbi5oCisgICAgQVBJL2dsaWIvSlNDVmFsdWUuaAorICAgIEFQSS9nbGliL0pTQ1Zp
cnR1YWxNYWNoaW5lLmgKKyAgICBBUEkvZ2xpYi9qc2MuaAorKQorCiBjb25maWd1cmVfZmlsZShq
YXZhc2NyaXB0Y29yZWd0ay5wYy5pbiAke0NNQUtFX0JJTkFSWV9ESVJ9L1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0ucGMgQE9O
TFkpCiBjb25maWd1cmVfZmlsZShKYXZhU2NyaXB0Q29yZS5naXIuaW4gJHtDTUFLRV9CSU5BUllf
RElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyIEBPTkxZKQor
Y29uZmlndXJlX2ZpbGUoQVBJL2dsaWIvSlNDVmVyc2lvbi5oLmluICR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUENPUkVHVEtfQVBJX0RJUn0vSlNDVmVyc2lvbi5oKQogCiBhZGRfY3VzdG9tX2Nv
bW1hbmQoCiAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtX
RUJLSVRHVEtfQVBJX1ZFUlNJT059LnR5cGVsaWIKQEAgLTMyLDYgKzYzLDEwIEBAIGluc3RhbGwo
RklMRVMgJHtKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlN9CiAgICAgICAg
IERFU1RJTkFUSU9OICIke1dFQktJVEdUS19IRUFERVJfSU5TVEFMTF9ESVJ9L0phdmFTY3JpcHRD
b3JlIgogKQogCitpbnN0YWxsKEZJTEVTICR7SmF2YVNjcmlwdENvcmVfSU5TVEFMTEVEX0hFQURF
UlN9CisgICAgICAgIERFU1RJTkFUSU9OICIke1dFQktJVEdUS19IRUFERVJfSU5TVEFMTF9ESVJ9
L2pzYyIKKykKKwogaWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQogICAgIGluc3RhbGwoRklMRVMg
JHtDTUFLRV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lP
Tn0uZ2lyCiAgICAgICAgICAgICBERVNUSU5BVElPTiAke0lOVFJPU1BFQ1RJT05fSU5TVEFMTF9H
SVJESVJ9CkBAIC00Myw2ICs3OCw3IEBAIGVuZGlmICgpCiAKIGFkZF9kZWZpbml0aW9ucygtRFNU
QVRJQ0FMTFlfTElOS0VEX1dJVEhfV1RGKQogYWRkX2RlZmluaXRpb25zKC1ETElCRElSPSIke0xJ
Ql9JTlNUQUxMX0RJUn0iKQorYWRkX2RlZmluaXRpb25zKC1ESlNDX0NPTVBJTEFUSU9OKQogCiBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKICAgICAke0dMSUJfTElCUkFSSUVT
fQpAQCAtNTAsMyArODYsMTYgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVT
CiBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CiApCisKKyMgVGhlc2Ugc3ltYm9saWMgbGluayBhbGxv
d3MgaW5jbHVkZXMgbGlrZSAjaW5jbHVkZSA8anNjL0pTQ0NvbnRleHQuaD4gd2hpY2ggc2ltdWxh
dGVzIGluc3RhbGxlZCBoZWFkZXJzLgorYWRkX2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAk
e0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIvanNjCisgICAgREVQ
RU5EUyAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIKKyAgICBDT01NQU5EIGxuIC1uIC1z
IC1mICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYiAke0ZPUldBUkRJTkdfSEVBREVSU19E
SVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIvanNjCispCithZGRfY3VzdG9tX3RhcmdldChKU0MtZmFr
ZS1hcGktaGVhZGVycworICAgIERFUEVORFMgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZh
U2NyaXB0Q29yZS9nbGliL2pzYworKQorc2V0KEphdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVO
Q0lFUworICAgIEpTQy1mYWtlLWFwaS1oZWFkZXJzCispCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCmluZGV4IGE1M2E0NDY5MDg2Li45ZWVjNGMyMDg0YiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKQEAgLTk4LDYgKzk4LDEwIEBAIGV4dGVybiAiQyIgdm9pZCBvYmpjX2F1
dG9yZWxlYXNlUG9vbFBvcCh2b2lkICpjb250ZXh0KTsKICNlbmRpZgogI2VuZGlmIC8vIFVTRShG
T1VOREFUSU9OKQogCisjaWYgVVNFKEdMSUIpCisjaW5jbHVkZSAiSlNDR0xpYldyYXBwZXJPYmpl
Y3QuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTQ2MSw3ICs0NjUsNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIAog
dm9pZCBIZWFwOjpyZWxlYXNlRGVsYXllZFJlbGVhc2VkT2JqZWN0cygpCiB7Ci0jaWYgVVNFKEZP
VU5EQVRJT04pCisjaWYgVVNFKEZPVU5EQVRJT04pIHx8IFVTRShHTElCKQogICAgIC8vIFdlIG5l
ZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgY2FzZSB0aGF0IHJlbGVhc2luZyBhbiBvYmplY3QgY2Fu
IGNyZWF0ZSBtb3JlIG9iamVjdHMgZHVlIHRvIHRoZQogICAgIC8vIHJlbGVhc2UgY2FsbGluZyBp
bnRvIEpTLiBXaGVuIHRob3NlIEpTIGNhbGwocykgZXhpdCBhbmQgYWxsIGxvY2tzIGFyZSBiZWlu
ZyBkcm9wcGVkIHdlIGVuZCB1cAogICAgIC8vIGJhY2sgaGVyZSBhbmQgY291bGQgdHJ5IHRvIHJl
Y3Vyc2l2ZWx5IHJlbGVhc2Ugb2JqZWN0cy4gV2UgZ3VhcmQgdGhhdCB3aXRoIGEgcmVjdXJzaXZl
IGVudHJ5CkBAIC00NzMsMTUgKzQ3NywxOSBAQCB2b2lkIEhlYXA6OnJlbGVhc2VEZWxheWVkUmVs
ZWFzZWRPYmplY3RzKCkKICAgICAgICAgd2hpbGUgKCFtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3ZtLT5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFJldGFpblB0cjxDRlR5cGVSZWY+
PiBvYmplY3RzVG9SZWxlYXNlID0gV1RGTW92ZShtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cyk7Cisg
ICAgICAgICAgICBhdXRvIG9iamVjdHNUb1JlbGVhc2UgPSBXVEZNb3ZlKG1fZGVsYXllZFJlbGVh
c2VPYmplY3RzKTsKIAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gZHJvcCBsb2NrcyBiZWZvcmUgY2FsbGluZyBvdXQgdG8gYXJiaXRyYXJ5IGNvZGUuCiAgICAg
ICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKG1fdm0pOwogCisj
aWYgVVNFKEZPVU5EQVRJT04pCiAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCA9IG9iamNf
YXV0b3JlbGVhc2VQb29sUHVzaCgpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgb2JqZWN0c1Rv
UmVsZWFzZS5jbGVhcigpOworI2lmIFVTRShGT1VOREFUSU9OKQogICAgICAgICAgICAgICAgIG9i
amNfYXV0b3JlbGVhc2VQb29sUG9wKGNvbnRleHQpOworI2VuZGlmCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggNWI1MWRhNWVl
NmMuLmYyYTA3MTJiMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC04OSw2ICs4
OSwxMCBAQCBjbGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRo
cmVhZFN0YXRlOwogCisjaWYgVVNFKEdMSUIpCitjbGFzcyBKU0NHTGliV3JhcHBlck9iamVjdDsK
KyNlbmRpZgorCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3Mg
V29ya2xpc3Q7CkBAIC0yNzIsNiArMjc2LDkgQEAgcHVibGljOgogI2lmIFVTRShGT1VOREFUSU9O
KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+
JiYpOwogI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgdm9pZCByZWxlYXNlU29vbihzdGQ6OnVu
aXF1ZV9wdHI8SlNDR0xpYldyYXBwZXJPYmplY3Q+JiYpOworI2VuZGlmCiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDTWFwKFdlYWtHQ01hcEJhc2UqIHdlYWtHQ01h
cCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bnJlZ2lzdGVyV2Vha0dDTWFwKFdlYWtH
Q01hcEJhc2UqIHdlYWtHQ01hcCk7CkBAIC02NDIsNiArNjQ5LDEwIEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPFJldGFpblB0cjxDRlR5cGVSZWY+PiBtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0czsKICAg
ICB1bnNpZ25lZCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQ7CiAjZW5kaWYKKyNpZiBV
U0UoR0xJQikKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEpTQ0dMaWJXcmFwcGVyT2JqZWN0
Pj4gbV9kZWxheWVkUmVsZWFzZU9iamVjdHM7CisgICAgdW5zaWduZWQgbV9kZWxheWVkUmVsZWFz
ZVJlY3Vyc2lvbkNvdW50IHsgMCB9OworI2VuZGlmCiAKICAgICBIYXNoU2V0PFdlYWtHQ01hcEJh
c2UqPiBtX3dlYWtHQ01hcHM7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAppbmRleCBlNTYxYzk2NTM3MC4uMGExZGIyOWQ0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcElubGluZXMuaApAQCAtMTY3LDYgKzE2NywxMyBAQCBpbmxpbmUgdm9p
ZCBIZWFwOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJiBvYmplY3QpCiB9CiAjZW5kaWYKIAor
I2lmIFVTRShHTElCKQoraW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oc3RkOjp1bmlxdWVf
cHRyPEpTQ0dMaWJXcmFwcGVyT2JqZWN0PiYmIG9iamVjdCkKK3sKKyAgICBtX2RlbGF5ZWRSZWxl
YXNlT2JqZWN0cy5hcHBlbmQoV1RGTW92ZShvYmplY3QpKTsKK30KKyNlbmRpZgorCiBpbmxpbmUg
dm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKICAgICBBU1NFUlQoIW1heUJl
R0NUaHJlYWQoKSB8fCBtX3dvcmxkSXNTdG9wcGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAwMWUxYmNiZTJkYS4uOGY4NDBj
YzQ3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKQEAgLTE4NSw2ICsxODUsMTEgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuaCIKICNlbmRpZgogCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJM
RUQKKyNpbmNsdWRlICJKU0NDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDV3JhcHBl
ck1hcC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgc3RhdGljIEpTVmFsdWUg
Y3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCkBAIC01NjcsNyAr
NTcyLDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgICAgICAgICAg
aW5pdC5zZXQoSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1
Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKTsKICAgICAgICAgfSk7CiAjZW5kaWYKLSAgICAKKyNpZmRlZiBKU0NfR0xJQl9BUElf
RU5BQkxFRAorICAgIG1fZ2xpYkNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAor
ICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAg
ICAgICAgaW5pdC5zZXQoSlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQu
dm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICAgICAgfSk7CisgICAgbV9nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZS5pbml0TGF0ZXIo
CisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAg
ICAgICAgICBpbml0LnNldChKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBpbml0Lm93bmVyLT5tX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKKyNlbmRpZgogICAgIG1fYXJyYXlQcm90b3R5
cGUuc2V0KHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBBcnJheVBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpKTsKICAgICAKICAgICBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBl
W1VuZGVjaWRlZFNoYXBlID4+IEluZGV4aW5nU2hhcGVTaGlmdF0uc2V0KHZtLCB0aGlzLCBKU0Fy
cmF5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFy
cmF5V2l0aFVuZGVjaWRlZCkpOwpAQCAtMTM4MCw2ICsxMzk0LDEwIEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
ICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIHRoaXNPYmplY3QtPm1fb2JqY0NhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9vYmpj
V3JhcHBlck9iamVjdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyNlbmRpZgorI2lmZGVmIEpT
Q19HTElCX0FQSV9FTkFCTEVECisgICAgdGhpc09iamVjdC0+bV9nbGliQ2FsbGJhY2tGdW5jdGlv
blN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2dsaWJXcmFwcGVy
T2JqZWN0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogI2VuZGlmCiAgICAgdGhpc09iamVjdC0+
bV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXJyb3JTdHJ1Y3R1cmUpOwpAQCAtMTYxMiw0ICsxNjMw
LDExIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmpl
Y3QqIHRoaXNWYWx1ZSkKICAgICBBU1NFUlQodHlwZSgpID09IEdsb2JhbE9iamVjdFR5cGUpOwog
fQogCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnNl
dFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+JiYgbWFwKQoreworICAgIG1f
d3JhcHBlck1hcCA9IFdURk1vdmUobWFwKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmlu
ZGV4IDRmYTBhZjQwNmNkLi5jNmUyOTdmMDM4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0xMTYsNiArMTE2LDEwIEBAIGNsYXNzIFZh
cmlhYmxlRW52aXJvbm1lbnQ7CiBzdHJ1Y3QgQWN0aXZhdGlvblN0YWNrTm9kZTsKIHN0cnVjdCBI
YXNoVGFibGU7CiAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorY2xhc3MgV3JhcHBlck1h
cDsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50PiBjbGFzcyBPYmplY3RQ
cm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDsKIAogI2RlZmluZSBERUZJTkVfU1RBTkRB
UkRfQlVJTFRJTihtYWNybywgdXBwZXJOYW1lLCBsb3dlck5hbWUpIG1hY3JvKHVwcGVyTmFtZSwg
bG93ZXJOYW1lLCBsb3dlck5hbWUsIEpTICMjIHVwcGVyTmFtZSwgdXBwZXJOYW1lLCBvYmplY3Qp
CkBAIC0zMjQsNiArMzI4LDEwIEBAIHB1YmxpYzoKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAog
ICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX29iamNDYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlOworI2VuZGlmCisjaWZkZWYgSlND
X0dMSUJfQVBJX0VOQUJMRUQKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVj
dHVyZT4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8
SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZTsK
ICNlbmRpZgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX251
bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9jYWxsZWVTdHJ1Y3R1cmU7CkBAIC02MzUsNiArNjQzLDEwIEBAIHB1YmxpYzoKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogICAgIFN0cnVjdHVyZSogb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdl
dCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlLmdldCh0aGlzKTsgfQor
I2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBTdHJ1Y3R1cmUqIGdsaWJD
YWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9nbGliQ2FsbGJhY2tG
dW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KKyAgICBTdHJ1Y3R1cmUqIGdsaWJXcmFwcGVy
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9nbGliV3JhcHBlck9iamVjdFN0cnVj
dHVyZS5nZXQodGhpcyk7IH0KICNlbmRpZgogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0ZVN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1
cmUqIG51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX251bGxQ
cm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CkBAIC04ODgsNyArOTAwLDExIEBA
IHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25zdCB7IHJldHVybiBt
X3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNldFdyYXBwZXJNYXAoSlNXcmFwcGVyTWFw
KiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYKLSAgICAKKyNpZmRlZiBKU0Nf
R0xJQl9BUElfRU5BQkxFRAorICAgIFdyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25zdCB7IHJl
dHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFdyYXBwZXJNYXAoc3RkOjp1
bmlxdWVfcHRyPFdyYXBwZXJNYXA+JiYpOworI2VuZGlmCisKICAgICBUaHJlYWRMb2NhbENhY2hl
JiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZS5n
ZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC05MjEsNyArOTM3LDkgQEAgcHJpdmF0ZToKICNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFJldGFpblB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBl
ck1hcDsKICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKKyNlbmRpZgogICAgIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2FsQ2FjaGU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RL
LmNtYWtlCmluZGV4IDY4NGNkMGIwZTM1Li5hOTBlNDFlMTZkYSAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21h
a2UKQEAgLTE2Nyw2ICsxNjcsNyBAQCBhZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19HVEtfXz0x
KQogYWRkX2RlZmluaXRpb25zKC1ER0VUVEVYVF9QQUNLQUdFPSJXZWJLaXQyR1RLLSR7V0VCS0lU
R1RLX0FQSV9WRVJTSU9OfSIpCiBhZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJUj0iJHtDTUFLRV9J
TlNUQUxMX0RBVEFESVJ9IikKIGFkZF9kZWZpbml0aW9ucygtRFdFQktJVEdUS19BUElfVkVSU0lP
Tl9TVFJJTkc9IiR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCithZGRfZGVmaW5pdGlvbnMoLURK
U0NfR0xJQl9BUElfRU5BQkxFRCkKIAogc2V0KEdUS19MSUJSQVJJRVMgJHtHVEszX0xJQlJBUklF
U30pCiBzZXQoR1RLX0lOQ0xVREVfRElSUyAke0dUSzNfSU5DTFVERV9ESVJTfSkKQEAgLTM2Nyw2
ICszNjgsOCBAQCBzZXQoREVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19ESVIgJHtERVJJVkVEX1NP
VVJDRVNfRElSfS93ZWJraXRndGspCiBzZXQoREVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19BUElf
RElSICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19ESVJ9L3dlYmtpdCkKIHNldChERVJJVkVE
X1NPVVJDRVNfV0VCS0lUMkdUS19ESVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS93ZWJraXQyZ3Rr
KQogc2V0KERFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0FQSV9ESVIgJHtERVJJVkVEX1NPVVJD
RVNfV0VCS0lUMkdUS19ESVJ9L3dlYmtpdDIpCitzZXQoREVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJ
UENPUkVHVEtfRElSICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vamF2YXNj
cmlwdGNvcmVndGspCitzZXQoREVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUENPUkVHVEtfQVBJX0RJ
UiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2phdmFzY3JpcHRjb3JlZ3Rr
L2pzYykKIHNldChGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVIgJHtGT1JXQVJESU5H
X0hFQURFUlNfRElSfS93ZWJraXQyZ3RrKQogc2V0KEZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQy
R1RLX0VYVEVOU0lPTl9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS93ZWJraXQyZ3RrLXdl
YmV4dGVuc2lvbikKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4
IDliNDM4NzliODQxLi4zNTY4NmQxOGNmNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQpAQCAtMTUxLDYgKzE1MSw3IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsK
ICAgICAoWwogICAgICAgIyBUaGUgR1RLKyBhbmQgV1BFIEFQSXMgdXNlIHVwcGVyIGNhc2UsIHVu
ZGVyc2NvcmUgc2VwYXJhdGVkLCB3b3JkcyBpbgogICAgICAgIyBjZXJ0YWluIHR5cGVzIG9mIGVu
dW1zIChlLmcuIHNpZ25hbHMsIHByb3BlcnRpZXMpLgorICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSwKICAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYktpdCcsICdTaGFyZWQnLCAnQVBJJywgJ2dsaWInKSwKICAgICAgIG9z
LnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2dsaWIn
KSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAn
QVBJJywgJ2d0aycpLApAQCAtMzM0LDcgKzMzNSw4IEBAIF9ORVZFUl9TS0lQUEVEX0ZJTEVTID0g
X05FVkVSX1NLSVBQRURfSlNfRklMRVMgKyBbCiBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcg
PSBbCiAgICAgb3MucGF0aC5qb2luKCdUb29scycsICdUZXN0V2ViS2l0QVBJJywgJ1Rlc3RzJywg
J1dlYktpdEd0aycpLAogCi0gICAgIyBXZWJLaXQqLmggZmlsZXMgaW4gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL1tndGt8d3BlXSwgZXhjZXB0IHRob3NlIGVuZGluZyBpbiBQcml2YXRlLmgg
YXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBub3QgZm9sbG93IFdlYktpdCBjb2Rpbmcgc3R5bGUu
CisgICAgIyBXZWJLaXQqLmggYW5kIEpTQyouaCBmaWxlcyBpbiwgZXhjZXB0IHRob3NlIGVuZGlu
ZyBpbiBQcml2YXRlLmggYXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBub3QgZm9sbG93IFdlYktp
dCBjb2Rpbmcgc3R5bGUuCisgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSArIG9zLnBhdGguc2VwKSAr
IHInSlNDKD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAogICAgIHJlLmNvbXBpbGUocmUuZXNjYXBl
KG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0
aycpICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCiAg
ICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0Jywg
J1VJUHJvY2VzcycsICdBUEknLCAnd3BlJykgKyBvcy5wYXRoLnNlcCkgKyByJ1dlYktpdCg/IS4q
UHJpdmF0ZVwuaCkuKlwuaCQnKSwKICAgICByZS5jb21waWxlKHJlLmVzY2FwZShvcy5wYXRoLmpv
aW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdB
UEknLCAnZ3RrJykgKyBvcy5wYXRoLnNlcCkgKyByJ1dlYktpdCg/IS4qUHJpdmF0ZVwuaCkuKlwu
aCQnKSwKQEAgLTM0Myw2ICszNDUsNyBAQCBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBb
CiAgICAgIyBHT2JqZWN0IERPTSBiaW5kaW5ncyBjb3BpZWQgZnJvbSBnZW5lcmF0ZWQgY29kZSB1
c2luZyBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgogICAgIG9zLnBhdGguam9pbignU291cmNlJywg
J1dlYktpdCcsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAn
RE9NJyksCiAKKyAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZhU2NyaXB0Q29yZScsICdB
UEknLCAnZ2xpYicsICdqc2MuaCcpLAogICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktp
dCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwKICAgICBvcy5wYXRo
LmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICd3cGUnLCAnd2Vi
a2l0LmgnKSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnV2ViUHJvY2Vz
cycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ3dlYmtpdC13ZWItZXh0ZW5zaW9u
LmgnKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDYyMDJmNDZiYWYw
Li40NWUwMmQwNGFjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
NSw2ICsxNSw4IEBAIHNldChGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RXZWJLaXRBUElfTkFNRSBU
ZXN0V2ViS2l0QVBJLWZvcndhcmRpbmctaGVhZGVycykKIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAg
ICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfQogICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJ
Un0vSmF2YVNjcmlwdENvcmUKKyAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3Jp
cHRDb3JlL2dsaWIKKyAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFR1RLX0RJUn0K
ICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9zb3VwCiAgICAgJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvQVBJL0MvZ3RrCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0
awpAQCAtMTE2LDYgKzExOCwxNSBAQCBsaXN0KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcAogKQog
CithZGRfZXhlY3V0YWJsZShUZXN0SlNDICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFT
Y3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoVGVzdEpT
QworICAgICR7R0xJQl9MSUJSQVJJRVN9CisgICAgSmF2YVNjcmlwdENvcmUKKykKK2FkZF90ZXN0
KFRlc3RKU0MgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNj
cmlwdENvcmUvVGVzdEpTQykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElF
UyBUSU1FT1VUIDYwKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBS
VU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJ
UkVDVE9SWX0vSmF2YVNjcmlwdENvcmUpCisKIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcp
CiAgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJLaXQgLVduby1zaWduLWNv
bXBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVu
ZGVmCkBAIC0xMjQsNCArMTM1LDggQEAgaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKICAg
ICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdFdlYkNvcmUgLVduby1zaWduLWNvbXBh
cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bmRl
ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVudXNl
ZC1wYXJhbWV0ZXIpCisKKyAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdEpTQyAt
V25vLXNpZ24tY29tcGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC1Xbm8tdW5kZWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25v
LXVudXNlZC1wYXJhbWV0ZXIpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjBlMjlkNzhkMwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlND
LmNwcApAQCAtMCwwICsxLDE4NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworLy8gSW5jbHVkZSBKU0NDb250ZXh0UHJpdmF0
ZS5oIHRvIGJlIGFibGUgdG8gcnVuIGdhcmJhZ2UgY29sbGVjdG9yIGZvciB0ZXN0aW5nLgorI2Rl
ZmluZSBKU0NfQ09NUElMQVRJT04gMQorI2luY2x1ZGUgImpzYy9KU0NDb250ZXh0UHJpdmF0ZS5o
IgorI3VuZGVmIEpTQ19DT01QSUxBVElPTgorCisjaW5jbHVkZSA8anNjL2pzYy5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCitjbGFzcyBMZWFrQ2hlY2tlciB7CitwdWJsaWM6Cisg
ICAgTGVha0NoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB+TGVha0NoZWNrZXIoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGdfcHJpbnQoIkxlYWtlZCBvYmplY3RzOiIpOworICAgICAgICBmb3Ig
KGF1dG8qIG9iamVjdCA6IG1fd2F0Y2hlZE9iamVjdHMpCisgICAgICAgICAgICBnX3ByaW50KCIg
WyVzKCVwKSAldSByZWZzXSIsIGdfdHlwZV9uYW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRf
Y2FzdDxHVHlwZUluc3RhbmNlKj4ob2JqZWN0KSksIG9iamVjdCwgR19PQkpFQ1Qob2JqZWN0KS0+
cmVmX2NvdW50KTsKKyAgICAgICAgZ19wcmludCgiXG4iKTsKKyAgICAgICAgZ19hc3NlcnQobV93
YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHZvaWQgd2F0Y2godm9pZCog
b2JqZWN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoR19JU19PQkpFQ1Qob2JqZWN0KSk7Cisg
ICAgICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRkKG9iamVjdCk7CisgICAgICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKG9iamVjdCksIFtdKGdwb2ludGVyIHVzZXJEYXRhLCBHT2JqZWN0KiBv
YmplY3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PExlYWtDaGVja2VyKj4odXNlckRhdGEp
LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShvYmplY3QpOworICAgICAgICB9LCB0aGlzKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDx2b2lkKj4gbV93YXRjaGVkT2JqZWN0czsKK307
CisKK2NsYXNzIEV4Y2VwdGlvbkhhbmRsZXIgeworcHVibGljOgorICAgIEV4Y2VwdGlvbkhhbmRs
ZXIoSlNDQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICB7CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250ZXh0
LCBbXShKU0NDb250ZXh0KiwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7Cisg
ICAgICAgICAgICBnX2Vycm9yKCJVTkVYUEVDVEVEIEVYQ0VQVElPTjogJXMiLCBqc2NfZXhjZXB0
aW9uX2dldF9tZXNzYWdlKGV4Y2VwdGlvbikpOworICAgICAgICB9LCBudWxscHRyLCBudWxscHRy
KTsKKyAgICB9CisKKyAgICB+RXhjZXB0aW9uSGFuZGxlcigpCisgICAgeworICAgICAgICBwb3Ao
KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSlNDRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyLCBn
cG9pbnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0
cikKKyAgICB7CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIobV9j
b250ZXh0LCBoYW5kbGVyLCB1c2VyRGF0YSwgZGVzdHJveUZ1bmN0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHBvcCgpCisgICAgeworICAgICAgICBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hh
bmRsZXIobV9jb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNDQ29udGV4dCogbV9j
b250ZXh0OworfTsKKworI2RlZmluZSBnX2Fzc2VydF90aHJvd19iZWdpbihoYW5kbGVyLCBkaWRU
aHJvdykgXAorICAgIGRpZFRocm93ID0gZmFsc2U7IFwKKyAgICBoYW5kbGVyLnB1c2goW10oSlND
Q29udGV4dCosIEpTQ0V4Y2VwdGlvbiosIGdwb2ludGVyIHVzZXJEYXRhKSB7IFwKKyAgICAgICAg
KnN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSkgPSB0cnVlOyBcCisgICAgfSwgJmRpZFRocm93
LCBudWxscHRyKTsKKworI2RlZmluZSBnX2Fzc2VydF9kaWRfdGhyb3coaGFuZGxlciwgZGlkVGhy
b3cpIFwKKyAgICBoYW5kbGVyLnBvcCgpOyBcCisgICAgZ19hc3NlcnQoZGlkVGhyb3cpOyBcCisg
ICAgZGlkVGhyb3cgPSBmYWxzZTsKKworZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNHYXJi
YWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOworCitzdGF0aWMgdm9pZCBqc2ND
b250ZXh0R2FyYmFnZUNvbGxlY3QoSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBKU1N5bmNo
cm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoanNjQ29udGV4dEdldEpTQ29udGV4dChj
b250ZXh0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NCYXNpYygpCit7CisgICAgeworICAg
ICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndh
dGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhh
bmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgYXV0byogZGVmYXVsdFZNID0ganNjX2Nv
bnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoZGVmYXVsdFZNKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChkZWZhdWx0Vk0pOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gYWRvcHRHUmVmKGpzY192aXJ0dWFs
X21hY2hpbmVfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZtLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQodm0uZ2V0KCkgIT0gZGVmYXVsdFZNKTsKKworICAgICAgICBHUmVmUHRyPEpT
Q0NvbnRleHQ+IGNvbnRleHQyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1
YWxfbWFjaGluZSh2bS5nZXQoKSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQyLmdl
dCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyMihjb250ZXh0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGlu
ZShjb250ZXh0Mi5nZXQoKSkgPT0gdm0uZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDQ29u
dGV4dD4gY29udGV4dDMgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9t
YWNoaW5lKGRlZmF1bHRWTSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQzLmdldCgp
KTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyMyhjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShj
b250ZXh0My5nZXQoKSkgPT0ganNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0
LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUxID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUxLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9j
b250ZXh0KHZhbHVlMS5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUxLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUxLmdldCgpKSwgPT0sIDI1KTsKKyAgICAgICAg
anNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ2YWx1ZTEiLCB2YWx1ZTEuZ2V0
KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFsdWUxIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9
PSB2YWx1ZTEuZ2V0KCkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0Mi5nZXQoKSwgInZhbHVlMSIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRl
eHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0Mi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0My5nZXQoKSwgInZhbHVlMSIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0My5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7
CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQzLmdldCgpLCAidmFsdWUx
IiwgdmFsdWUxLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQzLmdldCgpLCAidmFsdWUxIikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4
dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQzLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVz
dWx0LmdldCgpICE9IHZhbHVlMS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDI1KTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29u
dGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFu
ZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIjIgKyAyIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09
LCA0KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQyID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChyZXN1bHQyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dl
dF9jb250ZXh0KHJlc3VsdDIuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChyZXN1bHQuZ2V0KCkgPT0gcmVzdWx0Mi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gcmVzdWx0MyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiMyArIDEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0My5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQzLmdldCgpKSA9
PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHJlc3Vs
dDMuZ2V0KCkpOworCisgICAgICAgIGF1dG8qIHJlc3VsdFB0ciA9IHJlc3VsdC5nZXQoKTsKKyAg
ICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgcmVzdWx0MiA9IG51bGxwdHI7CisgICAg
ICAgIHJlc3VsdDMgPSBudWxscHRyOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQ0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQ0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdDQuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdDQuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQ0LmdldCgp
KSwgPT0sIDQpOworICAgICAgICBnX2Fzc2VydChyZXN1bHQ0LmdldCgpICE9IHJlc3VsdFB0cik7
CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBH
UmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRp
b25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgp
KSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksICJmb3VyIiwgcmVzdWx0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQo
KSwgImZvdXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQodmFsdWUuZ2V0KCkpID09IGNvbnRleHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0
KCkpLCA9PSwgNCk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQo
KSk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImZvdXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxK
U0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxl
ciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAidHdvID0gMjsgZm91ciA9IHR3byArIHR3byIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQo
cmVzdWx0LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNCk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksICJ0d28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfZ2V0X2NvbnRleHQodmFsdWUuZ2V0KCkpID09IGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVl
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFs
dWUuZ2V0KCkpLCA9PSwgMik7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb3VyIikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVl
LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQyID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmaXZlID0gNCIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQocmVzdWx0
Mi5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SlND
VHlwZXMoKQoreworICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgR1JlZlB0cjxKU0NDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICBjaGVja2Vy
LndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFu
ZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkpOworICAgIGNo
ZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1i
ZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfdG9fZG91
YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyNS4pOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTI1KTsKKyAgICBnX2Fzc2VydChqc2NfdmFs
dWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7CisgICAgR1VuaXF1ZVB0cjxjaGFy
PiB2YWx1ZVN0cmluZyhqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEyNSIpOworICAgIGpzY19jb250
ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiaSIsIHZhbHVlLmdldCgpKTsKKyAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksICJpIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMTIuNSkpOworICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19u
dW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2NfdmFsdWVfdG9f
ZG91YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyLjUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTIpOworICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICB2YWx1ZVN0cmluZy5y
ZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEyLjUiKTsKKyAgICBqc2NfY29udGV4dF9zZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgImQiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZCIpKTsKKyAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09
IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYm9v
bGVhbihjb250ZXh0LmdldCgpLCBUUlVFKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQo
KSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAx
KTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgp
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInRydWUiKTsK
KyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImIxIiwgdmFsdWUuZ2V0
KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4
dC5nZXQoKSwgImIxIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBn
X2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX25ld19ib29sZWFuKGNvbnRleHQuZ2V0KCksIEZBTFNFKSk7CisgICAg
Y2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jv
b2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2
YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3Zh
bHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sICJmYWxzZSIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LmdldCgpLCAiYjIiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYjIiKSk7CisgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5n
ZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3N0cmluZyhjb250
ZXh0LmdldCgpLCAiSGVsbG8gV29ybGQiKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQo
KSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAg
IHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiSGVsbG8gV29ybGQiKTsK
KyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7
CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09
LCAwKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMxIiwgdmFs
dWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgInMxIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19zdHJpbmcoY29udGV4dC5nZXQoKSwgbnVsbHB0cikp
OworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFs
dWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZh
bHVlLmdldCgpKSA9PSBGQUxTRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19p
bnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgInMyIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMyIikpOworICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUu
Z2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19zdHJpbmcoY29u
dGV4dC5nZXQoKSwgIjEyLjUiKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIHZhbHVl
U3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMTIuNSIpOworICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2Vy
dF9jbXBmbG9hdChqc2NfdmFsdWVfdG9fZG91YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyLjUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwg
MTIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczMiLCB2YWx1
ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShj
b250ZXh0LmdldCgpLCAiczMiKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5KGNvbnRleHQuZ2V0KCksIEdfVFlQRV9OT05F
KSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX2lzX2FycmF5KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29i
amVjdCh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHZh
bHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1
ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAiIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJhMSIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJhMSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsK
KyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
b2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2Vy
LndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVt
YmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCAwKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQo
KSwgMSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBqc2NfdmFs
dWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwganNjX3ZhbHVlX3Rv
X2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgYXJyYXlJdGVtLmdldCgpKTsKKyAgICBhcnJheUxl
bmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQo
KSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09
LCAxKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdl
dCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEiKTsK
KyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5n
ZXQoKSwgNSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBqc2Nf
dmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwganNjX3ZhbHVl
X3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgYXJyYXlJdGVtLmdldCgpKTsKKyAgICBhcnJh
eUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5n
ZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsK
KyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSks
ID09LCAyKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVl
LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEs
NSIpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250
ZXh0LmdldCgpLCAxMCkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAg
ICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMywg
YXJyYXlJdGVtLmdldCgpKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
b2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2Vy
LndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVt
YmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCA0KTsKKyAgICBhcnJheUl0ZW0gPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCks
IDApKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCAxKTsKKyAgICBhcnJh
eUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgo
dmFsdWUuZ2V0KCksIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7Cisg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCA1
KTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVy
dHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIDIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRl
bS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChhcnJheUl0ZW0u
Z2V0KCkpKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRf
cHJvcGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIDMpKTsKKyAgICBjaGVja2VyLndhdGNoKGFy
cmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0
ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5
SXRlbS5nZXQoKSksID09LCAxMCk7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJsZW5ndGgiKSk7CisgICAgY2hl
Y2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCBqc2Nf
dmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpICsgMSkpOworICAgIGNoZWNrZXIud2F0
Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVk
KGFycmF5SXRlbS5nZXQoKSkpOworCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYXJyYXkgPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0LmdldCgpLCBHX1RZUEVfSU5ULCAxLCBH
X1RZUEVfU1RSSU5HLCAidHdvIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIEpTQ19UWVBFX1ZBTFVF
LCB2YWx1ZS5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5Lmdl
dCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYXJyYXkoYXJyYXkuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KGFycmF5LmdldCgpKSk7CisgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXkuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNz
ZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXkuZ2V0KCkpLCA9PSwgMCk7CisgICAg
dmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhhcnJheS5nZXQoKSkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxLHR3byx0cnVlLDEsNSws
MTAiKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9w
cm9wZXJ0eShhcnJheS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5
TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVu
Z3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJh
eUxlbmd0aC5nZXQoKSksID09LCA0KTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0KCksIDApKTsKKyAgICBj
aGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVl
X3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCAxKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9w
dEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0KCks
IDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX3N0cmluZyhhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICB2YWx1ZVN0cmluZy5y
ZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKGFycmF5SXRlbS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ0d28iKTsKKyAgICBhcnJheUl0ZW0gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0
KCksIDIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4oYXJyYXlJdGVtLmdldCgpKSk7CisgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXlJdGVtLmdldCgpKSA9PSBUUlVFKTsKKyAgICBhcnJh
eUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgo
YXJyYXkuZ2V0KCksIDMpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7Cisg
ICAgZ19hc3NlcnQoYXJyYXlJdGVtLmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIEdSZWZQ
dHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJl
ZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQo
KSwganNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMSkpOworICAgIGdfcHRyX2Fy
cmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfc3RyaW5nKGNvbnRleHQuZ2V0KCks
ICJ0d28iKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25l
d19ib29sZWFuKGNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQoZ0Fy
cmF5LmdldCgpLCBnX29iamVjdF9yZWYodmFsdWUuZ2V0KCkpKTsKKyAgICBhcnJheSA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5X2Zyb21fZ2FycmF5KGNvbnRleHQuZ2V0KCksIGdBcnJh
eS5nZXQoKSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXkuZ2V0KCkpOworICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19hcnJheShhcnJheS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc19vYmplY3QoYXJyYXkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9fYm9v
bGVhbihhcnJheS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1
ZV90b19pbnQzMihhcnJheS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChq
c2NfdmFsdWVfdG9fc3RyaW5nKGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgIjEsdHdvLHRydWUsMSw1LCwxMCIpOworICAgIGFycmF5TGVu
Z3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGFycmF5LmdldCgp
LCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOworICAg
IGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgPT0s
IGdBcnJheS0+bGVuKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2Jq
ZWN0KGNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KHZhbHVlLmdl
dCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09
IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0
KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2
YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0s
ICJbb2JqZWN0IE9iamVjdF0iKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5n
ZXQoKSwgIm8iLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAibyIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsK
KworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKGNvbnRleHQu
Z2V0KCkpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfdW5kZWZpbmVkKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3Ry
aW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidW5kZWZpbmVkIik7CisgICAganNjX2Nv
bnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ1IiwgdmFsdWUuZ2V0KCkpOworICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInUi
KSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlc3Vs
dC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfbmV3X251bGwoY29udGV4dC5nZXQoKSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udWxsKHZhbHVlLmdldCgpKSk7CisgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDAp
OworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAibnVsbCIpOwor
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAibiIsIHZhbHVlLmdldCgp
KTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJuIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fz
c2VydChyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworfQorCitzdGF0aWMgaW50IGZvbyhp
bnQgbikKK3sKKyAgICByZXR1cm4gbiAqIDI7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxiYWNrKEpT
Q1ZhbHVlKiBmdW5jdGlvbikKK3sKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbiwgR19UWVBFX0lOVCwgMjAwLCBH
X1RZUEVfTk9ORSkpOworICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQodmFsdWUu
Z2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgZG91YmxlQW5kU2V0SW5SZXN1bHQoaW50IG4pCit7
CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19u
dW1iZXIoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSwgbiAqIDIpKTsKKyAgICBqc2NfY29udGV4
dF9zZXRfdmFsdWUoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKSwgInJlc3VsdCIsIHZhbHVlLmdl
dCgpKTsKK30KKworc3RhdGljIGludCBzdW1GdW5jdGlvbihHUHRyQXJyYXkqIGFycmF5KQorewor
ICAgIGludCByZXR2YWwgPSAwOworCisgICAgZ19wdHJfYXJyYXlfZm9yZWFjaChhcnJheSwgW10o
Z3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgZ19hc3NlcnQoSlND
X0lTX1ZBTFVFKGRhdGEpKTsKKyAgICAgICAgSlNDVmFsdWUqIGl0ZW0gPSBKU0NfVkFMVUUoZGF0
YSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoaXRlbSkpOworICAgICAg
ICAqc3RhdGljX2Nhc3Q8aW50Kj4odXNlckRhdGEpICs9IGpzY192YWx1ZV90b19pbnQzMihpdGVt
KTsKKyAgICB9LCAmcmV0dmFsKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RKU0NGdW5jdGlvbigpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVj
a2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAiZm9vIiwgR19DQUxMQkFDSyhmb28pLCBu
dWxscHRyLCBudWxscHRyLCAgR19UWVBFX0lOVCwgMSwgR19UWVBFX0lOVCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJmb28iLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZm9vKDIwMCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0
KCkpLCA9PSwgNDAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX0lOVCwg
MjAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlND
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIg
ZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZm9vID0gZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIDI7IH0iKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
Zm9vKDIwMCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNDAw
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQodmFsdWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29u
dGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFu
ZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlv
biA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCksICJjYWxs
YmFjayIsIEdfQ0FMTEJBQ0soY2FsbGJhY2spLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfTk9O
RSwgMSwgSlNDX1RZUEVfVkFMVUUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5jdGlvbi5n
ZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiY2Fs
bGJhY2siLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3Vs
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFyIHJl
c3VsdCA9IDA7IGNhbGxiYWNrKGZ1bmN0aW9uKG4peyByZXN1bHQgPSBuICogMjsgfSk7IHJlc3Vs
dCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisg
ICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAicmVzdWx0ID0gMCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSks
ID09LCAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBkYmwgPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAiZG91YmxlQW5kU2V0SW5SZXN1bHQi
LCBHX0NBTExCQUNLKGRvdWJsZUFuZFNldEluUmVzdWx0KSwgbnVsbHB0ciwgbnVsbHB0ciwgR19U
WVBFX05PTkUsIDEsIEdfVFlQRV9JTlQpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChkYmwuZ2V0
KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgSlNDX1RZUEVfVkFMVUUsIGRibC5nZXQo
KSwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAicmVzdWx0IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0s
IDQwMCk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAg
ICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
bmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBF
eGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwKKyAgICAgICAgICAgICJzdW1GdW5jdGlvbiA9IGZ1bmN0aW9u
KGFycmF5KSB7XG4iCisgICAgICAgICAgICAiICAgIHZhciByZXN1bHQgPSAwO1xuIgorICAgICAg
ICAgICAgIiAgICBmb3IgKHZhciBpIGluIGFycmF5KSB7IHJlc3VsdCArPSBhcnJheVtpXTsgfVxu
IgorICAgICAgICAgICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIgorICAgICAgICAgICAgIn0iKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfb2JqZWN0KGZ1bmN0aW9uLmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gYXJyYXkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0
LmdldCgpLCBHX1RZUEVfSU5ULCAyLCBHX1RZUEVfSU5ULCA0LCBHX1RZUEVfSU5ULCA2LCBHX1RZ
UEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGFycmF5LmdldCgpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25f
Y2FsbChmdW5jdGlvbi5nZXQoKSwgSlNDX1RZUEVfVkFMVUUsIGFycmF5LmdldCgpLCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDEyKTsKKworICAg
ICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
d193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJlZikpOworICAgICAgICBnX3B0cl9hcnJheV9h
ZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxKSk7
CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVt
YmVyKGNvbnRleHQuZ2V0KCksIDMpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5n
ZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgNSkpOworCisgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgp
LCBHX1RZUEVfUFRSX0FSUkFZLCBnQXJyYXkuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgOSk7CisgICAgfQorCisgICAgeworICAgICAg
ICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNo
KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRs
ZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24g
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAic3VtRnVu
Y3Rpb24iLCBHX0NBTExCQUNLKHN1bUZ1bmN0aW9uKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBF
X0lOVCwgMSwgR19UWVBFX1BUUl9BUlJBWSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZ1bmN0
aW9uLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCks
ICJzdW1GdW5jdGlvbiIsIGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
InN1bUZ1bmN0aW9uKFsyLDQsNl0pIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgp
KSwgPT0sIDEyKTsKKworICAgICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5ID0gYWRvcHRH
UmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJlZikpOworICAg
ICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihj
b250ZXh0LmdldCgpLCAxKSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCks
IGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDMpKTsKKyAgICAgICAgZ19wdHJf
YXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQo
KSwgNSkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9j
YWxsKGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfUFRSX0FSUkFZLCBnQXJyYXkuZ2V0KCksIEdfVFlQ
RV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgOSk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDT2JqZWN0KCkKK3sKKyAgICB7CisgICAgICAgIExl
YWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29u
dGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihj
b250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImNsYXNzIEZvbyB7IGZvbyhu
KSB7IHJldHVybiBuICogMjsgfSB9OyBmb28gPSBuZXcgRm9vOyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0
KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3Rh
bmNlX29mKGZvby5nZXQoKSwgIkZvbyIpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQo
KSwgImZvbyIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVt
YmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3Rv
X2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cg
PSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwg
ZGlkVGhyb3cpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9p
bnZva2VfbWV0aG9kKGZvby5nZXQoKSwgImJhciIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05P
TkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJGb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3Ry
dWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfY29uc3RydWN0b3Io
Y29uc3RydWN0b3IuZ2V0KCkpKTsKKworICAgICAgICBmb28gPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X2NvbnN0cnVjdG9yX2NhbGwoY29uc3RydWN0b3IuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVl
X2lzX29iamVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVj
dF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksICJGb28iKSk7CisKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChmb28uZ2V0KCksICJmb28i
LCBHX1RZUEVfSU5ULCAzMDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihy
ZXN1bHQuZ2V0KCkpLCA9PSwgNjAwKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgImZvbzIiLCBmb28uZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvbzIgaW5zdGFuY2Vv
ZiBGb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9v
Mi5mb28oNTAwKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAx
MDAwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAg
ICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9u
ZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4
Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmpl
Y3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICBjaGVja2VyLndh
dGNoKG9iamVjdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3Qo
b2JqZWN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5z
dGFuY2Vfb2Yob2JqZWN0LmdldCgpLCAiT2JqZWN0IikpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQu
Z2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOworCisg
ICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEob2JqZWN0LmdldCgp
LCAidmFsIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPigwKSwgcHJvcGVydHku
Z2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYi
LCBvYmplY3QuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDsiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChq
c2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIGJvb2wg
ZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9u
SGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiJ3VzZSBzdHJpY3QnOyBmLnZhbCA9IDMyOyIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc191bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfZGlk
X3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKworICAgICAgICB2YWx1ZSA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5wcm9wZXJ0eUlz
RW51bWVyYWJsZSgndmFsJyk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFsdWUuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZB
TFNFKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZGVsZXRlIGYudmFsOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFs
dWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDUyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cHJvcGVydHkuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25I
YW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3Bl
cnR5X2RhdGEob2JqZWN0LmdldCgpLCAidmFsIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0
eUZsYWdzPigwKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3co
ZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDMyKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgInZhbDIiLCBzdGF0aWNfY2FzdDxKU0NW
YWx1ZVByb3BlcnR5RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9FTlVNRVJBQkxFIHwgSlNDX1ZB
TFVFX1BST1BFUlRZX1dSSVRBQkxFKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWwyOyIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAzMik7CisKKyAgICAgICAg
dmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIid1
c2Ugc3RyaWN0JzsgZi52YWwyID0gNDU7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYudmFsMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0
KCkpLCA9PSwgNDUpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnByb3BlcnR5SXNFbnVtZXJhYmxlKCd2YWwyJyk7Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworCisgICAgICAgIHByb3Bl
cnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX3Zh
bHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJ2YWwzIiwgc3Rh
dGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklH
VVJBQkxFIHwgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKSwgcHJvcGVydHkuZ2V0KCkpOwor
ICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAx
MjUpOworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVy
KGNvbnRleHQuZ2V0KCksIDE1MCkpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5Lmdl
dCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmpl
Y3QuZ2V0KCksICJ2YWwzIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0Nf
VkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICB2
YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52
YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAxNTApOworCisg
ICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJkZWxldGUgZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQo
KSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmLnZhbDM7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZCh2YWx1ZS5nZXQoKSkp
OworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwgImZvbyIsIEdfQ0FMTEJBQ0soZm9vKSwg
bnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX0lOVCwgMSwgR19UWVBFX0lOVCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0
X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgImZvbyIsIHN0YXRpY19jYXN0PEpT
Q1ZhbHVlUHJvcGVydHlGbGFncz4oMCksIGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2Vf
bWV0aG9kKG9iamVjdC5nZXQoKSwgImZvbyIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAg
ICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChv
YmplY3QuZ2V0KCksICJmb28iLCBHX1RZUEVfUE9JTlRFUiwgIjIwMCIsIEdfVFlQRV9OT05FKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
ZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1
ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxMjUpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192
YWx1ZV9pc19vYmplY3QodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoIWpzY192YWx1
ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YodmFsdWUuZ2V0KCksICJPYmplY3QiKSk7CisKKyAgICAg
ICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihl
eGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QodmFsdWUuZ2V0
KCksICJmb28iLCBHX1RZUEVfSU5ULCAyMDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3Vu
ZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhj
ZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgX0Zv
byBGb287CitzdHJ1Y3QgX0ZvbyB7CisgICAgaW50IGZvbzsKKyAgICBGb28qIHNpYmxpbmc7Cit9
OworCitzdGF0aWMgRm9vKiBmb29DcmVhdGUoKQoreworICAgIHJldHVybiBnX25ldzAoRm9vLCAx
KTsKK30KKworc3RhdGljIEZvbyogZm9vQ3JlYXRlV2l0aEZvbyhpbnQgdmFsdWUpCit7CisgICAg
YXV0byogZiA9IGZvb0NyZWF0ZSgpOworICAgIGYtPmZvbyA9IHZhbHVlOworICAgIHJldHVybiBm
OworfQorCitzdGF0aWMgdm9pZCBmb29GcmVlKEZvbyogZm9vKQoreworICAgIGdfZnJlZShmb28p
OworfQorCitzdGF0aWMgdm9pZCBzZXRGb28oRm9vKiBmb28sIGludCB2YWx1ZSkKK3sKKyAgICBm
b28tPmZvbyA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IGdldEZvbyhGb28qIGZvbykKK3sKKyAg
ICByZXR1cm4gZm9vLT5mb287Cit9CisKK3N0YXRpYyB2b2lkIHNldFNpYmxpbmcoRm9vKiBmb28s
IEZvbyogc2libGluZykKK3sKKyAgICBmb28tPnNpYmxpbmcgPSBzaWJsaW5nOworfQorCitzdGF0
aWMgRm9vKiBnZXRTaWJsaW5nKEZvbyogZm9vKQoreworICAgIHJldHVybiBmb28tPnNpYmxpbmc7
Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpcGx5Rm9vKEZvbyogZm9vLCBpbnQgbXVsdGlwbGllcikK
K3sKKyAgICBmb28tPmZvbyAqPSBtdWx0aXBsaWVyOworfQorCitzdHJ1Y3QgUHJvbWlzZURhdGEg
eworICAgIEZvbyogZm9vOworICAgIGludCBtdWx0aXBsaWVyOworICAgIExlYWtDaGVja2VyKiBj
aGVja2VyOworfTsKKworc3RhdGljIHZvaWQgZ2V0TXVsdGlwbHlGb28oSlNDVmFsdWUqIHJlc29s
dmUsIEpTQ1ZhbHVlKiByZWplY3QsIFByb21pc2VEYXRhKiBkYXRhKQoreworICAgIGRhdGEtPmNo
ZWNrZXItPndhdGNoKHJlc29sdmUpOworICAgIGdfYXNzZXJ0KEpTQ19JU19WQUxVRShyZXNvbHZl
KSk7CisgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Z1bmN0aW9uKHJlc29sdmUpKTsKKyAgICBk
YXRhLT5jaGVja2VyLT53YXRjaChyZWplY3QpOworICAgIGdfYXNzZXJ0KEpTQ19JU19WQUxVRShy
ZWplY3QpKTsKKyAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfZnVuY3Rpb24ocmVqZWN0KSk7CisK
KyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQ7CisgICAgaWYgKGRhdGEtPm11bHRpcGxpZXIg
PiAwKQorICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwo
cmVzb2x2ZSwgR19UWVBFX0lOVCwgZGF0YS0+Zm9vLT5mb28gKiBkYXRhLT5tdWx0aXBsaWVyLCBH
X1RZUEVfTk9ORSkpOworICAgIGVsc2UgeworICAgICAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4g
ZXhjZXB0aW9uID0gYWRvcHRHUmVmKGpzY19leGNlcHRpb25fbmV3KGpzY19jb250ZXh0X2dldF9j
dXJyZW50KCksICJNdWx0aXBsaWVyIG11c3QgYmUgcG9zaXRpdmUgZ3JlYXRlciB0aGFuIDAiKSk7
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChyZWpl
Y3QsIEpTQ19UWVBFX0VYQ0VQVElPTiwgZXhjZXB0aW9uLmdldCgpLCBHX1RZUEVfTk9ORSkpOwor
ICAgIH0KKyAgICBkYXRhLT5jaGVja2VyLT53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7Cit9CisKK3N0YXRpYyBK
U0NWYWx1ZSogZ2V0TXVsdGlwbHlGb29Bc3luYyhGb28qIGZvbywgaW50IG11bHRpcGxpZXIsIExl
YWtDaGVja2VyKiBjaGVja2VyKQoreworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY19jb250ZXh0
X2dldF9jdXJyZW50KCk7CisgICAgZ19hc3NlcnQoSlNDX0lTX0NPTlRFWFQoanNDb250ZXh0KSk7
CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X2Z1bmN0aW9uKGpzQ29udGV4dCwgbnVsbHB0ciwgR19DQUxMQkFDSyhnZXRNdWx0aXBseUZv
byksIG5ldyBQcm9taXNlRGF0YSB7IGZvbywgbXVsdGlwbGllciwgY2hlY2tlcn0sCisgICAgICAg
IFtdKGdwb2ludGVyIGRhdGEpIHsgZGVsZXRlIHN0YXRpY19jYXN0PFByb21pc2VEYXRhKj4oZGF0
YSk7IH0sIEdfVFlQRV9OT05FLCAyLCBKU0NfVFlQRV9WQUxVRSwgSlNDX1RZUEVfVkFMVUUpKTsK
KyAgICBjaGVja2VyLT53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gcHJvbWlzZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoanNDb250ZXh0LCAi
UHJvbWlzZSIpKTsKKyAgICBjaGVja2VyLT53YXRjaChwcm9taXNlLmdldCgpKTsKKyAgICBnX2Fz
c2VydChqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IocHJvbWlzZS5nZXQoKSkpOworICAgIGF1dG8q
IHJldHVyblZhbHVlID0ganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGwocHJvbWlzZS5nZXQoKSwg
SlNDX1RZUEVfVkFMVUUsIGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfTk9ORSk7CisgICAgY2hlY2tl
ci0+d2F0Y2gocmV0dXJuVmFsdWUpOworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKwordHlw
ZWRlZiBzdHJ1Y3QgeworICAgIGludCBiYXo7Cit9IEJhejsKKworc3RhdGljIEJheiogYmF6Q3Jl
YXRlKCkKK3sKKyAgICByZXR1cm4gZ19uZXcwKEJheiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RKU0NDbGFzcygpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAg
ICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
bmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBF
eGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAg
ICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4
dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdf
YXNzZXJ0KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3Ry
dWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwg
bnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfY29uc3RydWN0b3IoY29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNv
bnN0cnVjdG9yLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUo
anNjQ2xhc3MpKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEZvbzsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIGpzY19jbGFz
c19hZGRfbWV0aG9kKGpzY0NsYXNzLCAiZ2V0Rm9vIiwgR19DQUxMQkFDSyhnZXRGb28pLCBudWxs
cHRyLCBudWxscHRyLCBHX1RZUEVfSU5ULCAwLCBHX1RZUEVfTk9ORSk7CisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21l
dGhvZChmb28uZ2V0KCksICJnZXRGb28iLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJl
cih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZh
bHVlMiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5n
ZXRGb28oKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZTIuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydCh2YWx1ZS5nZXQoKSA9PSB2YWx1ZTIuZ2V0KCkpOworCisgICAgICAgIGpzY19j
bGFzc19hZGRfbWV0aG9kKGpzY0NsYXNzLCAic2V0Rm9vIiwgR19DQUxMQkFDSyhzZXRGb28pLCBu
dWxscHRyLCBudWxscHRyLCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgp
LCAic2V0Rm9vIiwgR19UWVBFX0lOVCwgMjUsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZ2V0Rm9vKCkiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
bnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVf
dG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5zZXRGb28oNDUpIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChmb28uZ2V0KCksICJnZXRG
b28iLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0s
IDQ1KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvcjIgPSBhZG9wdEdS
ZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgIkNyZWF0ZVdpdGhGb28iLCBH
X0NBTExCQUNLKGZvb0NyZWF0ZVdpdGhGb28pLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9J
TlRFUiwgMSwgR19UWVBFX0lOVCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9y
Mi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25z
dHJ1Y3RvcjIuZ2V0KCkpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHko
Y29uc3RydWN0b3IuZ2V0KCksICJDcmVhdGVXaXRoRm9vIiwgY29uc3RydWN0b3IyLmdldCgpKTsK
KworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28yID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMiA9IG5ldyBGb28uQ3JlYXRlV2l0aEZvbyg0Mik7
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvbzIuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfaXNfb2JqZWN0KGZvbzIuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28yLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoanNjQ2xhc3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KGZvby5nZXQoKSAhPSBmb28yLmdldCgp
KTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmMiBpbnN0YW5jZW9mIEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVz
dWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYyIGluc3RhbmNlb2YgRm9vLkNyZWF0ZVdpdGhGb287IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRk
X3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28p
LCBHX0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICB2YWx1ZSA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIuZm9vIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQyKTsKKyAgICAgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5m
b28gPSA1MiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
ZjIuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDUyKTsKKwor
ICAgICAgICBKU0NDbGFzcyogb3RoZXJDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNz
KGNvbnRleHQuZ2V0KCksICJCYXoiLCBudWxscHRyLCBnX2ZyZWUpOworICAgICAgICBjaGVja2Vy
LndhdGNoKG90aGVyQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9wYXJl
bnQob3RoZXJDbGFzcykpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9y
MyA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKG90aGVyQ2xhc3MsIG51bGxw
dHIsIEdfQ0FMTEJBQ0soYmF6Q3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5U
RVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3Iz
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0
cnVjdG9yMy5nZXQoKSkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5n
ZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKG90aGVyQ2xhc3MpLCBjb25zdHJ1Y3RvcjMuZ2V0KCkp
OworCisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZv
by5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKG90aGVyQ2xhc3MpKSk7CisgICAgICAgIGdfYXNz
ZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvbzIuZ2V0KCksIGpzY19jbGFz
c19nZXRfbmFtZShvdGhlckNsYXNzKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGJh
eiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbChjb25zdHJ1Y3RvcjMuZ2V0
KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goYmF6LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChiYXouZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihiYXouZ2V0KCksIGpzY19j
bGFzc19nZXRfbmFtZShvdGhlckNsYXNzKSkpOworICAgICAgICBnX2Fzc2VydCghanNjX3ZhbHVl
X29iamVjdF9pc19pbnN0YW5jZV9vZihiYXouZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2ND
bGFzcykpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7Cisg
ICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAg
IEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAg
ICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250
ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlm
eT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNzKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRk
X2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51
bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNj
X3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAgICAgIGpzY19j
b250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xh
c3MpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVydHko
anNjQ2xhc3MsICJzaWJsaW5nIiwgR19UWVBFX1BPSU5URVIsIEdfQ0FMTEJBQ0soZ2V0U2libGlu
ZyksIEdfQ0FMTEJBQ0soc2V0U2libGluZyksIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiZjEgPSBuZXcgRm9vKCk7IGYyID0gbmV3IEZvbygpOyBmMi5zaWJs
aW5nID0gZjEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmMSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFs
dWUoY29udGV4dC5nZXQoKSwgImYxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGYxLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmMS5nZXQoKSkpOworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmMiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFs
dWUoY29udGV4dC5nZXQoKSwgImYyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGYyLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmMi5nZXQoKSkpOworCisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5zaWJsaW5nIikpOworICAgICAgICBjaGVja2VyLndh
dGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQodmFsdWUuZ2V0KCkgPT0gZjEuZ2V0
KCkpOworCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGYxLmdldCgpLCAi
c2libGluZyIsIGYyLmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYxLnNpYmxpbmciKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh2YWx1ZS5nZXQoKSA9PSBm
Mi5nZXQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOwor
ICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAg
ICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29u
dGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3Rp
Znk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2Fk
ZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUpLCBu
dWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0Ns
YXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5
KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExC
QUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIEZvbyogZiA9IGZvb0Ny
ZWF0ZVdpdGhGb28oMjUpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgZiwganNjQ2xhc3MpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2Jq
ZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNz
KSkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIs
IGZvby5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEZvbzsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgMjUpOworCisgICAgICAg
IHNldEZvbyhmLCA0Mik7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihy
ZXN1bHQuZ2V0KCkpLCA9PSwgNDIpOworCisgICAgICAgIEpTQ0NsYXNzKiBiYXpDbGFzcyA9IGpz
Y19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJCYXoiLCBudWxscHRyLCBn
X2ZyZWUpOworICAgICAgICBjaGVja2VyLndhdGNoKGJhekNsYXNzKTsKKworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvcjIgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25z
dHJ1Y3RvcihiYXpDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXpDcmVhdGUpLCBudWxscHRy
LCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb25zdHJ1Y3RvcjIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfaXNfY29uc3RydWN0b3IoY29uc3RydWN0b3IyLmdldCgpKSk7CisgICAgICAgIGpzY19jb250
ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmF6Q2xhc3Mp
LCBjb25zdHJ1Y3RvcjIuZ2V0KCkpOworCisgICAgICAgIEJheiogYnogPSBiYXpDcmVhdGUoKTsK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmF6ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdf
b2JqZWN0KGNvbnRleHQuZ2V0KCksIGJ6LCBiYXpDbGFzcykpOworICAgICAgICBjaGVja2VyLndh
dGNoKGJhei5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoYmF6
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YoYmF6LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmF6Q2xhc3MpKSk7CisgICAgICAgIGdf
YXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGJhei5nZXQoKSwganNjX2Ns
YXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICBnX2Fzc2VydCghanNjX3ZhbHVlX29i
amVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShiYXpDbGFz
cykpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImJ6
IiwgYmF6LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJieiBpbnN0YW5jZW9mIEJhejsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19i
b29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYnogaW5zdGFuY2VvZiBGb287IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydCghanNj
X3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIGluc3RhbmNlb2Yg
QmF6OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydChqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnQoIWpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIGpz
Y192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGJhei5nZXQoKSwgImZvbyIsIGZvby5nZXQoKSk7
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiYnouZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdC5nZXQoKSA9PSBmb28uZ2V0KCkpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBl
eGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2ND
bGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBu
dWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xh
c3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19U
WVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29u
c3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfY29uc3RydWN0
b3IoY29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9yLmdl
dCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIsIEdf
VFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pLCBudWxscHRy
LCBudWxscHRyKTsKKworICAgICAgICBGb28qIGYgPSBmb29DcmVhdGVXaXRoRm9vKDI1KTsKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2Jq
ZWN0KGNvbnRleHQuZ2V0KCksIGYsIGpzY0NsYXNzKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
Zm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmb28uZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihm
b28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcykpKTsKKworICAgICAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYxIiwgZm9vLmdldCgpKTsKKyAgICAg
ICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmMiIsIGZvby5nZXQoKSk7
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEgPT09IGYyOyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfYm9v
bGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX3RvX2Jvb2xl
YW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcHJvcGVydHkg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgNTApKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGpzY192YWx1ZV9v
YmplY3Rfc2V0X3Byb3BlcnR5KGZvby5nZXQoKSwgIm4iLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAg
ICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiZjEubiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA1MCk7
CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBH
UmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRp
b25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlND
Q2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQo
KSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0Zy
ZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0
KCFqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3Io
anNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0
ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfY29u
c3RydWN0b3IoY29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVj
dG9yLmdldCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZv
byIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChq
c2NfdmFsdWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFs
dWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpz
Y0NsYXNzKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJv
cGVydHkoZm9vLmdldCgpLCAiZm9vIiwgdmFsdWUuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8
SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZi5fX2xvb2t1cEdldHRlcl9fKCdmb28nKS5jYWxsKGYpIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHZhbHVlLmdldCgp
ID09IHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAg
ICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7Cisg
ICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZi5fX2xvb2t1cEdldHRlcl9fKCdmb28nKS5jYWxsKHt9KSIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
dW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhj
ZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0No
ZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0
LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRl
eHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3Jl
Z2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9j
YXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNj
Q2xhc3MpOworICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9wYXJlbnQoanNjQ2xhc3Mp
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9IGFkb3B0R1JlZihq
c2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZv
b0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGJvb2wgZGlkVGhyb3cg
PSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwg
ZGlkVGhyb3cpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc191bmRlZmluZWQoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhl
eGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFr
Q2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29u
dGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4ganNOYW1lc3BhY2UgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cikpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzTmFtZXNwYWNlLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChqc05hbWVzcGFjZS5nZXQoKSkpOworCisg
ICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAid2siLCBqc05hbWVz
cGFjZS5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRf
cmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChq
c2NDbGFzcyk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9w
dEdSZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxM
QkFDSyhmb29DcmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19U
WVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3Rvci5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQo
KSkpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShqc05hbWVzcGFjZS5n
ZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOwor
ICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lO
VCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxw
dHIpOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRf
dGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc191bmRlZmluZWQoZm9vLmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7
CisKKyAgICAgICAgZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmID0gbmV3IHdrLkZvbygpOyIpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVl
X2lzX29iamVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVj
dF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksICJ3ay5Gb28iKSk7CisgICAgICAgIEdSZWZQdHI8
SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZiBpbnN0YW5jZW9mIHdrLkZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVz
dWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3Vs
dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yMiA9IGFk
b3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCAiQ3JlYXRlV2l0aEZv
byIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlV2l0aEZvbyksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQ
RV9QT0lOVEVSLCAxLCBHX1RZUEVfSU5UKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3Ry
dWN0b3IyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9y
KGNvbnN0cnVjdG9yMi5nZXQoKSkpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9w
ZXJ0eShjb25zdHJ1Y3Rvci5nZXQoKSwgIkNyZWF0ZVdpdGhGb28iLCBjb25zdHJ1Y3RvcjIuZ2V0
KCkpOworCisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRp
ZFRocm93KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vMiA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIgPSBuZXcgRm9vLkNyZWF0ZVdpdGhG
b28oNDIpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28yLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChmb28yLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAg
Zm9vMiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIg
PSBuZXcgd2suRm9vLkNyZWF0ZVdpdGhGb28oNDIpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChmb28yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChmb28y
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YoZm9vMi5nZXQoKSwgIndrLkZvbyIpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX29i
amVjdF9pc19pbnN0YW5jZV9vZihmb28yLmdldCgpLCAid2suRm9vLkNyZWF0ZVdpdGhGb28iKSk7
CisgICAgICAgIGdfYXNzZXJ0KGZvby5nZXQoKSAhPSBmb28yLmdldCgpKTsKKyAgICAgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMiBp
bnN0YW5jZW9mIHdrLkZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYyIGluc3RhbmNlb2Ygd2suRm9vLkNyZWF0ZVdpdGhGb287IikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9f
Ym9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5mb28iKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251
bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNDIpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IGZvbzMgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGwoY29uc3RydWN0
b3IyLmdldCgpLCBHX1RZUEVfSU5ULCA2MiwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChmb28zLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVj
dChmb28zLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5z
dGFuY2Vfb2YoZm9vMy5nZXQoKSwgIndrLkZvbyIpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3Zh
bHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28zLmdldCgpLCAid2suRm9vLkNyZWF0ZVdpdGhG
b28iKSk7CisgICAgICAgIGdfYXNzZXJ0KGZvbzIuZ2V0KCkgIT0gZm9vMy5nZXQoKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZjMiLCBmb28zLmdldCgp
KTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmMyBpbnN0YW5jZW9mIHdrLkZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4o
cmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImYzIGluc3RhbmNlb2Ygd2suRm9vLkNyZWF0ZVdpdGhGb287
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dChqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMy5mb28iKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNjIpOworICAgIH0KK30K
KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZvbyBwYXJlbnQ7CisgICAgaW50IGJhcjsKK30gQmFy
OworCitzdGF0aWMgQmFyKiBiYXJDcmVhdGUoKQoreworICAgIHJldHVybiBnX25ldzAoQmFyLCAx
KTsKK30KKworc3RhdGljIHZvaWQgYmFyRnJlZShCYXIqIGJhcikKK3sKKyAgICBnX2ZyZWUoYmFy
KTsKK30KKworc3RhdGljIHZvaWQgc2V0QmFyKEJhciogYmFyLCBpbnQgdmFsdWUpCit7CisgICAg
YmFyLT5iYXIgPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBnZXRCYXIoQmFyKiBiYXIpCit7Cisg
ICAgcmV0dXJuIGJhci0+YmFyOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDUHJvdG90eXBlcygp
Cit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRy
PEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5k
bGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3Mq
IGZvb0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZv
byIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChmb29DbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2Nf
Y2xhc3NfZ2V0X3BhcmVudChmb29DbGFzcykpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBm
b29Db25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGZvb0Ns
YXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdf
VFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZv
b0NvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2NvbnN0
cnVjdG9yKGZvb0NvbnN0cnVjdG9yLmdldCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92
YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoZm9vQ2xhc3MpLCBmb29Db25z
dHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGpzY19jbGFzc19hZGRfbWV0aG9kKGZvb0NsYXNzLCAi
bXVsdGlwbHkiLCBHX0NBTExCQUNLKG11bHRpcGx5Rm9vKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19U
WVBFX05PTkUsIDEsIEdfVFlQRV9JTlQpOworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5
KGZvb0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExC
QUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIEpTQ0NsYXNzKiBiYXJD
bGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJCYXIiLCBm
b29DbGFzcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oYmFyRnJlZSkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGJhckNsYXNzKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX2NsYXNz
X2dldF9wYXJlbnQoYmFyQ2xhc3MpID09IGZvb0NsYXNzKTsKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gYmFyQ29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rv
cihiYXJDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXJDcmVhdGUpLCBudWxscHRyLCBudWxs
cHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChiYXJDb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19jb25zdHJ1Y3RvcihiYXJDb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBqc2NfY29udGV4
dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGJhckNsYXNzKSwg
YmFyQ29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGJh
ckNsYXNzLCAiYmFyIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRCYXIpLCBHX0NBTExCQUNL
KHNldEJhciksIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
ZiA9IG5ldyBGb28oKTsgYiA9IG5ldyBCYXIoKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuX19wcm90b19fID09IEZvby5wcm90b3R5cGUiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
anNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIuX19wcm90b19fID09
IEJhci5wcm90b3R5cGUiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImIuX19wcm90b19fLl9fcHJvdG9fXyA9PSBGb28ucHJvdG90eXBlIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9p
c19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfdG9f
Ym9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28g
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192
YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9v
YmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoZm9vQ2xh
c3MpKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29m
KGZvby5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGJhckNsYXNzKSkpOworICAgICAgICByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgaW5z
dGFuY2VvZiBGb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYgaW5zdGFuY2VvZiBCYXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsK
KworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
Z2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGJh
ci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3QoYmFyLmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmFy
LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmFyQ2xhc3MpKSk7CisgICAgICAgIGdfYXNzZXJ0
KGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmFyLmdldCgpLCBqc2NfY2xhc3NfZ2V0
X25hbWUoZm9vQ2xhc3MpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiIGluc3RhbmNlb2YgQmFyIikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1
ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
dG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiIGluc3RhbmNlb2YgRm9vIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpz
Y192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2Nf
dmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIuYmFyID0gMjU7IGIu
Zm9vID0gNDI7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImIuYmFyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVl
LmdldCgpKSwgPT0sIDI1KTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1
ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlLmdldCgpKSwgPT0sIDQyKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIubXVsdGlwbHkoMikiKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIuZm9vIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lz
X251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVl
X3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDg0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGNyZWF0ZUVycm9yKCkKK3sKKyAgICBqc2NfY29udGV4dF90aHJvdyhqc2NfY29udGV4dF9nZXRf
Y3VycmVudCgpLCAiQVBJIGV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDRXhj
ZXB0aW9ucygpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAg
ICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3
KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydCghanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSk7CisKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJmb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgLy8gQnkgZGVmYXVsdCBleGNlcHRpb25zIGFyZSBub3QgY2F1Z2h0
LgorICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlv
bikpOworICAgICAgICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cihqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdlKGV4Y2VwdGlvbiksID09LCAiQ2FuJ3Qg
ZmluZCB2YXJpYWJsZTogZm9vIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoanNjX2V4Y2Vw
dGlvbl9nZXRfbGluZV9udW1iZXIoZXhjZXB0aW9uKSwgPT0sIDEpOworICAgICAgICBnX2Fzc2Vy
dCghanNjX2V4Y2VwdGlvbl9nZXRfc291cmNlX3VyaShleGNlcHRpb24pKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY29udGV4
dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImYgPSAyNTtcbmZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9u
KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9OKGV4Y2Vw
dGlvbikpOworICAgICAgICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoanNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoZXhjZXB0aW9uKSwgPT0s
IDIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAg
ICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25l
dygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnQoIWpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZV93aXRoX3NvdXJjZV91cmkoY29udGV4dC5nZXQoKSwgImZvbyIsICJmaWxlOi8vL2Zvby9z
Y3JpcHQuanMiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAg
ICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cihqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpKGV4Y2VwdGlvbiksID09LCAiZmlsZTovLy9m
b28vc2NyaXB0LmpzIik7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVj
a2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydCghanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgp
KSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAiY3JlYXRlRXJyb3IiLCBHX0NBTExC
QUNLKGNyZWF0ZUVycm9yKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX05PTkUsIDAsIEdfVFlQ
RV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAg
ICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImNyZWF0ZUVycm9yIiwgZnVu
Y3Rpb24uZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFyIHJlc3VsdDsgdHJ5
IHsgY3JlYXRlRXJyb3IoKTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlv
bic7IH0iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgR1Vu
aXF1ZVB0cjxjaGFyPiByZXN1bHRTdHJpbmcoanNjX3ZhbHVlX3RvX3N0cmluZyhyZXN1bHQuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdFN0cmluZy5nZXQoKSwgPT0sICJD
YXVnaHQgZXhjZXB0aW9uIik7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY29udGV4dF9nZXRfZXhj
ZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInZhciByZXN1bHQ7IGNyZWF0ZUVycm9y
KCk7IHJlc3VsdCA9ICdObyBleGNlcHRpb24nOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRf
ZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChKU0NfSVNfRVhDRVBU
SU9OKGV4Y2VwdGlvbikpOworICAgICAgICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdlKGV4Y2VwdGlvbiks
ID09LCAiQVBJIGV4Y2VwdGlvbiIpOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19leGNl
cHRpb25fZ2V0X2xpbmVfbnVtYmVyKGV4Y2VwdGlvbiksID09LCAxKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkoZXhjZXB0aW9uKSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0Nv
bnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCghanNjX2NvbnRl
eHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgc3RydWN0IFRlc3Qg
eworICAgICAgICAgICAgSlNDQ29udGV4dCogY29udGV4dDsKKyAgICAgICAgICAgIEdSZWZQdHI8
SlNDRXhjZXB0aW9uPiBleGNlcHRpb247CisgICAgICAgICAgICBib29sIHdhc0RlbGV0ZWQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgVGVzdCB0ZXN0ID0geyBjb250ZXh0LmdldCgpLCBudWxscHRy
LCBmYWxzZSB9OworICAgICAgICBqc2NfY29udGV4dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKGNv
bnRleHQuZ2V0KCksIFtdKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ0V4Y2VwdGlvbiogZXhjZXB0
aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byogdGVzdCA9IHN0YXRp
Y19jYXN0PFRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBnX2Fzc2VydChjb250ZXh0ID09
IHRlc3QtPmNvbnRleHQpOworICAgICAgICAgICAgZ19hc3NlcnQoIXRlc3QtPmV4Y2VwdGlvbik7
CisgICAgICAgICAgICBnX2Fzc2VydCghdGVzdC0+d2FzRGVsZXRlZCk7CisgICAgICAgICAgICB0
ZXN0LT5leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0sICZ0ZXN0LCBbXShncG9pbnRl
ciB1c2VyRGF0YSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGVzdCo+KHVzZXJEYXRhKS0+
d2FzRGVsZXRlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAg
IC8vIEV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IHRoZSB1c2VyIGhhbmRsZXIuCisgICAgICAgIGdf
YXNzZXJ0KCFqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnQoSlNDX0lTX0VYQ0VQVElPTih0ZXN0LmV4Y2VwdGlvbi5nZXQoKSkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHRlc3QuZXhjZXB0aW9uLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UodGVzdC5leGNlcHRpb24uZ2V0KCkp
LCA9PSwgIkNhbid0IGZpbmQgdmFyaWFibGU6IGZvbyIpOworICAgICAgICBnX2Fzc2VydF9jbXB1
aW50KGpzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVyKHRlc3QuZXhjZXB0aW9uLmdldCgpKSwg
PT0sIDEpOworICAgICAgICBnX2Fzc2VydCghanNjX2V4Y2VwdGlvbl9nZXRfc291cmNlX3VyaSh0
ZXN0LmV4Y2VwdGlvbi5nZXQoKSkpOworCisgICAgICAgIGdfYXNzZXJ0KCF0ZXN0Lndhc0RlbGV0
ZWQpOworICAgICAgICBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHRlc3Qud2FzRGVsZXRlZCk7CisKKyAgICAgICAgdGVz
dC5leGNlcHRpb24gPSBudWxscHRyOworICAgICAgICB0ZXN0Lndhc0RlbGV0ZWQgPSBmYWxzZTsK
KyAgICAgICAganNjX2NvbnRleHRfcHVzaF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0LmdldCgp
LCBbXShKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbiwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8qIHRlc3QgPSBzdGF0aWNfY2FzdDxUZXN0
Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZ19hc3NlcnQoY29udGV4dCA9PSB0ZXN0LT5jb250
ZXh0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT5leGNlcHRpb24pOworICAgICAgICAg
ICAgZ19hc3NlcnQoIXRlc3QtPndhc0RlbGV0ZWQpOworICAgICAgICAgICAgdGVzdC0+ZXhjZXB0
aW9uID0gZXhjZXB0aW9uOworICAgICAgICAgICAganNjX2NvbnRleHRfdGhyb3dfZXhjZXB0aW9u
KGNvbnRleHQsIGV4Y2VwdGlvbik7CisgICAgICAgIH0sICZ0ZXN0LCBbXShncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGVzdCo+KHVzZXJEYXRhKS0+d2FzRGVs
ZXRlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9vIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIC8vIEV4Y2VwdGlvbiB3YXMgaGFuZGxl
ZCBieSB0aGUgdXNlciBoYW5kbGVyLCBidXQgbm90IGNhdWdodC4KKyAgICAgICAgYXV0byogZXhj
ZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChleGNlcHRpb24pOworICAgICAgICBnX2Fzc2VydChleGNlcHRpb24gPT0gdGVzdC5l
eGNlcHRpb24uZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0KCF0ZXN0Lndhc0RlbGV0ZWQpOwor
ICAgICAgICBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KHRlc3Qud2FzRGVsZXRlZCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB0ZXN0SlNDUHJvbWlzZXMoKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hl
Y2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkp
OworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHByb21pc2UgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJQcm9taXNlIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHByb21pc2UuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNf
ZnVuY3Rpb24ocHJvbWlzZS5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidHlw
ZW9mIFByb21pc2UiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyPiByZXN1bHRTdHJpbmcoanNjX3ZhbHVlX3RvX3N0cmluZyhyZXN1
bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdFN0cmluZy5nZXQoKSwg
PT0sICJmdW5jdGlvbiIpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0ID0gMDsgUHJvbWlzZS5yZXNvbHZlKDQy
KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXN1bHQgPSB2YWx1ZTsgfSk7IikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCks
ICJyZXN1bHQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9u
SGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0Ns
YXNzKiBmb29DbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCks
ICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVl
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vQ2xhc3MpOworICAgICAgICBnX2Fzc2VydCgh
anNjX2NsYXNzX2dldF9wYXJlbnQoZm9vQ2xhc3MpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gZm9vQ29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihm
b29DbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUpLCBudWxscHRyLCBudWxscHRy
LCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChmb29Db25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19j
b25zdHJ1Y3Rvcihmb29Db25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGZvb0NsYXNzKSwgZm9v
Q29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChmb29DbGFz
cywgImdldE11bHRpcGx5Rm9vQXN5bmMiLCBHX0NBTExCQUNLKGdldE11bHRpcGx5Rm9vQXN5bmMp
LCAmY2hlY2tlciwgbnVsbHB0ciwgSlNDX1RZUEVfVkFMVUUsIDEsIEdfVFlQRV9JTlQpOworICAg
ICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGZvb0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwg
R19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIp
OworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0ID0gMDsgZiA9IG5ldyBGb28oKTsg
Zi5mb28gPSA1OyBmLmdldE11bHRpcGx5Rm9vQXN5bmMoMikudGhlbihmdW5jdGlvbiAodmFsdWUp
IHsgcmVzdWx0ID0gdmFsdWU7IH0sIGZ1bmN0aW9uIChlcnJvcikgeyByZXN1bHQgPSAtMTsgfSk7
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksICJyZXN1bHQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkp
LCA9PSwgMTApOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0ID0gMDsgZi5nZXRNdWx0aXBseUZvb0FzeW5jKDAp
LnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7IHJlc3VsdCA9IHZhbHVlOyB9LCBmdW5jdGlvbiAoZXJy
b3IpIHsgcmVzdWx0ID0gLTE7IH0pOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQo
KSksID09LCAtMSk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzX2Zvb1dhc0ZyZWVkOworCitz
dGF0aWMgdm9pZCBmb29GcmVlQW5kTG9nKEZvbyogZm9vKQoreworICAgIGZvb0ZyZWUoZm9vKTsK
KyAgICBzX2Zvb1dhc0ZyZWVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ0dhcmJh
Z2VDb2xsZWN0b3IoKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAg
ICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
RXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29i
amVjdChjb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gob2JqZWN0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMjUpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVf
aXNfbnVtYmVyKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVl
X3RvX2ludDMyKGZvby5nZXQoKSksID09LCAyNSk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rf
c2V0X3Byb3BlcnR5KG9iamVjdC5nZXQoKSwgImZvbyIsIGZvby5nZXQoKSk7CisKKyAgICAgICAg
anNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KG9iamVjdC5nZXQoKSA9PSByZXN1bHQuZ2V0
KCkpOworCisgICAgICAgIG9iamVjdCA9IG51bGxwdHI7CisgICAgICAgIGZvbyA9IG51bGxwdHI7
CisgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29s
bGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgb2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChvYmplY3QuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KG9i
amVjdC5nZXQoKSkpOworICAgICAgICBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoZm9vLmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoZm9vLmdldCgpKSwg
PT0sIDI1KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYgPSB1bmRlZmluZWQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5l
ZChyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29u
dGV4dC5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX29iamVjdChvYmpl
Y3QuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCks
ICJmIiwgb2JqZWN0LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KG9iamVjdC5nZXQoKSA9PSByZXN1bHQu
Z2V0KCkpOworICAgICAgICBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19udW1iZXIoZm9vLmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoZm9vLmdldCgpKSwgPT0sIDI1
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAg
IEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXco
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2Vw
dGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBz
X2Zvb1dhc0ZyZWVkID0gZmFsc2U7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNj
X2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWVBbmRMb2cpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0KCFqc2NfY2xhc3NfZ2V0
X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVj
dG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxw
dHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5U
RVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3Iu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29uc3Ry
dWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9yLmdldCgpKTsKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChvYmplY3QuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2Jq
ZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydChqc2NfdmFsdWVfb2JqZWN0X2lz
X2luc3RhbmNlX29mKG9iamVjdC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkp
OworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChvYmplY3QuZ2V0KCkgPT0gcmVzdWx0
LmdldCgpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYgPSB1bmRlZmluZWQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX3VuZGVmaW5l
ZChyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBnX2Fzc2VydCghc19mb29XYXNGcmVlZCk7Cisg
ICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnQoIXNfZm9vV2FzRnJlZWQpOworCisgICAgICAgIG9iamVjdCA9IG51bGxwdHI7Cisg
ICAgICAgIGdfYXNzZXJ0KCFzX2Zvb1dhc0ZyZWVkKTsKKyAgICAgICAganNjQ29udGV4dEdhcmJh
Z2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydChzX2Zvb1dhc0ZyZWVk
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RzSlNDVmlydHVhbE1hY2hpbmUoKQorewor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBl
eGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIGF1dG8gdGhyZWFkID0g
VGhyZWFkOjpjcmVhdGUoIkpTQ1ZpcnR1YWxNYWNoaW5lVGVzdCIsIFsmXSB7CisgICAgICAgICAg
ICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0
LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4o
Zm9vRnJlZUFuZExvZykpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7Cisg
ICAgICAgICAgICBnX2Fzc2VydCghanNjX2NsYXNzX2dldF9wYXJlbnQoanNjQ2xhc3MpKTsKKwor
ICAgICAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29D
cmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUp
KTsKKyAgICAgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAg
ICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgp
KSk7CisgICAgICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNj
X2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworCisgICAgICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAgICAgICAgICAgY2hl
Y2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVl
X2dldF9jb250ZXh0KG9iamVjdC5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgICAg
ICBnX2Fzc2VydChqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICAg
ICAgZ19hc3NlcnQoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihvYmplY3QuZ2V0KCks
IGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcykpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgdGhyZWFkLT5kZXRhY2goKTsKKwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
Z2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAgICBjaGVja2VyLndhdGNoKG9i
amVjdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9pc19vYmplY3Qob2JqZWN0
LmdldCgpKSk7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0
KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgVmVjdG9yPFJlZjxUaHJlYWQ+LCA1PiB0aHJl
YWRzOworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDU7ICsraSkgeworICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQoVGhyZWFkOjpjcmVh
dGUoIkpTQ1ZpcnR1YWxNYWNoaW5lVGVzdCIsIFsmb2tdIHsKKyAgICAgICAgICAgICAgICBHUmVm
UHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bSA9IGFkb3B0R1JlZihqc2NfdmlydHVhbF9tYWNoaW5l
X25ldygpKTsKKyAgICAgICAgICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKHZtLmdldCgpKSk7
CisgICAgICAgICAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICJ2
YXIgYXJyYXkgPSBbe31dO1xuIgorICAgICAgICAgICAgICAgICAgICAiZm9yICh2YXIgaSA9IDA7
IGkgPCAyMDsgKytpKSB7XG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgdmFyIG5ld0FycmF5
ID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCAqIDIpO1xuIgorICAgICAgICAgICAgICAgICAgICAi
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgbmV3QXJyYXkubGVuZ3RoOyArK2opXG4iCisgICAgICAg
ICAgICAgICAgICAgICIgICAgICAgIG5ld0FycmF5W2pdID0ge3BhcmVudDogYXJyYXlbaiAvIDJd
fTtcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICBhcnJheSA9IG5ld0FycmF5O1xuIgorICAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAg
ICAgIGdfYXNzZXJ0KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBleGNlcHRpb24gPSBqc2NfY29u
dGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGdfbWVzc2FnZSgiVW5jYXVnaHQgZXhjZXB0aW9uOiAlcyIsIGpzY19leGNlcHRpb25fZ2V0X21l
c3NhZ2UoZXhjZXB0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYXJyYXkiKSk7
CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoanNjX3ZhbHVlX2dldF9jb250ZXh0KHZhbHVlLmdl
dCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWpzY192YWx1ZV9p
c19vYmplY3QodmFsdWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGdfbWVzc2FnZSgi
RGlkIG5vdCBmaW5kIFwiYXJyYXlcIiB2YXJpYWJsZSIpOworICAgICAgICAgICAgICAgICAgICBv
ayA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqc2NDb250ZXh0
R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICB9KSk7CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKGF1dG8mIHRocmVhZCA6IHRocmVhZHMpIHsKKyAgICAgICAgICAg
IHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgICAgIHRocmVhZC0+ZGV0YWNo
KCk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydChvayk7CisgICAgfQorfQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCBudWxscHRyKTsKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9iYXNpYyIsIHRlc3RK
U0NCYXNpYyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3R5cGVzIiwgdGVzdEpTQ1R5cGVz
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZnVuY3Rpb24iLCB0ZXN0SlNDRnVuY3Rpb24p
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9vYmplY3QiLCB0ZXN0SlNDT2JqZWN0KTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvY2xhc3MiLCB0ZXN0SlNDQ2xhc3MpOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL2pzYy9wcm90b3R5cGVzIiwgdGVzdEpTQ1Byb3RvdHlwZXMpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL2pzYy9leGNlcHRpb25zIiwgdGVzdEpTQ0V4Y2VwdGlvbnMpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm9taXNlcyIsIHRlc3RKU0NQcm9taXNlcyk7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvanNjL2dhcmJhZ2UtY29sbGVjdG9yIiwgdGVzdEpTQ0dhcmJhZ2VD
b2xsZWN0b3IpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy92bSIsIHRlc3RzSlNDVmlydHVh
bE1hY2hpbmUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336112</attachid>
            <date>2018-03-20 03:27:44 -0700</date>
            <delta_ts>2018-03-20 04:14:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>jsc-glib-api.diff</filename>
            <type>text/plain</type>
            <size>301039</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNzNmNWY1OTg4My4uZGVh
ZDllMjgzOTMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxOC0wMy0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEph
dmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNldCBnbG9iYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIG1ha2Vm
aWxlcy4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlOgorCiAyMDE4LTAzLTE1ICBNczJnZXIg
IDxNczJnZXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSBzZXJ2aWNl
IHdvcmtlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFw
cGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVj
dC5oCmluZGV4IDM5NThjZjQ5MjVmLi5hYWU1ZDQxOGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5o
PgogCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRCB8
fCBkZWZpbmVkKEpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAK
QEAgLTU1LDYgKzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRp
ZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVE
IHx8IGRlZmluZWQoSlNDX0dMSUJfQVBJX0VOQUJMRUQpCiAKICNlbmRpZiAvLyBKU0FQSVdyYXBw
ZXJPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
QVBJV3JhcHBlck9iamVjdEdMaWIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4xOGRkMTNlYjcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcApAQCAtMCwwICsxLDEw
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisK
KyNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK2NsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsK
K307CisKK3N0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVy
T2JqZWN0SGFuZGxlT3duZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcj4ganNXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI7CisgICAg
cmV0dXJuICZqc1dyYXBwZXJPYmplY3RIYW5kbGVPd25lci5nZXQoKTsKK30KKwordm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqKQoreworICAgIGF1dG8qIHdyYXBwZXJPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Cisg
ICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTQzo6SGVhcDo6aGVhcCh3cmFwcGVyT2JqZWN0KS0+cmVsZWFzZVNvb24oc3RkOjp1
bmlxdWVfcHRyPEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3Q+KHN0YXRpY19jYXN0PEpTQzo6SlND
R0xpYldyYXBwZXJPYmplY3QqPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpKSk7Cisg
ICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFu
ZGxlLnNsb3QoKSkpOworfQorCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgLy8gV2UgdXNlIHRoZSBKU0ds
b2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQgdGhlIHNp
dHVhdGlvbiB3aGVyZSB1c2luZworICAgIC8vIHRoZSBzYW1lIHdyYXBwZWQgb2JqZWN0IGluIG11
bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxp
dmUuCisgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gSlNDOjpIZWFwOjppc01hcmtlZCh3cmFwcGVyT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVS
b290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7Cit9CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmpl
Y3QpIH07CisKK3RlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCit0ZW1wbGF0ZSA8PgorU3Ry
dWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8p
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitK
U0FQSVdyYXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQVBJ
V3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlzLCBqc0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXI6OmZpbmFsaXplLgorfQorCit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0
V3JhcHBlZE9iamVjdCh2b2lkKiB3cmFwcGVkT2JqZWN0KQoreworICAgIEFTU0VSVCghbV93cmFw
cGVkT2JqZWN0KTsKKyAgICBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OworfQorCit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQXV0b2NsZWFudXBzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQXV0b2NsZWFudXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjZkOTE3OGU2OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0F1dG9jbGVhbnVwcy5oCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlND
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8
anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYg
SlNDQXV0b1B0cl9oCisjZGVmaW5lIEpTQ0F1dG9QdHJfaAorCisjaWZkZWYgR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMKKyNpZm5kZWYgX19HSV9TQ0FOTkVSX18KKworR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKEpTQ0NsYXNzLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChKU0NDb250ZXh0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChKU0NFeGNlcHRpb24sIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKEpTQ1ZhbHVlLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChKU0NWaXJ0dWFsTWFjaGluZSwgZ19vYmplY3Rf
dW5yZWYpCisKKyNlbmRpZiAvKiBfX0dJX1NDQU5ORVJfXyAqLworI2VuZGlmIC8qIEdfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DICovCisKKyNlbmRpZiAvKiBKU0NBdXRvUHRyX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2FkNzBiOGNh
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q2FsbGJhY2tGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDYWxs
YmFja0Z1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJBUElDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0xvY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjYWxs
ZXJDb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDQ2FsbGJhY2tG
dW5jdGlvbio+KHRvSlMoZnVuY3Rpb24pKS0+Y2FsbChjYWxsZXJDb250ZXh0LCB0aGlzT2JqZWN0
LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBKU09i
amVjdFJlZiBjYWxsQXNDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY2FsbGVyQ29udGV4dCwgSlNP
YmplY3RSZWYgY29uc3RydWN0b3IsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEpTQ0NhbGxiYWNrRnVuY3Rpb24qPih0b0pTKGNvbnN0cnVjdG9yKSktPmNvbnN0
cnVjdChjYWxsZXJDb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7
Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0NDYWxsYmFja0Z1bmN0aW9uOjpzX2luZm8gPSB7ICJD
YWxsYmFja0Z1bmN0aW9uIiwgJkludGVybmFsRnVuY3Rpb246OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NDYWxsYmFja0Z1bmN0aW9uKSB9OworCitKU0ND
YWxsYmFja0Z1bmN0aW9uKiBKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFR5cGUgdHlwZSwg
SlNDQ2xhc3MqIGpzY0NsYXNzLCBHUmVmUHRyPEdDbG9zdXJlPiYmIGNsb3N1cmUsIEdUeXBlIHJl
dHVyblR5cGUsIFZlY3RvcjxHVHlwZT4mJiBwYXJhbWV0ZXJzKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgp
OworICAgIEpTQ0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNDQ2FsbGJhY2tGdW5jdGlvbj4odm0uaGVhcCkpIEpTQ0NhbGxiYWNrRnVuY3Rp
b24odm0sIHN0cnVjdHVyZSwgdHlwZSwganNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVy
blR5cGUsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSwgbmFtZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitKU0NDYWxsYmFja0Z1bmN0
aW9uOjpKU0NDYWxsYmFja0Z1bmN0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFR5
cGUgdHlwZSwgSlNDQ2xhc3MqIGpzY0NsYXNzLCBHUmVmUHRyPEdDbG9zdXJlPiYmIGNsb3N1cmUs
IEdUeXBlIHJldHVyblR5cGUsIFZlY3RvcjxHVHlwZT4mJiBwYXJhbWV0ZXJzKQorICAgIDogSW50
ZXJuYWxGdW5jdGlvbih2bSwgc3RydWN0dXJlLCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsPEpT
Q0NhbGxiYWNrRnVuY3Rpb24+LCB0eXBlID09IFR5cGU6OkNvbnN0cnVjdG9yID8gQVBJQ2FsbGJh
Y2tGdW5jdGlvbjo6Y29uc3RydWN0PEpTQ0NhbGxiYWNrRnVuY3Rpb24+IDogbnVsbHB0cikKKyAg
ICAsIG1fZnVuY3Rpb25DYWxsYmFjayhjYWxsQXNGdW5jdGlvbikKKyAgICAsIG1fY29uc3RydWN0
Q2FsbGJhY2soY2FsbEFzQ29uc3RydWN0b3IpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1f
Y2xhc3MoanNjQ2xhc3MpCisgICAgLCBtX2Nsb3N1cmUoV1RGTW92ZShjbG9zdXJlKSkKKyAgICAs
IG1fcmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFy
YW1ldGVycykpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSAhPSBUeXBlOjpDb25zdHJ1Y3Rv
ciB8fCBqc2NDbGFzcyk7CisgICAgaWYgKEdfQ0xPU1VSRV9ORUVEU19NQVJTSEFMKG1fY2xvc3Vy
ZS5nZXQoKSkpCisgICAgICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChtX2Nsb3N1cmUuZ2V0KCks
IGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljKTsKK30KKworSlNWYWx1ZVJlZiBKU0NDYWxsYmFj
a0Z1bmN0aW9uOjpjYWxsKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhjYWxsZXJDb250ZXh0KSk7CisgICAgYXV0byBjb250ZXh0ID0ganNjQ29udGV4dEdldE9y
Q3JlYXRlKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQuZ2V0KCkpOwor
CisgICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpDb25zdHJ1Y3RvcikgeworICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRleHQpLCBBU0NJSUxp
dGVyYWwoImNhbm5vdCBjYWxsIGEgY2xhc3MgY29uc3RydWN0b3Igd2l0aG91dCB8bmV3fCIpKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChqc0NvbnRleHQpOworICAgIH0K
KworICAgIGdwb2ludGVyIGluc3RhbmNlID0gbnVsbHB0cjsKKyAgICBpZiAobV90eXBlID09IFR5
cGU6Ok1ldGhvZCkgeworICAgICAgICBpbnN0YW5jZSA9IGpzY0NvbnRleHRXcmFwcGVkT2JqZWN0
KGNvbnRleHQuZ2V0KCksIHRoaXNPYmplY3QpOworICAgICAgICBpZiAoIWluc3RhbmNlKSB7Cisg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhq
c0NvbnRleHQpLCBBU0NJSUxpdGVyYWwoImludmFsaWQgaW5zdGFuY2UgdHlwZSBpbiBtZXRob2Qi
KSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGNhbGxiYWNrRGF0YSA9IGpzY0NvbnRleHRQ
dXNoQ2FsbGJhY2soY29udGV4dC5nZXQoKSwgdG9SZWYodGhpcyksIHRoaXNPYmplY3QsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cyk7CisKKyAgICAvLyBHQ2xvc3VyZSBhbHdheXMgZXhwZWN0IHRv
IGhhdmUgYXQgbGVhc3QgdGhlIGluc3RhbmNlIHBhcmFtZXRlci4KKyAgICBib29sIGFkZEluc3Rh
bmNlID0gaW5zdGFuY2UgfHwgbV9wYXJhbWV0ZXJzLmlzRW1wdHkoKTsKKworICAgIGF1dG8gcGFy
YW1ldGVyQ291bnQgPSBzdGQ6Om1pbihtX3BhcmFtZXRlcnMuc2l6ZSgpLCBhcmd1bWVudENvdW50
KTsKKyAgICBpZiAoYWRkSW5zdGFuY2UpCisgICAgICAgIHBhcmFtZXRlckNvdW50Kys7CisgICAg
YXV0byogdmFsdWVzID0gc3RhdGljX2Nhc3Q8R1ZhbHVlKj4oZ19hbGxvY2Eoc2l6ZW9mKEdWYWx1
ZSkgKiBwYXJhbWV0ZXJDb3VudCkpOworICAgIG1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZihHVmFs
dWUpICogcGFyYW1ldGVyQ291bnQpOworCisgICAgc2l6ZV90IGZpcnN0UGFyYW1ldGVyID0gMDsK
KyAgICBpZiAoYWRkSW5zdGFuY2UpIHsKKyAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZXNbMF0s
IEdfVFlQRV9QT0lOVEVSKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcigmdmFsdWVzWzBd
LCBpbnN0YW5jZSk7CisgICAgICAgIGZpcnN0UGFyYW1ldGVyID0gMTsKKyAgICB9CisgICAgZm9y
IChzaXplX3QgaSA9IGZpcnN0UGFyYW1ldGVyOyBpIDwgcGFyYW1ldGVyQ291bnQgJiYgISpleGNl
cHRpb247ICsraSkKKyAgICAgICAganNjQ29udGV4dEpTVmFsdWVUb0dWYWx1ZShjb250ZXh0Lmdl
dCgpLCBhcmd1bWVudHNbaSAtIGZpcnN0UGFyYW1ldGVyXSwgbV9wYXJhbWV0ZXJzW2kgLSBmaXJz
dFBhcmFtZXRlcl0sICZ2YWx1ZXNbaV0sIGV4Y2VwdGlvbik7CisKKyAgICBHVmFsdWUgcmV0dXJu
VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgaWYgKG1fcmV0dXJuVHlwZSAhPSBHX1RZUEVfTk9O
RSkKKyAgICAgICAgZ192YWx1ZV9pbml0KCZyZXR1cm5WYWx1ZSwgbV9yZXR1cm5UeXBlKTsKKwor
ICAgIGlmICghKmV4Y2VwdGlvbikKKyAgICAgICAgZ19jbG9zdXJlX2ludm9rZShtX2Nsb3N1cmUu
Z2V0KCksIG1fcmV0dXJuVHlwZSAhPSBHX1RZUEVfTk9ORSA/ICZyZXR1cm5WYWx1ZSA6IG51bGxw
dHIsIHBhcmFtZXRlckNvdW50LCB2YWx1ZXMsIG51bGxwdHIpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgKytpKQorICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2
YWx1ZXNbaV0pOworCisgICAgaWYgKGF1dG8qIGpzY0V4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dl
dF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpCisgICAgICAgICpleGNlcHRpb24gPSBqc2NFeGNl
cHRpb25HZXRKU1ZhbHVlKGpzY0V4Y2VwdGlvbik7CisKKyAgICBqc2NDb250ZXh0UG9wQ2FsbGJh
Y2soY29udGV4dC5nZXQoKSwgV1RGTW92ZShjYWxsYmFja0RhdGEpKTsKKworICAgIGlmIChtX3Jl
dHVyblR5cGUgPT0gR19UWVBFX05PTkUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChqc0NvbnRleHQpOworCisgICAgYXV0byogcmV0dmFsID0gKmV4Y2VwdGlvbiA/IEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCkgOiBqc2NDb250ZXh0R1ZhbHVlVG9KU1ZhbHVlKGNv
bnRleHQuZ2V0KCksICZyZXR1cm5WYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICBnX3ZhbHVlX3Vuc2V0
KCZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworSlNPYmplY3RSZWYgSlND
Q2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0KEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhjYWxsZXJD
b250ZXh0KSk7CisgICAgYXV0byBjb250ZXh0ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlKHRvR2xv
YmFsUmVmKGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBhdXRvKiBqc0NvbnRl
eHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworCisgICAgaWYgKG1f
cmV0dXJuVHlwZSA9PSBHX1RZUEVfTk9ORSkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
SlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRleHQpLCBBU0NJSUxpdGVyYWwoImNvbnN0
cnVjdG9ycyBjYW5ub3QgYmUgdm9pZCIpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGF1dG8gY2FsbGJhY2tEYXRhID0ganNjQ29udGV4dFB1c2hDYWxsYmFjayhjb250
ZXh0LmdldCgpLCB0b1JlZih0aGlzKSwgbnVsbHB0ciwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRz
KTsKKworICAgIEdWYWx1ZSByZXR1cm5WYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVl
X2luaXQoJnJldHVyblZhbHVlLCBtX3JldHVyblR5cGUpOworCisgICAgaWYgKG1fcGFyYW1ldGVy
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gR0Nsb3N1cmUgYWx3YXlzIGV4cGVjdCB0byBoYXZl
IGF0IGxlYXN0IHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXIuCisgICAgICAgIEdWYWx1ZSBkdW1teVZh
bHVlID0gR19WQUxVRV9JTklUOworICAgICAgICBnX3ZhbHVlX2luaXQoJmR1bW15VmFsdWUsIEdf
VFlQRV9QT0lOVEVSKTsKKyAgICAgICAgZ19jbG9zdXJlX2ludm9rZShtX2Nsb3N1cmUuZ2V0KCks
ICZyZXR1cm5WYWx1ZSwgMSwgJmR1bW15VmFsdWUsIG51bGxwdHIpOworICAgICAgICBnX3ZhbHVl
X3Vuc2V0KCZkdW1teVZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIHBhcmFtZXRl
ckNvdW50ID0gc3RkOjptaW4obV9wYXJhbWV0ZXJzLnNpemUoKSwgYXJndW1lbnRDb3VudCk7Cisg
ICAgICAgIGF1dG8qIHZhbHVlcyA9IHN0YXRpY19jYXN0PEdWYWx1ZSo+KGdfYWxsb2NhKHNpemVv
ZihHVmFsdWUpICogcGFyYW1ldGVyQ291bnQpKTsKKyAgICAgICAgbWVtc2V0KHZhbHVlcywgMCwg
c2l6ZW9mKEdWYWx1ZSkgKiBwYXJhbWV0ZXJDb3VudCk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudCAmJiAhKmV4Y2VwdGlvbjsgKytpKQorICAgICAgICAg
ICAganNjQ29udGV4dEpTVmFsdWVUb0dWYWx1ZShjb250ZXh0LmdldCgpLCBhcmd1bWVudHNbaV0s
IG1fcGFyYW1ldGVyc1tpXSwgJnZhbHVlc1tpXSwgZXhjZXB0aW9uKTsKKworICAgICAgICBpZiAo
ISpleGNlcHRpb24pCisgICAgICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQo
KSwgJnJldHVyblZhbHVlLCBwYXJhbWV0ZXJDb3VudCwgdmFsdWVzLCBudWxscHRyKTsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyArK2kpCisgICAgICAg
ICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZXNbaV0pOworICAgIH0KKworICAgIGlmIChhdXRvKiBq
c2NFeGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKQor
ICAgICAgICAqZXhjZXB0aW9uID0ganNjRXhjZXB0aW9uR2V0SlNWYWx1ZShqc2NFeGNlcHRpb24p
OworCisgICAganNjQ29udGV4dFBvcENhbGxiYWNrKGNvbnRleHQuZ2V0KCksIFdURk1vdmUoY2Fs
bGJhY2tEYXRhKSk7CisKKyAgICBpZiAoKmV4Y2VwdGlvbikgeworICAgICAgICBnX3ZhbHVlX3Vu
c2V0KCZyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHN3aXRjaCAoZ190eXBlX2Z1bmRhbWVudGFsKEdfVkFMVUVfVFlQRSgmcmV0dXJuVmFsdWUpKSkg
eworICAgIGNhc2UgR19UWVBFX1BPSU5URVI6CisgICAgY2FzZSBHX1RZUEVfT0JKRUNUOgorICAg
ICAgICBpZiAoYXV0byogcHRyID0gcmV0dXJuVmFsdWUuZGF0YVswXS52X3BvaW50ZXIpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHJldHZhbCA9IGpzY0NsYXNzR2V0T3JDcmVhdGVKU1dyYXBwZXIobV9j
bGFzcy5nZXQoKSwgcHRyKTsKKyAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnJldHVyblZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiB0b1JlZihyZXR2YWwpOworICAgICAgICB9CisgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCks
IEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3IgcmV0dXJuZWQgbnVsbCIpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIG1ha2VTdHJpbmcoImludmFsaWQgdHlwZSAiLCBn
X3R5cGVfbmFtZShHX1ZBTFVFX1RZUEUoJnJldHVyblZhbHVlKSksICIgcmV0dXJuZWQgYnkgY29u
c3RydWN0b3IiKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgSlNDQ2FsbGJhY2tGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAgc3RhdGljX2Nhc3Q8SlNDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwpLT5KU0NDYWxsYmFj
a0Z1bmN0aW9uOjp+SlNDQ2FsbGJhY2tGdW5jdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFj
a0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tG
dW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ODViNjNj
NGJhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDYWxsYmFja0Z1bmN0aW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJKU09iamVjdFJlZi5oIgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3MgSlND
Q2xhc3M7CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NDYWxsYmFja0Z1bmN0aW9uIDog
cHVibGljIEludGVybmFsRnVuY3Rpb24geworICAgIGZyaWVuZCBzdHJ1Y3QgQVBJQ2FsbGJhY2tG
dW5jdGlvbjsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKwor
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIEZ1bmN0aW9uLAorICAgICAgICBNZXRob2Qs
CisgICAgICAgIENvbnN0cnVjdG9yCisgICAgfTsKKworICAgIHN0YXRpYyBKU0NDYWxsYmFja0Z1
bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
VHlwZSwgSlNDQ2xhc3MqLCBHUmVmUHRyPEdDbG9zdXJlPiYmLCBHVHlwZSwgVmVjdG9yPEdUeXBl
PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBKU1ZhbHVlUmVm
IGNhbGwoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAg
SlNPYmplY3RSZWYgY29uc3RydWN0KEpTQ29udGV4dFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisK
K3ByaXZhdGU6CisgICAgSlNDQ2FsbGJhY2tGdW5jdGlvbihWTSYsIFN0cnVjdHVyZSosIFR5cGUs
IEpTQ0NsYXNzKiwgR1JlZlB0cjxHQ2xvc3VyZT4mJiwgR1R5cGUsIFZlY3RvcjxHVHlwZT4mJik7
CisKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgZnVuY3Rpb25DYWxsYmFjaygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25DYWxsYmFjazsgfQorICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3Ry
dWN0b3JDYWxsYmFjayBjb25zdHJ1Y3RDYWxsYmFjaygpIHsgcmV0dXJuIG1fY29uc3RydWN0Q2Fs
bGJhY2s7IH0KKworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBtX2Z1bmN0aW9u
Q2FsbGJhY2s7CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIG1fY29uc3Ry
dWN0Q2FsbGJhY2s7CisgICAgVHlwZSBtX3R5cGU7CisgICAgR1JlZlB0cjxKU0NDbGFzcz4gbV9j
bGFzczsKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBtX2Nsb3N1cmU7CisgICAgR1R5cGUgbV9yZXR1
cm5UeXBlOworICAgIFZlY3RvcjxHVHlwZT4gbV9wYXJhbWV0ZXJzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q2xhc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmY0YWQxOGNjMGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3Bw
CkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDbGFzcy5oIgorCisjaW5jbHVkZSAi
SlNDQ2FsbGJhY2tGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCisvKioKKyAqIFNFQ1RJT046IEpT
Q0NsYXNzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgY3VzdG9tIGNsYXNzCisg
KiBAdGl0bGU6IEpTQ0NsYXNzCisgKiBAc2VlX2Fsc286IEpTQ0NvbnRleHQKKyAqCisgKiBBIEpT
U0NsYXNzIHJlcHJlc2VudHMgYSBjdXN0b20gSmF2YVNjcmlwdCBjbGFzcyByZWdpc3RlcmVkIGJ5
IHRoZSB1c2VyIGluIGEgI0pTQ0NvbnRleHQuCisgKiBJdCBhbGxvd3MgdG8gY3JlYXRlIG5ldyBK
YXZhU2NyaXB0cyBvYmplY3RzIHdob3NlIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBieSB0aGUgdXNl
ciB1c2luZworICogdGhpcyBBUEkuCisgKiBJdCdzIHBvc3NpYmxlIHRvIGFkZCBjb25zdHJ1Y3Rv
cnMsIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgZm9yIGEgSlNTQ2xhc3MgYnkgcHJvdmlkaW5nCisg
KiAjR0NhbGxiYWNrPCEtLSAtLT5zIHRvIGltcGxlbWVudCB0aGVtLgorICovCisKK2VudW0gewor
ICAgIFBST1BfMCwKKworICAgIFBST1BfQ09OVEVYVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJP
UF9QQVJFTlQKK307CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzc1ByaXZhdGUgeworICAgIEpT
Q0NvbnRleHQqIGNvbnRleHQ7CisgICAgQ1N0cmluZyBuYW1lOworICAgIEpTQ2xhc3NSZWYganND
bGFzczsKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb247CisgICAgSlNDQ2xhc3Mq
IHBhcmVudENsYXNzOworICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBwcm90b3R5cGU7Cisg
ICAgSGFzaE1hcDxDU3RyaW5nLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4+IGNvbnN0cnVjdG9y
czsKK30gSlNDQ2xhc3NQcml2YXRlOworCitzdHJ1Y3QgX0pTQ0NsYXNzIHsKKyAgICBHT2JqZWN0
IHBhcmVudDsKKworICAgIEpTQ0NsYXNzUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfSlND
Q2xhc3NDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9ERUZJTkVfVFlQRShKU0NDbGFzcywganNjX2NsYXNzLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0
aWMgdm9pZCBqc2NDbGFzc0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElE
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgSlNDQ2xhc3Mq
IGpzY0NsYXNzID0gSlNDX0NMQVNTKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgewor
ICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IGpzY0NsYXNzLT5wcml2LT5jb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X05BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwganNjQ2xhc3MtPnByaXYt
Pm5hbWUuZGF0YSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBqc2NDbGFzcy0+cHJpdi0+cGFyZW50Q2xh
c3MpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCBqc2NDbGFzc1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7
CisgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0gSlNDX0NMQVNTKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBqc2NDbGFzcy0+
cHJpdi0+Y29udGV4dCA9IEpTQ19DT05URVhUKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAganNjQ2xhc3MtPnBy
aXYtPm5hbWUgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUEFSRU5UOgorICAgICAgICBpZiAoYXV0byogcGFyZW50ID0gZ192YWx1ZV9n
ZXRfb2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgIGpzY0NsYXNzLT5wcml2LT5wYXJlbnRDbGFz
cyA9IEpTQ19DTEFTUyhwYXJlbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBh
cmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NDbGFzc0Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQoreworICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3Qp
OworICAgIGlmIChqc2NDbGFzcy0+cHJpdi0+anNDbGFzcykgeworICAgICAgICBKU0NsYXNzUmVs
ZWFzZShqc2NDbGFzcy0+cHJpdi0+anNDbGFzcyk7CisgICAgICAgIGpzY0NsYXNzLT5wcml2LT5q
c0NsYXNzID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfY2xhc3Nf
cGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBqc2NDbGFz
c0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyhqc2Nf
Y2xhc3NfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIEpTQ0NsYXNz
UHJpdmF0ZSogcHJpdiA9IEpTQ19DTEFTUyhvYmplY3QpLT5wcml2OworICAgIEpTQ2xhc3NEZWZp
bml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICBkZWZpbml0
aW9uLmNsYXNzTmFtZSA9IHByaXYtPm5hbWUuZGF0YSgpOworICAgIHByaXYtPmpzQ2xhc3MgPSBK
U0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcHJvdG90
eXBlTmFtZShnX3N0cmR1cF9wcmludGYoIiVzUHJvdG90eXBlIiwgcHJpdi0+bmFtZS5kYXRhKCkp
KTsKKyAgICBKU0NsYXNzRGVmaW5pdGlvbiBwcm90b3R5cGVEZWZpbml0aW9uID0ga0pTQ2xhc3NE
ZWZpbml0aW9uRW1wdHk7CisgICAgcHJvdG90eXBlRGVmaW5pdGlvbi5jbGFzc05hbWUgPSBwcm90
b3R5cGVOYW1lLmdldCgpOworICAgIEpTQ2xhc3NSZWYgcHJvdG90eXBlQ2xhc3MgPSBKU0NsYXNz
Q3JlYXRlKCZwcm90b3R5cGVEZWZpbml0aW9uKTsKKyAgICBwcml2LT5wcm90b3R5cGUgPSBqc2ND
b250ZXh0R2V0T3JDcmVhdGVKU1dyYXBwZXIocHJpdi0+Y29udGV4dCwgcHJvdG90eXBlQ2xhc3Mp
OworICAgIEpTQ2xhc3NSZWxlYXNlKHByb3RvdHlwZUNsYXNzKTsKKworICAgIGlmIChwcml2LT5w
YXJlbnRDbGFzcykKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoanNjQ29udGV4dEdldEpT
Q29udGV4dChwcml2LT5jb250ZXh0KSwgdG9SZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSwgdG9S
ZWYocHJpdi0+cGFyZW50Q2xhc3MtPnByaXYtPnByb3RvdHlwZS5nZXQoKSkpOworfQorCitzdGF0
aWMgdm9pZCBqc2NfY2xhc3NfY2xhc3NfaW5pdChKU0NDbGFzc0NsYXNzKiBrbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9i
akNsYXNzLT5jb25zdHJ1Y3RlZCA9IGpzY0NsYXNzQ29uc3RydWN0ZWQ7CisgICAgb2JqQ2xhc3Mt
PmRpc3Bvc2UgPSBqc2NDbGFzc0Rpc3Bvc2U7CisgICAgb2JqQ2xhc3MtPmdldF9wcm9wZXJ0eSA9
IGpzY0NsYXNzR2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0eSA9IGpzY0Ns
YXNzU2V0UHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBKU0NDbGFzczpjb250ZXh0OgorICAg
ICAqCisgICAgICogVGhlICNKU0NDb250ZXh0IGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgcmVnaXN0
ZXJlZC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNs
YXNzLAorICAgICAgICBQUk9QX0NPTlRFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAiY29udGV4dCIsCisgICAgICAgICAgICAiSlNDQ29udGV4dCIsCisgICAg
ICAgICAgICAiSlNDIENvbnRleHQiLAorICAgICAgICAgICAgSlNDX1RZUEVfQ09OVEVYVCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
IHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIC8qKgorICAgICAqIEpTQ0NsYXNz
Om5hbWU6CisgICAgICoKKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY2xhc3MuCisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJP
UF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUi
LAorICAgICAgICAgICAgIk5hbWUiLAorICAgICAgICAgICAgIlRoZSBjbGFzcyBuYW1lIiwKKyAg
ICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
V0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAg
ICAvKioKKyAgICAgKiBKU0NDbGFzczpwYXJlbnQ6CisgICAgICoKKyAgICAgKiBUaGUgcGFyZW50
IGNsYXNzIG9yICVOVUxMIGluIGNhc2Ugb2YgZmluYWwgY2xhc3Nlcy4KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBQUk9QX1BB
UkVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQi
LAorICAgICAgICAgICAgIlBhcnRlbnQiLAorICAgICAgICAgICAgIlRoZSBwYXJlbnQgY2xhc3Mi
LAorICAgICAgICAgICAgSlNDX1RZUEVfQ0xBU1MsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
UGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09O
TFkpKSk7Cit9CisKK0dSZWZQdHI8SlNDQ2xhc3M+IGpzY0NsYXNzQ3JlYXRlKEpTQ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEpTQ0NsYXNzKiBwYXJlbnRDbGFzcywgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8SlNDQ2xhc3M+IGpzY0Ns
YXNzID0gYWRvcHRHUmVmKEpTQ19DTEFTUyhnX29iamVjdF9uZXcoSlNDX1RZUEVfQ0xBU1MsICJj
b250ZXh0IiwgY29udGV4dCwgIm5hbWUiLCBuYW1lLCAicGFyZW50IiwgcGFyZW50Q2xhc3MsIG51
bGxwdHIpKSk7CisgICAganNjQ2xhc3MtPnByaXYtPmRlc3Ryb3lGdW5jdGlvbiA9IGRlc3Ryb3lG
dW5jdGlvbjsKKyAgICByZXR1cm4ganNjQ2xhc3M7Cit9CisKK0pTQ2xhc3NSZWYganNjQ2xhc3NH
ZXRKU0NsYXNzKEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICByZXR1cm4ganNjQ2xhc3MtPnBy
aXYtPmpzQ2xhc3M7Cit9CisKK0pTQzo6SlNPYmplY3QqIGpzY0NsYXNzR2V0T3JDcmVhdGVKU1dy
YXBwZXIoSlNDQ2xhc3MqIGpzY0NsYXNzLCBncG9pbnRlciB3cmFwcGVkT2JqZWN0KQoreworICAg
IEpTQ0NsYXNzUHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5wcml2OworICAgIHJldHVybiBqc2ND
b250ZXh0R2V0T3JDcmVhdGVKU1dyYXBwZXIocHJpdi0+Y29udGV4dCwgcHJpdi0+anNDbGFzcywg
dG9SZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSwgd3JhcHBlZE9iamVjdCwgcHJpdi0+ZGVzdHJv
eUZ1bmN0aW9uKTsKK30KKwordm9pZCBqc2NDbGFzc0ludmFsaWRhdGUoSlNDQ2xhc3MqIGpzY0Ns
YXNzKQoreworICAgIGpzY0NsYXNzLT5wcml2LT5jb250ZXh0ID0gbnVsbHB0cjsKK30KKworLyoq
CisgKiBqc2NfY2xhc3NfZ2V0X25hbWU6CisgKiBAanNjX2NsYXNzOiBhIEBKU0NDbGFzcworICoK
KyAqIEdldCB0aGUgY2xhc3MgbmFtZSBvZiBAanNjX2NsYXNzCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiB0aGUgbmFtZSBvZiBAanNjX2NsYXNzCisgKi8KK2NvbnN0IGNoYXIqIGpz
Y19jbGFzc19nZXRfbmFtZShKU0NDbGFzcyoganNjQ2xhc3MpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4g
anNjQ2xhc3MtPnByaXYtPm5hbWUuZGF0YSgpOworfQorCisvKioKKyAqIGpzY19jbGFzc19nZXRf
cGFyZW50OgorICogQGpzY19jbGFzczogYSBASlNDQ2xhc3MKKyAqCisgKiBHZXQgdGhlIHBhcmVu
dCBjbGFzcyBvZiBAanNjX2NsYXNzCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0
aGUgcGFyZW50IGNsYXNzIG9mIEBqc2NfY2xhc3MKKyAqLworSlNDQ2xhc3MqIGpzY19jbGFzc19n
ZXRfcGFyZW50KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NDbGFz
cy0+cHJpdi0+cGFyZW50Q2xhc3M7Cit9CisKKy8qKgorICoganNjX2NsYXNzX2FkZF9jb25zdHJ1
Y3RvcjoKKyAqIEBqc2NfY2xhc3M6IGEgI0pTQ0NsYXNzCisgKiBAbmFtZTogKG51bGxhYmxlKTog
dGhlIGNvbnN0cnVjdG9yIG5hbWUgb3IgJU5VTEwKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5j
KTogYSAjR0NhbGxiYWNrIHRvIGJlIGNhbGxlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQGpz
Y19jbGFzcworICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBA
Y2FsbGJhY2sKKyAqIEBkZXN0cm95X25vdGlmeTogKG51bGxhYmxlKTogZGVzdHJveSBub3RpZmll
ciBmb3IgQHVzZXJfZGF0YQorICogQHJldHVybl90eXBlOiB0aGUgI0dUeXBlIG9mIHRoZSBjb25z
dHJ1Y3RvciByZXR1cm4gdmFsdWUKKyAqIEBuX3BhcmFtczogdGhlIG51bWJlciBvZiBwYXJhbWV0
ZXIgdHlwZXMgdG8gZm9sbG93IG9yIDAgaWYgY29uc3RydWN0b3IgZG9lc24ndCByZWNlaXZlIHBh
cmFtZXRlcnMuCisgKiBALi4uOiBhIGxpc3Qgb2YgI0dUeXBlPCEtLSAtLT5zLCBvbmUgZm9yIGVh
Y2ggcGFyYW1ldGVyLgorICoKKyAqIEFkZCBhIGNvbnN0cnVjdG9yIHRvIEBqc2NfY2xhc3MuIElm
IEBuYW1lIGlzICVOVUxMLCB0aGUgY2xhc3MgbmFtZSB3aWxsIGJlIHVzZWQuIFdoZW4gPGZ1bmN0
aW9uPm5ldzwvZnVuY3Rpb24+CisgKiBpcyB1c2VkIHdpdGggdGhlIGNvbnN0cnVjdG9yIG9yIGpz
Y192YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsKCkgaXMgY2FsbGVkLCBAY2FsbGJhY2sgaXMgaW52b2tl
ZCByZWNlaXZpbmcgdGhlCisgKiBwYXJhbWV0ZXJzIGFuZCBAdXNlcl9kYXRhIGFzIHRoZSBsYXN0
IHBhcmFtZXRlci4gV2hlbiB0aGUgY29uc3RydWN0b3Igb2JqZWN0IGlzIGNsZWFyZWQgaW4gdGhl
ICNKU0NDbGFzcyBjb250ZXh0LAorICogQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoIEB1
c2VyX2RhdGEgYXMgcGFyYW1ldGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUg
Y29uc3RydWN0b3IsIHRoYXQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gb2JqZWN0IGFzIGEgcHJv
cGVydHkgdG8gYmUgYWJsZSB0byB1c2UgaXQuIFVzZQorICoganNjX2NvbnRleHRfc2V0X3ZhbHVl
KCkgdG8gbWFrZSB0aGUgY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgb2JqZWN0
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUgcmVwcmVzZW50
aW5nIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAqLworSlNDVmFsdWUqIGpzY19jbGFzc19hZGRf
Y29uc3RydWN0b3IoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJh
Y2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90
aWZ5LCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSwgbnVsbHB0cik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2FsbGJhY2ssIG51bGxwdHIpOworCisgICAgSlNDQ2xh
c3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIG5h
bWUgPSBwcml2LT5uYW1lLmRhdGEoKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFy
dChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRlcnM7CisgICAg
aWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1D
b3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQodmFfYXJn
KGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIEdSZWZQdHI8
R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2FsbGJhY2ssIHVz
ZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkp
OworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IEpT
Qzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIFN0cmluZzo6ZnJvbVVURjgobmFtZSksCisgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tG
dW5jdGlvbjo6VHlwZTo6Q29uc3RydWN0b3IsIGpzY0NsYXNzLCBXVEZNb3ZlKGNsb3N1cmUpLCBy
ZXR1cm5UeXBlLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBhdXRvIGNvbnN0cnVjdG9yID0g
anNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYoZnVuY3Rpb25P
YmplY3QpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm90b3R5cGUgPSBqc2NDb250ZXh0R2V0
T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2LT5wcm90b3R5cGUuZ2V0KCkp
KTsKKyAgICBhdXRvIG5vbkVudW1lcmFibGUgPSBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5
RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgfCBKU0NfVkFMVUVfUFJPUEVS
VFlfV1JJVEFCTEUpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEo
Y29uc3RydWN0b3IuZ2V0KCksICJwcm90b3R5cGUiLCBub25FbnVtZXJhYmxlLCBwcm90b3R5cGUu
Z2V0KCkpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEocHJvdG90
eXBlLmdldCgpLCAiY29uc3RydWN0b3IiLCBub25FbnVtZXJhYmxlLCBjb25zdHJ1Y3Rvci5nZXQo
KSk7CisgICAgcHJpdi0+Y29uc3RydWN0b3JzLnNldChuYW1lLCBmdW5jdGlvbk9iamVjdCk7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfY2xhc3Nf
YWRkX21ldGhvZDoKKyAqIEBqc2NfY2xhc3M6IGEgI0pTQ0NsYXNzCisgKiBAbmFtZTogdGhlIG1l
dGhvZCBuYW1lCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dDYWxsYmFjayB0byBi
ZSBjYWxsZWQgdG8gaW52b2tlIG1ldGhvZCBAbmFtZSBvZiBAanNjX2NsYXNzCisgKiBAdXNlcl9k
YXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFjaworICogQGRlc3Ry
b3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNlcl9kYXRhCisg
KiBAcmV0dXJuX3R5cGU6IHRoZSAjR1R5cGUgb2YgdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUsIG9y
ICVHX1RZUEVfTk9ORSBpZiB0aGUgbWV0aG9kIGlzIHZvaWQuCisgKiBAbl9wYXJhbXM6IHRoZSBu
dW1iZXIgb2YgcGFyYW1ldGVyIHR5cGVzIHRvIGZvbGxvdyBvciAwIGlmIHRoZSBtZXRob2QgZG9l
c24ndCByZWNlaXZlIHBhcmFtZXRlcnMuCisgKiBALi4uOiBhIGxpc3Qgb2YgI0dUeXBlPCEtLSAt
LT5zLCBvbmUgZm9yIGVhY2ggcGFyYW1ldGVyLgorICoKKyAqIEFkZCBtZXRob2Qgd2l0aCBAbmFt
ZSB0byBAanNjX2NsYXNzLiBXaGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkIGJ5IEphdmFTY3JpcHQg
b3IganNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKCksCisgKiBAY2FsbGJhY2sgaXMgY2Fs
bGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVyLCBmb2xs
b3dlZCBieSB0aGUgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHRoZW4KKyAqIEB1c2VyX2RhdGEgYXMg
bGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAjSlNDQ2xh
c3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoCisgKiBAdXNlcl9kYXRh
IGFzIHBhcmFtZXRlci4KKyAqLwordm9pZCBqc2NfY2xhc3NfYWRkX21ldGhvZChKU0NDbGFzcyog
anNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIg
dXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnksIEdUeXBlIHJldHVyblR5cGUs
IHVuc2lnbmVkIHBhcmFtQ291bnQsIC4uLikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19J
U19DTEFTUyhqc2NDbGFzcykpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChjYWxsYmFjayk7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBq
c2NDbGFzcy0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisg
ICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIHBhcmFtQ291bnQpOworICAgIFZl
Y3RvcjxHVHlwZT4gcGFyYW1ldGVyczsKKyAgICBpZiAocGFyYW1Db3VudCkgeworICAgICAgICBw
YXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFyYW1Db3VudCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLnVuY2hlY2tlZEFwcGVuZCh2YV9hcmcoYXJncywgR1R5cGUpKTsKKyAgICB9CisgICAg
dmFfZW5kKGFyZ3MpOworCisgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3VyZSA9IGFkb3B0R1Jl
ZihnX2NjbG9zdXJlX25ldyhjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Ns
b3N1cmVOb3RpZnk+KGRlc3Ryb3lOb3RpZnkpKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCkpOworICAgIEpTQzo6
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwor
ICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpNZXRob2Qs
IGpzY0NsYXNzLCBXVEZNb3ZlKGNsb3N1cmUpLCByZXR1cm5UeXBlLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKSk7CisgICAgYXV0byBtZXRob2QgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2
LT5jb250ZXh0LCBmdW5jdGlvbk9iamVjdCk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcHJvdG90
eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYocHJp
di0+cHJvdG90eXBlLmdldCgpKSk7CisgICAgYXV0byBub25FbnVtZXJhYmxlID0gc3RhdGljX2Nh
c3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxF
IHwgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKHByb3RvdHlwZS5nZXQoKSwgbmFtZSwgbm9uRW51bWVyYWJsZSwg
bWV0aG9kLmdldCgpKTsKK30KKworLyoqCisgKiBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5OgorICog
QGpzY19jbGFzczogYSAjSlNDQ2xhc3MKKyAqIEBuYW1lOiB0aGUgcHJvcGVydHkgbmFtZQorICog
QHByb3BlcnR5X3R5cGU6IHRoZSAjR1R5cGUgb2YgdGhlIHByb3BlcnR5IHZhbHVlCisgKiBAZ2V0
dGVyOiAoc2NvcGUgYXN5bmMpIChudWxsYWJsZSk6IGEgI0dDYWxsYmFjayB0byBiZSBjYWxsZWQg
dG8gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZQorICogQHNldHRlcjogKHNjb3BlIGFzeW5jKSAobnVs
bGFibGUpOiBhICNHQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHRvIHNldCB0aGUgcHJvcGVydHkgdmFs
dWUKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHRvIHBhc3MgdG8gQGdldHRl
ciBhbmQgQHNldHRlcgorICogQGRlc3Ryb3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5v
dGlmaWVyIGZvciBAdXNlcl9kYXRhCisgKgorICogQWRkIGEgcHJvcGVydHkgd2l0aCBAbmFtZSB0
byBAanNjX2NsYXNzLiBXaGVuIHRoZSBwcm9wZXJ0eSB2YWx1ZSBuZWVkcyB0byBiZSBnZXR0ZWQs
IEBnZXR0ZXIgaXMgY2FsbGVkCisgKiByZWNlaXZpbmcgdGhlIHRoZSBjbGFzcyBpbnN0YW5jZSBh
cyBmaXJzdCBwYXJhbWV0ZXIgYW5kIEB1c2VyX2RhdGEgYXMgbGFzdCBwYXJhbWV0ZXIuIFdoZW4g
dGhlIHByb3BlcnR5CisgKiB2YWx1ZSBuZWVkcyB0byBiZSBzZXQsIEBzZXR0ZXIgaXMgY2FsbGVk
IHJlY2VpdmluZyB0aGUgdGhlIGNsYXNzIGluc3RhbmNlIGFzIGZpcnN0IHBhcmFtZXRlciwgZm9s
bG93ZWQKKyAqIGJ5IHRoZSB2YWx1ZSB0byBiZSBzZXQgYW5kIHRoZW4gQHVzZXJfZGF0YSBhcyB0
aGUgbGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIHByb3BlcnR5IGlzIGNsZWFyZWQgaW4gdGhlCisg
KiAjSlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoIEB1c2Vy
X2RhdGEgYXMgcGFyYW1ldGVyLgorICovCit2b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlND
Q2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdD
YWxsYmFjayBnZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVz
dHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lT
X0NMQVNTKGpzY0NsYXNzKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChuYW1lKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfSU5WQUxJRCAmJiBwcm9wZXJ0eVR5
cGUgIT0gR19UWVBFX05PTkUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ2V0dGVyIHx8IHNldHRl
cik7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBqc2NDbGFzcy0+cHJpdjsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
cHJvdG90eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9S
ZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSk7CisgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfYWNjZXNzb3IocHJvdG90eXBlLmdldCgpLCBuYW1lLCBKU0NfVkFMVUVfUFJPUEVS
VFlfQ09ORklHVVJBQkxFLCBwcm9wZXJ0eVR5cGUsIGdldHRlciwgc2V0dGVyLCB1c2VyRGF0YSwg
ZGVzdHJveU5vdGlmeSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDQ2xhc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFz
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjVjNmE4MTMyMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFz
cy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxB
VElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgSlNDQ2xhc3NfaAorI2RlZmluZSBKU0NDbGFzc19oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisjaW5j
bHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQ
RV9DTEFTUyAgICAgICAgICAgIChqc2NfY2xhc3NfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0NM
QVNTKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpT
Q19UWVBFX0NMQVNTLCBKU0NDbGFzcykpCisjZGVmaW5lIEpTQ19JU19DTEFTUyhvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9DTEFTUykpCisK
K3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0ND
bGFzc0NsYXNzIEpTQ0NsYXNzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpT
Q0NvbnRleHQ7CisKK0pTQ19BUEkgR1R5cGUKK2pzY19jbGFzc19nZXRfdHlwZSAgICAgICAgKHZv
aWQpOworCitKU0NfQVBJIGNvbnN0IGNoYXIgKgoranNjX2NsYXNzX2dldF9uYW1lICAgICAgICAo
SlNDQ2xhc3MgICAgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSBKU0NDbGFzcyAqCitqc2NfY2xh
c3NfZ2V0X3BhcmVudCAgICAgIChKU0NDbGFzcyAgICAgICpqc2NfY2xhc3MpOworCitKU0NfQVBJ
IEpTQ1ZhbHVlICoKK2pzY19jbGFzc19hZGRfY29uc3RydWN0b3IgKEpTQ0NsYXNzICAgICAgKmpz
Y19jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICBjYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIHVzZXJfZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgcmV0dXJuX3R5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAgICAgICBuX3BhcmFtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC4uLik7CisKK0pTQ19BUEkgdm9pZAoranNjX2NsYXNzX2FkZF9t
ZXRob2QgICAgICAoSlNDQ2xhc3MgICAgICAqanNjX2NsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDYWxsYmFjayAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgICAgICAgdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveV9ub3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlw
ZSAgICAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkICAgICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKwor
SlNDX0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX3Byb3BlcnR5ICAgIChKU0NDbGFzcyAgICAgICpq
c2NfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgcHJvcGVydHlfdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgIGdldHRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgIHNldHRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5KTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIEpTQ0NsYXNzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzc1ByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDbGFzc1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMmYzNjQ0ZDRkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJKU0NDbGFzcy5oIgorI2luY2x1ZGUgIkpTQ0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQ
dHIuaD4KKworR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCosIGNv
bnN0IGNoYXIqLCBKU0NDbGFzcyosIEdEZXN0cm95Tm90aWZ5KTsKK0pTQ2xhc3NSZWYganNjQ2xh
c3NHZXRKU0NsYXNzKEpTQ0NsYXNzKik7CitKU0M6OkpTT2JqZWN0KiBqc2NDbGFzc0dldE9yQ3Jl
YXRlSlNXcmFwcGVyKEpTQ0NsYXNzKiwgZ3BvaW50ZXIpOwordm9pZCBqc2NDbGFzc0ludmFsaWRh
dGUoSlNDQ2xhc3MqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NDb250ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250
ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWY4NDUwNjcz
ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5jcHAKQEAgLTAsMCArMSw3NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIK
KworI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2
YXRlLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NXcmFwcGVyTWFwLmgiCisjaW5jbHVk
ZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworLyoqCisgKiBTRUNUSU9OOiBKU0NDb250ZXh0
CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQKKyAq
IEB0aXRsZTogSlNDQ29udGV4dAorICoKKyAqIEpTQ0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFT
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQsIHdoZXJlIGFsbCBvcGVyYXRpb25zCisgKiB0YWtlIHBs
YWNlIGFuZCB3aGVyZSB0aGUgdmFsdWVzIHdpbGwgYmUgYXNzb2NpYXRlZC4KKyAqCisgKiBXaGVu
IGEgbmV3IGNvbnRleHQgaXMgY3JlYXRlZCwgYSBnbG9iYWwgb2JqZWN0IGlzIGFsbG9jYXRlZCBh
bmQgdGhlIGJ1aWx0LWluIEphdmFTY3JpcHQKKyAqIG9iamVjdHMgKE9iamVjdCwgRnVuY3Rpb24s
IFN0cmluZywgQXJyYXkpIGFyZSBwb3B1bGF0ZWQuIFlvdSBjYW4gZXhlY3V0ZSBKYXZhU2NyaXB0
IGluCisgKiB0aGUgY29udGV4dCBieSB1c2luZyBqc2NfY29udGV4dF9ldmFsdWF0ZSgpIG9yIGpz
Y19jb250ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaSgpLgorICogSXQncyBhbHNvIHBvc3Np
YmxlIHRvIHJlZ2lzdGVyIGN1c3RvbSBvYmplY3RzIGluIHRoZSBjb250ZXh0IHdpdGgganNjX2Nv
bnRleHRfcmVnaXN0ZXJfY2xhc3MoKS4KKyAqLworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAg
ICBQUk9QX1ZJUlRVQUxfTUFDSElORSwKK307CisKK3N0cnVjdCBFeGNlcHRpb25IYW5kbGVyIHsK
KyAgICBFeGNlcHRpb25IYW5kbGVyKEpTQ0V4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwgdm9pZCog
dXNlckRhdGEgPSBudWxscHRyLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5RnVuY3Rpb24g
PSBudWxscHRyKQorICAgICAgICA6IGhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgLCB1c2VyRGF0
YSh1c2VyRGF0YSkKKyAgICAgICAgLCBkZXN0cm95Tm90aWZ5RnVuY3Rpb24oZGVzdHJveU5vdGlm
eUZ1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICB+RXhjZXB0aW9uSGFuZGxlcigpCisgICAg
eworICAgICAgICBpZiAoZGVzdHJveU5vdGlmeUZ1bmN0aW9uKQorICAgICAgICAgICAgZGVzdHJv
eU5vdGlmeUZ1bmN0aW9uKHVzZXJEYXRhKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25IYW5kbGVy
KEV4Y2VwdGlvbkhhbmRsZXImJiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6c3dhcChoYW5k
bGVyLCBvdGhlci5oYW5kbGVyKTsKKyAgICAgICAgc3RkOjpzd2FwKHVzZXJEYXRhLCBvdGhlci51
c2VyRGF0YSk7CisgICAgICAgIHN0ZDo6c3dhcChkZXN0cm95Tm90aWZ5RnVuY3Rpb24sIG90aGVy
LmRlc3Ryb3lOb3RpZnlGdW5jdGlvbik7CisgICAgfQorCisgICAgRXhjZXB0aW9uSGFuZGxlcihj
b25zdCBFeGNlcHRpb25IYW5kbGVyJikgPSBkZWxldGU7CisgICAgRXhjZXB0aW9uSGFuZGxlciYg
b3BlcmF0b3I9KGNvbnN0IEV4Y2VwdGlvbkhhbmRsZXImKSA9IGRlbGV0ZTsKKworICAgIEpTQ0V4
Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciB7IG51bGxwdHIgfTsKKyAgICB2b2lkKiB1c2VyRGF0YSB7
IG51bGxwdHIgfTsKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5RnVuY3Rpb24geyBu
dWxscHRyIH07Cit9OworCitzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIHsKKyAgICBHUmVmUHRy
PEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bTsKKyAgICBKU1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRS
ZWY+IGpzQ29udGV4dDsKKyAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uOworICAg
IFZlY3RvcjxFeGNlcHRpb25IYW5kbGVyPiBleGNlcHRpb25IYW5kbGVyczsKK307CisKK1dFQktJ
VF9ERUZJTkVfVFlQRShKU0NDb250ZXh0LCBqc2NfY29udGV4dCwgR19UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQganNjQ29udGV4dFNldFZpcnR1YWxNYWNoaW5lKEpTQ0NvbnRleHQqIGNvbnRl
eHQsIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+JiYgdm0pCit7CisgICAgSlNDQ29udGV4dFBy
aXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmICh2bSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcHJpdi0+dm0pOworICAgICAgICBwcml2LT52bSA9IFdURk1vdmUodm0pOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJpdi0+anNDb250ZXh0KTsKKyAgICAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXAtanNDb250ZXh0IiwgJlRocmVhZDo6
Y3VycmVudCgpKSk7CisgICAgICAgIGlmIChhdXRvKiBkYXRhID0gZ19vYmplY3RfZ2V0X2RhdGEo
R19PQkpFQ1QocHJpdi0+dm0uZ2V0KCkpLCBuYW1lLmdldCgpKSkgeworICAgICAgICAgICAgcHJp
di0+anNDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxDb250ZXh0UmVmPihkYXRhKTsKKyAg
ICAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHByaXYtPnZtLmdldCgpKSwgbmFt
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcHJpdi0+anND
b250ZXh0ID0gSlNSZXRhaW5QdHI8SlNHbG9iYWxDb250ZXh0UmVmPihBZG9wdCwgSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cChqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChwcml2
LT52bS5nZXQoKSksIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
U0dsb2JhbE9iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+d3JhcHBlck1hcCgpKQorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRXcmFw
cGVyTWFwKHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpXcmFwcGVyTWFwPihwcml2LT5qc0NvbnRleHQu
Z2V0KCkpKTsKKyAgICAgICAganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KHByaXYtPnZtLmdl
dCgpLCBjb250ZXh0KTsKKyAgICB9IGVsc2UgaWYgKHByaXYtPnZtKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHByaXYtPmpzQ29udGV4dCk7CisgICAgICAgIGpzY1ZpcnR1YWxNYWNoaW5lUmVt
b3ZlQ29udGV4dChwcml2LT52bS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIHByaXYtPmpzQ29u
dGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPnZtID0gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGpzY0NvbnRleHRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpT
Q0NvbnRleHRQcml2YXRlKiBwcml2ID0gSlNDX0NPTlRFWFQob2JqZWN0KS0+cHJpdjsKKworICAg
IHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQUk9QX1ZJUlRVQUxfTUFDSElORToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcml2LT52bS5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGpzY0NvbnRleHRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQp
IHsKKyAgICBjYXNlIFBST1BfVklSVFVBTF9NQUNISU5FOgorICAgICAgICBpZiAoZ3BvaW50ZXIg
dm0gPSBnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKQorICAgICAgICAgICAganNjQ29udGV4dFNl
dFZpcnR1YWxNYWNoaW5lKGNvbnRleHQsIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+KEpTQ19W
SVJUVUFMX01BQ0hJTkUodm0pKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX2NvbnRleHRfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQg
PSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGlmICghY29udGV4dC0+cHJpdi0+dm0pCisgICAg
ICAgIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFjaGluZShjb250ZXh0LCBhZG9wdEdSZWYoanNjX3Zp
cnR1YWxfbWFjaGluZV9uZXcoKSkpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKEV4Y2VwdGlvbkhhbmRsZXIoW10oSlNDQ29udGV4dCogY29udGV4dCwgSlND
RXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7CisgICAgICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgIH0pKTsKK30KKworc3RhdGlj
IHZvaWQganNjQ29udGV4dERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGpzY0NvbnRleHRTZXRWaXJ0
dWFsTWFjaGluZShjb250ZXh0LCBudWxscHRyKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19j
b250ZXh0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
anNjX2NvbnRleHRfY2xhc3NfaW5pdChKU0NDb250ZXh0Q2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmdldF9wcm9wZXJ0eSA9IGpzY0NvbnRleHRHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
c2V0X3Byb3BlcnR5ID0ganNjQ29udGV4dFNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5jb25z
dHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25zdHJ1Y3RlZDsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9
IGpzY0NvbnRleHREaXNwb3NlOworCisgICAgLyoqCisgICAgICogSlNDQ29udGV4dDp2aXJ0dWFs
LW1hY2hpbmU6CisgICAgICoKKyAgICAgKiBUaGUgI0pTQ1ZpcnR1YWxNYWNoaW5lIGluIHdoaWNo
IHRoZSBjb250ZXh0IHdhcyBjcmVhdGVkLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfVklSVFVBTF9NQUNISU5FLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZpcnR1YWwtbWFjaGlu
ZSIsCisgICAgICAgICAgICAiSlNDVmlydHVhbE1hY2hpbmUiLAorICAgICAgICAgICAgIkpTQyBW
aXJ0dWFsIE1hY2hpbmUiLAorICAgICAgICAgICAgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitHUmVmUHRyPEpTQ0NvbnRleHQ+
IGpzY0NvbnRleHRHZXRPckNyZWF0ZShKU0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0KQorewor
ICAgIGF1dG8gdm0gPSBqc2NWaXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKHRvUmVmKCZ0b0pTKGpz
Q29udGV4dCktPnZtKCkpKTsKKyAgICBpZiAoR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0g
anNjVmlydHVhbE1hY2hpbmVHZXRDb250ZXh0KHZtLmdldCgpLCBqc0NvbnRleHQpKQorICAgICAg
ICByZXR1cm4gY29udGV4dDsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cmR1cF9w
cmludGYoIiVwLWpzQ29udGV4dCIsICZUaHJlYWQ6OmN1cnJlbnQoKSkpOworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHZtLmdldCgpKSwgbmFtZS5nZXQoKSwganNDb250ZXh0KTsKKyAg
ICByZXR1cm4gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZSh2
bS5nZXQoKSkpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYganNjQ29udGV4dEdldEpTQ29udGV4
dChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VSVChKU0NfSVNfQ09OVEVUKGNvbnRl
eHQpKTsKKworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAg
ICByZXR1cm4gcHJpdi0+anNDb250ZXh0LmdldCgpOworfQorCitzdGF0aWMgSlNDOjpXcmFwcGVy
TWFwJiB3cmFwcGVyTWFwKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgYXV0byogbWFwID0g
dG9KU0dsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkpLT53cmFwcGVy
TWFwKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKKyAgICByZXR1cm4gKm1hcDsKK30KKwor
R1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoSlNDQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIHJldHVybiB3cmFwcGVyTWFwKGNv
bnRleHQpLmdvYmplY3RXcmFwcGVyKGNvbnRleHQsIGpzVmFsdWUpOworfQorCit2b2lkIGpzY0Nv
bnRleHRWYWx1ZURlc3Ryb3llZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFs
dWUpCit7CisgICAgd3JhcHBlck1hcChjb250ZXh0KS51bndyYXAoanNWYWx1ZSk7Cit9CisKK0pT
Qzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoSlNDQ29udGV4dCogY29udGV4dCwg
Z3BvaW50ZXIgd3JhcHBlZE9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0
KS5qc1dyYXBwZXIod3JhcHBlZE9iamVjdCk7Cit9CisKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZUpTV3JhcHBlcihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NsYXNzUmVmIGpz
Q2xhc3MsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBncG9pbnRlciB3cmFwcGVkT2JqZWN0LCBHRGVz
dHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgaWYgKGF1dG8qIGpzV3JhcHBlciA9
IGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoY29udGV4dCwgd3JhcHBlZE9iamVjdCkpCisgICAgICAg
IHJldHVybiBqc1dyYXBwZXI7CisKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0KS5jcmVh
dGVKU1dyYXBwcGVyKGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSwganNDbGFzcywgcHJv
dG90eXBlLCB3cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pOworfQorCitncG9pbnRlciBq
c2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0NDb250ZXh0KiBjb250ZXh0LCBKU09iamVjdFJlZiBq
c09iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0KS53cmFwcGVkT2JqZWN0
KGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSwganNPYmplY3QpOworfQorCitDYWxsYmFj
a0RhdGEganNjQ29udGV4dFB1c2hDYWxsYmFjayhKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVl
UmVmIGNhbGxlZVZhbHVlLCBKU1ZhbHVlUmVmIHRoaXNWYWx1ZSwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cykKK3sKKyAgICBUaHJlYWQmIHRocmVhZCA9
IFRocmVhZDo6Y3VycmVudCgpOworICAgIGF1dG8qIHByZXZpb3VzU3RhY2sgPSBzdGF0aWNfY2Fz
dDxDYWxsYmFja0RhdGEqPih0aHJlYWQubV9hcGlEYXRhKTsKKyAgICBDYWxsYmFja0RhdGEgZGF0
YSA9IHsgY29udGV4dCwgV1RGTW92ZShjb250ZXh0LT5wcml2LT5leGNlcHRpb24pLCBjYWxsZWVW
YWx1ZSwgdGhpc1ZhbHVlLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIHByZXZpb3VzU3RhY2sg
fTsKKyAgICB0aHJlYWQubV9hcGlEYXRhID0gJmRhdGE7CisgICAgcmV0dXJuIGRhdGE7Cit9CisK
K3ZvaWQganNjQ29udGV4dFBvcENhbGxiYWNrKEpTQ0NvbnRleHQqIGNvbnRleHQsIENhbGxiYWNr
RGF0YSYmIGRhdGEpCit7CisgICAgVGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsK
KyAgICBjb250ZXh0LT5wcml2LT5leGNlcHRpb24gPSBXVEZNb3ZlKGRhdGEucHJlc2VydmVkRXhj
ZXB0aW9uKTsKKyAgICB0aHJlYWQubV9hcGlEYXRhID0gZGF0YS5uZXh0OworfQorCitKU1ZhbHVl
UmVmIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1B0ckFy
cmF5KiBnQXJyYXksIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NDb250ZXh0UHJp
dmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgYXV0byoganNBcnJheSA9IEpTT2JqZWN0
TWFrZUFycmF5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwgMCwgbnVsbHB0ciwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAoIWdBcnJheSkKKyAgICAgICAgcmV0
dXJuIGpzQXJyYXk7CisKKyAgICBhdXRvKiBqc0FycmF5T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoKmV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ0FycmF5LT5sZW47
ICsraSkgeworICAgICAgICBncG9pbnRlciBpdGVtID0gZ19wdHJfYXJyYXlfaW5kZXgoZ0FycmF5
LCBpKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBpLCBKU1ZhbHVl
TWFrZU51bGwocHJpdi0+anNDb250ZXh0LmdldCgpKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxz
ZSBpZiAoSlNDX0lTX1ZBTFVFKGl0ZW0pKQorICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBpLCBqc2NWYWx1
ZUdldEpTVmFsdWUoSlNDX1ZBTFVFKGl0ZW0pKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMo
cHJpdi0+anNDb250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygiaW52YWxpZCBpdGVtIHR5cGUgaW4g
R1B0ckFycmF5IikpKTsKKworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgIH0K
KworICAgIHJldHVybiBqc0FycmF5OworfQorCitzdGF0aWMgR1JlZlB0cjxHUHRyQXJyYXk+IGpz
Y0NvbnRleHRKU0FycmF5VG9HQXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBq
c0FycmF5LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUq
IHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmIChKU1ZhbHVlSXNOdWxsKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSwganNBcnJheSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYg
KCFKU1ZhbHVlSXNBcnJheShwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXkpKSB7CisgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpz
Q29udGV4dC5nZXQoKSksIG1ha2VTdHJpbmcoImludmFsaWQganMgdHlwZSBmb3IgR1B0ckFycmF5
IikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byoganNBcnJh
eU9iamVjdCA9IEpTVmFsdWVUb09iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXks
IGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFN0cmluZyhBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvKiBqc0xlbmd0
aCA9IEpTT2JqZWN0R2V0UHJvcGVydHkocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2Jq
ZWN0LCBsZW5ndGhTdHJpbmcuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24p
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBsZW5ndGggPSBKU0M6OnRvVUlu
dDMyKEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzTGVuZ3RoLCBleGNl
cHRpb24pKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
d193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJlZikpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBqc0l0ZW0gPSBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGks
IGV4Y2VwdGlvbik7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNJdGVt
ID8ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNJdGVtKS5sZWFrUmVmKCkg
OiBudWxscHRyKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ0FycmF5OworfQorCitKU1ZhbHVlUmVm
IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2
YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKworICAgIHN3aXRjaCAoZ190eXBlX2Z1bmRhbWVu
dGFsKEdfVkFMVUVfVFlQRSh2YWx1ZSkpKSB7CisgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9DSEFSOgorICAgIGNh
c2UgR19UWVBFX0lOVDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpz
Q29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9pbnQpOworICAgIGNhc2UgR19UWVBFX0VO
VU06CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0
KCksIGdfdmFsdWVfZ2V0X2VudW0odmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9GTEFHUzoKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgZ192
YWx1ZV9nZXRfZmxhZ3ModmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9VQ0hBUjoKKyAgICBjYXNl
IEdfVFlQRV9VSU5UOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anND
b250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3VpbnQpOworICAgIGNhc2UgR19UWVBFX0ZM
T0FUOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0Lmdl
dCgpLCB2YWx1ZS0+ZGF0YVswXS52X2Zsb2F0KTsKKyAgICBjYXNlIEdfVFlQRV9ET1VCTEU6Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZh
bHVlLT5kYXRhWzBdLnZfZG91YmxlKTsKKyAgICBjYXNlIEdfVFlQRV9MT05HOgorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0
YVswXS52X2xvbmcpOworICAgIGNhc2UgR19UWVBFX1VMT05HOgorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3Vs
b25nKTsKKyAgICBjYXNlIEdfVFlQRV9JTlQ2NDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
TnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9pbnQ2NCk7Cisg
ICAgY2FzZSBHX1RZUEVfVUlOVDY0OgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
cHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ2NCk7CisgICAgY2Fz
ZSBHX1RZUEVfU1RSSU5HOgorICAgICAgICBpZiAoY29uc3QgY2hhciogc3RyaW5nVmFsdWUgPSBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSB7CisgICAgICAgICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
cmluZ1ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcocHJpdi0+
anNDb250ZXh0LmdldCgpLCBqc1N0cmluZy5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVsbChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgIGNhc2UgR19U
WVBFX1BPSU5URVI6CisgICAgY2FzZSBHX1RZUEVfT0JKRUNUOgorICAgIGNhc2UgR19UWVBFX0JP
WEVEOgorICAgICAgICBpZiAoYXV0byogcHRyID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKSB7
CisgICAgICAgICAgICBpZiAoYXV0byoganNXcmFwcGVyID0ganNjQ29udGV4dEdldEpTV3JhcHBl
cihjb250ZXh0LCBwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0b1JlZihqc1dyYXBwZXIp
OworCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgSlND
X1RZUEVfVkFMVUUpKQorICAgICAgICAgICAgICAgIHJldHVybiBqc2NWYWx1ZUdldEpTVmFsdWUo
SlNDX1ZBTFVFKHB0cikpOworCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9U
WVBFKHZhbHVlKSwgSlNDX1RZUEVfRVhDRVBUSU9OKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
anNjRXhjZXB0aW9uR2V0SlNWYWx1ZShKU0NfRVhDRVBUSU9OKHB0cikpOworCisgICAgICAgICAg
ICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgR19UWVBFX1BUUl9BUlJBWSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoY29udGV4
dCwgc3RhdGljX2Nhc3Q8R1B0ckFycmF5Kj4ocHRyKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdWxsKHByaXYtPmpzQ29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfUEFSQU06CisgICAgY2Fz
ZSBHX1RZUEVfSU5URVJGQUNFOgorICAgIGNhc2UgR19UWVBFX1ZBUklBTlQ6CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6
Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygi
dW5zdXBwb3J0ZWQgdHlwZSAiLCBnX3R5cGVfbmFtZShHX1ZBTFVFX1RZUEUodmFsdWUpKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQocHJpdi0+anNDb250ZXh0LmdldCgpKTsK
K30KKwordm9pZCBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYganNWYWx1ZSwgR1R5cGUgdHlwZSwgR1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+
cHJpdjsKKyAgICBnX3ZhbHVlX2luaXQodmFsdWUsIHR5cGUpOworCisgICAgYXV0byBmdW5kYW1l
bnRhbFR5cGUgPSBnX3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKHZhbHVlKSk7CisgICAg
c3dpdGNoIChmdW5kYW1lbnRhbFR5cGUpIHsKKyAgICBjYXNlIEdfVFlQRV9JTlQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5n
ZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19U
WVBFX0ZMT0FUOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgSlNWYWx1ZVRvTnVt
YmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR19UWVBFX0RPVUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91
YmxlKHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgSlNWYWx1ZVRvQm9vbGVhbihwcml2
LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1RZUEVfU1RSSU5HOgorICAgICAgICBpZiAoIUpTVmFsdWVJc051bGwocHJpdi0+anNDb250ZXh0
LmdldCgpLCBqc1ZhbHVlKSkgeworICAgICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGpzU3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KHByaXYtPmpzQ29udGV4dC5nZXQo
KSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IEpTU3Ry
aW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZy5nZXQoKSk7CisgICAgICAgICAg
ICBhdXRvKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MobWF4U2l6ZSkpOwor
ICAgICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZy5nZXQoKSwgc3RyaW5n
LCBtYXhTaXplKTsKKyAgICAgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHN0cmlu
Zyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVl
LCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfQ0hBUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfc2NoYXIodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRl
eHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdfVFlQRV9VQ0hBUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWNoYXIodmFsdWUsIEpTVmFsdWVU
b051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VSU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfUE9JTlRFUjoK
KyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgY2FzZSBHX1RZUEVfQk9YRUQ6IHsKKyAgICAg
ICAgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFKU1Zh
bHVlSXNOdWxsKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSkpIHsKKyAgICAgICAgICAg
IGF1dG8ganNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QocHJpdi0+anNDb250ZXh0LmdldCgpLCBq
c1ZhbHVlLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB3cmFwcGVkT2JqZWN0ID0ganNjQ29udGV4
dFdyYXBwZWRPYmplY3QoY29udGV4dCwganNPYmplY3QpOworICAgICAgICAgICAgaWYgKCF3cmFw
cGVkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQ
RSh2YWx1ZSksIEpTQ19UWVBFX1ZBTFVFKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGpz
Y1ZhbHVlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjVmFsdWUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQRSh2YWx1ZSksIEpTQ19U
WVBFX0VYQ0VQVElPTikpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBleGNlcHRpb24gPSBq
c2NFeGNlcHRpb25DcmVhdGUoY29udGV4dCwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgZXhjZXB0aW9uLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUodmFsdWUpLCBHX1RZUEVfUFRSX0FSUkFZKSkgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGdBcnJheSA9IGpzY0NvbnRleHRKU0FycmF5VG9HQXJy
YXkoY29udGV4dCwganNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCEqZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgZ192YWx1ZV90YWtlX2JveGVk
KHZhbHVlLCBnQXJyYXkubGVha1JlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihK
U0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpzQ29udGV4dC5nZXQoKSksIEFTQ0lJTGl0
ZXJhbCgiaW52YWxpZCBwb2ludGVyIHR5cGUiKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuZGFtZW50YWxUeXBlID09
IEdfVFlQRV9QT0lOVEVSKQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwg
d3JhcHBlZE9iamVjdCk7CisgICAgICAgIGVsc2UgaWYgKGZ1bmRhbWVudGFsVHlwZSA9PSBHX1RZ
UEVfQk9YRUQpCisgICAgICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd3JhcHBlZE9i
amVjdCk7CisgICAgICAgIGVsc2UgaWYgKEdfSVNfT0JKRUNUKHdyYXBwZWRPYmplY3QpKQorICAg
ICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3cmFwcGVkT2JqZWN0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgQVNDSUlMaXRlcmFsKCJ3cmFwcGVkIG9i
amVjdCBpcyBub3QgYSBHT2JqZWN0IikpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgR19UWVBFX0xPTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIEpTVmFsdWVU
b051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VTE9ORzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFs
dWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9JTlQ2NDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfaW50NjQodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5q
c0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdfVFlQRV9VSU5UNjQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwg
SlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX0VOVU06CisgICAgICAgIGdfdmFs
dWVfc2V0X2VudW0odmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCks
IGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9G
TEFHUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxhZ3ModmFsdWUsIEpTVmFsdWVUb051bWJlcihw
cml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdfVFlQRV9QQVJBTToKKyAgICBjYXNlIEdfVFlQRV9JTlRFUkZBQ0U6Cisg
ICAgY2FzZSBHX1RZUEVfVkFSSUFOVDoKKyAgICBkZWZhdWx0OgorICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0KCkp
LCBtYWtlU3RyaW5nKCJ1bnN1cHBvcnRlZCB0eXBlICIsIGdfdHlwZV9uYW1lKEdfVkFMVUVfVFlQ
RSh2YWx1ZSkpKSkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICoganNjX2Nv
bnRleHRfbmV3OgorICoKKyAqIENyZWF0ZSBhIG5ldyAjSlNDQ29udGV4dC4gVGhlIGNvbnRleHQg
aXMgY3JlYXRlZCBpbiBhIG5ldyAjSlNDVmlydHVhbE1hY2hpbmUuCisgKiBVc2UganNjX2NvbnRl
eHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKCkgdG8gY3JlYXRlIGEgbmV3ICNKU0NDb250ZXh0
IGluIGFuCisgKiBleGlzdGluZyAjSlNDVmlydHVhbE1hY2hpbmUuCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjSlNDQ29udGV4dC4KKyAqLworSlND
Q29udGV4dCoganNjX2NvbnRleHRfbmV3KCkKK3sKKyAgICByZXR1cm4gSlNDX0NPTlRFWFQoZ19v
YmplY3RfbmV3KEpTQ19UWVBFX0NPTlRFWFQsIG51bGxwdHIpKTsKK30KKworLyoqCisgKiBqc2Nf
Y29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmU6CisgKiBAdm06IGEgI0pTQ1ZpcnR1YWxN
YWNoaW5lCisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NDb250ZXh0IGluIEB2aXJ0dWFsX21hY2hp
bmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAj
SlNDQ29udGV4dC4KKyAqLworSlNDQ29udGV4dCoganNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVh
bF9tYWNoaW5lKEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfVklSVFVBTF9NQUNISU5FKHZtKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIEpT
Q19DT05URVhUKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DT05URVhULCAidmlydHVhbC1tYWNoaW5l
Iiwgdm0sIG51bGxwdHIpKTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9nZXRfdmlydHVhbF9t
YWNoaW5lOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqCisgKiBHZXQgdGhlICNKU0NW
aXJ0dWFsTWFjaGluZSB3aGVyZSBAY29udGV4dCB3YXMgY3JlYXRlZC4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjSlNDVmlydHVhbE1hY2hpbmUgd2hlcmUgdGhlICNKU0ND
b250ZXh0IHdhcyBjcmVhdGVkLgorICovCitKU0NWaXJ0dWFsTWFjaGluZSoganNjX2NvbnRleHRf
Z2V0X3ZpcnR1YWxfbWFjaGluZShKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJl
dHVybiBjb250ZXh0LT5wcml2LT52bS5nZXQoKTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9n
ZXRfZXhjZXB0aW9uOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqCisgKiBHZXQgdGhl
IGxhc3QgdW5oYW5kbGVkIGV4Y2VwdGlvbiB0aHJvd24gaW4gQGNvbnRleHQgYnkgQVBJIGZ1bmN0
aW9ucyBjYWxscy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTog
YSAjSlNDRXhjZXB0aW9uIG9yICVOVUxMIGlmIHRoZXJlIGlzbid0IGFueQorICogICAgdW5oYW5k
bGVkIGV4Y2VwdGlvbiBpbiB0aGUgI0pTQ0NvbnRleHQuCisgKi8KK0pTQ0V4Y2VwdGlvbioganNj
X2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihKU0NDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAg
IHJldHVybiBjb250ZXh0LT5wcml2LT5leGNlcHRpb24uZ2V0KCk7Cit9CisKKy8qKgorICoganNj
X2NvbnRleHRfdGhyb3c6CisgKiBAY29udGV4dDogYSAjSlNDQ29udGV4dAorICogQGVycm9yX21l
c3NhZ2U6IGFuIGVycm9yIG1lc3NhZ2UKKyAqCisgKiBUaHJvdyBhbiBleGNlcHRpb24gdG8gQGNv
bnRleHQgdXNpbmcgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2UuIFRoZSBjcmVhdGVkICNKU0NFeGNl
cHRpb24KKyAqIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9u
KCkuCisgKi8KK3ZvaWQganNjX2NvbnRleHRfdGhyb3coSlNDQ29udGV4dCogY29udGV4dCwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NP
TlRFWFQoY29udGV4dCkpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uID0gYWRvcHRH
UmVmKGpzY19leGNlcHRpb25fbmV3KGNvbnRleHQsIGVycm9yTWVzc2FnZSkpOworfQorCisvKioK
KyAqIGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbjoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250
ZXh0CisgKiBAZXhjZXB0aW9uOiBhICNKU0NFeGNlcHRpb24KKyAqCisgKiBUaHJvdyBAZXhjZXB0
aW9uIHRvIEBjb250ZXh0LgorICovCit2b2lkIGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbihK
U0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisKKyAgICBjb250ZXh0LT5wcml2LT5l
eGNlcHRpb24gPSBleGNlcHRpb247Cit9CisKKy8qKgorICogSlNDRXhjZXB0aW9uSGFuZGxlcjoK
KyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CisgKiBAZXhjZXB0aW9uOiBhICNKU0NFeGNlcHRp
b24KKyAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YQorICoKKyAqIEZ1bmN0aW9uIHVzZWQgdG8gaGFu
ZGxlIEphdmFTY3JpcHQgZXhjZXB0aW9ucyBpbiBhICNKU0NDb250ZXh0LgorICovCisKKy8qKgor
ICoganNjX2NvbnRleHRfcHVzaF9leGNlcHRpb25faGFuZGxlcjoKKyAqIEBjb250ZXh0OiBhICNK
U0NDb250ZXh0CisgKiBAaGFuZGxlcjogYSAjSlNDRXhjZXB0aW9uSGFuZGxlcgorICogQHVzZXJf
ZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBAaGFuZGxlcgorICogQGRlc3Ry
b3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNlcl9kYXRhCisg
KgorICogUHVzaCBhbiBleGNlcHRpb24gaGFuZGxlciBpbiBAY29udGV4dC4gV2hlbmV2ZXIgYSBK
YXZhU2NyaXB0IGV4Y2VwdGlvbiBoYXBwZW5zIGluCisgKiB0aGUgI0pTQ0NvbnRleHQsIHRoZSBn
aXZlbiBAaGFuZGxlciB3aWxsIGJlIGNhbGxlZC4gVGhlIGRlZmF1bHQgI0pTQ0V4Y2VwdGlvbkhh
bmRsZXIKKyAqIHNpbXBseSBjYWxscyBqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24oKSB0byB0
aHJvdyB0aGUgZXhjZXB0aW9uIHRvIHRoZSAjSlNDQ29udGV4dC4KKyAqIElmIHlvdSBkb24ndCB3
YW50IHRvIGNhdGNoIHRoZSBleGNlcHRpb24sIGJ1dCBvbmx5IGdldCBub3RpZmllZCBhYm91dCBp
dCwgY2FsbAorICoganNjX2NvbnRleHRfdGhyb3dfZXhjZXB0aW9uKCkgaW4gQGhhbmRsZXIgbGlr
ZSB0aGUgZGVmYXVsdCBvbmUgZG9lcy4KKyAqIFRoZSBsYXN0IGV4Y2VwdGlvbiBoYW5kbGVyIHB1
c2hlZCBpcyB0aGUgb25seSBvbmUgdXNlZCBieSB0aGUgI0pTQ0NvbnRleHQsIHVzZQorICoganNj
X2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVyKCkgdG8gcmVtb3ZlIGl0IGFuZCBzZXQgdGhl
IHByZXZpb3VzIG9uZS4gV2hlbiBAaGFuZGxlcgorICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250
ZXh0LCBAZGVzdHJveV9ub3RpZnkgaSBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRl
ci4KKyAqLwordm9pZCBqc2NfY29udGV4dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKEpTQ0NvbnRl
eHQqIGNvbnRleHQsIEpTQ0V4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwgZ3BvaW50ZXIgdXNlckRh
dGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnkpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChoYW5kbGVy
KTsKKworICAgIGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRs
ZXIsIHVzZXJEYXRhLCBkZXN0cm95Tm90aWZ5IH0pOworfQorCisvKioKKyAqIGpzY19jb250ZXh0
X3BvcF9leGNlcHRpb25faGFuZGxlcjoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CisgKgor
ICogUmVtb3ZlIHRoZSBsYXN0ICNKU0NFeGNlcHRpb25IYW5kbGVyIHByZXZpb3VzbHkgcHVzaGVk
IHRvIEBjb250ZXh0IHdpdGgKKyAqIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIo
KS4KKyAqLwordm9pZCBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIoSlNDQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRl
eHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRs
ZXJzLnNpemUoKSA+IDEpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMu
cmVtb3ZlTGFzdCgpOworfQorCitib29sIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzRXhjZXB0aW9uKQoreworICAgIGlm
ICghanNFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZXhjZXB0
aW9uID0ganNjRXhjZXB0aW9uQ3JlYXRlKGNvbnRleHQsIGpzRXhjZXB0aW9uKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKTsK
KyAgICBjb25zdCBhdXRvJiBleGNlcHRpb25IYW5kbGVyID0gY29udGV4dC0+cHJpdi0+ZXhjZXB0
aW9uSGFuZGxlcnMubGFzdCgpOworICAgIGV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlcihjb250ZXh0
LCBleGNlcHRpb24uZ2V0KCksIGV4Y2VwdGlvbkhhbmRsZXIudXNlckRhdGEpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZ2V0X2N1cnJlbnQ6CisgKgorICog
R2V0IHRoZSAjSlNDQ29udGV4dCB0aGF0IGlzIGN1cnJlbnRseSBleGVjdXRpbmcgYSBmdW5jdGlv
bi4gVGhpcyBzaG91bGQgb25seSBiZQorICogY2FsbGVkIHdpdGhpbiBhIGZ1bmN0aW9uIG9yIG1l
dGhvZCBjYWxsYmFjaywgb3RoZXJ3aXNlICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChudWxsYWJsZSk6IHRoZSAjSlNDQ29udGV4dCB0aGF0
IGlzIGN1cnJlbnRseSBleGVjdXRpbmcuCisgKi8KK0pTQ0NvbnRleHQqIGpzY19jb250ZXh0X2dl
dF9jdXJyZW50KCkKK3sKKyAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tEYXRh
Kj4oVGhyZWFkOjpjdXJyZW50KCkubV9hcGlEYXRhKTsKKyAgICByZXR1cm4gZGF0YSA/IGRhdGEt
PmNvbnRleHQuZ2V0KCkgOiBudWxscHRyOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X2V2YWx1
YXRlOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBjb2RlOiBhIEphdmFTY3JpcHQg
c2NyaXB0IHRvIGV2YWx1YXRlCisgKgorICogRXZhbHVhdGUgQGNvZGUgaW4gQGNvbnRleHQuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZSByZXByZXNlbnRpbmcg
dGhlIGxhc3QgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQuCisgKi8KK0pTQ1ZhbHVlKiBq
c2NfY29udGV4dF9ldmFsdWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjb2Rl
KQoreworICAgIHJldHVybiBqc2NfY29udGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91cmkoY29u
dGV4dCwgY29kZSwgbnVsbHB0cik7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZXZhbHVhdGVf
d2l0aF9zb3VyY2VfdXJpOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBjb2RlOiBh
IEphdmFTY3JpcHQgc2NyaXB0IHRvIGV2YWx1YXRlCisgKiBAdXJpOiB0aGUgc291cmNlIFVSSQor
ICoKKyAqIEV2YWx1YXRlIEBjb2RlIGluIEBjb250ZXh0IHVzaW5nIEB1cmkgYXMgdGhlIHNvdXJj
ZSBVUkkuIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcworICoganNjX2NvbnRleHRfZXZhbHVh
dGUoKSBidXQgQHVyaSB3aWxsIGJlIHNob3duIGluIGV4Y2VwdGlvbnMuIFRoZSBzb3VyY2UgQHVy
aSBkb2Vzbid0CisgKiBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBzY3JpcHQuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGxh
c3QgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfY29u
dGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91cmkoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogY29kZSwgY29uc3QgY2hhciogdXJpKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChjb2RlLCBudWxscHRyKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0SlMoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvZGUpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gc291cmNlVVJJID0gdXJpID8gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
dXJpKSkgOiBudWxscHRyOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlw
dChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCksIHNjcmlwdEpTLmdldCgpLCBudWxscHRy
LCBzb3VyY2VVUkkuZ2V0KCksIDEsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJu
IGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgcmV0dXJuIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIHJlc3VsdCkubGVha1JlZigpOworfQorCisvKioK
KyAqIGpzY19jb250ZXh0X3NldF92YWx1ZToKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0Cisg
KiBAbmFtZTogdGhlIHZhbHVlIG5hbWUKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisgKiBT
ZXQgYSBwcm9wZXJ0eSBvZiBAY29udGV4dCBnbG9iYWwgb2JqZWN0IHdpdGggQG5hbWUgYW5kIEB2
YWx1ZS4KKyAqLwordm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFt
ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKworICAgIGF1
dG8gY29udGV4dE9iamVjdCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIEpT
Q29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkpKTsK
KyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShjb250ZXh0T2JqZWN0LmdldCgpLCBu
YW1lLCB2YWx1ZSk7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZ2V0X3ZhbHVlOgorICogQGNv
bnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBuYW1lOiB0aGUgdmFsdWUgbmFtZQorICoKKyAqIEdl
dCBhIHByb3BlcnR5IG9mIEBjb250ZXh0IGdsb2JhbCBvYmplY3Qgd2l0aCBAbmFtZS4KKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlCisgKi8KK0pTQ1ZhbHVlKiBq
c2NfY29udGV4dF9nZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwg
bnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAg
ICBhdXRvIGNvbnRleHRPYmplY3QgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0
LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgp
KSk7CisgICAgcmV0dXJuIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGNvbnRleHRPYmpl
Y3QuZ2V0KCksIG5hbWUpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNz
OgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBuYW1lOiB0aGUgY2xhc3MgbmFtZQor
ICogQHBhcmVudF9jbGFzczogKG51bGxhYmxlKTogYSAjSlNDQ2xhc3MKKyAqIEBkZXN0cm95X25v
dGlmeTogKG51bGxhYmxlKTogYSBkZXN0cm95IG5vdGlmaWVyIGZvciBjbGFzcyBpbnN0YW5jZXMK
KyAqCisgKiBSZWdpc3RlciBhIGN1c3RvbSBjbGFzcyBpbiBAY29udGV4dCB1c2luZyB0aGUgZ2l2
ZW4gQG5hbWUuIElmIHRoZSBuZXcgY2xhc3MgaW5oZXJpdHMgZnJvbQorICogYW5vdGhlciAjSlND
Q2xhc3MsIHRoZSBwYXJlbnQgc2hvdWxkIGJlIHBhc3NlZCBhcyBAcGFyZW50X2NsYXNzLCBvdGhl
cndpc2UgJU5VTEwgc2hvdWxkIGJlCisgKiB1c2VkLiBXaGVuIGFuIGluc3RhbmNlIG9mIHRoZSAj
SlNDQ2xhc3MgaXMgY2xlYXJlZCBpbiB0aGUgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzCisg
KiBjYWxsZWQgd2l0aCB0aGUgaW5zdGFuY2UgYXMgcGFyYW1ldGVyLgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogYSAjSlNDQ2xhc3MKKyAqLworSlNDQ2xhc3MqIGpzY19jb250ZXh0
X3JlZ2lzdGVyX2NsYXNzKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEpT
Q0NsYXNzKiBwYXJlbnRDbGFzcywgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRy
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBudWxscHRyKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghcGFyZW50Q2xhc3MgfHwgSlNDX0lTX0NMQVNTKHBhcmVudENsYXNzKSwg
bnVsbHB0cik7CisKKyAgICBhdXRvIGpzY0NsYXNzID0ganNjQ2xhc3NDcmVhdGUoY29udGV4dCwg
bmFtZSwgcGFyZW50Q2xhc3MsIGRlc3Ryb3lGdW5jdGlvbik7CisgICAgd3JhcHBlck1hcChjb250
ZXh0KS5yZWdpc3RlckNsYXNzKGpzY0NsYXNzLmdldCgpKTsKKyAgICByZXR1cm4ganNjQ2xhc3Mu
Z2V0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY1YzY3YTFlZWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5o
CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZiAhZGVmaW5lZChfX0pTQ19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJ
T04pCisjZXJyb3IgIk9ubHkgPGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIEpTQ0NvbnRleHRfaAorI2RlZmluZSBKU0NDb250ZXh0X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0RlZmluZXMuaD4KKyNp
bmNsdWRlIDxqc2MvSlNDRXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8anNjL0pTQ0NsYXNzLmg+Cisj
aW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZpcnR1YWxNYWNoaW5l
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9DT05URVhUICAgICAgICAg
ICAgKGpzY19jb250ZXh0X2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19DT05URVhUKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX0NPTlRF
WFQsIEpTQ0NvbnRleHQpKQorI2RlZmluZSBKU0NfSVNfQ09OVEVYVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9DT05URVhUKSkKKyNkZWZp
bmUgSlNDX0NPTlRFWFRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgSlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dENsYXNzKSkKKyNkZWZpbmUgSlND
X0lTX0NPTlRFWFRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgSlNDX1RZUEVfQ09OVEVYVCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX0NPTlRFWFQsIEpT
Q0NvbnRleHRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7
Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dENsYXNzIEpTQ0NvbnRleHRDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDb250ZXh0UHJpdmF0ZSBKU0NDb250ZXh0UHJpdmF0ZTsKKwordHlwZWRl
ZiB2b2lkICgqIEpTQ0V4Y2VwdGlvbkhhbmRsZXIpIChKU0NDb250ZXh0ICAgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ0V4Y2VwdGlvbiAqZXhjZXB0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAg
IHVzZXJfZGF0YSk7CisKK3N0cnVjdCBfSlNDQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJpdjsKK307
CisKK3N0cnVjdCBfSlNDQ29udGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBl
Citqc2NfY29udGV4dF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJ
IEpTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfbmV3ICAgICAgICAgICAgICAgICAgICAgICh2b2lk
KTsKKworSlNDX0FQSSBKU0NDb250ZXh0ICoKK2pzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxf
bWFjaGluZSAoSlNDVmlydHVhbE1hY2hpbmUgICp2bSk7CisKK0pTQ19BUEkgSlNDVmlydHVhbE1h
Y2hpbmUgKgoranNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZSAgICAgIChKU0NDb250ZXh0
ICAgICAgICAgKmNvbnRleHQpOworCitKU0NfQVBJIEpTQ0V4Y2VwdGlvbiAqCitqc2NfY29udGV4
dF9nZXRfZXhjZXB0aW9uICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCk7
CisKK0pTQ19BUEkgdm9pZAoranNjX2NvbnRleHRfdGhyb3cgICAgICAgICAgICAgICAgICAgIChK
U0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqZXJyb3JfbWVzc2FnZSk7CisKK0pTQ19BUEkg
dm9pZAoranNjX2NvbnRleHRfdGhyb3dfZXhjZXB0aW9uICAgICAgICAgIChKU0NDb250ZXh0ICAg
ICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT
Q0V4Y2VwdGlvbiAgICAgICAqZXhjZXB0aW9uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4
dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDRXhjZXB0aW9uSGFuZGxl
ciBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciAgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Rlc3Ryb3lOb3RpZnkgICAgICBkZXN0cm95X25vdGlmeSk7CisKK0pTQ19BUEkgdm9p
ZAoranNjX2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVyICAgIChKU0NDb250ZXh0ICAgICAg
ICAgKmNvbnRleHQpOworCitKU0NfQVBJIEpTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfZ2V0X2N1
cnJlbnQgICAgICAgICAgICAgICh2b2lkKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfY29u
dGV4dF9ldmFsdWF0ZSAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAg
ICAgICpjb2RlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfY29udGV4dF9ldmFsdWF0ZV93
aXRoX3NvdXJjZV91cmkgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpjb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKnVy
aSk7CisKK0pTQ19BUEkgdm9pZAoranNjX2NvbnRleHRfc2V0X3ZhbHVlICAgICAgICAgICAgICAg
IChKU0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19B
UEkgSlNDVmFsdWUgKgoranNjX2NvbnRleHRfZ2V0X3ZhbHVlICAgICAgICAgICAgICAgIChKU0ND
b250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqbmFtZSk7CisKK0pTQ19BUEkgSlNDQ2xhc3MgKgor
anNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SlNDQ2xhc3MgICAgICAgICAgICpwYXJlbnRfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5ICAgICAgZGVzdHJveV9ub3RpZnkpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogSlNDQ29udGV4dF9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ODBkYTE4MGI3YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNDb250ZXh0UmVmLmgiCisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCitHUmVmUHRyPEpTQ0NvbnRleHQ+IGpzY0NvbnRleHRH
ZXRPckNyZWF0ZShKU0dsb2JhbENvbnRleHRSZWYpOworSlNHbG9iYWxDb250ZXh0UmVmIGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoSlNDQ29udGV4dCopOworR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29u
dGV4dEdldE9yQ3JlYXRlVmFsdWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwordm9pZCBqc2ND
b250ZXh0VmFsdWVEZXN0cm95ZWQoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOworSlNDOjpKU09i
amVjdCoganNjQ29udGV4dEdldEpTV3JhcHBlcihKU0NDb250ZXh0KiwgZ3BvaW50ZXIpOworSlND
OjpKU09iamVjdCoganNjQ29udGV4dEdldE9yQ3JlYXRlSlNXcmFwcGVyKEpTQ0NvbnRleHQqLCBK
U0NsYXNzUmVmLCBKU1ZhbHVlUmVmIHByb3RvdHlwZSA9IG51bGxwdHIsIGdwb2ludGVyID0gbnVs
bHB0ciwgR0Rlc3Ryb3lOb3RpZnkgPSBudWxscHRyKTsKK2dwb2ludGVyIGpzY0NvbnRleHRXcmFw
cGVkT2JqZWN0KEpTQ0NvbnRleHQqLCBKU09iamVjdFJlZik7CisKK3N0cnVjdCBDYWxsYmFja0Rh
dGEgeworICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDsKKyAgICBHUmVmUHRyPEpTQ0V4
Y2VwdGlvbj4gcHJlc2VydmVkRXhjZXB0aW9uOworICAgIEpTVmFsdWVSZWYgY2FsbGVlVmFsdWU7
CisgICAgSlNWYWx1ZVJlZiB0aGlzVmFsdWU7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQ7Cisg
ICAgY29uc3QgSlNWYWx1ZVJlZiogYXJndW1lbnRzOworCisgICAgQ2FsbGJhY2tEYXRhKiBuZXh0
OworfTsKK0NhbGxiYWNrRGF0YSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKEpTQ0NvbnRleHQqLCBK
U1ZhbHVlUmVmIGNhbGxlZVZhbHVlLCBKU1ZhbHVlUmVmIHRoaXNWYWx1ZSwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cyk7Cit2b2lkIGpzY0NvbnRleHRQ
b3BDYWxsYmFjayhKU0NDb250ZXh0KiwgQ2FsbGJhY2tEYXRhJiYpOworCitib29sIGpzY0NvbnRl
eHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CitKU1Zh
bHVlUmVmIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoSlNDQ29udGV4dCosIEdQdHJBcnJheSos
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitKU1ZhbHVlUmVmIGpzY0NvbnRleHRHVmFsdWVUb0pT
VmFsdWUoSlNDQ29udGV4dCosIGNvbnN0IEdWYWx1ZSosIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
Cit2b2lkIGpzY0NvbnRleHRKU1ZhbHVlVG9HVmFsdWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYs
IEdUeXBlLCBHVmFsdWUqLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0RlZmluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmMzZmZhMmI0ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0RlZmluZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChf
X0pTQ19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9u
bHkgPGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIEpTQ0RlZmluZXNfaAorI2RlZmluZSBKU0NEZWZpbmVzX2gKKworI2luY2x1ZGUgPGdsaWIu
aD4KKworI2lmZGVmIEdfT1NfV0lOMzIKKyMgICAgaWYgZGVmaW5lZChCVUlMRElOR19KYXZhU2Ny
aXB0Q29yZSkgfHwgZGVmaW5lZChTVEFUSUNBTExZX0xJTktFRF9XSVRIX0phdmFTY3JpcHRDb3Jl
KQorIyAgICAgICAgZGVmaW5lIEpTQ19BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgIGVs
c2UKKyMgICAgICAgIGRlZmluZSBKU0NfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICBl
bmRpZgorI2Vsc2UKKyMgICAgZGVmaW5lIEpTQ19BUEkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSgiZGVmYXVsdCIpKSkKKyNlbmRpZgorCisjZGVmaW5lIEpTQ19ERVBSRUNBVEVEIEpTQ19BUEkg
R19ERVBSRUNBVEVECisjZGVmaW5lIEpTQ19ERVBSRUNBVEVEX0ZPUihmKSBKU0NfQVBJIEdfREVQ
UkVDQVRFRF9GT1IoZikKKworI2VuZGlmIC8qIEpTQ0RlZmluZXNfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGQ2N2Q1NzIwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmNwcApAQCAtMCwwICsx
LDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJBUElDYXN0
LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRp
b25Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTUmV0YWlu
UHRyLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCisvKioKKyAqIFNF
Q1RJT046IEpTQ0V4Y2VwdGlvbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0IGV4
Y2VwdGlvbgorICogQHRpdGxlOiBKU0NFeGNlcHRpb24KKyAqIEBzZWVfYWxzbzogSlNDQ29udGV4
dAorICoKKyAqIEpTQ0V4Y2VwdGlvbiByZXByZXNlbnRzIGEgSmF2YVNjcmlwdCBleGNlcHRpb24u
CisgKi8KKworc3RydWN0IF9KU0NFeGNlcHRpb25Qcml2YXRlIHsKKyAgICBKU0NDb250ZXh0KiBj
b250ZXh0OworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGpzRXhjZXB0aW9uOworICAg
IGJvb2wgY2FjaGVkOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVzc2FnZTsKKyAgICB1bnNpZ25l
ZCBsaW5lTnVtYmVyOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlVVJJOworfTsKKworV0VC
S0lUX0RFRklORV9UWVBFKEpTQ0V4Y2VwdGlvbiwganNjX2V4Y2VwdGlvbiwgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQganNjRXhjZXB0aW9uRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IEpTQ19FWENFUFRJT04ob2JqZWN0KS0+
cHJpdjsKKyAgICBpZiAocHJpdi0+Y29udGV4dCkgeworICAgICAgICBnX29iamVjdF9yZW1vdmVf
d2Vha19wb2ludGVyKEdfT0JKRUNUKHByaXYtPmNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJnByaXYtPmNvbnRleHQpKTsKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7
CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX2V4Y2VwdGlvbl9wYXJlbnRfY2xhc3Mp
LT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY19leGNlcHRpb25fY2xhc3Nf
aW5pdChKU0NFeGNlcHRpb25DbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9IGpz
Y0V4Y2VwdGlvbkRpc3Bvc2U7Cit9CisKK0dSZWZQdHI8SlNDRXhjZXB0aW9uPiBqc2NFeGNlcHRp
b25DcmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc0V4Y2VwdGlvbikKK3sK
KyAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uID0gYWRvcHRHUmVmKEpTQ19FWENF
UFRJT04oZ19vYmplY3RfbmV3KEpTQ19UWVBFX0VYQ0VQVElPTiwgbnVsbHB0cikpKTsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQpOworICAgIEpTQzo6Vk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGV4Y2Vw
dGlvbi0+cHJpdi0+anNFeGNlcHRpb24uc2V0KHZtLCB0b0pTKEpTVmFsdWVUb09iamVjdChqc0Nv
bnRleHQsIGpzRXhjZXB0aW9uLCBudWxscHRyKSkpOworICAgIC8vIFRoZSBjb250ZXh0IGhhcyBh
IHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGV4Y2VwdGlvbiwgc28gd2UgY2FuJ3QgcmVmIHRoZSBj
b250ZXh0LiBXZSB1c2UgYSB3ZWFrCisgICAgLy8gcG9pbnRlciBpbnN0ZWFkIHRvIGludmFsaWRh
dGUgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgY29udGV4dCBpcyBkZXN0cm95ZWQgYmVmb3JlLgorICAg
IGV4Y2VwdGlvbi0+cHJpdi0+Y29udGV4dCA9IGNvbnRleHQ7CisgICAgZ19vYmplY3RfYWRkX3dl
YWtfcG9pbnRlcihHX09CSkVDVChjb250ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZl
eGNlcHRpb24tPnByaXYtPmNvbnRleHQpKTsKKyAgICByZXR1cm4gZXhjZXB0aW9uOworfQorCitK
U1ZhbHVlUmVmIGpzY0V4Y2VwdGlvbkdldEpTVmFsdWUoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24p
Cit7CisgICAgcmV0dXJuIHRvUmVmKGV4Y2VwdGlvbi0+cHJpdi0+anNFeGNlcHRpb24uZ2V0KCkp
OworfQorCit2b2lkIGpzY0V4Y2VwdGlvbkVuc3VyZVByb3BlcnRpZXMoSlNDRXhjZXB0aW9uKiBl
eGNlcHRpb24pCit7CisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IGV4Y2VwdGlvbi0+
cHJpdjsKKyAgICBpZiAocHJpdi0+Y2FjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2
LT5jYWNoZWQgPSB0cnVlOworCisgICAgYXV0byB2YWx1ZSA9IGpzY0NvbnRleHRHZXRPckNyZWF0
ZVZhbHVlKHByaXYtPmNvbnRleHQsIHRvUmVmKHByaXYtPmpzRXhjZXB0aW9uLmdldCgpKSk7Cisg
ICAgYXV0byBwcm9wZXJ0eVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3By
b3BlcnR5KHZhbHVlLmdldCgpLCAibWVzc2FnZSIpKTsKKyAgICBpZiAoIWpzY192YWx1ZV9pc191
bmRlZmluZWQocHJvcGVydHlWYWx1ZS5nZXQoKSkpCisgICAgICAgIHByaXYtPm1lc3NhZ2UucmVz
ZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhwcm9wZXJ0eVZhbHVlLmdldCgpKSk7CisgICAgcHJvcGVy
dHlWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5n
ZXQoKSwgImxpbmUiKSk7CisgICAgaWYgKCFqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHByb3BlcnR5
VmFsdWUuZ2V0KCkpKQorICAgICAgICBwcml2LT5saW5lTnVtYmVyID0ganNjX3ZhbHVlX3RvX2lu
dDMyKHByb3BlcnR5VmFsdWUuZ2V0KCkpOworICAgIHByb3BlcnR5VmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJzb3VyY2VVUkwiKSk7
CisgICAgaWYgKCFqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHByb3BlcnR5VmFsdWUuZ2V0KCkpKQor
ICAgICAgICBwcml2LT5zb3VyY2VVUkkucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhwcm9wZXJ0
eVZhbHVlLmdldCgpKSk7Cit9CisKKy8qKgorICoganNjX2V4Y2VwdGlvbl9uZXc6CisgKiBAY29u
dGV4dDogYSAjSlNDQ29udGV4dAorICogQG1lc3NhZ2U6IHRoZSBlcnJvciBtZXNzYWdlCisgKgor
ICogQ3JlYXRlIGEgbmV3ICNKU0NFeGNlcHRpb24gaW4gQGNvbnRleHQgd2l0aCBAbWVzc2FnZS4K
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IEpTQ0V4Y2VwdGlvbi4KKyAq
LworSlNDRXhjZXB0aW9uKiBqc2NfZXhjZXB0aW9uX25ldyhKU0NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19D
T05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgSlNWYWx1ZVJlZiBqc01lc3NhZ2UgPSBu
dWxscHRyOworICAgIGlmIChtZXNzYWdlKSB7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBqc01lc3NhZ2VTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG1lc3NhZ2UpKTsKKyAgICAgICAganNNZXNzYWdlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNDb250
ZXh0LCBqc01lc3NhZ2VTdHJpbmcuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4ganNjRXhjZXB0
aW9uQ3JlYXRlKGNvbnRleHQsIEpTT2JqZWN0TWFrZUVycm9yKGpzQ29udGV4dCwganNNZXNzYWdl
ID8gMSA6IDAsICZqc01lc3NhZ2UsIG51bGxwdHIpKS5sZWFrUmVmKCk7Cit9CisKKy8qKgorICog
anNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZToKKyAqIEBleGNlcHRpb246IGEgI0pTQ0V4Y2VwdGlv
bgorICoKKyAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZSBvZiBAZXhjZXB0aW9uLgorICoKKyAqIFJl
dHVybnM6IHRoZSBAZXhjZXB0aW9uIGVycm9yIG1lc3NhZ2UuCisgKi8KK2NvbnN0IGNoYXIqIGpz
Y19leGNlcHRpb25fZ2V0X21lc3NhZ2UoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBudWxscHRy
KTsKKworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBq
c2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYt
Pm1lc3NhZ2UuZ2V0KCk7Cit9CisKKy8qKgorICoganNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1i
ZXI6CisgKiBAZXhjZXB0aW9uOiBhICNKU0NFeGNlcHRpb24KKyAqCisgKiBHZXQgdGhlIGxpbmUg
bnVtYmVyIGF0IHdoaWNoIEBleGNlcHRpb24gaGFwcGVuZWQuCisgKgorICogUmV0dXJuczogdGhl
IGxpbmUgbnVtYmVyIG9mIEBleGNlcHRpb24uCisgKi8KK2d1aW50IGpzY19leGNlcHRpb25fZ2V0
X2xpbmVfbnVtYmVyKEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSwgMCk7CisKKyAgICBKU0NFeGNl
cHRpb25Qcml2YXRlKiBwcml2ID0gZXhjZXB0aW9uLT5wcml2OworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHByaXYtPmNvbnRleHQsIDApOworCisgICAganNjRXhjZXB0aW9uRW5zdXJlUHJvcGVy
dGllcyhleGNlcHRpb24pOworICAgIHJldHVybiBwcml2LT5saW5lTnVtYmVyOworfQorCisvKioK
KyAqIGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmk6CisgKiBAZXhjZXB0aW9uOiBhICNKU0NF
eGNlcHRpb24KKyAqCisgKiBHZXQgdGhlIHNvdXJjZSBVUkkgb2YgQGV4Y2VwdGlvbi4KKyAqCisg
KiBSZXR1cm5zOiAobnVsbGFibGUpOiB0aGUgdGhlIHNvdXJjZSBVUkkgb2YgQGV4Y2VwdGlvbiwg
b3IgJU5VTEwuCisgKi8KK2NvbnN0IGNoYXIqIGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmko
SlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlND
X0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBudWxscHRyKTsKKworICAgIEpTQ0V4Y2VwdGlvblBy
aXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
cHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0
aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYtPnNvdXJjZVVSSS5nZXQoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmZkNTdmYWQyNWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmgKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vy
cm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBKU0NFeGNlcHRpb25faAorI2RlZmluZSBKU0NFeGNlcHRpb25faAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfRVhDRVBUSU9OICAgICAgICAgICAgKGpzY19l
eGNlcHRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0VYQ0VQVElPTihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9FWENFUFRJT04s
IEpTQ0V4Y2VwdGlvbikpCisjZGVmaW5lIEpTQ19JU19FWENFUFRJT04ob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfRVhDRVBUSU9OKSkKKyNk
ZWZpbmUgSlNDX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04sIEpTQ0V4Y2VwdGlvbkNsYXNzKSkKKyNk
ZWZpbmUgSlNDX0lTX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04pKQorI2RlZmluZSBKU0NfRVhDRVBUSU9O
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19U
WVBFX0VYQ0VQVElPTiwgSlNDRXhjZXB0aW9uQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlND
RXhjZXB0aW9uIEpTQ0V4Y2VwdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb25DbGFz
cyBKU0NFeGNlcHRpb25DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb25Qcml2YXRl
IEpTQ0V4Y2VwdGlvblByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0Nv
bnRleHQ7CisKK3N0cnVjdCBfSlNDRXhjZXB0aW9uIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKwor
ICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX0pTQ0V4Y2VwdGlvbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBl
Citqc2NfZXhjZXB0aW9uX2dldF90eXBlICAgICAgICAodm9pZCk7CisKK0pTQ19BUEkgSlNDRXhj
ZXB0aW9uICoKK2pzY19leGNlcHRpb25fbmV3ICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICptZXNz
YWdlKTsKKworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19leGNlcHRpb25fZ2V0X21lc3NhZ2Ug
ICAgIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbik7CisKK0pTQ19BUEkgZ3VpbnQKK2pzY19leGNl
cHRpb25fZ2V0X2xpbmVfbnVtYmVyIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbik7CisKK0pTQ19B
UEkgY29uc3QgY2hhciAqCitqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpICAoSlNDRXhjZXB0
aW9uICpleGNlcHRpb24pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogSlNDRXhjZXB0aW9u
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNl
cHRpb25Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0
aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYjVk
YmMwZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NFeGNlcHRpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb24uaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+CisKK0dSZWZQdHI8SlNDRXhjZXB0aW9uPiBqc2NFeGNlcHRpb25DcmVhdGUoSlNDQ29u
dGV4dCosIEpTVmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKEpT
Q0V4Y2VwdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDR0xpYldyYXBwZXJPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYzJjYWJhOWI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDR0xpYldyYXBwZXJPYmplY3QuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0NHTGliV3JhcHBlck9iamVjdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgSlNDR0xpYldyYXBwZXJPYmplY3QoZ3BvaW50ZXIgb2JqZWN0
LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCisgICAgICAgIDogbV9vYmplY3Qob2Jq
ZWN0KQorICAgICAgICAsIG1fZGVzdHJveUZ1bmN0aW9uKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB7
CisgICAgfQorCisgICAgfkpTQ0dMaWJXcmFwcGVyT2JqZWN0KCkKKyAgICB7CisgICAgICAgIGlm
IChtX2Rlc3Ryb3lGdW5jdGlvbikKKyAgICAgICAgICAgIG1fZGVzdHJveUZ1bmN0aW9uKG1fb2Jq
ZWN0KTsKKyAgICB9CisKKyAgICBncG9pbnRlciBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdDsgfQorCitwcml2YXRlOgorICAgIGdwb2ludGVyIG1fb2JqZWN0IHsgbnVsbHB0ciB9Owor
ICAgIEdEZXN0cm95Tm90aWZ5IG1fZGVzdHJveUZ1bmN0aW9uIHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGViMDU0ODg0
OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmFsdWUuY3BwCkBAIC0wLDAgKzEsOTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCisj
aW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNp
bmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCisvKioKKyAq
IFNFQ1RJT046IEpTQ1ZhbHVlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgdmFs
dWUKKyAqIEB0aXRsZTogSlNDVmFsdWUKKyAqIEBzZWVfYWxzbzogSlNDQ29udGV4dAorICoKKyAq
IEpTQ1ZhbHVlIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSB2YWx1ZSBpbiBhICNKU0NDb250
ZXh0LiBUaGUgSlNDVmFsdWUKKyAqIHByb3RlY3RzIHRoZSByZWZlcmVuY2VkIHZhbHVlIGZyb20g
YmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQuCisgKi8KKworZW51bSB7CisgICAgUFJPUF8wLAorCisg
ICAgUFJPUF9DT05URVhULAorfTsKKworc3RydWN0IF9KU0NWYWx1ZVByaXZhdGUgeworICAgIEdS
ZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIGpzVmFsdWU7Cit9Owor
CitXRUJLSVRfREVGSU5FX1RZUEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX09CSkVDVCkK
Kworc3RhdGljIHZvaWQganNjVmFsdWVHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpT
Q1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgc3dp
dGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjVmFs
dWVTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSog
cHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wSUQpIHsK
KyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IEpTQ19DT05U
RVhUKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWYWx1ZURpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19W
QUxVRShvYmplY3QpLT5wcml2OworCisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsKKyAgICAgICAg
YXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1
ZSk7CisgICAgICAgIGpzY0NvbnRleHRWYWx1ZURlc3Ryb3llZChwcml2LT5jb250ZXh0LmdldCgp
LCBwcml2LT5qc1ZhbHVlKTsKKyAgICAgICAgcHJpdi0+anNWYWx1ZSA9IG51bGxwdHI7CisgICAg
ICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNT
KGpzY192YWx1ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIGpzY192YWx1ZV9jbGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBvYmpD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0ganNjVmFsdWVHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
c2V0X3Byb3BlcnR5ID0ganNjVmFsdWVTZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+ZGlzcG9z
ZSA9IGpzY1ZhbHVlRGlzcG9zZTsKKworICAgIC8qKgorICAgICAqIEpTQ1ZhbHVlOmNvbnRleHQ6
CisgICAgICoKKyAgICAgKiBUaGUgI0pTQ0NvbnRleHQgaW4gd2hpY2ggdGhlIHZhbHVlIHdhcyBj
cmVhdGVkLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICJKU0NDb250ZXh0IiwKKyAg
ICAgICAgICAgICJKU0MgQ29udGV4dCIsCisgICAgICAgICAgICBKU0NfVFlQRV9DT05URVhULAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitKU1ZhbHVlUmVmIGpzY1ZhbHVl
R2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLT5wcml2LT5q
c1ZhbHVlOworfQorCitKU0NWYWx1ZSoganNjVmFsdWVDcmVhdGUoSlNDQ29udGV4dCogY29udGV4
dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIGF1dG8qIHZhbHVlID0gSlNDX1ZBTFVFKGdf
b2JqZWN0X25ldyhKU0NfVFlQRV9WQUxVRSwgImNvbnRleHQiLCBjb250ZXh0LCBudWxscHRyKSk7
CisgICAgSlNWYWx1ZVByb3RlY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNW
YWx1ZSk7CisgICAgdmFsdWUtPnByaXYtPmpzVmFsdWUgPSBqc1ZhbHVlOworICAgIHJldHVybiB2
YWx1ZTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X2NvbnRleHQ6CisgKiBAdmFsdWU6IGEg
I0pTQ1ZhbHVlCisgKgorICogR2V0IHRoZSAjSlNDQ29udGV4dCBpbiB3aGljaCBAdmFsdWUgd2Fz
IGNyZWF0ZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0pTQ1ZhbHVl
IGNvbnRleHQuCisgKi8KK0pTQ0NvbnRleHQqIGpzY192YWx1ZV9nZXRfY29udGV4dChKU0NWYWx1
ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVl
KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCk7Cit9
CisKKy8qKgorICoganNjX3ZhbHVlX25ld191bmRlZmluZWQ6CisgKiBAY29udGV4dDogYSAjSlND
Q29udGV4dAorICoKKyAqIENyZWF0ZSBhIG5ldyAjSlNDVmFsdWUgcmVmZXJlbmNpbmcgPGZ1bmN0
aW9uPnVuZGVmaW5lZDwvZnVuY3Rpb24+IGluIEBjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3
X3VuZGVmaW5lZChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2ND
b250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChqc2ND
b250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpKSkubGVha1JlZigpOworfQorCisvKioKKyAqIGpz
Y192YWx1ZV9pc191bmRlZmluZWQ6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKgorICogR2V0
IHdoZXRoZXIgdGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIDxmdW5jdGlvbj51bmRl
ZmluZWQ8L2Z1bmN0aW9uPi4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyB1
bmRlZmluZWQuCisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9pc191bmRlZmluZWQoSlNDVmFsdWUq
IHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSks
IEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAg
IHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5j
b250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25l
d19udWxsOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqCisgKiBDcmVhdGUgYSBuZXcg
I0pTQ1ZhbHVlIHJlZmVyZW5jaW5nIDxmdW5jdGlvbj5udWxsPC9mdW5jdGlvbj4gaW4gQGNvbnRl
eHQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KKyAqLwor
SlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfbnVsbChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsK
KworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVl
TWFrZU51bGwoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSkpLmxlYWtSZWYoKTsKK30K
KworLyoqCisgKiBqc2NfdmFsdWVfaXNfbnVsbDoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAq
CisgKiBHZXQgd2hldGhlciB0aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgPGZ1bmN0
aW9uPm51bGw8L2Z1bmN0aW9uPi4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBp
cyBudWxsLgorICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfbnVsbChKU0NWYWx1ZSogdmFsdWUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0Up
OworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJu
IEpTVmFsdWVJc051bGwoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgp
KSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25ld19udW1iZXI6Cisg
KiBAY29udGV4dDogYSAjSlNDQ29udGV4dAorICogQG51bWJlcjogYSBudW1iZXIKKyAqCisgKiBD
cmVhdGUgYSBuZXcgI0pTQ1ZhbHVlIGZyb20gQG51bWJlci4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19u
dW1iZXIoSlNDQ29udGV4dCogY29udGV4dCwgZG91YmxlIG51bWJlcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdW1i
ZXIoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwgbnVtYmVyKSkubGVha1JlZigpOwor
fQorCisvKioKKyAqIGpzY192YWx1ZV9pc19udW1iZXI6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVl
CisgKgorICogR2V0IHdoZXRoZXIgdGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIGEg
bnVtYmVyLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgbnVtYmVyLgor
ICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfbnVtYmVyKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAg
ICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1
ZUlzTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHBy
aXYtPmpzVmFsdWUpOworfQorCisvKioKKyAqIGpzY192YWx1ZV90b19kb3VibGU6CisgKiBAdmFs
dWU6IGEgI0pTQ1ZhbHVlCisgKgorICogQ29udmVydCBAdmFsdWUgdG8gYSBkb3VibGUuCisgKgor
ICogUmV0dXJuczogYSAjZ2RvdWJsZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24uCisgKi8KK2Rv
dWJsZSBqc2NfdmFsdWVfdG9fZG91YmxlKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVl
LT5wcml2OworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvIHJl
c3VsdCA9IEpTVmFsdWVUb051bWJlcihqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRl
eHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfdG9faW50MzI6
CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKgorICogQ29udmVydCBAdmFsdWUgdG8gYSAjZ2lu
dDMyLgorICoKKyAqIFJldHVybnM6IGEgI2dpbnQzMiByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24u
CisgKi8KK2dpbnQzMiBqc2NfdmFsdWVfdG9faW50MzIoSlNDVmFsdWUqIHZhbHVlKQoreworICAg
IHJldHVybiBKU0M6OnRvSW50MzIoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1ZSkpOworfQorCisv
KioKKyAqIGpzY192YWx1ZV9uZXdfYm9vbGVhbjoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0
CisgKiBAdmFsdWU6IGEgI2dib29sZWFuCisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NWYWx1ZSBm
cm9tIEB2YWx1ZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUu
CisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oSlNDQ29udGV4dCogY29udGV4
dCwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NP
TlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNy
ZWF0ZVZhbHVlKGNvbnRleHQsIEpTVmFsdWVNYWtlQm9vbGVhbihqc2NDb250ZXh0R2V0SlNDb250
ZXh0KGNvbnRleHQpLCB2YWx1ZSkpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVf
aXNfYm9vbGVhbjoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisgKiBHZXQgd2hldGhlciB0
aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYSBib29sZWFuLgorICoKKyAqIFJldHVy
bnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbi4KKyAqLworZ2Jvb2xlYW4ganNjX3Zh
bHVlX2lzX2Jvb2xlYW4oSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSog
cHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNCb29sZWFuKGpzY0NvbnRl
eHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQor
CisvKioKKyAqIGpzY192YWx1ZV90b19ib29sZWFuOgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQor
ICoKKyAqIENvbnZlcnQgQHZhbHVlIHRvIGEgYm9vbGVhbi4KKyAqCisgKiBSZXR1cm5zOiBhICNn
Ym9vbGVhbiByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24uCisgKi8KK2dib29sZWFuIGpzY192YWx1
ZV90b19ib29sZWFuKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHBy
aXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihqc2NDb250ZXh0
R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKwor
LyoqCisgKiBqc2NfdmFsdWVfbmV3X3N0cmluZzoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0
CisgKiBAc3RyaW5nOiAobnVsbGFibGUpOiBhIHN0cmluZworICoKKyAqIENyZWF0ZSBhIG5ldyAj
SlNDVmFsdWUgZnJvbSBAc3RyaW5nLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
YSAjSlNDVmFsdWUuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X3N0cmluZyhKU0NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgSlNWYWx1ZVJl
ZiBqc1N0cmluZ1ZhbHVlOworICAgIGlmIChzdHJpbmcpIHsKKyAgICAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGpzU3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzdHJpbmcpKTsKKyAgICAgICAganNTdHJpbmdWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGpz
Y0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIGpzU3RyaW5nLmdldCgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAganNTdHJpbmdWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCksIG51bGxwdHIpOworICAgIHJldHVybiBqc2NDb250ZXh0R2V0
T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc1N0cmluZ1ZhbHVlKS5sZWFrUmVmKCk7Cit9CisKKy8q
KgorICoganNjX3ZhbHVlX2lzX3N0cmluZzoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisg
KiBHZXQgd2hldGhlciB0aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYSBzdHJpbmcK
KyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHN0cmluZworICovCitnYm9v
bGVhbiBqc2NfdmFsdWVfaXNfc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaW5n
KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFs
dWUpOworfQorCisvKioKKyAqIGpzY192YWx1ZV90b19zdHJpbmc6CisgKiBAdmFsdWU6IGEgI0pT
Q1ZhbHVlCisgKgorICogQ29udmVydCBAdmFsdWUgdG8gYSBzdHJpbmcKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IGEgc3RyaW5nIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbi4KKyAq
LworY2hhcioganNjX3ZhbHVlX3RvX3N0cmluZyhKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29u
dGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pKTsKKyAgICBpZiAoanNjQ29u
dGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlv
bikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6ZV90IG1heFNpemUgPSBKU1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoanNTdHJpbmcuZ2V0KCkpOworICAgIGF1dG8q
IHN0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhtYXhTaXplKSk7CisgICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZy5nZXQoKSwgc3RyaW5nLCBtYXhTaXplKTsKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCisvKioKKyAqIGpzY192YWx1ZV9uZXdfYXJyYXk6CisgKiBA
Y29udGV4dDogYSAjSlNDQ29udGV4dAorICogQGZpcnN0X2l0ZW1fdHlwZTogI0dUeXBlIG9mIGZp
cnN0IGl0ZW0sIG9yICVHX1RZUEVfTk9ORQorICogQC4uLjogdmFsdWUgb2YgdGhlIGZpcnN0IGl0
ZW0sIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSB0eXBlL3ZhbHVlIHBhaXJzLCBmb2xsb3dl
ZCBieSAlR19UWVBFX05PTkUuCisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NWYWx1ZSByZWZlcmVu
Y2luZyBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBpdGVtcy4gSWYgQGZpcnN0X2l0ZW1fdHlwZQor
ICogaXMgJUdfVFlQRV9OT05FIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KKyAqLworSlNDVmFsdWUqIGpzY192
YWx1ZV9uZXdfYXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1R5cGUgZmlyc3RJdGVtVHlwZSwg
Li4uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQp
LCBudWxscHRyKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIGF1
dG8qIGpzQXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShqc0NvbnRleHQsIDAsIG51bGxwdHIsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29u
dGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBq
c0FycmF5T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwganNBcnJheSwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0
LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZmlyc3RJdGVt
VHlwZSk7CisgICAgR1R5cGUgaXRlbVR5cGUgPSBmaXJzdEl0ZW1UeXBlOworICAgIHdoaWxlIChp
dGVtVHlwZSAhPSBHX1RZUEVfTk9ORSkgeworICAgICAgICBHVmFsdWUgaXRlbTsKKyAgICAgICAg
R1VuaXF1ZU91dFB0cjxjaGFyPiBlcnJvcjsKKyAgICAgICAgR19WQUxVRV9DT0xMRUNUX0lOSVQo
Jml0ZW0sIGl0ZW1UeXBlLCBhcmdzLCBHX1ZBTFVFX05PQ09QWV9DT05URU5UUywgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBleGNlcHRpb24gPSB0
b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIG1ha2VTdHJpbmcoImZh
aWxlZCB0byBjb2xsZWN0IGFycmF5IGl0ZW06ICIsIGVycm9yLmdldCgpKSkpOworICAgICAgICAg
ICAganNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbik7
CisgICAgICAgICAgICBqc0FycmF5ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byoganNWYWx1ZSA9IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFs
dWUoY29udGV4dCwgJml0ZW0sICZleGNlcHRpb24pOworICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZp
dGVtKTsKKyAgICAgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250
ZXh0LCBleGNlcHRpb24pKSB7CisgICAgICAgICAgICBqc0FycmF5ID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0
SW5kZXgoanNDb250ZXh0LCBqc0FycmF5T2JqZWN0LCBpbmRleCwganNWYWx1ZSwgJmV4Y2VwdGlv
bik7CisgICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4
dCwgZXhjZXB0aW9uKSkgeworICAgICAgICAgICAganNBcnJheSA9IG51bGxwdHI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW1UeXBlID0gdmFfYXJnKGFyZ3Ms
IEdUeXBlKTsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworCisg
ICAgcmV0dXJuIGpzQXJyYXkgPyBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBq
c0FycmF5KS5sZWFrUmVmKCkgOiBudWxscHRyOworfQorCisvKioKKyAqIGpzY192YWx1ZV9uZXdf
YXJyYXlfZnJvbV9nYXJyYXk6CisgKiBAY29udGV4dDogYSAjSlNDQ29udGV4dAorICogQGFycmF5
OiAobnVsbGFibGUpIChlbGVtZW50LXR5cGUgSlNDVmFsdWUpOiBhICNHUHRyQXJyYXkKKyAqCisg
KiBDcmVhdGUgYSBuZXcgI0pTQ1ZhbHVlIHJlZmVyZW5jaW5nIGFuIGFycmF5IHdpdGggdGhlIGl0
ZW1zIGZyb20gQGFycmF5LiBJZiBAYXJyYXkKKyAqIGlzICVOVUxMIG9yIGVtcHR5IGEgbmV3IGVt
cHR5IGFycmF5IHdpbGwgYmUgY3JlYXRlZC4gRWxlbWVudHMgb2YgQGFycmF5IHNob3VsZCBiZQor
ICogcG9pbnRlcnMgdG8gYSAjSlNDVmFsdWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBhICNKU0NWYWx1ZS4KKyAqLworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfYXJyYXlfZnJv
bV9nYXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1B0ckFycmF5KiBnQXJyYXkpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOwor
CisgICAgaWYgKCFnQXJyYXkgfHwgIWdBcnJheS0+bGVuKQorICAgICAgICByZXR1cm4ganNjX3Zh
bHVlX25ld19hcnJheShjb250ZXh0LCBHX1RZUEVfTk9ORSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganNBcnJheSA9IGpzY0NvbnRleHRHQXJyYXlU
b0pTQXJyYXkoY29udGV4dCwgZ0FycmF5LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNv
bnRleHQsIGpzQXJyYXkpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfaXNfYXJy
YXk6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKgorICogR2V0IHdoZXRoZXIgdGhlIHZhbHVl
IHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIGFuIGFycmF5LgorICoKKyAqIFJldHVybnM6IHdoZXRo
ZXIgdGhlIHZhbHVlIGlzIGFuIGFycmF5LgorICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfYXJy
YXkoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19W
QUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVl
LT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNBcnJheShqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworLyoqCisgKiBqc2Nf
dmFsdWVfbmV3X29iamVjdDoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CisgKiBAaW5zdGFu
Y2U6IChudWxsYWJsZSk6IGFuIG9iamVjdCBpbnN0YW5jZSBvciAlTlVMTAorICogQGpzY19jbGFz
czogKG51bGxhYmxlKTogdGhlICNKU0NDbGFzcyBvZiBAaW5zdGFuY2UKKyAqCisgKiBDcmVhdGUg
YSBuZXcgI0pTQ1ZhbHVlIGZyb20gQGluc3RhbmNlLiBJZiBAaW5zdGFuY2UgaXMgJU5VTEwgYSBu
ZXcgZW1wdHkgb2JqZWN0IGlzIGNyZWF0ZWQuCisgKiBXaGVuIEBpbnN0YW5jZSBpcyBwcm92aWRl
ZCwgQGpzY19jbGFzcyBtdXN0IGJlIHByb3ZpZGVkIHRvby4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19v
YmplY3QoSlNDQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgaW5zdGFuY2UsIEpTQ0NsYXNzKiBq
c2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250
ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWluc3RhbmNlIHx8IEpT
Q19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRH
ZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGluc3RhbmNlID8gdG9SZWYoanNjQ2xhc3NHZXRPckNy
ZWF0ZUpTV3JhcHBlcihqc2NDbGFzcywgaW5zdGFuY2UpKSA6IEpTT2JqZWN0TWFrZShqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBudWxscHRyLCBudWxscHRyKSkubGVha1JlZigpOwor
fQorCisvKioKKyAqIGpzY192YWx1ZV9pc19vYmplY3Q6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVl
CisgKgorICogR2V0IHdoZXRoZXIgdGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIGFu
IG9iamVjdC4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qu
CisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9pc19vYmplY3QoSlNDVmFsdWUqIHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKwor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1Zh
bHVlSXNPYmplY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwg
cHJpdi0+anNWYWx1ZSk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5j
ZV9vZjoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqIEBuYW1lOiBhIGNsYXNzIG5hbWUKKyAq
CisgKiBHZXQgd2hldGhlciB0aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYW4gaW5z
dGFuY2Ugb2YgY2xhc3MgQG5hbWUuCisgKgorICogUmV0dXJuczogd2hldGhlciB0aGUgdmFsdWUg
aXMgYW4gb2JqZWN0IGluc3RhbmNlIG9mIGNsYXNzIEBuYW1lLgorICovCitnYm9vbGVhbiBqc2Nf
dmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciog
bmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBG
QUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgRkFMU0UpOworCisgICAgSlND
VmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgLy8gV2UgdXNlIGV2YWx1YXRl
IGhlcmUgYW5kIG5vdCBnZXRfdmFsdWUgYmVjYXVzZSBjbGFzc2VzIGFyZSBub3QgbmVjZXNzYXJp
bHkgYSBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBodHRwOi8vd3d3LmVj
bWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWdsb2JhbC1l
bnZpcm9ubWVudC1yZWNvcmRzCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUocHJpdi0+Y29udGV4dC5nZXQoKSwgbmFtZSkp
OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29u
dGV4dC5nZXQoKSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgY29uc3RydWN0
b3ItPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWUgPSBKU1ZhbHVlSXNJ
bnN0YW5jZU9mQ29uc3RydWN0b3IoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCBvYmplY3QsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJp
di0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCisvKioKKyAqIGpzY192YWx1ZV9vYmplY3Rfc2V0
X3Byb3BlcnR5OgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQorICogQG5hbWU6IHRoZSBwcm9wZXJ0
eSBuYW1lCisgKiBAcHJvcGVydHk6IHRoZSAjSlNDVmFsdWUgdG8gc2V0CisgKgorICogU2V0IEBw
cm9wZXJ0eSB3aXRoIEBuYW1lIG9uIEB2YWx1ZS4KKyAqLwordm9pZCBqc2NfdmFsdWVfb2JqZWN0
X3NldF9wcm9wZXJ0eShKU0NWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIqIG5hbWUsIEpTQ1ZhbHVl
KiBwcm9wZXJ0eSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSkp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0Nf
SVNfVkFMVUUocHJvcGVydHkpKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVl
LT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJp
di0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwor
ICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHByaXYt
PmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOworICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkoanNDb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwgcHJvcGVydHktPnByaXYt
PmpzVmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgJmV4Y2VwdGlvbik7CisgICAganNj
Q29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2Vw
dGlvbik7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHk6CisgKiBA
dmFsdWU6IGEgI0pTQ1ZhbHVlCisgKiBAbmFtZTogdGhlIHByb3BlcnR5IG5hbWUKKyAqCisgKiBH
ZXQgcHJvcGVydHkgd2l0aCBAbmFtZSBmcm9tIEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IHRoZSBwcm9wZXJ0eSAjSlNDVmFsdWUuCisgKi8KK0pTQ1ZhbHVlKiBqc2Nf
dmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eShKU0NWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIqIG5h
bWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVs
bHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQg
PSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1Zh
bHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBp
ZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCks
IGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2
LT5jb250ZXh0LmdldCgpKTsKKworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3Bl
cnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOworICAg
IEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShqc0NvbnRleHQsIG9iamVj
dCwgcHJvcGVydHlOYW1lLmdldCgpLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisg
ICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgp
KTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0
LmdldCgpLCByZXN1bHQpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfb2JqZWN0
X3NldF9wcm9wZXJ0eV9hdF9pbmRleDoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqIEBpbmRl
eDogdGhlIHByb3BlcnR5IGluZGV4CisgKiBAcHJvcGVydHk6IHRoZSAjSlNDVmFsdWUgdG8gc2V0
CisgKgorICogU2V0IEBwcm9wZXJ0eSBhdCBAaW5kZXggb24gQHZhbHVlLgorICovCit2b2lkIGpz
Y192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KEpTQ1ZhbHVlKiB2YWx1ZSwgdW5z
aWduZWQgaW5kZXgsIEpTQ1ZhbHVlKiBwcm9wZXJ0eSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVF
KHByb3BlcnR5KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsK
KyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRl
eHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVl
LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAg
IEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGpzQ29udGV4dCwgb2JqZWN0LCBpbmRleCwgcHJv
cGVydHktPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGpzY0NvbnRleHRIYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pOworfQorCisv
KioKKyAqIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4OgorICogQHZhbHVl
OiBhICNKU0NWYWx1ZQorICogQGluZGV4OiB0aGUgcHJvcGVydHkgaW5kZXgKKyAqCisgKiBHZXQg
cHJvcGVydHkgYXQgQGluZGV4IGZyb20gQHZhbHVlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogdGhlIHByb3BlcnR5ICNKU0NWYWx1ZS4KKyAqLworSlNDVmFsdWUqIGpzY192YWx1
ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KEpTQ1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQg
aW5kZXgpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwg
bnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAg
ICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQu
Z2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVj
dFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHBy
aXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVf
bmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworCisgICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChqc0NvbnRleHQsIG9iamVjdCwgaW5k
ZXgsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192
YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGpz
Y0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIHJlc3VsdCkubGVh
a1JlZigpOworfQorCitzdGF0aWMgR1JlZlB0cjxKU0NWYWx1ZT4ganNjVmFsdWVDYWxsRnVuY3Rp
b24oSlNDVmFsdWUqIHZhbHVlLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNDOjpKU0NDYWxsYmFj
a0Z1bmN0aW9uOjpUeXBlIGZ1bmN0aW9uVHlwZSwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgR1R5
cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCB2YV9saXN0IGFyZ3MpCit7CisgICAgSlNDVmFsdWVQcml2
YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4
dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gbnVsbHB0cjsKKyAgICBWZWN0b3I8SlNWYWx1ZVJlZj4gYXJndW1lbnRzOworICAg
IEdUeXBlIHBhcmFtZXRlclR5cGUgPSBmaXJzdFBhcmFtZXRlclR5cGU7CisgICAgd2hpbGUgKHBh
cmFtZXRlclR5cGUgIT0gR19UWVBFX05PTkUpIHsKKyAgICAgICAgR1ZhbHVlIHBhcmFtZXRlcjsK
KyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBlcnJvcjsKKyAgICAgICAgR19WQUxVRV9DT0xM
RUNUX0lOSVQoJnBhcmFtZXRlciwgcGFyYW1ldGVyVHlwZSwgYXJncywgR19WQUxVRV9OT0NPUFlf
Q09OVEVOVFMsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAg
ICAgICAgZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRl
eHQpLCBtYWtlU3RyaW5nKCJmYWlsZWQgdG8gY29sbGVjdCBmdW5jdGlvbiBwYXJhbWF0ZXI6ICIs
IGVycm9yLmdldCgpKSkpOworICAgICAgICAgICAganNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8qIGpzVmFsdWUgPSBqc2NDb250ZXh0R1ZhbHVl
VG9KU1ZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksICZwYXJhbWV0ZXIsICZleGNlcHRpb24pOwor
ICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZwYXJhbWV0ZXIpOworICAgICAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikp
CisgICAgICAgICAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29u
dGV4dC5nZXQoKSwganNWYWx1ZSk7CisKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc1ZhbHVl
KTsKKyAgICAgICAgcGFyYW1ldGVyVHlwZSA9IHZhX2FyZyhhcmdzLCBHVHlwZSk7CisgICAgfQor
CisgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CisgICAgc3dpdGNoIChmdW5jdGlvblR5cGUpIHsKKyAg
ICBjYXNlIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6Q29uc3RydWN0b3I6CisgICAg
ICAgIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoanNDb250ZXh0LCBmdW5jdGlv
biwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpNZXRo
b2Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICBjYXNlIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6RnVuY3Rpb246
CisgICAgICAgIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LCBmdW5j
dGlvbiwgdGhpc09iamVjdCwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmRhdGEoKSwgJmV4
Y2VwdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoanNjQ29udGV4dEhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAg
ICAgIHJldHVybiBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4
dC5nZXQoKSkpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYt
PmNvbnRleHQuZ2V0KCksIHJlc3VsdCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9p
bnZva2VfbWV0aG9kOgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQorICogQG5hbWU6IHRoZSBtZXRo
b2QgbmFtZQorICogQGZpcnN0X3BhcmFtZXRlcl90eXBlOiAjR1R5cGUgb2YgZmlyc3QgcGFyYW1l
dGVyLCBvciAlR19UWVBFX05PTkUKKyAqIEAuLi46IHZhbHVlIG9mIHRoZSBmaXJzdCBwYXJhbWV0
ZXIsIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSB0eXBlL3ZhbHVlIHBhaXJzLCBmb2xsb3dl
ZCBieSAlR19UWVBFX05PTkUKKyAqCisgKiBJbnZva2UgbWV0aG9kIHdpdGggQG5hbWUgb24gb2Jq
ZWN0IHJlZmVyZW5jZWQgYnkgQHZhbHVlLCBwYXNzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiBJ
ZgorICogQGZpcnN0X3BhcmFtZXRlcl90eXBlIGlzICVHX1RZUEVfTk9ORSBubyBwYXJhbWV0ZXJz
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QuCisgKiBUaGUgb2JqZWN0IGluc3RhbmNlIHdp
bGwgYmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGV2ZW4gd2hlbiB0aGUgbWV0aG9kIGlzIGEgY3Vz
dG9tIG9uZQorICogcmVnaXN0ZXJlZCB3aXRoIGpzY19jbGFzc19hZGRfbWV0aG9kKCksIHNvIGl0
IHNob3VsZCBuZXZlciBiZSBwYXNzZWQgZXhwbGljaXRseSBhcyBwYXJhbWV0ZXIKKyAqIG9mIHRo
aXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhICNKU0NW
YWx1ZSwgaW4gY2FzZSBvZiB2b2lkIG1ldGhvZHMgYSAjSlNDVmFsdWUgcmVmZXJlbmNpbmcKKyAq
IDxmdW5jdGlvbj51bmRlZmluZWQ8L2Z1bmN0aW9uPiBpcyByZXR1cm5lZC4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBv
ZiB0aGUgbWV0aG9kLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0
aG9kKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgR1R5cGUgZmlyc3RQYXJhbWV0
ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZh
bHVlKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7
CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBq
c0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRl
eHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVm
aW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBtZXRob2ROYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7
CisgICAgSlNWYWx1ZVJlZiBmdW5jdGlvblZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShqc0Nv
bnRleHQsIG9iamVjdCwgbWV0aG9kTmFtZS5nZXQoKSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29u
dGV4dC5nZXQoKSk7CisKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFsdWVUb09iamVj
dChqc0NvbnRleHQsIGZ1bmN0aW9uVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250
ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQu
Z2V0KCkpOworCisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFy
YW1ldGVyVHlwZSk7CisgICAgYXV0byByZXN1bHQgPSBqc2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1
ZSwgZnVuY3Rpb24sIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6TWV0aG9kLCBvYmpl
Y3QsIGZpcnN0UGFyYW1ldGVyVHlwZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAg
cmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7Cit9CisKKy8qKgorICogSlNDVmFsdWVQcm9wZXJ0eUZs
YWdzOgorICogQEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEU6IHRoZSB0eXBlIG9mIHRo
ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG1heSBiZSBjaGFuZ2VkIGFuZCB0aGUKKyAqICBwcm9wZXJ0
eSBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdC4KKyAqIEBKU0Nf
VkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJMRTogdGhlIHByb3BlcnR5IHNob3dzIHVwIGR1cmluZyBl
bnVtZXJhdGlvbiBvZiB0aGUgcHJvcGVydGllcyBvbgorICogIHRoZSBjb3JyZXNwb25kaW5nIG9i
amVjdC4KKyAqIEBKU0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEU6IHRoZSB2YWx1ZSBhc3NvY2lh
dGVkIHdpdGggdGhlIHByb3BlcnR5IG1heSBiZSBjaGFuZ2VkIHdpdGggYW4KKyAqICBhc3NpZ25t
ZW50IG9wZXJhdG9yLiBUaGlzIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IHdoZW4gcGFzc2VkIHRv
IGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29yKCkuCisgKgorICogRmxh
Z3MgdXNlZCB3aGVuIGRlZmluaW5nIHByb3BlcnRpZXMgd2l0aCBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKCkgYW5kCisgKiBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9w
ZXJ0eV9hY2Nlc3NvcigpLgorICovCisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfZGF0YToKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqIEBwcm9wZXJ0eV9uYW1l
OiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGVmaW5lCisgKiBAZmxhZ3M6ICNKU0NWYWx1
ZVByb3BlcnR5RmxhZ3MKKyAqIEBwcm9wZXJ0eV92YWx1ZTogKG51bGxhYmxlKTogdGhlIGRlZmF1
bHQgcHJvcGVydHkgdmFsdWUKKyAqCisgKiBEZWZpbmUgb3IgbW9kaWZ5IGEgcHJvcGVydHkgd2l0
aCBAcHJvcGVydHlfbmFtZSBpbiBvYmplY3QgcmVmZXJlbmNlZCBieSBAdmFsdWUuIFRoaXMgaXMg
ZXF1aXZhbGVudCB0bworICogSmF2YVNjcmlwdCA8ZnVuY3Rpb24+T2JqZWN0LmRlZmluZVByb3Bl
cnR5KCk8L2Z1bmN0aW9uPiB3aGVuIHVzZWQgd2l0aCBhIGRhdGEgZGVzY3JpcHRvci4KKyAqLwor
dm9pZCBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKEpTQ1ZhbHVlKiB2YWx1
ZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0NWYWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3Ms
IEpTQ1ZhbHVlKiBwcm9wZXJ0eVZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lT
X1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcm9wZXJ0eU5hbWUpOworCisg
ICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gZGVzY3JpcHRvciA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChwcml2LT5j
b250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
dHJ1ZVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYm9vbGVhbihwcml2LT5jb250ZXh0
LmdldCgpLCBUUlVFKSk7CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX0NPTkZJ
R1VSQUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRv
ci5nZXQoKSwgImNvbmZpZ3VyYWJsZSIsIHRydWVWYWx1ZS5nZXQoKSk7CisgICAgaWYgKGZsYWdz
ICYgSlNDX1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUpCisgICAgICAgIGpzY192YWx1ZV9vYmpl
Y3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJlbnVtZXJhYmxlIiwgdHJ1ZVZhbHVl
LmdldCgpKTsKKyAgICBpZiAocHJvcGVydHlWYWx1ZSkKKyAgICAgICAganNjX3ZhbHVlX29iamVj
dF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgInZhbHVlIiwgcHJvcGVydHlWYWx1ZSk7
CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKQorICAgICAgICBq
c2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAid3JpdGFibGUi
LCB0cnVlVmFsdWUuZ2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgIk9iamVjdCIp
KTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9pbnZva2VfbWV0aG9kKG9iamVjdC5nZXQoKSwgImRlZmluZVByb3BlcnR5IiwKKyAgICAg
ICAgSlNDX1RZUEVfVkFMVUUsIHZhbHVlLCBHX1RZUEVfU1RSSU5HLCBwcm9wZXJ0eU5hbWUsIEpT
Q19UWVBFX1ZBTFVFLCBkZXNjcmlwdG9yLmdldCgpLCBHX1RZUEVfTk9ORSkpOworfQorCisvKioK
KyAqIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29yOgorICogQHZhbHVl
OiBhICNKU0NWYWx1ZQorICogQHByb3BlcnR5X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0
eSB0byBkZWZpbmUKKyAqIEBmbGFnczogI0pTQ1ZhbHVlUHJvcGVydHlGbGFncworICogQHByb3Bl
cnR5X3R5cGU6IHRoZSAjR1R5cGUgb2YgdGhlIHByb3BlcnR5CisgKiBAZ2V0dGVyOiAoc2NvcGUg
YXN5bmMpIChudWxsYWJsZSk6IGEgI0dDYWxsYmFjayB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoZSBw
cm9wZXJ0eSB2YWx1ZQorICogQHNldHRlcjogKHNjb3BlIGFzeW5jKSAobnVsbGFibGUpOiBhICNH
Q2FsbGJhY2sgdG8gYmUgY2FsbGVkIHRvIHNldCB0aGUgcHJvcGVydHkgdmFsdWUKKyAqIEB1c2Vy
X2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHRvIHBhc3MgdG8gQGdldHRlciBhbmQgQHNldHRl
cgorICogQGRlc3Ryb3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBA
dXNlcl9kYXRhCisgKgorICogRGVmaW5lIG9yIG1vZGlmeSBhIHByb3BlcnR5IHdpdGggQHByb3Bl
cnR5X25hbWUgaW4gb2JqZWN0IHJlZmVyZW5jZWQgYnkgQHZhbHVlLiBXaGVuIHRoZQorICogcHJv
cGVydHkgdmFsdWUgbmVlZHMgdG8gYmUgZ2V0dGVkIG9yIHNldCwgQGdldHRlciBhbmQgQHNldHRl
ciBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQuCisgKiBXaGVuIHRoZSBwcm9wZXJ0eSBpcyBjbGVh
cmVkIGluIHRoZSAjSlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3
aXRoCisgKiBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEph
dmFTY3JpcHQgPGZ1bmN0aW9uPk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpPC9mdW5jdGlvbj4KKyAq
IHdoZW4gdXNlZCB3aXRoIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3IuCisgKi8KK3ZvaWQganNjX3Zh
bHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfYWNjZXNzb3IoSlNDVmFsdWUqIHZhbHVlLCBjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBmbGFncywgR1R5cGUg
cHJvcGVydHlUeXBlLCBHQ2FsbGJhY2sgZ2V0dGVyLCBHQ2FsbGJhY2sgc2V0dGVyLCBncG9pbnRl
ciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlmeSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJv
cGVydHlOYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByb3BlcnR5VHlwZSAhPSBHX1RZUEVf
SU5WQUxJRCAmJiBwcm9wZXJ0eVR5cGUgIT0gR19UWVBFX05PTkUpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoZ2V0dGVyIHx8IHNldHRlcik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2
YWx1ZS0+cHJpdjsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBkZXNjcmlwdG9yID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB0cnVlVmFsdWUgPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld19ib29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAoZmxh
Z3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKQorICAgICAgICBqc2NfdmFsdWVf
b2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiY29uZmlndXJhYmxlIiwgdHJ1
ZVZhbHVlLmdldCgpKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVS
QUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5n
ZXQoKSwgImVudW1lcmFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworCisgICAgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQo
KSkpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOworICAgIGlmIChnZXR0ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3Vy
ZT4gY2xvc3VyZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhnZXR0ZXIsIHVzZXJEYXRhLCBy
ZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkpOworICAgICAg
ICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgiZ2V0
IiksCisgICAgICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1ldGhvZCwg
bnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgcHJvcGVydHlUeXBlLCB7IH0pKTsKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShw
cml2LT5jb250ZXh0LmdldCgpLCBmdW5jdGlvbk9iamVjdCk7CisgICAgICAgIGpzY192YWx1ZV9v
YmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJnZXQiLCBmdW5jdGlvbi5nZXQo
KSk7CisgICAgfQorICAgIGlmIChzZXR0ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3VyZT4g
Y2xvc3VyZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhzZXR0ZXIsIHVzZXJEYXRhLCBnZXR0
ZXIgPyBudWxscHRyIDogcmVpbnRlcnByZXRfY2FzdDxHQ2xvc3VyZU5vdGlmeT4oZGVzdHJveU5v
dGlmeSkpKTsKKyAgICAgICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBB
U0NJSUxpdGVyYWwoInNldCIpLAorICAgICAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpUeXBlOjpNZXRob2QsIG51bGxwdHIsIFdURk1vdmUoY2xvc3VyZSksIEdfVFlQRV9OT05FLCB7
IHByb3BlcnR5VHlwZSB9KSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0g
anNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgZnVuY3Rpb25P
YmplY3QpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9y
LmdldCgpLCAic2V0IiwgZnVuY3Rpb24uZ2V0KCkpOworICAgIH0KKyAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKHByaXYtPmNvbnRl
eHQuZ2V0KCksICJPYmplY3QiKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJkZWZp
bmVQcm9wZXJ0eSIsCisgICAgICAgIEpTQ19UWVBFX1ZBTFVFLCB2YWx1ZSwgR19UWVBFX1NUUklO
RywgcHJvcGVydHlOYW1lLCBKU0NfVFlQRV9WQUxVRSwgZGVzY3JpcHRvci5nZXQoKSwgR19UWVBF
X05PTkUpKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uOgorICogQGNvbnRl
eHQ6IGEgI0pTQ0NvbnRleHQ6CisgKiBAbmFtZTogKG51bGxhYmxlKTogdGhlIGZ1bmN0aW9uIG5h
bWUgb3IgJU5VTEwKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0NhbGxiYWNrLgor
ICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBAY2FsbGJhY2su
CisgKiBAZGVzdHJveV9ub3RpZnk6IChudWxsYWJsZSk6IGRlc3Ryb3kgbm90aWZpZXIgZm9yIEB1
c2VyX2RhdGEKKyAqIEByZXR1cm5fdHlwZTogdGhlICNHVHlwZSBvZiB0aGUgZnVuY3Rpb24gcmV0
dXJuIHZhbHVlLCBvciAlR19UWVBFX05PTkUgaWYgdGhlIGZ1bmN0aW9uIGlzIHZvaWQuCisgKiBA
bl9wYXJhbXM6IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVyIHR5cGVzIHRvIGZvbGxvdyBvciAwIGlm
IHRoZSBmdW5jdGlvbiBkb2Vzbid0IHJlY2VpdmUgcGFyYW1ldGVycy4KKyAqIEAuLi46IGEgbGlz
dCBvZiAjR1R5cGU8IS0tIC0tPnMsIG9uZSBmb3IgZWFjaCBwYXJhbWV0ZXIuCisgKgorICogQ3Jl
YXRlIGEgZnVuY3Rpb24gaW4gQGNvbnRleHQuIElmIEBuYW1lIGlzICVOVUxMIGFuIGFub255bW91
cyBmdW5jdGlvbiB3aWxsIGJlIGNyZWF0ZWQuCisgKiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxs
ZWQgYnkgSmF2YVNjcmlwdCBvciBqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbCgpLCBAY2FsbGJhY2sg
aXMgY2FsbGVkCisgKiByZWNlaXZpbmcgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIHRoZW4g
QHVzZXJfZGF0YSBhcyBsYXN0IHBhcmFtZXRlci4gV2hlbiB0aGUgZnVuY3Rpb24gaXMKKyAqIGNs
ZWFyZWQgaW4gQGNvbnRleHQsIEBkZXN0cm95X25vdGlmeSBpcyBjYWxsZWQgd2l0aCBAdXNlcl9k
YXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pT
Q1ZhbHVlLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19mdW5jdGlvbihKU0NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVy
IHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBHVHlwZSByZXR1cm5UeXBl
LCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNhbGxiYWNrLCBudWxscHRyKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFy
dChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRlcnM7CisgICAg
aWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1D
b3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQodmFfYXJn
KGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIEdSZWZQdHI8
R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2FsbGJhY2ssIHVz
ZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkp
OworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0
KGNvbnRleHQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpT
Qzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIG5hbWUgPyBTdHJpbmc6OmZyb21VVEY4KG5hbWUpIDogQVNDSUlMaXRlcmFsKCJhbm9u
eW1vdXMiKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpGdW5jdGlv
biwgbnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSkpOworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBm
dW5jdGlvbk9iamVjdCkubGVha1JlZigpOworfQorCisvKioKKyAqIGpzY192YWx1ZV9pc19mdW5j
dGlvbjoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisgKiBHZXQgd2hldGhlciB0aGUgdmFs
dWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYSBmdW5jdGlvbgorICoKKyAqIFJldHVybnM6IHdo
ZXRoZXIgdGhlIHZhbHVlIGlzIGEgZnVuY3Rpb24uCisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9p
c19mdW5jdGlvbihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29u
dGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4
dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJuICFleGNlcHRpb24gPyBK
U09iamVjdElzRnVuY3Rpb24oanNDb250ZXh0LCBvYmplY3QpIDogRkFMU0U7Cit9CisKKy8qKgor
ICoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGw6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKiBA
Zmlyc3RfcGFyYW1ldGVyX3R5cGU6ICNHVHlwZSBvZiBmaXJzdCBwYXJhbWV0ZXIsIG9yICVHX1RZ
UEVfTk9ORQorICogQC4uLjogdmFsdWUgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciwgZm9sbG93ZWQg
b3B0aW9uYWxseSBieSBtb3JlIHR5cGUvdmFsdWUgcGFpcnMsIGZvbGxvd2VkIGJ5ICVHX1RZUEVf
Tk9ORQorICoKKyAqIENhbGwgZnVuY3Rpb24gcmVmZXJlbmNlZCBieSBAdmFsdWUsIHBhc3Npbmcg
dGhlIGdpdmVuIHBhcmFtZXRlcnMuIElmIEBmaXJzdF9wYXJhbWV0ZXJfdHlwZQorICogaXMgJUdf
VFlQRV9OT05FIG5vIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgor
ICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYSAjSlNDVmFsdWUsIGluIGNhc2Ug
b2Ygdm9pZCBmdW5jdGlvbnMgYSAjSlNDVmFsdWUgcmVmZXJlbmNpbmcKKyAqIDxmdW5jdGlvbj51
bmRlZmluZWQ8L2Z1bmN0aW9uPiBpcyByZXR1cm5lZAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogYSAjSlNDVmFsdWUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlv
bi4KKyAqLworSlNDVmFsdWUqIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKEpTQ1ZhbHVlKiB2YWx1
ZSwgR1R5cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZh
dGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0
R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFsdWVUb09iamVj
dChqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250
ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQu
Z2V0KCkpOworCisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFy
YW1ldGVyVHlwZSk7CisgICAgYXV0byByZXN1bHQgPSBqc2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1
ZSwgZnVuY3Rpb24sIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6RnVuY3Rpb24sIG51
bGxwdHIsIGZpcnN0UGFyYW1ldGVyVHlwZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2lzX2Nv
bnN0cnVjdG9yOgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQorICoKKyAqIEdldCB3aGV0aGVyIHRo
ZSB2YWx1ZSByZWZlcmVuY2VkIGJ5IEB2YWx1ZSBpcyBhIGNvbnN0cnVjdG9yLgorICoKKyAqIFJl
dHVybnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgY29uc3RydWN0b3IuCisgKi8KK2dib29sZWFu
IGpzY192YWx1ZV9pc19jb25zdHJ1Y3RvcihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNj
Q29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJu
ICFleGNlcHRpb24gPyBKU09iamVjdElzQ29uc3RydWN0b3IoanNDb250ZXh0LCBvYmplY3QpIDog
RkFMU0U7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGw6CisgKiBAdmFs
dWU6IGEgI0pTQ1ZhbHVlCisgKiBAZmlyc3RfcGFyYW1ldGVyX3R5cGU6ICNHVHlwZSBvZiBmaXJz
dCBwYXJhbWV0ZXIsIG9yICVHX1RZUEVfTk9ORQorICogQC4uLjogdmFsdWUgb2YgdGhlIGZpcnN0
IHBhcmFtZXRlciwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlIHR5cGUvdmFsdWUgcGFpcnMs
IGZvbGxvd2VkIGJ5ICVHX1RZUEVfTk9ORQorICoKKyAqIEludm9rZSA8ZnVuY3Rpb24+bmV3PC9m
dW5jdGlvbj4gd2l0aCBjb25zdHJ1Y3RvciByZWZlcmVuY2VkIGJ5IEB2YWx1ZS4gSWYgQGZpcnN0
X3BhcmFtZXRlcl90eXBlCisgKiBpcyAlR19UWVBFX05PTkUgbm8gcGFyYW1ldGVycyB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBhICNKU0NWYWx1ZSByZWZlcmVuY2luZyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QgaW5z
dGFuY2UuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbChKU0NWYWx1
ZSogdmFsdWUsIEdUeXBlIGZpcnN0UGFyYW1ldGVyVHlwZSwgLi4uKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNj
Q29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb24gPSBKU1ZhbHVl
VG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5j
b250ZXh0LmdldCgpKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBm
aXJzdFBhcmFtZXRlclR5cGUpOworICAgIGF1dG8gcmVzdWx0ID0ganNjVmFsdWVDYWxsRnVuY3Rp
b24odmFsdWUsIGZ1bmN0aW9uLCBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6OkNvbnN0
cnVjdG9yLCBudWxscHRyLCBmaXJzdFBhcmFtZXRlclR5cGUsIGFyZ3MpOworICAgIHZhX2VuZChh
cmdzKTsKKworICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMDVmMWY5N2ExMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NWYWx1ZV9oCisj
ZGVmaW5lIEpTQ1ZhbHVlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
anNjL0pTQ0RlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX1ZB
TFVFICAgICAgICAgICAgKGpzY192YWx1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfVkFMVUUo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZ
UEVfVkFMVUUsIEpTQ1ZhbHVlKSkKKyNkZWZpbmUgSlNDX0lTX1ZBTFVFKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1ZBTFVFKSkKKyNkZWZp
bmUgSlNDX1ZBTFVFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZB
TFVFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19U
WVBFX1ZBTFVFKSkKKyNkZWZpbmUgSlNDX1ZBTFVFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlIEpTQ1ZhbHVlOwordHlwZWRlZiBzdHJ1Y3QgX0pT
Q1ZhbHVlQ2xhc3MgSlNDVmFsdWVDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZVByaXZh
dGUgSlNDVmFsdWVQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3MgSlNDQ2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dCBKU0NDb250ZXh0OworCit0eXBlZGVmIGVudW0g
eworICAgIEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgPSAxIDw8IDAsCisgICAgSlND
X1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUgICA9IDEgPDwgMSwKKyAgICBKU0NfVkFMVUVfUFJP
UEVSVFlfV1JJVEFCTEUgICAgID0gMSA8PCAyCit9IEpTQ1ZhbHVlUHJvcGVydHlGbGFnczsKKwor
c3RydWN0IF9KU0NWYWx1ZSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBKU0NWYWx1ZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX0pTQ1ZhbHVl
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNl
cnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworSlNDX0FQSSBKU0NDb250ZXh0ICoKK2pz
Y192YWx1ZV9nZXRfY29udGV4dCAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAg
ICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfdW5kZWZp
bmVkICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCk7CisK
K0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc191bmRlZmluZWQgICAgICAgICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoK
K2pzY192YWx1ZV9uZXdfbnVsbCAgICAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAg
ICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19udWxs
ICAgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwor
CitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfbnVtYmVyICAgICAgICAgICAgICAg
ICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgICAgICAgICAgICAgICAgbnVtYmVyKTsK
K0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19udW1iZXIgICAgICAgICAgICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGRvdWJsZQoranNj
X3ZhbHVlX3RvX2RvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAg
ICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgZ2ludDMyCitqc2NfdmFsdWVfdG9faW50MzIgICAgICAg
ICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQ
SSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAo
SlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIHZhbHVlKTsKK0pTQ19BUEkg
Z2Jvb2xlYW4KK2pzY192YWx1ZV9pc19ib29sZWFuICAgICAgICAgICAgICAgICAgICAgIChKU0NW
YWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVf
dG9fYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZh
bHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X3N0cmluZyAgICAgICAg
ICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKnN0
cmluZyk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19zdHJpbmcgICAgICAgICAg
ICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGNo
YXIgKgoranNjX3ZhbHVlX3RvX3N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVl
ICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25l
d19hcnJheSAgICAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAg
ICAgICAgICAgICAgICBmaXJzdF9pdGVtX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVf
bmV3X2FycmF5X2Zyb21fZ2FycmF5ICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1B0ckFy
cmF5ICAgICAgICAgICAgKmFycmF5KTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lz
X2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1
ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19vYmplY3QgICAgICAgICAg
ICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICBpbnN0
YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NDbGFz
cyAgICAgICAgICAgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVl
X2lzX29iamVjdCAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUp
OworCitKU0NfQVBJIHZvaWQKK2pzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5ICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICAg
KnByb3BlcnR5KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfb2JqZWN0X2dldF9w
cm9wZXJ0eSAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAg
ICpuYW1lKTsKKworSlNDX0FQSSB2b2lkCitqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9h
dF9pbmRleCAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBpbmRleCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAg
ICAgICAgICAqcHJvcGVydHkpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9vYmpl
Y3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAg
ICAgICAgICAgIGluZGV4KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfb2JqZWN0
X2ludm9rZV9tZXRob2QgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUeXBlICAgICAgICAgICAgICAgICBmaXJzdF9wYXJhbWV0ZXJfdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitKU0NfQVBJIHZvaWQKK2pz
Y192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEgICAgIChKU0NWYWx1ZSAgICAgICAg
ICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAgICAgICAgICAgKnByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWVQcm9wZXJ0eUZsYWdzIGZsYWdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAg
ICAgICpwcm9wZXJ0eV92YWx1ZSk7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVlX29iamVjdF9k
ZWZpbmVfcHJvcGVydHlfYWNjZXNzb3IgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAg
ICAgICAqcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBKU0NWYWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIHByb3BlcnR5X3R5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNr
ICAgICAgICAgICAgIGdldHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgc2V0dGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3Rp
ZnkgICAgICAgIGRlc3Ryb3lfbm90aWZ5KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFs
dWVfbmV3X2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAgICAgICAgICAgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2Vy
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ry
b3lOb3RpZnkgICAgICAgIGRlc3Ryb3lfbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICByZXR1cm5fdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAg
ICAgICAgbl9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX2Z1bmN0aW9uICAgICAg
ICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkg
SlNDVmFsdWUgKgoranNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwgICAgICAgICAgICAgICAgICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVHlwZSAgICAgICAgICAgICAgICAgZmlyc3RfcGFyYW1ldGVyX3R5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlND
X0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAg
KEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNj
X3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGwgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAg
ICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VHlwZSAgICAgICAgICAgICAgICAgZmlyc3RfcGFyYW1ldGVyX3R5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIEpTQ1ZhbHVlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNjIxNDQzNTNmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKK0pTVmFsdWVSZWYganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ1ZhbHVlKik7CitKU0NW
YWx1ZSoganNjVmFsdWVDcmVhdGUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZlcnNpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZlcnNpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YmQ3YWE5YzgzNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWZXJzaW9uLmNwcApAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0NWZXJzaW9uLmgiCisKKy8qKgorICogU0VDVElPTjogSlNDVmVy
c2lvbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBQcm92aWRlcyB0aGUgSmF2YVNjcmlwdENvcmUg
dmVyc2lvbgorICogQFRpdGxlOiBKU0NWZXJzaW9uCisgKgorICogUHJvdmlkZXMgY29udmVuaWVu
Y2UgZnVuY3Rpb25zIHJldHVybmluZyBKYXZhU2NyaXB0Q29yZSdzIG1ham9yLCBtaW5vciBhbmQK
KyAqIG1pY3JvIHZlcnNpb25zIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5IHlvdXIgY29k
ZSBpcyBydW5uaW5nCisgKiBhZ2FpbnN0LiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft
ZSBhcyB0aGUKKyAqICNKU0NfTUFKT1JfVkVSU0lPTiwgI0pTQ19NSU5PUl9WRVJTSU9OIG9yCisg
KiAjSlNDX01JQ1JPX1ZFUlNJT04sIHdoaWNoIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBvZiB0aGUg
SmF2YVNjcmlwdENvcmUKKyAqIGhlYWRlcnMgaW5jbHVkZWQgd2hlbiBjb21waWxpbmcgdGhlIGNv
ZGUuCisgKgorICovCisKKy8qKgorICoganNjX2dldF9tYWpvcl92ZXJzaW9uOgorICoKKyAqIFJl
dHVybnMgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJy
YXJ5LgorICogKGUuZy4gaW4gSmF2YVNjcmlwdENvcmUgdmVyc2lvbiAxLjguMyB0aGlzIGlzIDEu
KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIGxpYnJhcnksIHNvIGl0IHJlcHJlc2Vu
dHMgdGhlIEphdmFTY3JpcHRDb3JlIGxpYnJhcnkKKyAqIHlvdXIgY29kZSBpcyBydW5uaW5nIGFn
YWluc3QuIENvbnRyYXN0IHdpdGggdGhlICNKU0NfTUFKT1JfVkVSU0lPTgorICogbWFjcm8sIHdo
aWNoIHJlcHJlc2VudHMgdGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIEphdmFTY3JpcHRDb3JlIGhl
YWRlcnMgeW91CisgKiBoYXZlIGluY2x1ZGVkIHdoZW4gY29tcGlsaW5nIHlvdXIgY29kZS4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEphdmFTY3JpcHRD
b3JlIGxpYnJhcnkKKyAqLworZ3VpbnQganNjX2dldF9tYWpvcl92ZXJzaW9uKHZvaWQpCit7Cisg
ICAgcmV0dXJuIEpTQ19NQUpPUl9WRVJTSU9OOworfQorCisvKioKKyAqIGpzY19nZXRfbWlub3Jf
dmVyc2lvbjoKKyAqCisgKiBSZXR1cm5zIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUg
SmF2YVNjcmlwdENvcmUgbGlicmFyeS4KKyAqIChlLmcuIGluIEphdmFTY3JpcHRDb3JlIHZlcnNp
b24gMS44LjMgdGhpcyBpcyA4LikKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGluIHRoZSBsaWJy
YXJ5LCBzbyBpdCByZXByZXNlbnRzIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5CisgKiB5b3Vy
IGNvZGUgaXMgcnVubmluZyBhZ2FpbnN0LiBDb250cmFzdCB3aXRoIHRoZSAjSlNDX01JTk9SX1ZF
UlNJT04KKyAqIG1hY3JvLCB3aGljaCByZXByZXNlbnRzIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRo
ZSBKYXZhU2NyaXB0Q29yZSBoZWFkZXJzIHlvdQorICogaGF2ZSBpbmNsdWRlZCB3aGVuIGNvbXBp
bGluZyB5b3VyIGNvZGUuCisgKgorICogUmV0dXJuczogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVy
IG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5CisgKi8KK2d1aW50IGpzY19nZXRfbWlub3Jf
dmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBKU0NfTUlOT1JfVkVSU0lPTjsKK30KKworLyoq
CisgKiBqc2NfZ2V0X21pY3JvX3ZlcnNpb246CisgKgorICogUmV0dXJucyB0aGUgbWljcm8gdmVy
c2lvbiBudW1iZXIgb2YgdGhlIEphdmFTY3JpcHRDb3JlIGxpYnJhcnkuCisgKiAoZS5nLiBpbiBK
YXZhU2NyaXB0Q29yZSB2ZXJzaW9uIDEuOC4zIHRoaXMgaXMgMy4pCisgKgorICogVGhpcyBmdW5j
dGlvbiBpcyBpbiB0aGUgbGlicmFyeSwgc28gaXQgcmVwcmVzZW50cyB0aGUgSmF2YVNjcmlwdENv
cmUgbGlicmFyeQorICogeW91ciBjb2RlIGlzIHJ1bm5pbmcgYWdhaW5zdC4gQ29udHJhc3Qgd2l0
aCB0aGUgI0pTQ19NSUNST19WRVJTSU9OCisgKiBtYWNybywgd2hpY2ggcmVwcmVzZW50cyB0aGUg
bWljcm8gdmVyc2lvbiBvZiB0aGUgSmF2YVNjcmlwdENvcmUgaGVhZGVycyB5b3UKKyAqIGhhdmUg
aW5jbHVkZWQgd2hlbiBjb21waWxpbmcgeW91ciBjb2RlLgorICoKKyAqIFJldHVybnM6IHRoZSBt
aWNybyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgSmF2YVNjcmlwdENvcmUgbGlicmFyeQorICovCitn
dWludCBqc2NfZ2V0X21pY3JvX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gSlNDX01JQ1JP
X1ZFUlNJT047Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmVyc2lvbi5oLmluIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZlcnNp
b24uaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDc5Zjk1M2Q4
ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmVyc2lvbi5oLmluCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpT
Q19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDVmVyc2lvbl9oCisjZGVmaW5lIEpTQ1Zl
cnNpb25faAorCisjaW5jbHVkZSA8anNjL0pTQ0RlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisvKioKKyAqIEpTQ19NQUpPUl9WRVJTSU9OOgorICoKKyAqIExpa2UganNjX2dldF9tYWpvcl92
ZXJzaW9uKCksIGJ1dCBmcm9tIHRoZSBoZWFkZXJzIHVzZWQgYXQKKyAqIGFwcGxpY2F0aW9uIGNv
bXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gZnJvbSB0aGUgbGlicmFyeSBsaW5rZWQKKyAqIGFnYWlu
c3QgYXQgYXBwbGljYXRpb24gcnVuIHRpbWUuCisgKi8KKyNkZWZpbmUgSlNDX01BSk9SX1ZFUlNJ
T04gKEBQUk9KRUNUX1ZFUlNJT05fTUFKT1JAKQorCisvKioKKyAqIEpTQ19NSU5PUl9WRVJTSU9O
OgorICoKKyAqIExpa2UganNjX2dldF9taW5vcl92ZXJzaW9uKCksIGJ1dCBmcm9tIHRoZSBoZWFk
ZXJzIHVzZWQgYXQKKyAqIGFwcGxpY2F0aW9uIGNvbXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gZnJv
bSB0aGUgbGlicmFyeSBsaW5rZWQKKyAqIGFnYWluc3QgYXQgYXBwbGljYXRpb24gcnVuIHRpbWUu
CisgKi8KKyNkZWZpbmUgSlNDX01JTk9SX1ZFUlNJT04gKEBQUk9KRUNUX1ZFUlNJT05fTUlOT1JA
KQorCisvKioKKyAqIEpTQ19NSUNST19WRVJTSU9OOgorICoKKyAqIExpa2UganNjX2dldF9taWNy
b192ZXJzaW9uKCksIGJ1dCBmcm9tIHRoZSBoZWFkZXJzIHVzZWQgYXQKKyAqIGFwcGxpY2F0aW9u
IGNvbXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gZnJvbSB0aGUgbGlicmFyeSBsaW5rZWQKKyAqIGFn
YWluc3QgYXQgYXBwbGljYXRpb24gcnVuIHRpbWUuCisgKi8KKyNkZWZpbmUgSlNDX01JQ1JPX1ZF
UlNJT04gKEBQUk9KRUNUX1ZFUlNJT05fTUlDUk9AKQorCisvKioKKyAqIEpTQ19DSEVDS19WRVJT
SU9OOgorICogQG1ham9yOiBtYWpvciB2ZXJzaW9uIChlLmcuIDEgZm9yIHZlcnNpb24gMS4yLjUp
CisgKiBAbWlub3I6IG1pbm9yIHZlcnNpb24gKGUuZy4gMiBmb3IgdmVyc2lvbiAxLjIuNSkKKyAq
IEBtaWNybzogbWljcm8gdmVyc2lvbiAoZS5nLiA1IGZvciB2ZXJzaW9uIDEuMi41KQorICoKKyAq
IFJldHVybnM6ICVUUlVFIGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBoZWFk
ZXIgZmlsZXMKKyAqIGlzIHRoZSBzYW1lIGFzIG9yIG5ld2VyIHRoYW4gdGhlIHBhc3NlZC1pbiB2
ZXJzaW9uLgorICovCisjZGVmaW5lIEpTQ19DSEVDS19WRVJTSU9OKG1ham9yLCBtaW5vciwgbWlj
cm8pIFwKKyAgICAoSlNDX01BSk9SX1ZFUlNJT04gPiAobWFqb3IpIHx8IFwKKyAgICAoSlNDX01B
Sk9SX1ZFUlNJT04gPT0gKG1ham9yKSAmJiBKU0NfTUlOT1JfVkVSU0lPTiA+IChtaW5vcikpIHx8
IFwKKyAgICAoSlNDX01BSk9SX1ZFUlNJT04gPT0gKG1ham9yKSAmJiBKU0NfTUlOT1JfVkVSU0lP
TiA9PSAobWlub3IpICYmIFwKKyAgICAgSlNDX01JQ1JPX1ZFUlNJT04gPj0gKG1pY3JvKSkpCisK
K0pTQ19BUEkgZ3VpbnQKK2pzY19nZXRfbWFqb3JfdmVyc2lvbiAodm9pZCk7CisKK0pTQ19BUEkg
Z3VpbnQKK2pzY19nZXRfbWlub3JfdmVyc2lvbiAodm9pZCk7CisKK0pTQ19BUEkgZ3VpbnQKK2pz
Y19nZXRfbWljcm9fdmVyc2lvbiAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBK
U0NWZXJzaW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmlydHVhbE1hY2hpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45NDUxNTY2ZGY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworLyoqCisgKiBTRUNUSU9OOiBKU0NWaXJ0dWFsTWFjaGlu
ZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0IFZpcnR1YWwgTWFjaGluZQorICog
QHRpdGxlOiBKU0NWaXJ0dWFsTWFjaGluZQorICogQHNlZV9hbHNvOiBKU0NDb250ZXh0CisgKgor
ICogSlNDVmlydHVhbE1hY2hpbmUgcmVwcmVzZW50cyBhIGdyb3VwIG9mIEpTQ0NvbnRleHQ8IS0t
IC0tPnMuIEl0IGFsbG93cworICogY29uY3VycmVudCBKYXZhU2NyaXB0IGV4ZXV0aW9uIGJ5IGNy
ZWF0aW5nIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mCisgKiBKU0NWaXJ0dWFsTWFjaGluZSBpbiBl
YWNoIHRocmVhZC4KKyAqCisgKiBUbyBjcmVhdGUgYSBncm91cCBvZiBKU0NDb250ZXh0PCEtLSAt
LT5zIHBhc3MgdGhlIHNhbWUgSlNDVmlydHVhbE1hY2hpbmUKKyAqIGluc3RhbmNlIHRvIGV2ZXJ5
IEpTQ0NvbnRleHQgY29uc3RydWN0b3IuCisgKi8KKworc3RydWN0IF9KU0NWaXJ0dWFsTWFjaGlu
ZVByaXZhdGUgeworICAgIEpTQ29udGV4dEdyb3VwUmVmIGpzQ29udGV4dEdyb3VwOworICAgIEhh
c2hNYXA8SlNHbG9iYWxDb250ZXh0UmVmLCBKU0NDb250ZXh0Kj4gY29udGV4dENhY2hlOworfTsK
KworV0VCS0lUX0RFRklORV9UWVBFKEpTQ1ZpcnR1YWxNYWNoaW5lLCBqc2NfdmlydHVhbF9tYWNo
aW5lLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgU3RhdGljTG9jayB3cmFwcGVyQ2FjaGVNdXRl
eDsKKworc3RhdGljIEhhc2hNYXA8SlNDb250ZXh0R3JvdXBSZWYsIEpTQ1ZpcnR1YWxNYWNoaW5l
Kj4mIHdyYXBwZXJNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEpT
Q29udGV4dEdyb3VwUmVmLCBKU0NWaXJ0dWFsTWFjaGluZSo+PiBtYXA7CisgICAgcmV0dXJuIG1h
cDsKK30KKworc3RhdGljIHZvaWQgYWRkV3JhcHBlcihKU0NvbnRleHRHcm91cFJlZiBncm91cCwg
SlNDVmlydHVhbE1hY2hpbmUqIHZtKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghd3JhcHBlck1h
cCgpLmNvbnRhaW5zKGdyb3VwKSk7CisgICAgd3JhcHBlck1hcCgpLnNldChncm91cCwgdm0pOwor
fQorCitzdGF0aWMgdm9pZCByZW1vdmVXcmFwcGVyKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwKQor
eworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh3cmFwcGVyTWFwKCkuY29udGFpbnMoZ3JvdXApKTsKKyAg
ICB3cmFwcGVyTWFwKCkucmVtb3ZlKGdyb3VwKTsKK30KKworc3RhdGljIHZvaWQganNjVmlydHVh
bE1hY2hpbmVTZXRDb250ZXh0R3JvdXAoSlNDVmlydHVhbE1hY2hpbmUgKnZtLCBKU0NvbnRleHRH
cm91cFJlZiBncm91cCkKK3sKKyAgICBpZiAoZ3JvdXApIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgICAgIHZtLT5wcml2LT5qc0NvbnRl
eHRHcm91cCA9IGdyb3VwOworICAgICAgICBKU0NvbnRleHRHcm91cFJldGFpbih2bS0+cHJpdi0+
anNDb250ZXh0R3JvdXApOworICAgICAgICBhZGRXcmFwcGVyKHZtLT5wcml2LT5qc0NvbnRleHRH
cm91cCwgdm0pOworICAgIH0gZWxzZSBpZiAodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKSB7Cisg
ICAgICAgIHJlbW92ZVdyYXBwZXIodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICAgICAg
SlNDb250ZXh0R3JvdXBSZWxlYXNlKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgICAg
IHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBqc2NWaXJ0dWFsTWFjaGluZUVuc3VyZUNvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGlu
ZSAqdm0pCit7CisgICAgaWYgKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byoganNDb250ZXh0R3JvdXAgPSBKU0NvbnRleHRHcm91cENyZWF0ZSgp
OworICAgIGpzY1ZpcnR1YWxNYWNoaW5lU2V0Q29udGV4dEdyb3VwKHZtLCBqc0NvbnRleHRHcm91
cCk7CisgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGpzQ29udGV4dEdyb3VwKTsKK30KKworc3Rh
dGljIHZvaWQganNjVmlydHVhbE1hY2hpbmVEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBKU0NWaXJ0dWFsTWFjaGluZSogdm0gPSBKU0NfVklSVFVBTF9NQUNISU5FKG9iamVjdCk7Cisg
ICAganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0R3JvdXAodm0sIG51bGxwdHIpOworCisgICAg
R19PQkpFQ1RfQ0xBU1MoanNjX3ZpcnR1YWxfbWFjaGluZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3Nl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY192aXJ0dWFsX21hY2hpbmVfY2xhc3NfaW5p
dChKU0NWaXJ0dWFsTWFjaGluZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9i
akNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iakNsYXNzLT5kaXNwb3NlID0g
anNjVmlydHVhbE1hY2hpbmVEaXNwb3NlOworfQorCitHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5l
PiBqc2NWaXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKEpTQ29udGV4dEdyb3VwUmVmIGpzQ29udGV4
dEdyb3VwKQoreworICAgIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gd3JhcHBlck1h
cCgpLmdldChqc0NvbnRleHRHcm91cCk7CisgICAgaWYgKCF2bSkgeworICAgICAgICB2bSA9IGFk
b3B0R1JlZihqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpKTsKKyAgICAgICAganNjVmlydHVhbE1h
Y2hpbmVTZXRDb250ZXh0R3JvdXAodm0uZ2V0KCksIGpzQ29udGV4dEdyb3VwKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHZtOworfQorCitKU0NvbnRleHRHcm91cFJlZiBqc2NWaXJ0dWFsTWFjaGluZUdl
dENvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSogdm0pCit7CisgICAganNjVmlydHVhbE1h
Y2hpbmVFbnN1cmVDb250ZXh0R3JvdXAodm0pOworICAgIHJldHVybiB2bS0+cHJpdi0+anNDb250
ZXh0R3JvdXA7Cit9CisKK3ZvaWQganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KEpTQ1ZpcnR1
YWxNYWNoaW5lKiB2bSwgSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgIGF1dG8ganNDb250ZXh0ID0ganNjQ29u
dGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NvbnRleHRH
ZXRHcm91cChqc0NvbnRleHQpID09IHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIXZtLT5wcml2LT5jb250ZXh0Q2FjaGUuY29udGFpbnMoanNDb250ZXh0KSk7
CisgICAgdm0tPnByaXYtPmNvbnRleHRDYWNoZS5zZXQoanNDb250ZXh0LCBjb250ZXh0KTsKK30K
Kwordm9pZCBqc2NWaXJ0dWFsTWFjaGluZVJlbW92ZUNvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUq
IHZtLCBKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5wcml2
LT5qc0NvbnRleHRHcm91cCk7CisgICAgYXV0byBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlND
b250ZXh0KGNvbnRleHQpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ29udGV4dEdldEdyb3VwKGpz
Q29udGV4dCkgPT0gdm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS0+cHJpdi0+Y29udGV4dENhY2hlLmNvbnRhaW5zKGpzQ29udGV4dCkpOworICAgIHZtLT5w
cml2LT5jb250ZXh0Q2FjaGUucmVtb3ZlKGpzQ29udGV4dCk7Cit9CisKK0pTQ0NvbnRleHQqIGpz
Y1ZpcnR1YWxNYWNoaW5lR2V0Q29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSogdm0sIEpTR2xvYmFs
Q29udGV4dFJlZiBqc0NvbnRleHQpCit7CisgICAgcmV0dXJuIHZtLT5wcml2LT5jb250ZXh0Q2Fj
aGUuZ2V0KGpzQ29udGV4dCk7Cit9CisKKy8qKgorICoganNjX3ZpcnR1YWxfbWFjaGluZV9uZXc6
CisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NWaXJ0dWFsTWFjaGluZS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXdseSBjcmVhdGVkICNKU0NWaXJ0dWFsTWFjaGluZS4K
KyAqLworSlNDVmlydHVhbE1hY2hpbmUqIGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkKK3sKKyAg
ICByZXR1cm4gSlNDX1ZJUlRVQUxfTUFDSElORShnX29iamVjdF9uZXcoSlNDX1RZUEVfVklSVFVB
TF9NQUNISU5FLCBudWxscHRyKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yNWM2NDNlMDliMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNj
L2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlND
VmlydHVhbE1hY2hpbmVfaAorI2RlZmluZSBKU0NWaXJ0dWFsTWFjaGluZV9oCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisjaW5jbHVkZSA8
anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9WSVJU
VUFMX01BQ0hJTkUgICAgICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGluZV9nZXRfdHlwZSgpKQor
I2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5FKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSwgSlNDVmlydHVh
bE1hY2hpbmUpKQorI2RlZmluZSBKU0NfSVNfVklSVFVBTF9NQUNISU5FKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElO
RSkpCisjZGVmaW5lIEpTQ19WSVJUVUFMX01BQ0hJTkVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FLCBKU0NW
aXJ0dWFsTWFjaGluZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZJUlRVQUxfTUFDSElORV9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9WSVJU
VUFMX01BQ0hJTkUpKQorI2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5FX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX1ZJUlRVQUxfTUFD
SElORSwgSlNDVmlydHVhbE1hY2hpbmVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NWaXJ0
dWFsTWFjaGluZSBKU0NWaXJ0dWFsTWFjaGluZTsKK3R5cGVkZWYgc3RydWN0IF9KU0NWaXJ0dWFs
TWFjaGluZUNsYXNzIEpTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlND
VmlydHVhbE1hY2hpbmVQcml2YXRlIEpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZTsKKworc3RydWN0
IF9KU0NWaXJ0dWFsTWFjaGluZSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJp
dmF0ZSA+Ki8KKyAgICBKU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUK
K2pzY192aXJ0dWFsX21hY2hpbmVfZ2V0X3R5cGUgKHZvaWQpOworCitKU0NfQVBJIEpTQ1ZpcnR1
YWxNYWNoaW5lICoKK2pzY192aXJ0dWFsX21hY2hpbmVfbmV3ICAgICAgKHZvaWQpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogSlNDVmlydHVhbE1hY2hpbmVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZmM5ZTcwNzA0Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5o
IgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1Jl
ZlB0ci5oPgorCitHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiBqc2NWaXJ0dWFsTWFjaGluZUdl
dE9yQ3JlYXRlKEpTQ29udGV4dEdyb3VwUmVmKTsKK0pTQ29udGV4dEdyb3VwUmVmIGpzY1ZpcnR1
YWxNYWNoaW5lR2V0Q29udGV4dEdyb3VwKEpTQ1ZpcnR1YWxNYWNoaW5lKik7Cit2b2lkIGpzY1Zp
cnR1YWxNYWNoaW5lQWRkQ29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSosIEpTQ0NvbnRleHQqKTsK
K3ZvaWQganNjVmlydHVhbE1hY2hpbmVSZW1vdmVDb250ZXh0KEpTQ1ZpcnR1YWxNYWNoaW5lKiwg
SlNDQ29udGV4dCopOworSlNDQ29udGV4dCoganNjVmlydHVhbE1hY2hpbmVHZXRDb250ZXh0KEpT
Q1ZpcnR1YWxNYWNoaW5lKiwgSlNHbG9iYWxDb250ZXh0UmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYjdiNjVkYzVjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAKQEAgLTAsMCArMSwx
MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ1dyYXBwZXJNYXAuaCIKKworI2luY2x1ZGUgIkFQSUNhc3Qu
aCIKKyNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKKyNpbmNsdWRlICJKU0NDbGFzc1By
aXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0dM
aWJXcmFwcGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1dyYXBwZXJNYXA6OldyYXBwZXJNYXAoSlNHbG9iYWxDb250ZXh0UmVmIGpz
Q29udGV4dCkKKyAgICA6IG1fY2FjaGVkSlNXcmFwcGVycyhzdGQ6Om1ha2VfdW5pcXVlPEpTQzo6
V2Vha0dDTWFwPGdwb2ludGVyLCBKU0M6OkpTT2JqZWN0Pj4odG9KUyhqc0NvbnRleHQpLT52bSgp
KSkKK3sKK30KKworV3JhcHBlck1hcDo6fldyYXBwZXJNYXAoKQoreworICAgIGZvciAoY29uc3Qg
YXV0byYganNjQ2xhc3MgOiBtX2NsYXNzTWFwLnZhbHVlcygpKQorICAgICAgICBqc2NDbGFzc0lu
dmFsaWRhdGUoanNjQ2xhc3MuZ2V0KCkpOworfQorCitHUmVmUHRyPEpTQ1ZhbHVlPiBXcmFwcGVy
TWFwOjpnb2JqZWN0V3JhcHBlcihKU0NDb250ZXh0KiBqc2NDb250ZXh0LCBKU1ZhbHVlUmVmIGpz
VmFsdWUpCit7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChq
c2NDb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhqc0NvbnRleHQp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0b0pTR2xvYmFsT2JqZWN0KGpzQ29udGV4dCktPndyYXBw
ZXJNYXAoKSA9PSB0aGlzKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IG1fY2FjaGVk
R09iamVjdFdyYXBwZXJzLmdldChqc1ZhbHVlKTsKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY1ZhbHVlQ3JlYXRlKGpzY0NvbnRleHQsIGpzVmFsdWUpKTsK
KyAgICAgICAgbV9jYWNoZWRHT2JqZWN0V3JhcHBlcnMuc2V0KGpzVmFsdWUsIHZhbHVlLmdldCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIFdyYXBwZXJNYXA6OnVud3Jh
cChKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jYWNoZWRHT2Jq
ZWN0V3JhcHBlcnMuY29udGFpbnMoanNWYWx1ZSkpOworICAgIG1fY2FjaGVkR09iamVjdFdyYXBw
ZXJzLnJlbW92ZShqc1ZhbHVlKTsKK30KKwordm9pZCBXcmFwcGVyTWFwOjpyZWdpc3RlckNsYXNz
KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBhdXRvKiBqc0NsYXNzID0ganNjQ2xhc3NHZXRK
U0NsYXNzKGpzY0NsYXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jbGFzc01hcC5jb250YWlu
cyhqc0NsYXNzKSk7CisgICAgbV9jbGFzc01hcC5zZXQoanNDbGFzcywganNjQ2xhc3MpOworfQor
CitKU09iamVjdCogV3JhcHBlck1hcDo6Y3JlYXRlSlNXcmFwcHBlcihKU0dsb2JhbENvbnRleHRS
ZWYganNDb250ZXh0LCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBn
cG9pbnRlciB3cmFwcGVkT2JqZWN0LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7
CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0NvbnRleHQpLT53cmFwcGVy
TWFwKCkgPT0gdGhpcyk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7Cisg
ICAgYXV0byogb2JqZWN0ID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZSgpLCBqc0Ns
YXNzLCBudWxscHRyKTsKKyAgICBpZiAod3JhcHBlZE9iamVjdCkgeworICAgICAgICBvYmplY3Qt
PnNldFdyYXBwZWRPYmplY3QobmV3IEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3Qod3JhcHBlZE9i
amVjdCwgZGVzdHJveUZ1bmN0aW9uKSk7CisgICAgICAgIG1fY2FjaGVkSlNXcmFwcGVycy0+c2V0
KHdyYXBwZWRPYmplY3QsIG9iamVjdCk7CisgICAgfQorICAgIGlmIChwcm90b3R5cGUpCisgICAg
ICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzQ29udGV4dCwgdG9SZWYob2JqZWN0KSwgcHJvdG90
eXBlKTsKKyAgICBlbHNlIGlmIChhdXRvKiBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MtPnByb3RvdHlw
ZShleGVjKSkKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGVEaXJlY3Qodm0sIGpzUHJvdG90
eXBlKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitKU09iamVjdCogV3JhcHBlck1hcDo6anNX
cmFwcGVyKGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0Cit7CisgICAgaWYgKCF3cmFwcGVk
T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jYWNoZWRKU1dy
YXBwZXJzLT5nZXQod3JhcHBlZE9iamVjdCk7Cit9CisKK2dwb2ludGVyIFdyYXBwZXJNYXA6Ondy
YXBwZWRPYmplY3QoSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYganNP
YmplY3QpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0Nv
bnRleHQpLT53cmFwcGVyTWFwKCkgPT0gdGhpcyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0
b0pTKGpzQ29udGV4dCkpOworICAgIFZNJiB2bSA9IHRvSlMoanNDb250ZXh0KS0+dm0oKTsKKyAg
ICBhdXRvKiBvYmplY3QgPSB0b0pTKGpzT2JqZWN0KTsKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0
cyh2bSwgSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6aW5m
bygpKSkgeworICAgICAgICBpZiAoYXV0byogd3JhcHBlciA9IEpTQzo6anNDYXN0PEpTQzo6SlNB
UElXcmFwcGVyT2JqZWN0Kj4ob2JqZWN0KS0+d3JhcHBlZE9iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3QqPih3cmFwcGVyKS0+
b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFw
cGVyTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OGJmODI2Nzc5NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVy
TWFwLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzIEpTQ0NsYXNzOwor
dHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9K
U0NWYWx1ZSBKU0NWYWx1ZTsKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTT2JqZWN0Owor
CitjbGFzcyBXcmFwcGVyTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBXcmFwcGVyTWFwKEpTR2xvYmFsQ29udGV4dFJlZik7CisgICAgfldy
YXBwZXJNYXAoKTsKKworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGdvYmplY3RXcmFwcGVyKEpTQ0Nv
bnRleHQqLCBKU1ZhbHVlUmVmKTsKKyAgICB2b2lkIHVud3JhcChKU1ZhbHVlUmVmKTsKKworICAg
IHZvaWQgcmVnaXN0ZXJDbGFzcyhKU0NDbGFzcyopOworCisgICAgSlNPYmplY3QqIGNyZWF0ZUpT
V3JhcHBwZXIoSlNHbG9iYWxDb250ZXh0UmVmLCBKU0NsYXNzUmVmLCBKU1ZhbHVlUmVmIHByb3Rv
dHlwZSwgZ3BvaW50ZXIsIEdEZXN0cm95Tm90aWZ5KTsKKyAgICBKU09iamVjdCoganNXcmFwcGVy
KGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0OworICAgIGdwb2ludGVyIHdyYXBwZWRPYmpl
Y3QoSlNHbG9iYWxDb250ZXh0UmVmLCBKU09iamVjdFJlZikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSGFzaE1hcDxKU1ZhbHVlUmVmLCBKU0NWYWx1ZSo+IG1fY2FjaGVkR09iamVjdFdyYXBwZXJz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OldlYWtHQ01hcDxncG9pbnRlciwgSlNDOjpKU09i
amVjdD4+IG1fY2FjaGVkSlNXcmFwcGVyczsKKyAgICBIYXNoTWFwPEpTQ2xhc3NSZWYsIEdSZWZQ
dHI8SlNDQ2xhc3M+PiBtX2NsYXNzTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAt
c2VjdGlvbnMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWds
aWItNC4wLXNlY3Rpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMWY3MzUzYTQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0CkBAIC0wLDAgKzEsMTY1IEBA
Cis8U0VDVElPTj4KKzxGSUxFPkpTQ1ZpcnR1YWxNYWNoaW5lPC9GSUxFPgorPFRJVExFPkpTQ1Zp
cnR1YWxNYWNoaW5lPC9USVRMRT4KK0pTQ1ZpcnR1YWxNYWNoaW5lCitqc2NfdmlydHVhbF9tYWNo
aW5lX25ldworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0pTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MK
K0pTQ19UWVBFX1ZJUlRVQUxfTUFDSElORQorSlNDX1ZJUlRVQUxfTUFDSElORQorSlNDX0lTX1ZJ
UlRVQUxfTUFDSElORQorSlNDX1ZJUlRVQUxfTUFDSElORV9DTEFTUworSlNDX0lTX1ZJUlRVQUxf
TUFDSElORV9DTEFTUworSlNDX1ZJUlRVQUxfTUFDSElORV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZQoranNjX3ZpcnR1YWxfbWFjaGlu
ZV9nZXRfdHlwZQorSlNDX0FQSQorSlNDX0RFUFJFQ0FURUQKK0pTQ19ERVBSRUNBVEVEX0ZPUgor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPkpTQ0NvbnRleHQ8L0ZJTEU+Cis8VElUTEU+
SlNDQ29udGV4dDwvVElUTEU+CitKU0NDb250ZXh0CitKU0NFeGNlcHRpb25IYW5kbGVyCitqc2Nf
Y29udGV4dF9uZXcKK2pzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZQoranNjX2Nv
bnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZQoranNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbgoranNj
X2NvbnRleHRfdGhyb3cKK2pzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbgoranNjX2NvbnRleHRf
cHVzaF9leGNlcHRpb25faGFuZGxlcgoranNjX2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVy
Citqc2NfY29udGV4dF9nZXRfY3VycmVudAoranNjX2NvbnRleHRfZXZhbHVhdGUKK2pzY19jb250
ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaQoranNjX2NvbnRleHRfc2V0X3ZhbHVlCitqc2Nf
Y29udGV4dF9nZXRfdmFsdWUKK2pzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorSlNDQ29udGV4dENsYXNzCitKU0NfVFlQRV9DT05URVhUCitKU0NfQ09O
VEVYVAorSlNDX0lTX0NPTlRFWFQKK0pTQ19DT05URVhUX0NMQVNTCitKU0NfSVNfQ09OVEVYVF9D
TEFTUworSlNDX0NPTlRFWFRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitKU0ND
b250ZXh0UHJpdmF0ZQoranNjX2NvbnRleHRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5KU0NWYWx1ZTwvRklMRT4KKzxUSVRMRT5KU0NWYWx1ZTwvVElUTEU+CitKU0NW
YWx1ZQorSlNDVmFsdWVQcm9wZXJ0eUZsYWdzCitqc2NfdmFsdWVfZ2V0X2NvbnRleHQKK2pzY192
YWx1ZV9uZXdfdW5kZWZpbmVkCitqc2NfdmFsdWVfaXNfdW5kZWZpbmVkCitqc2NfdmFsdWVfbmV3
X251bGwKK2pzY192YWx1ZV9pc19udWxsCitqc2NfdmFsdWVfbmV3X251bWJlcgoranNjX3ZhbHVl
X2lzX251bWJlcgoranNjX3ZhbHVlX3RvX2RvdWJsZQoranNjX3ZhbHVlX3RvX2ludDMyCitqc2Nf
dmFsdWVfbmV3X2Jvb2xlYW4KK2pzY192YWx1ZV9pc19ib29sZWFuCitqc2NfdmFsdWVfdG9fYm9v
bGVhbgoranNjX3ZhbHVlX25ld19zdHJpbmcKK2pzY192YWx1ZV9pc19zdHJpbmcKK2pzY192YWx1
ZV90b19zdHJpbmcKK2pzY192YWx1ZV9uZXdfYXJyYXkKK2pzY192YWx1ZV9uZXdfYXJyYXlfZnJv
bV9nYXJyYXkKK2pzY192YWx1ZV9pc19hcnJheQoranNjX3ZhbHVlX25ld19vYmplY3QKK2pzY192
YWx1ZV9pc19vYmplY3QKK2pzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YKK2pzY192YWx1
ZV9vYmplY3Rfc2V0X3Byb3BlcnR5Citqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eQoranNj
X3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgKK2pzY192YWx1ZV9vYmplY3RfZ2V0
X3Byb3BlcnR5X2F0X2luZGV4Citqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QKK2pzY192
YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEKK2pzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2FjY2Vzc29yCitqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uCitqc2NfdmFsdWVfaXNf
ZnVuY3Rpb24KK2pzY192YWx1ZV9mdW5jdGlvbl9jYWxsCitqc2NfdmFsdWVfaXNfY29uc3RydWN0
b3IKK2pzY192YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
SlNDVmFsdWVDbGFzcworSlNDX1RZUEVfVkFMVUUKK0pTQ19WQUxVRQorSlNDX0lTX1ZBTFVFCitK
U0NfVkFMVUVfQ0xBU1MKK0pTQ19JU19WQUxVRV9DTEFTUworSlNDX1ZBTFVFX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgorSlNDVmFsdWVQcml2YXRlCitqc2NfdmFsdWVfZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5KU0NFeGNlcHRpb248L0ZJTEU+Cis8
VElUTEU+SlNDRXhjZXB0aW9uPC9USVRMRT4KK0pTQ0V4Y2VwdGlvbgoranNjX2V4Y2VwdGlvbl9u
ZXcKK2pzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UKK2pzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVt
YmVyCitqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorSlNDRXhjZXB0aW9uQ2xhc3MKK0pTQ19UWVBFX0VYQ0VQVElPTgorSlNDX0VYQ0VQVElPTgor
SlNDX0lTX0VYQ0VQVElPTgorSlNDX0VYQ0VQVElPTl9DTEFTUworSlNDX0lTX0VYQ0VQVElPTl9D
TEFTUworSlNDX0VYQ0VQVElPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0pT
Q0V4Y2VwdGlvblByaXZhdGUKK2pzY19leGNlcHRpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5KU0NDbGFzczwvRklMRT4KKzxUSVRMRT5KU0NDbGFzczwvVElUTEU+
CitKU0NDbGFzcworanNjX2NsYXNzX2dldF9uYW1lCitqc2NfY2xhc3NfZ2V0X3BhcmVudAoranNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3RvcgoranNjX2NsYXNzX2FkZF9tZXRob2QKK2pzY19jbGFzc19h
ZGRfcHJvcGVydHkKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitKU0NfVFlQRV9DTEFTUworSlND
X0NMQVNTCitKU0NfSVNfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2pzY19jbGFzc19n
ZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPkpTQ1ZlcnNpb248L0ZJTEU+
Cis8VElUTEU+SlNDVmVyc2lvbjwvVElUTEU+Citqc2NfZ2V0X21ham9yX3ZlcnNpb24KK2pzY19n
ZXRfbWlub3JfdmVyc2lvbgoranNjX2dldF9taWNyb192ZXJzaW9uCisKKzxTVUJTRUNUSU9OPgor
SlNDX01BSk9SX1ZFUlNJT04KK0pTQ19NSU5PUl9WRVJTSU9OCitKU0NfTUlDUk9fVkVSU0lPTgor
SlNDX0NIRUNLX1ZFUlNJT04KKzwvU0VDVElPTj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC50eXBlcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC50eXBlcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzgwYTc2ZjNmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAudHlwZXMKQEAg
LTAsMCArMSw2IEBACisjaW5jbHVkZSA8anNjL2pzYy5oPgoranNjX3ZpcnR1YWxfbWFjaGluZV9n
ZXRfdHlwZQoranNjX2NvbnRleHRfZ2V0X3R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZQoranNjX2V4
Y2VwdGlvbl9nZXRfdHlwZQoranNjX2NsYXNzX2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi1kb2NzLnNnbWwgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi1kb2NzLnNnbWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFjNTMyYjBjMTEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItZG9jcy5z
Z21sCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGJv
b2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisgICAgICAg
ICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3gu
ZHRkIiBbCis8IUVOVElUWSB2ZXJzaW9uIFNZU1RFTSAidmVyc2lvbi54bWwiPgorXT4KKzxib29r
IGlkPSJpbmRleCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiPgor
ICA8Ym9va2luZm8+CisgICAgPHRpdGxlPkphdmFTY3JpcHRDb3JlIEdMaWIgUmVmZXJlbmNlIE1h
bnVhbDwvdGl0bGU+CisgICAgPHJlbGVhc2VpbmZvPmZvciBKYXZhU2NyaXB0Q29yZSAmdmVyc2lv
bjs8L3JlbGVhc2VpbmZvPgorICA8L2Jvb2tpbmZvPgorCisgIDxjaGFwdGVyPgorICAgIDx0aXRs
ZT5DbGFzcyBPdmVydmlldzwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL0pTQ1Zp
cnR1YWxNYWNoaW5lLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9KU0NDb250ZXh0
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9KU0NWYWx1ZS54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvSlNDRXhjZXB0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9KU0NDbGFzcy54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvSlND
VmVyc2lvbi54bWwiLz4KKyAgPC9jaGFwdGVyPgorCisgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4K
KyAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICA8L2luZGV4PgorCisgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNs
dWRlPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L2pzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iN2NlYWVmMGIzZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19KU0NfSF9f
CisjZGVmaW5lIF9fSlNDX0hfXworCisjZGVmaW5lIF9fSlNDX0hfSU5TSURFX18KKworI2luY2x1
ZGUgPGpzYy9KU0NDbGFzcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8anNjL0pTQ0RlZmluZXMuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRXhjZXB0aW9uLmg+CisjaW5j
bHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZlcnNpb24uaD4KKyNpbmNs
dWRlIDxqc2MvSlNDVmlydHVhbE1hY2hpbmUuaD4KKworI2luY2x1ZGUgPGpzYy9KU0NBdXRvY2xl
YW51cHMuaD4KKworI3VuZGVmIF9fSlNDX0hfSU5TSURFX18KKworI2VuZGlmIC8qIF9fSlNDX0hf
XyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY3NTExMzUzYWU3Li5m
M2Y5OTQxNDFjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIxMCw3
ICsxMjEwLDcgQEAgZW5kaWYgKCkKICMgRm9yY2Ugc3RhZ2luZyBvZiBzaGFyZWQgc2NyaXB0cywg
ZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJlY3RseSB1c2VkIHRvIGJ1aWxkIEphdmFTY3JpcHRDb3Jl
LgogCiBhZGRfY3VzdG9tX3RhcmdldChzdGFnZVNoYXJlZFNjcmlwdHMgREVQRU5EUyAke0phdmFT
Y3JpcHRDb3JlX1NDUklQVFN9KQotYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFn
ZVNoYXJlZFNjcmlwdHMpCithZGRfZGVwZW5kZW5jaWVzKEphdmFTY3JpcHRDb3JlIHN0YWdlU2hh
cmVkU2NyaXB0cyAke0phdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFU30pCiAKIGlmIChN
U1ZDKQogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4
IGQwYzk3ODNhOTAwLi4wZTRlMmFiMmZlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjA2IEBACisyMDE4LTAzLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGluaXRpYWwgR0xpYiBBUEkgZm9yIEphdmFTY3Jp
cHRDb3JlLgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oOgorICAgICAgICAq
IEFQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGpz
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTQVBJV3JhcHBlck9iamVjdDo6SlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjdCk6CisgICAgICAgIChKU0M6
OkpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogQVBJL2dsaWIv
SlNDQXV0b2NsZWFudXBzLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NhbGxiYWNr
RnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y2FsbEFzRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpjYWxsQXNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNr
RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OkpT
Q0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpj
YWxsKToKKyAgICAgICAgKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDQ2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDQ2FsbGJh
Y2tGdW5jdGlvbjo6ZnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNr
RnVuY3Rpb246OmNvbnN0cnVjdENhbGxiYWNrKToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDbGFz
cy5jcHA6IEFkZGVkLgorICAgICAgICAoanNjQ2xhc3NHZXRQcm9wZXJ0eSk6CisgICAgICAgIChq
c2NDbGFzc1NldFByb3BlcnR5KToKKyAgICAgICAgKGpzY0NsYXNzRGlzcG9zZSk6CisgICAgICAg
IChqc2NDbGFzc0NvbnN0cnVjdGVkKToKKyAgICAgICAgKGpzY19jbGFzc19jbGFzc19pbml0KToK
KyAgICAgICAgKGpzY0NsYXNzQ3JlYXRlKToKKyAgICAgICAgKGpzY0NsYXNzR2V0SlNDbGFzcyk6
CisgICAgICAgIChqc2NDbGFzc0dldE9yQ3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKGpzY0Ns
YXNzSW52YWxpZGF0ZSk6CisgICAgICAgIChqc2NfY2xhc3NfZ2V0X25hbWUpOgorICAgICAgICAo
anNjX2NsYXNzX2dldF9wYXJlbnQpOgorICAgICAgICAoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rv
cik6CisgICAgICAgIChqc2NfY2xhc3NfYWRkX21ldGhvZCk6CisgICAgICAgIChqc2NfY2xhc3Nf
YWRkX3Byb3BlcnR5KToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDbGFzcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9KU0NDbGFzc1ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoRXhjZXB0aW9uSGFuZGxlcjo6
RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChFeGNlcHRpb25IYW5kbGVyOjp+RXhjZXB0aW9u
SGFuZGxlcik6CisgICAgICAgIChqc2NDb250ZXh0U2V0VmlydHVhbE1hY2hpbmUpOgorICAgICAg
ICAoanNjQ29udGV4dEdldFByb3BlcnR5KToKKyAgICAgICAgKGpzY0NvbnRleHRTZXRQcm9wZXJ0
eSk6CisgICAgICAgIChqc2NDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAoanNjQ29udGV4
dERpc3Bvc2UpOgorICAgICAgICAoanNjX2NvbnRleHRfY2xhc3NfaW5pdCk6CisgICAgICAgIChq
c2NDb250ZXh0R2V0T3JDcmVhdGUpOgorICAgICAgICAoanNjQ29udGV4dEdldEpTQ29udGV4dCk6
CisgICAgICAgICh3cmFwcGVyTWFwKToKKyAgICAgICAgKGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKToKKyAgICAgICAgKGpzY0NvbnRleHRWYWx1ZURlc3Ryb3llZCk6CisgICAgICAgIChqc2ND
b250ZXh0R2V0SlNXcmFwcGVyKToKKyAgICAgICAgKGpzY0NvbnRleHRHZXRPckNyZWF0ZUpTV3Jh
cHBlcik6CisgICAgICAgIChqc2NDb250ZXh0V3JhcHBlZE9iamVjdCk6CisgICAgICAgIChqc2ND
b250ZXh0UHVzaENhbGxiYWNrKToKKyAgICAgICAgKGpzY0NvbnRleHRQb3BDYWxsYmFjayk6Cisg
ICAgICAgIChqc2NDb250ZXh0R0FycmF5VG9KU0FycmF5KToKKyAgICAgICAgKGpzY0NvbnRleHRK
U0FycmF5VG9HQXJyYXkpOgorICAgICAgICAoanNjQ29udGV4dEdWYWx1ZVRvSlNWYWx1ZSk6Cisg
ICAgICAgIChqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKToKKyAgICAgICAgKGpzY19jb250ZXh0
X25ldyk6CisgICAgICAgIChqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUpOgor
ICAgICAgICAoanNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZSk6CisgICAgICAgIChqc2Nf
Y29udGV4dF9nZXRfZXhjZXB0aW9uKToKKyAgICAgICAgKGpzY19jb250ZXh0X3Rocm93KToKKyAg
ICAgICAgKGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbik6CisgICAgICAgIChqc2NfY29udGV4
dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKToKKyAgICAgICAgKGpzY19jb250ZXh0X3BvcF9leGNl
cHRpb25faGFuZGxlcik6CisgICAgICAgIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQpOgorICAgICAgICAoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQpOgorICAgICAgICAoanNjX2Nv
bnRleHRfZXZhbHVhdGUpOgorICAgICAgICAoanNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3Vy
Y2VfdXJpKToKKyAgICAgICAgKGpzY19jb250ZXh0X3NldF92YWx1ZSk6CisgICAgICAgIChqc2Nf
Y29udGV4dF9nZXRfdmFsdWUpOgorICAgICAgICAoanNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mp
OgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlND
RGVmaW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5oLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoanNjRXhjZXB0aW9uRGlzcG9zZSk6CisgICAgICAgIChqc2NfZXhjZXB0aW9u
X2NsYXNzX2luaXQpOgorICAgICAgICAoanNjRXhjZXB0aW9uQ3JlYXRlKToKKyAgICAgICAgKGpz
Y0V4Y2VwdGlvbkdldEpTVmFsdWUpOgorICAgICAgICAoanNjRXhjZXB0aW9uRW5zdXJlUHJvcGVy
dGllcyk6CisgICAgICAgIChqc2NfZXhjZXB0aW9uX25ldyk6CisgICAgICAgIChqc2NfZXhjZXB0
aW9uX2dldF9tZXNzYWdlKToKKyAgICAgICAgKGpzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVy
KToKKyAgICAgICAgKGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkpOgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ0V4Y2VwdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NFeGNl
cHRpb25Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0dMaWJXcmFwcGVy
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NHTGliV3JhcHBlck9iamVjdDo6SlND
R0xpYldyYXBwZXJPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NHTGliV3JhcHBlck9iamVjdDo6
fkpTQ0dMaWJXcmFwcGVyT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDR0xpYldyYXBwZXJPYmpl
Y3Q6Om9iamVjdCBjb25zdCk6CisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKGpzY1ZhbHVlR2V0UHJvcGVydHkpOgorICAgICAgICAoanNjVmFsdWVTZXRQ
cm9wZXJ0eSk6CisgICAgICAgIChqc2NWYWx1ZURpc3Bvc2UpOgorICAgICAgICAoanNjX3ZhbHVl
X2NsYXNzX2luaXQpOgorICAgICAgICAoanNjVmFsdWVHZXRKU1ZhbHVlKToKKyAgICAgICAgKGpz
Y1ZhbHVlQ3JlYXRlKToKKyAgICAgICAgKGpzY192YWx1ZV9nZXRfY29udGV4dCk6CisgICAgICAg
IChqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZCk6CisgICAgICAgIChqc2NfdmFsdWVfaXNfdW5kZWZp
bmVkKToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfbnVsbCk6CisgICAgICAgIChqc2NfdmFsdWVf
aXNfbnVsbCk6CisgICAgICAgIChqc2NfdmFsdWVfbmV3X251bWJlcik6CisgICAgICAgIChqc2Nf
dmFsdWVfaXNfbnVtYmVyKToKKyAgICAgICAgKGpzY192YWx1ZV90b19kb3VibGUpOgorICAgICAg
ICAoanNjX3ZhbHVlX3RvX2ludDMyKToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYm9vbGVhbik6
CisgICAgICAgIChqc2NfdmFsdWVfaXNfYm9vbGVhbik6CisgICAgICAgIChqc2NfdmFsdWVfdG9f
Ym9vbGVhbik6CisgICAgICAgIChqc2NfdmFsdWVfbmV3X3N0cmluZyk6CisgICAgICAgIChqc2Nf
dmFsdWVfaXNfc3RyaW5nKToKKyAgICAgICAgKGpzY192YWx1ZV90b19zdHJpbmcpOgorICAgICAg
ICAoanNjX3ZhbHVlX25ld19hcnJheSk6CisgICAgICAgIChqc2NfdmFsdWVfbmV3X2FycmF5X2Zy
b21fZ2FycmF5KToKKyAgICAgICAgKGpzY192YWx1ZV9pc19hcnJheSk6CisgICAgICAgIChqc2Nf
dmFsdWVfbmV3X29iamVjdCk6CisgICAgICAgIChqc2NfdmFsdWVfaXNfb2JqZWN0KToKKyAgICAg
ICAgKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YpOgorICAgICAgICAoanNjX3ZhbHVl
X29iamVjdF9zZXRfcHJvcGVydHkpOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJv
cGVydHkpOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgp
OgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgpOgorICAg
ICAgICAoanNjVmFsdWVDYWxsRnVuY3Rpb24pOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9p
bnZva2VfbWV0aG9kKToKKyAgICAgICAgKGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5
X2RhdGEpOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfYWNjZXNz
b3IpOgorICAgICAgICAoanNjX3ZhbHVlX25ld19mdW5jdGlvbik6CisgICAgICAgIChqc2NfdmFs
dWVfaXNfZnVuY3Rpb24pOgorICAgICAgICAoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwpOgorICAg
ICAgICAoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKToKKyAgICAgICAgKGpzY192YWx1ZV9jb25z
dHJ1Y3Rvcl9jYWxsKToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDVmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoanNjX2dldF9tYWpvcl92ZXJz
aW9uKToKKyAgICAgICAgKGpzY19nZXRfbWlub3JfdmVyc2lvbik6CisgICAgICAgIChqc2NfZ2V0
X21pY3JvX3ZlcnNpb24pOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZlcnNpb24uaC5pbjogQWRk
ZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGFkZFdyYXBwZXIpOgorICAgICAgICAocmVtb3ZlV3JhcHBlcik6CisgICAgICAgIChq
c2NWaXJ0dWFsTWFjaGluZVNldENvbnRleHRHcm91cCk6CisgICAgICAgIChqc2NWaXJ0dWFsTWFj
aGluZUVuc3VyZUNvbnRleHRHcm91cCk6CisgICAgICAgIChqc2NWaXJ0dWFsTWFjaGluZURpc3Bv
c2UpOgorICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGluZV9jbGFzc19pbml0KToKKyAgICAgICAg
KGpzY1ZpcnR1YWxNYWNoaW5lR2V0T3JDcmVhdGUpOgorICAgICAgICAoanNjVmlydHVhbE1hY2hp
bmVHZXRDb250ZXh0R3JvdXApOgorICAgICAgICAoanNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0
KToKKyAgICAgICAgKGpzY1ZpcnR1YWxNYWNoaW5lUmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChq
c2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHQpOgorICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGlu
ZV9uZXcpOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lLmg6IEFkZGVkLgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OldyYXBwZXJNYXA6OldyYXBwZXJNYXApOgorICAgICAgICAoSlNDOjpXcmFwcGVyTWFwOjp+V3Jh
cHBlck1hcCk6CisgICAgICAgIChKU0M6OldyYXBwZXJNYXA6OmdvYmplY3RXcmFwcGVyKToKKyAg
ICAgICAgKEpTQzo6V3JhcHBlck1hcDo6dW53cmFwKToKKyAgICAgICAgKEpTQzo6V3JhcHBlck1h
cDo6cmVnaXN0ZXJDbGFzcyk6CisgICAgICAgIChKU0M6OldyYXBwZXJNYXA6OmNyZWF0ZUpTV3Jh
cHBwZXIpOgorICAgICAgICAoSlNDOjpXcmFwcGVyTWFwOjpqc1dyYXBwZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXcmFwcGVyTWFwOjp3cmFwcGVkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBB
UEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL2RvY3Mv
anNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvZG9j
cy9qc2MtZ2xpYi00LjAudHlwZXM6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL2RvY3MvanNj
LWdsaWItZG9jcy5zZ21sOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9qc2MuaDogQWRkZWQu
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR0xpYi5jbWFrZTogQWRkZWQu
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ2lyLmluOiBSZW1vdmVkLgorICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbGVhc2VEZWxheWVkUmVsZWFz
ZWRPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKiBq
YXZhc2NyaXB0Y29yZWd0ay5wYy5pbjoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpzZXRXcmFwcGVyTWFwKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpnbGliQ2FsbGJhY2tGdW5jdGlvblN0
cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpnbGliV3JhcHBl
ck9iamVjdFN0cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp3
cmFwcGVyTWFwIGNvbnN0KToKKwogMjAxOC0wMy0xNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2ly
c2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgRml4IE1TVkMgcnVuLXRpbWUgY2hlY2sgYWZ0ZXIg
cjIyOTM5MS4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR0xpYi5jbWFrZSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTGliLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi44ZjE0MGQ1Y2MyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTGliLmNtYWtlCkBAIC0wLDAgKzEsNDggQEAKK2ZpbGUoTUFLRV9ESVJF
Q1RPUlkgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliKQorZmls
ZShNQUtFX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFX0dMSUJfQVBJ
X0RJUn0pCisKK2xpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKKyAgICBBUEkvZ2xp
Yi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAorICAgIEFQSS9nbGliL0pTQ0NhbGxiYWNrRnVu
Y3Rpb24uY3BwCisgICAgQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCisgICAgQVBJL2dsaWIvSlNDQ29u
dGV4dC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NFeGNlcHRpb24uY3BwCisgICAgQVBJL2dsaWIvSlND
VmFsdWUuY3BwCisgICAgQVBJL2dsaWIvSlNDVmVyc2lvbi5jcHAKKyAgICBBUEkvZ2xpYi9KU0NW
aXJ0dWFsTWFjaGluZS5jcHAKKyAgICBBUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcAorKQorCits
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAiJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliIgorICAgICIk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFX0dMSUJfQVBJX0RJUn0iCisgICAgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYiIKKykKKworc2V0KEphdmFTY3JpcHRDb3JlX0lOU1RB
TExFRF9IRUFERVJTCisgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRV9HTElCX0FQ
SV9ESVJ9L0pTQ1ZlcnNpb24uaAorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9K
U0NBdXRvY2xlYW51cHMuaAorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9KU0ND
bGFzcy5oCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS9nbGliL0pTQ0NvbnRleHQuaAor
ICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgKKyAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmgKKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vQVBJL2dsaWIvSlNDVmFsdWUuaAorICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L0FQSS9nbGliL2pzYy5oCispCisKK2NvbmZpZ3VyZV9maWxlKEFQSS9nbGliL0pTQ1ZlcnNpb24u
aC5pbiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFX0dMSUJfQVBJX0RJUn0vSlNDVmVy
c2lvbi5oKQorCisjIFRoZXNlIHN5bWJvbGljIGxpbmsgYWxsb3dzIGluY2x1ZGVzIGxpa2UgI2lu
Y2x1ZGUgPGpzYy9qc2MuaD4gd2hpY2ggc2ltdWxhdGVzIGluc3RhbGxlZCBoZWFkZXJzLgorYWRk
X2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0ph
dmFTY3JpcHRDb3JlL2dsaWIvanNjCisgICAgREVQRU5EUyAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
QVBJL2dsaWIKKyAgICBDT01NQU5EIGxuIC1uIC1zIC1mICR7SkFWQVNDUklQVENPUkVfRElSfS9B
UEkvZ2xpYiAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIvanNj
CisgICAgVkVSQkFUSU0KKykKK2FkZF9jdXN0b21fdGFyZ2V0KEpTQy1mYWtlLWFwaS1oZWFkZXJz
CisgICAgREVQRU5EUyAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2ds
aWIvanNjCispCitzZXQoSmF2YVNjcmlwdENvcmVfRVhUUkFfREVQRU5ERU5DSUVTCisgICAgSlND
LWZha2UtYXBpLWhlYWRlcnMKKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5naXIuaW4gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ2lyLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjhkY2MxMjhkYy4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmdpci5p
bgorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pgot
PHJlcG9zaXRvcnkgdmVyc2lvbj0iMS4yIgotICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cu
Z3RrLm9yZy9pbnRyb3NwZWN0aW9uL2NvcmUvMS4wIgotICAgICAgICAgICAgeG1sbnM6Yz0iaHR0
cDovL3d3dy5ndGsub3JnL2ludHJvc3BlY3Rpb24vYy8xLjAiPgotICA8bmFtZXNwYWNlIG5hbWU9
IkphdmFTY3JpcHRDb3JlIiB2ZXJzaW9uPSJAV0VCS0lUR1RLX0FQSV9WRVJTSU9OQCIgCi0gICAg
ICAgICAgICAgc2hhcmVkLWxpYnJhcnk9ImphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJ
X1ZFUlNJT05AIgotICAgICAgICAgICAgIGM6aWRlbnRpZmllci1wcmVmaXhlcz0iSlMiCi0gICAg
ICAgICAgICAgYzpzeW1ib2wtcHJlZml4ZXM9IkpTIj4KLSAgICA8cmVjb3JkIG5hbWU9Ikdsb2Jh
bENvbnRleHQiIGM6dHlwZT0iSlNHbG9iYWxDb250ZXh0UmVmIiBmb3JlaWduPSIxIi8+Ci0gICAg
PHJlY29yZCBuYW1lPSJWYWx1ZSIgYzp0eXBlPSJKU1ZhbHVlUmVmIiBmb3JlaWduPSIxIi8+Ci0g
IDwvbmFtZXNwYWNlPgotPC9yZXBvc2l0b3J5PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IDZmMDk1NmM1MzIxLi44YzVkY2JhYzliYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoR0xpYi5j
bWFrZSkKKwogc2V0KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIGphdmFzY3JpcHRjb3JlZ3Rr
LSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSkKIAogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVf
VU5JRklFRF9TT1VSQ0VfTElTVF9GSUxFUwpAQCAtNSw2ICs3LDcgQEAgbGlzdChBUFBFTkQgSmF2
YVNjcmlwdENvcmVfVU5JRklFRF9TT1VSQ0VfTElTVF9GSUxFUwogKQogCiBsaXN0KEFQUEVORCBK
YXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAiJHtERVJJVkVE
X1NPVVJDRVNfSkFWQVNDUklQQ09SRUdUS19ESVJ9IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vaW5zcGVjdG9yL3JlbW90ZS9nbGliIgogKQogCkBAIC0xMywxNiArMTYsNyBAQCBsaXN0KEFQ
UEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgaW5zcGVj
dG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmgKICkKIAotY29uZmlndXJlX2Zp
bGUoamF2YXNjcmlwdGNvcmVndGsucGMuaW4gJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnBj
IEBPTkxZKQotY29uZmlndXJlX2ZpbGUoSmF2YVNjcmlwdENvcmUuZ2lyLmluICR7Q01BS0VfQklO
QVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpciBAT05M
WSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9
L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS50eXBlbGliCi0gICAgREVQ
RU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9W
RVJTSU9OfS5naXIKLSAgICBDT01NQU5EICR7SU5UUk9TUEVDVElPTl9DT01QSUxFUn0gJHtDTUFL
RV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2ly
IC1vICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZF
UlNJT059LnR5cGVsaWIKLSkKLQotQUREX1RZUEVMSUIoJHtDTUFLRV9CSU5BUllfRElSfS9KYXZh
U2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0udHlwZWxpYikKK2NvbmZpZ3VyZV9m
aWxlKGphdmFzY3JpcHRjb3JlZ3RrLnBjLmluICR7SmF2YVNjcmlwdENvcmVfUEtHQ09ORklHX0ZJ
TEV9IEBPTkxZKQogCiBpbnN0YWxsKEZJTEVTICIke0NNQUtFX0JJTkFSWV9ESVJ9L1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0u
cGMiCiAgICAgICAgIERFU1RJTkFUSU9OICIke0xJQl9JTlNUQUxMX0RJUn0vcGtnY29uZmlnIgpA
QCAtMzIsNiArMjYsMTAgQEAgaW5zdGFsbChGSUxFUyAke0phdmFTY3JpcHRDb3JlX1BVQkxJQ19G
UkFNRVdPUktfSEVBREVSU30KICAgICAgICAgREVTVElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURF
Ul9JTlNUQUxMX0RJUn0vSmF2YVNjcmlwdENvcmUiCiApCiAKK2luc3RhbGwoRklMRVMgJHtKYXZh
U2NyaXB0Q29yZV9JTlNUQUxMRURfSEVBREVSU30KKyAgICAgICAgREVTVElOQVRJT04gIiR7V0VC
S0lUR1RLX0hFQURFUl9JTlNUQUxMX0RJUn0vanNjIgorKQorCiBpZiAoRU5BQkxFX0lOVFJPU1BF
Q1RJT04pCiAgICAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRD
b3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKICAgICAgICAgICAgIERFU1RJTkFUSU9O
ICR7SU5UUk9TUEVDVElPTl9JTlNUQUxMX0dJUkRJUn0KQEAgLTQzLDYgKzQxLDcgQEAgZW5kaWYg
KCkKIAogYWRkX2RlZmluaXRpb25zKC1EU1RBVElDQUxMWV9MSU5LRURfV0lUSF9XVEYpCiBhZGRf
ZGVmaW5pdGlvbnMoLURMSUJESVI9IiR7TElCX0lOU1RBTExfRElSfSIpCithZGRfZGVmaW5pdGlv
bnMoLURKU0NfQ09NUElMQVRJT04pCiAKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJQlJB
UklFUwogICAgICR7R0xJQl9MSUJSQVJJRVN9CkBAIC01MCwzICs0OSw3OCBAQCBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NZ
U1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KICkKKwor
aWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQorICAgICMgQWRkICR7Q01BS0VfTElCUkFSWV9PVVRQ
VVRfRElSRUNUT1JZfSB0byBMRF9MSUJSQVJZX1BBVEggb3IgRFlMRF9MSUJSQVJZX1BBVEgKKyAg
ICBpZiAoQVBQTEUpCisgICAgICAgIHNldChMT0FERVJfTElCUkFSWV9QQVRIX1ZBUiAiRFlMRF9M
SUJSQVJZX1BBVEgiKQorICAgICAgICBzZXQoUFJFVl9MT0FERVJfTElCUkFSWV9QQVRIICIkRU5W
e0RZTERfTElCUkFSWV9QQVRIfSIpCisgICAgZWxzZSAoKQorICAgICAgICBzZXQoTE9BREVSX0xJ
QlJBUllfUEFUSF9WQVIgIkxEX0xJQlJBUllfUEFUSCIpCisgICAgICAgIHNldChQUkVWX0xPQURF
Ul9MSUJSQVJZX1BBVEggIiRFTlZ7TERfTElCUkFSWV9QQVRIfSIpCisgICAgZW5kaWYgKCkKKyAg
ICBzdHJpbmcoQ09NUEFSRSBFUVVBTCAiJHtQUkVWX0xPQURFUl9MSUJSQVJZX1BBVEh9IiAiIiBs
ZF9saWJyYXJ5X3BhdGhfZG9lc19ub3RfZXhpc3QpCisgICAgaWYgKGxkX2xpYnJhcnlfcGF0aF9k
b2VzX25vdF9leGlzdCkKKyAgICAgICAgc2V0KElOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSUJS
QVJZX1BBVEggIiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIpCisgICAgZWxzZSAo
KQorICAgICAgICBzZXQoSU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSCAiJHtD
TUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9OiR7UFJFVl9MT0FERVJfTElCUkFSWV9QQVRI
fSIpCisgICAgZW5kaWYgKCkKKworICAgICMgQWRkIHJlcXVpcmVkIC1MIGZsYWdzIGZyb20gJHtD
TUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSBmb3IgZy1pci1zY2FubmVyCisgICAgc3RyaW5nKFJF
R0VYIE1BVENIQUxMICItTFteIF0qIiBJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElOS0VSX0ZM
QUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IikKKworICAgIGFkZF9jdXN0b21fY29t
bWFuZCgKKyAgICAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUt
JHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgorICAgICAgICBERVBFTkRTIEphdmFTY3JpcHRD
b3JlCisgICAgICAgIENPTU1BTkQgQ0M9JHtDTUFLRV9DX0NPTVBJTEVSfSBDRkxBR1M9LVduby1k
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyBMREZMQUdTPQorICAgICAgICAgICAgJHtMT0FERVJfTElC
UkFSWV9QQVRIX1ZBUn09IiR7SU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSH0i
CisgICAgICAgICAgICAke0lOVFJPU1BFQ1RJT05fU0NBTk5FUn0KKyAgICAgICAgICAgIC0tcXVp
ZXQKKyAgICAgICAgICAgIC0td2Fybi1hbGwKKyAgICAgICAgICAgIC0tc3ltYm9sLXByZWZpeD1q
c2MKKyAgICAgICAgICAgIC0taWRlbnRpZmllci1wcmVmaXg9SlNDCisgICAgICAgICAgICAtLW5h
bWVzcGFjZT1KYXZhU2NyaXB0Q29yZQorICAgICAgICAgICAgLS1uc3ZlcnNpb249JHtXRUJLSVRH
VEtfQVBJX1ZFUlNJT059CisgICAgICAgICAgICAtLWluY2x1ZGU9R09iamVjdC0yLjAKKyAgICAg
ICAgICAgIC0tbGlicmFyeT1qYXZhc2NyaXB0Y29yZWd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lP
Tn0KKyAgICAgICAgICAgIC1MJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9CisgICAg
ICAgICAgICAke0lOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSU5LRVJfRkxBR1N9CisgICAgICAg
ICAgICAtLW5vLWxpYnRvb2wKKyAgICAgICAgICAgIC0tcGtnPWdvYmplY3QtMi4wCisgICAgICAg
ICAgICAtLXBrZy1leHBvcnQ9amF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJ
T059CisgICAgICAgICAgICAtLW91dHB1dD0ke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRD
b3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKyAgICAgICAgICAgIC0tYy1pbmNsdWRl
PSJqc2MvanNjLmgiCisgICAgICAgICAgICAtREpTQ19DT01QSUxBVElPTgorICAgICAgICAgICAg
LUkke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZQorICAgICAgICAgICAgLUkke0pBVkFTQ1JJUFRD
T1JFX0RJUn0KKyAgICAgICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRUdU
S19ESVJ9CisgICAgICAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlw
dENvcmUvZ2xpYgorICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNUQUxMRURfSEVBREVS
U30KKyAgICAgICAgICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi8qLmNwcAorICAg
ICkKKworICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgT1VUUFVUICR7Q01BS0VfQklO
QVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnR5cGVsaWIK
KyAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VC
S0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKyAgICAgICAgQ09NTUFORCAke0lOVFJPU1BFQ1RJT05f
Q09NUElMRVJ9IC0taW5jbHVkZWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9ICR7Q01BS0VfQklOQVJZ
X0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpciAtbyAke0NN
QUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS50
eXBlbGliCisgICAgICAgIFZFUkJBVElNCisgICAgKQorCisgICAgQUREX1RZUEVMSUIoJHtDTUFL
RV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0udHlw
ZWxpYikKK2VuZGlmICgpCisKK2ZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS9ndGtkb2Mt
anNjLWdsaWIuY2ZnCisgICAgIltqc2MtZ2xpYi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn1dXG4i
CisgICAgInBrZ2NvbmZpZ19maWxlPSR7SmF2YVNjcmlwdENvcmVfUEtHQ09ORklHX0ZJTEV9XG4i
CisgICAgImRlY29yYXRvcj1KU0NfQVBJXG4iCisgICAgImRlcHJlY2F0aW9uX2d1YXJkPUpTQ19E
SVNBQkxFX0RFUFJFQ0FURURcbiIKKyAgICAibmFtZXNwYWNlPWpzY1xuIgorICAgICJjZmxhZ3M9
LUkke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZVxuIgorICAgICIgICAgICAgLUkke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vQVBJL2dsaWJcbiIKKyAgICAiICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQQ09SRUdUS19ESVJ9XG4iCisgICAgIiAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFE
RVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYlxuIgorICAgICJkb2NfZGlyPSR7SkFWQVNDUklQ
VENPUkVfRElSfS9BUEkvZ2xpYi9kb2NzXG4iCisgICAgInNvdXJjZV9kaXJzPSR7SkFWQVNDUklQ
VENPUkVfRElSfS9BUEkvZ2xpYlxuIgorICAgICJoZWFkZXJzPSR7SmF2YVNjcmlwdENvcmVfSU5T
VEFMTEVEX0hFQURFUlN9XG4iCisgICAgIm1haW5fc2dtbF9maWxlPWpzYy1nbGliLWRvY3Muc2dt
bFxuIgorKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtV1BFLmNt
YWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDg2Y2Yy
MTIxNzc3Li44NjJlNzI3Y2U3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Bs
YXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdQRS5j
bWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoR0xpYi5jbWFrZSkKKwogbGlzdChBUFBFTkQg
SmF2YVNjcmlwdENvcmVfTElCUkFSSUVTCiAgICAgJHtHTElCX0xJQlJBUklFU30KICkKQEAgLTI5
LDMgKzMxLDEwIEBAIGluc3RhbGwoRklMRVMgJHtKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVX
T1JLX0hFQURFUlN9CiAgICAgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElS
fS93cGUtJHtXUEVfQVBJX1ZFUlNJT059L1dQRS9KYXZhU2NyaXB0Q29yZSIKICAgICBDT01QT05F
TlQgIkRldmVsb3BtZW50IgogKQorCitpbnN0YWxsKEZJTEVTICR7SmF2YVNjcmlwdENvcmVfSU5T
VEFMTEVEX0hFQURFUlN9CisgICAgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9JTkNMVURF
RElSfS93cGUtJHtXUEVfQVBJX1ZFUlNJT059L1dQRS9qc2MiCisgICAgQ09NUE9ORU5UICJEZXZl
bG9wbWVudCIKKykKKworYWRkX2RlZmluaXRpb25zKC1ESlNDX0NPTVBJTEFUSU9OKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBhNTNhNDQ2OTA4Ni4uOWVlYzRjMjA4NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC05OCw2ICs5OCwxMCBAQCBleHRlcm4g
IkMiIHZvaWQgb2JqY19hdXRvcmVsZWFzZVBvb2xQb3Aodm9pZCAqY29udGV4dCk7CiAjZW5kaWYK
ICNlbmRpZiAvLyBVU0UoRk9VTkRBVElPTikKIAorI2lmIFVTRShHTElCKQorI2luY2x1ZGUgIkpT
Q0dMaWJXcmFwcGVyT2JqZWN0LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC00NjEsNyArNDY1LDcgQEAgdm9pZCBIZWFwOjpsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpCiAKIHZvaWQgSGVhcDo6cmVsZWFzZURlbGF5ZWRSZWxlYXNlZE9iamVjdHMo
KQogewotI2lmIFVTRShGT1VOREFUSU9OKQorI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoR0xJ
QikKICAgICAvLyBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhlIGNhc2UgdGhhdCByZWxlYXNp
bmcgYW4gb2JqZWN0IGNhbiBjcmVhdGUgbW9yZSBvYmplY3RzIGR1ZSB0byB0aGUKICAgICAvLyBy
ZWxlYXNlIGNhbGxpbmcgaW50byBKUy4gV2hlbiB0aG9zZSBKUyBjYWxsKHMpIGV4aXQgYW5kIGFs
bCBsb2NrcyBhcmUgYmVpbmcgZHJvcHBlZCB3ZSBlbmQgdXAKICAgICAvLyBiYWNrIGhlcmUgYW5k
IGNvdWxkIHRyeSB0byByZWN1cnNpdmVseSByZWxlYXNlIG9iamVjdHMuIFdlIGd1YXJkIHRoYXQg
d2l0aCBhIHJlY3Vyc2l2ZSBlbnRyeQpAQCAtNDczLDE1ICs0NzcsMTkgQEAgdm9pZCBIZWFwOjpy
ZWxlYXNlRGVsYXllZFJlbGVhc2VkT2JqZWN0cygpCiAgICAgICAgIHdoaWxlICghbV9kZWxheWVk
UmVsZWFzZU9iamVjdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV92bS0+Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAKLSAgICAgICAgICAgIFZlY3RvcjxSZXRh
aW5QdHI8Q0ZUeXBlUmVmPj4gb2JqZWN0c1RvUmVsZWFzZSA9IFdURk1vdmUobV9kZWxheWVkUmVs
ZWFzZU9iamVjdHMpOworICAgICAgICAgICAgYXV0byBvYmplY3RzVG9SZWxlYXNlID0gV1RGTW92
ZShtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cyk7CiAKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRyb3AgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIGFyYml0
cmFyeSBjb2RlLgogICAgICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhtX3ZtKTsKIAorI2lmIFVTRShGT1VOREFUSU9OKQogICAgICAgICAgICAgICAgIHZvaWQq
IGNvbnRleHQgPSBvYmpjX2F1dG9yZWxlYXNlUG9vbFB1c2goKTsKKyNlbmRpZgogICAgICAgICAg
ICAgICAgIG9iamVjdHNUb1JlbGVhc2UuY2xlYXIoKTsKKyNpZiBVU0UoRk9VTkRBVElPTikKICAg
ICAgICAgICAgICAgICBvYmpjX2F1dG9yZWxlYXNlUG9vbFBvcChjb250ZXh0KTsKKyNlbmRpZgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CmluZGV4IDViNTFkYTVlZTZjLi5mMmEwNzEyYjM5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaApAQCAtODksNiArODksMTAgQEAgY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwog
c3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIAorI2lmIFVTRShHTElCKQorY2xhc3MgSlNDR0xp
YldyYXBwZXJPYmplY3Q7CisjZW5kaWYKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTcGVjdWxh
dGl2ZUpJVDsKIGNsYXNzIFdvcmtsaXN0OwpAQCAtMjcyLDYgKzI3Niw5IEBAIHB1YmxpYzoKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHJlbGVhc2VT
b29uKFJldGFpblB0cjxUPiYmKTsKICNlbmRpZgorI2lmIFVTRShHTElCKQorICAgIHZvaWQgcmVs
ZWFzZVNvb24oc3RkOjp1bmlxdWVfcHRyPEpTQ0dMaWJXcmFwcGVyT2JqZWN0PiYmKTsKKyNlbmRp
ZgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWdpc3RlcldlYWtHQ01hcChXZWFrR0NN
YXBCYXNlKiB3ZWFrR0NNYXApOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdpc3Rl
cldlYWtHQ01hcChXZWFrR0NNYXBCYXNlKiB3ZWFrR0NNYXApOwpAQCAtNjQyLDYgKzY0OSwxMCBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZUeXBlUmVmPj4gbV9kZWxheWVkUmVs
ZWFzZU9iamVjdHM7CiAgICAgdW5zaWduZWQgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50
OwogI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4+IG1fZGVsYXllZFJlbGVhc2VPYmplY3RzOworICAgIHVuc2lnbmVk
IG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCB7IDAgfTsKKyNlbmRpZgogCiAgICAgSGFz
aFNldDxXZWFrR0NNYXBCYXNlKj4gbV93ZWFrR0NNYXBzOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggZTU2MWM5NjUzNzAuLjBhMWRiMjlkNGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTE2Nyw2ICsxNjcs
MTMgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYgb2JqZWN0
KQogfQogI2VuZGlmCiAKKyNpZiBVU0UoR0xJQikKK2lubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VT
b29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NHTGliV3JhcHBlck9iamVjdD4mJiBvYmplY3QpCit7Cisg
ICAgbV9kZWxheWVkUmVsZWFzZU9iamVjdHMuYXBwZW5kKFdURk1vdmUob2JqZWN0KSk7Cit9Cisj
ZW5kaWYKKwogaW5saW5lIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7CiAg
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGsucGMuaW4gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGsucGMuaW4KaW5kZXggYjJhZmIyNmIy
YjIuLmM0MzRmOTAzODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvamF2YXNj
cmlwdGNvcmVndGsucGMuaW4KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2phdmFzY3JpcHRj
b3JlZ3RrLnBjLmluCkBAIC02LDYgKzYsNiBAQCBpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRl
CiBOYW1lOiBKYXZhU2NyaXB0Q29yZUdUSysKIERlc2NyaXB0aW9uOiBHVEsrIHZlcnNpb24gb2Yg
dGhlIEphdmFTY3JpcHRDb3JlIGVuZ2luZQogVmVyc2lvbjogQFBST0pFQ1RfVkVSU0lPTkAKLVJl
cXVpcmVzOiBnbGliLTIuMAorUmVxdWlyZXM6IGdsaWItMi4wIGdvYmplY3QtMi4wCiBMaWJzOiAt
TCR7bGliZGlyfSAtbGphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJX1ZFUlNJT05ACiBD
ZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS93ZWJraXRndGstQFdFQktJVEdUS19BUElfVkVSU0lPTkAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApp
bmRleCAwMWUxYmNiZTJkYS4uOGY4NDBjYzQ3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE4NSw2ICsxODUsMTEgQEAKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNlbmRpZgogCisj
aWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyNpbmNsdWRlICJKU0NDYWxsYmFja0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1hcC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCkBAIC01NjcsNyArNTcyLDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICAgICAgaW5pdC5zZXQoSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5v
d25lci0+bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CiAjZW5kaWYKLSAg
ICAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIG1fZ2xpYkNhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3Ry
dWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNDQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CisgICAgbV9nbGliV3JhcHBlck9i
amVjdFN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxT
dHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVy
LCBpbml0Lm93bmVyLT5tX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKKyNl
bmRpZgogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICAKICAgICBtX29yaWdpbmFsQXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW1VuZGVjaWRlZFNoYXBlID4+IEluZGV4aW5nU2hhcGVT
aGlmdF0uc2V0KHZtLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFVuZGVjaWRlZCkpOwpAQCAtMTM4MCw2ICsx
Mzk0LDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIHRo
aXNPYmplY3QtPm1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdGhpc09iamVjdC0+bV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgdGhpc09iamVj
dC0+bV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0
aGlzT2JqZWN0LT5tX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwog
I2VuZGlmCiAgICAgdGhpc09iamVjdC0+bV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnZp
c2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXJyb3JTdHJ1
Y3R1cmUpOwpAQCAtMTYxMiw0ICsxNjMwLDExIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICBBU1NFUlQodHlwZSgp
ID09IEdsb2JhbE9iamVjdFR5cGUpOwogfQogCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQK
K3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBw
ZXJNYXA+JiYgbWFwKQoreworICAgIG1fd3JhcHBlck1hcCA9IFdURk1vdmUobWFwKTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDRmYTBhZjQwNmNkLi5jNmUyOTdmMDM4MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0x
MTYsNiArMTE2LDEwIEBAIGNsYXNzIFZhcmlhYmxlRW52aXJvbm1lbnQ7CiBzdHJ1Y3QgQWN0aXZh
dGlvblN0YWNrTm9kZTsKIHN0cnVjdCBIYXNoVGFibGU7CiAKKyNpZmRlZiBKU0NfR0xJQl9BUElf
RU5BQkxFRAorY2xhc3MgV3JhcHBlck1hcDsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBX
YXRjaHBvaW50PiBjbGFzcyBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDsK
IAogI2RlZmluZSBERUZJTkVfU1RBTkRBUkRfQlVJTFRJTihtYWNybywgdXBwZXJOYW1lLCBsb3dl
ck5hbWUpIG1hY3JvKHVwcGVyTmFtZSwgbG93ZXJOYW1lLCBsb3dlck5hbWUsIEpTICMjIHVwcGVy
TmFtZSwgdXBwZXJOYW1lLCBvYmplY3QpCkBAIC0zMjQsNiArMzI4LDEwIEBAIHB1YmxpYzoKICNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwg
U3RydWN0dXJlPiBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9w
ZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0
dXJlOworI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBMYXp5UHJvcGVy
dHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGli
V3JhcHBlck9iamVjdFN0cnVjdHVyZTsKICNlbmRpZgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2Jh
bE9iamVjdCwgU3RydWN0dXJlPiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmU7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxsZWVTdHJ1Y3R1cmU7CkBAIC02MzUsNiArNjQz
LDEwIEBAIHB1YmxpYzoKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFN0cnVjdHVyZSog
b2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNDYWxs
YmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogb2JqY1dy
YXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNXcmFwcGVyT2JqZWN0
U3RydWN0dXJlLmdldCh0aGlzKTsgfQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJM
RUQKKyAgICBTdHJ1Y3R1cmUqIGdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KKyAg
ICBTdHJ1Y3R1cmUqIGdsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICNlbmRpZgogICAgIFN0
cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0ZVN0cnVjdHVyZS5n
ZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMp
OyB9CkBAIC04ODgsNyArOTAwLDExIEBAIHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBw
ZXJNYXAoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dFdyYXBwZXJNYXAoSlNXcmFwcGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAj
ZW5kaWYKLSAgICAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIFdyYXBwZXJNYXAq
IHdyYXBwZXJNYXAoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KKyAgICB2
b2lkIHNldFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+JiYpOworI2VuZGlm
CisKICAgICBUaHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1
cm4gKm1fdGhyZWFkTG9jYWxDYWNoZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC05MjEsNyAr
OTM3LDkgQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFJldGFpblB0
cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19H
TElCX0FQSV9FTkFCTEVECisgICAgc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+IG1fd3JhcHBl
ck1hcDsKKyNlbmRpZgogICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2Fs
Q2FjaGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI1MTExNWJjYmNiLi4zYzQwYmRjOWEyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0wMy0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbml0aWFsIGltcGxlbWVu
dGF0aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNldCBkZWNvcmF0b3IgYW5kIGRlcHJlY2F0
aW9uX2d1YXJkIG9wdGlvbnMgaW4gQVBJIGRvY3MgY29uZmlnIGZpbGVzLCBzaW5jZSB0aGV5IGFy
ZSBubyBsb25nZXIgY29tbW9uIHRvIGFsbAorICAgICAgICBsaWJyYXJpZXMuCisKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKwogMjAxOC0wMy0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRoTl0gSW1wbGVtZW50IGF1dGhlbnRpY2F0
b3JNYWtlQ3JlZGVudGlhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGM2YjMwNjZjM2Eu
LjA0MzVmY2NiMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTg3MSw2ICs4NzEsOCBA
QCBlbmRpZiAoKQogZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9L2d0a2RvYy13ZWJraXQy
Z3RrLmNmZwogICAgICJbd2Via2l0Mmd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn1dXG4iCiAg
ICAgInBrZ2NvbmZpZ19maWxlPSR7V2ViS2l0Ml9QS0dDT05GSUdfRklMRX1cbiIKKyAgICAiZGVj
b3JhdG9yPVdFQktJVF9BUEl8V0VCS0lUX0RFUFJFQ0FURUR8V0VCS0lUX0RFUFJFQ0FURURfRk9S
XFwoLitcXClcbiIKKyAgICAiZGVwcmVjYXRpb25fZ3VhcmQ9V0VCS0lUX0RJU0FCTEVfREVQUkVD
QVRFRFxuIgogICAgICJuYW1lc3BhY2U9d2Via2l0XG4iCiAgICAgImNmbGFncz0tSSR7Q01BS0Vf
U09VUkNFX0RJUn0vU291cmNlXG4iCiAgICAgIiAgICAgICAtSSR7V0VCS0lUX0RJUn0vU2hhcmVk
L0FQSS9nbGliXG4iCkBAIC04OTIsNiArODk0LDggQEAgZmlsZShXUklURSAke0NNQUtFX0JJTkFS
WV9ESVJ9L2d0a2RvYy13ZWJraXQyZ3RrLmNmZwogZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9E
SVJ9L2d0a2RvYy13ZWJraXRkb20uY2ZnCiAgICAgIlt3ZWJraXRkb21ndGstJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059XVxuIgogICAgICJwa2djb25maWdfZmlsZT0ke1dlYktpdDJfUEtHQ09ORklH
X0ZJTEV9XG4iCisgICAgImRlY29yYXRvcj1XRUJLSVRfQVBJfFdFQktJVF9ERVBSRUNBVEVEfFdF
QktJVF9ERVBSRUNBVEVEX0ZPUlxcKC4rXFwpXG4iCisgICAgImRlcHJlY2F0aW9uX2d1YXJkPVdF
QktJVF9ESVNBQkxFX0RFUFJFQ0FURURcbiIKICAgICAibmFtZXNwYWNlPXdlYmtpdF9kb21cbiIK
ICAgICAiY2ZsYWdzPS1JJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2VcbiIKICAgICAiICAgICAg
IC1JJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NXG4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFr
ZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDgyZmE3MTczNDFlLi40OWExOTFkMGIyZiAxMDA2NDQK
LS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKQEAgLTE2OCw2ICsxNjgsNyBAQCBhZGRfZGVmaW5pdGlvbnMoLURCVUlM
RElOR19HVEtfXz0xKQogYWRkX2RlZmluaXRpb25zKC1ER0VUVEVYVF9QQUNLQUdFPSJXZWJLaXQy
R1RLLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCiBhZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJ
Uj0iJHtDTUFLRV9JTlNUQUxMX0RBVEFESVJ9IikKIGFkZF9kZWZpbml0aW9ucygtRFdFQktJVEdU
S19BUElfVkVSU0lPTl9TVFJJTkc9IiR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCithZGRfZGVm
aW5pdGlvbnMoLURKU0NfR0xJQl9BUElfRU5BQkxFRCkKIAogc2V0KEdUS19MSUJSQVJJRVMgJHtH
VEszX0xJQlJBUklFU30pCiBzZXQoR1RLX0lOQ0xVREVfRElSUyAke0dUSzNfSU5DTFVERV9ESVJT
fSkKQEAgLTM2OCw5ICszNjksMTIgQEAgc2V0KERFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElS
ICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vd2Via2l0Z3RrKQogc2V0KERFUklWRURfU09VUkNFU19X
RUJLSVRHVEtfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElSfS93ZWJraXQp
CiBzZXQoREVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJ
Un0vd2Via2l0Mmd0aykKIHNldChERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19BUElfRElSICR7
REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS93ZWJraXQyKQorc2V0KERFUklWRURfU09V
UkNFU19KQVZBU0NSSVBDT1JFR1RLX0RJUiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L2phdmFzY3JpcHRjb3JlZ3RrKQorc2V0KERFUklWRURfU09VUkNFU19KQVZBU0NSSVBD
T1JFX0dMSUJfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2ph
dmFzY3JpcHRjb3JlZ3RrL2pzYykKIHNldChGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19E
SVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS93ZWJraXQyZ3RrKQogc2V0KEZPUldBUkRJTkdf
SEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElS
fS93ZWJraXQyZ3RrLXdlYmV4dGVuc2lvbikKIAorc2V0KEphdmFTY3JpcHRDb3JlX1BLR0NPTkZJ
R19GSUxFICR7Q01BS0VfQklOQVJZX0RJUn0vU291cmNlL0phdmFTY3JpcHRDb3JlL2phdmFzY3Jp
cHRjb3JlZ3RrLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5wYykKIHNldChXZWJLaXRfUEtHQ09O
RklHX0ZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2d0ay93ZWJr
aXRndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnBjKQogc2V0KFdlYktpdDJfUEtHQ09ORklH
X0ZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvV2ViS2l0L3dlYmtpdDJndGstJHtXRUJL
SVRHVEtfQVBJX1ZFUlNJT059LnBjKQogc2V0KFdlYktpdDJXZWJFeHRlbnNpb25fUEtHQ09ORklH
X0ZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvV2ViS2l0L3dlYmtpdDJndGstd2ViLWV4
dGVuc2lvbi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0ucGMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmlu
ZGV4IGMwMzVmOWNkMjI0Li4yMGYwZDMzNzdhOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09w
dGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTk0
LDYgKzk0LDcgQEAgZW5kaWYgKCkKIGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX1dQRV9fPTEp
CiBhZGRfZGVmaW5pdGlvbnMoLURHRVRURVhUX1BBQ0tBR0U9IldQRSIpCiBhZGRfZGVmaW5pdGlv
bnMoLUREQVRBX0RJUj0iJHtDTUFLRV9JTlNUQUxMX0RBVEFESVJ9IikKK2FkZF9kZWZpbml0aW9u
cygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
Q0FJUk8gVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9FR0wgVFJVRSkKQEAgLTEx
Myw2ICsxMTQsNyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQgVFJVRSkKIHNldChGT1JXQVJESU5HX0hFQURFUlNfRElSICR7REVSSVZF
RF9TT1VSQ0VTX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMpCiBzZXQoRk9SV0FSRElOR19IRUFERVJT
X1dQRV9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS93cGUpCiBzZXQoRk9SV0FSRElOR19I
RUFERVJTX1dQRV9FWFRFTlNJT05fRElSICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vd3BlLXdl
YmV4dGVuc2lvbikKK3NldChERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRV9HTElCX0FQSV9E
SVIgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9qYXZhc2NyaXB0Y29yZWds
aWIvanNjKQogc2V0KERFUklWRURfU09VUkNFU19XUEVfQVBJX0RJUiAke0RFUklWRURfU09VUkNF
U19XRUJLSVRfRElSfS93cGUpCiAKIGluY2x1ZGUoR1N0cmVhbWVyQ2hlY2tzKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg4MDFiMjA3ZWY1Li5k
MmVkYzIxMzg4NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE4LTAzLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEluaXRpYWwgaW1wbGVt
ZW50YXRpb24gb2YgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDYxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIHRoZSBu
ZXcgQVBJIGFuZCBnZW5lcmF0ZSB0aGUgQVBJIGRvY3VtZW50YXRpb24gd2l0aCBnZW5lcmF0ZS1n
dGtkb2MuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IEln
bm9yZSBzb21lIHN0eWxlIGVycm9ycyBpbiBwdWJsaWMgR0xpYiBBUEkgaGVhZGVycy4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9K
YXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwOiBBZGRlZC4KKyAgICAgICAgKExlYWtDaGVj
a2VyOjp+TGVha0NoZWNrZXIpOgorICAgICAgICAoTGVha0NoZWNrZXI6OndhdGNoKToKKyAgICAg
ICAgKEV4Y2VwdGlvbkhhbmRsZXI6OkV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoRXhjZXB0
aW9uSGFuZGxlcjo6fkV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoRXhjZXB0aW9uSGFuZGxl
cjo6cHVzaCk6CisgICAgICAgIChFeGNlcHRpb25IYW5kbGVyOjpwb3ApOgorICAgICAgICAoanNj
Q29udGV4dEdhcmJhZ2VDb2xsZWN0KToKKyAgICAgICAgKHRlc3RKU0NCYXNpYyk6CisgICAgICAg
ICh0ZXN0SlNDVHlwZXMpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGNhbGxiYWNrKToKKyAg
ICAgICAgKGRvdWJsZUFuZFNldEluUmVzdWx0KToKKyAgICAgICAgKHN1bUZ1bmN0aW9uKToKKyAg
ICAgICAgKHRlc3RKU0NGdW5jdGlvbik6CisgICAgICAgICh0ZXN0SlNDT2JqZWN0KToKKyAgICAg
ICAgKGZvb0NyZWF0ZSk6CisgICAgICAgIChmb29DcmVhdGVXaXRoRm9vKToKKyAgICAgICAgKGZv
b0ZyZWUpOgorICAgICAgICAoc2V0Rm9vKToKKyAgICAgICAgKGdldEZvbyk6CisgICAgICAgIChz
ZXRTaWJsaW5nKToKKyAgICAgICAgKGdldFNpYmxpbmcpOgorICAgICAgICAobXVsdGlwbHlGb28p
OgorICAgICAgICAoZ2V0TXVsdGlwbHlGb28pOgorICAgICAgICAoZ2V0TXVsdGlwbHlGb29Bc3lu
Yyk6CisgICAgICAgIChiYXpDcmVhdGUpOgorICAgICAgICAodGVzdEpTQ0NsYXNzKToKKyAgICAg
ICAgKGJhckNyZWF0ZSk6CisgICAgICAgIChiYXJGcmVlKToKKyAgICAgICAgKHNldEJhcik6Cisg
ICAgICAgIChnZXRCYXIpOgorICAgICAgICAodGVzdEpTQ1Byb3RvdHlwZXMpOgorICAgICAgICAo
Y3JlYXRlRXJyb3IpOgorICAgICAgICAodGVzdEpTQ0V4Y2VwdGlvbnMpOgorICAgICAgICAodGVz
dEpTQ1Byb21pc2VzKToKKyAgICAgICAgKGZvb0ZyZWVBbmRMb2cpOgorICAgICAgICAodGVzdEpT
Q0dhcmJhZ2VDb2xsZWN0b3IpOgorICAgICAgICAodGVzdHNKU0NWaXJ0dWFsTWFjaGluZSk6Cisg
ICAgICAgICh0ZXN0c0pTQ0F1dG9jbGVhbnVwcyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAoZ2V0X2dlbmVyYXRvcl9mb3JfY29uZmln
KToKKwogMjAxOC0wMy0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyOTY4OS4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCAwMTA2ZWUzMDFiOS4uZjFiMDkyZDFhZmUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTE1MSw2ICsxNTEs
NyBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgKFsKICAgICAgICMgVGhlIEdUSysg
YW5kIFdQRSBBUElzIHVzZSB1cHBlciBjYXNlLCB1bmRlcnNjb3JlIHNlcGFyYXRlZCwgd29yZHMg
aW4KICAgICAgICMgY2VydGFpbiB0eXBlcyBvZiBlbnVtcyAoZS5nLiBzaWduYWxzLCBwcm9wZXJ0
aWVzKS4KKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywgJ0FQ
SScsICdnbGliJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnU2hh
cmVkJywgJ0FQSScsICdnbGliJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJL
aXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICdnbGliJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnKSwKQEAgLTMzNSw3ICsz
MzYsOCBAQCBfTkVWRVJfU0tJUFBFRF9GSUxFUyA9IF9ORVZFUl9TS0lQUEVEX0pTX0ZJTEVTICsg
WwogX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogICAgIG9zLnBhdGguam9pbignVG9v
bHMnLCAnVGVzdFdlYktpdEFQSScsICdUZXN0cycsICdXZWJLaXRHdGsnKSwKIAotICAgICMgV2Vi
S2l0Ki5oIGZpbGVzIGluIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9bZ3RrfHdwZV0sIGV4
Y2VwdCB0aG9zZSBlbmRpbmcgaW4gUHJpdmF0ZS5oIGFyZSBBUEkgaGVhZGVycywgd2hpY2ggZG8g
bm90IGZvbGxvdyBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICMgV2ViS2l0Ki5oIGFuZCBKU0Mq
LmggZmlsZXMgaW4sIGV4Y2VwdCB0aG9zZSBlbmRpbmcgaW4gUHJpdmF0ZS5oIGFyZSBBUEkgaGVh
ZGVycywgd2hpY2ggZG8gbm90IGZvbGxvdyBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgIHJlLmNv
bXBpbGUocmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNlJywgJ0phdmFTY3JpcHRDb3JlJywg
J0FQSScsICdnbGliJykgKyBvcy5wYXRoLnNlcCkgKyByJ0pTQyg/IS4qUHJpdmF0ZVwuaCkuKlwu
aCQnKSwKICAgICByZS5jb21waWxlKHJlLmVzY2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnKSArIG9zLnBhdGguc2VwKSArIHInV2Vi
S2l0KD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAogICAgIHJlLmNvbXBpbGUocmUuZXNjYXBlKG9z
LnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ3dwZScp
ICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCiAgICAg
cmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0JywgJ1dl
YlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycpICsgb3MucGF0aC5zZXAp
ICsgcidXZWJLaXQoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCkBAIC0zNDQsNiArMzQ2LDcgQEAg
X1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogICAgICMgR09iamVjdCBET00gYmluZGlu
Z3MgY29waWVkIGZyb20gZ2VuZXJhdGVkIGNvZGUgdXNpbmcgZGlmZmVyZW50IGNvZGluZyBzdHls
ZS4KICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnV2ViUHJvY2VzcycsICdJ
bmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ0RPTScpLAogCisgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInLCAnanNjLmgnKSwKICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQSScsICdn
dGsnLCAnd2Via2l0Mi5oJyksCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0Jywg
J1VJUHJvY2VzcycsICdBUEknLCAnd3BlJywgJ3dlYmtpdC5oJyksCiAgICAgb3MucGF0aC5qb2lu
KCdTb3VyY2UnLCAnV2ViS2l0JywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJ
JywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyksCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybUdUSy5jbWFrZQppbmRleCA2MjAyZjQ2YmFmMC4uNDVlMDJkMDRhYzQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTUsNiArMTUsOCBAQCBzZXQoRm9yd2FyZGlu
Z0hlYWRlcnNGb3JUZXN0V2ViS2l0QVBJX05BTUUgVGVzdFdlYktpdEFQSS1mb3J3YXJkaW5nLWhl
YWRlcnMpCiBpbmNsdWRlX2RpcmVjdG9yaWVzKAogICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJ
Un0KICAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlCisgICAgJHtG
T1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliCisgICAgJHtERVJJVkVE
X1NPVVJDRVNfSkFWQVNDUklQQ09SRUdUS19ESVJ9CiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQVBJL0Mvc291cAogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2d0awogICAg
ICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsKQEAgLTExNiw2ICsxMTgsMTUgQEAgbGlz
dChBUFBFTkQgVGVzdFdURl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMv
V1RGL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKICkKIAorYWRkX2V4ZWN1dGFibGUoVGVzdEpTQyAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3Bw
KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRlc3RKU0MKKyAgICAke0dMSUJfTElCUkFSSUVTfQor
ICAgIEphdmFTY3JpcHRDb3JlCispCithZGRfdGVzdChUZXN0SlNDICR7VEVTVFdFQktJVEFQSV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L0phdmFTY3JpcHRDb3JlL1Rlc3RKU0MpCitzZXRfdGVz
dHNfcHJvcGVydGllcyhUZXN0SlNDIFBST1BFUlRJRVMgVElNRU9VVCA2MCkKK3NldF90YXJnZXRf
cHJvcGVydGllcyhUZXN0SlNDIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7
VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L0phdmFTY3JpcHRDb3JlKQor
CiBpZiAoQ09NUElMRVJfSVNfR0NDX09SX0NMQU5HKQogICAgIFdFQktJVF9BRERfVEFSR0VUX0NY
WF9GTEFHUyhUZXN0V2ViS2l0IC1Xbm8tc2lnbi1jb21wYXJlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bmRlZgpAQCAtMTI0LDQgKzEzNSw4IEBAIGlm
IChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZM
QUdTKFRlc3RXZWJDb3JlIC1Xbm8tc2lnbi1jb21wYXJlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC1Xbm8tdW5kZWYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLVduby11bnVzZWQtcGFyYW1ldGVyKQorCisgICAgV0VCS0lU
X0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RKU0MgLVduby1zaWduLWNvbXBhcmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVuZGVmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bnVzZWQtcGFyYW1ldGVyKQogZW5kaWYg
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2UgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDk2YTM1N2Y3NjAwLi4z
ZDUwODVjMzFlMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5j
bWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0xNSw2
ICsxNSw3IEBAIHNldChGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RXZWJLaXRBUElfTkFNRSBUZXN0
V2ViS2l0QVBJLWZvcndhcmRpbmctaGVhZGVycykKIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICAg
JHtGT1JXQVJESU5HX0hFQURFUlNfRElSfQogICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0v
SmF2YVNjcmlwdENvcmUKKyAgICAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRD
b3JlL2dsaWIKICAgICAke1RPT0xTX0RJUn0vd3BlL0hlYWRsZXNzVmlld0JhY2tlbmQKICkKIApA
QCAtODQsNiArODUsMTUgQEAgYWRkX3Rlc3QoVGVzdFdlYktpdCAke1RFU1RXRUJLSVRBUElfUlVO
VElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQvVGVzdFdlYktpdCkKIHNldF90ZXN0c19wcm9w
ZXJ0aWVzKFRlc3RXZWJLaXQgUFJPUEVSVElFUyBUSU1FT1VUIDYwKQogc2V0X3RhcmdldF9wcm9w
ZXJ0aWVzKFRlc3RXZWJLaXQgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtU
RVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0KQogCithZGRfZXhl
Y3V0YWJsZShUZXN0SlNDICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL0phdmFTY3JpcHRDb3Jl
L2dsaWIvVGVzdEpTQy5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoVGVzdEpTQworICAgICR7
R0xJQl9MSUJSQVJJRVN9CisgICAgSmF2YVNjcmlwdENvcmUKKykKK2FkZF90ZXN0KFRlc3RKU0Mg
JHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNjcmlwdENvcmUv
VGVzdEpTQykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBUSU1FT1VU
IDYwKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RKU0MgUFJPUEVSVElFUyBSVU5USU1FX09V
VFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0v
SmF2YVNjcmlwdENvcmUpCisKIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VC
S0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJDb3JlIC1Xbm8tc2lnbi1jb21wYXJlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1Xbm8tdW5kZWYKQEAg
LTkxLDQgKzEwMSw3IEBAIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lU
X0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJLaXQgLVduby1zaWduLWNvbXBhcmUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVuZGVmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bnVzZWQtcGFyYW1ldGVy
KQorICAgIFdFQktJVF9BRERfVEFSR0VUX0NYWF9GTEFHUyhUZXN0SlNDIC1Xbm8tc2lnbi1jb21w
YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bmRlZgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1Xbm8tdW51c2VkLXBhcmFt
ZXRlcikKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0ph
dmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjBkNjY3ZmFhMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9nbGliL1Rlc3RKU0MuY3BwCkBAIC0wLDAg
KzEsMTg2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisvLyBJbmNsdWRlIEpTQ0NvbnRleHRQcml2YXRlLmggdG8gYmUgYWJs
ZSB0byBydW4gZ2FyYmFnZSBjb2xsZWN0b3IgZm9yIHRlc3RpbmcuCisjZGVmaW5lIEpTQ19DT01Q
SUxBVElPTiAxCisjaW5jbHVkZSAianNjL0pTQ0NvbnRleHRQcml2YXRlLmgiCisjdW5kZWYgSlND
X0NPTVBJTEFUSU9OCisKKyNpbmNsdWRlIDxqc2MvanNjLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+CisKK2NsYXNzIExlYWtDaGVja2VyIHsKK3B1YmxpYzoKKyAgICBMZWFrQ2hlY2tl
cigpID0gZGVmYXVsdDsKKworICAgIH5MZWFrQ2hlY2tlcigpCisgICAgeworICAgICAgICBpZiAo
bV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgZ19wcmludCgiTGVha2VkIG9iamVjdHM6Iik7CisgICAgICAgIGZvciAoYXV0byogb2JqZWN0
IDogbV93YXRjaGVkT2JqZWN0cykKKyAgICAgICAgICAgIGdfcHJpbnQoIiBbJXMoJXApICV1IHJl
ZnNdIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5z
dGFuY2UqPihvYmplY3QpKSwgb2JqZWN0LCBHX09CSkVDVChvYmplY3QpLT5yZWZfY291bnQpOwor
ICAgICAgICBnX3ByaW50KCJcbiIpOworICAgICAgICBnX2Fzc2VydF90cnVlKG1fd2F0Y2hlZE9i
amVjdHMuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHdhdGNoKHZvaWQqIG9iamVjdCkK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoR19JU19PQkpFQ1Qob2JqZWN0KSk7CisgICAg
ICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRkKG9iamVjdCk7CisgICAgICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKG9iamVjdCksIFtdKGdwb2ludGVyIHVzZXJEYXRhLCBHT2JqZWN0KiBvYmpl
Y3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PExlYWtDaGVja2VyKj4odXNlckRhdGEpLT5t
X3dhdGNoZWRPYmplY3RzLnJlbW92ZShvYmplY3QpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDx2b2lkKj4gbV93YXRjaGVkT2JqZWN0czsKK307CisK
K2NsYXNzIEV4Y2VwdGlvbkhhbmRsZXIgeworcHVibGljOgorICAgIEV4Y2VwdGlvbkhhbmRsZXIo
SlNDQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7
CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250ZXh0LCBb
XShKU0NDb250ZXh0KiwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7CisgICAg
ICAgICAgICBnX2Vycm9yKCJVTkVYUEVDVEVEIEVYQ0VQVElPTjogJXMiLCBqc2NfZXhjZXB0aW9u
X2dldF9tZXNzYWdlKGV4Y2VwdGlvbikpOworICAgICAgICB9LCBudWxscHRyLCBudWxscHRyKTsK
KyAgICB9CisKKyAgICB+RXhjZXB0aW9uSGFuZGxlcigpCisgICAgeworICAgICAgICBwb3AoKTsK
KyAgICB9CisKKyAgICB2b2lkIHB1c2goSlNDRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyLCBncG9p
bnRlciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0cikK
KyAgICB7CisgICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIobV9jb250
ZXh0LCBoYW5kbGVyLCB1c2VyRGF0YSwgZGVzdHJveUZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICB2
b2lkIHBvcCgpCisgICAgeworICAgICAgICBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRs
ZXIobV9jb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNDQ29udGV4dCogbV9jb250
ZXh0OworfTsKKworI2RlZmluZSBnX2Fzc2VydF90aHJvd19iZWdpbihoYW5kbGVyLCBkaWRUaHJv
dykgXAorICAgIGRpZFRocm93ID0gZmFsc2U7IFwKKyAgICBoYW5kbGVyLnB1c2goW10oSlNDQ29u
dGV4dCosIEpTQ0V4Y2VwdGlvbiosIGdwb2ludGVyIHVzZXJEYXRhKSB7IFwKKyAgICAgICAgKnN0
YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSkgPSB0cnVlOyBcCisgICAgfSwgJmRpZFRocm93LCBu
dWxscHRyKTsKKworI2RlZmluZSBnX2Fzc2VydF9kaWRfdGhyb3coaGFuZGxlciwgZGlkVGhyb3cp
IFwKKyAgICBoYW5kbGVyLnBvcCgpOyBcCisgICAgZ19hc3NlcnRfdHJ1ZShkaWRUaHJvdyk7IFwK
KyAgICBkaWRUaHJvdyA9IGZhbHNlOworCitleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91c0dh
cmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CisKK3N0YXRpYyB2b2lkIGpz
Y0NvbnRleHRHYXJiYWdlQ29sbGVjdChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhqc2NDb250ZXh0R2V0SlNDb250ZXh0
KGNvbnRleHQpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ0Jhc2ljKCkKK3sKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBhdXRvKiBkZWZhdWx0Vk0gPSBqc2Nf
Y29udGV4dF9nZXRfdmlydHVhbF9tYWNoaW5lKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF9ub25udWxsKGRlZmF1bHRWTSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZGVmYXVsdFZN
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bSA9IGFkb3B0R1JlZihq
c2NfdmlydHVhbF9tYWNoaW5lX25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2bS5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHZtLmdldCgpID09IGRlZmF1bHRWTSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0MiA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUodm0uZ2V0KCkpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChjb250ZXh0Mi5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcjIoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX2NvbnRl
eHRfZ2V0X3ZpcnR1YWxfbWFjaGluZShjb250ZXh0Mi5nZXQoKSkgPT0gdm0uZ2V0KCkpOworCisg
ICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDMgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKGRlZmF1bHRWTSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGNvbnRleHQzLmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b25IYW5kbGVyMyhjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfY29u
dGV4dF9nZXRfdmlydHVhbF9tYWNoaW5lKGNvbnRleHQzLmdldCgpKSA9PSBqc2NfY29udGV4dF9n
ZXRfdmlydHVhbF9tYWNoaW5lKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiB2YWx1ZTEgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5n
ZXQoKSwgMjUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZTEuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9nZXRfY29udGV4dCh2YWx1ZTEuZ2V0KCkpID09IGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIo
dmFsdWUxLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50
MzIodmFsdWUxLmdldCgpKSwgPT0sIDI1KTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJ2YWx1ZTEiLCB2YWx1ZTEuZ2V0KCkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAidmFsdWUxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgpID09IHZhbHVlMS5nZXQoKSk7
CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQyLmdldCgpLCAidmFsdWUxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5n
ZXQoKSkgPT0gY29udGV4dDIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0My5nZXQoKSwgInZhbHVlMSIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQzLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQo
KSkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0My5nZXQoKSwgInZh
bHVlMSIsIHZhbHVlMS5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0My5nZXQoKSwgInZhbHVlMSIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9n
ZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQzLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfZmFsc2UocmVzdWx0LmdldCgpID09IHZhbHVlMS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgMjUpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9u
SGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiMiArIDIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0Lmdl
dCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3Zh
bHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0KTsKKworICAgICAgICBHUmVmUHRyPEpT
Q1ZhbHVlPiByZXN1bHQyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQyLmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0Mi5nZXQo
KSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgp
ID09IHJlc3VsdDIuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdDMg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIjMgKyAxIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdDMuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQzLmdldCgpKSA9PSBjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gcmVzdWx0My5nZXQo
KSk7CisKKyAgICAgICAgYXV0byogcmVzdWx0UHRyID0gcmVzdWx0LmdldCgpOworICAgICAgICBy
ZXN1bHQgPSBudWxscHRyOworICAgICAgICByZXN1bHQyID0gbnVsbHB0cjsKKyAgICAgICAgcmVz
dWx0MyA9IG51bGxwdHI7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdDQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIjIgKyAyIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdDQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQ0LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdDQuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQ0Lmdl
dCgpKSwgPT0sIDQpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShyZXN1bHQ0LmdldCgpID09IHJl
c3VsdFB0cik7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOwor
ICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9nZXRfY29udGV4
dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImZvdXIiLCByZXN1bHQuZ2V0KCkpOworCisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1
ZShjb250ZXh0LmdldCgpLCAiZm91ciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHZhbHVl
LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNCk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm91ciIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUocmVz
dWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4
dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250
ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInR3byA9IDI7IGZvdXIgPSB0
d28gKyB0d28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBj
b250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVy
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHJlc3VsdC5nZXQoKSksID09LCA0KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2
YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInR3
byIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHZhbHVlLmdldCgpKSA9PSBjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgMik7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
Z2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb3VyIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFs
dWUuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdDIgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZpdmUgPSA0IikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdDIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KHJlc3VsdDIuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
dGVzdEpTQ1R5cGVzKCkKK3sKKyAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgIEdSZWZQdHI8
SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2Vw
dGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1
ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxMjUpKTsK
KyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChqc2Nf
dmFsdWVfdG9fZG91YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyNS4pOworICAgIGdfYXNzZXJ0X2Nt
cGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTI1KTsKKyAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IHZhbHVlU3RyaW5nKGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUu
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMTI1
Iik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJpIiwgdmFsdWUu
Z2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImkiKSk7CisgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgpID09IHZhbHVlLmdl
dCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRl
eHQuZ2V0KCksIDEyLjUpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBmbG9hdChqc2NfdmFsdWVfdG9fZG91YmxlKHZhbHVlLmdldCgpKSwgPT0sIDEyLjUp
OworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9
PSwgMTIpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0
KCkpID09IFRSVUUpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmco
dmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAiMTIuNSIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZCIs
IHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJkIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICBnX2Fzc2VydF90cnVlKHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAg
ICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oY29udGV4dC5nZXQoKSwg
VFJVRSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDEpOworICAgIHZh
bHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidHJ1ZSIpOworICAgIGpzY19j
b250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYjEiLCB2YWx1ZS5nZXQoKSk7CisgICAg
cmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
YjEiKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3Ry
dWUocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfYm9vbGVhbihjb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jv
b2xlYW4odmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29s
ZWFuKHZhbHVlLmdldCgpKSA9PSBGQUxTRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1
ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChq
c2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgImZhbHNlIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVl
KGNvbnRleHQuZ2V0KCksICJiMiIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiMiIpKTsKKyAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkg
PT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19z
dHJpbmcoY29udGV4dC5nZXQoKSwgIkhlbGxvIFdvcmxkIikpOworICAgIGNoZWNrZXIud2F0Y2go
dmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1
ZS5nZXQoKSkpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFs
dWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAi
SGVsbG8gV29ybGQiKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHZh
bHVlLmdldCgpKSA9PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LmdldCgpLCAiczEiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczEiKSk7CisgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgpID09IHZh
bHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfc3RyaW5n
KGNvbnRleHQuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19zdHJpbmcodmFsdWUuZ2V0KCkpKTsK
KyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIiIpOworICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0s
IDApOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiczIiLCB2YWx1
ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShj
b250ZXh0LmdldCgpLCAiczIiKSk7CisgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZh
bHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfc3RyaW5nKGNvbnRleHQuZ2V0KCksICIxMi41
IikpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0
KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAiMTIuNSIpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KGpzY192YWx1ZV90b19kb3VibGUodmFsdWUuZ2V0KCkpLCA9PSwgMTIuNSk7CisgICAgZ19h
c3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAxMik7Cisg
ICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzMyIsIHZhbHVlLmdldCgp
KTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJzMyIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0LmdldCgpLCBHX1RZUEVfTk9ORSkp
OworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX2FycmF5KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfb2JqZWN0KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
dG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5y
ZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIiIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0LmdldCgpLCAiYTEiLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYTEiKSk7CisgICAgY2hl
Y2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgp
ID09IHZhbHVlLmdldCgpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBhcnJheUxlbmd0aCA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5nZXQoKSwgImxlbmd0
aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgPT0sIDAp
OworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0
ZW0uZ2V0KCkpOworICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KHZh
bHVlLmdldCgpLCBqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCBhcnJheUl0
ZW0uZ2V0KCkpOworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3Rf
Z2V0X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2go
YXJyYXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJl
cihhcnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwgMSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQo
anNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2
YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxIik7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDUpKTsKKyAgICBjaGVja2VyLndhdGNo
KGFycmF5SXRlbS5nZXQoKSk7CisgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRf
aW5kZXgodmFsdWUuZ2V0KCksIGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSks
IGFycmF5SXRlbS5nZXQoKSk7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJsZW5ndGgiKSk7CisgICAgY2hlY2tl
ci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192
YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCAyKTsKKyAgICB2YWx1ZVN0cmlu
Zy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEsNSIpOworICAgIGFycmF5SXRlbSA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxMCkpOworICAgIGNo
ZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9w
cm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMywgYXJyYXlJdGVtLmdldCgpKTsKKyAgICBh
cnJheUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1
ZS5nZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3Ro
LmdldCgpKSwgPT0sIDQpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2Jq
ZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMCkpOworICAgIGNoZWNrZXIu
d2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19u
dW1iZXIoYXJyYXlJdGVtLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMihhcnJheUl0ZW0uZ2V0KCkpLCA9PSwgMSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCAx
KSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCA1KTsKKyAgICBh
cnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5k
ZXgodmFsdWUuZ2V0KCksIDIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKGFycmF5SXRlbS5nZXQo
KSkpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9w
ZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMykpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJ
dGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlJ
dGVtLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJh
eUl0ZW0uZ2V0KCkpLCA9PSwgMTApOworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3RoIikpOworICAgIGNo
ZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwganNj
X3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSArIDEpKTsKKyAgICBjaGVja2VyLndh
dGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5k
ZWZpbmVkKGFycmF5SXRlbS5nZXQoKSkpOworCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYXJyYXkg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0LmdldCgpLCBHX1RZUEVfSU5U
LCAxLCBHX1RZUEVfU1RSSU5HLCAidHdvIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIEpTQ19UWVBF
X1ZBTFVFLCB2YWx1ZS5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAgICBjaGVja2VyLndhdGNoKGFy
cmF5LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19hcnJheShhcnJheS5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChhcnJheS5nZXQo
KSkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXkuZ2V0KCkp
ID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXku
Z2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmlu
ZyhhcnJheS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICIxLHR3byx0cnVlLDEsNSwsMTAiKTsKKyAgICBhcnJheUxlbmd0aCA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eShhcnJheS5nZXQoKSwgImxlbmd0aCIpKTsKKyAg
ICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpz
Y192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgPT0sIDQpOworICAgIGFy
cmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRl
eChhcnJheS5nZXQoKSwgMCkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlJdGVtLmdldCgpKSk7
CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUl0ZW0uZ2V0KCkp
LCA9PSwgMSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0
X3Byb3BlcnR5X2F0X2luZGV4KGFycmF5LmdldCgpLCAxKSk7CisgICAgY2hlY2tlci53YXRjaChh
cnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3N0cmluZyhh
cnJheUl0ZW0uZ2V0KCkpKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3Ry
aW5nKGFycmF5SXRlbS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5n
ZXQoKSwgPT0sICJ0d28iKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0KCksIDIpKTsKKyAgICBjaGVja2Vy
LndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
Ym9vbGVhbihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90
b19ib29sZWFuKGFycmF5SXRlbS5nZXQoKSkgPT0gVFJVRSk7CisgICAgYXJyYXlJdGVtID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KGFycmF5LmdldCgp
LCAzKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0
X3RydWUoYXJyYXlJdGVtLmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIEdSZWZQdHI8R1B0
ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5j
KGdfb2JqZWN0X3VucmVmKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNj
X3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMSkpOworICAgIGdfcHRyX2FycmF5X2Fk
ZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfc3RyaW5nKGNvbnRleHQuZ2V0KCksICJ0d28i
KSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19ib29s
ZWFuKGNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5Lmdl
dCgpLCBnX29iamVjdF9yZWYodmFsdWUuZ2V0KCkpKTsKKyAgICBhcnJheSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfbmV3X2FycmF5X2Zyb21fZ2FycmF5KGNvbnRleHQuZ2V0KCksIGdBcnJheS5nZXQo
KSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX2FycmF5KGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfaXNfb2JqZWN0KGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfdG9fYm9vbGVhbihhcnJheS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21waW50
KGpzY192YWx1ZV90b19pbnQzMihhcnJheS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0cmlu
Zy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEsdHdvLHRydWUsMSw1LCwxMCIpOworICAg
IGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGFy
cmF5LmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0
KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUxlbmd0aC5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5n
dGguZ2V0KCkpLCA9PSwgZ0FycmF5LT5sZW4pOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X2lzX29iamVjdCh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3Rv
X2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVz
ZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJbb2JqZWN0IE9iamVjdF0iKTsKKyAgICBqc2NfY29u
dGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgIm8iLCB2YWx1ZS5nZXQoKSk7CisgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAibyIp
KTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShy
ZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX25ld191bmRlZmluZWQoY29udGV4dC5nZXQoKSkpOworICAgIGNoZWNrZXIud2F0Y2go
dmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZCh2
YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFs
dWUuZ2V0KCkpID09IEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1
ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAidW5kZWZpbmVkIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksICJ1IiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInUiKSk7CisgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgpID09IHZh
bHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVsbChj
b250ZXh0LmdldCgpKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVsbCh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDApOwor
ICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAibnVsbCIpOworICAg
IGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAibiIsIHZhbHVlLmdldCgpKTsK
KyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJuIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7Cit9CisKK3N0YXRpYyBpbnQgZm9v
KGludCBuKQoreworICAgIHJldHVybiBuICogMjsKK30KKworc3RhdGljIHZvaWQgY2FsbGJhY2so
SlNDVmFsdWUqIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLCBHX1RZUEVfSU5ULCAyMDAs
IEdfVFlQRV9OT05FKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVk
KHZhbHVlLmdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvdWJsZUFuZFNldEluUmVzdWx0KGlu
dCBuKQoreworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfbnVtYmVyKGpzY19jb250ZXh0X2dldF9jdXJyZW50KCksIG4gKiAyKSk7CisgICAganNj
X2NvbnRleHRfc2V0X3ZhbHVlKGpzY19jb250ZXh0X2dldF9jdXJyZW50KCksICJyZXN1bHQiLCB2
YWx1ZS5nZXQoKSk7Cit9CisKK3N0YXRpYyBpbnQgc3VtRnVuY3Rpb24oR1B0ckFycmF5KiBhcnJh
eSkKK3sKKyAgICBpbnQgcmV0dmFsID0gMDsKKworICAgIGdfcHRyX2FycmF5X2ZvcmVhY2goYXJy
YXksIFtdKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKGRhdGEpKTsKKyAgICAgICAgSlNDVmFsdWUqIGl0ZW0gPSBK
U0NfVkFMVUUoZGF0YSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJl
cihpdGVtKSk7CisgICAgICAgICpzdGF0aWNfY2FzdDxpbnQqPih1c2VyRGF0YSkgKz0ganNjX3Zh
bHVlX3RvX2ludDMyKGl0ZW0pOworICAgIH0sICZyZXR2YWwpOworCisgICAgcmV0dXJuIHJldHZh
bDsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ0Z1bmN0aW9uKCkKK3sKKyAgICB7CisgICAgICAg
IExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4
dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
Y29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxl
cihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCksICJmb28iLCBH
X0NBTExCQUNLKGZvbyksIG51bGxwdHIsIG51bGxwdHIsICBHX1RZUEVfSU5ULCAxLCBHX1RZUEVf
SU5UKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImZvbyIsIGZ1bmN0aW9uLmdldCgp
KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmb28oMjAwKSIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rp
b24uZ2V0KCksIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodmFsdWUuZ2V0KCkg
PT0gcmVzdWx0LmdldCgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgp
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9vID0gZnVuY3Rpb24obikgeyByZXR1
cm4gbiAqIDI7IH0iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9vKDIwMCkiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
bnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVl
X3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9u
LmdldCgpLCBHX1RZUEVfSU5ULCAyMDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKHZhbHVlLmdldCgpID09
IHJlc3VsdC5nZXQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVj
a2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAiY2FsbGJhY2siLCBHX0NBTExCQUNLKGNh
bGxiYWNrKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX05PTkUsIDEsIEpTQ19UWVBFX1ZBTFVF
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBqc2Nf
Y29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImNhbGxiYWNrIiwgZnVuY3Rpb24uZ2V0
KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInZhciByZXN1bHQgPSAwOyBjYWxsYmFjayhm
dW5jdGlvbihuKXsgcmVzdWx0ID0gbiAqIDI7IH0pOyByZXN1bHQiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3Zh
bHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAgICAgIHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0ID0g
MCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJlc3Vs
dCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDApOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGRibCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3
X2Z1bmN0aW9uKGNvbnRleHQuZ2V0KCksICJkb3VibGVBbmRTZXRJblJlc3VsdCIsIEdfQ0FMTEJB
Q0soZG91YmxlQW5kU2V0SW5SZXN1bHQpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfTk9ORSwg
MSwgR19UWVBFX0lOVCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGRibC5nZXQoKSk7CisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlv
bl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBKU0NfVFlQRV9WQUxVRSwgZGJsLmdldCgpLCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1
bHQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDAp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAg
R1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0
aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAic3VtRnVuY3Rpb24gPSBmdW5jdGlvbihhcnJh
eSkge1xuIgorICAgICAgICAgICAgIiAgICB2YXIgcmVzdWx0ID0gMDtcbiIKKyAgICAgICAgICAg
ICIgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgeyByZXN1bHQgKz0gYXJyYXlbaV07IH1cbiIKKyAg
ICAgICAgICAgICIgICAgcmV0dXJuIHJlc3VsdDtcbiIKKyAgICAgICAgICAgICJ9IikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGZ1bmN0aW9uLmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gYXJyYXkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19hcnJheShjb250ZXh0
LmdldCgpLCBHX1RZUEVfSU5ULCAyLCBHX1RZUEVfSU5ULCA0LCBHX1RZUEVfSU5ULCA2LCBHX1RZ
UEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGFycmF5LmdldCgpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25f
Y2FsbChmdW5jdGlvbi5nZXQoKSwgSlNDX1RZUEVfVkFMVUUsIGFycmF5LmdldCgpLCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTIpOwor
CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJy
YXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCks
IDEpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25l
d19udW1iZXIoY29udGV4dC5nZXQoKSwgMykpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0Fy
cmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCA1KSk7CisKKyAg
ICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24u
Z2V0KCksIEdfVFlQRV9QVFJfQVJSQVksIGdBcnJheS5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNl
cHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQo
KSwgInN1bUZ1bmN0aW9uIiwgR19DQUxMQkFDSyhzdW1GdW5jdGlvbiksIG51bGxwdHIsIG51bGxw
dHIsIEdfVFlQRV9JTlQsIDEsIEdfVFlQRV9QVFJfQVJSQVkpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250
ZXh0LmdldCgpLCAic3VtRnVuY3Rpb24iLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJzdW1GdW5jdGlvbihbMiw0LDZdKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJl
cih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDEyKTsKKworICAgICAgICBHUmVmUHRyPEdQdHJBcnJheT4g
Z0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX29iamVj
dF91bnJlZikpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFs
dWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAxKSk7CisgICAgICAgIGdfcHRyX2FycmF5X2Fk
ZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDMpKTsK
KyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25ld19udW1i
ZXIoY29udGV4dC5nZXQoKSwgNSkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBHX1RZUEVfUFRSX0FSUkFZLCBnQXJy
YXkuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5n
ZXQoKSksID09LCA5KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NPYmplY3QoKQor
eworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxK
U0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxl
ciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiY2xhc3MgRm9vIHsgZm9vKG4pIHsgcmV0dXJuIG4gKiAyOyB9IH07IGZvbyA9IG5ldyBGb287
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwgIkZvbyIpKTsK
KworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQoKSwgImZvbyIsIEdfVFlQRV9JTlQsIDIwMCwg
R19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwg
PT0sIDQwMCk7CisKKyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fz
c2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgp
LCAiYmFyIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lz
X3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4
Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBj
b25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiRm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29uc3RydWN0b3Iu
Z2V0KCkpKTsKKworICAgICAgICBmb28gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2NvbnN0cnVjdG9y
X2NhbGwoY29uc3RydWN0b3IuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2Jq
ZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3Rf
aXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCAiRm9vIikpOworCisgICAgICAgIHJlc3VsdCA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgpLCAiZm9vIiwg
R19UWVBFX0lOVCwgMzAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihy
ZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQz
MihyZXN1bHQuZ2V0KCkpLCA9PSwgNjAwKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFs
dWUoY29udGV4dC5nZXQoKSwgImZvbzIiLCBmb28uZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvbzIgaW5zdGFu
Y2VvZiBGb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsK
KworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImZvbzIuZm9vKDUwMCkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJl
c3VsdC5nZXQoKSksID09LCAxMDAwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVj
a2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0
LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKG9iamVjdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKG9iamVjdC5nZXQoKSwgIk9iamVj
dCIpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm9wZXJ0eSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAyNSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHByb3BlcnR5LmdldCgpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmlu
ZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgInZhbCIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVl
UHJvcGVydHlGbGFncz4oMCksIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZi52YWw7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgMjUpOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAg
ICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiJ3VzZSBzdHJpY3QnOyBmLnZhbCA9IDMyOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5l
ZCh2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFu
ZGxlciwgZGlkVGhyb3cpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnByb3BlcnR5SXNFbnVtZXJhYmxlKCd2YWwnKTsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsKKwor
ICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZGVsZXRlIGYudmFsOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQo
KSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmLnZhbDsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQo
KSksID09LCAyNSk7CisKKyAgICAgICAgcHJvcGVydHkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25l
d19udW1iZXIoY29udGV4dC5nZXQoKSwgNTIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChwcm9w
ZXJ0eS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRs
ZXIsIGRpZFRocm93KTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlf
ZGF0YShvYmplY3QuZ2V0KCksICJ2YWwiLCBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5Rmxh
Z3M+KDApLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNl
cHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAgcHJvcGVydHkgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMzIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2RhdGEob2JqZWN0LmdldCgpLCAidmFsMiIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVl
UHJvcGVydHlGbGFncz4oSlNDX1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUgfCBKU0NfVkFMVUVf
UFJPUEVSVFlfV1JJVEFCTEUpLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDI7IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMzIpOworCisgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIn
dXNlIHN0cmljdCc7IGYudmFsMiA9IDQ1OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1
ZS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJmLnZhbDI7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVl
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFs
dWUuZ2V0KCkpLCA9PSwgNDUpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnByb3BlcnR5SXNFbnVtZXJhYmxlKCd2YWwy
Jyk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbih2YWx1ZS5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBUUlVFKTsK
KworICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250
ZXh0LmdldCgpLCAxMjUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChwcm9wZXJ0eS5nZXQoKSk7
CisgICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEob2JqZWN0Lmdl
dCgpLCAidmFsMyIsIHN0YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oSlNDX1ZBTFVF
X1BST1BFUlRZX0NPTkZJR1VSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSksIHBy
b3BlcnR5LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
dmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIo
dmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQz
Mih2YWx1ZS5nZXQoKSksID09LCAxMjUpOworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDE1MCkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZp
bmVfcHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJ2YWwzIiwgc3RhdGljX2Nhc3Q8SlNDVmFs
dWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKSwgcHJvcGVy
dHkuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1
ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1
ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZh
bHVlLmdldCgpKSwgPT0sIDE1MCk7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImRlbGV0ZSBmLnZhbDM7IikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMzsiKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9pc191bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQu
Z2V0KCksICJmb28iLCBHX0NBTExCQUNLKGZvbyksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9J
TlQsIDEsIEdfVFlQRV9JTlQpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmdW5jdGlvbi5nZXQo
KSk7CisKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmpl
Y3QuZ2V0KCksICJmb28iLCBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5RmxhZ3M+KDApLCBm
dW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJmb28i
LCBHX1RZUEVfSU5ULCAyMDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVy
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHJlc3VsdC5nZXQoKSksID09LCA0MDApOworCisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2Jl
Z2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJmb28iLCBH
X1RZUEVfUE9JTlRFUiwgIjIwMCIsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5k
ZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0
aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNr
ZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQu
Z2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
bnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1ZV9p
c19vYmplY3QodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX3ZhbHVl
X29iamVjdF9pc19pbnN0YW5jZV9vZih2YWx1ZS5nZXQoKSwgIk9iamVjdCIpKTsKKworICAgICAg
ICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4
Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVz
dWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZCh2YWx1ZS5nZXQo
KSwgImZvbyIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2lu
KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0
IF9Gb28gRm9vOworc3RydWN0IF9Gb28geworICAgIGludCBmb287CisgICAgRm9vKiBzaWJsaW5n
OworfTsKKworc3RhdGljIEZvbyogZm9vQ3JlYXRlKCkKK3sKKyAgICByZXR1cm4gZ19uZXcwKEZv
bywgMSk7Cit9CisKK3N0YXRpYyBGb28qIGZvb0NyZWF0ZVdpdGhGb28oaW50IHZhbHVlKQorewor
ICAgIGF1dG8qIGYgPSBmb29DcmVhdGUoKTsKKyAgICBmLT5mb28gPSB2YWx1ZTsKKyAgICByZXR1
cm4gZjsKK30KKworc3RhdGljIHZvaWQgZm9vRnJlZShGb28qIGZvbykKK3sKKyAgICBnX2ZyZWUo
Zm9vKTsKK30KKworc3RhdGljIHZvaWQgc2V0Rm9vKEZvbyogZm9vLCBpbnQgdmFsdWUpCit7Cisg
ICAgZm9vLT5mb28gPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBnZXRGb28oRm9vKiBmb28pCit7
CisgICAgcmV0dXJuIGZvby0+Zm9vOworfQorCitzdGF0aWMgdm9pZCBzZXRTaWJsaW5nKEZvbyog
Zm9vLCBGb28qIHNpYmxpbmcpCit7CisgICAgZm9vLT5zaWJsaW5nID0gc2libGluZzsKK30KKwor
c3RhdGljIEZvbyogZ2V0U2libGluZyhGb28qIGZvbykKK3sKKyAgICByZXR1cm4gZm9vLT5zaWJs
aW5nOworfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseUZvbyhGb28qIGZvbywgaW50IG11bHRpcGxp
ZXIpCit7CisgICAgZm9vLT5mb28gKj0gbXVsdGlwbGllcjsKK30KKworc3RydWN0IFByb21pc2VE
YXRhIHsKKyAgICBGb28qIGZvbzsKKyAgICBpbnQgbXVsdGlwbGllcjsKKyAgICBMZWFrQ2hlY2tl
ciogY2hlY2tlcjsKK307CisKK3N0YXRpYyB2b2lkIGdldE11bHRpcGx5Rm9vKEpTQ1ZhbHVlKiBy
ZXNvbHZlLCBKU0NWYWx1ZSogcmVqZWN0LCBQcm9taXNlRGF0YSogZGF0YSkKK3sKKyAgICBkYXRh
LT5jaGVja2VyLT53YXRjaChyZXNvbHZlKTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19WQUxV
RShyZXNvbHZlKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfZnVuY3Rpb24ocmVz
b2x2ZSkpOworICAgIGRhdGEtPmNoZWNrZXItPndhdGNoKHJlamVjdCk7CisgICAgZ19hc3NlcnRf
dHJ1ZShKU0NfSVNfVkFMVUUocmVqZWN0KSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfZnVuY3Rpb24ocmVqZWN0KSk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQ7Cisg
ICAgaWYgKGRhdGEtPm11bHRpcGxpZXIgPiAwKQorICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwocmVzb2x2ZSwgR19UWVBFX0lOVCwgZGF0YS0+Zm9vLT5m
b28gKiBkYXRhLT5tdWx0aXBsaWVyLCBHX1RZUEVfTk9ORSkpOworICAgIGVsc2UgeworICAgICAg
ICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uID0gYWRvcHRHUmVmKGpzY19leGNlcHRp
b25fbmV3KGpzY19jb250ZXh0X2dldF9jdXJyZW50KCksICJNdWx0aXBsaWVyIG11c3QgYmUgcG9z
aXRpdmUgZ3JlYXRlciB0aGFuIDAiKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
dmFsdWVfZnVuY3Rpb25fY2FsbChyZWplY3QsIEpTQ19UWVBFX0VYQ0VQVElPTiwgZXhjZXB0aW9u
LmdldCgpLCBHX1RZUEVfTk9ORSkpOworICAgIH0KKyAgICBkYXRhLT5jaGVja2VyLT53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChy
ZXN1bHQuZ2V0KCkpKTsKK30KKworc3RhdGljIEpTQ1ZhbHVlKiBnZXRNdWx0aXBseUZvb0FzeW5j
KEZvbyogZm9vLCBpbnQgbXVsdGlwbGllciwgTGVha0NoZWNrZXIqIGNoZWNrZXIpCit7CisgICAg
YXV0byoganNDb250ZXh0ID0ganNjX2NvbnRleHRfZ2V0X2N1cnJlbnQoKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKEpTQ19JU19DT05URVhUKGpzQ29udGV4dCkpOworCisgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19mdW5jdGlvbihqc0NvbnRleHQs
IG51bGxwdHIsIEdfQ0FMTEJBQ0soZ2V0TXVsdGlwbHlGb28pLCBuZXcgUHJvbWlzZURhdGEgeyBm
b28sIG11bHRpcGxpZXIsIGNoZWNrZXJ9LAorICAgICAgICBbXShncG9pbnRlciBkYXRhKSB7IGRl
bGV0ZSBzdGF0aWNfY2FzdDxQcm9taXNlRGF0YSo+KGRhdGEpOyB9LCBHX1RZUEVfTk9ORSwgMiwg
SlNDX1RZUEVfVkFMVUUsIEpTQ19UWVBFX1ZBTFVFKSk7CisgICAgY2hlY2tlci0+d2F0Y2goZnVu
Y3Rpb24uZ2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHByb21pc2UgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZ2V0X3ZhbHVlKGpzQ29udGV4dCwgIlByb21pc2UiKSk7CisgICAgY2hlY2tl
ci0+d2F0Y2gocHJvbWlzZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
Y29uc3RydWN0b3IocHJvbWlzZS5nZXQoKSkpOworICAgIGF1dG8qIHJldHVyblZhbHVlID0ganNj
X3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGwocHJvbWlzZS5nZXQoKSwgSlNDX1RZUEVfVkFMVUUsIGZ1
bmN0aW9uLmdldCgpLCBHX1RZUEVfTk9ORSk7CisgICAgY2hlY2tlci0+d2F0Y2gocmV0dXJuVmFs
dWUpOworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAg
IGludCBiYXo7Cit9IEJhejsKKworc3RhdGljIEJheiogYmF6Q3JlYXRlKCkKK3sKKyAgICByZXR1
cm4gZ19uZXcwKEJheiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NDbGFzcygpCit7Cisg
ICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0Nv
bnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4
Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpzY0Ns
YXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51
bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19j
bGFzc19nZXRfcGFyZW50KGpzY0NsYXNzKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
Y29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFz
cywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZ
UEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb25z
dHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0
cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1
ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rv
ci5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpz
Y192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFt
ZShqc2NDbGFzcykpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIGluc3RhbmNlb2YgRm9v
OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAg
ICAgIGpzY19jbGFzc19hZGRfbWV0aG9kKGpzY0NsYXNzLCAiZ2V0Rm9vIiwgR19DQUxMQkFDSyhn
ZXRGb28pLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfSU5ULCAwLCBHX1RZUEVfTk9ORSk7Cisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmpl
Y3RfaW52b2tlX21ldGhvZChmb28uZ2V0KCksICJnZXRGb28iLCBHX1RZUEVfTk9ORSkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gdmFsdWUyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmLmdldEZvbygpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
Mi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodmFsdWUuZ2V0KCkgPT0gdmFsdWUyLmdl
dCgpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChqc2NDbGFzcywgInNldEZvbyIs
IEdfQ0FMTEJBQ0soc2V0Rm9vKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX05PTkUsIDEsIEdf
VFlQRV9JTlQpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9p
bnZva2VfbWV0aG9kKGZvby5nZXQoKSwgInNldEZvbyIsIEdfVFlQRV9JTlQsIDI1LCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHZh
bHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLmdl
dEZvbygpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMjUp
OworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZi5zZXRGb28oNDUpIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3Vs
dC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52
b2tlX21ldGhvZChmb28uZ2V0KCksICJnZXRGb28iLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBj
aGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDUpOworCisgICAgICAgIEdSZWZQdHI8
SlNDVmFsdWU+IGNvbnN0cnVjdG9yMiA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVj
dG9yKGpzY0NsYXNzLCAiQ3JlYXRlV2l0aEZvbyIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlV2l0aEZv
byksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lOVEVSLCAxLCBHX1RZUEVfSU5UKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IyLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29uc3RydWN0b3IyLmdldCgpKSk7Cisg
ICAgICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGNvbnN0cnVjdG9yLmdldCgpLCAi
Q3JlYXRlV2l0aEZvbyIsIGNvbnN0cnVjdG9yMi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gZm9vMiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZjIgPSBuZXcgRm9vLkNyZWF0ZVdpdGhGb28oNDIpOyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChmb28yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
b2JqZWN0KGZvbzIuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2Jq
ZWN0X2lzX2luc3RhbmNlX29mKGZvbzIuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFz
cykpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoZm9vLmdldCgpID09IGZvbzIuZ2V0KCkpOwor
ICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYyIGluc3RhbmNlb2YgRm9vOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFu
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyIGluc3RhbmNlb2YgRm9vLkNyZWF0ZVdpdGhGb287
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAg
ICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdf
Q0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYyLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwg
PT0sIDQyKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJmMi5mb28gPSA1MiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZjIuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZh
bHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIo
dmFsdWUuZ2V0KCkpLCA9PSwgNTIpOworCisgICAgICAgIEpTQ0NsYXNzKiBvdGhlckNsYXNzID0g
anNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkJheiIsIG51bGxwdHIs
IGdfZnJlZSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob3RoZXJDbGFzcyk7CisgICAgICAgIGdf
YXNzZXJ0X2ZhbHNlKGpzY19jbGFzc19nZXRfcGFyZW50KG90aGVyQ2xhc3MpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvcjMgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2Fk
ZF9jb25zdHJ1Y3RvcihvdGhlckNsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGJhekNyZWF0ZSks
IG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yMy5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yMy5nZXQoKSkpOworICAg
ICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9u
YW1lKG90aGVyQ2xhc3MpLCBjb25zdHJ1Y3RvcjMuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0
X2ZhbHNlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xh
c3NfZ2V0X25hbWUob3RoZXJDbGFzcykpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX3Zh
bHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28yLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUo
b3RoZXJDbGFzcykpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXogPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGwoY29uc3RydWN0b3IzLmdldCgpLCBHX1RZUEVf
Tk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGJhei5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChiYXouZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGJhei5nZXQoKSwganNjX2Ns
YXNzX2dldF9uYW1lKG90aGVyQ2xhc3MpKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192
YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUo
anNjQ2xhc3MpKSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2Vy
OworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAg
ICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisK
KyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mo
Y29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNz
X2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUp
LCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGpzY19jbGFzc19hZGRf
cHJvcGVydHkoanNjQ2xhc3MsICJzaWJsaW5nIiwgR19UWVBFX1BPSU5URVIsIEdfQ0FMTEJBQ0so
Z2V0U2libGluZyksIEdfQ0FMTEJBQ0soc2V0U2libGluZyksIG51bGxwdHIsIG51bGxwdHIpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEgPSBuZXcgRm9vKCk7IGYyID0gbmV3IEZvbygp
OyBmMi5zaWJsaW5nID0gZjEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmMSA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYxIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KGYxLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGYx
LmdldCgpKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGYyID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZjIiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goZjIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmpl
Y3QoZjIuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIuc2libGluZyIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUodmFsdWUuZ2V0KCkgPT0gZjEuZ2V0KCkpOworCisgICAgICAgIGpzY192YWx1ZV9vYmplY3Rf
c2V0X3Byb3BlcnR5KGYxLmdldCgpLCAic2libGluZyIsIGYyLmdldCgpKTsKKyAgICAgICAgdmFs
dWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYxLnNp
YmxpbmciKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKHZhbHVlLmdldCgpID09IGYyLmdldCgpKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBq
c2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKGpzY0NsYXNzKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1
Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxs
cHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lO
VEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9y
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3Io
Y29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9yLmdldCgp
KTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIsIEdfVFlQ
RV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pLCBudWxscHRyLCBu
dWxscHRyKTsKKworICAgICAgICBGb28qIGYgPSBmb29DcmVhdGVXaXRoRm9vKDI1KTsKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0
KGNvbnRleHQuZ2V0KCksIGYsIGpzY0NsYXNzKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9v
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGZvby5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFu
Y2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpKSk7CisKKyAgICAg
ICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIiwgZm9vLmdldCgpKTsK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIGluc3RhbmNlb2YgRm9vOyIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpz
Y192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCAyNSk7CisKKyAgICAg
ICAgc2V0Rm9vKGYsIDQyKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1i
ZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQyKTsKKworICAgICAgICBKU0NDbGFzcyogYmF6Q2xh
c3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiQmF6IiwgbnVs
bHB0ciwgZ19mcmVlKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChiYXpDbGFzcyk7CisKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IyID0gYWRvcHRHUmVmKGpzY19jbGFzc19h
ZGRfY29uc3RydWN0b3IoYmF6Q2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soYmF6Q3JlYXRlKSwg
bnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29uc3RydWN0b3IyLmdldCgpKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoYmF6Q2xhc3MpLCBjb25zdHJ1Y3RvcjIuZ2V0KCkpOworCisgICAgICAgIEJheiogYnogPSBi
YXpDcmVhdGUoKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmF6ID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGJ6LCBiYXpDbGFzcykpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGJhei5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX29iamVjdChiYXouZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGJhei5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGJh
ekNsYXNzKSkpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfb2JqZWN0X2lzX2lu
c3RhbmNlX29mKGJhei5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAg
ICAgICBnX2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5n
ZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGJhekNsYXNzKSkpOworCisgICAgICAgIGpzY19jb250
ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYnoiLCBiYXouZ2V0KCkpOworICAgICAgICBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImJ6
IGluc3RhbmNlb2YgQmF6OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5n
ZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiYnogaW5zdGFuY2VvZiBGb287IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lz
X2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1
ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEJhejsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnRfZmFsc2UoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAg
ICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoYmF6LmdldCgpLCAiZm9vIiwgZm9vLmdl
dCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJiei5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gZm9vLmdldCgpKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdS
ZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlv
bkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBKU0ND
bGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgp
LCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZm9vRnJl
ZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNzKTsKKworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVj
dG9yKGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51
bGxwdHIsIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfY29uc3RydWN0b3IoY29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRl
eHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyks
IGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2ND
bGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhz
ZXRGb28pLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBGb28qIGYgPSBmb29DcmVhdGVX
aXRoRm9vKDI1KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIGYsIGpzY0NsYXNzKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNj
Q2xhc3MpKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCks
ICJmMSIsIGZvby5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0
LmdldCgpLCAiZjIiLCBmb28uZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYxID09
PSBmMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVf
bmV3X251bWJlcihjb250ZXh0LmdldCgpLCA1MCkpOworICAgICAgICBjaGVja2VyLndhdGNoKHBy
b3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZm9v
LmdldCgpLCAibiIsIHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMS5uIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNTApOworICAgIH0KKworICAgIHsK
KyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9
IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRy
LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfY2xhc3Nf
Z2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0
cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51
bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BP
SU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0
b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rv
cihjb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0
KCkpOworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19U
WVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIs
IG51bGxwdHIpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX29iamVjdChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvby5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1l
KGpzY0NsYXNzKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkpOworICAgICAgICBj
aGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRf
cHJvcGVydHkoZm9vLmdldCgpLCAiZm9vIiwgdmFsdWUuZ2V0KCkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZi5fX2xvb2t1cEdldHRlcl9fKCdmb28nKS5jYWxsKGYpIikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodmFs
dWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKworICAgICAgICBib29sIGRpZFRocm93ID0gZmFs
c2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRo
cm93KTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmLl9fbG9va3VwR2V0dGVyX18oJ2ZvbycpLmNhbGwoe30pIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
ZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBq
c2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwg
cmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKGpzY0NsYXNzKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NsYXNzX2dl
dF9wYXJlbnQoanNjQ2xhc3MpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1
Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxs
cHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9OT05F
LCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29u
c3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9yLmdldCgpKTsK
KyAgICAgICAgYm9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19i
ZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
ZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKGZvby5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9u
SGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IGpzTmFtZXNwYWNlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfb2JqZWN0
KGNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChqc05hbWVzcGFjZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lz
X29iamVjdChqc05hbWVzcGFjZS5nZXQoKSkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92
YWx1ZShjb250ZXh0LmdldCgpLCAid2siLCBqc05hbWVzcGFjZS5nZXQoKSk7CisKKyAgICAgICAg
SlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5n
ZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZv
b0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25z
dHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUpLCBudWxscHRy
LCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAgICAgIGpzY192
YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5KGpzTmFtZXNwYWNlLmdldCgpLCBqc2NfY2xhc3NfZ2V0
X25hbWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGpzY19jbGFzc19h
ZGRfcHJvcGVydHkoanNjQ2xhc3MsICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEZv
byksIEdfQ0FMTEJBQ0soc2V0Rm9vKSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgYm9v
bCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRp
b25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28o
KTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworCisgICAgICAgIGZv
byA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5l
dyB3ay5Gb28oKTsiKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVj
dChmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lz
X2luc3RhbmNlX29mKGZvby5nZXQoKSwgIndrLkZvbyIpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmIGluc3RhbmNlb2Ygd2suRm9vOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFu
KHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9y
MiA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCAiQ3JlYXRl
V2l0aEZvbyIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlV2l0aEZvbyksIG51bGxwdHIsIG51bGxwdHIs
IEdfVFlQRV9QT0lOVEVSLCAxLCBHX1RZUEVfSU5UKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
Y29uc3RydWN0b3IyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
Y29uc3RydWN0b3IoY29uc3RydWN0b3IyLmdldCgpKSk7CisgICAgICAgIGpzY192YWx1ZV9vYmpl
Y3Rfc2V0X3Byb3BlcnR5KGNvbnN0cnVjdG9yLmdldCgpLCAiQ3JlYXRlV2l0aEZvbyIsIGNvbnN0
cnVjdG9yMi5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9u
SGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28yID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMiA9IG5ldyBGb28u
Q3JlYXRlV2l0aEZvbyg0Mik7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvbzIuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRlZmluZWQoZm9vMi5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhy
b3cpOworCisgICAgICAgIGZvbzIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYyID0gbmV3IHdrLkZvby5DcmVhdGVXaXRoRm9vKDQyKTsiKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZm9vMi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX29iamVjdChmb28yLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28yLmdldCgpLCAid2suRm9vIikpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vMi5n
ZXQoKSwgIndrLkZvby5DcmVhdGVXaXRoRm9vIikpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShm
b28uZ2V0KCkgPT0gZm9vMi5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIgaW5zdGFuY2VvZiB3ay5Gb287Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIg
aW5zdGFuY2VvZiB3ay5Gb28uQ3JlYXRlV2l0aEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9v
bGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9f
Ym9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5mb28iKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3Zh
bHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA0Mik7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gZm9vMyA9IGFkb3B0R1JlZihqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbChjb25z
dHJ1Y3RvcjIuZ2V0KCksIEdfVFlQRV9JTlQsIDYyLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGZvbzMuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc19vYmplY3QoZm9vMy5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vMy5nZXQoKSwgIndrLkZvbyIpKTsKKyAgICAgICAg
Z19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZvbzMuZ2V0KCks
ICJ3ay5Gb28uQ3JlYXRlV2l0aEZvbyIpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoZm9vMi5n
ZXQoKSA9PSBmb28zLmdldCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksICJmMyIsIGZvbzMuZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYzIGluc3RhbmNlb2Ygd2suRm9v
OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYzIGluc3RhbmNlb2Ygd2suRm9vLkNyZWF0ZVdpdGhGb287IikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lz
X2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjMuZm9vIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpz
Y192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNjIpOworICAgIH0KK30KKwordHlw
ZWRlZiBzdHJ1Y3QgeworICAgIEZvbyBwYXJlbnQ7CisgICAgaW50IGJhcjsKK30gQmFyOworCitz
dGF0aWMgQmFyKiBiYXJDcmVhdGUoKQoreworICAgIHJldHVybiBnX25ldzAoQmFyLCAxKTsKK30K
Kworc3RhdGljIHZvaWQgYmFyRnJlZShCYXIqIGJhcikKK3sKKyAgICBnX2ZyZWUoYmFyKTsKK30K
Kworc3RhdGljIHZvaWQgc2V0QmFyKEJhciogYmFyLCBpbnQgdmFsdWUpCit7CisgICAgYmFyLT5i
YXIgPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBnZXRCYXIoQmFyKiBiYXIpCit7CisgICAgcmV0
dXJuIGJhci0+YmFyOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDUHJvdG90eXBlcygpCit7Cisg
ICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0Nv
bnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4
Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgSlNDQ2xhc3MqIGZvb0Ns
YXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51
bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChmb29DbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19j
bGFzc19nZXRfcGFyZW50KGZvb0NsYXNzKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZv
b0NvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoZm9vQ2xh
c3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19U
WVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9v
Q29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19j
b25zdHJ1Y3Rvcihmb29Db25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGZvb0NsYXNzKSwgZm9v
Q29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBqc2NfY2xhc3NfYWRkX21ldGhvZChmb29DbGFz
cywgIm11bHRpcGx5IiwgR19DQUxMQkFDSyhtdWx0aXBseUZvbyksIG51bGxwdHIsIG51bGxwdHIs
IEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfSU5UKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9w
ZXJ0eShmb29DbGFzcywgImZvbyIsIEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19D
QUxMQkFDSyhzZXRGb28pLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBKU0NDbGFzcyog
YmFyQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiQmFy
IiwgZm9vQ2xhc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGJhckZyZWUpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChiYXJDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX2NsYXNzX2dldF9wYXJlbnQoYmFyQ2xhc3MpID09IGZvb0NsYXNzKTsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gYmFyQ29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9j
b25zdHJ1Y3RvcihiYXJDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhiYXJDcmVhdGUpLCBudWxs
cHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChiYXJDb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGJhckNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoYmFyQ2xhc3MpLCBiYXJDb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGpzY19jbGFzc19h
ZGRfcHJvcGVydHkoYmFyQ2xhc3MsICJiYXIiLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEJh
ciksIEdfQ0FMTEJBQ0soc2V0QmFyKSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyBiID0gbmV3IEJhcigpOyIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5fX3Byb3RvX18gPT0gRm9v
LnByb3RvdHlwZSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImIuX19wcm90b19fID09IEJhci5wcm90b3R5cGUiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVf
aXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiLl9fcHJvdG9fXy5fX3Byb3Rv
X18gPT0gRm9vLnByb3RvdHlwZSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3Vs
dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
b2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmpl
Y3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoZm9vQ2xhc3Mp
KSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmFyQ2xhc3MpKSk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBp
bnN0YW5jZW9mIEZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQo
KSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYgaW5zdGFuY2VvZiBCYXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVh
bihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX3ZhbHVlX3RvX2Jv
b2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYmFyID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiYiIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChiYXIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpz
Y192YWx1ZV9pc19vYmplY3QoYmFyLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihiYXIuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFt
ZShiYXJDbGFzcykpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lz
X2luc3RhbmNlX29mKGJhci5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGZvb0NsYXNzKSkpOwor
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiYiBpbnN0YW5jZW9mIEJhciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1
bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFu
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIgaW5zdGFuY2VvZiBGb28iKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImIuYmFyID0gMjU7IGIu
Zm9vID0gNDI7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZh
bHVhdGUoY29udGV4dC5nZXQoKSwgImIuYmFyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZh
bHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZh
bHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIo
dmFsdWUuZ2V0KCkpLCA9PSwgMjUpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19u
dW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA0Mik7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiLm11bHRpcGx5KDIpIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHZhbHVlID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiLmZvbyIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDg0KTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUVycm9yKCkKK3sKKyAgICBqc2NfY29udGV4dF90aHJvdyhq
c2NfY29udGV4dF9nZXRfY3VycmVudCgpLCAiQVBJIGV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0SlNDRXhjZXB0aW9ucygpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBj
aGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRl
eHQuZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvbyIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICAvLyBCeSBkZWZhdWx0IGV4Y2Vw
dGlvbnMgYXJlIG5vdCBjYXVnaHQuCisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lz
X3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgYXV0byogZXhjZXB0aW9uID0ganNj
X2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbikpOworICAgICAgICBjaGVja2VyLndhdGNo
KGV4Y2VwdGlvbik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihqc2NfZXhjZXB0aW9uX2dldF9t
ZXNzYWdlKGV4Y2VwdGlvbiksID09LCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vIik7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoanNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoZXhjZXB0
aW9uKSwgPT0sIDEpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfZXhjZXB0aW9uX2dldF9z
b3VyY2VfdXJpKGV4Y2VwdGlvbikpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNr
ZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihj
b250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gMjU7XG5mb287
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
dWludChqc2NfZXhjZXB0aW9uX2dldF9saW5lX251bWJlcihleGNlcHRpb24pLCA9PSwgMik7Cisg
ICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVm
UHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9m
YWxzZShqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGVfd2l0aF9zb3VyY2VfdXJpKGNvbnRleHQuZ2V0KCksICJmb28iLCAiZmlsZTovLy9mb28vc2Ny
aXB0LmpzIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19FWENFUFRJT04oZXhjZXB0
aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkoZXhjZXB0aW9uKSwgPT0sICJm
aWxlOi8vL2Zvby9zY3JpcHQuanMiKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVj
a2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19jb250ZXh0X2dldF9leGNlcHRpb24o
Y29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwgImNyZWF0ZUVy
cm9yIiwgR19DQUxMQkFDSyhjcmVhdGVFcnJvciksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9O
T05FLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdl
dCgpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJjcmVh
dGVFcnJvciIsIGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInZh
ciByZXN1bHQ7IHRyeSB7IGNyZWF0ZUVycm9yKCk7IH0gY2F0Y2ggKGUpIHsgcmVzdWx0ID0gJ0Nh
dWdodCBleGNlcHRpb24nOyB9IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3N0cmluZyhyZXN1bHQuZ2V0
KCkpKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiByZXN1bHRTdHJpbmcoanNjX3ZhbHVlX3Rv
X3N0cmluZyhyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdFN0
cmluZy5nZXQoKSwgPT0sICJDYXVnaHQgZXhjZXB0aW9uIik7CisgICAgICAgIGdfYXNzZXJ0X2Zh
bHNlKGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAg
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAi
dmFyIHJlc3VsdDsgY3JlYXRlRXJyb3IoKTsgcmVzdWx0ID0gJ05vIGV4Y2VwdGlvbic7IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgYXV0byog
ZXhjZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihqc2Nf
ZXhjZXB0aW9uX2dldF9tZXNzYWdlKGV4Y2VwdGlvbiksID09LCAiQVBJIGV4Y2VwdGlvbiIpOwor
ICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVyKGV4
Y2VwdGlvbiksID09LCAxKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2V4Y2VwdGlvbl9n
ZXRfc291cmNlX3VyaShleGNlcHRpb24pKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4
dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19jb250ZXh0X2dldF9leGNlcHRp
b24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIHN0cnVjdCBUZXN0IHsKKyAgICAgICAgICAg
IEpTQ0NvbnRleHQqIGNvbnRleHQ7CisgICAgICAgICAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4g
ZXhjZXB0aW9uOworICAgICAgICAgICAgYm9vbCB3YXNEZWxldGVkOworICAgICAgICB9OworCisg
ICAgICAgIFRlc3QgdGVzdCA9IHsgY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgZmFsc2UgfTsKKyAg
ICAgICAganNjX2NvbnRleHRfcHVzaF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0LmdldCgpLCBb
XShKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbiwgZ3BvaW50ZXIg
dXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8qIHRlc3QgPSBzdGF0aWNfY2FzdDxUZXN0Kj4o
dXNlckRhdGEpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShjb250ZXh0ID09IHRlc3QtPmNv
bnRleHQpOworICAgICAgICAgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+ZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPndhc0RlbGV0ZWQpOworICAgICAgICAgICAg
dGVzdC0+ZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9LCAmdGVzdCwgW10oZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFRlc3QqPih1c2VyRGF0YSkt
Pndhc0RlbGV0ZWQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICAvLyBFeGNlcHRpb24gd2FzIGNhdWdodCBieSB0aGUgdXNlciBoYW5kbGVyLgorICAgICAgICBn
X2Fzc2VydF9mYWxzZShqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfRVhDRVBUSU9OKHRlc3QuZXhjZXB0aW9uLmdl
dCgpKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godGVzdC5leGNlcHRpb24uZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZSh0ZXN0LmV4Y2Vw
dGlvbi5nZXQoKSksID09LCAiQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vIik7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHVpbnQoanNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIodGVzdC5leGNlcHRp
b24uZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19leGNlcHRpb25f
Z2V0X3NvdXJjZV91cmkodGVzdC5leGNlcHRpb24uZ2V0KCkpKTsKKworICAgICAgICBnX2Fzc2Vy
dF9mYWxzZSh0ZXN0Lndhc0RlbGV0ZWQpOworICAgICAgICBqc2NfY29udGV4dF9wb3BfZXhjZXB0
aW9uX2hhbmRsZXIoY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodGVzdC53
YXNEZWxldGVkKTsKKworICAgICAgICB0ZXN0LmV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgICAg
IHRlc3Qud2FzRGVsZXRlZCA9IGZhbHNlOworICAgICAgICBqc2NfY29udGV4dF9wdXNoX2V4Y2Vw
dGlvbl9oYW5kbGVyKGNvbnRleHQuZ2V0KCksIFtdKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ0V4
Y2VwdGlvbiogZXhjZXB0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0
byogdGVzdCA9IHN0YXRpY19jYXN0PFRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBnX2Fz
c2VydF90cnVlKGNvbnRleHQgPT0gdGVzdC0+Y29udGV4dCk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9mYWxzZSh0ZXN0LT5leGNlcHRpb24pOworICAgICAgICAgICAgZ19hc3NlcnRfZmFsc2UodGVz
dC0+d2FzRGVsZXRlZCk7CisgICAgICAgICAgICB0ZXN0LT5leGNlcHRpb24gPSBleGNlcHRpb247
CisgICAgICAgICAgICBqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24oY29udGV4dCwgZXhjZXB0
aW9uKTsKKyAgICAgICAgfSwgJnRlc3QsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxUZXN0Kj4odXNlckRhdGEpLT53YXNEZWxldGVkID0gdHJ1ZTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJmb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgLy8gRXhjZXB0aW9uIHdhcyBoYW5kbGVkIGJ5IHRoZSB1c2VyIGhh
bmRsZXIsIGJ1dCBub3QgY2F1Z2h0LgorICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29u
dGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhj
ZXB0aW9uKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShleGNlcHRpb24gPT0gdGVzdC5leGNlcHRp
b24uZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3Qud2FzRGVsZXRlZCk7Cisg
ICAgICAgIGpzY19jb250ZXh0X3BvcF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0Lndhc0RlbGV0ZWQpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgdGVzdEpTQ1Byb21pc2VzKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2Vy
IGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQo
KSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm9taXNlID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiUHJvbWlzZSIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChwcm9taXNlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfaXNfZnVuY3Rpb24ocHJvbWlzZS5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAidHlwZW9mIFByb21pc2UiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHJlc3VsdC5n
ZXQoKSkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhqc2NfdmFsdWVf
dG9fc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0
U3RyaW5nLmdldCgpLCA9PSwgImZ1bmN0aW9uIik7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQgPSAwOyBQcm9t
aXNlLnJlc29sdmUoNDIpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7IHJlc3VsdCA9IHZhbHVlOyB9
KTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUo
Y29udGV4dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVl
LmdldCgpKSwgPT0sIDQyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgp
KTsKKworICAgICAgICBKU0NDbGFzcyogZm9vQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9j
bGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvb0NsYXNzKTsK
KyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NsYXNzX2dldF9wYXJlbnQoZm9vQ2xhc3MpKTsK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vQ29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihmb29DbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29D
cmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb29Db25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGZvb0NvbnN0cnVjdG9yLmdl
dCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2Nf
Y2xhc3NfZ2V0X25hbWUoZm9vQ2xhc3MpLCBmb29Db25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAg
IGpzY19jbGFzc19hZGRfbWV0aG9kKGZvb0NsYXNzLCAiZ2V0TXVsdGlwbHlGb29Bc3luYyIsIEdf
Q0FMTEJBQ0soZ2V0TXVsdGlwbHlGb29Bc3luYyksICZjaGVja2VyLCBudWxscHRyLCBKU0NfVFlQ
RV9WQUxVRSwgMSwgR19UWVBFX0lOVCk7CisgICAgICAgIGpzY19jbGFzc19hZGRfcHJvcGVydHko
Zm9vQ2xhc3MsICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEZvbyksIEdfQ0FMTEJB
Q0soc2V0Rm9vKSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCks
ICJyZXN1bHQgPSAwOyBmID0gbmV3IEZvbygpOyBmLmZvbyA9IDU7IGYuZ2V0TXVsdGlwbHlGb29B
c3luYygyKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXN1bHQgPSB2YWx1ZTsgfSwgZnVuY3Rp
b24gKGVycm9yKSB7IHJlc3VsdCA9IC0xOyB9KTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDEwKTsKKworICAgICAgICBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJl
c3VsdCA9IDA7IGYuZ2V0TXVsdGlwbHlGb29Bc3luYygwKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkg
eyByZXN1bHQgPSB2YWx1ZTsgfSwgZnVuY3Rpb24gKGVycm9yKSB7IHJlc3VsdCA9IC0xOyB9KTsi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgdmFsdWUg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAtMSk7CisgICAg
fQorfQorCitzdGF0aWMgYm9vbCBzX2Zvb1dhc0ZyZWVkOworCitzdGF0aWMgdm9pZCBmb29GcmVl
QW5kTG9nKEZvbyogZm9vKQoreworICAgIGZvb0ZyZWUoZm9vKTsKKyAgICBzX2Zvb1dhc0ZyZWVk
ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdGVzdEpTQ0dhcmJhZ2VDb2xsZWN0b3IoKQorewor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBl
eGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0LmdldCgp
LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgp
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX3ZhbHVl
X25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMjUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChm
b28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoZm9v
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoZm9v
LmdldCgpKSwgPT0sIDI1KTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHko
b2JqZWN0LmdldCgpLCAiZm9vIiwgZm9vLmdldCgpKTsKKworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiLCBvYmplY3QuZ2V0KCkpOworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShvYmplY3QuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKwor
ICAgICAgICBvYmplY3QgPSBudWxscHRyOworICAgICAgICBmb28gPSBudWxscHRyOworICAgICAg
ICByZXN1bHQgPSBudWxscHRyOworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29u
dGV4dC5nZXQoKSk7CisgICAgICAgIG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVj
dC5nZXQoKSkpOworICAgICAgICBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihmb28uZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihmb28uZ2V0KCkp
LCA9PSwgMjUpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IHVuZGVmaW5lZCIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191
bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xs
ZWN0KGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lz
X29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksICJmIiwgb2JqZWN0LmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUob2JqZWN0
LmdldCgpID09IHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGZvbyA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVt
YmVyKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKGZvby5nZXQoKSksID09LCAyNSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hl
Y2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQu
Z2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4
dC5nZXQoKSk7CisKKyAgICAgICAgc19mb29XYXNGcmVlZCA9IGZhbHNlOworCisgICAgICAgIEpT
Q0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0
KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29G
cmVlQW5kTG9nKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAgICBn
X2Fzc2VydF9mYWxzZShqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRf
Y29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwgbnVs
bHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpz
Y0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBv
YmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYg
PSBuZXcgRm9vKCk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKG9iamVjdC5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKG9i
amVjdC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKG9iamVjdC5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOwor
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZiA9IHVuZGVmaW5lZCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRlZmluZWQocmVz
dWx0LmdldCgpKSk7CisKKyAgICAgICAgZ19hc3NlcnRfZmFsc2Uoc19mb29XYXNGcmVlZCk7Cisg
ICAgICAgIGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
Z19hc3NlcnRfZmFsc2Uoc19mb29XYXNGcmVlZCk7CisKKyAgICAgICAgb2JqZWN0ID0gbnVsbHB0
cjsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2Uoc19mb29XYXNGcmVlZCk7CisgICAgICAgIGpzY0Nv
bnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShzX2Zvb1dhc0ZyZWVkKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RzSlNDVmlydHVh
bE1hY2hpbmUoKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAg
ICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25l
dygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhj
ZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAg
IGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkpTQ1ZpcnR1YWxNYWNoaW5lVGVzdCIsIFsm
XSB7CisgICAgICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rl
cl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZm9vRnJlZUFuZExvZykpOworICAgICAgICAgICAgY2hlY2tlci53YXRj
aChqc2NDbGFzcyk7CisgICAgICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfY2xhc3NfZ2V0X3Bh
cmVudChqc2NDbGFzcykpOworCisgICAgICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1
Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxs
cHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lO
VEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1
Y3Rvci5nZXQoKSk7CisgICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25z
dHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICAgICAganNjX2NvbnRleHRfc2V0
X3ZhbHVlKGNvbnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0
cnVjdG9yLmdldCgpKTsKKworICAgICAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gb2JqZWN0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZv
bygpOyIpKTsKKyAgICAgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KG9iamVjdC5nZXQoKSkg
PT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c19vYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2Yob2JqZWN0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoanNjQ2xhc3MpKSk7CisgICAgICAgIH0pOworICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7CisgICAgICAgIHRocmVhZC0+ZGV0YWNoKCk7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0
LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3Qob2JqZWN0LmdldCgpKSk7CisK
KyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgVmVjdG9yPFJlZjxUaHJlYWQ+LCA1PiB0aHJlYWRzOworICAgICAg
ICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDU7ICsr
aSkgeworICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoIkpTQ1ZpcnR1
YWxNYWNoaW5lVGVzdCIsIFsmb2tdIHsKKyAgICAgICAgICAgICAgICBHUmVmUHRyPEpTQ1ZpcnR1
YWxNYWNoaW5lPiB2bSA9IGFkb3B0R1JlZihqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpKTsKKyAg
ICAgICAgICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKHZtLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICJ2YXIgYXJyYXkgPSBb
e31dO1xuIgorICAgICAgICAgICAgICAgICAgICAiZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgKytp
KSB7XG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5
KGFycmF5Lmxlbmd0aCAqIDIpO1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgIGZvciAodmFy
IGogPSAwOyBqIDwgbmV3QXJyYXkubGVuZ3RoOyArK2opXG4iCisgICAgICAgICAgICAgICAgICAg
ICIgICAgICAgIG5ld0FycmF5W2pdID0ge3BhcmVudDogYXJyYXlbaiAvIDJdfTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgIiAgICBhcnJheSA9IG5ld0FycmF5O1xuIgorICAgICAgICAgICAgICAg
ICAgICAifVxuIgorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5nZXQoKSkgPT0gY29udGV4dC5nZXQo
KSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dl
dF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ19tZXNz
YWdlKCJVbmNhdWdodCBleGNlcHRpb246ICVzIiwganNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZShl
eGNlcHRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJhcnJheSIpKTsKKyAgICAg
ICAgICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9nZXRfY29udGV4dCh2YWx1ZS5nZXQo
KSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFqc2NfdmFsdWVfaXNf
b2JqZWN0KHZhbHVlLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBnX21lc3NhZ2UoIkRp
ZCBub3QgZmluZCBcImFycmF5XCIgdmFyaWFibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgb2sg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAganNjQ29udGV4dEdh
cmJhZ2VDb2xsZWN0KGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiB0aHJlYWRzKSB7CisgICAgICAgICAgICB0
aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgICAgICB0aHJlYWQtPmRldGFjaCgp
OworICAgICAgICB9CisKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShvayk7CisgICAgfQorfQorCisj
aWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKK3N0YXRpYyB2b2lkIHRlc3RzSlND
QXV0b2NsZWFudXBzKCkKK3sKKyAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgIGdfYXV0b3B0
cihKU0NWaXJ0dWFsTWFjaGluZSkgdm0gPSBqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpOworICAg
IGNoZWNrZXIud2F0Y2godm0pOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZJUlRVQUxfTUFD
SElORSh2bSkpOworCisgICAgZ19hdXRvcHRyKEpTQ0NvbnRleHQpIGNvbnRleHQgPSBqc2NfY29u
dGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUodm0pOworICAgIGNoZWNrZXIud2F0Y2goY29u
dGV4dCk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisKKyAg
ICBnX2F1dG9wdHIoSlNDVmFsdWUpIHZhbHVlID0ganNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dCwgInYgPSAyNSIpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUpOworICAgIGdfYXNzZXJ0X3Ry
dWUoSlNDX0lTX1ZBTFVFKHZhbHVlKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
bnVtYmVyKHZhbHVlKSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2
YWx1ZSksID09LCAyNSk7CisKKyAgICBnX2F1dG9wdHIoSlNDRXhjZXB0aW9uKSBleGNlcHRpb24g
PSBqc2NfZXhjZXB0aW9uX25ldyhjb250ZXh0LCAiQVBJIGVycm9yIik7CisgICAgY2hlY2tlci53
YXRjaChleGNlcHRpb24pOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX0VYQ0VQVElPTihleGNl
cHRpb24pKTsKKyAgICBqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24oY29udGV4dCwgZXhjZXB0
aW9uKTsKK30KKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgZ190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBudWxscHRyKTsKKworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL2pzYy9iYXNpYyIsIHRlc3RKU0NCYXNpYyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
anNjL3R5cGVzIiwgdGVzdEpTQ1R5cGVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvZnVu
Y3Rpb24iLCB0ZXN0SlNDRnVuY3Rpb24pOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9vYmpl
Y3QiLCB0ZXN0SlNDT2JqZWN0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvY2xhc3MiLCB0
ZXN0SlNDQ2xhc3MpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm90b3R5cGVzIiwgdGVz
dEpTQ1Byb3RvdHlwZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9leGNlcHRpb25zIiwg
dGVzdEpTQ0V4Y2VwdGlvbnMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9wcm9taXNlcyIs
IHRlc3RKU0NQcm9taXNlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2dhcmJhZ2UtY29s
bGVjdG9yIiwgdGVzdEpTQ0dhcmJhZ2VDb2xsZWN0b3IpOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L2pzYy92bSIsIHRlc3RzSlNDVmlydHVhbE1hY2hpbmUpOworI2lmZGVmIEdfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2F1dG9jbGVhbnVwcyIs
IHRlc3RzSlNDQXV0b2NsZWFudXBzKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGdfdGVzdF9ydW4o
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MgYi9Ub29scy9ndGsv
Z2VuZXJhdGUtZ3RrZG9jCmluZGV4IGQ3MTU1MjIxYjdjLi4wYzYyOGMzYmI3NiAxMDA3NTUKLS0t
IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3Rr
ZG9jCkBAIC0xMTgsOCArMTE4LDggQEAgZGVmIGdldF9nZW5lcmF0b3JfZm9yX2NvbmZpZyhjb25m
aWdfZmlsZSwgdmlydHVhbF9yb290LCBjcm9zc19yZWZlcmVuY2VfZGVwcyA9IFsKICAgICBzb3Vy
Y2VfZGlycyA9IGNvbmZpZy5nZXQobW9kdWxlX25hbWUsICdzb3VyY2VfZGlycycpLnJlcGxhY2Uo
JzsnLCAnICcpLnNwbGl0KCkKICAgICBoZWFkZXJzID0gW29zLnBhdGguYWJzcGF0aChmKSBmb3Ig
ZiBpbiBjb25maWcuZ2V0KG1vZHVsZV9uYW1lLCAnaGVhZGVycycpLnJlcGxhY2UoJzsnLCAnICcp
LnNwbGl0KCldCiAgICAgcmV0dXJuIGd0a2RvYy5Qa2dDb25maWdHVEtEb2MocGtnY29uZmlnX2Zp
bGUsIHsKLSAgICAgICAgJ2RlY29yYXRvcic6ICdXRUJLSVRfQVBJfFdFQktJVF9ERVBSRUNBVEVE
fFdFQktJVF9ERVBSRUNBVEVEX0ZPUlwoLitcKScsCi0gICAgICAgICdkZXByZWNhdGlvbl9ndWFy
ZCc6ICdXRUJLSVRfRElTQUJMRV9ERVBSRUNBVEVEJywKKyAgICAgICAgJ2RlY29yYXRvcic6IGNv
bmZpZy5nZXQobW9kdWxlX25hbWUsICdkZWNvcmF0b3InKSwKKyAgICAgICAgJ2RlcHJlY2F0aW9u
X2d1YXJkJzogY29uZmlnLmdldChtb2R1bGVfbmFtZSwgJ2RlcHJlY2F0aW9uX2d1YXJkJyksCiAg
ICAgICAgICdsaWJyYXJ5X3BhdGgnOiBjb21tb24ubGlicmFyeV9idWlsZF9wYXRoKCksCiAgICAg
ICAgICd2aXJ0dWFsX3Jvb3QnOiB2aXJ0dWFsX3Jvb3QsCiAgICAgICAgICdtb2R1bGVfbmFtZSc6
IG1vZHVsZV9uYW1lLApAQCAtMTk2LDYgKzE5NiwxNCBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWlu
X18iOgogCiAgICAgcHJlcGFyZV9lbnZpcm9ubWVudF9mb3JfZ3RrZG9jX2dlbmVyYXRpb24oKQog
CisgICAganNjX2dlbmVyYXRvciA9IGdldF9nZW5lcmF0b3JfZm9yX2NvbmZpZyhjb21tb24uYnVp
bGRfcGF0aCgnZ3RrZG9jLWpzYy1nbGliLmNmZycpLCBhcmd1bWVudHMudmlydHVhbF9yb290KQor
ICAgIGlmIG5vdCBqc2NfZ2VuZXJhdG9yOgorICAgICAgICBwcmludCgiZ3RrZG9jLWpzYy1nbGli
LmNmZyBkb2VzIG5vdCBleGlzdCEgU2tpcHBpbmcgdGhhdCBkb2N1bWVudGF0aW9uIikKKyAgICAg
ICAgc3lzLmV4aXQoMSkKKyAgICBzYXdfd2FybmluZ3MgPSBnZW5lcmF0ZV9kb2N1bWVudGF0aW9u
KGpzY19nZW5lcmF0b3IpCisgICAgaWYgc2F3X3dhcm5pbmdzOgorICAgICAgICBzeXMuZXhpdChz
YXdfd2FybmluZ3MpCisKICAgICB3ZWJraXRkb21fZ2VuZXJhdG9yID0gZ2V0X2dlbmVyYXRvcl9m
b3JfY29uZmlnKGNvbW1vbi5idWlsZF9wYXRoKCdndGtkb2Mtd2Via2l0ZG9tLmNmZycpLCBhcmd1
bWVudHMudmlydHVhbF9yb290KQogICAgIGlmIG5vdCB3ZWJraXRkb21fZ2VuZXJhdG9yOgogICAg
ICAgICBwcmludCgiZ3RrZG9jLXdlYmtpdGRvbS5jZmcgZG9lcyBub3QgZXhpc3QhIFNraXBwaW5n
IHRoYXQgZG9jdW1lbnRhdGlvbiIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336113</attachid>
            <date>2018-03-20 04:14:49 -0700</date>
            <delta_ts>2018-03-20 09:34:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>jsc-glib-api.diff</filename>
            <type>text/plain</type>
            <size>301182</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNzNmNWY1OTg4My4uZGVh
ZDllMjgzOTMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxOC0wMy0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEph
dmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNldCBnbG9iYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIG1ha2Vm
aWxlcy4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlOgorCiAyMDE4LTAzLTE1ICBNczJnZXIg
IDxNczJnZXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSBzZXJ2aWNl
IHdvcmtlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFw
cGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVj
dC5oCmluZGV4IDM5NThjZjQ5MjVmLi5hYWU1ZDQxOGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9Qb2lzb25lZC5o
PgogCi0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRCB8
fCBkZWZpbmVkKEpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAK
QEAgLTU1LDYgKzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRp
ZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVE
IHx8IGRlZmluZWQoSlNDX0dMSUJfQVBJX0VOQUJMRUQpCiAKICNlbmRpZiAvLyBKU0FQSVdyYXBw
ZXJPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pT
QVBJV3JhcHBlck9iamVjdEdMaWIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4xOGRkMTNlYjcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcApAQCAtMCwwICsxLDEw
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCisK
KyNpbmNsdWRlICJKU0NHTGliV3JhcHBlck9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK2NsYXNzIEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsK
K307CisKK3N0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVy
T2JqZWN0SGFuZGxlT3duZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0FQSVdy
YXBwZXJPYmplY3RIYW5kbGVPd25lcj4ganNXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI7CisgICAg
cmV0dXJuICZqc1dyYXBwZXJPYmplY3RIYW5kbGVPd25lci5nZXQoKTsKK30KKwordm9pZCBKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqKQoreworICAgIGF1dG8qIHdyYXBwZXJPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Cisg
ICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTQzo6SGVhcDo6aGVhcCh3cmFwcGVyT2JqZWN0KS0+cmVsZWFzZVNvb24oc3RkOjp1
bmlxdWVfcHRyPEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3Q+KHN0YXRpY19jYXN0PEpTQzo6SlND
R0xpYldyYXBwZXJPYmplY3QqPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpKSk7Cisg
ICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vha0ltcGwoaGFu
ZGxlLnNsb3QoKSkpOworfQorCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpp
c1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgLy8gV2UgdXNlIHRoZSBKU0ds
b2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZlbnQgdGhlIHNp
dHVhdGlvbiB3aGVyZSB1c2luZworICAgIC8vIHRoZSBzYW1lIHdyYXBwZWQgb2JqZWN0IGluIG11
bHRpcGxlIGdsb2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxp
dmUuCisgICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gSlNDOjpIZWFwOjppc01hcmtlZCh3cmFwcGVyT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVS
b290KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7Cit9CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJKU0FQSVdyYXBwZXJPYmplY3QiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2FsbGJhY2tPYmpl
Y3QpIH07CisKK3RlbXBsYXRlPD4gY29uc3QgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3Jh
cHBlck9iamVjdD46Om5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworCit0ZW1wbGF0ZSA8PgorU3Ry
dWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8p
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitK
U0FQSVdyYXBwZXJPYmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQVBJ
V3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICBXZWFrU2V0OjphbGxvY2F0ZSh0aGlzLCBqc0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcigpLCAwKTsgLy8gQmFsYW5jZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXI6OmZpbmFsaXplLgorfQorCit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6c2V0
V3JhcHBlZE9iamVjdCh2b2lkKiB3cmFwcGVkT2JqZWN0KQoreworICAgIEFTU0VSVCghbV93cmFw
cGVkT2JqZWN0KTsKKyAgICBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2JqZWN0OworfQorCit2
b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQXV0b2NsZWFudXBzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQXV0b2NsZWFudXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjZkOTE3OGU2OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0F1dG9jbGVhbnVwcy5oCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlND
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8
anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYg
SlNDQXV0b1B0cl9oCisjZGVmaW5lIEpTQ0F1dG9QdHJfaAorCisjaWZkZWYgR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMKKyNpZm5kZWYgX19HSV9TQ0FOTkVSX18KKworR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKEpTQ0NsYXNzLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChKU0NDb250ZXh0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChKU0NFeGNlcHRpb24sIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKEpTQ1ZhbHVlLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChKU0NWaXJ0dWFsTWFjaGluZSwgZ19vYmplY3Rf
dW5yZWYpCisKKyNlbmRpZiAvKiBfX0dJX1NDQU5ORVJfXyAqLworI2VuZGlmIC8qIEdfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DICovCisKKyNlbmRpZiAvKiBKU0NBdXRvUHRyX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFja0Z1bmN0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2FkNzBiOGNh
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q2FsbGJhY2tGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDYWxs
YmFja0Z1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJBUElDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0xvY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGNhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjYWxs
ZXJDb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDQ2FsbGJhY2tG
dW5jdGlvbio+KHRvSlMoZnVuY3Rpb24pKS0+Y2FsbChjYWxsZXJDb250ZXh0LCB0aGlzT2JqZWN0
LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBKU09i
amVjdFJlZiBjYWxsQXNDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY2FsbGVyQ29udGV4dCwgSlNP
YmplY3RSZWYgY29uc3RydWN0b3IsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEpTQ0NhbGxiYWNrRnVuY3Rpb24qPih0b0pTKGNvbnN0cnVjdG9yKSktPmNvbnN0
cnVjdChjYWxsZXJDb250ZXh0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7
Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0NDYWxsYmFja0Z1bmN0aW9uOjpzX2luZm8gPSB7ICJD
YWxsYmFja0Z1bmN0aW9uIiwgJkludGVybmFsRnVuY3Rpb246OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NDYWxsYmFja0Z1bmN0aW9uKSB9OworCitKU0ND
YWxsYmFja0Z1bmN0aW9uKiBKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFR5cGUgdHlwZSwg
SlNDQ2xhc3MqIGpzY0NsYXNzLCBHUmVmUHRyPEdDbG9zdXJlPiYmIGNsb3N1cmUsIEdUeXBlIHJl
dHVyblR5cGUsIFZlY3RvcjxHVHlwZT4mJiBwYXJhbWV0ZXJzKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgp
OworICAgIEpTQ0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNDQ2FsbGJhY2tGdW5jdGlvbj4odm0uaGVhcCkpIEpTQ0NhbGxiYWNrRnVuY3Rp
b24odm0sIHN0cnVjdHVyZSwgdHlwZSwganNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVy
blR5cGUsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSwgbmFtZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitKU0NDYWxsYmFja0Z1bmN0
aW9uOjpKU0NDYWxsYmFja0Z1bmN0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFR5
cGUgdHlwZSwgSlNDQ2xhc3MqIGpzY0NsYXNzLCBHUmVmUHRyPEdDbG9zdXJlPiYmIGNsb3N1cmUs
IEdUeXBlIHJldHVyblR5cGUsIFZlY3RvcjxHVHlwZT4mJiBwYXJhbWV0ZXJzKQorICAgIDogSW50
ZXJuYWxGdW5jdGlvbih2bSwgc3RydWN0dXJlLCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsPEpT
Q0NhbGxiYWNrRnVuY3Rpb24+LCB0eXBlID09IFR5cGU6OkNvbnN0cnVjdG9yID8gQVBJQ2FsbGJh
Y2tGdW5jdGlvbjo6Y29uc3RydWN0PEpTQ0NhbGxiYWNrRnVuY3Rpb24+IDogbnVsbHB0cikKKyAg
ICAsIG1fZnVuY3Rpb25DYWxsYmFjayhjYWxsQXNGdW5jdGlvbikKKyAgICAsIG1fY29uc3RydWN0
Q2FsbGJhY2soY2FsbEFzQ29uc3RydWN0b3IpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1f
Y2xhc3MoanNjQ2xhc3MpCisgICAgLCBtX2Nsb3N1cmUoV1RGTW92ZShjbG9zdXJlKSkKKyAgICAs
IG1fcmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFy
YW1ldGVycykpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSAhPSBUeXBlOjpDb25zdHJ1Y3Rv
ciB8fCBqc2NDbGFzcyk7CisgICAgaWYgKEdfQ0xPU1VSRV9ORUVEU19NQVJTSEFMKG1fY2xvc3Vy
ZS5nZXQoKSkpCisgICAgICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChtX2Nsb3N1cmUuZ2V0KCks
IGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljKTsKK30KKworSlNWYWx1ZVJlZiBKU0NDYWxsYmFj
a0Z1bmN0aW9uOjpjYWxsKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhjYWxsZXJDb250ZXh0KSk7CisgICAgYXV0byBjb250ZXh0ID0ganNjQ29udGV4dEdldE9y
Q3JlYXRlKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQuZ2V0KCkpOwor
CisgICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpDb25zdHJ1Y3RvcikgeworICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRleHQpLCBBU0NJSUxp
dGVyYWwoImNhbm5vdCBjYWxsIGEgY2xhc3MgY29uc3RydWN0b3Igd2l0aG91dCB8bmV3fCIpKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChqc0NvbnRleHQpOworICAgIH0K
KworICAgIGdwb2ludGVyIGluc3RhbmNlID0gbnVsbHB0cjsKKyAgICBpZiAobV90eXBlID09IFR5
cGU6Ok1ldGhvZCkgeworICAgICAgICBpbnN0YW5jZSA9IGpzY0NvbnRleHRXcmFwcGVkT2JqZWN0
KGNvbnRleHQuZ2V0KCksIHRoaXNPYmplY3QpOworICAgICAgICBpZiAoIWluc3RhbmNlKSB7Cisg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhq
c0NvbnRleHQpLCBBU0NJSUxpdGVyYWwoImludmFsaWQgaW5zdGFuY2UgdHlwZSBpbiBtZXRob2Qi
KSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGNhbGxiYWNrRGF0YSA9IGpzY0NvbnRleHRQ
dXNoQ2FsbGJhY2soY29udGV4dC5nZXQoKSwgdG9SZWYodGhpcyksIHRoaXNPYmplY3QsIGFyZ3Vt
ZW50Q291bnQsIGFyZ3VtZW50cyk7CisKKyAgICAvLyBHQ2xvc3VyZSBhbHdheXMgZXhwZWN0IHRv
IGhhdmUgYXQgbGVhc3QgdGhlIGluc3RhbmNlIHBhcmFtZXRlci4KKyAgICBib29sIGFkZEluc3Rh
bmNlID0gaW5zdGFuY2UgfHwgbV9wYXJhbWV0ZXJzLmlzRW1wdHkoKTsKKworICAgIGF1dG8gcGFy
YW1ldGVyQ291bnQgPSBzdGQ6Om1pbihtX3BhcmFtZXRlcnMuc2l6ZSgpLCBhcmd1bWVudENvdW50
KTsKKyAgICBpZiAoYWRkSW5zdGFuY2UpCisgICAgICAgIHBhcmFtZXRlckNvdW50Kys7CisgICAg
YXV0byogdmFsdWVzID0gc3RhdGljX2Nhc3Q8R1ZhbHVlKj4oZ19hbGxvY2Eoc2l6ZW9mKEdWYWx1
ZSkgKiBwYXJhbWV0ZXJDb3VudCkpOworICAgIG1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZihHVmFs
dWUpICogcGFyYW1ldGVyQ291bnQpOworCisgICAgc2l6ZV90IGZpcnN0UGFyYW1ldGVyID0gMDsK
KyAgICBpZiAoYWRkSW5zdGFuY2UpIHsKKyAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZXNbMF0s
IEdfVFlQRV9QT0lOVEVSKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcigmdmFsdWVzWzBd
LCBpbnN0YW5jZSk7CisgICAgICAgIGZpcnN0UGFyYW1ldGVyID0gMTsKKyAgICB9CisgICAgZm9y
IChzaXplX3QgaSA9IGZpcnN0UGFyYW1ldGVyOyBpIDwgcGFyYW1ldGVyQ291bnQgJiYgISpleGNl
cHRpb247ICsraSkKKyAgICAgICAganNjQ29udGV4dEpTVmFsdWVUb0dWYWx1ZShjb250ZXh0Lmdl
dCgpLCBhcmd1bWVudHNbaSAtIGZpcnN0UGFyYW1ldGVyXSwgbV9wYXJhbWV0ZXJzW2kgLSBmaXJz
dFBhcmFtZXRlcl0sICZ2YWx1ZXNbaV0sIGV4Y2VwdGlvbik7CisKKyAgICBHVmFsdWUgcmV0dXJu
VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgaWYgKG1fcmV0dXJuVHlwZSAhPSBHX1RZUEVfTk9O
RSkKKyAgICAgICAgZ192YWx1ZV9pbml0KCZyZXR1cm5WYWx1ZSwgbV9yZXR1cm5UeXBlKTsKKwor
ICAgIGlmICghKmV4Y2VwdGlvbikKKyAgICAgICAgZ19jbG9zdXJlX2ludm9rZShtX2Nsb3N1cmUu
Z2V0KCksIG1fcmV0dXJuVHlwZSAhPSBHX1RZUEVfTk9ORSA/ICZyZXR1cm5WYWx1ZSA6IG51bGxw
dHIsIHBhcmFtZXRlckNvdW50LCB2YWx1ZXMsIG51bGxwdHIpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudDsgKytpKQorICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2
YWx1ZXNbaV0pOworCisgICAgaWYgKGF1dG8qIGpzY0V4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dl
dF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpCisgICAgICAgICpleGNlcHRpb24gPSBqc2NFeGNl
cHRpb25HZXRKU1ZhbHVlKGpzY0V4Y2VwdGlvbik7CisKKyAgICBqc2NDb250ZXh0UG9wQ2FsbGJh
Y2soY29udGV4dC5nZXQoKSwgV1RGTW92ZShjYWxsYmFja0RhdGEpKTsKKworICAgIGlmIChtX3Jl
dHVyblR5cGUgPT0gR19UWVBFX05PTkUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChqc0NvbnRleHQpOworCisgICAgYXV0byogcmV0dmFsID0gKmV4Y2VwdGlvbiA/IEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCkgOiBqc2NDb250ZXh0R1ZhbHVlVG9KU1ZhbHVlKGNv
bnRleHQuZ2V0KCksICZyZXR1cm5WYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICBnX3ZhbHVlX3Vuc2V0
KCZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworSlNPYmplY3RSZWYgSlND
Q2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0KEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhjYWxsZXJD
b250ZXh0KSk7CisgICAgYXV0byBjb250ZXh0ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlKHRvR2xv
YmFsUmVmKGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKTsKKyAgICBhdXRvKiBqc0NvbnRl
eHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworCisgICAgaWYgKG1f
cmV0dXJuVHlwZSA9PSBHX1RZUEVfTk9ORSkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
SlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRleHQpLCBBU0NJSUxpdGVyYWwoImNvbnN0
cnVjdG9ycyBjYW5ub3QgYmUgdm9pZCIpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGF1dG8gY2FsbGJhY2tEYXRhID0ganNjQ29udGV4dFB1c2hDYWxsYmFjayhjb250
ZXh0LmdldCgpLCB0b1JlZih0aGlzKSwgbnVsbHB0ciwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRz
KTsKKworICAgIEdWYWx1ZSByZXR1cm5WYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVl
X2luaXQoJnJldHVyblZhbHVlLCBtX3JldHVyblR5cGUpOworCisgICAgaWYgKG1fcGFyYW1ldGVy
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gR0Nsb3N1cmUgYWx3YXlzIGV4cGVjdCB0byBoYXZl
IGF0IGxlYXN0IHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXIuCisgICAgICAgIEdWYWx1ZSBkdW1teVZh
bHVlID0gR19WQUxVRV9JTklUOworICAgICAgICBnX3ZhbHVlX2luaXQoJmR1bW15VmFsdWUsIEdf
VFlQRV9QT0lOVEVSKTsKKyAgICAgICAgZ19jbG9zdXJlX2ludm9rZShtX2Nsb3N1cmUuZ2V0KCks
ICZyZXR1cm5WYWx1ZSwgMSwgJmR1bW15VmFsdWUsIG51bGxwdHIpOworICAgICAgICBnX3ZhbHVl
X3Vuc2V0KCZkdW1teVZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIHBhcmFtZXRl
ckNvdW50ID0gc3RkOjptaW4obV9wYXJhbWV0ZXJzLnNpemUoKSwgYXJndW1lbnRDb3VudCk7Cisg
ICAgICAgIGF1dG8qIHZhbHVlcyA9IHN0YXRpY19jYXN0PEdWYWx1ZSo+KGdfYWxsb2NhKHNpemVv
ZihHVmFsdWUpICogcGFyYW1ldGVyQ291bnQpKTsKKyAgICAgICAgbWVtc2V0KHZhbHVlcywgMCwg
c2l6ZW9mKEdWYWx1ZSkgKiBwYXJhbWV0ZXJDb3VudCk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXJhbWV0ZXJDb3VudCAmJiAhKmV4Y2VwdGlvbjsgKytpKQorICAgICAgICAg
ICAganNjQ29udGV4dEpTVmFsdWVUb0dWYWx1ZShjb250ZXh0LmdldCgpLCBhcmd1bWVudHNbaV0s
IG1fcGFyYW1ldGVyc1tpXSwgJnZhbHVlc1tpXSwgZXhjZXB0aW9uKTsKKworICAgICAgICBpZiAo
ISpleGNlcHRpb24pCisgICAgICAgICAgICBnX2Nsb3N1cmVfaW52b2tlKG1fY2xvc3VyZS5nZXQo
KSwgJnJldHVyblZhbHVlLCBwYXJhbWV0ZXJDb3VudCwgdmFsdWVzLCBudWxscHRyKTsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyArK2kpCisgICAgICAg
ICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZXNbaV0pOworICAgIH0KKworICAgIGlmIChhdXRvKiBq
c2NFeGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKQor
ICAgICAgICAqZXhjZXB0aW9uID0ganNjRXhjZXB0aW9uR2V0SlNWYWx1ZShqc2NFeGNlcHRpb24p
OworCisgICAganNjQ29udGV4dFBvcENhbGxiYWNrKGNvbnRleHQuZ2V0KCksIFdURk1vdmUoY2Fs
bGJhY2tEYXRhKSk7CisKKyAgICBpZiAoKmV4Y2VwdGlvbikgeworICAgICAgICBnX3ZhbHVlX3Vu
c2V0KCZyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHN3aXRjaCAoZ190eXBlX2Z1bmRhbWVudGFsKEdfVkFMVUVfVFlQRSgmcmV0dXJuVmFsdWUpKSkg
eworICAgIGNhc2UgR19UWVBFX1BPSU5URVI6CisgICAgY2FzZSBHX1RZUEVfT0JKRUNUOgorICAg
ICAgICBpZiAoYXV0byogcHRyID0gcmV0dXJuVmFsdWUuZGF0YVswXS52X3BvaW50ZXIpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHJldHZhbCA9IGpzY0NsYXNzR2V0T3JDcmVhdGVKU1dyYXBwZXIobV9j
bGFzcy5nZXQoKSwgcHRyKTsKKyAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnJldHVyblZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiB0b1JlZihyZXR2YWwpOworICAgICAgICB9CisgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCks
IEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3IgcmV0dXJuZWQgbnVsbCIpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIG1ha2VTdHJpbmcoImludmFsaWQgdHlwZSAiLCBn
X3R5cGVfbmFtZShHX1ZBTFVFX1RZUEUoJnJldHVyblZhbHVlKSksICIgcmV0dXJuZWQgYnkgY29u
c3RydWN0b3IiKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgSlNDQ2FsbGJhY2tGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAgc3RhdGljX2Nhc3Q8SlNDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwpLT5KU0NDYWxsYmFj
a0Z1bmN0aW9uOjp+SlNDQ2FsbGJhY2tGdW5jdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxsYmFj
a0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2FsbGJhY2tG
dW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ODViNjNj
NGJhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9K
U0NDYWxsYmFja0Z1bmN0aW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJKU09iamVjdFJlZi5oIgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3MgSlND
Q2xhc3M7CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NDYWxsYmFja0Z1bmN0aW9uIDog
cHVibGljIEludGVybmFsRnVuY3Rpb24geworICAgIGZyaWVuZCBzdHJ1Y3QgQVBJQ2FsbGJhY2tG
dW5jdGlvbjsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKwor
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIEZ1bmN0aW9uLAorICAgICAgICBNZXRob2Qs
CisgICAgICAgIENvbnN0cnVjdG9yCisgICAgfTsKKworICAgIHN0YXRpYyBKU0NDYWxsYmFja0Z1
bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
VHlwZSwgSlNDQ2xhc3MqLCBHUmVmUHRyPEdDbG9zdXJlPiYmLCBHVHlwZSwgVmVjdG9yPEdUeXBl
PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBKU1ZhbHVlUmVm
IGNhbGwoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAg
SlNPYmplY3RSZWYgY29uc3RydWN0KEpTQ29udGV4dFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisK
K3ByaXZhdGU6CisgICAgSlNDQ2FsbGJhY2tGdW5jdGlvbihWTSYsIFN0cnVjdHVyZSosIFR5cGUs
IEpTQ0NsYXNzKiwgR1JlZlB0cjxHQ2xvc3VyZT4mJiwgR1R5cGUsIFZlY3RvcjxHVHlwZT4mJik7
CisKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgZnVuY3Rpb25DYWxsYmFjaygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25DYWxsYmFjazsgfQorICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3Ry
dWN0b3JDYWxsYmFjayBjb25zdHJ1Y3RDYWxsYmFjaygpIHsgcmV0dXJuIG1fY29uc3RydWN0Q2Fs
bGJhY2s7IH0KKworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBtX2Z1bmN0aW9u
Q2FsbGJhY2s7CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIG1fY29uc3Ry
dWN0Q2FsbGJhY2s7CisgICAgVHlwZSBtX3R5cGU7CisgICAgR1JlZlB0cjxKU0NDbGFzcz4gbV9j
bGFzczsKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBtX2Nsb3N1cmU7CisgICAgR1R5cGUgbV9yZXR1
cm5UeXBlOworICAgIFZlY3RvcjxHVHlwZT4gbV9wYXJhbWV0ZXJzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q2xhc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmY0YWQxOGNjMGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3Bw
CkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NDbGFzcy5oIgorCisjaW5jbHVkZSAi
SlNDQ2FsbGJhY2tGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkpTQ0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCisvKioKKyAqIFNFQ1RJT046IEpT
Q0NsYXNzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgY3VzdG9tIGNsYXNzCisg
KiBAdGl0bGU6IEpTQ0NsYXNzCisgKiBAc2VlX2Fsc286IEpTQ0NvbnRleHQKKyAqCisgKiBBIEpT
U0NsYXNzIHJlcHJlc2VudHMgYSBjdXN0b20gSmF2YVNjcmlwdCBjbGFzcyByZWdpc3RlcmVkIGJ5
IHRoZSB1c2VyIGluIGEgI0pTQ0NvbnRleHQuCisgKiBJdCBhbGxvd3MgdG8gY3JlYXRlIG5ldyBK
YXZhU2NyaXB0cyBvYmplY3RzIHdob3NlIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBieSB0aGUgdXNl
ciB1c2luZworICogdGhpcyBBUEkuCisgKiBJdCdzIHBvc3NpYmxlIHRvIGFkZCBjb25zdHJ1Y3Rv
cnMsIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgZm9yIGEgSlNTQ2xhc3MgYnkgcHJvdmlkaW5nCisg
KiAjR0NhbGxiYWNrPCEtLSAtLT5zIHRvIGltcGxlbWVudCB0aGVtLgorICovCisKK2VudW0gewor
ICAgIFBST1BfMCwKKworICAgIFBST1BfQ09OVEVYVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJP
UF9QQVJFTlQKK307CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzc1ByaXZhdGUgeworICAgIEpT
Q0NvbnRleHQqIGNvbnRleHQ7CisgICAgQ1N0cmluZyBuYW1lOworICAgIEpTQ2xhc3NSZWYganND
bGFzczsKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb247CisgICAgSlNDQ2xhc3Mq
IHBhcmVudENsYXNzOworICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBwcm90b3R5cGU7Cisg
ICAgSGFzaE1hcDxDU3RyaW5nLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4+IGNvbnN0cnVjdG9y
czsKK30gSlNDQ2xhc3NQcml2YXRlOworCitzdHJ1Y3QgX0pTQ0NsYXNzIHsKKyAgICBHT2JqZWN0
IHBhcmVudDsKKworICAgIEpTQ0NsYXNzUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfSlND
Q2xhc3NDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9ERUZJTkVfVFlQRShKU0NDbGFzcywganNjX2NsYXNzLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0
aWMgdm9pZCBqc2NDbGFzc0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElE
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgSlNDQ2xhc3Mq
IGpzY0NsYXNzID0gSlNDX0NMQVNTKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgewor
ICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IGpzY0NsYXNzLT5wcml2LT5jb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X05BTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwganNjQ2xhc3MtPnByaXYt
Pm5hbWUuZGF0YSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBqc2NDbGFzcy0+cHJpdi0+cGFyZW50Q2xh
c3MpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCBqc2NDbGFzc1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7
CisgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0gSlNDX0NMQVNTKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBqc2NDbGFzcy0+
cHJpdi0+Y29udGV4dCA9IEpTQ19DT05URVhUKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAganNjQ2xhc3MtPnBy
aXYtPm5hbWUgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUEFSRU5UOgorICAgICAgICBpZiAoYXV0byogcGFyZW50ID0gZ192YWx1ZV9n
ZXRfb2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgIGpzY0NsYXNzLT5wcml2LT5wYXJlbnRDbGFz
cyA9IEpTQ19DTEFTUyhwYXJlbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBh
cmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NDbGFzc0Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQoreworICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IEpTQ19DTEFTUyhvYmplY3Qp
OworICAgIGlmIChqc2NDbGFzcy0+cHJpdi0+anNDbGFzcykgeworICAgICAgICBKU0NsYXNzUmVs
ZWFzZShqc2NDbGFzcy0+cHJpdi0+anNDbGFzcyk7CisgICAgICAgIGpzY0NsYXNzLT5wcml2LT5q
c0NsYXNzID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhqc2NfY2xhc3Nf
cGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBqc2NDbGFz
c0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyhqc2Nf
Y2xhc3NfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIEpTQ0NsYXNz
UHJpdmF0ZSogcHJpdiA9IEpTQ19DTEFTUyhvYmplY3QpLT5wcml2OworICAgIEpTQ2xhc3NEZWZp
bml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICBkZWZpbml0
aW9uLmNsYXNzTmFtZSA9IHByaXYtPm5hbWUuZGF0YSgpOworICAgIHByaXYtPmpzQ2xhc3MgPSBK
U0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcHJvdG90
eXBlTmFtZShnX3N0cmR1cF9wcmludGYoIiVzUHJvdG90eXBlIiwgcHJpdi0+bmFtZS5kYXRhKCkp
KTsKKyAgICBKU0NsYXNzRGVmaW5pdGlvbiBwcm90b3R5cGVEZWZpbml0aW9uID0ga0pTQ2xhc3NE
ZWZpbml0aW9uRW1wdHk7CisgICAgcHJvdG90eXBlRGVmaW5pdGlvbi5jbGFzc05hbWUgPSBwcm90
b3R5cGVOYW1lLmdldCgpOworICAgIEpTQ2xhc3NSZWYgcHJvdG90eXBlQ2xhc3MgPSBKU0NsYXNz
Q3JlYXRlKCZwcm90b3R5cGVEZWZpbml0aW9uKTsKKyAgICBwcml2LT5wcm90b3R5cGUgPSBqc2ND
b250ZXh0R2V0T3JDcmVhdGVKU1dyYXBwZXIocHJpdi0+Y29udGV4dCwgcHJvdG90eXBlQ2xhc3Mp
OworICAgIEpTQ2xhc3NSZWxlYXNlKHByb3RvdHlwZUNsYXNzKTsKKworICAgIGlmIChwcml2LT5w
YXJlbnRDbGFzcykKKyAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoanNjQ29udGV4dEdldEpT
Q29udGV4dChwcml2LT5jb250ZXh0KSwgdG9SZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSwgdG9S
ZWYocHJpdi0+cGFyZW50Q2xhc3MtPnByaXYtPnByb3RvdHlwZS5nZXQoKSkpOworfQorCitzdGF0
aWMgdm9pZCBqc2NfY2xhc3NfY2xhc3NfaW5pdChKU0NDbGFzc0NsYXNzKiBrbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iakNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9i
akNsYXNzLT5jb25zdHJ1Y3RlZCA9IGpzY0NsYXNzQ29uc3RydWN0ZWQ7CisgICAgb2JqQ2xhc3Mt
PmRpc3Bvc2UgPSBqc2NDbGFzc0Rpc3Bvc2U7CisgICAgb2JqQ2xhc3MtPmdldF9wcm9wZXJ0eSA9
IGpzY0NsYXNzR2V0UHJvcGVydHk7CisgICAgb2JqQ2xhc3MtPnNldF9wcm9wZXJ0eSA9IGpzY0Ns
YXNzU2V0UHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBKU0NDbGFzczpjb250ZXh0OgorICAg
ICAqCisgICAgICogVGhlICNKU0NDb250ZXh0IGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgcmVnaXN0
ZXJlZC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNs
YXNzLAorICAgICAgICBQUk9QX0NPTlRFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAiY29udGV4dCIsCisgICAgICAgICAgICAiSlNDQ29udGV4dCIsCisgICAg
ICAgICAgICAiSlNDIENvbnRleHQiLAorICAgICAgICAgICAgSlNDX1RZUEVfQ09OVEVYVCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
IHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIC8qKgorICAgICAqIEpTQ0NsYXNz
Om5hbWU6CisgICAgICoKKyAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY2xhc3MuCisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpDbGFzcywKKyAgICAgICAgUFJP
UF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUi
LAorICAgICAgICAgICAgIk5hbWUiLAorICAgICAgICAgICAgIlRoZSBjbGFzcyBuYW1lIiwKKyAg
ICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
V0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAg
ICAvKioKKyAgICAgKiBKU0NDbGFzczpwYXJlbnQ6CisgICAgICoKKyAgICAgKiBUaGUgcGFyZW50
IGNsYXNzIG9yICVOVUxMIGluIGNhc2Ugb2YgZmluYWwgY2xhc3Nlcy4KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iakNsYXNzLAorICAgICAgICBQUk9QX1BB
UkVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQi
LAorICAgICAgICAgICAgIlBhcnRlbnQiLAorICAgICAgICAgICAgIlRoZSBwYXJlbnQgY2xhc3Mi
LAorICAgICAgICAgICAgSlNDX1RZUEVfQ0xBU1MsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
UGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09O
TFkpKSk7Cit9CisKK0dSZWZQdHI8SlNDQ2xhc3M+IGpzY0NsYXNzQ3JlYXRlKEpTQ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEpTQ0NsYXNzKiBwYXJlbnRDbGFzcywgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8SlNDQ2xhc3M+IGpzY0Ns
YXNzID0gYWRvcHRHUmVmKEpTQ19DTEFTUyhnX29iamVjdF9uZXcoSlNDX1RZUEVfQ0xBU1MsICJj
b250ZXh0IiwgY29udGV4dCwgIm5hbWUiLCBuYW1lLCAicGFyZW50IiwgcGFyZW50Q2xhc3MsIG51
bGxwdHIpKSk7CisgICAganNjQ2xhc3MtPnByaXYtPmRlc3Ryb3lGdW5jdGlvbiA9IGRlc3Ryb3lG
dW5jdGlvbjsKKyAgICByZXR1cm4ganNjQ2xhc3M7Cit9CisKK0pTQ2xhc3NSZWYganNjQ2xhc3NH
ZXRKU0NsYXNzKEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICByZXR1cm4ganNjQ2xhc3MtPnBy
aXYtPmpzQ2xhc3M7Cit9CisKK0pTQzo6SlNPYmplY3QqIGpzY0NsYXNzR2V0T3JDcmVhdGVKU1dy
YXBwZXIoSlNDQ2xhc3MqIGpzY0NsYXNzLCBncG9pbnRlciB3cmFwcGVkT2JqZWN0KQoreworICAg
IEpTQ0NsYXNzUHJpdmF0ZSogcHJpdiA9IGpzY0NsYXNzLT5wcml2OworICAgIHJldHVybiBqc2ND
b250ZXh0R2V0T3JDcmVhdGVKU1dyYXBwZXIocHJpdi0+Y29udGV4dCwgcHJpdi0+anNDbGFzcywg
dG9SZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSwgd3JhcHBlZE9iamVjdCwgcHJpdi0+ZGVzdHJv
eUZ1bmN0aW9uKTsKK30KKwordm9pZCBqc2NDbGFzc0ludmFsaWRhdGUoSlNDQ2xhc3MqIGpzY0Ns
YXNzKQoreworICAgIGpzY0NsYXNzLT5wcml2LT5jb250ZXh0ID0gbnVsbHB0cjsKK30KKworLyoq
CisgKiBqc2NfY2xhc3NfZ2V0X25hbWU6CisgKiBAanNjX2NsYXNzOiBhIEBKU0NDbGFzcworICoK
KyAqIEdldCB0aGUgY2xhc3MgbmFtZSBvZiBAanNjX2NsYXNzCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiB0aGUgbmFtZSBvZiBAanNjX2NsYXNzCisgKi8KK2NvbnN0IGNoYXIqIGpz
Y19jbGFzc19nZXRfbmFtZShKU0NDbGFzcyoganNjQ2xhc3MpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4g
anNjQ2xhc3MtPnByaXYtPm5hbWUuZGF0YSgpOworfQorCisvKioKKyAqIGpzY19jbGFzc19nZXRf
cGFyZW50OgorICogQGpzY19jbGFzczogYSBASlNDQ2xhc3MKKyAqCisgKiBHZXQgdGhlIHBhcmVu
dCBjbGFzcyBvZiBAanNjX2NsYXNzCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0
aGUgcGFyZW50IGNsYXNzIG9mIEBqc2NfY2xhc3MKKyAqLworSlNDQ2xhc3MqIGpzY19jbGFzc19n
ZXRfcGFyZW50KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfQ0xBU1MoanNjQ2xhc3MpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2NDbGFz
cy0+cHJpdi0+cGFyZW50Q2xhc3M7Cit9CisKKy8qKgorICoganNjX2NsYXNzX2FkZF9jb25zdHJ1
Y3RvcjoKKyAqIEBqc2NfY2xhc3M6IGEgI0pTQ0NsYXNzCisgKiBAbmFtZTogKG51bGxhYmxlKTog
dGhlIGNvbnN0cnVjdG9yIG5hbWUgb3IgJU5VTEwKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5j
KTogYSAjR0NhbGxiYWNrIHRvIGJlIGNhbGxlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQGpz
Y19jbGFzcworICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBA
Y2FsbGJhY2sKKyAqIEBkZXN0cm95X25vdGlmeTogKG51bGxhYmxlKTogZGVzdHJveSBub3RpZmll
ciBmb3IgQHVzZXJfZGF0YQorICogQHJldHVybl90eXBlOiB0aGUgI0dUeXBlIG9mIHRoZSBjb25z
dHJ1Y3RvciByZXR1cm4gdmFsdWUKKyAqIEBuX3BhcmFtczogdGhlIG51bWJlciBvZiBwYXJhbWV0
ZXIgdHlwZXMgdG8gZm9sbG93IG9yIDAgaWYgY29uc3RydWN0b3IgZG9lc24ndCByZWNlaXZlIHBh
cmFtZXRlcnMuCisgKiBALi4uOiBhIGxpc3Qgb2YgI0dUeXBlPCEtLSAtLT5zLCBvbmUgZm9yIGVh
Y2ggcGFyYW1ldGVyLgorICoKKyAqIEFkZCBhIGNvbnN0cnVjdG9yIHRvIEBqc2NfY2xhc3MuIElm
IEBuYW1lIGlzICVOVUxMLCB0aGUgY2xhc3MgbmFtZSB3aWxsIGJlIHVzZWQuIFdoZW4gPGZ1bmN0
aW9uPm5ldzwvZnVuY3Rpb24+CisgKiBpcyB1c2VkIHdpdGggdGhlIGNvbnN0cnVjdG9yIG9yIGpz
Y192YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsKCkgaXMgY2FsbGVkLCBAY2FsbGJhY2sgaXMgaW52b2tl
ZCByZWNlaXZpbmcgdGhlCisgKiBwYXJhbWV0ZXJzIGFuZCBAdXNlcl9kYXRhIGFzIHRoZSBsYXN0
IHBhcmFtZXRlci4gV2hlbiB0aGUgY29uc3RydWN0b3Igb2JqZWN0IGlzIGNsZWFyZWQgaW4gdGhl
ICNKU0NDbGFzcyBjb250ZXh0LAorICogQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoIEB1
c2VyX2RhdGEgYXMgcGFyYW1ldGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUg
Y29uc3RydWN0b3IsIHRoYXQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gYW4gb2JqZWN0IGFzIGEgcHJv
cGVydHkgdG8gYmUgYWJsZSB0byB1c2UgaXQuIFVzZQorICoganNjX2NvbnRleHRfc2V0X3ZhbHVl
KCkgdG8gbWFrZSB0aGUgY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgb2JqZWN0
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUgcmVwcmVzZW50
aW5nIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAqLworSlNDVmFsdWUqIGpzY19jbGFzc19hZGRf
Y29uc3RydWN0b3IoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJh
Y2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90
aWZ5LCBHVHlwZSByZXR1cm5UeXBlLCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NMQVNTKGpzY0NsYXNzKSwgbnVsbHB0cik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2FsbGJhY2ssIG51bGxwdHIpOworCisgICAgSlNDQ2xh
c3NQcml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIG5h
bWUgPSBwcml2LT5uYW1lLmRhdGEoKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFy
dChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRlcnM7CisgICAg
aWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1D
b3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQodmFfYXJn
KGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIEdSZWZQdHI8
R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2FsbGJhY2ssIHVz
ZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkp
OworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IEpT
Qzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIFN0cmluZzo6ZnJvbVVURjgobmFtZSksCisgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tG
dW5jdGlvbjo6VHlwZTo6Q29uc3RydWN0b3IsIGpzY0NsYXNzLCBXVEZNb3ZlKGNsb3N1cmUpLCBy
ZXR1cm5UeXBlLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBhdXRvIGNvbnN0cnVjdG9yID0g
anNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYoZnVuY3Rpb25P
YmplY3QpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBwcm90b3R5cGUgPSBqc2NDb250ZXh0R2V0
T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0LCB0b1JlZihwcml2LT5wcm90b3R5cGUuZ2V0KCkp
KTsKKyAgICBhdXRvIG5vbkVudW1lcmFibGUgPSBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5
RmxhZ3M+KEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgfCBKU0NfVkFMVUVfUFJPUEVS
VFlfV1JJVEFCTEUpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEo
Y29uc3RydWN0b3IuZ2V0KCksICJwcm90b3R5cGUiLCBub25FbnVtZXJhYmxlLCBwcm90b3R5cGUu
Z2V0KCkpOworICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEocHJvdG90
eXBlLmdldCgpLCAiY29uc3RydWN0b3IiLCBub25FbnVtZXJhYmxlLCBjb25zdHJ1Y3Rvci5nZXQo
KSk7CisgICAgcHJpdi0+Y29uc3RydWN0b3JzLnNldChuYW1lLCBmdW5jdGlvbk9iamVjdCk7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfY2xhc3Nf
YWRkX21ldGhvZDoKKyAqIEBqc2NfY2xhc3M6IGEgI0pTQ0NsYXNzCisgKiBAbmFtZTogdGhlIG1l
dGhvZCBuYW1lCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dDYWxsYmFjayB0byBi
ZSBjYWxsZWQgdG8gaW52b2tlIG1ldGhvZCBAbmFtZSBvZiBAanNjX2NsYXNzCisgKiBAdXNlcl9k
YXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSB0byBwYXNzIHRvIEBjYWxsYmFjaworICogQGRlc3Ry
b3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNlcl9kYXRhCisg
KiBAcmV0dXJuX3R5cGU6IHRoZSAjR1R5cGUgb2YgdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUsIG9y
ICVHX1RZUEVfTk9ORSBpZiB0aGUgbWV0aG9kIGlzIHZvaWQuCisgKiBAbl9wYXJhbXM6IHRoZSBu
dW1iZXIgb2YgcGFyYW1ldGVyIHR5cGVzIHRvIGZvbGxvdyBvciAwIGlmIHRoZSBtZXRob2QgZG9l
c24ndCByZWNlaXZlIHBhcmFtZXRlcnMuCisgKiBALi4uOiBhIGxpc3Qgb2YgI0dUeXBlPCEtLSAt
LT5zLCBvbmUgZm9yIGVhY2ggcGFyYW1ldGVyLgorICoKKyAqIEFkZCBtZXRob2Qgd2l0aCBAbmFt
ZSB0byBAanNjX2NsYXNzLiBXaGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkIGJ5IEphdmFTY3JpcHQg
b3IganNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKCksCisgKiBAY2FsbGJhY2sgaXMgY2Fs
bGVkIHJlY2VpdmluZyB0aGUgY2xhc3MgaW5zdGFuY2UgYXMgZmlyc3QgcGFyYW1ldGVyLCBmb2xs
b3dlZCBieSB0aGUgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHRoZW4KKyAqIEB1c2VyX2RhdGEgYXMg
bGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIG1ldGhvZCBpcyBjbGVhcmVkIGluIHRoZSAjSlNDQ2xh
c3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoCisgKiBAdXNlcl9kYXRh
IGFzIHBhcmFtZXRlci4KKyAqLwordm9pZCBqc2NfY2xhc3NfYWRkX21ldGhvZChKU0NDbGFzcyog
anNjQ2xhc3MsIGNvbnN0IGNoYXIqIG5hbWUsIEdDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIg
dXNlckRhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnksIEdUeXBlIHJldHVyblR5cGUs
IHVuc2lnbmVkIHBhcmFtQ291bnQsIC4uLikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19J
U19DTEFTUyhqc2NDbGFzcykpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChjYWxsYmFjayk7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBq
c2NDbGFzcy0+cHJpdjsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisg
ICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIHBhcmFtQ291bnQpOworICAgIFZl
Y3RvcjxHVHlwZT4gcGFyYW1ldGVyczsKKyAgICBpZiAocGFyYW1Db3VudCkgeworICAgICAgICBw
YXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFyYW1Db3VudCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLnVuY2hlY2tlZEFwcGVuZCh2YV9hcmcoYXJncywgR1R5cGUpKTsKKyAgICB9CisgICAg
dmFfZW5kKGFyZ3MpOworCisgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3VyZSA9IGFkb3B0R1Jl
ZihnX2NjbG9zdXJlX25ldyhjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Ns
b3N1cmVOb3RpZnk+KGRlc3Ryb3lOb3RpZnkpKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dCkpOworICAgIEpTQzo6
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwor
ICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpNZXRob2Qs
IGpzY0NsYXNzLCBXVEZNb3ZlKGNsb3N1cmUpLCByZXR1cm5UeXBlLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKSk7CisgICAgYXV0byBtZXRob2QgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2
LT5jb250ZXh0LCBmdW5jdGlvbk9iamVjdCk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcHJvdG90
eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9SZWYocHJp
di0+cHJvdG90eXBlLmdldCgpKSk7CisgICAgYXV0byBub25FbnVtZXJhYmxlID0gc3RhdGljX2Nh
c3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxF
IHwgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKTsKKyAgICBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKHByb3RvdHlwZS5nZXQoKSwgbmFtZSwgbm9uRW51bWVyYWJsZSwg
bWV0aG9kLmdldCgpKTsKK30KKworLyoqCisgKiBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5OgorICog
QGpzY19jbGFzczogYSAjSlNDQ2xhc3MKKyAqIEBuYW1lOiB0aGUgcHJvcGVydHkgbmFtZQorICog
QHByb3BlcnR5X3R5cGU6IHRoZSAjR1R5cGUgb2YgdGhlIHByb3BlcnR5IHZhbHVlCisgKiBAZ2V0
dGVyOiAoc2NvcGUgYXN5bmMpIChudWxsYWJsZSk6IGEgI0dDYWxsYmFjayB0byBiZSBjYWxsZWQg
dG8gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZQorICogQHNldHRlcjogKHNjb3BlIGFzeW5jKSAobnVs
bGFibGUpOiBhICNHQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHRvIHNldCB0aGUgcHJvcGVydHkgdmFs
dWUKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHRvIHBhc3MgdG8gQGdldHRl
ciBhbmQgQHNldHRlcgorICogQGRlc3Ryb3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5v
dGlmaWVyIGZvciBAdXNlcl9kYXRhCisgKgorICogQWRkIGEgcHJvcGVydHkgd2l0aCBAbmFtZSB0
byBAanNjX2NsYXNzLiBXaGVuIHRoZSBwcm9wZXJ0eSB2YWx1ZSBuZWVkcyB0byBiZSBnZXR0ZWQs
IEBnZXR0ZXIgaXMgY2FsbGVkCisgKiByZWNlaXZpbmcgdGhlIHRoZSBjbGFzcyBpbnN0YW5jZSBh
cyBmaXJzdCBwYXJhbWV0ZXIgYW5kIEB1c2VyX2RhdGEgYXMgbGFzdCBwYXJhbWV0ZXIuIFdoZW4g
dGhlIHByb3BlcnR5CisgKiB2YWx1ZSBuZWVkcyB0byBiZSBzZXQsIEBzZXR0ZXIgaXMgY2FsbGVk
IHJlY2VpdmluZyB0aGUgdGhlIGNsYXNzIGluc3RhbmNlIGFzIGZpcnN0IHBhcmFtZXRlciwgZm9s
bG93ZWQKKyAqIGJ5IHRoZSB2YWx1ZSB0byBiZSBzZXQgYW5kIHRoZW4gQHVzZXJfZGF0YSBhcyB0
aGUgbGFzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlIHByb3BlcnR5IGlzIGNsZWFyZWQgaW4gdGhlCisg
KiAjSlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3aXRoIEB1c2Vy
X2RhdGEgYXMgcGFyYW1ldGVyLgorICovCit2b2lkIGpzY19jbGFzc19hZGRfcHJvcGVydHkoSlND
Q2xhc3MqIGpzY0NsYXNzLCBjb25zdCBjaGFyKiBuYW1lLCBHVHlwZSBwcm9wZXJ0eVR5cGUsIEdD
YWxsYmFjayBnZXR0ZXIsIEdDYWxsYmFjayBzZXR0ZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVz
dHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lT
X0NMQVNTKGpzY0NsYXNzKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChuYW1lKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHByb3BlcnR5VHlwZSAhPSBHX1RZUEVfSU5WQUxJRCAmJiBwcm9wZXJ0eVR5
cGUgIT0gR19UWVBFX05PTkUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ2V0dGVyIHx8IHNldHRl
cik7CisKKyAgICBKU0NDbGFzc1ByaXZhdGUqIHByaXYgPSBqc2NDbGFzcy0+cHJpdjsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHByaXYtPmNvbnRleHQpOworCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
cHJvdG90eXBlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dCwgdG9S
ZWYocHJpdi0+cHJvdG90eXBlLmdldCgpKSk7CisgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfYWNjZXNzb3IocHJvdG90eXBlLmdldCgpLCBuYW1lLCBKU0NfVkFMVUVfUFJPUEVS
VFlfQ09ORklHVVJBQkxFLCBwcm9wZXJ0eVR5cGUsIGdldHRlciwgc2V0dGVyLCB1c2VyRGF0YSwg
ZGVzdHJveU5vdGlmeSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDQ2xhc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFz
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjVjNmE4MTMyMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFz
cy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxB
VElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgSlNDQ2xhc3NfaAorI2RlZmluZSBKU0NDbGFzc19oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisjaW5j
bHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQ
RV9DTEFTUyAgICAgICAgICAgIChqc2NfY2xhc3NfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0NM
QVNTKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpT
Q19UWVBFX0NMQVNTLCBKU0NDbGFzcykpCisjZGVmaW5lIEpTQ19JU19DTEFTUyhvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9DTEFTUykpCisK
K3R5cGVkZWYgc3RydWN0IF9KU0NDbGFzcyBKU0NDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0ND
bGFzc0NsYXNzIEpTQ0NsYXNzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpT
Q0NvbnRleHQ7CisKK0pTQ19BUEkgR1R5cGUKK2pzY19jbGFzc19nZXRfdHlwZSAgICAgICAgKHZv
aWQpOworCitKU0NfQVBJIGNvbnN0IGNoYXIgKgoranNjX2NsYXNzX2dldF9uYW1lICAgICAgICAo
SlNDQ2xhc3MgICAgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSBKU0NDbGFzcyAqCitqc2NfY2xh
c3NfZ2V0X3BhcmVudCAgICAgIChKU0NDbGFzcyAgICAgICpqc2NfY2xhc3MpOworCitKU0NfQVBJ
IEpTQ1ZhbHVlICoKK2pzY19jbGFzc19hZGRfY29uc3RydWN0b3IgKEpTQ0NsYXNzICAgICAgKmpz
Y19jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FsbGJhY2sgICAgICBjYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIHVzZXJfZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgcmV0dXJuX3R5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAgICAgICBuX3BhcmFtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC4uLik7CisKK0pTQ19BUEkgdm9pZAoranNjX2NsYXNzX2FkZF9t
ZXRob2QgICAgICAoSlNDQ2xhc3MgICAgICAqanNjX2NsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDYWxsYmFjayAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgICAgICAgdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ry
b3lOb3RpZnkgZGVzdHJveV9ub3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlw
ZSAgICAgICAgICByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkICAgICAgIG5fcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKwor
SlNDX0FQSSB2b2lkCitqc2NfY2xhc3NfYWRkX3Byb3BlcnR5ICAgIChKU0NDbGFzcyAgICAgICpq
c2NfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgcHJvcGVydHlfdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgIGdldHRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWxsYmFjayAgICAgIHNldHRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5KTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIEpTQ0NsYXNzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFzc1ByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvZ2xpYi9KU0NDbGFzc1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMmYzNjQ0ZDRkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3NQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJKU0NDbGFzcy5oIgorI2luY2x1ZGUgIkpTQ0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQ
dHIuaD4KKworR1JlZlB0cjxKU0NDbGFzcz4ganNjQ2xhc3NDcmVhdGUoSlNDQ29udGV4dCosIGNv
bnN0IGNoYXIqLCBKU0NDbGFzcyosIEdEZXN0cm95Tm90aWZ5KTsKK0pTQ2xhc3NSZWYganNjQ2xh
c3NHZXRKU0NsYXNzKEpTQ0NsYXNzKik7CitKU0M6OkpTT2JqZWN0KiBqc2NDbGFzc0dldE9yQ3Jl
YXRlSlNXcmFwcGVyKEpTQ0NsYXNzKiwgZ3BvaW50ZXIpOwordm9pZCBqc2NDbGFzc0ludmFsaWRh
dGUoSlNDQ2xhc3MqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NDb250ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250
ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWY4NDUwNjcz
ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5jcHAKQEAgLTAsMCArMSw3NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHQuaCIK
KworI2luY2x1ZGUgIkpTQ0NsYXNzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0NvbnRleHRQcml2
YXRlLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NXcmFwcGVyTWFwLmgiCisjaW5jbHVk
ZSAiSlNSZXRhaW5QdHIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworLyoqCisgKiBTRUNUSU9OOiBKU0NDb250ZXh0
CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQKKyAq
IEB0aXRsZTogSlNDQ29udGV4dAorICoKKyAqIEpTQ0NvbnRleHQgcmVwcmVzZW50cyBhIEphdmFT
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQsIHdoZXJlIGFsbCBvcGVyYXRpb25zCisgKiB0YWtlIHBs
YWNlIGFuZCB3aGVyZSB0aGUgdmFsdWVzIHdpbGwgYmUgYXNzb2NpYXRlZC4KKyAqCisgKiBXaGVu
IGEgbmV3IGNvbnRleHQgaXMgY3JlYXRlZCwgYSBnbG9iYWwgb2JqZWN0IGlzIGFsbG9jYXRlZCBh
bmQgdGhlIGJ1aWx0LWluIEphdmFTY3JpcHQKKyAqIG9iamVjdHMgKE9iamVjdCwgRnVuY3Rpb24s
IFN0cmluZywgQXJyYXkpIGFyZSBwb3B1bGF0ZWQuIFlvdSBjYW4gZXhlY3V0ZSBKYXZhU2NyaXB0
IGluCisgKiB0aGUgY29udGV4dCBieSB1c2luZyBqc2NfY29udGV4dF9ldmFsdWF0ZSgpIG9yIGpz
Y19jb250ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaSgpLgorICogSXQncyBhbHNvIHBvc3Np
YmxlIHRvIHJlZ2lzdGVyIGN1c3RvbSBvYmplY3RzIGluIHRoZSBjb250ZXh0IHdpdGgganNjX2Nv
bnRleHRfcmVnaXN0ZXJfY2xhc3MoKS4KKyAqLworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAg
ICBQUk9QX1ZJUlRVQUxfTUFDSElORSwKK307CisKK3N0cnVjdCBFeGNlcHRpb25IYW5kbGVyIHsK
KyAgICBFeGNlcHRpb25IYW5kbGVyKEpTQ0V4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwgdm9pZCog
dXNlckRhdGEgPSBudWxscHRyLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5RnVuY3Rpb24g
PSBudWxscHRyKQorICAgICAgICA6IGhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgLCB1c2VyRGF0
YSh1c2VyRGF0YSkKKyAgICAgICAgLCBkZXN0cm95Tm90aWZ5RnVuY3Rpb24oZGVzdHJveU5vdGlm
eUZ1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICB+RXhjZXB0aW9uSGFuZGxlcigpCisgICAg
eworICAgICAgICBpZiAoZGVzdHJveU5vdGlmeUZ1bmN0aW9uKQorICAgICAgICAgICAgZGVzdHJv
eU5vdGlmeUZ1bmN0aW9uKHVzZXJEYXRhKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25IYW5kbGVy
KEV4Y2VwdGlvbkhhbmRsZXImJiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6c3dhcChoYW5k
bGVyLCBvdGhlci5oYW5kbGVyKTsKKyAgICAgICAgc3RkOjpzd2FwKHVzZXJEYXRhLCBvdGhlci51
c2VyRGF0YSk7CisgICAgICAgIHN0ZDo6c3dhcChkZXN0cm95Tm90aWZ5RnVuY3Rpb24sIG90aGVy
LmRlc3Ryb3lOb3RpZnlGdW5jdGlvbik7CisgICAgfQorCisgICAgRXhjZXB0aW9uSGFuZGxlcihj
b25zdCBFeGNlcHRpb25IYW5kbGVyJikgPSBkZWxldGU7CisgICAgRXhjZXB0aW9uSGFuZGxlciYg
b3BlcmF0b3I9KGNvbnN0IEV4Y2VwdGlvbkhhbmRsZXImKSA9IGRlbGV0ZTsKKworICAgIEpTQ0V4
Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciB7IG51bGxwdHIgfTsKKyAgICB2b2lkKiB1c2VyRGF0YSB7
IG51bGxwdHIgfTsKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5RnVuY3Rpb24geyBu
dWxscHRyIH07Cit9OworCitzdHJ1Y3QgX0pTQ0NvbnRleHRQcml2YXRlIHsKKyAgICBHUmVmUHRy
PEpTQ1ZpcnR1YWxNYWNoaW5lPiB2bTsKKyAgICBKU1JldGFpblB0cjxKU0dsb2JhbENvbnRleHRS
ZWY+IGpzQ29udGV4dDsKKyAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uOworICAg
IFZlY3RvcjxFeGNlcHRpb25IYW5kbGVyPiBleGNlcHRpb25IYW5kbGVyczsKK307CisKK1dFQktJ
VF9ERUZJTkVfVFlQRShKU0NDb250ZXh0LCBqc2NfY29udGV4dCwgR19UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQganNjQ29udGV4dFNldFZpcnR1YWxNYWNoaW5lKEpTQ0NvbnRleHQqIGNvbnRl
eHQsIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+JiYgdm0pCit7CisgICAgSlNDQ29udGV4dFBy
aXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmICh2bSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcHJpdi0+dm0pOworICAgICAgICBwcml2LT52bSA9IFdURk1vdmUodm0pOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJpdi0+anNDb250ZXh0KTsKKyAgICAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXAtanNDb250ZXh0IiwgJlRocmVhZDo6
Y3VycmVudCgpKSk7CisgICAgICAgIGlmIChhdXRvKiBkYXRhID0gZ19vYmplY3RfZ2V0X2RhdGEo
R19PQkpFQ1QocHJpdi0+dm0uZ2V0KCkpLCBuYW1lLmdldCgpKSkgeworICAgICAgICAgICAgcHJp
di0+anNDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxDb250ZXh0UmVmPihkYXRhKTsKKyAg
ICAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHByaXYtPnZtLmdldCgpKSwgbmFt
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcHJpdi0+anND
b250ZXh0ID0gSlNSZXRhaW5QdHI8SlNHbG9iYWxDb250ZXh0UmVmPihBZG9wdCwgSlNHbG9iYWxD
b250ZXh0Q3JlYXRlSW5Hcm91cChqc2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHRHcm91cChwcml2
LT52bS5nZXQoKSksIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
U0dsb2JhbE9iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+d3JhcHBlck1hcCgpKQorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRXcmFw
cGVyTWFwKHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpXcmFwcGVyTWFwPihwcml2LT5qc0NvbnRleHQu
Z2V0KCkpKTsKKyAgICAgICAganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KHByaXYtPnZtLmdl
dCgpLCBjb250ZXh0KTsKKyAgICB9IGVsc2UgaWYgKHByaXYtPnZtKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHByaXYtPmpzQ29udGV4dCk7CisgICAgICAgIGpzY1ZpcnR1YWxNYWNoaW5lUmVt
b3ZlQ29udGV4dChwcml2LT52bS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIHByaXYtPmpzQ29u
dGV4dCA9IG51bGxwdHI7CisgICAgICAgIHByaXYtPnZtID0gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGpzY0NvbnRleHRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpT
Q0NvbnRleHRQcml2YXRlKiBwcml2ID0gSlNDX0NPTlRFWFQob2JqZWN0KS0+cHJpdjsKKworICAg
IHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQUk9QX1ZJUlRVQUxfTUFDSElORToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBwcml2LT52bS5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGpzY0NvbnRleHRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQp
IHsKKyAgICBjYXNlIFBST1BfVklSVFVBTF9NQUNISU5FOgorICAgICAgICBpZiAoZ3BvaW50ZXIg
dm0gPSBnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKQorICAgICAgICAgICAganNjQ29udGV4dFNl
dFZpcnR1YWxNYWNoaW5lKGNvbnRleHQsIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+KEpTQ19W
SVJUVUFMX01BQ0hJTkUodm0pKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGpzY0NvbnRleHRDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX2NvbnRleHRfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIEpTQ0NvbnRleHQqIGNvbnRleHQg
PSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGlmICghY29udGV4dC0+cHJpdi0+dm0pCisgICAg
ICAgIGpzY0NvbnRleHRTZXRWaXJ0dWFsTWFjaGluZShjb250ZXh0LCBhZG9wdEdSZWYoanNjX3Zp
cnR1YWxfbWFjaGluZV9uZXcoKSkpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFu
ZGxlcnMuYXBwZW5kKEV4Y2VwdGlvbkhhbmRsZXIoW10oSlNDQ29udGV4dCogY29udGV4dCwgSlND
RXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVyKSB7CisgICAgICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgIH0pKTsKK30KKworc3RhdGlj
IHZvaWQganNjQ29udGV4dERpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ0NvbnRl
eHQqIGNvbnRleHQgPSBKU0NfQ09OVEVYVChvYmplY3QpOworICAgIGpzY0NvbnRleHRTZXRWaXJ0
dWFsTWFjaGluZShjb250ZXh0LCBudWxscHRyKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKGpzY19j
b250ZXh0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
anNjX2NvbnRleHRfY2xhc3NfaW5pdChKU0NDb250ZXh0Q2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgb2JqQ2xh
c3MtPmdldF9wcm9wZXJ0eSA9IGpzY0NvbnRleHRHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
c2V0X3Byb3BlcnR5ID0ganNjQ29udGV4dFNldFByb3BlcnR5OworICAgIG9iakNsYXNzLT5jb25z
dHJ1Y3RlZCA9IGpzY0NvbnRleHRDb25zdHJ1Y3RlZDsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9
IGpzY0NvbnRleHREaXNwb3NlOworCisgICAgLyoqCisgICAgICogSlNDQ29udGV4dDp2aXJ0dWFs
LW1hY2hpbmU6CisgICAgICoKKyAgICAgKiBUaGUgI0pTQ1ZpcnR1YWxNYWNoaW5lIGluIHdoaWNo
IHRoZSBjb250ZXh0IHdhcyBjcmVhdGVkLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkob2JqQ2xhc3MsCisgICAgICAgIFBST1BfVklSVFVBTF9NQUNISU5FLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZpcnR1YWwtbWFjaGlu
ZSIsCisgICAgICAgICAgICAiSlNDVmlydHVhbE1hY2hpbmUiLAorICAgICAgICAgICAgIkpTQyBW
aXJ0dWFsIE1hY2hpbmUiLAorICAgICAgICAgICAgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitHUmVmUHRyPEpTQ0NvbnRleHQ+
IGpzY0NvbnRleHRHZXRPckNyZWF0ZShKU0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0KQorewor
ICAgIGF1dG8gdm0gPSBqc2NWaXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKHRvUmVmKCZ0b0pTKGpz
Q29udGV4dCktPnZtKCkpKTsKKyAgICBpZiAoR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0g
anNjVmlydHVhbE1hY2hpbmVHZXRDb250ZXh0KHZtLmdldCgpLCBqc0NvbnRleHQpKQorICAgICAg
ICByZXR1cm4gY29udGV4dDsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cmR1cF9w
cmludGYoIiVwLWpzQ29udGV4dCIsICZUaHJlYWQ6OmN1cnJlbnQoKSkpOworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHZtLmdldCgpKSwgbmFtZS5nZXQoKSwganNDb250ZXh0KTsKKyAg
ICByZXR1cm4gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZSh2
bS5nZXQoKSkpOworfQorCitKU0dsb2JhbENvbnRleHRSZWYganNjQ29udGV4dEdldEpTQ29udGV4
dChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VSVChKU0NfSVNfQ09OVEVUKGNvbnRl
eHQpKTsKKworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAg
ICByZXR1cm4gcHJpdi0+anNDb250ZXh0LmdldCgpOworfQorCitzdGF0aWMgSlNDOjpXcmFwcGVy
TWFwJiB3cmFwcGVyTWFwKEpTQ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgYXV0byogbWFwID0g
dG9KU0dsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkpLT53cmFwcGVy
TWFwKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKKyAgICByZXR1cm4gKm1hcDsKK30KKwor
R1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoSlNDQ29udGV4dCog
Y29udGV4dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIHJldHVybiB3cmFwcGVyTWFwKGNv
bnRleHQpLmdvYmplY3RXcmFwcGVyKGNvbnRleHQsIGpzVmFsdWUpOworfQorCit2b2lkIGpzY0Nv
bnRleHRWYWx1ZURlc3Ryb3llZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzVmFs
dWUpCit7CisgICAgd3JhcHBlck1hcChjb250ZXh0KS51bndyYXAoanNWYWx1ZSk7Cit9CisKK0pT
Qzo6SlNPYmplY3QqIGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoSlNDQ29udGV4dCogY29udGV4dCwg
Z3BvaW50ZXIgd3JhcHBlZE9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0
KS5qc1dyYXBwZXIod3JhcHBlZE9iamVjdCk7Cit9CisKK0pTQzo6SlNPYmplY3QqIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZUpTV3JhcHBlcihKU0NDb250ZXh0KiBjb250ZXh0LCBKU0NsYXNzUmVmIGpz
Q2xhc3MsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBncG9pbnRlciB3cmFwcGVkT2JqZWN0LCBHRGVz
dHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7CisgICAgaWYgKGF1dG8qIGpzV3JhcHBlciA9
IGpzY0NvbnRleHRHZXRKU1dyYXBwZXIoY29udGV4dCwgd3JhcHBlZE9iamVjdCkpCisgICAgICAg
IHJldHVybiBqc1dyYXBwZXI7CisKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0KS5jcmVh
dGVKU1dyYXBwcGVyKGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSwganNDbGFzcywgcHJv
dG90eXBlLCB3cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pOworfQorCitncG9pbnRlciBq
c2NDb250ZXh0V3JhcHBlZE9iamVjdChKU0NDb250ZXh0KiBjb250ZXh0LCBKU09iamVjdFJlZiBq
c09iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBlck1hcChjb250ZXh0KS53cmFwcGVkT2JqZWN0
KGNvbnRleHQtPnByaXYtPmpzQ29udGV4dC5nZXQoKSwganNPYmplY3QpOworfQorCitDYWxsYmFj
a0RhdGEganNjQ29udGV4dFB1c2hDYWxsYmFjayhKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVl
UmVmIGNhbGxlZVZhbHVlLCBKU1ZhbHVlUmVmIHRoaXNWYWx1ZSwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cykKK3sKKyAgICBUaHJlYWQmIHRocmVhZCA9
IFRocmVhZDo6Y3VycmVudCgpOworICAgIGF1dG8qIHByZXZpb3VzU3RhY2sgPSBzdGF0aWNfY2Fz
dDxDYWxsYmFja0RhdGEqPih0aHJlYWQubV9hcGlEYXRhKTsKKyAgICBDYWxsYmFja0RhdGEgZGF0
YSA9IHsgY29udGV4dCwgV1RGTW92ZShjb250ZXh0LT5wcml2LT5leGNlcHRpb24pLCBjYWxsZWVW
YWx1ZSwgdGhpc1ZhbHVlLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIHByZXZpb3VzU3RhY2sg
fTsKKyAgICB0aHJlYWQubV9hcGlEYXRhID0gJmRhdGE7CisgICAgcmV0dXJuIGRhdGE7Cit9CisK
K3ZvaWQganNjQ29udGV4dFBvcENhbGxiYWNrKEpTQ0NvbnRleHQqIGNvbnRleHQsIENhbGxiYWNr
RGF0YSYmIGRhdGEpCit7CisgICAgVGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsK
KyAgICBjb250ZXh0LT5wcml2LT5leGNlcHRpb24gPSBXVEZNb3ZlKGRhdGEucHJlc2VydmVkRXhj
ZXB0aW9uKTsKKyAgICB0aHJlYWQubV9hcGlEYXRhID0gZGF0YS5uZXh0OworfQorCitKU1ZhbHVl
UmVmIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1B0ckFy
cmF5KiBnQXJyYXksIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0NDb250ZXh0UHJp
dmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgYXV0byoganNBcnJheSA9IEpTT2JqZWN0
TWFrZUFycmF5KHByaXYtPmpzQ29udGV4dC5nZXQoKSwgMCwgbnVsbHB0ciwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KHByaXYtPmpzQ29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAoIWdBcnJheSkKKyAgICAgICAgcmV0
dXJuIGpzQXJyYXk7CisKKyAgICBhdXRvKiBqc0FycmF5T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNBcnJheSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoKmV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ0FycmF5LT5sZW47
ICsraSkgeworICAgICAgICBncG9pbnRlciBpdGVtID0gZ19wdHJfYXJyYXlfaW5kZXgoZ0FycmF5
LCBpKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBpLCBKU1ZhbHVl
TWFrZU51bGwocHJpdi0+anNDb250ZXh0LmdldCgpKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxz
ZSBpZiAoSlNDX0lTX1ZBTFVFKGl0ZW0pKQorICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2JqZWN0LCBpLCBqc2NWYWx1
ZUdldEpTVmFsdWUoSlNDX1ZBTFVFKGl0ZW0pKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMo
cHJpdi0+anNDb250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygiaW52YWxpZCBpdGVtIHR5cGUgaW4g
R1B0ckFycmF5IikpKTsKKworICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgIH0K
KworICAgIHJldHVybiBqc0FycmF5OworfQorCitzdGF0aWMgR1JlZlB0cjxHUHRyQXJyYXk+IGpz
Y0NvbnRleHRKU0FycmF5VG9HQXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBq
c0FycmF5LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNDQ29udGV4dFByaXZhdGUq
IHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmIChKU1ZhbHVlSXNOdWxsKHByaXYtPmpzQ29u
dGV4dC5nZXQoKSwganNBcnJheSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYg
KCFKU1ZhbHVlSXNBcnJheShwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXkpKSB7CisgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpz
Q29udGV4dC5nZXQoKSksIG1ha2VTdHJpbmcoImludmFsaWQganMgdHlwZSBmb3IgR1B0ckFycmF5
IikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byoganNBcnJh
eU9iamVjdCA9IEpTVmFsdWVUb09iamVjdChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXks
IGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFN0cmluZyhBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvKiBqc0xlbmd0
aCA9IEpTT2JqZWN0R2V0UHJvcGVydHkocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc0FycmF5T2Jq
ZWN0LCBsZW5ndGhTdHJpbmcuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgaWYgKCpleGNlcHRpb24p
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBsZW5ndGggPSBKU0M6OnRvVUlu
dDMyKEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzTGVuZ3RoLCBleGNl
cHRpb24pKTsKKyAgICBpZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBHUmVmUHRyPEdQdHJBcnJheT4gZ0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
d193aXRoX2ZyZWVfZnVuYyhnX29iamVjdF91bnJlZikpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBqc0l0ZW0gPSBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzQXJyYXlPYmplY3QsIGks
IGV4Y2VwdGlvbik7CisgICAgICAgIGlmICgqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNJdGVt
ID8ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNJdGVtKS5sZWFrUmVmKCkg
OiBudWxscHRyKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ0FycmF5OworfQorCitKU1ZhbHVlUmVm
IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2
YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKworICAgIHN3aXRjaCAoZ190eXBlX2Z1bmRhbWVu
dGFsKEdfVkFMVUVfVFlQRSh2YWx1ZSkpKSB7CisgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9DSEFSOgorICAgIGNh
c2UgR19UWVBFX0lOVDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpz
Q29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9pbnQpOworICAgIGNhc2UgR19UWVBFX0VO
VU06CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0
KCksIGdfdmFsdWVfZ2V0X2VudW0odmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9GTEFHUzoKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgZ192
YWx1ZV9nZXRfZmxhZ3ModmFsdWUpKTsKKyAgICBjYXNlIEdfVFlQRV9VQ0hBUjoKKyAgICBjYXNl
IEdfVFlQRV9VSU5UOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anND
b250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3VpbnQpOworICAgIGNhc2UgR19UWVBFX0ZM
T0FUOgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0Lmdl
dCgpLCB2YWx1ZS0+ZGF0YVswXS52X2Zsb2F0KTsKKyAgICBjYXNlIEdfVFlQRV9ET1VCTEU6Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIHZh
bHVlLT5kYXRhWzBdLnZfZG91YmxlKTsKKyAgICBjYXNlIEdfVFlQRV9MT05HOgorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0
YVswXS52X2xvbmcpOworICAgIGNhc2UgR19UWVBFX1VMT05HOgorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VOdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3Vs
b25nKTsKKyAgICBjYXNlIEdfVFlQRV9JTlQ2NDoKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
TnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwgdmFsdWUtPmRhdGFbMF0udl9pbnQ2NCk7Cisg
ICAgY2FzZSBHX1RZUEVfVUlOVDY0OgorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
cHJpdi0+anNDb250ZXh0LmdldCgpLCB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ2NCk7CisgICAgY2Fz
ZSBHX1RZUEVfU1RSSU5HOgorICAgICAgICBpZiAoY29uc3QgY2hhciogc3RyaW5nVmFsdWUgPSBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSB7CisgICAgICAgICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
cmluZ1ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcocHJpdi0+
anNDb250ZXh0LmdldCgpLCBqc1N0cmluZy5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVsbChwcml2LT5qc0NvbnRleHQuZ2V0KCkpOworICAgIGNhc2UgR19U
WVBFX1BPSU5URVI6CisgICAgY2FzZSBHX1RZUEVfT0JKRUNUOgorICAgIGNhc2UgR19UWVBFX0JP
WEVEOgorICAgICAgICBpZiAoYXV0byogcHRyID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKSB7
CisgICAgICAgICAgICBpZiAoYXV0byoganNXcmFwcGVyID0ganNjQ29udGV4dEdldEpTV3JhcHBl
cihjb250ZXh0LCBwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0b1JlZihqc1dyYXBwZXIp
OworCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgSlND
X1RZUEVfVkFMVUUpKQorICAgICAgICAgICAgICAgIHJldHVybiBqc2NWYWx1ZUdldEpTVmFsdWUo
SlNDX1ZBTFVFKHB0cikpOworCisgICAgICAgICAgICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9U
WVBFKHZhbHVlKSwgSlNDX1RZUEVfRVhDRVBUSU9OKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
anNjRXhjZXB0aW9uR2V0SlNWYWx1ZShKU0NfRVhDRVBUSU9OKHB0cikpOworCisgICAgICAgICAg
ICBpZiAoZ190eXBlX2lzX2EoR19WQUxVRV9UWVBFKHZhbHVlKSwgR19UWVBFX1BUUl9BUlJBWSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoY29udGV4
dCwgc3RhdGljX2Nhc3Q8R1B0ckFycmF5Kj4ocHRyKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdWxsKHByaXYtPmpzQ29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfUEFSQU06CisgICAgY2Fz
ZSBHX1RZUEVfSU5URVJGQUNFOgorICAgIGNhc2UgR19UWVBFX1ZBUklBTlQ6CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6
Y3JlYXRlVHlwZUVycm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgbWFrZVN0cmluZygi
dW5zdXBwb3J0ZWQgdHlwZSAiLCBnX3R5cGVfbmFtZShHX1ZBTFVFX1RZUEUodmFsdWUpKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQocHJpdi0+anNDb250ZXh0LmdldCgpKTsK
K30KKwordm9pZCBqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKEpTQ0NvbnRleHQqIGNvbnRleHQs
IEpTVmFsdWVSZWYganNWYWx1ZSwgR1R5cGUgdHlwZSwgR1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIEpTQ0NvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+
cHJpdjsKKyAgICBnX3ZhbHVlX2luaXQodmFsdWUsIHR5cGUpOworCisgICAgYXV0byBmdW5kYW1l
bnRhbFR5cGUgPSBnX3R5cGVfZnVuZGFtZW50YWwoR19WQUxVRV9UWVBFKHZhbHVlKSk7CisgICAg
c3dpdGNoIChmdW5kYW1lbnRhbFR5cGUpIHsKKyAgICBjYXNlIEdfVFlQRV9JTlQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgSlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5n
ZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19U
WVBFX0ZMT0FUOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgSlNWYWx1ZVRvTnVt
YmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR19UWVBFX0RPVUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91
YmxlKHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgSlNWYWx1ZVRvQm9vbGVhbihwcml2
LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1RZUEVfU1RSSU5HOgorICAgICAgICBpZiAoIUpTVmFsdWVJc051bGwocHJpdi0+anNDb250ZXh0
LmdldCgpLCBqc1ZhbHVlKSkgeworICAgICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGpzU3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KHByaXYtPmpzQ29udGV4dC5nZXQo
KSwganNWYWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICBpZiAoKmV4Y2VwdGlvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzaXplX3QgbWF4U2l6ZSA9IEpTU3Ry
aW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShqc1N0cmluZy5nZXQoKSk7CisgICAgICAgICAg
ICBhdXRvKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MobWF4U2l6ZSkpOwor
ICAgICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZy5nZXQoKSwgc3RyaW5n
LCBtYXhTaXplKTsKKyAgICAgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHN0cmlu
Zyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVl
LCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfQ0hBUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfc2NoYXIodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRl
eHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdfVFlQRV9VQ0hBUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWNoYXIodmFsdWUsIEpTVmFsdWVU
b051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VSU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50KHZhbHVlLCBKU1ZhbHVlVG9OdW1iZXIocHJpdi0+anNDb250ZXh0LmdldCgpLCBqc1ZhbHVl
LCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfUE9JTlRFUjoK
KyAgICBjYXNlIEdfVFlQRV9PQkpFQ1Q6CisgICAgY2FzZSBHX1RZUEVfQk9YRUQ6IHsKKyAgICAg
ICAgZ3BvaW50ZXIgd3JhcHBlZE9iamVjdCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFKU1Zh
bHVlSXNOdWxsKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSkpIHsKKyAgICAgICAgICAg
IGF1dG8ganNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QocHJpdi0+anNDb250ZXh0LmdldCgpLCBq
c1ZhbHVlLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKCpleGNlcHRpb24pCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB3cmFwcGVkT2JqZWN0ID0ganNjQ29udGV4
dFdyYXBwZWRPYmplY3QoY29udGV4dCwganNPYmplY3QpOworICAgICAgICAgICAgaWYgKCF3cmFw
cGVkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQ
RSh2YWx1ZSksIEpTQ19UWVBFX1ZBTFVFKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGpz
Y1ZhbHVlID0ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwganNWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwganNjVmFsdWUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGdfdHlwZV9pc19hKEdfVkFMVUVfVFlQRSh2YWx1ZSksIEpTQ19U
WVBFX0VYQ0VQVElPTikpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBleGNlcHRpb24gPSBq
c2NFeGNlcHRpb25DcmVhdGUoY29udGV4dCwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgZXhjZXB0aW9uLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChnX3R5cGVfaXNfYShHX1ZBTFVFX1RZUEUodmFsdWUpLCBHX1RZUEVfUFRSX0FSUkFZKSkgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGdBcnJheSA9IGpzY0NvbnRleHRKU0FycmF5VG9HQXJy
YXkoY29udGV4dCwganNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCEqZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgZ192YWx1ZV90YWtlX2JveGVk
KHZhbHVlLCBnQXJyYXkubGVha1JlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihK
U0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKHByaXYtPmpzQ29udGV4dC5nZXQoKSksIEFTQ0lJTGl0
ZXJhbCgiaW52YWxpZCBwb2ludGVyIHR5cGUiKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuZGFtZW50YWxUeXBlID09
IEdfVFlQRV9QT0lOVEVSKQorICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwg
d3JhcHBlZE9iamVjdCk7CisgICAgICAgIGVsc2UgaWYgKGZ1bmRhbWVudGFsVHlwZSA9PSBHX1RZ
UEVfQk9YRUQpCisgICAgICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd3JhcHBlZE9i
amVjdCk7CisgICAgICAgIGVsc2UgaWYgKEdfSVNfT0JKRUNUKHdyYXBwZWRPYmplY3QpKQorICAg
ICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3cmFwcGVkT2JqZWN0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMocHJpdi0+anNDb250ZXh0LmdldCgpKSwgQVNDSUlMaXRlcmFsKCJ3cmFwcGVkIG9i
amVjdCBpcyBub3QgYSBHT2JqZWN0IikpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgR19UWVBFX0xPTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIEpTVmFsdWVU
b051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9VTE9ORzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFs
dWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9JTlQ2NDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfaW50NjQodmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5q
c0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdfVFlQRV9VSU5UNjQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwg
SlNWYWx1ZVRvTnVtYmVyKHByaXYtPmpzQ29udGV4dC5nZXQoKSwganNWYWx1ZSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX0VOVU06CisgICAgICAgIGdfdmFs
dWVfc2V0X2VudW0odmFsdWUsIEpTVmFsdWVUb051bWJlcihwcml2LT5qc0NvbnRleHQuZ2V0KCks
IGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfVFlQRV9G
TEFHUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxhZ3ModmFsdWUsIEpTVmFsdWVUb051bWJlcihw
cml2LT5qc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdfVFlQRV9QQVJBTToKKyAgICBjYXNlIEdfVFlQRV9JTlRFUkZBQ0U6Cisg
ICAgY2FzZSBHX1RZUEVfVkFSSUFOVDoKKyAgICBkZWZhdWx0OgorICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhwcml2LT5qc0NvbnRleHQuZ2V0KCkp
LCBtYWtlU3RyaW5nKCJ1bnN1cHBvcnRlZCB0eXBlICIsIGdfdHlwZV9uYW1lKEdfVkFMVUVfVFlQ
RSh2YWx1ZSkpKSkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICoganNjX2Nv
bnRleHRfbmV3OgorICoKKyAqIENyZWF0ZSBhIG5ldyAjSlNDQ29udGV4dC4gVGhlIGNvbnRleHQg
aXMgY3JlYXRlZCBpbiBhIG5ldyAjSlNDVmlydHVhbE1hY2hpbmUuCisgKiBVc2UganNjX2NvbnRl
eHRfbmV3X3dpdGhfdmlydHVhbF9tYWNoaW5lKCkgdG8gY3JlYXRlIGEgbmV3ICNKU0NDb250ZXh0
IGluIGFuCisgKiBleGlzdGluZyAjSlNDVmlydHVhbE1hY2hpbmUuCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjSlNDQ29udGV4dC4KKyAqLworSlND
Q29udGV4dCoganNjX2NvbnRleHRfbmV3KCkKK3sKKyAgICByZXR1cm4gSlNDX0NPTlRFWFQoZ19v
YmplY3RfbmV3KEpTQ19UWVBFX0NPTlRFWFQsIG51bGxwdHIpKTsKK30KKworLyoqCisgKiBqc2Nf
Y29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmU6CisgKiBAdm06IGEgI0pTQ1ZpcnR1YWxN
YWNoaW5lCisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NDb250ZXh0IGluIEB2aXJ0dWFsX21hY2hp
bmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAj
SlNDQ29udGV4dC4KKyAqLworSlNDQ29udGV4dCoganNjX2NvbnRleHRfbmV3X3dpdGhfdmlydHVh
bF9tYWNoaW5lKEpTQ1ZpcnR1YWxNYWNoaW5lKiB2bSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChKU0NfSVNfVklSVFVBTF9NQUNISU5FKHZtKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIEpT
Q19DT05URVhUKGdfb2JqZWN0X25ldyhKU0NfVFlQRV9DT05URVhULCAidmlydHVhbC1tYWNoaW5l
Iiwgdm0sIG51bGxwdHIpKTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9nZXRfdmlydHVhbF9t
YWNoaW5lOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqCisgKiBHZXQgdGhlICNKU0NW
aXJ0dWFsTWFjaGluZSB3aGVyZSBAY29udGV4dCB3YXMgY3JlYXRlZC4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjSlNDVmlydHVhbE1hY2hpbmUgd2hlcmUgdGhlICNKU0ND
b250ZXh0IHdhcyBjcmVhdGVkLgorICovCitKU0NWaXJ0dWFsTWFjaGluZSoganNjX2NvbnRleHRf
Z2V0X3ZpcnR1YWxfbWFjaGluZShKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJl
dHVybiBjb250ZXh0LT5wcml2LT52bS5nZXQoKTsKK30KKworLyoqCisgKiBqc2NfY29udGV4dF9n
ZXRfZXhjZXB0aW9uOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqCisgKiBHZXQgdGhl
IGxhc3QgdW5oYW5kbGVkIGV4Y2VwdGlvbiB0aHJvd24gaW4gQGNvbnRleHQgYnkgQVBJIGZ1bmN0
aW9ucyBjYWxscy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTog
YSAjSlNDRXhjZXB0aW9uIG9yICVOVUxMIGlmIHRoZXJlIGlzbid0IGFueQorICogICAgdW5oYW5k
bGVkIGV4Y2VwdGlvbiBpbiB0aGUgI0pTQ0NvbnRleHQuCisgKi8KK0pTQ0V4Y2VwdGlvbioganNj
X2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihKU0NDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAg
IHJldHVybiBjb250ZXh0LT5wcml2LT5leGNlcHRpb24uZ2V0KCk7Cit9CisKKy8qKgorICoganNj
X2NvbnRleHRfdGhyb3c6CisgKiBAY29udGV4dDogYSAjSlNDQ29udGV4dAorICogQGVycm9yX21l
c3NhZ2U6IGFuIGVycm9yIG1lc3NhZ2UKKyAqCisgKiBUaHJvdyBhbiBleGNlcHRpb24gdG8gQGNv
bnRleHQgdXNpbmcgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2UuIFRoZSBjcmVhdGVkICNKU0NFeGNl
cHRpb24KKyAqIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9u
KCkuCisgKi8KK3ZvaWQganNjX2NvbnRleHRfdGhyb3coSlNDQ29udGV4dCogY29udGV4dCwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX0NP
TlRFWFQoY29udGV4dCkpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uID0gYWRvcHRH
UmVmKGpzY19leGNlcHRpb25fbmV3KGNvbnRleHQsIGVycm9yTWVzc2FnZSkpOworfQorCisvKioK
KyAqIGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbjoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250
ZXh0CisgKiBAZXhjZXB0aW9uOiBhICNKU0NFeGNlcHRpb24KKyAqCisgKiBUaHJvdyBAZXhjZXB0
aW9uIHRvIEBjb250ZXh0LgorICovCit2b2lkIGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbihK
U0NDb250ZXh0KiBjb250ZXh0LCBKU0NFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSk7CisKKyAgICBjb250ZXh0LT5wcml2LT5l
eGNlcHRpb24gPSBleGNlcHRpb247Cit9CisKKy8qKgorICogSlNDRXhjZXB0aW9uSGFuZGxlcjoK
KyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CisgKiBAZXhjZXB0aW9uOiBhICNKU0NFeGNlcHRp
b24KKyAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YQorICoKKyAqIEZ1bmN0aW9uIHVzZWQgdG8gaGFu
ZGxlIEphdmFTY3JpcHQgZXhjZXB0aW9ucyBpbiBhICNKU0NDb250ZXh0LgorICovCisKKy8qKgor
ICoganNjX2NvbnRleHRfcHVzaF9leGNlcHRpb25faGFuZGxlcjoKKyAqIEBjb250ZXh0OiBhICNK
U0NDb250ZXh0CisgKiBAaGFuZGxlcjogYSAjSlNDRXhjZXB0aW9uSGFuZGxlcgorICogQHVzZXJf
ZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBAaGFuZGxlcgorICogQGRlc3Ry
b3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBAdXNlcl9kYXRhCisg
KgorICogUHVzaCBhbiBleGNlcHRpb24gaGFuZGxlciBpbiBAY29udGV4dC4gV2hlbmV2ZXIgYSBK
YXZhU2NyaXB0IGV4Y2VwdGlvbiBoYXBwZW5zIGluCisgKiB0aGUgI0pTQ0NvbnRleHQsIHRoZSBn
aXZlbiBAaGFuZGxlciB3aWxsIGJlIGNhbGxlZC4gVGhlIGRlZmF1bHQgI0pTQ0V4Y2VwdGlvbkhh
bmRsZXIKKyAqIHNpbXBseSBjYWxscyBqc2NfY29udGV4dF90aHJvd19leGNlcHRpb24oKSB0byB0
aHJvdyB0aGUgZXhjZXB0aW9uIHRvIHRoZSAjSlNDQ29udGV4dC4KKyAqIElmIHlvdSBkb24ndCB3
YW50IHRvIGNhdGNoIHRoZSBleGNlcHRpb24sIGJ1dCBvbmx5IGdldCBub3RpZmllZCBhYm91dCBp
dCwgY2FsbAorICoganNjX2NvbnRleHRfdGhyb3dfZXhjZXB0aW9uKCkgaW4gQGhhbmRsZXIgbGlr
ZSB0aGUgZGVmYXVsdCBvbmUgZG9lcy4KKyAqIFRoZSBsYXN0IGV4Y2VwdGlvbiBoYW5kbGVyIHB1
c2hlZCBpcyB0aGUgb25seSBvbmUgdXNlZCBieSB0aGUgI0pTQ0NvbnRleHQsIHVzZQorICoganNj
X2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVyKCkgdG8gcmVtb3ZlIGl0IGFuZCBzZXQgdGhl
IHByZXZpb3VzIG9uZS4gV2hlbiBAaGFuZGxlcgorICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250
ZXh0LCBAZGVzdHJveV9ub3RpZnkgaSBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhIGFzIHBhcmFtZXRl
ci4KKyAqLwordm9pZCBqc2NfY29udGV4dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKEpTQ0NvbnRl
eHQqIGNvbnRleHQsIEpTQ0V4Y2VwdGlvbkhhbmRsZXIgaGFuZGxlciwgZ3BvaW50ZXIgdXNlckRh
dGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lOb3RpZnkpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChoYW5kbGVy
KTsKKworICAgIGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCh7IGhhbmRs
ZXIsIHVzZXJEYXRhLCBkZXN0cm95Tm90aWZ5IH0pOworfQorCisvKioKKyAqIGpzY19jb250ZXh0
X3BvcF9leGNlcHRpb25faGFuZGxlcjoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CisgKgor
ICogUmVtb3ZlIHRoZSBsYXN0ICNKU0NFeGNlcHRpb25IYW5kbGVyIHByZXZpb3VzbHkgcHVzaGVk
IHRvIEBjb250ZXh0IHdpdGgKKyAqIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIo
KS4KKyAqLwordm9pZCBqc2NfY29udGV4dF9wb3BfZXhjZXB0aW9uX2hhbmRsZXIoSlNDQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRl
eHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnRleHQtPnByaXYtPmV4Y2VwdGlvbkhhbmRs
ZXJzLnNpemUoKSA+IDEpOworCisgICAgY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMu
cmVtb3ZlTGFzdCgpOworfQorCitib29sIGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzRXhjZXB0aW9uKQoreworICAgIGlm
ICghanNFeGNlcHRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZXhjZXB0
aW9uID0ganNjRXhjZXB0aW9uQ3JlYXRlKGNvbnRleHQsIGpzRXhjZXB0aW9uKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghY29udGV4dC0+cHJpdi0+ZXhjZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKTsK
KyAgICBjb25zdCBhdXRvJiBleGNlcHRpb25IYW5kbGVyID0gY29udGV4dC0+cHJpdi0+ZXhjZXB0
aW9uSGFuZGxlcnMubGFzdCgpOworICAgIGV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlcihjb250ZXh0
LCBleGNlcHRpb24uZ2V0KCksIGV4Y2VwdGlvbkhhbmRsZXIudXNlckRhdGEpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZ2V0X2N1cnJlbnQ6CisgKgorICog
R2V0IHRoZSAjSlNDQ29udGV4dCB0aGF0IGlzIGN1cnJlbnRseSBleGVjdXRpbmcgYSBmdW5jdGlv
bi4gVGhpcyBzaG91bGQgb25seSBiZQorICogY2FsbGVkIHdpdGhpbiBhIGZ1bmN0aW9uIG9yIG1l
dGhvZCBjYWxsYmFjaywgb3RoZXJ3aXNlICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChudWxsYWJsZSk6IHRoZSAjSlNDQ29udGV4dCB0aGF0
IGlzIGN1cnJlbnRseSBleGVjdXRpbmcuCisgKi8KK0pTQ0NvbnRleHQqIGpzY19jb250ZXh0X2dl
dF9jdXJyZW50KCkKK3sKKyAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tEYXRh
Kj4oVGhyZWFkOjpjdXJyZW50KCkubV9hcGlEYXRhKTsKKyAgICByZXR1cm4gZGF0YSA/IGRhdGEt
PmNvbnRleHQuZ2V0KCkgOiBudWxscHRyOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X2V2YWx1
YXRlOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBjb2RlOiBhIEphdmFTY3JpcHQg
c2NyaXB0IHRvIGV2YWx1YXRlCisgKgorICogRXZhbHVhdGUgQGNvZGUgaW4gQGNvbnRleHQuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZSByZXByZXNlbnRpbmcg
dGhlIGxhc3QgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQuCisgKi8KK0pTQ1ZhbHVlKiBq
c2NfY29udGV4dF9ldmFsdWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBjb2Rl
KQoreworICAgIHJldHVybiBqc2NfY29udGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91cmkoY29u
dGV4dCwgY29kZSwgbnVsbHB0cik7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZXZhbHVhdGVf
d2l0aF9zb3VyY2VfdXJpOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBjb2RlOiBh
IEphdmFTY3JpcHQgc2NyaXB0IHRvIGV2YWx1YXRlCisgKiBAdXJpOiB0aGUgc291cmNlIFVSSQor
ICoKKyAqIEV2YWx1YXRlIEBjb2RlIGluIEBjb250ZXh0IHVzaW5nIEB1cmkgYXMgdGhlIHNvdXJj
ZSBVUkkuIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcworICoganNjX2NvbnRleHRfZXZhbHVh
dGUoKSBidXQgQHVyaSB3aWxsIGJlIHNob3duIGluIGV4Y2VwdGlvbnMuIFRoZSBzb3VyY2UgQHVy
aSBkb2Vzbid0CisgKiBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBzY3JpcHQuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGxh
c3QgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfY29u
dGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91cmkoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogY29kZSwgY29uc3QgY2hhciogdXJpKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChjb2RlLCBudWxscHRyKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0SlMoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvZGUpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gc291cmNlVVJJID0gdXJpID8gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
dXJpKSkgOiBudWxscHRyOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlw
dChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCksIHNjcmlwdEpTLmdldCgpLCBudWxscHRy
LCBzb3VyY2VVUkkuZ2V0KCksIDEsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJu
IGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgcmV0dXJuIGpzY0NvbnRl
eHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIHJlc3VsdCkubGVha1JlZigpOworfQorCisvKioK
KyAqIGpzY19jb250ZXh0X3NldF92YWx1ZToKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0Cisg
KiBAbmFtZTogdGhlIHZhbHVlIG5hbWUKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisgKiBT
ZXQgYSBwcm9wZXJ0eSBvZiBAY29udGV4dCBnbG9iYWwgb2JqZWN0IHdpdGggQG5hbWUgYW5kIEB2
YWx1ZS4KKyAqLwordm9pZCBqc2NfY29udGV4dF9zZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogbmFtZSwgSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFt
ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpKTsKKworICAgIGF1
dG8gY29udGV4dE9iamVjdCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIEpT
Q29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0NvbnRleHQuZ2V0KCkpKTsK
KyAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShjb250ZXh0T2JqZWN0LmdldCgpLCBu
YW1lLCB2YWx1ZSk7Cit9CisKKy8qKgorICoganNjX2NvbnRleHRfZ2V0X3ZhbHVlOgorICogQGNv
bnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBuYW1lOiB0aGUgdmFsdWUgbmFtZQorICoKKyAqIEdl
dCBhIHByb3BlcnR5IG9mIEBjb250ZXh0IGdsb2JhbCBvYmplY3Qgd2l0aCBAbmFtZS4KKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlCisgKi8KK0pTQ1ZhbHVlKiBq
c2NfY29udGV4dF9nZXRfdmFsdWUoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwg
bnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAg
ICBhdXRvIGNvbnRleHRPYmplY3QgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0
LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dC0+cHJpdi0+anNDb250ZXh0LmdldCgp
KSk7CisgICAgcmV0dXJuIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KGNvbnRleHRPYmpl
Y3QuZ2V0KCksIG5hbWUpOworfQorCisvKioKKyAqIGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNz
OgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqIEBuYW1lOiB0aGUgY2xhc3MgbmFtZQor
ICogQHBhcmVudF9jbGFzczogKG51bGxhYmxlKTogYSAjSlNDQ2xhc3MKKyAqIEBkZXN0cm95X25v
dGlmeTogKG51bGxhYmxlKTogYSBkZXN0cm95IG5vdGlmaWVyIGZvciBjbGFzcyBpbnN0YW5jZXMK
KyAqCisgKiBSZWdpc3RlciBhIGN1c3RvbSBjbGFzcyBpbiBAY29udGV4dCB1c2luZyB0aGUgZ2l2
ZW4gQG5hbWUuIElmIHRoZSBuZXcgY2xhc3MgaW5oZXJpdHMgZnJvbQorICogYW5vdGhlciAjSlND
Q2xhc3MsIHRoZSBwYXJlbnQgc2hvdWxkIGJlIHBhc3NlZCBhcyBAcGFyZW50X2NsYXNzLCBvdGhl
cndpc2UgJU5VTEwgc2hvdWxkIGJlCisgKiB1c2VkLiBXaGVuIGFuIGluc3RhbmNlIG9mIHRoZSAj
SlNDQ2xhc3MgaXMgY2xlYXJlZCBpbiB0aGUgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzCisg
KiBjYWxsZWQgd2l0aCB0aGUgaW5zdGFuY2UgYXMgcGFyYW1ldGVyLgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogYSAjSlNDQ2xhc3MKKyAqLworSlNDQ2xhc3MqIGpzY19jb250ZXh0
X3JlZ2lzdGVyX2NsYXNzKEpTQ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEpT
Q0NsYXNzKiBwYXJlbnRDbGFzcywgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveUZ1bmN0aW9uKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRy
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBudWxscHRyKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghcGFyZW50Q2xhc3MgfHwgSlNDX0lTX0NMQVNTKHBhcmVudENsYXNzKSwg
bnVsbHB0cik7CisKKyAgICBhdXRvIGpzY0NsYXNzID0ganNjQ2xhc3NDcmVhdGUoY29udGV4dCwg
bmFtZSwgcGFyZW50Q2xhc3MsIGRlc3Ryb3lGdW5jdGlvbik7CisgICAgd3JhcHBlck1hcChjb250
ZXh0KS5yZWdpc3RlckNsYXNzKGpzY0NsYXNzLmdldCgpKTsKKyAgICByZXR1cm4ganNjQ2xhc3Mu
Z2V0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY1YzY3YTFlZWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5o
CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZiAhZGVmaW5lZChfX0pTQ19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJ
T04pCisjZXJyb3IgIk9ubHkgPGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIEpTQ0NvbnRleHRfaAorI2RlZmluZSBKU0NDb250ZXh0X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8anNjL0pTQ0RlZmluZXMuaD4KKyNp
bmNsdWRlIDxqc2MvSlNDRXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8anNjL0pTQ0NsYXNzLmg+Cisj
aW5jbHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZpcnR1YWxNYWNoaW5l
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9DT05URVhUICAgICAgICAg
ICAgKGpzY19jb250ZXh0X2dldF90eXBlKCkpCisjZGVmaW5lIEpTQ19DT05URVhUKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX0NPTlRF
WFQsIEpTQ0NvbnRleHQpKQorI2RlZmluZSBKU0NfSVNfQ09OVEVYVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBKU0NfVFlQRV9DT05URVhUKSkKKyNkZWZp
bmUgSlNDX0NPTlRFWFRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgSlNDX1RZUEVfQ09OVEVYVCwgSlNDQ29udGV4dENsYXNzKSkKKyNkZWZpbmUgSlND
X0lTX0NPTlRFWFRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgSlNDX1RZUEVfQ09OVEVYVCkpCisjZGVmaW5lIEpTQ19DT05URVhUX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX0NPTlRFWFQsIEpT
Q0NvbnRleHRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0NvbnRleHQ7
Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dENsYXNzIEpTQ0NvbnRleHRDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9KU0NDb250ZXh0UHJpdmF0ZSBKU0NDb250ZXh0UHJpdmF0ZTsKKwordHlwZWRl
ZiB2b2lkICgqIEpTQ0V4Y2VwdGlvbkhhbmRsZXIpIChKU0NDb250ZXh0ICAgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ0V4Y2VwdGlvbiAqZXhjZXB0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAg
IHVzZXJfZGF0YSk7CisKK3N0cnVjdCBfSlNDQ29udGV4dCB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBKU0NDb250ZXh0UHJpdmF0ZSAqcHJpdjsKK307
CisKK3N0cnVjdCBfSlNDQ29udGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBl
Citqc2NfY29udGV4dF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgKHZvaWQpOworCitKU0NfQVBJ
IEpTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfbmV3ICAgICAgICAgICAgICAgICAgICAgICh2b2lk
KTsKKworSlNDX0FQSSBKU0NDb250ZXh0ICoKK2pzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxf
bWFjaGluZSAoSlNDVmlydHVhbE1hY2hpbmUgICp2bSk7CisKK0pTQ19BUEkgSlNDVmlydHVhbE1h
Y2hpbmUgKgoranNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZSAgICAgIChKU0NDb250ZXh0
ICAgICAgICAgKmNvbnRleHQpOworCitKU0NfQVBJIEpTQ0V4Y2VwdGlvbiAqCitqc2NfY29udGV4
dF9nZXRfZXhjZXB0aW9uICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCk7
CisKK0pTQ19BUEkgdm9pZAoranNjX2NvbnRleHRfdGhyb3cgICAgICAgICAgICAgICAgICAgIChK
U0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqZXJyb3JfbWVzc2FnZSk7CisKK0pTQ19BUEkg
dm9pZAoranNjX2NvbnRleHRfdGhyb3dfZXhjZXB0aW9uICAgICAgICAgIChKU0NDb250ZXh0ICAg
ICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT
Q0V4Y2VwdGlvbiAgICAgICAqZXhjZXB0aW9uKTsKKworSlNDX0FQSSB2b2lkCitqc2NfY29udGV4
dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDRXhjZXB0aW9uSGFuZGxl
ciBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciAgICAgICAgICAgIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Rlc3Ryb3lOb3RpZnkgICAgICBkZXN0cm95X25vdGlmeSk7CisKK0pTQ19BUEkgdm9p
ZAoranNjX2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVyICAgIChKU0NDb250ZXh0ICAgICAg
ICAgKmNvbnRleHQpOworCitKU0NfQVBJIEpTQ0NvbnRleHQgKgoranNjX2NvbnRleHRfZ2V0X2N1
cnJlbnQgICAgICAgICAgICAgICh2b2lkKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfY29u
dGV4dF9ldmFsdWF0ZSAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAg
ICAgICpjb2RlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfY29udGV4dF9ldmFsdWF0ZV93
aXRoX3NvdXJjZV91cmkgKEpTQ0NvbnRleHQgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICpjb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKnVy
aSk7CisKK0pTQ19BUEkgdm9pZAoranNjX2NvbnRleHRfc2V0X3ZhbHVlICAgICAgICAgICAgICAg
IChKU0NDb250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19B
UEkgSlNDVmFsdWUgKgoranNjX2NvbnRleHRfZ2V0X3ZhbHVlICAgICAgICAgICAgICAgIChKU0ND
b250ZXh0ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAqbmFtZSk7CisKK0pTQ19BUEkgSlNDQ2xhc3MgKgor
anNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3MgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgICAgICAgICAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SlNDQ2xhc3MgICAgICAgICAgICpwYXJlbnRfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5ICAgICAgZGVzdHJveV9ub3RpZnkpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogSlNDQ29udGV4dF9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ODBkYTE4MGI3YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dC5oIgor
I2luY2x1ZGUgIkpTQ1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNDb250ZXh0UmVmLmgiCisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCitHUmVmUHRyPEpTQ0NvbnRleHQ+IGpzY0NvbnRleHRH
ZXRPckNyZWF0ZShKU0dsb2JhbENvbnRleHRSZWYpOworSlNHbG9iYWxDb250ZXh0UmVmIGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoSlNDQ29udGV4dCopOworR1JlZlB0cjxKU0NWYWx1ZT4ganNjQ29u
dGV4dEdldE9yQ3JlYXRlVmFsdWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwordm9pZCBqc2ND
b250ZXh0VmFsdWVEZXN0cm95ZWQoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOworSlNDOjpKU09i
amVjdCoganNjQ29udGV4dEdldEpTV3JhcHBlcihKU0NDb250ZXh0KiwgZ3BvaW50ZXIpOworSlND
OjpKU09iamVjdCoganNjQ29udGV4dEdldE9yQ3JlYXRlSlNXcmFwcGVyKEpTQ0NvbnRleHQqLCBK
U0NsYXNzUmVmLCBKU1ZhbHVlUmVmIHByb3RvdHlwZSA9IG51bGxwdHIsIGdwb2ludGVyID0gbnVs
bHB0ciwgR0Rlc3Ryb3lOb3RpZnkgPSBudWxscHRyKTsKK2dwb2ludGVyIGpzY0NvbnRleHRXcmFw
cGVkT2JqZWN0KEpTQ0NvbnRleHQqLCBKU09iamVjdFJlZik7CisKK3N0cnVjdCBDYWxsYmFja0Rh
dGEgeworICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDsKKyAgICBHUmVmUHRyPEpTQ0V4
Y2VwdGlvbj4gcHJlc2VydmVkRXhjZXB0aW9uOworICAgIEpTVmFsdWVSZWYgY2FsbGVlVmFsdWU7
CisgICAgSlNWYWx1ZVJlZiB0aGlzVmFsdWU7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQ7Cisg
ICAgY29uc3QgSlNWYWx1ZVJlZiogYXJndW1lbnRzOworCisgICAgQ2FsbGJhY2tEYXRhKiBuZXh0
OworfTsKK0NhbGxiYWNrRGF0YSBqc2NDb250ZXh0UHVzaENhbGxiYWNrKEpTQ0NvbnRleHQqLCBK
U1ZhbHVlUmVmIGNhbGxlZVZhbHVlLCBKU1ZhbHVlUmVmIHRoaXNWYWx1ZSwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYqIGFyZ3VtZW50cyk7Cit2b2lkIGpzY0NvbnRleHRQ
b3BDYWxsYmFjayhKU0NDb250ZXh0KiwgQ2FsbGJhY2tEYXRhJiYpOworCitib29sIGpzY0NvbnRl
eHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChKU0NDb250ZXh0KiwgSlNWYWx1ZVJlZik7CitKU1Zh
bHVlUmVmIGpzY0NvbnRleHRHQXJyYXlUb0pTQXJyYXkoSlNDQ29udGV4dCosIEdQdHJBcnJheSos
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CitKU1ZhbHVlUmVmIGpzY0NvbnRleHRHVmFsdWVUb0pT
VmFsdWUoSlNDQ29udGV4dCosIGNvbnN0IEdWYWx1ZSosIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
Cit2b2lkIGpzY0NvbnRleHRKU1ZhbHVlVG9HVmFsdWUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYs
IEdUeXBlLCBHVmFsdWUqLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0RlZmluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmMzZmZhMmI0ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9nbGliL0pTQ0RlZmluZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChf
X0pTQ19IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChKU0NfQ09NUElMQVRJT04pCisjZXJyb3IgIk9u
bHkgPGpzYy9qc2MuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIEpTQ0RlZmluZXNfaAorI2RlZmluZSBKU0NEZWZpbmVzX2gKKworI2luY2x1ZGUgPGdsaWIu
aD4KKworI2lmZGVmIEdfT1NfV0lOMzIKKyMgICAgaWYgZGVmaW5lZChCVUlMRElOR19KYXZhU2Ny
aXB0Q29yZSkgfHwgZGVmaW5lZChTVEFUSUNBTExZX0xJTktFRF9XSVRIX0phdmFTY3JpcHRDb3Jl
KQorIyAgICAgICAgZGVmaW5lIEpTQ19BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgIGVs
c2UKKyMgICAgICAgIGRlZmluZSBKU0NfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICBl
bmRpZgorI2Vsc2UKKyMgICAgZGVmaW5lIEpTQ19BUEkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSgiZGVmYXVsdCIpKSkKKyNlbmRpZgorCisjZGVmaW5lIEpTQ19ERVBSRUNBVEVEIEpTQ19BUEkg
R19ERVBSRUNBVEVECisjZGVmaW5lIEpTQ19ERVBSRUNBVEVEX0ZPUihmKSBKU0NfQVBJIEdfREVQ
UkVDQVRFRF9GT1IoZikKKworI2VuZGlmIC8qIEpTQ0RlZmluZXNfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGQ2N2Q1NzIwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmNwcApAQCAtMCwwICsx
LDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNDRXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJBUElDYXN0
LmgiCisjaW5jbHVkZSAiSlNDQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRp
b25Qcml2YXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTUmV0YWlu
UHRyLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCisvKioKKyAqIFNF
Q1RJT046IEpTQ0V4Y2VwdGlvbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0IGV4
Y2VwdGlvbgorICogQHRpdGxlOiBKU0NFeGNlcHRpb24KKyAqIEBzZWVfYWxzbzogSlNDQ29udGV4
dAorICoKKyAqIEpTQ0V4Y2VwdGlvbiByZXByZXNlbnRzIGEgSmF2YVNjcmlwdCBleGNlcHRpb24u
CisgKi8KKworc3RydWN0IF9KU0NFeGNlcHRpb25Qcml2YXRlIHsKKyAgICBKU0NDb250ZXh0KiBj
b250ZXh0OworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGpzRXhjZXB0aW9uOworICAg
IGJvb2wgY2FjaGVkOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVzc2FnZTsKKyAgICB1bnNpZ25l
ZCBsaW5lTnVtYmVyOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlVVJJOworfTsKKworV0VC
S0lUX0RFRklORV9UWVBFKEpTQ0V4Y2VwdGlvbiwganNjX2V4Y2VwdGlvbiwgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQganNjRXhjZXB0aW9uRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IEpTQ19FWENFUFRJT04ob2JqZWN0KS0+
cHJpdjsKKyAgICBpZiAocHJpdi0+Y29udGV4dCkgeworICAgICAgICBnX29iamVjdF9yZW1vdmVf
d2Vha19wb2ludGVyKEdfT0JKRUNUKHByaXYtPmNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJnByaXYtPmNvbnRleHQpKTsKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IG51bGxwdHI7
CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MoanNjX2V4Y2VwdGlvbl9wYXJlbnRfY2xhc3Mp
LT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY19leGNlcHRpb25fY2xhc3Nf
aW5pdChKU0NFeGNlcHRpb25DbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmpDbGFzcy0+ZGlzcG9zZSA9IGpz
Y0V4Y2VwdGlvbkRpc3Bvc2U7Cit9CisKK0dSZWZQdHI8SlNDRXhjZXB0aW9uPiBqc2NFeGNlcHRp
b25DcmVhdGUoSlNDQ29udGV4dCogY29udGV4dCwgSlNWYWx1ZVJlZiBqc0V4Y2VwdGlvbikKK3sK
KyAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uID0gYWRvcHRHUmVmKEpTQ19FWENF
UFRJT04oZ19vYmplY3RfbmV3KEpTQ19UWVBFX0VYQ0VQVElPTiwgbnVsbHB0cikpKTsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQpOworICAgIEpTQzo6Vk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGV4Y2Vw
dGlvbi0+cHJpdi0+anNFeGNlcHRpb24uc2V0KHZtLCB0b0pTKEpTVmFsdWVUb09iamVjdChqc0Nv
bnRleHQsIGpzRXhjZXB0aW9uLCBudWxscHRyKSkpOworICAgIC8vIFRoZSBjb250ZXh0IGhhcyBh
IHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGV4Y2VwdGlvbiwgc28gd2UgY2FuJ3QgcmVmIHRoZSBj
b250ZXh0LiBXZSB1c2UgYSB3ZWFrCisgICAgLy8gcG9pbnRlciBpbnN0ZWFkIHRvIGludmFsaWRh
dGUgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgY29udGV4dCBpcyBkZXN0cm95ZWQgYmVmb3JlLgorICAg
IGV4Y2VwdGlvbi0+cHJpdi0+Y29udGV4dCA9IGNvbnRleHQ7CisgICAgZ19vYmplY3RfYWRkX3dl
YWtfcG9pbnRlcihHX09CSkVDVChjb250ZXh0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZl
eGNlcHRpb24tPnByaXYtPmNvbnRleHQpKTsKKyAgICByZXR1cm4gZXhjZXB0aW9uOworfQorCitK
U1ZhbHVlUmVmIGpzY0V4Y2VwdGlvbkdldEpTVmFsdWUoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24p
Cit7CisgICAgcmV0dXJuIHRvUmVmKGV4Y2VwdGlvbi0+cHJpdi0+anNFeGNlcHRpb24uZ2V0KCkp
OworfQorCit2b2lkIGpzY0V4Y2VwdGlvbkVuc3VyZVByb3BlcnRpZXMoSlNDRXhjZXB0aW9uKiBl
eGNlcHRpb24pCit7CisgICAgSlNDRXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9IGV4Y2VwdGlvbi0+
cHJpdjsKKyAgICBpZiAocHJpdi0+Y2FjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2
LT5jYWNoZWQgPSB0cnVlOworCisgICAgYXV0byB2YWx1ZSA9IGpzY0NvbnRleHRHZXRPckNyZWF0
ZVZhbHVlKHByaXYtPmNvbnRleHQsIHRvUmVmKHByaXYtPmpzRXhjZXB0aW9uLmdldCgpKSk7Cisg
ICAgYXV0byBwcm9wZXJ0eVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3By
b3BlcnR5KHZhbHVlLmdldCgpLCAibWVzc2FnZSIpKTsKKyAgICBpZiAoIWpzY192YWx1ZV9pc191
bmRlZmluZWQocHJvcGVydHlWYWx1ZS5nZXQoKSkpCisgICAgICAgIHByaXYtPm1lc3NhZ2UucmVz
ZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhwcm9wZXJ0eVZhbHVlLmdldCgpKSk7CisgICAgcHJvcGVy
dHlWYWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5n
ZXQoKSwgImxpbmUiKSk7CisgICAgaWYgKCFqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHByb3BlcnR5
VmFsdWUuZ2V0KCkpKQorICAgICAgICBwcml2LT5saW5lTnVtYmVyID0ganNjX3ZhbHVlX3RvX2lu
dDMyKHByb3BlcnR5VmFsdWUuZ2V0KCkpOworICAgIHByb3BlcnR5VmFsdWUgPSBhZG9wdEdSZWYo
anNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJzb3VyY2VVUkwiKSk7
CisgICAgaWYgKCFqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHByb3BlcnR5VmFsdWUuZ2V0KCkpKQor
ICAgICAgICBwcml2LT5zb3VyY2VVUkkucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyhwcm9wZXJ0
eVZhbHVlLmdldCgpKSk7Cit9CisKKy8qKgorICoganNjX2V4Y2VwdGlvbl9uZXc6CisgKiBAY29u
dGV4dDogYSAjSlNDQ29udGV4dAorICogQG1lc3NhZ2U6IHRoZSBlcnJvciBtZXNzYWdlCisgKgor
ICogQ3JlYXRlIGEgbmV3ICNKU0NFeGNlcHRpb24gaW4gQGNvbnRleHQgd2l0aCBAbWVzc2FnZS4K
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IEpTQ0V4Y2VwdGlvbi4KKyAq
LworSlNDRXhjZXB0aW9uKiBqc2NfZXhjZXB0aW9uX25ldyhKU0NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19D
T05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0Nv
bnRleHRHZXRKU0NvbnRleHQoY29udGV4dCk7CisgICAgSlNWYWx1ZVJlZiBqc01lc3NhZ2UgPSBu
dWxscHRyOworICAgIGlmIChtZXNzYWdlKSB7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBqc01lc3NhZ2VTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG1lc3NhZ2UpKTsKKyAgICAgICAganNNZXNzYWdlID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNDb250
ZXh0LCBqc01lc3NhZ2VTdHJpbmcuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4ganNjRXhjZXB0
aW9uQ3JlYXRlKGNvbnRleHQsIEpTT2JqZWN0TWFrZUVycm9yKGpzQ29udGV4dCwganNNZXNzYWdl
ID8gMSA6IDAsICZqc01lc3NhZ2UsIG51bGxwdHIpKS5sZWFrUmVmKCk7Cit9CisKKy8qKgorICog
anNjX2V4Y2VwdGlvbl9nZXRfbWVzc2FnZToKKyAqIEBleGNlcHRpb246IGEgI0pTQ0V4Y2VwdGlv
bgorICoKKyAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZSBvZiBAZXhjZXB0aW9uLgorICoKKyAqIFJl
dHVybnM6IHRoZSBAZXhjZXB0aW9uIGVycm9yIG1lc3NhZ2UuCisgKi8KK2NvbnN0IGNoYXIqIGpz
Y19leGNlcHRpb25fZ2V0X21lc3NhZ2UoSlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBudWxscHRy
KTsKKworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBq
c2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYt
Pm1lc3NhZ2UuZ2V0KCk7Cit9CisKKy8qKgorICoganNjX2V4Y2VwdGlvbl9nZXRfbGluZV9udW1i
ZXI6CisgKiBAZXhjZXB0aW9uOiBhICNKU0NFeGNlcHRpb24KKyAqCisgKiBHZXQgdGhlIGxpbmUg
bnVtYmVyIGF0IHdoaWNoIEBleGNlcHRpb24gaGFwcGVuZWQuCisgKgorICogUmV0dXJuczogdGhl
IGxpbmUgbnVtYmVyIG9mIEBleGNlcHRpb24uCisgKi8KK2d1aW50IGpzY19leGNlcHRpb25fZ2V0
X2xpbmVfbnVtYmVyKEpTQ0V4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKEpTQ19JU19FWENFUFRJT04oZXhjZXB0aW9uKSwgMCk7CisKKyAgICBKU0NFeGNl
cHRpb25Qcml2YXRlKiBwcml2ID0gZXhjZXB0aW9uLT5wcml2OworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHByaXYtPmNvbnRleHQsIDApOworCisgICAganNjRXhjZXB0aW9uRW5zdXJlUHJvcGVy
dGllcyhleGNlcHRpb24pOworICAgIHJldHVybiBwcml2LT5saW5lTnVtYmVyOworfQorCisvKioK
KyAqIGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmk6CisgKiBAZXhjZXB0aW9uOiBhICNKU0NF
eGNlcHRpb24KKyAqCisgKiBHZXQgdGhlIHNvdXJjZSBVUkkgb2YgQGV4Y2VwdGlvbi4KKyAqCisg
KiBSZXR1cm5zOiAobnVsbGFibGUpOiB0aGUgdGhlIHNvdXJjZSBVUkkgb2YgQGV4Y2VwdGlvbiwg
b3IgJU5VTEwuCisgKi8KK2NvbnN0IGNoYXIqIGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmko
SlNDRXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlND
X0lTX0VYQ0VQVElPTihleGNlcHRpb24pLCBudWxscHRyKTsKKworICAgIEpTQ0V4Y2VwdGlvblBy
aXZhdGUqIHByaXYgPSBleGNlcHRpb24tPnByaXY7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
cHJpdi0+Y29udGV4dCwgbnVsbHB0cik7CisKKyAgICBqc2NFeGNlcHRpb25FbnN1cmVQcm9wZXJ0
aWVzKGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHByaXYtPnNvdXJjZVVSSS5nZXQoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmZkNTdmYWQyNWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmgKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19KU0NfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vy
cm9yICJPbmx5IDxqc2MvanNjLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBKU0NFeGNlcHRpb25faAorI2RlZmluZSBKU0NFeGNlcHRpb25faAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgSlNDX1RZUEVfRVhDRVBUSU9OICAgICAgICAgICAgKGpzY19l
eGNlcHRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgSlNDX0VYQ0VQVElPTihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBKU0NfVFlQRV9FWENFUFRJT04s
IEpTQ0V4Y2VwdGlvbikpCisjZGVmaW5lIEpTQ19JU19FWENFUFRJT04ob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgSlNDX1RZUEVfRVhDRVBUSU9OKSkKKyNk
ZWZpbmUgSlNDX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04sIEpTQ0V4Y2VwdGlvbkNsYXNzKSkKKyNk
ZWZpbmUgSlNDX0lTX0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBKU0NfVFlQRV9FWENFUFRJT04pKQorI2RlZmluZSBKU0NfRVhDRVBUSU9O
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19U
WVBFX0VYQ0VQVElPTiwgSlNDRXhjZXB0aW9uQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfSlND
RXhjZXB0aW9uIEpTQ0V4Y2VwdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb25DbGFz
cyBKU0NFeGNlcHRpb25DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NFeGNlcHRpb25Qcml2YXRl
IEpTQ0V4Y2VwdGlvblByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IF9KU0NDb250ZXh0IEpTQ0Nv
bnRleHQ7CisKK3N0cnVjdCBfSlNDRXhjZXB0aW9uIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKwor
ICAgIC8qPCBwcml2YXRlID4qLworICAgIEpTQ0V4Y2VwdGlvblByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX0pTQ0V4Y2VwdGlvbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl9q
c2NfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl9qc2NfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitKU0NfQVBJIEdUeXBl
Citqc2NfZXhjZXB0aW9uX2dldF90eXBlICAgICAgICAodm9pZCk7CisKK0pTQ19BUEkgSlNDRXhj
ZXB0aW9uICoKK2pzY19leGNlcHRpb25fbmV3ICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICptZXNz
YWdlKTsKKworSlNDX0FQSSBjb25zdCBjaGFyICoKK2pzY19leGNlcHRpb25fZ2V0X21lc3NhZ2Ug
ICAgIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbik7CisKK0pTQ19BUEkgZ3VpbnQKK2pzY19leGNl
cHRpb25fZ2V0X2xpbmVfbnVtYmVyIChKU0NFeGNlcHRpb24gKmV4Y2VwdGlvbik7CisKK0pTQ19B
UEkgY29uc3QgY2hhciAqCitqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpICAoSlNDRXhjZXB0
aW9uICpleGNlcHRpb24pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogSlNDRXhjZXB0aW9u
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNl
cHRpb25Qcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDRXhjZXB0
aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYjVk
YmMwZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NFeGNlcHRpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJKU0NFeGNlcHRpb24uaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+CisKK0dSZWZQdHI8SlNDRXhjZXB0aW9uPiBqc2NFeGNlcHRpb25DcmVhdGUoSlNDQ29u
dGV4dCosIEpTVmFsdWVSZWYpOworSlNWYWx1ZVJlZiBqc2NFeGNlcHRpb25HZXRKU1ZhbHVlKEpT
Q0V4Y2VwdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L0pTQ0dMaWJXcmFwcGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDR0xpYldyYXBwZXJPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYzJjYWJhOWI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDR0xpYldyYXBwZXJPYmplY3QuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0NHTGliV3JhcHBlck9iamVjdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgSlNDR0xpYldyYXBwZXJPYmplY3QoZ3BvaW50ZXIgb2JqZWN0
LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCisgICAgICAgIDogbV9vYmplY3Qob2Jq
ZWN0KQorICAgICAgICAsIG1fZGVzdHJveUZ1bmN0aW9uKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB7
CisgICAgfQorCisgICAgfkpTQ0dMaWJXcmFwcGVyT2JqZWN0KCkKKyAgICB7CisgICAgICAgIGlm
IChtX2Rlc3Ryb3lGdW5jdGlvbikKKyAgICAgICAgICAgIG1fZGVzdHJveUZ1bmN0aW9uKG1fb2Jq
ZWN0KTsKKyAgICB9CisKKyAgICBncG9pbnRlciBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdDsgfQorCitwcml2YXRlOgorICAgIGdwb2ludGVyIG1fb2JqZWN0IHsgbnVsbHB0ciB9Owor
ICAgIEdEZXN0cm95Tm90aWZ5IG1fZGVzdHJveUZ1bmN0aW9uIHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1Zh
bHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGViMDU0ODg0
OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmFsdWUuY3BwCkBAIC0wLDAgKzEsOTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZS5oIgorCisj
aW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkpTQ0NhbGxiYWNrRnVuY3Rpb24uaCIKKyNp
bmNsdWRlICJKU0NDbGFzc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NWYWx1ZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCisvKioKKyAq
IFNFQ1RJT046IEpTQ1ZhbHVlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEphdmFTY3JpcHQgdmFs
dWUKKyAqIEB0aXRsZTogSlNDVmFsdWUKKyAqIEBzZWVfYWxzbzogSlNDQ29udGV4dAorICoKKyAq
IEpTQ1ZhbHVlIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSB2YWx1ZSBpbiBhICNKU0NDb250
ZXh0LiBUaGUgSlNDVmFsdWUKKyAqIHByb3RlY3RzIHRoZSByZWZlcmVuY2VkIHZhbHVlIGZyb20g
YmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQuCisgKi8KKworZW51bSB7CisgICAgUFJPUF8wLAorCisg
ICAgUFJPUF9DT05URVhULAorfTsKKworc3RydWN0IF9KU0NWYWx1ZVByaXZhdGUgeworICAgIEdS
ZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dDsKKyAgICBKU1ZhbHVlUmVmIGpzVmFsdWU7Cit9Owor
CitXRUJLSVRfREVGSU5FX1RZUEUoSlNDVmFsdWUsIGpzY192YWx1ZSwgR19UWVBFX09CSkVDVCkK
Kworc3RhdGljIHZvaWQganNjVmFsdWVHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpT
Q1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgc3dp
dGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQganNjVmFs
dWVTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSog
cHJpdiA9IEpTQ19WQUxVRShvYmplY3QpLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wSUQpIHsK
KyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IEpTQ19DT05U
RVhUKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBqc2NWYWx1ZURpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IEpTQ19W
QUxVRShvYmplY3QpLT5wcml2OworCisgICAgaWYgKHByaXYtPmNvbnRleHQpIHsKKyAgICAgICAg
YXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0Lmdl
dCgpKTsKKworICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1
ZSk7CisgICAgICAgIGpzY0NvbnRleHRWYWx1ZURlc3Ryb3llZChwcml2LT5jb250ZXh0LmdldCgp
LCBwcml2LT5qc1ZhbHVlKTsKKyAgICAgICAgcHJpdi0+anNWYWx1ZSA9IG51bGxwdHI7CisgICAg
ICAgIHByaXYtPmNvbnRleHQgPSBudWxscHRyOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNT
KGpzY192YWx1ZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIGpzY192YWx1ZV9jbGFzc19pbml0KEpTQ1ZhbHVlQ2xhc3MqIGtsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqQ2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBvYmpD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0ganNjVmFsdWVHZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+
c2V0X3Byb3BlcnR5ID0ganNjVmFsdWVTZXRQcm9wZXJ0eTsKKyAgICBvYmpDbGFzcy0+ZGlzcG9z
ZSA9IGpzY1ZhbHVlRGlzcG9zZTsKKworICAgIC8qKgorICAgICAqIEpTQ1ZhbHVlOmNvbnRleHQ6
CisgICAgICoKKyAgICAgKiBUaGUgI0pTQ0NvbnRleHQgaW4gd2hpY2ggdGhlIHZhbHVlIHdhcyBj
cmVhdGVkLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICJKU0NDb250ZXh0IiwKKyAg
ICAgICAgICAgICJKU0MgQ29udGV4dCIsCisgICAgICAgICAgICBKU0NfVFlQRV9DT05URVhULAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworfQorCitKU1ZhbHVlUmVmIGpzY1ZhbHVl
R2V0SlNWYWx1ZShKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLT5wcml2LT5q
c1ZhbHVlOworfQorCitKU0NWYWx1ZSoganNjVmFsdWVDcmVhdGUoSlNDQ29udGV4dCogY29udGV4
dCwgSlNWYWx1ZVJlZiBqc1ZhbHVlKQoreworICAgIGF1dG8qIHZhbHVlID0gSlNDX1ZBTFVFKGdf
b2JqZWN0X25ldyhKU0NfVFlQRV9WQUxVRSwgImNvbnRleHQiLCBjb250ZXh0LCBudWxscHRyKSk7
CisgICAgSlNWYWx1ZVByb3RlY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwganNW
YWx1ZSk7CisgICAgdmFsdWUtPnByaXYtPmpzVmFsdWUgPSBqc1ZhbHVlOworICAgIHJldHVybiB2
YWx1ZTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfZ2V0X2NvbnRleHQ6CisgKiBAdmFsdWU6IGEg
I0pTQ1ZhbHVlCisgKgorICogR2V0IHRoZSAjSlNDQ29udGV4dCBpbiB3aGljaCBAdmFsdWUgd2Fz
IGNyZWF0ZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0pTQ1ZhbHVl
IGNvbnRleHQuCisgKi8KK0pTQ0NvbnRleHQqIGpzY192YWx1ZV9nZXRfY29udGV4dChKU0NWYWx1
ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVl
KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdmFsdWUtPnByaXYtPmNvbnRleHQuZ2V0KCk7Cit9
CisKKy8qKgorICoganNjX3ZhbHVlX25ld191bmRlZmluZWQ6CisgKiBAY29udGV4dDogYSAjSlND
Q29udGV4dAorICoKKyAqIENyZWF0ZSBhIG5ldyAjSlNDVmFsdWUgcmVmZXJlbmNpbmcgPGZ1bmN0
aW9uPnVuZGVmaW5lZDwvZnVuY3Rpb24+IGluIEBjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3
X3VuZGVmaW5lZChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsKKworICAgIHJldHVybiBqc2ND
b250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChqc2ND
b250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpKSkubGVha1JlZigpOworfQorCisvKioKKyAqIGpz
Y192YWx1ZV9pc191bmRlZmluZWQ6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKgorICogR2V0
IHdoZXRoZXIgdGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIDxmdW5jdGlvbj51bmRl
ZmluZWQ8L2Z1bmN0aW9uPi4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyB1
bmRlZmluZWQuCisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9pc191bmRlZmluZWQoSlNDVmFsdWUq
IHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSks
IEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAg
IHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5j
b250ZXh0LmdldCgpKSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25l
d19udWxsOgorICogQGNvbnRleHQ6IGEgI0pTQ0NvbnRleHQKKyAqCisgKiBDcmVhdGUgYSBuZXcg
I0pTQ1ZhbHVlIHJlZmVyZW5jaW5nIDxmdW5jdGlvbj5udWxsPC9mdW5jdGlvbj4gaW4gQGNvbnRl
eHQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KKyAqLwor
SlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfbnVsbChKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQpLCBudWxscHRyKTsK
KworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBKU1ZhbHVl
TWFrZU51bGwoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSkpLmxlYWtSZWYoKTsKK30K
KworLyoqCisgKiBqc2NfdmFsdWVfaXNfbnVsbDoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAq
CisgKiBHZXQgd2hldGhlciB0aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgPGZ1bmN0
aW9uPm51bGw8L2Z1bmN0aW9uPi4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBp
cyBudWxsLgorICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfbnVsbChKU0NWYWx1ZSogdmFsdWUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0Up
OworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgcmV0dXJu
IEpTVmFsdWVJc051bGwoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgp
KSwgcHJpdi0+anNWYWx1ZSk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX25ld19udW1iZXI6Cisg
KiBAY29udGV4dDogYSAjSlNDQ29udGV4dAorICogQG51bWJlcjogYSBudW1iZXIKKyAqCisgKiBD
cmVhdGUgYSBuZXcgI0pTQ1ZhbHVlIGZyb20gQG51bWJlci4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19u
dW1iZXIoSlNDQ29udGV4dCogY29udGV4dCwgZG91YmxlIG51bWJlcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUoY29udGV4dCwgSlNWYWx1ZU1ha2VOdW1i
ZXIoanNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0KSwgbnVtYmVyKSkubGVha1JlZigpOwor
fQorCisvKioKKyAqIGpzY192YWx1ZV9pc19udW1iZXI6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVl
CisgKgorICogR2V0IHdoZXRoZXIgdGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIGEg
bnVtYmVyLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgbnVtYmVyLgor
ICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfbnVtYmVyKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAg
ICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1
ZUlzTnVtYmVyKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHBy
aXYtPmpzVmFsdWUpOworfQorCisvKioKKyAqIGpzY192YWx1ZV90b19kb3VibGU6CisgKiBAdmFs
dWU6IGEgI0pTQ1ZhbHVlCisgKgorICogQ29udmVydCBAdmFsdWUgdG8gYSBkb3VibGUuCisgKgor
ICogUmV0dXJuczogYSAjZ2RvdWJsZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24uCisgKi8KK2Rv
dWJsZSBqc2NfdmFsdWVfdG9fZG91YmxlKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVl
LT5wcml2OworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvIHJl
c3VsdCA9IEpTVmFsdWVUb051bWJlcihqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRl
eHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfdG9faW50MzI6
CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKgorICogQ29udmVydCBAdmFsdWUgdG8gYSAjZ2lu
dDMyLgorICoKKyAqIFJldHVybnM6IGEgI2dpbnQzMiByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24u
CisgKi8KK2dpbnQzMiBqc2NfdmFsdWVfdG9faW50MzIoSlNDVmFsdWUqIHZhbHVlKQoreworICAg
IHJldHVybiBKU0M6OnRvSW50MzIoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1ZSkpOworfQorCisv
KioKKyAqIGpzY192YWx1ZV9uZXdfYm9vbGVhbjoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0
CisgKiBAdmFsdWU6IGEgI2dib29sZWFuCisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NWYWx1ZSBm
cm9tIEB2YWx1ZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjSlNDVmFsdWUu
CisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oSlNDQ29udGV4dCogY29udGV4
dCwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NP
TlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNy
ZWF0ZVZhbHVlKGNvbnRleHQsIEpTVmFsdWVNYWtlQm9vbGVhbihqc2NDb250ZXh0R2V0SlNDb250
ZXh0KGNvbnRleHQpLCB2YWx1ZSkpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVf
aXNfYm9vbGVhbjoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisgKiBHZXQgd2hldGhlciB0
aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYSBib29sZWFuLgorICoKKyAqIFJldHVy
bnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbi4KKyAqLworZ2Jvb2xlYW4ganNjX3Zh
bHVlX2lzX2Jvb2xlYW4oSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSog
cHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNCb29sZWFuKGpzY0NvbnRl
eHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUpOworfQor
CisvKioKKyAqIGpzY192YWx1ZV90b19ib29sZWFuOgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQor
ICoKKyAqIENvbnZlcnQgQHZhbHVlIHRvIGEgYm9vbGVhbi4KKyAqCisgKiBSZXR1cm5zOiBhICNn
Ym9vbGVhbiByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24uCisgKi8KK2dib29sZWFuIGpzY192YWx1
ZV90b19ib29sZWFuKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHBy
aXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihqc2NDb250ZXh0
R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKwor
LyoqCisgKiBqc2NfdmFsdWVfbmV3X3N0cmluZzoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0
CisgKiBAc3RyaW5nOiAobnVsbGFibGUpOiBhIHN0cmluZworICoKKyAqIENyZWF0ZSBhIG5ldyAj
SlNDVmFsdWUgZnJvbSBAc3RyaW5nLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
YSAjSlNDVmFsdWUuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfbmV3X3N0cmluZyhKU0NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworCisgICAgSlNWYWx1ZVJl
ZiBqc1N0cmluZ1ZhbHVlOworICAgIGlmIChzdHJpbmcpIHsKKyAgICAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGpzU3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzdHJpbmcpKTsKKyAgICAgICAganNTdHJpbmdWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGpz
Y0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCksIGpzU3RyaW5nLmdldCgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAganNTdHJpbmdWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGpzY0NvbnRleHRH
ZXRKU0NvbnRleHQoY29udGV4dCksIG51bGxwdHIpOworICAgIHJldHVybiBqc2NDb250ZXh0R2V0
T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBqc1N0cmluZ1ZhbHVlKS5sZWFrUmVmKCk7Cit9CisKKy8q
KgorICoganNjX3ZhbHVlX2lzX3N0cmluZzoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisg
KiBHZXQgd2hldGhlciB0aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYSBzdHJpbmcK
KyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHN0cmluZworICovCitnYm9v
bGVhbiBqc2NfdmFsdWVfaXNfc3RyaW5nKEpTQ1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBGQUxTRSk7CisKKyAgICBKU0NWYWx1
ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaW5n
KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmpzVmFs
dWUpOworfQorCisvKioKKyAqIGpzY192YWx1ZV90b19zdHJpbmc6CisgKiBAdmFsdWU6IGEgI0pT
Q1ZhbHVlCisgKgorICogQ29udmVydCBAdmFsdWUgdG8gYSBzdHJpbmcKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IGEgc3RyaW5nIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbi4KKyAq
LworY2hhcioganNjX3ZhbHVlX3RvX3N0cmluZyhKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29u
dGV4dC5nZXQoKSksIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pKTsKKyAgICBpZiAoanNjQ29u
dGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlv
bikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6ZV90IG1heFNpemUgPSBKU1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoanNTdHJpbmcuZ2V0KCkpOworICAgIGF1dG8q
IHN0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhtYXhTaXplKSk7CisgICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhqc1N0cmluZy5nZXQoKSwgc3RyaW5nLCBtYXhTaXplKTsKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCisvKioKKyAqIGpzY192YWx1ZV9uZXdfYXJyYXk6CisgKiBA
Y29udGV4dDogYSAjSlNDQ29udGV4dAorICogQGZpcnN0X2l0ZW1fdHlwZTogI0dUeXBlIG9mIGZp
cnN0IGl0ZW0sIG9yICVHX1RZUEVfTk9ORQorICogQC4uLjogdmFsdWUgb2YgdGhlIGZpcnN0IGl0
ZW0sIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSB0eXBlL3ZhbHVlIHBhaXJzLCBmb2xsb3dl
ZCBieSAlR19UWVBFX05PTkUuCisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NWYWx1ZSByZWZlcmVu
Y2luZyBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBpdGVtcy4gSWYgQGZpcnN0X2l0ZW1fdHlwZQor
ICogaXMgJUdfVFlQRV9OT05FIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNKU0NWYWx1ZS4KKyAqLworSlNDVmFsdWUqIGpzY192
YWx1ZV9uZXdfYXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1R5cGUgZmlyc3RJdGVtVHlwZSwg
Li4uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19DT05URVhUKGNvbnRleHQp
LCBudWxscHRyKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBh
dXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpOworICAgIGF1
dG8qIGpzQXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShqc0NvbnRleHQsIDAsIG51bGxwdHIsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29u
dGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBq
c0FycmF5T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwganNBcnJheSwgJmV4Y2Vw
dGlvbik7CisgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250ZXh0
LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZmlyc3RJdGVt
VHlwZSk7CisgICAgR1R5cGUgaXRlbVR5cGUgPSBmaXJzdEl0ZW1UeXBlOworICAgIHdoaWxlIChp
dGVtVHlwZSAhPSBHX1RZUEVfTk9ORSkgeworICAgICAgICBHVmFsdWUgaXRlbTsKKyAgICAgICAg
R1VuaXF1ZU91dFB0cjxjaGFyPiBlcnJvcjsKKyAgICAgICAgR19WQUxVRV9DT0xMRUNUX0lOSVQo
Jml0ZW0sIGl0ZW1UeXBlLCBhcmdzLCBHX1ZBTFVFX05PQ09QWV9DT05URU5UUywgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBleGNlcHRpb24gPSB0
b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGpzQ29udGV4dCksIG1ha2VTdHJpbmcoImZh
aWxlZCB0byBjb2xsZWN0IGFycmF5IGl0ZW06ICIsIGVycm9yLmdldCgpKSkpOworICAgICAgICAg
ICAganNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbik7
CisgICAgICAgICAgICBqc0FycmF5ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byoganNWYWx1ZSA9IGpzY0NvbnRleHRHVmFsdWVUb0pTVmFs
dWUoY29udGV4dCwgJml0ZW0sICZleGNlcHRpb24pOworICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZp
dGVtKTsKKyAgICAgICAgaWYgKGpzY0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChjb250
ZXh0LCBleGNlcHRpb24pKSB7CisgICAgICAgICAgICBqc0FycmF5ID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0
SW5kZXgoanNDb250ZXh0LCBqc0FycmF5T2JqZWN0LCBpbmRleCwganNWYWx1ZSwgJmV4Y2VwdGlv
bik7CisgICAgICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoY29udGV4
dCwgZXhjZXB0aW9uKSkgeworICAgICAgICAgICAganNBcnJheSA9IG51bGxwdHI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW1UeXBlID0gdmFfYXJnKGFyZ3Ms
IEdUeXBlKTsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworCisg
ICAgcmV0dXJuIGpzQXJyYXkgPyBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBq
c0FycmF5KS5sZWFrUmVmKCkgOiBudWxscHRyOworfQorCisvKioKKyAqIGpzY192YWx1ZV9uZXdf
YXJyYXlfZnJvbV9nYXJyYXk6CisgKiBAY29udGV4dDogYSAjSlNDQ29udGV4dAorICogQGFycmF5
OiAobnVsbGFibGUpIChlbGVtZW50LXR5cGUgSlNDVmFsdWUpOiBhICNHUHRyQXJyYXkKKyAqCisg
KiBDcmVhdGUgYSBuZXcgI0pTQ1ZhbHVlIHJlZmVyZW5jaW5nIGFuIGFycmF5IHdpdGggdGhlIGl0
ZW1zIGZyb20gQGFycmF5LiBJZiBAYXJyYXkKKyAqIGlzICVOVUxMIG9yIGVtcHR5IGEgbmV3IGVt
cHR5IGFycmF5IHdpbGwgYmUgY3JlYXRlZC4gRWxlbWVudHMgb2YgQGFycmF5IHNob3VsZCBiZQor
ICogcG9pbnRlcnMgdG8gYSAjSlNDVmFsdWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBhICNKU0NWYWx1ZS4KKyAqLworSlNDVmFsdWUqIGpzY192YWx1ZV9uZXdfYXJyYXlfZnJv
bV9nYXJyYXkoSlNDQ29udGV4dCogY29udGV4dCwgR1B0ckFycmF5KiBnQXJyYXkpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOwor
CisgICAgaWYgKCFnQXJyYXkgfHwgIWdBcnJheS0+bGVuKQorICAgICAgICByZXR1cm4ganNjX3Zh
bHVlX25ld19hcnJheShjb250ZXh0LCBHX1RZUEVfTk9ORSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byoganNBcnJheSA9IGpzY0NvbnRleHRHQXJyYXlU
b0pTQXJyYXkoY29udGV4dCwgZ0FycmF5LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGNvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNv
bnRleHQsIGpzQXJyYXkpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfaXNfYXJy
YXk6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKgorICogR2V0IHdoZXRoZXIgdGhlIHZhbHVl
IHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIGFuIGFycmF5LgorICoKKyAqIFJldHVybnM6IHdoZXRo
ZXIgdGhlIHZhbHVlIGlzIGFuIGFycmF5LgorICovCitnYm9vbGVhbiBqc2NfdmFsdWVfaXNfYXJy
YXkoSlNDVmFsdWUqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19W
QUxVRSh2YWx1ZSksIEZBTFNFKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVl
LT5wcml2OworICAgIHJldHVybiBKU1ZhbHVlSXNBcnJheShqc2NDb250ZXh0R2V0SlNDb250ZXh0
KHByaXYtPmNvbnRleHQuZ2V0KCkpLCBwcml2LT5qc1ZhbHVlKTsKK30KKworLyoqCisgKiBqc2Nf
dmFsdWVfbmV3X29iamVjdDoKKyAqIEBjb250ZXh0OiBhICNKU0NDb250ZXh0CisgKiBAaW5zdGFu
Y2U6IChudWxsYWJsZSk6IGFuIG9iamVjdCBpbnN0YW5jZSBvciAlTlVMTAorICogQGpzY19jbGFz
czogKG51bGxhYmxlKTogdGhlICNKU0NDbGFzcyBvZiBAaW5zdGFuY2UKKyAqCisgKiBDcmVhdGUg
YSBuZXcgI0pTQ1ZhbHVlIGZyb20gQGluc3RhbmNlLiBJZiBAaW5zdGFuY2UgaXMgJU5VTEwgYSBu
ZXcgZW1wdHkgb2JqZWN0IGlzIGNyZWF0ZWQuCisgKiBXaGVuIEBpbnN0YW5jZSBpcyBwcm92aWRl
ZCwgQGpzY19jbGFzcyBtdXN0IGJlIHByb3ZpZGVkIHRvby4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19v
YmplY3QoSlNDQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgaW5zdGFuY2UsIEpTQ0NsYXNzKiBq
c2NDbGFzcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfQ09OVEVYVChjb250
ZXh0KSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWluc3RhbmNlIHx8IEpT
Q19JU19DTEFTUyhqc2NDbGFzcyksIG51bGxwdHIpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRH
ZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGluc3RhbmNlID8gdG9SZWYoanNjQ2xhc3NHZXRPckNy
ZWF0ZUpTV3JhcHBlcihqc2NDbGFzcywgaW5zdGFuY2UpKSA6IEpTT2JqZWN0TWFrZShqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpLCBudWxscHRyLCBudWxscHRyKSkubGVha1JlZigpOwor
fQorCisvKioKKyAqIGpzY192YWx1ZV9pc19vYmplY3Q6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVl
CisgKgorICogR2V0IHdoZXRoZXIgdGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgQHZhbHVlIGlzIGFu
IG9iamVjdC4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qu
CisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9pc19vYmplY3QoSlNDVmFsdWUqIHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIEZBTFNFKTsKKwor
ICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVlLT5wcml2OworICAgIHJldHVybiBKU1Zh
bHVlSXNPYmplY3QoanNjQ29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKSwg
cHJpdi0+anNWYWx1ZSk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5j
ZV9vZjoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqIEBuYW1lOiBhIGNsYXNzIG5hbWUKKyAq
CisgKiBHZXQgd2hldGhlciB0aGUgdmFsdWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYW4gaW5z
dGFuY2Ugb2YgY2xhc3MgQG5hbWUuCisgKgorICogUmV0dXJuczogd2hldGhlciB0aGUgdmFsdWUg
aXMgYW4gb2JqZWN0IGluc3RhbmNlIG9mIGNsYXNzIEBuYW1lLgorICovCitnYm9vbGVhbiBqc2Nf
dmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciog
bmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChKU0NfSVNfVkFMVUUodmFsdWUpLCBG
QUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgRkFMU0UpOworCisgICAgSlND
VmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgLy8gV2UgdXNlIGV2YWx1YXRl
IGhlcmUgYW5kIG5vdCBnZXRfdmFsdWUgYmVjYXVzZSBjbGFzc2VzIGFyZSBub3QgbmVjZXNzYXJp
bHkgYSBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBodHRwOi8vd3d3LmVj
bWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWdsb2JhbC1l
bnZpcm9ubWVudC1yZWNvcmRzCisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUocHJpdi0+Y29udGV4dC5nZXQoKSwgbmFtZSkp
OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29u
dGV4dC5nZXQoKSk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4dCwgY29uc3RydWN0
b3ItPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWUgPSBKU1ZhbHVlSXNJ
bnN0YW5jZU9mQ29uc3RydWN0b3IoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCBvYmplY3QsICZl
eGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJp
di0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCisvKioKKyAqIGpzY192YWx1ZV9vYmplY3Rfc2V0
X3Byb3BlcnR5OgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQorICogQG5hbWU6IHRoZSBwcm9wZXJ0
eSBuYW1lCisgKiBAcHJvcGVydHk6IHRoZSAjSlNDVmFsdWUgdG8gc2V0CisgKgorICogU2V0IEBw
cm9wZXJ0eSB3aXRoIEBuYW1lIG9uIEB2YWx1ZS4KKyAqLwordm9pZCBqc2NfdmFsdWVfb2JqZWN0
X3NldF9wcm9wZXJ0eShKU0NWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIqIG5hbWUsIEpTQ1ZhbHVl
KiBwcm9wZXJ0eSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSkp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChKU0Nf
SVNfVkFMVUUocHJvcGVydHkpKTsKKworICAgIEpTQ1ZhbHVlUHJpdmF0ZSogcHJpdiA9IHZhbHVl
LT5wcml2OworICAgIGF1dG8qIGpzQ29udGV4dCA9IGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJp
di0+Y29udGV4dC5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwor
ICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChqc0NvbnRleHQsIHByaXYt
PmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOworICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkoanNDb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwgcHJvcGVydHktPnByaXYt
PmpzVmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgJmV4Y2VwdGlvbik7CisgICAganNj
Q29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2Vw
dGlvbik7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHk6CisgKiBA
dmFsdWU6IGEgI0pTQ1ZhbHVlCisgKiBAbmFtZTogdGhlIHByb3BlcnR5IG5hbWUKKyAqCisgKiBH
ZXQgcHJvcGVydHkgd2l0aCBAbmFtZSBmcm9tIEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IHRoZSBwcm9wZXJ0eSAjSlNDVmFsdWUuCisgKi8KK0pTQ1ZhbHVlKiBqc2Nf
dmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eShKU0NWYWx1ZSogdmFsdWUsIGNvbnN0IGNoYXIqIG5h
bWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVs
bHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7CisKKyAgICBK
U0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQg
PSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1Zh
bHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBp
ZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCks
IGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2
LT5jb250ZXh0LmdldCgpKTsKKworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3Bl
cnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOworICAg
IEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShqc0NvbnRleHQsIG9iamVj
dCwgcHJvcGVydHlOYW1lLmdldCgpLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisg
ICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgp
KTsKKworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShwcml2LT5jb250ZXh0
LmdldCgpLCByZXN1bHQpLmxlYWtSZWYoKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfb2JqZWN0
X3NldF9wcm9wZXJ0eV9hdF9pbmRleDoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqIEBpbmRl
eDogdGhlIHByb3BlcnR5IGluZGV4CisgKiBAcHJvcGVydHk6IHRoZSAjSlNDVmFsdWUgdG8gc2V0
CisgKgorICogU2V0IEBwcm9wZXJ0eSBhdCBAaW5kZXggb24gQHZhbHVlLgorICovCit2b2lkIGpz
Y192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KEpTQ1ZhbHVlKiB2YWx1ZSwgdW5z
aWduZWQgaW5kZXgsIEpTQ1ZhbHVlKiBwcm9wZXJ0eSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lTX1ZBTFVF
KHByb3BlcnR5KSk7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsK
KyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRl
eHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVl
LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAg
IEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGpzQ29udGV4dCwgb2JqZWN0LCBpbmRleCwgcHJv
cGVydHktPnByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGpzY0NvbnRleHRIYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRpb24pOworfQorCisv
KioKKyAqIGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4OgorICogQHZhbHVl
OiBhICNKU0NWYWx1ZQorICogQGluZGV4OiB0aGUgcHJvcGVydHkgaW5kZXgKKyAqCisgKiBHZXQg
cHJvcGVydHkgYXQgQGluZGV4IGZyb20gQHZhbHVlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogdGhlIHByb3BlcnR5ICNKU0NWYWx1ZS4KKyAqLworSlNDVmFsdWUqIGpzY192YWx1
ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KEpTQ1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQg
aW5kZXgpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwg
bnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAg
ICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQu
Z2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVj
dFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHBy
aXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVf
bmV3X3VuZGVmaW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworCisgICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChqc0NvbnRleHQsIG9iamVjdCwgaW5k
ZXgsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGpzY192
YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkpOworCisgICAgcmV0dXJuIGpz
Y0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksIHJlc3VsdCkubGVh
a1JlZigpOworfQorCitzdGF0aWMgR1JlZlB0cjxKU0NWYWx1ZT4ganNjVmFsdWVDYWxsRnVuY3Rp
b24oSlNDVmFsdWUqIHZhbHVlLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNDOjpKU0NDYWxsYmFj
a0Z1bmN0aW9uOjpUeXBlIGZ1bmN0aW9uVHlwZSwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgR1R5
cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCB2YV9saXN0IGFyZ3MpCit7CisgICAgSlNDVmFsdWVQcml2
YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4
dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gbnVsbHB0cjsKKyAgICBWZWN0b3I8SlNWYWx1ZVJlZj4gYXJndW1lbnRzOworICAg
IEdUeXBlIHBhcmFtZXRlclR5cGUgPSBmaXJzdFBhcmFtZXRlclR5cGU7CisgICAgd2hpbGUgKHBh
cmFtZXRlclR5cGUgIT0gR19UWVBFX05PTkUpIHsKKyAgICAgICAgR1ZhbHVlIHBhcmFtZXRlcjsK
KyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBlcnJvcjsKKyAgICAgICAgR19WQUxVRV9DT0xM
RUNUX0lOSVQoJnBhcmFtZXRlciwgcGFyYW1ldGVyVHlwZSwgYXJncywgR19WQUxVRV9OT0NPUFlf
Q09OVEVOVFMsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAg
ICAgICAgZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9KUyhqc0NvbnRl
eHQpLCBtYWtlU3RyaW5nKCJmYWlsZWQgdG8gY29sbGVjdCBmdW5jdGlvbiBwYXJhbWF0ZXI6ICIs
IGVycm9yLmdldCgpKSkpOworICAgICAgICAgICAganNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQuZ2V0KCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8qIGpzVmFsdWUgPSBqc2NDb250ZXh0R1ZhbHVl
VG9KU1ZhbHVlKHByaXYtPmNvbnRleHQuZ2V0KCksICZwYXJhbWV0ZXIsICZleGNlcHRpb24pOwor
ICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZwYXJhbWV0ZXIpOworICAgICAgICBpZiAoanNjQ29udGV4
dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikp
CisgICAgICAgICAgICByZXR1cm4ganNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29u
dGV4dC5nZXQoKSwganNWYWx1ZSk7CisKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc1ZhbHVl
KTsKKyAgICAgICAgcGFyYW1ldGVyVHlwZSA9IHZhX2FyZyhhcmdzLCBHVHlwZSk7CisgICAgfQor
CisgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CisgICAgc3dpdGNoIChmdW5jdGlvblR5cGUpIHsKKyAg
ICBjYXNlIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6Q29uc3RydWN0b3I6CisgICAg
ICAgIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoanNDb250ZXh0LCBmdW5jdGlv
biwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpNZXRo
b2Q6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICBjYXNlIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6RnVuY3Rpb246
CisgICAgICAgIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LCBmdW5j
dGlvbiwgdGhpc09iamVjdCwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmRhdGEoKSwgJmV4
Y2VwdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoanNjQ29udGV4dEhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAg
ICAgIHJldHVybiBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29udGV4
dC5nZXQoKSkpOworCisgICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKHByaXYt
PmNvbnRleHQuZ2V0KCksIHJlc3VsdCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9p
bnZva2VfbWV0aG9kOgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQorICogQG5hbWU6IHRoZSBtZXRo
b2QgbmFtZQorICogQGZpcnN0X3BhcmFtZXRlcl90eXBlOiAjR1R5cGUgb2YgZmlyc3QgcGFyYW1l
dGVyLCBvciAlR19UWVBFX05PTkUKKyAqIEAuLi46IHZhbHVlIG9mIHRoZSBmaXJzdCBwYXJhbWV0
ZXIsIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSB0eXBlL3ZhbHVlIHBhaXJzLCBmb2xsb3dl
ZCBieSAlR19UWVBFX05PTkUKKyAqCisgKiBJbnZva2UgbWV0aG9kIHdpdGggQG5hbWUgb24gb2Jq
ZWN0IHJlZmVyZW5jZWQgYnkgQHZhbHVlLCBwYXNzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiBJ
ZgorICogQGZpcnN0X3BhcmFtZXRlcl90eXBlIGlzICVHX1RZUEVfTk9ORSBubyBwYXJhbWV0ZXJz
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtZXRob2QuCisgKiBUaGUgb2JqZWN0IGluc3RhbmNlIHdp
bGwgYmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGV2ZW4gd2hlbiB0aGUgbWV0aG9kIGlzIGEgY3Vz
dG9tIG9uZQorICogcmVnaXN0ZXJlZCB3aXRoIGpzY19jbGFzc19hZGRfbWV0aG9kKCksIHNvIGl0
IHNob3VsZCBuZXZlciBiZSBwYXNzZWQgZXhwbGljaXRseSBhcyBwYXJhbWV0ZXIKKyAqIG9mIHRo
aXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhICNKU0NW
YWx1ZSwgaW4gY2FzZSBvZiB2b2lkIG1ldGhvZHMgYSAjSlNDVmFsdWUgcmVmZXJlbmNpbmcKKyAq
IDxmdW5jdGlvbj51bmRlZmluZWQ8L2Z1bmN0aW9uPiBpcyByZXR1cm5lZC4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pTQ1ZhbHVlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBv
ZiB0aGUgbWV0aG9kLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0
aG9kKEpTQ1ZhbHVlKiB2YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgR1R5cGUgZmlyc3RQYXJhbWV0
ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZh
bHVlKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgbnVsbHB0cik7
CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBq
c0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOwor
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBvYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9u
KTsKKyAgICBpZiAoanNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRl
eHQuZ2V0KCksIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVm
aW5lZChwcml2LT5jb250ZXh0LmdldCgpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBtZXRob2ROYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7
CisgICAgSlNWYWx1ZVJlZiBmdW5jdGlvblZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShqc0Nv
bnRleHQsIG9iamVjdCwgbWV0aG9kTmFtZS5nZXQoKSwgJmV4Y2VwdGlvbik7CisgICAgaWYgKGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pKQorICAgICAgICByZXR1cm4ganNjX3ZhbHVlX25ld191bmRlZmluZWQocHJpdi0+Y29u
dGV4dC5nZXQoKSk7CisKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFsdWVUb09iamVj
dChqc0NvbnRleHQsIGZ1bmN0aW9uVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250
ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQu
Z2V0KCkpOworCisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFy
YW1ldGVyVHlwZSk7CisgICAgYXV0byByZXN1bHQgPSBqc2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1
ZSwgZnVuY3Rpb24sIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6TWV0aG9kLCBvYmpl
Y3QsIGZpcnN0UGFyYW1ldGVyVHlwZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAg
cmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7Cit9CisKKy8qKgorICogSlNDVmFsdWVQcm9wZXJ0eUZs
YWdzOgorICogQEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEU6IHRoZSB0eXBlIG9mIHRo
ZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG1heSBiZSBjaGFuZ2VkIGFuZCB0aGUKKyAqICBwcm9wZXJ0
eSBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdC4KKyAqIEBKU0Nf
VkFMVUVfUFJPUEVSVFlfRU5VTUVSQUJMRTogdGhlIHByb3BlcnR5IHNob3dzIHVwIGR1cmluZyBl
bnVtZXJhdGlvbiBvZiB0aGUgcHJvcGVydGllcyBvbgorICogIHRoZSBjb3JyZXNwb25kaW5nIG9i
amVjdC4KKyAqIEBKU0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEU6IHRoZSB2YWx1ZSBhc3NvY2lh
dGVkIHdpdGggdGhlIHByb3BlcnR5IG1heSBiZSBjaGFuZ2VkIHdpdGggYW4KKyAqICBhc3NpZ25t
ZW50IG9wZXJhdG9yLiBUaGlzIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IHdoZW4gcGFzc2VkIHRv
IGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29yKCkuCisgKgorICogRmxh
Z3MgdXNlZCB3aGVuIGRlZmluaW5nIHByb3BlcnRpZXMgd2l0aCBqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9kYXRhKCkgYW5kCisgKiBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9w
ZXJ0eV9hY2Nlc3NvcigpLgorICovCisKKy8qKgorICoganNjX3ZhbHVlX29iamVjdF9kZWZpbmVf
cHJvcGVydHlfZGF0YToKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqIEBwcm9wZXJ0eV9uYW1l
OiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGVmaW5lCisgKiBAZmxhZ3M6ICNKU0NWYWx1
ZVByb3BlcnR5RmxhZ3MKKyAqIEBwcm9wZXJ0eV92YWx1ZTogKG51bGxhYmxlKTogdGhlIGRlZmF1
bHQgcHJvcGVydHkgdmFsdWUKKyAqCisgKiBEZWZpbmUgb3IgbW9kaWZ5IGEgcHJvcGVydHkgd2l0
aCBAcHJvcGVydHlfbmFtZSBpbiBvYmplY3QgcmVmZXJlbmNlZCBieSBAdmFsdWUuIFRoaXMgaXMg
ZXF1aXZhbGVudCB0bworICogSmF2YVNjcmlwdCA8ZnVuY3Rpb24+T2JqZWN0LmRlZmluZVByb3Bl
cnR5KCk8L2Z1bmN0aW9uPiB3aGVuIHVzZWQgd2l0aCBhIGRhdGEgZGVzY3JpcHRvci4KKyAqLwor
dm9pZCBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKEpTQ1ZhbHVlKiB2YWx1
ZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0NWYWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3Ms
IEpTQ1ZhbHVlKiBwcm9wZXJ0eVZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoSlNDX0lT
X1ZBTFVFKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcm9wZXJ0eU5hbWUpOworCisg
ICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgR1JlZlB0cjxKU0NW
YWx1ZT4gZGVzY3JpcHRvciA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChwcml2LT5j
b250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
dHJ1ZVZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYm9vbGVhbihwcml2LT5jb250ZXh0
LmdldCgpLCBUUlVFKSk7CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX0NPTkZJ
R1VSQUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRv
ci5nZXQoKSwgImNvbmZpZ3VyYWJsZSIsIHRydWVWYWx1ZS5nZXQoKSk7CisgICAgaWYgKGZsYWdz
ICYgSlNDX1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUpCisgICAgICAgIGpzY192YWx1ZV9vYmpl
Y3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJlbnVtZXJhYmxlIiwgdHJ1ZVZhbHVl
LmdldCgpKTsKKyAgICBpZiAocHJvcGVydHlWYWx1ZSkKKyAgICAgICAganNjX3ZhbHVlX29iamVj
dF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5nZXQoKSwgInZhbHVlIiwgcHJvcGVydHlWYWx1ZSk7
CisgICAgaWYgKGZsYWdzICYgSlNDX1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKQorICAgICAgICBq
c2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAid3JpdGFibGUi
LCB0cnVlVmFsdWUuZ2V0KCkpOworICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgIk9iamVjdCIp
KTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9pbnZva2VfbWV0aG9kKG9iamVjdC5nZXQoKSwgImRlZmluZVByb3BlcnR5IiwKKyAgICAg
ICAgSlNDX1RZUEVfVkFMVUUsIHZhbHVlLCBHX1RZUEVfU1RSSU5HLCBwcm9wZXJ0eU5hbWUsIEpT
Q19UWVBFX1ZBTFVFLCBkZXNjcmlwdG9yLmdldCgpLCBHX1RZUEVfTk9ORSkpOworfQorCisvKioK
KyAqIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29yOgorICogQHZhbHVl
OiBhICNKU0NWYWx1ZQorICogQHByb3BlcnR5X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0
eSB0byBkZWZpbmUKKyAqIEBmbGFnczogI0pTQ1ZhbHVlUHJvcGVydHlGbGFncworICogQHByb3Bl
cnR5X3R5cGU6IHRoZSAjR1R5cGUgb2YgdGhlIHByb3BlcnR5CisgKiBAZ2V0dGVyOiAoc2NvcGUg
YXN5bmMpIChudWxsYWJsZSk6IGEgI0dDYWxsYmFjayB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoZSBw
cm9wZXJ0eSB2YWx1ZQorICogQHNldHRlcjogKHNjb3BlIGFzeW5jKSAobnVsbGFibGUpOiBhICNH
Q2FsbGJhY2sgdG8gYmUgY2FsbGVkIHRvIHNldCB0aGUgcHJvcGVydHkgdmFsdWUKKyAqIEB1c2Vy
X2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHRvIHBhc3MgdG8gQGdldHRlciBhbmQgQHNldHRl
cgorICogQGRlc3Ryb3lfbm90aWZ5OiAobnVsbGFibGUpOiBkZXN0cm95IG5vdGlmaWVyIGZvciBA
dXNlcl9kYXRhCisgKgorICogRGVmaW5lIG9yIG1vZGlmeSBhIHByb3BlcnR5IHdpdGggQHByb3Bl
cnR5X25hbWUgaW4gb2JqZWN0IHJlZmVyZW5jZWQgYnkgQHZhbHVlLiBXaGVuIHRoZQorICogcHJv
cGVydHkgdmFsdWUgbmVlZHMgdG8gYmUgZ2V0dGVkIG9yIHNldCwgQGdldHRlciBhbmQgQHNldHRl
ciBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQuCisgKiBXaGVuIHRoZSBwcm9wZXJ0eSBpcyBjbGVh
cmVkIGluIHRoZSAjSlNDQ2xhc3MgY29udGV4dCwgQGRlc3Ryb3lfbm90aWZ5IGlzIGNhbGxlZCB3
aXRoCisgKiBAdXNlcl9kYXRhIGFzIHBhcmFtZXRlci4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEph
dmFTY3JpcHQgPGZ1bmN0aW9uPk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpPC9mdW5jdGlvbj4KKyAq
IHdoZW4gdXNlZCB3aXRoIGFuIGFjY2Vzc29yIGRlc2NyaXB0b3IuCisgKi8KK3ZvaWQganNjX3Zh
bHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfYWNjZXNzb3IoSlNDVmFsdWUqIHZhbHVlLCBjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTQ1ZhbHVlUHJvcGVydHlGbGFncyBmbGFncywgR1R5cGUg
cHJvcGVydHlUeXBlLCBHQ2FsbGJhY2sgZ2V0dGVyLCBHQ2FsbGJhY2sgc2V0dGVyLCBncG9pbnRl
ciB1c2VyRGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveU5vdGlmeSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJv
cGVydHlOYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByb3BlcnR5VHlwZSAhPSBHX1RZUEVf
SU5WQUxJRCAmJiBwcm9wZXJ0eVR5cGUgIT0gR19UWVBFX05PTkUpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoZ2V0dGVyIHx8IHNldHRlcik7CisKKyAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2
YWx1ZS0+cHJpdjsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBkZXNjcmlwdG9yID0gYWRvcHRHUmVm
KGpzY192YWx1ZV9uZXdfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB0cnVlVmFsdWUgPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld19ib29sZWFuKHByaXYtPmNvbnRleHQuZ2V0KCksIFRSVUUpKTsKKyAgICBpZiAoZmxh
Z3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFKQorICAgICAgICBqc2NfdmFsdWVf
b2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9yLmdldCgpLCAiY29uZmlndXJhYmxlIiwgdHJ1
ZVZhbHVlLmdldCgpKTsKKyAgICBpZiAoZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfRU5VTUVS
QUJMRSkKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZGVzY3JpcHRvci5n
ZXQoKSwgImVudW1lcmFibGUiLCB0cnVlVmFsdWUuZ2V0KCkpOworCisgICAgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTKGpzY0NvbnRleHRHZXRKU0NvbnRleHQocHJpdi0+Y29udGV4dC5nZXQo
KSkpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOworICAgIGlmIChnZXR0ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3Vy
ZT4gY2xvc3VyZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhnZXR0ZXIsIHVzZXJEYXRhLCBy
ZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkpOworICAgICAg
ICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgiZ2V0
IiksCisgICAgICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1ldGhvZCwg
bnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgcHJvcGVydHlUeXBlLCB7IH0pKTsKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShw
cml2LT5jb250ZXh0LmdldCgpLCBmdW5jdGlvbk9iamVjdCk7CisgICAgICAgIGpzY192YWx1ZV9v
YmplY3Rfc2V0X3Byb3BlcnR5KGRlc2NyaXB0b3IuZ2V0KCksICJnZXQiLCBmdW5jdGlvbi5nZXQo
KSk7CisgICAgfQorICAgIGlmIChzZXR0ZXIpIHsKKyAgICAgICAgR1JlZlB0cjxHQ2xvc3VyZT4g
Y2xvc3VyZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhzZXR0ZXIsIHVzZXJEYXRhLCBnZXR0
ZXIgPyBudWxscHRyIDogcmVpbnRlcnByZXRfY2FzdDxHQ2xvc3VyZU5vdGlmeT4oZGVzdHJveU5v
dGlmeSkpKTsKKyAgICAgICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBB
U0NJSUxpdGVyYWwoInNldCIpLAorICAgICAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9u
OjpUeXBlOjpNZXRob2QsIG51bGxwdHIsIFdURk1vdmUoY2xvc3VyZSksIEdfVFlQRV9OT05FLCB7
IHByb3BlcnR5VHlwZSB9KSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0g
anNjQ29udGV4dEdldE9yQ3JlYXRlVmFsdWUocHJpdi0+Y29udGV4dC5nZXQoKSwgZnVuY3Rpb25P
YmplY3QpOworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShkZXNjcmlwdG9y
LmdldCgpLCAic2V0IiwgZnVuY3Rpb24uZ2V0KCkpOworICAgIH0KKyAgICBHUmVmUHRyPEpTQ1Zh
bHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKHByaXYtPmNvbnRl
eHQuZ2V0KCksICJPYmplY3QiKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52b2tlX21ldGhvZChvYmplY3QuZ2V0KCksICJkZWZp
bmVQcm9wZXJ0eSIsCisgICAgICAgIEpTQ19UWVBFX1ZBTFVFLCB2YWx1ZSwgR19UWVBFX1NUUklO
RywgcHJvcGVydHlOYW1lLCBKU0NfVFlQRV9WQUxVRSwgZGVzY3JpcHRvci5nZXQoKSwgR19UWVBF
X05PTkUpKTsKK30KKworLyoqCisgKiBqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uOgorICogQGNvbnRl
eHQ6IGEgI0pTQ0NvbnRleHQ6CisgKiBAbmFtZTogKG51bGxhYmxlKTogdGhlIGZ1bmN0aW9uIG5h
bWUgb3IgJU5VTEwKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0NhbGxiYWNrLgor
ICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBAY2FsbGJhY2su
CisgKiBAZGVzdHJveV9ub3RpZnk6IChudWxsYWJsZSk6IGRlc3Ryb3kgbm90aWZpZXIgZm9yIEB1
c2VyX2RhdGEKKyAqIEByZXR1cm5fdHlwZTogdGhlICNHVHlwZSBvZiB0aGUgZnVuY3Rpb24gcmV0
dXJuIHZhbHVlLCBvciAlR19UWVBFX05PTkUgaWYgdGhlIGZ1bmN0aW9uIGlzIHZvaWQuCisgKiBA
bl9wYXJhbXM6IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVyIHR5cGVzIHRvIGZvbGxvdyBvciAwIGlm
IHRoZSBmdW5jdGlvbiBkb2Vzbid0IHJlY2VpdmUgcGFyYW1ldGVycy4KKyAqIEAuLi46IGEgbGlz
dCBvZiAjR1R5cGU8IS0tIC0tPnMsIG9uZSBmb3IgZWFjaCBwYXJhbWV0ZXIuCisgKgorICogQ3Jl
YXRlIGEgZnVuY3Rpb24gaW4gQGNvbnRleHQuIElmIEBuYW1lIGlzICVOVUxMIGFuIGFub255bW91
cyBmdW5jdGlvbiB3aWxsIGJlIGNyZWF0ZWQuCisgKiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxs
ZWQgYnkgSmF2YVNjcmlwdCBvciBqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbCgpLCBAY2FsbGJhY2sg
aXMgY2FsbGVkCisgKiByZWNlaXZpbmcgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIHRoZW4g
QHVzZXJfZGF0YSBhcyBsYXN0IHBhcmFtZXRlci4gV2hlbiB0aGUgZnVuY3Rpb24gaXMKKyAqIGNs
ZWFyZWQgaW4gQGNvbnRleHQsIEBkZXN0cm95X25vdGlmeSBpcyBjYWxsZWQgd2l0aCBAdXNlcl9k
YXRhIGFzIHBhcmFtZXRlci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0pT
Q1ZhbHVlLgorICovCitKU0NWYWx1ZSoganNjX3ZhbHVlX25ld19mdW5jdGlvbihKU0NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBHQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVy
IHVzZXJEYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95Tm90aWZ5LCBHVHlwZSByZXR1cm5UeXBl
LCB1bnNpZ25lZCBwYXJhbUNvdW50LCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX0NPTlRFWFQoY29udGV4dCksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNhbGxiYWNrLCBudWxscHRyKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFy
dChhcmdzLCBwYXJhbUNvdW50KTsKKyAgICBWZWN0b3I8R1R5cGU+IHBhcmFtZXRlcnM7CisgICAg
aWYgKHBhcmFtQ291bnQpIHsKKyAgICAgICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhcmFtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1D
b3VudDsgKytpKQorICAgICAgICAgICAgcGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQodmFfYXJn
KGFyZ3MsIEdUeXBlKSk7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKKworICAgIEdSZWZQdHI8
R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXcoY2FsbGJhY2ssIHVz
ZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihkZXN0cm95Tm90aWZ5KSkp
OworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0
KGNvbnRleHQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpT
Qzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIG5hbWUgPyBTdHJpbmc6OmZyb21VVEY4KG5hbWUpIDogQVNDSUlMaXRlcmFsKCJhbm9u
eW1vdXMiKSwKKyAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpGdW5jdGlv
biwgbnVsbHB0ciwgV1RGTW92ZShjbG9zdXJlKSwgcmV0dXJuVHlwZSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSkpOworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250ZXh0LCBm
dW5jdGlvbk9iamVjdCkubGVha1JlZigpOworfQorCisvKioKKyAqIGpzY192YWx1ZV9pc19mdW5j
dGlvbjoKKyAqIEB2YWx1ZTogYSAjSlNDVmFsdWUKKyAqCisgKiBHZXQgd2hldGhlciB0aGUgdmFs
dWUgcmVmZXJlbmNlZCBieSBAdmFsdWUgaXMgYSBmdW5jdGlvbgorICoKKyAqIFJldHVybnM6IHdo
ZXRoZXIgdGhlIHZhbHVlIGlzIGEgZnVuY3Rpb24uCisgKi8KK2dib29sZWFuIGpzY192YWx1ZV9p
c19mdW5jdGlvbihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
SlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2
ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29u
dGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGpzQ29udGV4
dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJuICFleGNlcHRpb24gPyBK
U09iamVjdElzRnVuY3Rpb24oanNDb250ZXh0LCBvYmplY3QpIDogRkFMU0U7Cit9CisKKy8qKgor
ICoganNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGw6CisgKiBAdmFsdWU6IGEgI0pTQ1ZhbHVlCisgKiBA
Zmlyc3RfcGFyYW1ldGVyX3R5cGU6ICNHVHlwZSBvZiBmaXJzdCBwYXJhbWV0ZXIsIG9yICVHX1RZ
UEVfTk9ORQorICogQC4uLjogdmFsdWUgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciwgZm9sbG93ZWQg
b3B0aW9uYWxseSBieSBtb3JlIHR5cGUvdmFsdWUgcGFpcnMsIGZvbGxvd2VkIGJ5ICVHX1RZUEVf
Tk9ORQorICoKKyAqIENhbGwgZnVuY3Rpb24gcmVmZXJlbmNlZCBieSBAdmFsdWUsIHBhc3Npbmcg
dGhlIGdpdmVuIHBhcmFtZXRlcnMuIElmIEBmaXJzdF9wYXJhbWV0ZXJfdHlwZQorICogaXMgJUdf
VFlQRV9OT05FIG5vIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgor
ICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYSAjSlNDVmFsdWUsIGluIGNhc2Ug
b2Ygdm9pZCBmdW5jdGlvbnMgYSAjSlNDVmFsdWUgcmVmZXJlbmNpbmcKKyAqIDxmdW5jdGlvbj51
bmRlZmluZWQ8L2Z1bmN0aW9uPiBpcyByZXR1cm5lZAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogYSAjSlNDVmFsdWUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlv
bi4KKyAqLworSlNDVmFsdWUqIGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKEpTQ1ZhbHVlKiB2YWx1
ZSwgR1R5cGUgZmlyc3RQYXJhbWV0ZXJUeXBlLCAuLi4pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgbnVsbHB0cik7CisKKyAgICBKU0NWYWx1ZVByaXZh
dGUqIHByaXYgPSB2YWx1ZS0+cHJpdjsKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0
R2V0SlNDb250ZXh0KHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uID0gbnVsbHB0cjsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTVmFsdWVUb09iamVj
dChqc0NvbnRleHQsIHByaXYtPmpzVmFsdWUsICZleGNlcHRpb24pOworICAgIGlmIChqc2NDb250
ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIGpzY192YWx1ZV9uZXdfdW5kZWZpbmVkKHByaXYtPmNvbnRleHQu
Z2V0KCkpOworCisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0UGFy
YW1ldGVyVHlwZSk7CisgICAgYXV0byByZXN1bHQgPSBqc2NWYWx1ZUNhbGxGdW5jdGlvbih2YWx1
ZSwgZnVuY3Rpb24sIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6RnVuY3Rpb24sIG51
bGxwdHIsIGZpcnN0UGFyYW1ldGVyVHlwZSwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2lzX2Nv
bnN0cnVjdG9yOgorICogQHZhbHVlOiBhICNKU0NWYWx1ZQorICoKKyAqIEdldCB3aGV0aGVyIHRo
ZSB2YWx1ZSByZWZlcmVuY2VkIGJ5IEB2YWx1ZSBpcyBhIGNvbnN0cnVjdG9yLgorICoKKyAqIFJl
dHVybnM6IHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgY29uc3RydWN0b3IuCisgKi8KK2dib29sZWFu
IGpzY192YWx1ZV9pc19jb25zdHJ1Y3RvcihKU0NWYWx1ZSogdmFsdWUpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoSlNDX0lTX1ZBTFVFKHZhbHVlKSwgRkFMU0UpOworCisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNj
Q29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRv
T2JqZWN0KGpzQ29udGV4dCwgcHJpdi0+anNWYWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgcmV0dXJu
ICFleGNlcHRpb24gPyBKU09iamVjdElzQ29uc3RydWN0b3IoanNDb250ZXh0LCBvYmplY3QpIDog
RkFMU0U7Cit9CisKKy8qKgorICoganNjX3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGw6CisgKiBAdmFs
dWU6IGEgI0pTQ1ZhbHVlCisgKiBAZmlyc3RfcGFyYW1ldGVyX3R5cGU6ICNHVHlwZSBvZiBmaXJz
dCBwYXJhbWV0ZXIsIG9yICVHX1RZUEVfTk9ORQorICogQC4uLjogdmFsdWUgb2YgdGhlIGZpcnN0
IHBhcmFtZXRlciwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlIHR5cGUvdmFsdWUgcGFpcnMs
IGZvbGxvd2VkIGJ5ICVHX1RZUEVfTk9ORQorICoKKyAqIEludm9rZSA8ZnVuY3Rpb24+bmV3PC9m
dW5jdGlvbj4gd2l0aCBjb25zdHJ1Y3RvciByZWZlcmVuY2VkIGJ5IEB2YWx1ZS4gSWYgQGZpcnN0
X3BhcmFtZXRlcl90eXBlCisgKiBpcyAlR19UWVBFX05PTkUgbm8gcGFyYW1ldGVycyB3aWxsIGJl
IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBhICNKU0NWYWx1ZSByZWZlcmVuY2luZyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QgaW5z
dGFuY2UuCisgKi8KK0pTQ1ZhbHVlKiBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbChKU0NWYWx1
ZSogdmFsdWUsIEdUeXBlIGZpcnN0UGFyYW1ldGVyVHlwZSwgLi4uKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEpTQ19JU19WQUxVRSh2YWx1ZSksIG51bGxwdHIpOworCisgICAgSlNDVmFs
dWVQcml2YXRlKiBwcml2ID0gdmFsdWUtPnByaXY7CisgICAgYXV0byoganNDb250ZXh0ID0ganNj
Q29udGV4dEdldEpTQ29udGV4dChwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgSlNPYmplY3RSZWYgZnVuY3Rpb24gPSBKU1ZhbHVl
VG9PYmplY3QoanNDb250ZXh0LCBwcml2LT5qc1ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
anNjQ29udGV4dEhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHByaXYtPmNvbnRleHQuZ2V0KCksIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChwcml2LT5j
b250ZXh0LmdldCgpKTsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBm
aXJzdFBhcmFtZXRlclR5cGUpOworICAgIGF1dG8gcmVzdWx0ID0ganNjVmFsdWVDYWxsRnVuY3Rp
b24odmFsdWUsIGZ1bmN0aW9uLCBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6OkNvbnN0
cnVjdG9yLCBudWxscHRyLCBmaXJzdFBhcmFtZXRlclR5cGUsIGFyZ3MpOworICAgIHZhX2VuZChh
cmdzKTsKKworICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMDVmMWY5N2ExMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19KU0NfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoSlNDX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDxqc2MvanNjLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBKU0NWYWx1ZV9oCisj
ZGVmaW5lIEpTQ1ZhbHVlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
anNjL0pTQ0RlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEpTQ19UWVBFX1ZB
TFVFICAgICAgICAgICAgKGpzY192YWx1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBKU0NfVkFMVUUo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgSlNDX1RZ
UEVfVkFMVUUsIEpTQ1ZhbHVlKSkKKyNkZWZpbmUgSlNDX0lTX1ZBTFVFKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1ZBTFVFKSkKKyNkZWZp
bmUgSlNDX1ZBTFVFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZB
TFVFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEpTQ19U
WVBFX1ZBTFVFKSkKKyNkZWZpbmUgSlNDX1ZBTFVFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX1ZBTFVFLCBKU0NWYWx1ZUNsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX0pTQ1ZhbHVlIEpTQ1ZhbHVlOwordHlwZWRlZiBzdHJ1Y3QgX0pT
Q1ZhbHVlQ2xhc3MgSlNDVmFsdWVDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9KU0NWYWx1ZVByaXZh
dGUgSlNDVmFsdWVQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCBfSlNDQ2xhc3MgSlNDQ2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfSlNDQ29udGV4dCBKU0NDb250ZXh0OworCit0eXBlZGVmIGVudW0g
eworICAgIEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUgPSAxIDw8IDAsCisgICAgSlND
X1ZBTFVFX1BST1BFUlRZX0VOVU1FUkFCTEUgICA9IDEgPDwgMSwKKyAgICBKU0NfVkFMVUVfUFJP
UEVSVFlfV1JJVEFCTEUgICAgID0gMSA8PCAyCit9IEpTQ1ZhbHVlUHJvcGVydHlGbGFnczsKKwor
c3RydWN0IF9KU0NWYWx1ZSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBKU0NWYWx1ZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX0pTQ1ZhbHVl
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDEpICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNl
cnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworSlNDX0FQSSBKU0NDb250ZXh0ICoKK2pz
Y192YWx1ZV9nZXRfY29udGV4dCAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAg
ICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfdW5kZWZp
bmVkICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCk7CisK
K0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc191bmRlZmluZWQgICAgICAgICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoK
K2pzY192YWx1ZV9uZXdfbnVsbCAgICAgICAgICAgICAgICAgICAgICAgIChKU0NDb250ZXh0ICAg
ICAgICAgICAqY29udGV4dCk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19udWxs
ICAgICAgICAgICAgICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOwor
CitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9uZXdfbnVtYmVyICAgICAgICAgICAgICAg
ICAgICAgIChKU0NDb250ZXh0ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgICAgICAgICAgICAgICAgbnVtYmVyKTsK
K0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19udW1iZXIgICAgICAgICAgICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGRvdWJsZQoranNj
X3ZhbHVlX3RvX2RvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAg
ICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgZ2ludDMyCitqc2NfdmFsdWVfdG9faW50MzIgICAgICAg
ICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlKTsKKworSlNDX0FQ
SSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAo
SlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIHZhbHVlKTsKK0pTQ19BUEkg
Z2Jvb2xlYW4KK2pzY192YWx1ZV9pc19ib29sZWFuICAgICAgICAgICAgICAgICAgICAgIChKU0NW
YWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGdib29sZWFuCitqc2NfdmFsdWVf
dG9fYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZh
bHVlKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfbmV3X3N0cmluZyAgICAgICAg
ICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKnN0
cmluZyk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9pc19zdHJpbmcgICAgICAgICAg
ICAgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUpOworCitKU0NfQVBJIGNo
YXIgKgoranNjX3ZhbHVlX3RvX3N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVl
ICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25l
d19hcnJheSAgICAgICAgICAgICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAg
ICAgICAgICAgICAgICBmaXJzdF9pdGVtX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVf
bmV3X2FycmF5X2Zyb21fZ2FycmF5ICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1B0ckFy
cmF5ICAgICAgICAgICAgKmFycmF5KTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lz
X2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1
ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNjX3ZhbHVlX25ld19vYmplY3QgICAgICAgICAg
ICAgICAgICAgICAgKEpTQ0NvbnRleHQgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICBpbnN0
YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NDbGFz
cyAgICAgICAgICAgICAqanNjX2NsYXNzKTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVl
X2lzX29iamVjdCAgICAgICAgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2
YWx1ZSk7CisKK0pTQ19BUEkgZ2Jvb2xlYW4KK2pzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vf
b2YgICAgICAgICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUp
OworCitKU0NfQVBJIHZvaWQKK2pzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5ICAgICAgICAg
ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWUgICAgICAgICAgICAg
KnByb3BlcnR5KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfb2JqZWN0X2dldF9w
cm9wZXJ0eSAgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAg
ICpuYW1lKTsKKworSlNDX0FQSSB2b2lkCitqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9h
dF9pbmRleCAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBpbmRleCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NWYWx1ZSAgICAg
ICAgICAgICAqcHJvcGVydHkpOworCitKU0NfQVBJIEpTQ1ZhbHVlICoKK2pzY192YWx1ZV9vYmpl
Y3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4ICAgIChKU0NWYWx1ZSAgICAgICAgICAgICAqdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAg
ICAgICAgICAgIGluZGV4KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFsdWVfb2JqZWN0
X2ludm9rZV9tZXRob2QgICAgICAgICAgICAoSlNDVmFsdWUgICAgICAgICAgICAgKnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUeXBlICAgICAgICAgICAgICAgICBmaXJzdF9wYXJhbWV0ZXJfdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitKU0NfQVBJIHZvaWQKK2pz
Y192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEgICAgIChKU0NWYWx1ZSAgICAgICAg
ICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAgICAgICAgICAgKnByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNDVmFsdWVQcm9wZXJ0eUZsYWdzIGZsYWdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ1ZhbHVlICAgICAgICAg
ICAgICpwcm9wZXJ0eV92YWx1ZSk7CisKK0pTQ19BUEkgdm9pZAoranNjX3ZhbHVlX29iamVjdF9k
ZWZpbmVfcHJvcGVydHlfYWNjZXNzb3IgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAg
ICAgICAqcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBKU0NWYWx1ZVByb3BlcnR5RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgICAgIHByb3BlcnR5X3R5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbGxiYWNr
ICAgICAgICAgICAgIGdldHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQ2FsbGJhY2sgICAgICAgICAgICAgc2V0dGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3Rp
ZnkgICAgICAgIGRlc3Ryb3lfbm90aWZ5KTsKKworSlNDX0FQSSBKU0NWYWx1ZSAqCitqc2NfdmFs
dWVfbmV3X2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAoSlNDQ29udGV4dCAgICAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAgICAgICAgICAgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0NhbGxiYWNrICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2Vy
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ry
b3lOb3RpZnkgICAgICAgIGRlc3Ryb3lfbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICByZXR1cm5fdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAg
ICAgICAgbl9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKKworSlNDX0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX2Z1bmN0aW9uICAgICAg
ICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkg
SlNDVmFsdWUgKgoranNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwgICAgICAgICAgICAgICAgICAgKEpT
Q1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVHlwZSAgICAgICAgICAgICAgICAgZmlyc3RfcGFyYW1ldGVyX3R5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworSlND
X0FQSSBnYm9vbGVhbgoranNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAg
KEpTQ1ZhbHVlICAgICAgICAgICAgICp2YWx1ZSk7CisKK0pTQ19BUEkgSlNDVmFsdWUgKgoranNj
X3ZhbHVlX2NvbnN0cnVjdG9yX2NhbGwgICAgICAgICAgICAgICAgKEpTQ1ZhbHVlICAgICAgICAg
ICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VHlwZSAgICAgICAgICAgICAgICAgZmlyc3RfcGFyYW1ldGVyX3R5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIEpTQ1ZhbHVlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNjIxNDQzNTNmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvSlNDVmFsdWVQcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ1Zh
bHVlLmgiCisKK0pTVmFsdWVSZWYganNjVmFsdWVHZXRKU1ZhbHVlKEpTQ1ZhbHVlKik7CitKU0NW
YWx1ZSoganNjVmFsdWVDcmVhdGUoSlNDQ29udGV4dCosIEpTVmFsdWVSZWYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZlcnNpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZlcnNpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YmQ3YWE5YzgzNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWZXJzaW9uLmNwcApAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0NWZXJzaW9uLmgiCisKKy8qKgorICogU0VDVElPTjogSlNDVmVy
c2lvbgorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBQcm92aWRlcyB0aGUgSmF2YVNjcmlwdENvcmUg
dmVyc2lvbgorICogQFRpdGxlOiBKU0NWZXJzaW9uCisgKgorICogUHJvdmlkZXMgY29udmVuaWVu
Y2UgZnVuY3Rpb25zIHJldHVybmluZyBKYXZhU2NyaXB0Q29yZSdzIG1ham9yLCBtaW5vciBhbmQK
KyAqIG1pY3JvIHZlcnNpb25zIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5IHlvdXIgY29k
ZSBpcyBydW5uaW5nCisgKiBhZ2FpbnN0LiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft
ZSBhcyB0aGUKKyAqICNKU0NfTUFKT1JfVkVSU0lPTiwgI0pTQ19NSU5PUl9WRVJTSU9OIG9yCisg
KiAjSlNDX01JQ1JPX1ZFUlNJT04sIHdoaWNoIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBvZiB0aGUg
SmF2YVNjcmlwdENvcmUKKyAqIGhlYWRlcnMgaW5jbHVkZWQgd2hlbiBjb21waWxpbmcgdGhlIGNv
ZGUuCisgKgorICovCisKKy8qKgorICoganNjX2dldF9tYWpvcl92ZXJzaW9uOgorICoKKyAqIFJl
dHVybnMgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJy
YXJ5LgorICogKGUuZy4gaW4gSmF2YVNjcmlwdENvcmUgdmVyc2lvbiAxLjguMyB0aGlzIGlzIDEu
KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIGxpYnJhcnksIHNvIGl0IHJlcHJlc2Vu
dHMgdGhlIEphdmFTY3JpcHRDb3JlIGxpYnJhcnkKKyAqIHlvdXIgY29kZSBpcyBydW5uaW5nIGFn
YWluc3QuIENvbnRyYXN0IHdpdGggdGhlICNKU0NfTUFKT1JfVkVSU0lPTgorICogbWFjcm8sIHdo
aWNoIHJlcHJlc2VudHMgdGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIEphdmFTY3JpcHRDb3JlIGhl
YWRlcnMgeW91CisgKiBoYXZlIGluY2x1ZGVkIHdoZW4gY29tcGlsaW5nIHlvdXIgY29kZS4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEphdmFTY3JpcHRD
b3JlIGxpYnJhcnkKKyAqLworZ3VpbnQganNjX2dldF9tYWpvcl92ZXJzaW9uKHZvaWQpCit7Cisg
ICAgcmV0dXJuIEpTQ19NQUpPUl9WRVJTSU9OOworfQorCisvKioKKyAqIGpzY19nZXRfbWlub3Jf
dmVyc2lvbjoKKyAqCisgKiBSZXR1cm5zIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUg
SmF2YVNjcmlwdENvcmUgbGlicmFyeS4KKyAqIChlLmcuIGluIEphdmFTY3JpcHRDb3JlIHZlcnNp
b24gMS44LjMgdGhpcyBpcyA4LikKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGluIHRoZSBsaWJy
YXJ5LCBzbyBpdCByZXByZXNlbnRzIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5CisgKiB5b3Vy
IGNvZGUgaXMgcnVubmluZyBhZ2FpbnN0LiBDb250cmFzdCB3aXRoIHRoZSAjSlNDX01JTk9SX1ZF
UlNJT04KKyAqIG1hY3JvLCB3aGljaCByZXByZXNlbnRzIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRo
ZSBKYXZhU2NyaXB0Q29yZSBoZWFkZXJzIHlvdQorICogaGF2ZSBpbmNsdWRlZCB3aGVuIGNvbXBp
bGluZyB5b3VyIGNvZGUuCisgKgorICogUmV0dXJuczogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVy
IG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBsaWJyYXJ5CisgKi8KK2d1aW50IGpzY19nZXRfbWlub3Jf
dmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBKU0NfTUlOT1JfVkVSU0lPTjsKK30KKworLyoq
CisgKiBqc2NfZ2V0X21pY3JvX3ZlcnNpb246CisgKgorICogUmV0dXJucyB0aGUgbWljcm8gdmVy
c2lvbiBudW1iZXIgb2YgdGhlIEphdmFTY3JpcHRDb3JlIGxpYnJhcnkuCisgKiAoZS5nLiBpbiBK
YXZhU2NyaXB0Q29yZSB2ZXJzaW9uIDEuOC4zIHRoaXMgaXMgMy4pCisgKgorICogVGhpcyBmdW5j
dGlvbiBpcyBpbiB0aGUgbGlicmFyeSwgc28gaXQgcmVwcmVzZW50cyB0aGUgSmF2YVNjcmlwdENv
cmUgbGlicmFyeQorICogeW91ciBjb2RlIGlzIHJ1bm5pbmcgYWdhaW5zdC4gQ29udHJhc3Qgd2l0
aCB0aGUgI0pTQ19NSUNST19WRVJTSU9OCisgKiBtYWNybywgd2hpY2ggcmVwcmVzZW50cyB0aGUg
bWljcm8gdmVyc2lvbiBvZiB0aGUgSmF2YVNjcmlwdENvcmUgaGVhZGVycyB5b3UKKyAqIGhhdmUg
aW5jbHVkZWQgd2hlbiBjb21waWxpbmcgeW91ciBjb2RlLgorICoKKyAqIFJldHVybnM6IHRoZSBt
aWNybyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgSmF2YVNjcmlwdENvcmUgbGlicmFyeQorICovCitn
dWludCBqc2NfZ2V0X21pY3JvX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gSlNDX01JQ1JP
X1ZFUlNJT047Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmVyc2lvbi5oLmluIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZlcnNp
b24uaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDc5Zjk1M2Q4
ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
VmVyc2lvbi5oLmluCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEpT
Q19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNjL2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlNDVmVyc2lvbl9oCisjZGVmaW5lIEpTQ1Zl
cnNpb25faAorCisjaW5jbHVkZSA8anNjL0pTQ0RlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisvKioKKyAqIEpTQ19NQUpPUl9WRVJTSU9OOgorICoKKyAqIExpa2UganNjX2dldF9tYWpvcl92
ZXJzaW9uKCksIGJ1dCBmcm9tIHRoZSBoZWFkZXJzIHVzZWQgYXQKKyAqIGFwcGxpY2F0aW9uIGNv
bXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gZnJvbSB0aGUgbGlicmFyeSBsaW5rZWQKKyAqIGFnYWlu
c3QgYXQgYXBwbGljYXRpb24gcnVuIHRpbWUuCisgKi8KKyNkZWZpbmUgSlNDX01BSk9SX1ZFUlNJ
T04gKEBQUk9KRUNUX1ZFUlNJT05fTUFKT1JAKQorCisvKioKKyAqIEpTQ19NSU5PUl9WRVJTSU9O
OgorICoKKyAqIExpa2UganNjX2dldF9taW5vcl92ZXJzaW9uKCksIGJ1dCBmcm9tIHRoZSBoZWFk
ZXJzIHVzZWQgYXQKKyAqIGFwcGxpY2F0aW9uIGNvbXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gZnJv
bSB0aGUgbGlicmFyeSBsaW5rZWQKKyAqIGFnYWluc3QgYXQgYXBwbGljYXRpb24gcnVuIHRpbWUu
CisgKi8KKyNkZWZpbmUgSlNDX01JTk9SX1ZFUlNJT04gKEBQUk9KRUNUX1ZFUlNJT05fTUlOT1JA
KQorCisvKioKKyAqIEpTQ19NSUNST19WRVJTSU9OOgorICoKKyAqIExpa2UganNjX2dldF9taWNy
b192ZXJzaW9uKCksIGJ1dCBmcm9tIHRoZSBoZWFkZXJzIHVzZWQgYXQKKyAqIGFwcGxpY2F0aW9u
IGNvbXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gZnJvbSB0aGUgbGlicmFyeSBsaW5rZWQKKyAqIGFn
YWluc3QgYXQgYXBwbGljYXRpb24gcnVuIHRpbWUuCisgKi8KKyNkZWZpbmUgSlNDX01JQ1JPX1ZF
UlNJT04gKEBQUk9KRUNUX1ZFUlNJT05fTUlDUk9AKQorCisvKioKKyAqIEpTQ19DSEVDS19WRVJT
SU9OOgorICogQG1ham9yOiBtYWpvciB2ZXJzaW9uIChlLmcuIDEgZm9yIHZlcnNpb24gMS4yLjUp
CisgKiBAbWlub3I6IG1pbm9yIHZlcnNpb24gKGUuZy4gMiBmb3IgdmVyc2lvbiAxLjIuNSkKKyAq
IEBtaWNybzogbWljcm8gdmVyc2lvbiAoZS5nLiA1IGZvciB2ZXJzaW9uIDEuMi41KQorICoKKyAq
IFJldHVybnM6ICVUUlVFIGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBKYXZhU2NyaXB0Q29yZSBoZWFk
ZXIgZmlsZXMKKyAqIGlzIHRoZSBzYW1lIGFzIG9yIG5ld2VyIHRoYW4gdGhlIHBhc3NlZC1pbiB2
ZXJzaW9uLgorICovCisjZGVmaW5lIEpTQ19DSEVDS19WRVJTSU9OKG1ham9yLCBtaW5vciwgbWlj
cm8pIFwKKyAgICAoSlNDX01BSk9SX1ZFUlNJT04gPiAobWFqb3IpIHx8IFwKKyAgICAoSlNDX01B
Sk9SX1ZFUlNJT04gPT0gKG1ham9yKSAmJiBKU0NfTUlOT1JfVkVSU0lPTiA+IChtaW5vcikpIHx8
IFwKKyAgICAoSlNDX01BSk9SX1ZFUlNJT04gPT0gKG1ham9yKSAmJiBKU0NfTUlOT1JfVkVSU0lP
TiA9PSAobWlub3IpICYmIFwKKyAgICAgSlNDX01JQ1JPX1ZFUlNJT04gPj0gKG1pY3JvKSkpCisK
K0pTQ19BUEkgZ3VpbnQKK2pzY19nZXRfbWFqb3JfdmVyc2lvbiAodm9pZCk7CisKK0pTQ19BUEkg
Z3VpbnQKK2pzY19nZXRfbWlub3JfdmVyc2lvbiAodm9pZCk7CisKK0pTQ19BUEkgZ3VpbnQKK2pz
Y19nZXRfbWljcm9fdmVyc2lvbiAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBK
U0NWZXJzaW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xp
Yi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIv
SlNDVmlydHVhbE1hY2hpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45NDUxNTY2ZGY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworLyoqCisgKiBTRUNUSU9OOiBKU0NWaXJ0dWFsTWFjaGlu
ZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBKYXZhU2NyaXB0IFZpcnR1YWwgTWFjaGluZQorICog
QHRpdGxlOiBKU0NWaXJ0dWFsTWFjaGluZQorICogQHNlZV9hbHNvOiBKU0NDb250ZXh0CisgKgor
ICogSlNDVmlydHVhbE1hY2hpbmUgcmVwcmVzZW50cyBhIGdyb3VwIG9mIEpTQ0NvbnRleHQ8IS0t
IC0tPnMuIEl0IGFsbG93cworICogY29uY3VycmVudCBKYXZhU2NyaXB0IGV4ZXV0aW9uIGJ5IGNy
ZWF0aW5nIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mCisgKiBKU0NWaXJ0dWFsTWFjaGluZSBpbiBl
YWNoIHRocmVhZC4KKyAqCisgKiBUbyBjcmVhdGUgYSBncm91cCBvZiBKU0NDb250ZXh0PCEtLSAt
LT5zIHBhc3MgdGhlIHNhbWUgSlNDVmlydHVhbE1hY2hpbmUKKyAqIGluc3RhbmNlIHRvIGV2ZXJ5
IEpTQ0NvbnRleHQgY29uc3RydWN0b3IuCisgKi8KKworc3RydWN0IF9KU0NWaXJ0dWFsTWFjaGlu
ZVByaXZhdGUgeworICAgIEpTQ29udGV4dEdyb3VwUmVmIGpzQ29udGV4dEdyb3VwOworICAgIEhh
c2hNYXA8SlNHbG9iYWxDb250ZXh0UmVmLCBKU0NDb250ZXh0Kj4gY29udGV4dENhY2hlOworfTsK
KworV0VCS0lUX0RFRklORV9UWVBFKEpTQ1ZpcnR1YWxNYWNoaW5lLCBqc2NfdmlydHVhbF9tYWNo
aW5lLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgU3RhdGljTG9jayB3cmFwcGVyQ2FjaGVNdXRl
eDsKKworc3RhdGljIEhhc2hNYXA8SlNDb250ZXh0R3JvdXBSZWYsIEpTQ1ZpcnR1YWxNYWNoaW5l
Kj4mIHdyYXBwZXJNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEpT
Q29udGV4dEdyb3VwUmVmLCBKU0NWaXJ0dWFsTWFjaGluZSo+PiBtYXA7CisgICAgcmV0dXJuIG1h
cDsKK30KKworc3RhdGljIHZvaWQgYWRkV3JhcHBlcihKU0NvbnRleHRHcm91cFJlZiBncm91cCwg
SlNDVmlydHVhbE1hY2hpbmUqIHZtKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghd3JhcHBlck1h
cCgpLmNvbnRhaW5zKGdyb3VwKSk7CisgICAgd3JhcHBlck1hcCgpLnNldChncm91cCwgdm0pOwor
fQorCitzdGF0aWMgdm9pZCByZW1vdmVXcmFwcGVyKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwKQor
eworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJDYWNoZU11dGV4
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh3cmFwcGVyTWFwKCkuY29udGFpbnMoZ3JvdXApKTsKKyAg
ICB3cmFwcGVyTWFwKCkucmVtb3ZlKGdyb3VwKTsKK30KKworc3RhdGljIHZvaWQganNjVmlydHVh
bE1hY2hpbmVTZXRDb250ZXh0R3JvdXAoSlNDVmlydHVhbE1hY2hpbmUgKnZtLCBKU0NvbnRleHRH
cm91cFJlZiBncm91cCkKK3sKKyAgICBpZiAoZ3JvdXApIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgICAgIHZtLT5wcml2LT5qc0NvbnRl
eHRHcm91cCA9IGdyb3VwOworICAgICAgICBKU0NvbnRleHRHcm91cFJldGFpbih2bS0+cHJpdi0+
anNDb250ZXh0R3JvdXApOworICAgICAgICBhZGRXcmFwcGVyKHZtLT5wcml2LT5qc0NvbnRleHRH
cm91cCwgdm0pOworICAgIH0gZWxzZSBpZiAodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKSB7Cisg
ICAgICAgIHJlbW92ZVdyYXBwZXIodm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICAgICAg
SlNDb250ZXh0R3JvdXBSZWxlYXNlKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgICAg
IHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBqc2NWaXJ0dWFsTWFjaGluZUVuc3VyZUNvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGlu
ZSAqdm0pCit7CisgICAgaWYgKHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byoganNDb250ZXh0R3JvdXAgPSBKU0NvbnRleHRHcm91cENyZWF0ZSgp
OworICAgIGpzY1ZpcnR1YWxNYWNoaW5lU2V0Q29udGV4dEdyb3VwKHZtLCBqc0NvbnRleHRHcm91
cCk7CisgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGpzQ29udGV4dEdyb3VwKTsKK30KKworc3Rh
dGljIHZvaWQganNjVmlydHVhbE1hY2hpbmVEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBKU0NWaXJ0dWFsTWFjaGluZSogdm0gPSBKU0NfVklSVFVBTF9NQUNISU5FKG9iamVjdCk7Cisg
ICAganNjVmlydHVhbE1hY2hpbmVTZXRDb250ZXh0R3JvdXAodm0sIG51bGxwdHIpOworCisgICAg
R19PQkpFQ1RfQ0xBU1MoanNjX3ZpcnR1YWxfbWFjaGluZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3Nl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzY192aXJ0dWFsX21hY2hpbmVfY2xhc3NfaW5p
dChKU0NWaXJ0dWFsTWFjaGluZUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9i
akNsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIG9iakNsYXNzLT5kaXNwb3NlID0g
anNjVmlydHVhbE1hY2hpbmVEaXNwb3NlOworfQorCitHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5l
PiBqc2NWaXJ0dWFsTWFjaGluZUdldE9yQ3JlYXRlKEpTQ29udGV4dEdyb3VwUmVmIGpzQ29udGV4
dEdyb3VwKQoreworICAgIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gd3JhcHBlck1h
cCgpLmdldChqc0NvbnRleHRHcm91cCk7CisgICAgaWYgKCF2bSkgeworICAgICAgICB2bSA9IGFk
b3B0R1JlZihqc2NfdmlydHVhbF9tYWNoaW5lX25ldygpKTsKKyAgICAgICAganNjVmlydHVhbE1h
Y2hpbmVTZXRDb250ZXh0R3JvdXAodm0uZ2V0KCksIGpzQ29udGV4dEdyb3VwKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHZtOworfQorCitKU0NvbnRleHRHcm91cFJlZiBqc2NWaXJ0dWFsTWFjaGluZUdl
dENvbnRleHRHcm91cChKU0NWaXJ0dWFsTWFjaGluZSogdm0pCit7CisgICAganNjVmlydHVhbE1h
Y2hpbmVFbnN1cmVDb250ZXh0R3JvdXAodm0pOworICAgIHJldHVybiB2bS0+cHJpdi0+anNDb250
ZXh0R3JvdXA7Cit9CisKK3ZvaWQganNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0KEpTQ1ZpcnR1
YWxNYWNoaW5lKiB2bSwgSlNDQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS0+cHJpdi0+anNDb250ZXh0R3JvdXApOworICAgIGF1dG8ganNDb250ZXh0ID0ganNjQ29u
dGV4dEdldEpTQ29udGV4dChjb250ZXh0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NvbnRleHRH
ZXRHcm91cChqc0NvbnRleHQpID09IHZtLT5wcml2LT5qc0NvbnRleHRHcm91cCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIXZtLT5wcml2LT5jb250ZXh0Q2FjaGUuY29udGFpbnMoanNDb250ZXh0KSk7
CisgICAgdm0tPnByaXYtPmNvbnRleHRDYWNoZS5zZXQoanNDb250ZXh0LCBjb250ZXh0KTsKK30K
Kwordm9pZCBqc2NWaXJ0dWFsTWFjaGluZVJlbW92ZUNvbnRleHQoSlNDVmlydHVhbE1hY2hpbmUq
IHZtLCBKU0NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5wcml2
LT5qc0NvbnRleHRHcm91cCk7CisgICAgYXV0byBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlND
b250ZXh0KGNvbnRleHQpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ29udGV4dEdldEdyb3VwKGpz
Q29udGV4dCkgPT0gdm0tPnByaXYtPmpzQ29udGV4dEdyb3VwKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS0+cHJpdi0+Y29udGV4dENhY2hlLmNvbnRhaW5zKGpzQ29udGV4dCkpOworICAgIHZtLT5w
cml2LT5jb250ZXh0Q2FjaGUucmVtb3ZlKGpzQ29udGV4dCk7Cit9CisKK0pTQ0NvbnRleHQqIGpz
Y1ZpcnR1YWxNYWNoaW5lR2V0Q29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSogdm0sIEpTR2xvYmFs
Q29udGV4dFJlZiBqc0NvbnRleHQpCit7CisgICAgcmV0dXJuIHZtLT5wcml2LT5jb250ZXh0Q2Fj
aGUuZ2V0KGpzQ29udGV4dCk7Cit9CisKKy8qKgorICoganNjX3ZpcnR1YWxfbWFjaGluZV9uZXc6
CisgKgorICogQ3JlYXRlIGEgbmV3ICNKU0NWaXJ0dWFsTWFjaGluZS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXdseSBjcmVhdGVkICNKU0NWaXJ0dWFsTWFjaGluZS4K
KyAqLworSlNDVmlydHVhbE1hY2hpbmUqIGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkKK3sKKyAg
ICByZXR1cm4gSlNDX1ZJUlRVQUxfTUFDSElORShnX29iamVjdF9uZXcoSlNDX1RZUEVfVklSVFVB
TF9NQUNISU5FLCBudWxscHRyKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yNWM2NDNlMDliMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fSlNDX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEpTQ19DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8anNj
L2pzYy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgSlND
VmlydHVhbE1hY2hpbmVfaAorI2RlZmluZSBKU0NWaXJ0dWFsTWFjaGluZV9oCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGpzYy9KU0NEZWZpbmVzLmg+CisjaW5jbHVkZSA8
anNjL0pTQ1ZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBKU0NfVFlQRV9WSVJU
VUFMX01BQ0hJTkUgICAgICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGluZV9nZXRfdHlwZSgpKQor
I2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5FKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElORSwgSlNDVmlydHVh
bE1hY2hpbmUpKQorI2RlZmluZSBKU0NfSVNfVklSVFVBTF9NQUNISU5FKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEpTQ19UWVBFX1ZJUlRVQUxfTUFDSElO
RSkpCisjZGVmaW5lIEpTQ19WSVJUVUFMX01BQ0hJTkVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgSlNDX1RZUEVfVklSVFVBTF9NQUNISU5FLCBKU0NW
aXJ0dWFsTWFjaGluZUNsYXNzKSkKKyNkZWZpbmUgSlNDX0lTX1ZJUlRVQUxfTUFDSElORV9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBKU0NfVFlQRV9WSVJU
VUFMX01BQ0hJTkUpKQorI2RlZmluZSBKU0NfVklSVFVBTF9NQUNISU5FX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEpTQ19UWVBFX1ZJUlRVQUxfTUFD
SElORSwgSlNDVmlydHVhbE1hY2hpbmVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9KU0NWaXJ0
dWFsTWFjaGluZSBKU0NWaXJ0dWFsTWFjaGluZTsKK3R5cGVkZWYgc3RydWN0IF9KU0NWaXJ0dWFs
TWFjaGluZUNsYXNzIEpTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfSlND
VmlydHVhbE1hY2hpbmVQcml2YXRlIEpTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZTsKKworc3RydWN0
IF9KU0NWaXJ0dWFsTWFjaGluZSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJp
dmF0ZSA+Ki8KKyAgICBKU0NWaXJ0dWFsTWFjaGluZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX0pTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7CisKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX2pz
Y19yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDIpICh2b2lkKTsK
KyAgICB2b2lkICgqX2pzY19yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK0pTQ19BUEkgR1R5cGUK
K2pzY192aXJ0dWFsX21hY2hpbmVfZ2V0X3R5cGUgKHZvaWQpOworCitKU0NfQVBJIEpTQ1ZpcnR1
YWxNYWNoaW5lICoKK2pzY192aXJ0dWFsX21hY2hpbmVfbmV3ICAgICAgKHZvaWQpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogSlNDVmlydHVhbE1hY2hpbmVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZmM5ZTcwNzA0Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDQ29udGV4dC5o
IgorI2luY2x1ZGUgIkpTQ1ZpcnR1YWxNYWNoaW5lLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1Jl
ZlB0ci5oPgorCitHUmVmUHRyPEpTQ1ZpcnR1YWxNYWNoaW5lPiBqc2NWaXJ0dWFsTWFjaGluZUdl
dE9yQ3JlYXRlKEpTQ29udGV4dEdyb3VwUmVmKTsKK0pTQ29udGV4dEdyb3VwUmVmIGpzY1ZpcnR1
YWxNYWNoaW5lR2V0Q29udGV4dEdyb3VwKEpTQ1ZpcnR1YWxNYWNoaW5lKik7Cit2b2lkIGpzY1Zp
cnR1YWxNYWNoaW5lQWRkQ29udGV4dChKU0NWaXJ0dWFsTWFjaGluZSosIEpTQ0NvbnRleHQqKTsK
K3ZvaWQganNjVmlydHVhbE1hY2hpbmVSZW1vdmVDb250ZXh0KEpTQ1ZpcnR1YWxNYWNoaW5lKiwg
SlNDQ29udGV4dCopOworSlNDQ29udGV4dCoganNjVmlydHVhbE1hY2hpbmVHZXRDb250ZXh0KEpT
Q1ZpcnR1YWxNYWNoaW5lKiwgSlNHbG9iYWxDb250ZXh0UmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYjdiNjVkYzVjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAKQEAgLTAsMCArMSwx
MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQ1dyYXBwZXJNYXAuaCIKKworI2luY2x1ZGUgIkFQSUNhc3Qu
aCIKKyNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKKyNpbmNsdWRlICJKU0NDbGFzc1By
aXZhdGUuaCIKKyNpbmNsdWRlICJKU0NDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ0dM
aWJXcmFwcGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1dyYXBwZXJNYXA6OldyYXBwZXJNYXAoSlNHbG9iYWxDb250ZXh0UmVmIGpz
Q29udGV4dCkKKyAgICA6IG1fY2FjaGVkSlNXcmFwcGVycyhzdGQ6Om1ha2VfdW5pcXVlPEpTQzo6
V2Vha0dDTWFwPGdwb2ludGVyLCBKU0M6OkpTT2JqZWN0Pj4odG9KUyhqc0NvbnRleHQpLT52bSgp
KSkKK3sKK30KKworV3JhcHBlck1hcDo6fldyYXBwZXJNYXAoKQoreworICAgIGZvciAoY29uc3Qg
YXV0byYganNjQ2xhc3MgOiBtX2NsYXNzTWFwLnZhbHVlcygpKQorICAgICAgICBqc2NDbGFzc0lu
dmFsaWRhdGUoanNjQ2xhc3MuZ2V0KCkpOworfQorCitHUmVmUHRyPEpTQ1ZhbHVlPiBXcmFwcGVy
TWFwOjpnb2JqZWN0V3JhcHBlcihKU0NDb250ZXh0KiBqc2NDb250ZXh0LCBKU1ZhbHVlUmVmIGpz
VmFsdWUpCit7CisgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChq
c2NDb250ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhqc0NvbnRleHQp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0b0pTR2xvYmFsT2JqZWN0KGpzQ29udGV4dCktPndyYXBw
ZXJNYXAoKSA9PSB0aGlzKTsKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IG1fY2FjaGVk
R09iamVjdFdyYXBwZXJzLmdldChqc1ZhbHVlKTsKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAg
IHZhbHVlID0gYWRvcHRHUmVmKGpzY1ZhbHVlQ3JlYXRlKGpzY0NvbnRleHQsIGpzVmFsdWUpKTsK
KyAgICAgICAgbV9jYWNoZWRHT2JqZWN0V3JhcHBlcnMuc2V0KGpzVmFsdWUsIHZhbHVlLmdldCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIFdyYXBwZXJNYXA6OnVud3Jh
cChKU1ZhbHVlUmVmIGpzVmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jYWNoZWRHT2Jq
ZWN0V3JhcHBlcnMuY29udGFpbnMoanNWYWx1ZSkpOworICAgIG1fY2FjaGVkR09iamVjdFdyYXBw
ZXJzLnJlbW92ZShqc1ZhbHVlKTsKK30KKwordm9pZCBXcmFwcGVyTWFwOjpyZWdpc3RlckNsYXNz
KEpTQ0NsYXNzKiBqc2NDbGFzcykKK3sKKyAgICBhdXRvKiBqc0NsYXNzID0ganNjQ2xhc3NHZXRK
U0NsYXNzKGpzY0NsYXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jbGFzc01hcC5jb250YWlu
cyhqc0NsYXNzKSk7CisgICAgbV9jbGFzc01hcC5zZXQoanNDbGFzcywganNjQ2xhc3MpOworfQor
CitKU09iamVjdCogV3JhcHBlck1hcDo6Y3JlYXRlSlNXcmFwcHBlcihKU0dsb2JhbENvbnRleHRS
ZWYganNDb250ZXh0LCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTVmFsdWVSZWYgcHJvdG90eXBlLCBn
cG9pbnRlciB3cmFwcGVkT2JqZWN0LCBHRGVzdHJveU5vdGlmeSBkZXN0cm95RnVuY3Rpb24pCit7
CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0NvbnRleHQpLT53cmFwcGVy
TWFwKCkgPT0gdGhpcyk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7Cisg
ICAgYXV0byogb2JqZWN0ID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVy
T2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZSgpLCBqc0Ns
YXNzLCBudWxscHRyKTsKKyAgICBpZiAod3JhcHBlZE9iamVjdCkgeworICAgICAgICBvYmplY3Qt
PnNldFdyYXBwZWRPYmplY3QobmV3IEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3Qod3JhcHBlZE9i
amVjdCwgZGVzdHJveUZ1bmN0aW9uKSk7CisgICAgICAgIG1fY2FjaGVkSlNXcmFwcGVycy0+c2V0
KHdyYXBwZWRPYmplY3QsIG9iamVjdCk7CisgICAgfQorICAgIGlmIChwcm90b3R5cGUpCisgICAg
ICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGpzQ29udGV4dCwgdG9SZWYob2JqZWN0KSwgcHJvdG90
eXBlKTsKKyAgICBlbHNlIGlmIChhdXRvKiBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MtPnByb3RvdHlw
ZShleGVjKSkKKyAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGVEaXJlY3Qodm0sIGpzUHJvdG90
eXBlKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitKU09iamVjdCogV3JhcHBlck1hcDo6anNX
cmFwcGVyKGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0Cit7CisgICAgaWYgKCF3cmFwcGVk
T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jYWNoZWRKU1dy
YXBwZXJzLT5nZXQod3JhcHBlZE9iamVjdCk7Cit9CisKK2dwb2ludGVyIFdyYXBwZXJNYXA6Ondy
YXBwZWRPYmplY3QoSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYganNP
YmplY3QpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0Nv
bnRleHQpLT53cmFwcGVyTWFwKCkgPT0gdGhpcyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih0
b0pTKGpzQ29udGV4dCkpOworICAgIFZNJiB2bSA9IHRvSlMoanNDb250ZXh0KS0+dm0oKTsKKyAg
ICBhdXRvKiBvYmplY3QgPSB0b0pTKGpzT2JqZWN0KTsKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0
cyh2bSwgSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6aW5m
bygpKSkgeworICAgICAgICBpZiAoYXV0byogd3JhcHBlciA9IEpTQzo6anNDYXN0PEpTQzo6SlNB
UElXcmFwcGVyT2JqZWN0Kj4ob2JqZWN0KS0+d3JhcHBlZE9iamVjdCgpKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEpTQzo6SlNDR0xpYldyYXBwZXJPYmplY3QqPih3cmFwcGVyKS0+
b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFw
cGVyTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OGJmODI2Nzc5NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVy
TWFwLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0pTQ0NsYXNzIEpTQ0NsYXNzOwor
dHlwZWRlZiBzdHJ1Y3QgX0pTQ0NvbnRleHQgSlNDQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9K
U0NWYWx1ZSBKU0NWYWx1ZTsKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTT2JqZWN0Owor
CitjbGFzcyBXcmFwcGVyTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBXcmFwcGVyTWFwKEpTR2xvYmFsQ29udGV4dFJlZik7CisgICAgfldy
YXBwZXJNYXAoKTsKKworICAgIEdSZWZQdHI8SlNDVmFsdWU+IGdvYmplY3RXcmFwcGVyKEpTQ0Nv
bnRleHQqLCBKU1ZhbHVlUmVmKTsKKyAgICB2b2lkIHVud3JhcChKU1ZhbHVlUmVmKTsKKworICAg
IHZvaWQgcmVnaXN0ZXJDbGFzcyhKU0NDbGFzcyopOworCisgICAgSlNPYmplY3QqIGNyZWF0ZUpT
V3JhcHBwZXIoSlNHbG9iYWxDb250ZXh0UmVmLCBKU0NsYXNzUmVmLCBKU1ZhbHVlUmVmIHByb3Rv
dHlwZSwgZ3BvaW50ZXIsIEdEZXN0cm95Tm90aWZ5KTsKKyAgICBKU09iamVjdCoganNXcmFwcGVy
KGdwb2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0OworICAgIGdwb2ludGVyIHdyYXBwZWRPYmpl
Y3QoSlNHbG9iYWxDb250ZXh0UmVmLCBKU09iamVjdFJlZikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSGFzaE1hcDxKU1ZhbHVlUmVmLCBKU0NWYWx1ZSo+IG1fY2FjaGVkR09iamVjdFdyYXBwZXJz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OldlYWtHQ01hcDxncG9pbnRlciwgSlNDOjpKU09i
amVjdD4+IG1fY2FjaGVkSlNXcmFwcGVyczsKKyAgICBIYXNoTWFwPEpTQ2xhc3NSZWYsIEdSZWZQ
dHI8SlNDQ2xhc3M+PiBtX2NsYXNzTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAt
c2VjdGlvbnMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWds
aWItNC4wLXNlY3Rpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMWY3MzUzYTQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAtc2VjdGlvbnMudHh0CkBAIC0wLDAgKzEsMTY1IEBA
Cis8U0VDVElPTj4KKzxGSUxFPkpTQ1ZpcnR1YWxNYWNoaW5lPC9GSUxFPgorPFRJVExFPkpTQ1Zp
cnR1YWxNYWNoaW5lPC9USVRMRT4KK0pTQ1ZpcnR1YWxNYWNoaW5lCitqc2NfdmlydHVhbF9tYWNo
aW5lX25ldworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0pTQ1ZpcnR1YWxNYWNoaW5lQ2xhc3MK
K0pTQ19UWVBFX1ZJUlRVQUxfTUFDSElORQorSlNDX1ZJUlRVQUxfTUFDSElORQorSlNDX0lTX1ZJ
UlRVQUxfTUFDSElORQorSlNDX1ZJUlRVQUxfTUFDSElORV9DTEFTUworSlNDX0lTX1ZJUlRVQUxf
TUFDSElORV9DTEFTUworSlNDX1ZJUlRVQUxfTUFDSElORV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZQoranNjX3ZpcnR1YWxfbWFjaGlu
ZV9nZXRfdHlwZQorSlNDX0FQSQorSlNDX0RFUFJFQ0FURUQKK0pTQ19ERVBSRUNBVEVEX0ZPUgor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPkpTQ0NvbnRleHQ8L0ZJTEU+Cis8VElUTEU+
SlNDQ29udGV4dDwvVElUTEU+CitKU0NDb250ZXh0CitKU0NFeGNlcHRpb25IYW5kbGVyCitqc2Nf
Y29udGV4dF9uZXcKK2pzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZQoranNjX2Nv
bnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZQoranNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbgoranNj
X2NvbnRleHRfdGhyb3cKK2pzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbgoranNjX2NvbnRleHRf
cHVzaF9leGNlcHRpb25faGFuZGxlcgoranNjX2NvbnRleHRfcG9wX2V4Y2VwdGlvbl9oYW5kbGVy
Citqc2NfY29udGV4dF9nZXRfY3VycmVudAoranNjX2NvbnRleHRfZXZhbHVhdGUKK2pzY19jb250
ZXh0X2V2YWx1YXRlX3dpdGhfc291cmNlX3VyaQoranNjX2NvbnRleHRfc2V0X3ZhbHVlCitqc2Nf
Y29udGV4dF9nZXRfdmFsdWUKK2pzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorSlNDQ29udGV4dENsYXNzCitKU0NfVFlQRV9DT05URVhUCitKU0NfQ09O
VEVYVAorSlNDX0lTX0NPTlRFWFQKK0pTQ19DT05URVhUX0NMQVNTCitKU0NfSVNfQ09OVEVYVF9D
TEFTUworSlNDX0NPTlRFWFRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitKU0ND
b250ZXh0UHJpdmF0ZQoranNjX2NvbnRleHRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5KU0NWYWx1ZTwvRklMRT4KKzxUSVRMRT5KU0NWYWx1ZTwvVElUTEU+CitKU0NW
YWx1ZQorSlNDVmFsdWVQcm9wZXJ0eUZsYWdzCitqc2NfdmFsdWVfZ2V0X2NvbnRleHQKK2pzY192
YWx1ZV9uZXdfdW5kZWZpbmVkCitqc2NfdmFsdWVfaXNfdW5kZWZpbmVkCitqc2NfdmFsdWVfbmV3
X251bGwKK2pzY192YWx1ZV9pc19udWxsCitqc2NfdmFsdWVfbmV3X251bWJlcgoranNjX3ZhbHVl
X2lzX251bWJlcgoranNjX3ZhbHVlX3RvX2RvdWJsZQoranNjX3ZhbHVlX3RvX2ludDMyCitqc2Nf
dmFsdWVfbmV3X2Jvb2xlYW4KK2pzY192YWx1ZV9pc19ib29sZWFuCitqc2NfdmFsdWVfdG9fYm9v
bGVhbgoranNjX3ZhbHVlX25ld19zdHJpbmcKK2pzY192YWx1ZV9pc19zdHJpbmcKK2pzY192YWx1
ZV90b19zdHJpbmcKK2pzY192YWx1ZV9uZXdfYXJyYXkKK2pzY192YWx1ZV9uZXdfYXJyYXlfZnJv
bV9nYXJyYXkKK2pzY192YWx1ZV9pc19hcnJheQoranNjX3ZhbHVlX25ld19vYmplY3QKK2pzY192
YWx1ZV9pc19vYmplY3QKK2pzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YKK2pzY192YWx1
ZV9vYmplY3Rfc2V0X3Byb3BlcnR5Citqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eQoranNj
X3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgKK2pzY192YWx1ZV9vYmplY3RfZ2V0
X3Byb3BlcnR5X2F0X2luZGV4Citqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QKK2pzY192
YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEKK2pzY192YWx1ZV9vYmplY3RfZGVmaW5l
X3Byb3BlcnR5X2FjY2Vzc29yCitqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uCitqc2NfdmFsdWVfaXNf
ZnVuY3Rpb24KK2pzY192YWx1ZV9mdW5jdGlvbl9jYWxsCitqc2NfdmFsdWVfaXNfY29uc3RydWN0
b3IKK2pzY192YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
SlNDVmFsdWVDbGFzcworSlNDX1RZUEVfVkFMVUUKK0pTQ19WQUxVRQorSlNDX0lTX1ZBTFVFCitK
U0NfVkFMVUVfQ0xBU1MKK0pTQ19JU19WQUxVRV9DTEFTUworSlNDX1ZBTFVFX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgorSlNDVmFsdWVQcml2YXRlCitqc2NfdmFsdWVfZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5KU0NFeGNlcHRpb248L0ZJTEU+Cis8
VElUTEU+SlNDRXhjZXB0aW9uPC9USVRMRT4KK0pTQ0V4Y2VwdGlvbgoranNjX2V4Y2VwdGlvbl9u
ZXcKK2pzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UKK2pzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVt
YmVyCitqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorSlNDRXhjZXB0aW9uQ2xhc3MKK0pTQ19UWVBFX0VYQ0VQVElPTgorSlNDX0VYQ0VQVElPTgor
SlNDX0lTX0VYQ0VQVElPTgorSlNDX0VYQ0VQVElPTl9DTEFTUworSlNDX0lTX0VYQ0VQVElPTl9D
TEFTUworSlNDX0VYQ0VQVElPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0pT
Q0V4Y2VwdGlvblByaXZhdGUKK2pzY19leGNlcHRpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5KU0NDbGFzczwvRklMRT4KKzxUSVRMRT5KU0NDbGFzczwvVElUTEU+
CitKU0NDbGFzcworanNjX2NsYXNzX2dldF9uYW1lCitqc2NfY2xhc3NfZ2V0X3BhcmVudAoranNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3RvcgoranNjX2NsYXNzX2FkZF9tZXRob2QKK2pzY19jbGFzc19h
ZGRfcHJvcGVydHkKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitKU0NfVFlQRV9DTEFTUworSlND
X0NMQVNTCitKU0NfSVNfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2pzY19jbGFzc19n
ZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPkpTQ1ZlcnNpb248L0ZJTEU+
Cis8VElUTEU+SlNDVmVyc2lvbjwvVElUTEU+Citqc2NfZ2V0X21ham9yX3ZlcnNpb24KK2pzY19n
ZXRfbWlub3JfdmVyc2lvbgoranNjX2dldF9taWNyb192ZXJzaW9uCisKKzxTVUJTRUNUSU9OPgor
SlNDX01BSk9SX1ZFUlNJT04KK0pTQ19NSU5PUl9WRVJTSU9OCitKU0NfTUlDUk9fVkVSU0lPTgor
SlNDX0NIRUNLX1ZFUlNJT04KKzwvU0VDVElPTj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC50eXBlcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvZ2xpYi9kb2NzL2pzYy1nbGliLTQuMC50eXBlcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzgwYTc2ZjNmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi00LjAudHlwZXMKQEAg
LTAsMCArMSw2IEBACisjaW5jbHVkZSA8anNjL2pzYy5oPgoranNjX3ZpcnR1YWxfbWFjaGluZV9n
ZXRfdHlwZQoranNjX2NvbnRleHRfZ2V0X3R5cGUKK2pzY192YWx1ZV9nZXRfdHlwZQoranNjX2V4
Y2VwdGlvbl9nZXRfdHlwZQoranNjX2NsYXNzX2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi1kb2NzLnNnbWwgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvZG9jcy9qc2MtZ2xpYi1kb2NzLnNnbWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFjNTMyYjBjMTEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2RvY3MvanNjLWdsaWItZG9jcy5z
Z21sCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGJv
b2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisgICAgICAg
ICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3gu
ZHRkIiBbCis8IUVOVElUWSB2ZXJzaW9uIFNZU1RFTSAidmVyc2lvbi54bWwiPgorXT4KKzxib29r
IGlkPSJpbmRleCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiPgor
ICA8Ym9va2luZm8+CisgICAgPHRpdGxlPkphdmFTY3JpcHRDb3JlIEdMaWIgUmVmZXJlbmNlIE1h
bnVhbDwvdGl0bGU+CisgICAgPHJlbGVhc2VpbmZvPmZvciBKYXZhU2NyaXB0Q29yZSAmdmVyc2lv
bjs8L3JlbGVhc2VpbmZvPgorICA8L2Jvb2tpbmZvPgorCisgIDxjaGFwdGVyPgorICAgIDx0aXRs
ZT5DbGFzcyBPdmVydmlldzwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL0pTQ1Zp
cnR1YWxNYWNoaW5lLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9KU0NDb250ZXh0
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9KU0NWYWx1ZS54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvSlNDRXhjZXB0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9KU0NDbGFzcy54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvSlND
VmVyc2lvbi54bWwiLz4KKyAgPC9jaGFwdGVyPgorCisgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4K
KyAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICA8L2luZGV4PgorCisgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNs
dWRlPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGli
L2pzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL2pzYy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iN2NlYWVmMGIzZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9qc2MuaApAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19KU0NfSF9f
CisjZGVmaW5lIF9fSlNDX0hfXworCisjZGVmaW5lIF9fSlNDX0hfSU5TSURFX18KKworI2luY2x1
ZGUgPGpzYy9KU0NDbGFzcy5oPgorI2luY2x1ZGUgPGpzYy9KU0NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8anNjL0pTQ0RlZmluZXMuaD4KKyNpbmNsdWRlIDxqc2MvSlNDRXhjZXB0aW9uLmg+CisjaW5j
bHVkZSA8anNjL0pTQ1ZhbHVlLmg+CisjaW5jbHVkZSA8anNjL0pTQ1ZlcnNpb24uaD4KKyNpbmNs
dWRlIDxqc2MvSlNDVmlydHVhbE1hY2hpbmUuaD4KKworI2luY2x1ZGUgPGpzYy9KU0NBdXRvY2xl
YW51cHMuaD4KKworI3VuZGVmIF9fSlNDX0hfSU5TSURFX18KKworI2VuZGlmIC8qIF9fSlNDX0hf
XyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY3NTExMzUzYWU3Li5m
M2Y5OTQxNDFjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTIxMCw3
ICsxMjEwLDcgQEAgZW5kaWYgKCkKICMgRm9yY2Ugc3RhZ2luZyBvZiBzaGFyZWQgc2NyaXB0cywg
ZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJlY3RseSB1c2VkIHRvIGJ1aWxkIEphdmFTY3JpcHRDb3Jl
LgogCiBhZGRfY3VzdG9tX3RhcmdldChzdGFnZVNoYXJlZFNjcmlwdHMgREVQRU5EUyAke0phdmFT
Y3JpcHRDb3JlX1NDUklQVFN9KQotYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFn
ZVNoYXJlZFNjcmlwdHMpCithZGRfZGVwZW5kZW5jaWVzKEphdmFTY3JpcHRDb3JlIHN0YWdlU2hh
cmVkU2NyaXB0cyAke0phdmFTY3JpcHRDb3JlX0VYVFJBX0RFUEVOREVOQ0lFU30pCiAKIGlmIChN
U1ZDKQogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4
IGQwYzk3ODNhOTAwLi4wZTRlMmFiMmZlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjA2IEBACisyMDE4LTAzLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgSmF2YVNjcmlwdENvcmUgZ2xpYiBiaW5kaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGluaXRpYWwgR0xpYiBBUEkgZm9yIEphdmFTY3Jp
cHRDb3JlLgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oOgorICAgICAgICAq
IEFQSS9nbGliL0pTQVBJV3JhcHBlck9iamVjdEdMaWIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGpz
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9iamVj
dEhhbmRsZU93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0FQSVdyYXBwZXJPYmplY3RIYW5k
bGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTQVBJV3JhcHBlck9iamVjdDo6SlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQVBJV3JhcHBlck9iamVjdDo6c2V0V3JhcHBlZE9iamVjdCk6CisgICAgICAgIChKU0M6
OkpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogQVBJL2dsaWIv
SlNDQXV0b2NsZWFudXBzLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NhbGxiYWNr
RnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y2FsbEFzRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpjYWxsQXNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNr
RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OkpT
Q0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpj
YWxsKToKKyAgICAgICAgKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ2FsbGJhY2tGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNDQ2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDQ2FsbGJh
Y2tGdW5jdGlvbjo6ZnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNr
RnVuY3Rpb246OmNvbnN0cnVjdENhbGxiYWNrKToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDbGFz
cy5jcHA6IEFkZGVkLgorICAgICAgICAoanNjQ2xhc3NHZXRQcm9wZXJ0eSk6CisgICAgICAgIChq
c2NDbGFzc1NldFByb3BlcnR5KToKKyAgICAgICAgKGpzY0NsYXNzRGlzcG9zZSk6CisgICAgICAg
IChqc2NDbGFzc0NvbnN0cnVjdGVkKToKKyAgICAgICAgKGpzY19jbGFzc19jbGFzc19pbml0KToK
KyAgICAgICAgKGpzY0NsYXNzQ3JlYXRlKToKKyAgICAgICAgKGpzY0NsYXNzR2V0SlNDbGFzcyk6
CisgICAgICAgIChqc2NDbGFzc0dldE9yQ3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKGpzY0Ns
YXNzSW52YWxpZGF0ZSk6CisgICAgICAgIChqc2NfY2xhc3NfZ2V0X25hbWUpOgorICAgICAgICAo
anNjX2NsYXNzX2dldF9wYXJlbnQpOgorICAgICAgICAoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rv
cik6CisgICAgICAgIChqc2NfY2xhc3NfYWRkX21ldGhvZCk6CisgICAgICAgIChqc2NfY2xhc3Nf
YWRkX3Byb3BlcnR5KToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NDbGFzcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9KU0NDbGFzc1ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoRXhjZXB0aW9uSGFuZGxlcjo6
RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChFeGNlcHRpb25IYW5kbGVyOjp+RXhjZXB0aW9u
SGFuZGxlcik6CisgICAgICAgIChqc2NDb250ZXh0U2V0VmlydHVhbE1hY2hpbmUpOgorICAgICAg
ICAoanNjQ29udGV4dEdldFByb3BlcnR5KToKKyAgICAgICAgKGpzY0NvbnRleHRTZXRQcm9wZXJ0
eSk6CisgICAgICAgIChqc2NDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAoanNjQ29udGV4
dERpc3Bvc2UpOgorICAgICAgICAoanNjX2NvbnRleHRfY2xhc3NfaW5pdCk6CisgICAgICAgIChq
c2NDb250ZXh0R2V0T3JDcmVhdGUpOgorICAgICAgICAoanNjQ29udGV4dEdldEpTQ29udGV4dCk6
CisgICAgICAgICh3cmFwcGVyTWFwKToKKyAgICAgICAgKGpzY0NvbnRleHRHZXRPckNyZWF0ZVZh
bHVlKToKKyAgICAgICAgKGpzY0NvbnRleHRWYWx1ZURlc3Ryb3llZCk6CisgICAgICAgIChqc2ND
b250ZXh0R2V0SlNXcmFwcGVyKToKKyAgICAgICAgKGpzY0NvbnRleHRHZXRPckNyZWF0ZUpTV3Jh
cHBlcik6CisgICAgICAgIChqc2NDb250ZXh0V3JhcHBlZE9iamVjdCk6CisgICAgICAgIChqc2ND
b250ZXh0UHVzaENhbGxiYWNrKToKKyAgICAgICAgKGpzY0NvbnRleHRQb3BDYWxsYmFjayk6Cisg
ICAgICAgIChqc2NDb250ZXh0R0FycmF5VG9KU0FycmF5KToKKyAgICAgICAgKGpzY0NvbnRleHRK
U0FycmF5VG9HQXJyYXkpOgorICAgICAgICAoanNjQ29udGV4dEdWYWx1ZVRvSlNWYWx1ZSk6Cisg
ICAgICAgIChqc2NDb250ZXh0SlNWYWx1ZVRvR1ZhbHVlKToKKyAgICAgICAgKGpzY19jb250ZXh0
X25ldyk6CisgICAgICAgIChqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUpOgor
ICAgICAgICAoanNjX2NvbnRleHRfZ2V0X3ZpcnR1YWxfbWFjaGluZSk6CisgICAgICAgIChqc2Nf
Y29udGV4dF9nZXRfZXhjZXB0aW9uKToKKyAgICAgICAgKGpzY19jb250ZXh0X3Rocm93KToKKyAg
ICAgICAgKGpzY19jb250ZXh0X3Rocm93X2V4Y2VwdGlvbik6CisgICAgICAgIChqc2NfY29udGV4
dF9wdXNoX2V4Y2VwdGlvbl9oYW5kbGVyKToKKyAgICAgICAgKGpzY19jb250ZXh0X3BvcF9leGNl
cHRpb25faGFuZGxlcik6CisgICAgICAgIChqc2NDb250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQpOgorICAgICAgICAoanNjX2NvbnRleHRfZ2V0X2N1cnJlbnQpOgorICAgICAgICAoanNjX2Nv
bnRleHRfZXZhbHVhdGUpOgorICAgICAgICAoanNjX2NvbnRleHRfZXZhbHVhdGVfd2l0aF9zb3Vy
Y2VfdXJpKToKKyAgICAgICAgKGpzY19jb250ZXh0X3NldF92YWx1ZSk6CisgICAgICAgIChqc2Nf
Y29udGV4dF9nZXRfdmFsdWUpOgorICAgICAgICAoanNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mp
OgorICAgICAgICAqIEFQSS9nbGliL0pTQ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDQ29udGV4dFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvSlND
RGVmaW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3Jh
cHBlck9iamVjdC5oLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoanNjRXhjZXB0aW9uRGlzcG9zZSk6CisgICAgICAgIChqc2NfZXhjZXB0aW9u
X2NsYXNzX2luaXQpOgorICAgICAgICAoanNjRXhjZXB0aW9uQ3JlYXRlKToKKyAgICAgICAgKGpz
Y0V4Y2VwdGlvbkdldEpTVmFsdWUpOgorICAgICAgICAoanNjRXhjZXB0aW9uRW5zdXJlUHJvcGVy
dGllcyk6CisgICAgICAgIChqc2NfZXhjZXB0aW9uX25ldyk6CisgICAgICAgIChqc2NfZXhjZXB0
aW9uX2dldF9tZXNzYWdlKToKKyAgICAgICAgKGpzY19leGNlcHRpb25fZ2V0X2xpbmVfbnVtYmVy
KToKKyAgICAgICAgKGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkpOgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ0V4Y2VwdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NFeGNl
cHRpb25Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL0pTQ0dMaWJXcmFwcGVy
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0NHTGliV3JhcHBlck9iamVjdDo6SlND
R0xpYldyYXBwZXJPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NHTGliV3JhcHBlck9iamVjdDo6
fkpTQ0dMaWJXcmFwcGVyT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDR0xpYldyYXBwZXJPYmpl
Y3Q6Om9iamVjdCBjb25zdCk6CisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKGpzY1ZhbHVlR2V0UHJvcGVydHkpOgorICAgICAgICAoanNjVmFsdWVTZXRQ
cm9wZXJ0eSk6CisgICAgICAgIChqc2NWYWx1ZURpc3Bvc2UpOgorICAgICAgICAoanNjX3ZhbHVl
X2NsYXNzX2luaXQpOgorICAgICAgICAoanNjVmFsdWVHZXRKU1ZhbHVlKToKKyAgICAgICAgKGpz
Y1ZhbHVlQ3JlYXRlKToKKyAgICAgICAgKGpzY192YWx1ZV9nZXRfY29udGV4dCk6CisgICAgICAg
IChqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZCk6CisgICAgICAgIChqc2NfdmFsdWVfaXNfdW5kZWZp
bmVkKToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfbnVsbCk6CisgICAgICAgIChqc2NfdmFsdWVf
aXNfbnVsbCk6CisgICAgICAgIChqc2NfdmFsdWVfbmV3X251bWJlcik6CisgICAgICAgIChqc2Nf
dmFsdWVfaXNfbnVtYmVyKToKKyAgICAgICAgKGpzY192YWx1ZV90b19kb3VibGUpOgorICAgICAg
ICAoanNjX3ZhbHVlX3RvX2ludDMyKToKKyAgICAgICAgKGpzY192YWx1ZV9uZXdfYm9vbGVhbik6
CisgICAgICAgIChqc2NfdmFsdWVfaXNfYm9vbGVhbik6CisgICAgICAgIChqc2NfdmFsdWVfdG9f
Ym9vbGVhbik6CisgICAgICAgIChqc2NfdmFsdWVfbmV3X3N0cmluZyk6CisgICAgICAgIChqc2Nf
dmFsdWVfaXNfc3RyaW5nKToKKyAgICAgICAgKGpzY192YWx1ZV90b19zdHJpbmcpOgorICAgICAg
ICAoanNjX3ZhbHVlX25ld19hcnJheSk6CisgICAgICAgIChqc2NfdmFsdWVfbmV3X2FycmF5X2Zy
b21fZ2FycmF5KToKKyAgICAgICAgKGpzY192YWx1ZV9pc19hcnJheSk6CisgICAgICAgIChqc2Nf
dmFsdWVfbmV3X29iamVjdCk6CisgICAgICAgIChqc2NfdmFsdWVfaXNfb2JqZWN0KToKKyAgICAg
ICAgKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YpOgorICAgICAgICAoanNjX3ZhbHVl
X29iamVjdF9zZXRfcHJvcGVydHkpOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJv
cGVydHkpOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgp
OgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgpOgorICAg
ICAgICAoanNjVmFsdWVDYWxsRnVuY3Rpb24pOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9p
bnZva2VfbWV0aG9kKToKKyAgICAgICAgKGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5
X2RhdGEpOgorICAgICAgICAoanNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfYWNjZXNz
b3IpOgorICAgICAgICAoanNjX3ZhbHVlX25ld19mdW5jdGlvbik6CisgICAgICAgIChqc2NfdmFs
dWVfaXNfZnVuY3Rpb24pOgorICAgICAgICAoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwpOgorICAg
ICAgICAoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKToKKyAgICAgICAgKGpzY192YWx1ZV9jb25z
dHJ1Y3Rvcl9jYWxsKToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9KU0NWYWx1ZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogQVBJ
L2dsaWIvSlNDVmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoanNjX2dldF9tYWpvcl92ZXJz
aW9uKToKKyAgICAgICAgKGpzY19nZXRfbWlub3JfdmVyc2lvbik6CisgICAgICAgIChqc2NfZ2V0
X21pY3JvX3ZlcnNpb24pOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZlcnNpb24uaC5pbjogQWRk
ZWQuCisgICAgICAgICogQVBJL2dsaWIvSlNDVmlydHVhbE1hY2hpbmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGFkZFdyYXBwZXIpOgorICAgICAgICAocmVtb3ZlV3JhcHBlcik6CisgICAgICAgIChq
c2NWaXJ0dWFsTWFjaGluZVNldENvbnRleHRHcm91cCk6CisgICAgICAgIChqc2NWaXJ0dWFsTWFj
aGluZUVuc3VyZUNvbnRleHRHcm91cCk6CisgICAgICAgIChqc2NWaXJ0dWFsTWFjaGluZURpc3Bv
c2UpOgorICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGluZV9jbGFzc19pbml0KToKKyAgICAgICAg
KGpzY1ZpcnR1YWxNYWNoaW5lR2V0T3JDcmVhdGUpOgorICAgICAgICAoanNjVmlydHVhbE1hY2hp
bmVHZXRDb250ZXh0R3JvdXApOgorICAgICAgICAoanNjVmlydHVhbE1hY2hpbmVBZGRDb250ZXh0
KToKKyAgICAgICAgKGpzY1ZpcnR1YWxNYWNoaW5lUmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChq
c2NWaXJ0dWFsTWFjaGluZUdldENvbnRleHQpOgorICAgICAgICAoanNjX3ZpcnR1YWxfbWFjaGlu
ZV9uZXcpOgorICAgICAgICAqIEFQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lLmg6IEFkZGVkLgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBBUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OldyYXBwZXJNYXA6OldyYXBwZXJNYXApOgorICAgICAgICAoSlNDOjpXcmFwcGVyTWFwOjp+V3Jh
cHBlck1hcCk6CisgICAgICAgIChKU0M6OldyYXBwZXJNYXA6OmdvYmplY3RXcmFwcGVyKToKKyAg
ICAgICAgKEpTQzo6V3JhcHBlck1hcDo6dW53cmFwKToKKyAgICAgICAgKEpTQzo6V3JhcHBlck1h
cDo6cmVnaXN0ZXJDbGFzcyk6CisgICAgICAgIChKU0M6OldyYXBwZXJNYXA6OmNyZWF0ZUpTV3Jh
cHBwZXIpOgorICAgICAgICAoSlNDOjpXcmFwcGVyTWFwOjpqc1dyYXBwZXIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXcmFwcGVyTWFwOjp3cmFwcGVkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBB
UEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL2RvY3Mv
anNjLWdsaWItNC4wLXNlY3Rpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogQVBJL2dsaWIvZG9j
cy9qc2MtZ2xpYi00LjAudHlwZXM6IEFkZGVkLgorICAgICAgICAqIEFQSS9nbGliL2RvY3MvanNj
LWdsaWItZG9jcy5zZ21sOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvZ2xpYi9qc2MuaDogQWRkZWQu
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR0xpYi5jbWFrZTogQWRkZWQu
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ2lyLmluOiBSZW1vdmVkLgorICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbGVhc2VEZWxheWVkUmVsZWFz
ZWRPYmplY3RzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKiBq
YXZhc2NyaXB0Y29yZWd0ay5wYy5pbjoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpzZXRXcmFwcGVyTWFwKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpnbGliQ2FsbGJhY2tGdW5jdGlvblN0
cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpnbGliV3JhcHBl
ck9iamVjdFN0cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp3
cmFwcGVyTWFwIGNvbnN0KToKKwogMjAxOC0wMy0xNSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2ly
c2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgRml4IE1TVkMgcnVuLXRpbWUgY2hlY2sgYWZ0ZXIg
cjIyOTM5MS4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR0xpYi5jbWFrZSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTGliLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi44ZjE0MGQ1Y2MyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTGliLmNtYWtlCkBAIC0wLDAgKzEsNDggQEAKK2ZpbGUoTUFLRV9ESVJF
Q1RPUlkgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliKQorZmls
ZShNQUtFX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFX0dMSUJfQVBJ
X0RJUn0pCisKK2xpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKKyAgICBBUEkvZ2xp
Yi9KU0FQSVdyYXBwZXJPYmplY3RHTGliLmNwcAorICAgIEFQSS9nbGliL0pTQ0NhbGxiYWNrRnVu
Y3Rpb24uY3BwCisgICAgQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCisgICAgQVBJL2dsaWIvSlNDQ29u
dGV4dC5jcHAKKyAgICBBUEkvZ2xpYi9KU0NFeGNlcHRpb24uY3BwCisgICAgQVBJL2dsaWIvSlND
VmFsdWUuY3BwCisgICAgQVBJL2dsaWIvSlNDVmVyc2lvbi5jcHAKKyAgICBBUEkvZ2xpYi9KU0NW
aXJ0dWFsTWFjaGluZS5jcHAKKyAgICBBUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcAorKQorCits
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAiJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZS9nbGliIgorICAgICIk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFX0dMSUJfQVBJX0RJUn0iCisgICAgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYiIKKykKKworc2V0KEphdmFTY3JpcHRDb3JlX0lOU1RB
TExFRF9IRUFERVJTCisgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRV9HTElCX0FQ
SV9ESVJ9L0pTQ1ZlcnNpb24uaAorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9K
U0NBdXRvY2xlYW51cHMuaAorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9KU0ND
bGFzcy5oCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0FQSS9nbGliL0pTQ0NvbnRleHQuaAor
ICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi9KU0NEZWZpbmVzLmgKKyAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vQVBJL2dsaWIvSlNDRXhjZXB0aW9uLmgKKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vQVBJL2dsaWIvSlNDVmFsdWUuaAorICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9BUEkvZ2xpYi9KU0NWaXJ0dWFsTWFjaGluZS5oCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L0FQSS9nbGliL2pzYy5oCispCisKK2NvbmZpZ3VyZV9maWxlKEFQSS9nbGliL0pTQ1ZlcnNpb24u
aC5pbiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBDT1JFX0dMSUJfQVBJX0RJUn0vSlNDVmVy
c2lvbi5oKQorCisjIFRoZXNlIHN5bWJvbGljIGxpbmsgYWxsb3dzIGluY2x1ZGVzIGxpa2UgI2lu
Y2x1ZGUgPGpzYy9qc2MuaD4gd2hpY2ggc2ltdWxhdGVzIGluc3RhbGxlZCBoZWFkZXJzLgorYWRk
X2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0ph
dmFTY3JpcHRDb3JlL2dsaWIvanNjCisgICAgREVQRU5EUyAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
QVBJL2dsaWIKKyAgICBDT01NQU5EIGxuIC1uIC1zIC1mICR7SkFWQVNDUklQVENPUkVfRElSfS9B
UEkvZ2xpYiAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIvanNj
CisgICAgVkVSQkFUSU0KKykKK2FkZF9jdXN0b21fdGFyZ2V0KEpTQy1mYWtlLWFwaS1oZWFkZXJz
CisgICAgREVQRU5EUyAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlL2ds
aWIvanNjCispCitzZXQoSmF2YVNjcmlwdENvcmVfRVhUUkFfREVQRU5ERU5DSUVTCisgICAgSlND
LWZha2UtYXBpLWhlYWRlcnMKKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5naXIuaW4gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ2lyLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjhkY2MxMjhkYy4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmdpci5p
bgorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pgot
PHJlcG9zaXRvcnkgdmVyc2lvbj0iMS4yIgotICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cu
Z3RrLm9yZy9pbnRyb3NwZWN0aW9uL2NvcmUvMS4wIgotICAgICAgICAgICAgeG1sbnM6Yz0iaHR0
cDovL3d3dy5ndGsub3JnL2ludHJvc3BlY3Rpb24vYy8xLjAiPgotICA8bmFtZXNwYWNlIG5hbWU9
IkphdmFTY3JpcHRDb3JlIiB2ZXJzaW9uPSJAV0VCS0lUR1RLX0FQSV9WRVJTSU9OQCIgCi0gICAg
ICAgICAgICAgc2hhcmVkLWxpYnJhcnk9ImphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJ
X1ZFUlNJT05AIgotICAgICAgICAgICAgIGM6aWRlbnRpZmllci1wcmVmaXhlcz0iSlMiCi0gICAg
ICAgICAgICAgYzpzeW1ib2wtcHJlZml4ZXM9IkpTIj4KLSAgICA8cmVjb3JkIG5hbWU9Ikdsb2Jh
bENvbnRleHQiIGM6dHlwZT0iSlNHbG9iYWxDb250ZXh0UmVmIiBmb3JlaWduPSIxIi8+Ci0gICAg
PHJlY29yZCBuYW1lPSJWYWx1ZSIgYzp0eXBlPSJKU1ZhbHVlUmVmIiBmb3JlaWduPSIxIi8+Ci0g
IDwvbmFtZXNwYWNlPgotPC9yZXBvc2l0b3J5PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IDZmMDk1NmM1MzIxLi44YzVkY2JhYzliYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoR0xpYi5j
bWFrZSkKKwogc2V0KEphdmFTY3JpcHRDb3JlX09VVFBVVF9OQU1FIGphdmFzY3JpcHRjb3JlZ3Rr
LSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSkKIAogbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVf
VU5JRklFRF9TT1VSQ0VfTElTVF9GSUxFUwpAQCAtNSw2ICs3LDcgQEAgbGlzdChBUFBFTkQgSmF2
YVNjcmlwdENvcmVfVU5JRklFRF9TT1VSQ0VfTElTVF9GSUxFUwogKQogCiBsaXN0KEFQUEVORCBK
YXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAiJHtERVJJVkVE
X1NPVVJDRVNfSkFWQVNDUklQQ09SRUdUS19ESVJ9IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vaW5zcGVjdG9yL3JlbW90ZS9nbGliIgogKQogCkBAIC0xMywxNiArMTYsNyBAQCBsaXN0KEFQ
UEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgaW5zcGVj
dG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclV0aWxzLmgKICkKIAotY29uZmlndXJlX2Zp
bGUoamF2YXNjcmlwdGNvcmVndGsucGMuaW4gJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnBj
IEBPTkxZKQotY29uZmlndXJlX2ZpbGUoSmF2YVNjcmlwdENvcmUuZ2lyLmluICR7Q01BS0VfQklO
QVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpciBAT05M
WSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9
L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS50eXBlbGliCi0gICAgREVQ
RU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9W
RVJTSU9OfS5naXIKLSAgICBDT01NQU5EICR7SU5UUk9TUEVDVElPTl9DT01QSUxFUn0gJHtDTUFL
RV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2ly
IC1vICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZF
UlNJT059LnR5cGVsaWIKLSkKLQotQUREX1RZUEVMSUIoJHtDTUFLRV9CSU5BUllfRElSfS9KYXZh
U2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0udHlwZWxpYikKK2NvbmZpZ3VyZV9m
aWxlKGphdmFzY3JpcHRjb3JlZ3RrLnBjLmluICR7SmF2YVNjcmlwdENvcmVfUEtHQ09ORklHX0ZJ
TEV9IEBPTkxZKQogCiBpbnN0YWxsKEZJTEVTICIke0NNQUtFX0JJTkFSWV9ESVJ9L1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0u
cGMiCiAgICAgICAgIERFU1RJTkFUSU9OICIke0xJQl9JTlNUQUxMX0RJUn0vcGtnY29uZmlnIgpA
QCAtMzIsNiArMjYsMTAgQEAgaW5zdGFsbChGSUxFUyAke0phdmFTY3JpcHRDb3JlX1BVQkxJQ19G
UkFNRVdPUktfSEVBREVSU30KICAgICAgICAgREVTVElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURF
Ul9JTlNUQUxMX0RJUn0vSmF2YVNjcmlwdENvcmUiCiApCiAKK2luc3RhbGwoRklMRVMgJHtKYXZh
U2NyaXB0Q29yZV9JTlNUQUxMRURfSEVBREVSU30KKyAgICAgICAgREVTVElOQVRJT04gIiR7V0VC
S0lUR1RLX0hFQURFUl9JTlNUQUxMX0RJUn0vanNjIgorKQorCiBpZiAoRU5BQkxFX0lOVFJPU1BF
Q1RJT04pCiAgICAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRD
b3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKICAgICAgICAgICAgIERFU1RJTkFUSU9O
ICR7SU5UUk9TUEVDVElPTl9JTlNUQUxMX0dJUkRJUn0KQEAgLTQzLDYgKzQxLDcgQEAgZW5kaWYg
KCkKIAogYWRkX2RlZmluaXRpb25zKC1EU1RBVElDQUxMWV9MSU5LRURfV0lUSF9XVEYpCiBhZGRf
ZGVmaW5pdGlvbnMoLURMSUJESVI9IiR7TElCX0lOU1RBTExfRElSfSIpCithZGRfZGVmaW5pdGlv
bnMoLURKU0NfQ09NUElMQVRJT04pCiAKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0xJQlJB
UklFUwogICAgICR7R0xJQl9MSUJSQVJJRVN9CkBAIC01MCwzICs0OSw3OCBAQCBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NZ
U1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KICkKKwor
aWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQorICAgICMgQWRkICR7Q01BS0VfTElCUkFSWV9PVVRQ
VVRfRElSRUNUT1JZfSB0byBMRF9MSUJSQVJZX1BBVEggb3IgRFlMRF9MSUJSQVJZX1BBVEgKKyAg
ICBpZiAoQVBQTEUpCisgICAgICAgIHNldChMT0FERVJfTElCUkFSWV9QQVRIX1ZBUiAiRFlMRF9M
SUJSQVJZX1BBVEgiKQorICAgICAgICBzZXQoUFJFVl9MT0FERVJfTElCUkFSWV9QQVRIICIkRU5W
e0RZTERfTElCUkFSWV9QQVRIfSIpCisgICAgZWxzZSAoKQorICAgICAgICBzZXQoTE9BREVSX0xJ
QlJBUllfUEFUSF9WQVIgIkxEX0xJQlJBUllfUEFUSCIpCisgICAgICAgIHNldChQUkVWX0xPQURF
Ul9MSUJSQVJZX1BBVEggIiRFTlZ7TERfTElCUkFSWV9QQVRIfSIpCisgICAgZW5kaWYgKCkKKyAg
ICBzdHJpbmcoQ09NUEFSRSBFUVVBTCAiJHtQUkVWX0xPQURFUl9MSUJSQVJZX1BBVEh9IiAiIiBs
ZF9saWJyYXJ5X3BhdGhfZG9lc19ub3RfZXhpc3QpCisgICAgaWYgKGxkX2xpYnJhcnlfcGF0aF9k
b2VzX25vdF9leGlzdCkKKyAgICAgICAgc2V0KElOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSUJS
QVJZX1BBVEggIiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIpCisgICAgZWxzZSAo
KQorICAgICAgICBzZXQoSU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSCAiJHtD
TUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9OiR7UFJFVl9MT0FERVJfTElCUkFSWV9QQVRI
fSIpCisgICAgZW5kaWYgKCkKKworICAgICMgQWRkIHJlcXVpcmVkIC1MIGZsYWdzIGZyb20gJHtD
TUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSBmb3IgZy1pci1zY2FubmVyCisgICAgc3RyaW5nKFJF
R0VYIE1BVENIQUxMICItTFteIF0qIiBJTlRST1NQRUNUSU9OX0FERElUSU9OQUxfTElOS0VSX0ZM
QUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IikKKworICAgIGFkZF9jdXN0b21fY29t
bWFuZCgKKyAgICAgICAgT1VUUFVUICR7Q01BS0VfQklOQVJZX0RJUn0vSmF2YVNjcmlwdENvcmUt
JHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgorICAgICAgICBERVBFTkRTIEphdmFTY3JpcHRD
b3JlCisgICAgICAgIENPTU1BTkQgQ0M9JHtDTUFLRV9DX0NPTVBJTEVSfSBDRkxBR1M9LVduby1k
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyBMREZMQUdTPQorICAgICAgICAgICAgJHtMT0FERVJfTElC
UkFSWV9QQVRIX1ZBUn09IiR7SU5UUk9TUEVDVElPTl9BRERJVElPTkFMX0xJQlJBUllfUEFUSH0i
CisgICAgICAgICAgICAke0lOVFJPU1BFQ1RJT05fU0NBTk5FUn0KKyAgICAgICAgICAgIC0tcXVp
ZXQKKyAgICAgICAgICAgIC0td2Fybi1hbGwKKyAgICAgICAgICAgIC0tc3ltYm9sLXByZWZpeD1q
c2MKKyAgICAgICAgICAgIC0taWRlbnRpZmllci1wcmVmaXg9SlNDCisgICAgICAgICAgICAtLW5h
bWVzcGFjZT1KYXZhU2NyaXB0Q29yZQorICAgICAgICAgICAgLS1uc3ZlcnNpb249JHtXRUJLSVRH
VEtfQVBJX1ZFUlNJT059CisgICAgICAgICAgICAtLWluY2x1ZGU9R09iamVjdC0yLjAKKyAgICAg
ICAgICAgIC0tbGlicmFyeT1qYXZhc2NyaXB0Y29yZWd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lP
Tn0KKyAgICAgICAgICAgIC1MJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9CisgICAg
ICAgICAgICAke0lOVFJPU1BFQ1RJT05fQURESVRJT05BTF9MSU5LRVJfRkxBR1N9CisgICAgICAg
ICAgICAtLW5vLWxpYnRvb2wKKyAgICAgICAgICAgIC0tcGtnPWdvYmplY3QtMi4wCisgICAgICAg
ICAgICAtLXBrZy1leHBvcnQ9amF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJ
T059CisgICAgICAgICAgICAtLW91dHB1dD0ke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRD
b3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKyAgICAgICAgICAgIC0tYy1pbmNsdWRl
PSJqc2MvanNjLmgiCisgICAgICAgICAgICAtREpTQ19DT01QSUxBVElPTgorICAgICAgICAgICAg
LUkke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZQorICAgICAgICAgICAgLUkke0pBVkFTQ1JJUFRD
T1JFX0RJUn0KKyAgICAgICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRUdU
S19ESVJ9CisgICAgICAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlw
dENvcmUvZ2xpYgorICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNUQUxMRURfSEVBREVS
U30KKyAgICAgICAgICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9BUEkvZ2xpYi8qLmNwcAorICAg
ICkKKworICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgT1VUUFVUICR7Q01BS0VfQklO
QVJZX0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnR5cGVsaWIK
KyAgICAgICAgREVQRU5EUyAke0NNQUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VC
S0lUR1RLX0FQSV9WRVJTSU9OfS5naXIKKyAgICAgICAgQ09NTUFORCAke0lOVFJPU1BFQ1RJT05f
Q09NUElMRVJ9IC0taW5jbHVkZWRpcj0ke0NNQUtFX0JJTkFSWV9ESVJ9ICR7Q01BS0VfQklOQVJZ
X0RJUn0vSmF2YVNjcmlwdENvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpciAtbyAke0NN
QUtFX0JJTkFSWV9ESVJ9L0phdmFTY3JpcHRDb3JlLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS50
eXBlbGliCisgICAgICAgIFZFUkJBVElNCisgICAgKQorCisgICAgQUREX1RZUEVMSUIoJHtDTUFL
RV9CSU5BUllfRElSfS9KYXZhU2NyaXB0Q29yZS0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0udHlw
ZWxpYikKK2VuZGlmICgpCisKK2ZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS9ndGtkb2Mt
anNjLWdsaWIuY2ZnCisgICAgIltqc2MtZ2xpYi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn1dXG4i
CisgICAgInBrZ2NvbmZpZ19maWxlPSR7SmF2YVNjcmlwdENvcmVfUEtHQ09ORklHX0ZJTEV9XG4i
CisgICAgImRlY29yYXRvcj1KU0NfQVBJXG4iCisgICAgImRlcHJlY2F0aW9uX2d1YXJkPUpTQ19E
SVNBQkxFX0RFUFJFQ0FURURcbiIKKyAgICAibmFtZXNwYWNlPWpzY1xuIgorICAgICJjZmxhZ3M9
LUkke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZVxuIgorICAgICIgICAgICAgLUkke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vQVBJL2dsaWJcbiIKKyAgICAiICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQQ09SRUdUS19ESVJ9XG4iCisgICAgIiAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFE
RVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYlxuIgorICAgICJkb2NfZGlyPSR7SkFWQVNDUklQ
VENPUkVfRElSfS9BUEkvZ2xpYi9kb2NzXG4iCisgICAgInNvdXJjZV9kaXJzPSR7SkFWQVNDUklQ
VENPUkVfRElSfS9BUEkvZ2xpYlxuIgorICAgICJoZWFkZXJzPSR7SmF2YVNjcmlwdENvcmVfSU5T
VEFMTEVEX0hFQURFUlN9XG4iCisgICAgIm1haW5fc2dtbF9maWxlPWpzYy1nbGliLWRvY3Muc2dt
bFxuIgorKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtV1BFLmNt
YWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDg2Y2Yy
MTIxNzc3Li44NjJlNzI3Y2U3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Bs
YXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdQRS5j
bWFrZQpAQCAtMSwzICsxLDUgQEAKK2luY2x1ZGUoR0xpYi5jbWFrZSkKKwogbGlzdChBUFBFTkQg
SmF2YVNjcmlwdENvcmVfTElCUkFSSUVTCiAgICAgJHtHTElCX0xJQlJBUklFU30KICkKQEAgLTI5
LDMgKzMxLDEwIEBAIGluc3RhbGwoRklMRVMgJHtKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVX
T1JLX0hFQURFUlN9CiAgICAgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElS
fS93cGUtJHtXUEVfQVBJX1ZFUlNJT059L1dQRS9KYXZhU2NyaXB0Q29yZSIKICAgICBDT01QT05F
TlQgIkRldmVsb3BtZW50IgogKQorCitpbnN0YWxsKEZJTEVTICR7SmF2YVNjcmlwdENvcmVfSU5T
VEFMTEVEX0hFQURFUlN9CisgICAgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9JTkNMVURF
RElSfS93cGUtJHtXUEVfQVBJX1ZFUlNJT059L1dQRS9qc2MiCisgICAgQ09NUE9ORU5UICJEZXZl
bG9wbWVudCIKKykKKworYWRkX2RlZmluaXRpb25zKC1ESlNDX0NPTVBJTEFUSU9OKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBhNTNhNDQ2OTA4Ni4uOWVlYzRjMjA4NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC05OCw2ICs5OCwxMCBAQCBleHRlcm4g
IkMiIHZvaWQgb2JqY19hdXRvcmVsZWFzZVBvb2xQb3Aodm9pZCAqY29udGV4dCk7CiAjZW5kaWYK
ICNlbmRpZiAvLyBVU0UoRk9VTkRBVElPTikKIAorI2lmIFVTRShHTElCKQorI2luY2x1ZGUgIkpT
Q0dMaWJXcmFwcGVyT2JqZWN0LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC00NjEsNyArNDY1LDcgQEAgdm9pZCBIZWFwOjpsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpCiAKIHZvaWQgSGVhcDo6cmVsZWFzZURlbGF5ZWRSZWxlYXNlZE9iamVjdHMo
KQogewotI2lmIFVTRShGT1VOREFUSU9OKQorI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoR0xJ
QikKICAgICAvLyBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhlIGNhc2UgdGhhdCByZWxlYXNp
bmcgYW4gb2JqZWN0IGNhbiBjcmVhdGUgbW9yZSBvYmplY3RzIGR1ZSB0byB0aGUKICAgICAvLyBy
ZWxlYXNlIGNhbGxpbmcgaW50byBKUy4gV2hlbiB0aG9zZSBKUyBjYWxsKHMpIGV4aXQgYW5kIGFs
bCBsb2NrcyBhcmUgYmVpbmcgZHJvcHBlZCB3ZSBlbmQgdXAKICAgICAvLyBiYWNrIGhlcmUgYW5k
IGNvdWxkIHRyeSB0byByZWN1cnNpdmVseSByZWxlYXNlIG9iamVjdHMuIFdlIGd1YXJkIHRoYXQg
d2l0aCBhIHJlY3Vyc2l2ZSBlbnRyeQpAQCAtNDczLDE1ICs0NzcsMTkgQEAgdm9pZCBIZWFwOjpy
ZWxlYXNlRGVsYXllZFJlbGVhc2VkT2JqZWN0cygpCiAgICAgICAgIHdoaWxlICghbV9kZWxheWVk
UmVsZWFzZU9iamVjdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV92bS0+Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAKLSAgICAgICAgICAgIFZlY3RvcjxSZXRh
aW5QdHI8Q0ZUeXBlUmVmPj4gb2JqZWN0c1RvUmVsZWFzZSA9IFdURk1vdmUobV9kZWxheWVkUmVs
ZWFzZU9iamVjdHMpOworICAgICAgICAgICAgYXV0byBvYmplY3RzVG9SZWxlYXNlID0gV1RGTW92
ZShtX2RlbGF5ZWRSZWxlYXNlT2JqZWN0cyk7CiAKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRyb3AgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIGFyYml0
cmFyeSBjb2RlLgogICAgICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhtX3ZtKTsKIAorI2lmIFVTRShGT1VOREFUSU9OKQogICAgICAgICAgICAgICAgIHZvaWQq
IGNvbnRleHQgPSBvYmpjX2F1dG9yZWxlYXNlUG9vbFB1c2goKTsKKyNlbmRpZgogICAgICAgICAg
ICAgICAgIG9iamVjdHNUb1JlbGVhc2UuY2xlYXIoKTsKKyNpZiBVU0UoRk9VTkRBVElPTikKICAg
ICAgICAgICAgICAgICBvYmpjX2F1dG9yZWxlYXNlUG9vbFBvcChjb250ZXh0KTsKKyNlbmRpZgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CmluZGV4IDViNTFkYTVlZTZjLi5mMmEwNzEyYjM5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaApAQCAtODksNiArODksMTAgQEAgY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBCYXNlOwog
c3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIAorI2lmIFVTRShHTElCKQorY2xhc3MgSlNDR0xp
YldyYXBwZXJPYmplY3Q7CisjZW5kaWYKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTcGVjdWxh
dGl2ZUpJVDsKIGNsYXNzIFdvcmtsaXN0OwpAQCAtMjcyLDYgKzI3Niw5IEBAIHB1YmxpYzoKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHJlbGVhc2VT
b29uKFJldGFpblB0cjxUPiYmKTsKICNlbmRpZgorI2lmIFVTRShHTElCKQorICAgIHZvaWQgcmVs
ZWFzZVNvb24oc3RkOjp1bmlxdWVfcHRyPEpTQ0dMaWJXcmFwcGVyT2JqZWN0PiYmKTsKKyNlbmRp
ZgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWdpc3RlcldlYWtHQ01hcChXZWFrR0NN
YXBCYXNlKiB3ZWFrR0NNYXApOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdpc3Rl
cldlYWtHQ01hcChXZWFrR0NNYXBCYXNlKiB3ZWFrR0NNYXApOwpAQCAtNjQyLDYgKzY0OSwxMCBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZUeXBlUmVmPj4gbV9kZWxheWVkUmVs
ZWFzZU9iamVjdHM7CiAgICAgdW5zaWduZWQgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50
OwogI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4+IG1fZGVsYXllZFJlbGVhc2VPYmplY3RzOworICAgIHVuc2lnbmVk
IG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCB7IDAgfTsKKyNlbmRpZgogCiAgICAgSGFz
aFNldDxXZWFrR0NNYXBCYXNlKj4gbV93ZWFrR0NNYXBzOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggZTU2MWM5NjUzNzAuLjBhMWRiMjlkNGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTE2Nyw2ICsxNjcs
MTMgQEAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYgb2JqZWN0
KQogfQogI2VuZGlmCiAKKyNpZiBVU0UoR0xJQikKK2lubGluZSB2b2lkIEhlYXA6OnJlbGVhc2VT
b29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NHTGliV3JhcHBlck9iamVjdD4mJiBvYmplY3QpCit7Cisg
ICAgbV9kZWxheWVkUmVsZWFzZU9iamVjdHMuYXBwZW5kKFdURk1vdmUob2JqZWN0KSk7Cit9Cisj
ZW5kaWYKKwogaW5saW5lIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7CiAg
ICAgQVNTRVJUKCFtYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGsucGMuaW4gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGsucGMuaW4KaW5kZXggYjJhZmIyNmIy
YjIuLmM0MzRmOTAzODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvamF2YXNj
cmlwdGNvcmVndGsucGMuaW4KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2phdmFzY3JpcHRj
b3JlZ3RrLnBjLmluCkBAIC02LDYgKzYsNiBAQCBpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRl
CiBOYW1lOiBKYXZhU2NyaXB0Q29yZUdUSysKIERlc2NyaXB0aW9uOiBHVEsrIHZlcnNpb24gb2Yg
dGhlIEphdmFTY3JpcHRDb3JlIGVuZ2luZQogVmVyc2lvbjogQFBST0pFQ1RfVkVSU0lPTkAKLVJl
cXVpcmVzOiBnbGliLTIuMAorUmVxdWlyZXM6IGdsaWItMi4wIGdvYmplY3QtMi4wCiBMaWJzOiAt
TCR7bGliZGlyfSAtbGphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJX1ZFUlNJT05ACiBD
ZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS93ZWJraXRndGstQFdFQktJVEdUS19BUElfVkVSU0lPTkAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApp
bmRleCAwMWUxYmNiZTJkYS4uOGY4NDBjYzQ3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE4NSw2ICsxODUsMTEgQEAKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNlbmRpZgogCisj
aWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyNpbmNsdWRlICJKU0NDYWxsYmFja0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNDV3JhcHBlck1hcC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCkBAIC01NjcsNyArNTcyLDE2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICAgICAgaW5pdC5zZXQoSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5v
d25lci0+bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CiAjZW5kaWYKLSAg
ICAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIG1fZ2xpYkNhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3Ry
dWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNDQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CisgICAgbV9nbGliV3JhcHBlck9i
amVjdFN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxT
dHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVy
LCBpbml0Lm93bmVyLT5tX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKKyNl
bmRpZgogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKHZtLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICAKICAgICBtX29yaWdpbmFsQXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW1VuZGVjaWRlZFNoYXBlID4+IEluZGV4aW5nU2hhcGVT
aGlmdF0uc2V0KHZtLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFVuZGVjaWRlZCkpOwpAQCAtMTM4MCw2ICsx
Mzk0LDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIHRo
aXNPYmplY3QtPm1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdGhpc09iamVjdC0+bV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKKyNlbmRpZgorI2lmZGVmIEpTQ19HTElCX0FQSV9FTkFCTEVECisgICAgdGhpc09iamVj
dC0+bV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0
aGlzT2JqZWN0LT5tX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwog
I2VuZGlmCiAgICAgdGhpc09iamVjdC0+bV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnZp
c2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXJyb3JTdHJ1
Y3R1cmUpOwpAQCAtMTYxMiw0ICsxNjMwLDExIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAgICBBU1NFUlQodHlwZSgp
ID09IEdsb2JhbE9iamVjdFR5cGUpOwogfQogCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQK
K3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBw
ZXJNYXA+JiYgbWFwKQoreworICAgIG1fd3JhcHBlck1hcCA9IFdURk1vdmUobWFwKTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDRmYTBhZjQwNmNkLi5jNmUyOTdmMDM4MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0x
MTYsNiArMTE2LDEwIEBAIGNsYXNzIFZhcmlhYmxlRW52aXJvbm1lbnQ7CiBzdHJ1Y3QgQWN0aXZh
dGlvblN0YWNrTm9kZTsKIHN0cnVjdCBIYXNoVGFibGU7CiAKKyNpZmRlZiBKU0NfR0xJQl9BUElf
RU5BQkxFRAorY2xhc3MgV3JhcHBlck1hcDsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBX
YXRjaHBvaW50PiBjbGFzcyBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludDsK
IAogI2RlZmluZSBERUZJTkVfU1RBTkRBUkRfQlVJTFRJTihtYWNybywgdXBwZXJOYW1lLCBsb3dl
ck5hbWUpIG1hY3JvKHVwcGVyTmFtZSwgbG93ZXJOYW1lLCBsb3dlck5hbWUsIEpTICMjIHVwcGVy
TmFtZSwgdXBwZXJOYW1lLCBvYmplY3QpCkBAIC0zMjQsNiArMzI4LDEwIEBAIHB1YmxpYzoKICNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwg
U3RydWN0dXJlPiBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9w
ZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0
dXJlOworI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJMRUQKKyAgICBMYXp5UHJvcGVy
dHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGli
V3JhcHBlck9iamVjdFN0cnVjdHVyZTsKICNlbmRpZgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2Jh
bE9iamVjdCwgU3RydWN0dXJlPiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmU7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxsZWVTdHJ1Y3R1cmU7CkBAIC02MzUsNiArNjQz
LDEwIEBAIHB1YmxpYzoKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFN0cnVjdHVyZSog
b2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNDYWxs
YmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogb2JqY1dy
YXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNXcmFwcGVyT2JqZWN0
U3RydWN0dXJlLmdldCh0aGlzKTsgfQorI2VuZGlmCisjaWZkZWYgSlNDX0dMSUJfQVBJX0VOQUJM
RUQKKyAgICBTdHJ1Y3R1cmUqIGdsaWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9nbGliQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KKyAg
ICBTdHJ1Y3R1cmUqIGdsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICNlbmRpZgogICAgIFN0
cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0ZVN0cnVjdHVyZS5n
ZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMp
OyB9CkBAIC04ODgsNyArOTAwLDExIEBAIHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBw
ZXJNYXAoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dFdyYXBwZXJNYXAoSlNXcmFwcGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAj
ZW5kaWYKLSAgICAKKyNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRAorICAgIFdyYXBwZXJNYXAq
IHdyYXBwZXJNYXAoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KKyAgICB2
b2lkIHNldFdyYXBwZXJNYXAoc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+JiYpOworI2VuZGlm
CisKICAgICBUaHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1
cm4gKm1fdGhyZWFkTG9jYWxDYWNoZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC05MjEsNyAr
OTM3LDkgQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFJldGFpblB0
cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNlbmRpZgotICAgIAorI2lmZGVmIEpTQ19H
TElCX0FQSV9FTkFCTEVECisgICAgc3RkOjp1bmlxdWVfcHRyPFdyYXBwZXJNYXA+IG1fd3JhcHBl
ck1hcDsKKyNlbmRpZgogICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2Fs
Q2FjaGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI1MTExNWJjYmNiLi4zYzQwYmRjOWEyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0wMy0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBJbml0aWFsIGltcGxlbWVu
dGF0aW9uIG9mIEphdmFTY3JpcHRDb3JlIGdsaWIgYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDA2MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNldCBkZWNvcmF0b3IgYW5kIGRlcHJlY2F0
aW9uX2d1YXJkIG9wdGlvbnMgaW4gQVBJIGRvY3MgY29uZmlnIGZpbGVzLCBzaW5jZSB0aGV5IGFy
ZSBubyBsb25nZXIgY29tbW9uIHRvIGFsbAorICAgICAgICBsaWJyYXJpZXMuCisKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKwogMjAxOC0wMy0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRoTl0gSW1wbGVtZW50IGF1dGhlbnRpY2F0
b3JNYWtlQ3JlZGVudGlhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGM2YjMwNjZjM2Eu
LjA0MzVmY2NiMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTg3MSw2ICs4NzEsOCBA
QCBlbmRpZiAoKQogZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9L2d0a2RvYy13ZWJraXQy
Z3RrLmNmZwogICAgICJbd2Via2l0Mmd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn1dXG4iCiAg
ICAgInBrZ2NvbmZpZ19maWxlPSR7V2ViS2l0Ml9QS0dDT05GSUdfRklMRX1cbiIKKyAgICAiZGVj
b3JhdG9yPVdFQktJVF9BUEl8V0VCS0lUX0RFUFJFQ0FURUR8V0VCS0lUX0RFUFJFQ0FURURfRk9S
XFwoLitcXClcbiIKKyAgICAiZGVwcmVjYXRpb25fZ3VhcmQ9V0VCS0lUX0RJU0FCTEVfREVQUkVD
QVRFRFxuIgogICAgICJuYW1lc3BhY2U9d2Via2l0XG4iCiAgICAgImNmbGFncz0tSSR7Q01BS0Vf
U09VUkNFX0RJUn0vU291cmNlXG4iCiAgICAgIiAgICAgICAtSSR7V0VCS0lUX0RJUn0vU2hhcmVk
L0FQSS9nbGliXG4iCkBAIC04OTIsNiArODk0LDggQEAgZmlsZShXUklURSAke0NNQUtFX0JJTkFS
WV9ESVJ9L2d0a2RvYy13ZWJraXQyZ3RrLmNmZwogZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9E
SVJ9L2d0a2RvYy13ZWJraXRkb20uY2ZnCiAgICAgIlt3ZWJraXRkb21ndGstJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059XVxuIgogICAgICJwa2djb25maWdfZmlsZT0ke1dlYktpdDJfUEtHQ09ORklH
X0ZJTEV9XG4iCisgICAgImRlY29yYXRvcj1XRUJLSVRfQVBJfFdFQktJVF9ERVBSRUNBVEVEfFdF
QktJVF9ERVBSRUNBVEVEX0ZPUlxcKC4rXFwpXG4iCisgICAgImRlcHJlY2F0aW9uX2d1YXJkPVdF
QktJVF9ESVNBQkxFX0RFUFJFQ0FURURcbiIKICAgICAibmFtZXNwYWNlPXdlYmtpdF9kb21cbiIK
ICAgICAiY2ZsYWdzPS1JJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2VcbiIKICAgICAiICAgICAg
IC1JJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NXG4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFr
ZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDgyZmE3MTczNDFlLi40OWExOTFkMGIyZiAxMDA2NDQK
LS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKQEAgLTE2OCw2ICsxNjgsNyBAQCBhZGRfZGVmaW5pdGlvbnMoLURCVUlM
RElOR19HVEtfXz0xKQogYWRkX2RlZmluaXRpb25zKC1ER0VUVEVYVF9QQUNLQUdFPSJXZWJLaXQy
R1RLLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCiBhZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJ
Uj0iJHtDTUFLRV9JTlNUQUxMX0RBVEFESVJ9IikKIGFkZF9kZWZpbml0aW9ucygtRFdFQktJVEdU
S19BUElfVkVSU0lPTl9TVFJJTkc9IiR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfSIpCithZGRfZGVm
aW5pdGlvbnMoLURKU0NfR0xJQl9BUElfRU5BQkxFRCkKIAogc2V0KEdUS19MSUJSQVJJRVMgJHtH
VEszX0xJQlJBUklFU30pCiBzZXQoR1RLX0lOQ0xVREVfRElSUyAke0dUSzNfSU5DTFVERV9ESVJT
fSkKQEAgLTM2OCw5ICszNjksMTIgQEAgc2V0KERFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElS
ICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vd2Via2l0Z3RrKQogc2V0KERFUklWRURfU09VUkNFU19X
RUJLSVRHVEtfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElSfS93ZWJraXQp
CiBzZXQoREVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJ
Un0vd2Via2l0Mmd0aykKIHNldChERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19BUElfRElSICR7
REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS93ZWJraXQyKQorc2V0KERFUklWRURfU09V
UkNFU19KQVZBU0NSSVBDT1JFR1RLX0RJUiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L2phdmFzY3JpcHRjb3JlZ3RrKQorc2V0KERFUklWRURfU09VUkNFU19KQVZBU0NSSVBD
T1JFX0dMSUJfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2ph
dmFzY3JpcHRjb3JlZ3RrL2pzYykKIHNldChGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19E
SVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS93ZWJraXQyZ3RrKQogc2V0KEZPUldBUkRJTkdf
SEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElS
fS93ZWJraXQyZ3RrLXdlYmV4dGVuc2lvbikKIAorc2V0KEphdmFTY3JpcHRDb3JlX1BLR0NPTkZJ
R19GSUxFICR7Q01BS0VfQklOQVJZX0RJUn0vU291cmNlL0phdmFTY3JpcHRDb3JlL2phdmFzY3Jp
cHRjb3JlZ3RrLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5wYykKIHNldChXZWJLaXRfUEtHQ09O
RklHX0ZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2d0ay93ZWJr
aXRndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnBjKQogc2V0KFdlYktpdDJfUEtHQ09ORklH
X0ZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvV2ViS2l0L3dlYmtpdDJndGstJHtXRUJL
SVRHVEtfQVBJX1ZFUlNJT059LnBjKQogc2V0KFdlYktpdDJXZWJFeHRlbnNpb25fUEtHQ09ORklH
X0ZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9Tb3VyY2UvV2ViS2l0L3dlYmtpdDJndGstd2ViLWV4
dGVuc2lvbi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0ucGMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmlu
ZGV4IGMwMzVmOWNkMjI0Li45NzQ1MzM2YmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09w
dGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTk0
LDYgKzk0LDcgQEAgZW5kaWYgKCkKIGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX1dQRV9fPTEp
CiBhZGRfZGVmaW5pdGlvbnMoLURHRVRURVhUX1BBQ0tBR0U9IldQRSIpCiBhZGRfZGVmaW5pdGlv
bnMoLUREQVRBX0RJUj0iJHtDTUFLRV9JTlNUQUxMX0RBVEFESVJ9IikKK2FkZF9kZWZpbml0aW9u
cygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQogCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
Q0FJUk8gVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9FR0wgVFJVRSkKQEAgLTEx
Myw2ICsxMTQsOCBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQgVFJVRSkKIHNldChGT1JXQVJESU5HX0hFQURFUlNfRElSICR7REVSSVZF
RF9TT1VSQ0VTX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMpCiBzZXQoRk9SV0FSRElOR19IRUFERVJT
X1dQRV9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS93cGUpCiBzZXQoRk9SV0FSRElOR19I
RUFERVJTX1dQRV9FWFRFTlNJT05fRElSICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vd3BlLXdl
YmV4dGVuc2lvbikKK3NldChERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRVdQRV9ESVIgJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9qYXZhc2NyaXB0Y29yZXdwZSkKK3Nl
dChERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQQ09SRV9HTElCX0FQSV9ESVIgJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9qYXZhc2NyaXB0Y29yZXdwZS9qc2MpCiBzZXQoREVS
SVZFRF9TT1VSQ0VTX1dQRV9BUElfRElSICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVF9ESVJ9L3dw
ZSkKIAogaW5jbHVkZShHU3RyZWFtZXJDaGVja3MpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODgwMWIyMDdlZjUuLmQyZWRjMjEzODg0IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTkgQEAKKzIwMTgtMDMtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBKYXZh
U2NyaXB0Q29yZSBnbGliIGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQwNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldyBBUEkgYW5kIGdlbmVy
YXRlIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiB3aXRoIGdlbmVyYXRlLWd0a2RvYy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogSWdub3JlIHNvbWUgc3R5bGUg
ZXJyb3JzIGluIHB1YmxpYyBHTGliIEFQSSBoZWFkZXJzLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQ
RS5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL2ds
aWIvVGVzdEpTQy5jcHA6IEFkZGVkLgorICAgICAgICAoTGVha0NoZWNrZXI6On5MZWFrQ2hlY2tl
cik6CisgICAgICAgIChMZWFrQ2hlY2tlcjo6d2F0Y2gpOgorICAgICAgICAoRXhjZXB0aW9uSGFu
ZGxlcjo6RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChFeGNlcHRpb25IYW5kbGVyOjp+RXhj
ZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChFeGNlcHRpb25IYW5kbGVyOjpwdXNoKToKKyAgICAg
ICAgKEV4Y2VwdGlvbkhhbmRsZXI6OnBvcCk6CisgICAgICAgIChqc2NDb250ZXh0R2FyYmFnZUNv
bGxlY3QpOgorICAgICAgICAodGVzdEpTQ0Jhc2ljKToKKyAgICAgICAgKHRlc3RKU0NUeXBlcyk6
CisgICAgICAgIChmb28pOgorICAgICAgICAoY2FsbGJhY2spOgorICAgICAgICAoZG91YmxlQW5k
U2V0SW5SZXN1bHQpOgorICAgICAgICAoc3VtRnVuY3Rpb24pOgorICAgICAgICAodGVzdEpTQ0Z1
bmN0aW9uKToKKyAgICAgICAgKHRlc3RKU0NPYmplY3QpOgorICAgICAgICAoZm9vQ3JlYXRlKToK
KyAgICAgICAgKGZvb0NyZWF0ZVdpdGhGb28pOgorICAgICAgICAoZm9vRnJlZSk6CisgICAgICAg
IChzZXRGb28pOgorICAgICAgICAoZ2V0Rm9vKToKKyAgICAgICAgKHNldFNpYmxpbmcpOgorICAg
ICAgICAoZ2V0U2libGluZyk6CisgICAgICAgIChtdWx0aXBseUZvbyk6CisgICAgICAgIChnZXRN
dWx0aXBseUZvbyk6CisgICAgICAgIChnZXRNdWx0aXBseUZvb0FzeW5jKToKKyAgICAgICAgKGJh
ekNyZWF0ZSk6CisgICAgICAgICh0ZXN0SlNDQ2xhc3MpOgorICAgICAgICAoYmFyQ3JlYXRlKToK
KyAgICAgICAgKGJhckZyZWUpOgorICAgICAgICAoc2V0QmFyKToKKyAgICAgICAgKGdldEJhcik6
CisgICAgICAgICh0ZXN0SlNDUHJvdG90eXBlcyk6CisgICAgICAgIChjcmVhdGVFcnJvcik6Cisg
ICAgICAgICh0ZXN0SlNDRXhjZXB0aW9ucyk6CisgICAgICAgICh0ZXN0SlNDUHJvbWlzZXMpOgor
ICAgICAgICAoZm9vRnJlZUFuZExvZyk6CisgICAgICAgICh0ZXN0SlNDR2FyYmFnZUNvbGxlY3Rv
cik6CisgICAgICAgICh0ZXN0c0pTQ1ZpcnR1YWxNYWNoaW5lKToKKyAgICAgICAgKHRlc3RzSlND
QXV0b2NsZWFudXBzKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGd0ay9nZW5lcmF0ZS1n
dGtkb2M6CisgICAgICAgIChnZXRfZ2VuZXJhdG9yX2Zvcl9jb25maWcpOgorCiAyMDE4LTAzLTE4
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjI5Njg5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5CmluZGV4IDAxMDZlZTMwMWI5Li5mMWIwOTJkMWFmZSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMTUxLDYgKzE1MSw3IEBAIF9QQVRIX1JVTEVT
X1NQRUNJRklFUiA9IFsKICAgICAoWwogICAgICAgIyBUaGUgR1RLKyBhbmQgV1BFIEFQSXMgdXNl
IHVwcGVyIGNhc2UsIHVuZGVyc2NvcmUgc2VwYXJhdGVkLCB3b3JkcyBpbgogICAgICAgIyBjZXJ0
YWluIHR5cGVzIG9mIGVudW1zIChlLmcuIHNpZ25hbHMsIHByb3BlcnRpZXMpLgorICAgICAgb3Mu
cGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSwKICAg
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdTaGFyZWQnLCAnQVBJJywgJ2ds
aWInKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3Mn
LCAnQVBJJywgJ2dsaWInKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcs
ICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycpLApAQCAtMzM1LDcgKzMzNiw4IEBAIF9ORVZFUl9T
S0lQUEVEX0ZJTEVTID0gX05FVkVSX1NLSVBQRURfSlNfRklMRVMgKyBbCiBfU0tJUFBFRF9GSUxF
U19XSVRIX1dBUk5JTkcgPSBbCiAgICAgb3MucGF0aC5qb2luKCdUb29scycsICdUZXN0V2ViS2l0
QVBJJywgJ1Rlc3RzJywgJ1dlYktpdEd0aycpLAogCi0gICAgIyBXZWJLaXQqLmggZmlsZXMgaW4g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL1tndGt8d3BlXSwgZXhjZXB0IHRob3NlIGVuZGlu
ZyBpbiBQcml2YXRlLmggYXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBub3QgZm9sbG93IFdlYktp
dCBjb2Rpbmcgc3R5bGUuCisgICAgIyBXZWJLaXQqLmggYW5kIEpTQyouaCBmaWxlcyBpbiwgZXhj
ZXB0IHRob3NlIGVuZGluZyBpbiBQcml2YXRlLmggYXJlIEFQSSBoZWFkZXJzLCB3aGljaCBkbyBu
b3QgZm9sbG93IFdlYktpdCBjb2Rpbmcgc3R5bGUuCisgICAgcmUuY29tcGlsZShyZS5lc2NhcGUo
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnSmF2YVNjcmlwdENvcmUnLCAnQVBJJywgJ2dsaWInKSAr
IG9zLnBhdGguc2VwKSArIHInSlNDKD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAogICAgIHJlLmNv
bXBpbGUocmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nl
c3MnLCAnQVBJJywgJ2d0aycpICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVc
LmgpLipcLmgkJyksCiAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViS2l0JywgJ1VJUHJvY2VzcycsICdBUEknLCAnd3BlJykgKyBvcy5wYXRoLnNlcCkg
KyByJ1dlYktpdCg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwKICAgICByZS5jb21waWxlKHJlLmVz
Y2FwZShvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnV2ViUHJvY2VzcycsICdJbmpl
Y3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJykgKyBvcy5wYXRoLnNlcCkgKyByJ1dlYktpdCg/IS4q
UHJpdmF0ZVwuaCkuKlwuaCQnKSwKQEAgLTM0NCw2ICszNDYsNyBAQCBfU0tJUFBFRF9GSUxFU19X
SVRIX1dBUk5JTkcgPSBbCiAgICAgIyBHT2JqZWN0IERPTSBiaW5kaW5ncyBjb3BpZWQgZnJvbSBn
ZW5lcmF0ZWQgY29kZSB1c2luZyBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgogICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYktpdCcsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywg
J0FQSScsICdndGsnLCAnRE9NJyksCiAKKyAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdKYXZh
U2NyaXB0Q29yZScsICdBUEknLCAnZ2xpYicsICdqc2MuaCcpLAogICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ1dlYktpdCcsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgn
KSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQnLCAnVUlQcm9jZXNzJywgJ0FQ
SScsICd3cGUnLCAnd2Via2l0LmgnKSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJL
aXQnLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywgJ3dlYmtp
dC13ZWItZXh0ZW5zaW9uLmgnKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDYyMDJmNDZiYWYwLi40NWUwMmQwNGFjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
R1RLLmNtYWtlCkBAIC0xNSw2ICsxNSw4IEBAIHNldChGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RX
ZWJLaXRBUElfTkFNRSBUZXN0V2ViS2l0QVBJLWZvcndhcmRpbmctaGVhZGVycykKIGluY2x1ZGVf
ZGlyZWN0b3JpZXMoCiAgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfQogICAgICR7Rk9SV0FS
RElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUKKyAgICAke0ZPUldBUkRJTkdfSEVBREVS
U19ESVJ9L0phdmFTY3JpcHRDb3JlL2dsaWIKKyAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NS
SVBDT1JFR1RLX0RJUn0KICAgICAke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9zb3VwCiAg
ICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvZ3RrCiAgICAgJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvQVBJL2d0awpAQCAtMTE2LDYgKzExOCwxNSBAQCBsaXN0KEFQUEVORCBUZXN0V1RG
X1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xpYi9Xb3JrUXVl
dWVHTGliLmNwcAogKQogCithZGRfZXhlY3V0YWJsZShUZXN0SlNDICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL0phdmFTY3JpcHRDb3JlL2dsaWIvVGVzdEpTQy5jcHApCit0YXJnZXRfbGlua19s
aWJyYXJpZXMoVGVzdEpTQworICAgICR7R0xJQl9MSUJSQVJJRVN9CisgICAgSmF2YVNjcmlwdENv
cmUKKykKK2FkZF90ZXN0KFRlc3RKU0MgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJ
UkVDVE9SWX0vSmF2YVNjcmlwdENvcmUvVGVzdEpTQykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRl
c3RKU0MgUFJPUEVSVElFUyBUSU1FT1VUIDYwKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RK
U0MgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JV
TlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNjcmlwdENvcmUpCisKIGlmIChDT01QSUxFUl9J
U19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJL
aXQgLVduby1zaWduLWNvbXBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtV25vLXVuZGVmCkBAIC0xMjQsNCArMTM1LDggQEAgaWYgKENPTVBJTEVSX0lTX0dD
Q19PUl9DTEFORykKICAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdFdlYkNvcmUg
LVduby1zaWduLWNvbXBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLVduby11bmRlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCisKKyAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhf
RkxBR1MoVGVzdEpTQyAtV25vLXNpZ24tY29tcGFyZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1Xbm8tdW5kZWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggOTZhMzU3Zjc2MDAuLmU5YmNmMzU1OTA0IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTE1LDYgKzE1LDggQEAgc2V0KEZv
cndhcmRpbmdIZWFkZXJzRm9yVGVzdFdlYktpdEFQSV9OQU1FIFRlc3RXZWJLaXRBUEktZm9yd2Fy
ZGluZy1oZWFkZXJzKQogaW5jbHVkZV9kaXJlY3RvcmllcygKICAgICAke0ZPUldBUkRJTkdfSEVB
REVSU19ESVJ9CiAgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZQor
ICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmUvZ2xpYgorICAgICR7
REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUENPUkVXUEVfRElSfQogICAgICR7VE9PTFNfRElSfS93
cGUvSGVhZGxlc3NWaWV3QmFja2VuZAogKQogCkBAIC04NCw2ICs4NiwxNSBAQCBhZGRfdGVzdChU
ZXN0V2ViS2l0ICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktp
dC9UZXN0V2ViS2l0KQogc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVGVzdFdlYktpdCBQUk9QRVJUSUVT
IFRJTUVPVVQgNjApCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVGVzdFdlYktpdCBQUk9QRVJUSUVT
IFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRf
RElSRUNUT1JZfS9XZWJLaXQpCiAKK2FkZF9leGVjdXRhYmxlKFRlc3RKU0MgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNwcCkKK3RhcmdldF9s
aW5rX2xpYnJhcmllcyhUZXN0SlNDCisgICAgJHtHTElCX0xJQlJBUklFU30KKyAgICBKYXZhU2Ny
aXB0Q29yZQorKQorYWRkX3Rlc3QoVGVzdEpTQyAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQ
VVRfRElSRUNUT1JZfS9KYXZhU2NyaXB0Q29yZS9UZXN0SlNDKQorc2V0X3Rlc3RzX3Byb3BlcnRp
ZXMoVGVzdEpTQyBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMo
VGVzdEpTQyBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RXRUJLSVRB
UElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9KYXZhU2NyaXB0Q29yZSkKKwogaWYgKENPTVBJ
TEVSX0lTX0dDQ19PUl9DTEFORykKICAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVz
dFdlYkNvcmUgLVduby1zaWduLWNvbXBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLVduby11bmRlZgpAQCAtOTEsNCArMTAyLDcgQEAgaWYgKENPTVBJTEVS
X0lTX0dDQ19PUl9DTEFORykKICAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdFdl
YktpdCAtV25vLXNpZ24tY29tcGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC1Xbm8tdW5kZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCisgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hY
X0ZMQUdTKFRlc3RKU0MgLVduby1zaWduLWNvbXBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtV25vLXVuZGVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLVduby11bnVzZWQtcGFyYW1ldGVyKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlNDLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvZ2xpYi9UZXN0SlND
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGQ2NjdmYWExZDgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRD
b3JlL2dsaWIvVGVzdEpTQy5jcHAKQEAgLTAsMCArMSwxODY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8vIEluY2x1ZGUg
SlNDQ29udGV4dFByaXZhdGUuaCB0byBiZSBhYmxlIHRvIHJ1biBnYXJiYWdlIGNvbGxlY3RvciBm
b3IgdGVzdGluZy4KKyNkZWZpbmUgSlNDX0NPTVBJTEFUSU9OIDEKKyNpbmNsdWRlICJqc2MvSlND
Q29udGV4dFByaXZhdGUuaCIKKyN1bmRlZiBKU0NfQ09NUElMQVRJT04KKworI2luY2x1ZGUgPGpz
Yy9qc2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworY2xhc3MgTGVha0NoZWNr
ZXIgeworcHVibGljOgorICAgIExlYWtDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgfkxlYWtD
aGVja2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX3ByaW50KCJMZWFrZWQgb2JqZWN0czoi
KTsKKyAgICAgICAgZm9yIChhdXRvKiBvYmplY3QgOiBtX3dhdGNoZWRPYmplY3RzKQorICAgICAg
ICAgICAgZ19wcmludCgiIFslcyglcCkgJXUgcmVmc10iLCBnX3R5cGVfbmFtZV9mcm9tX2luc3Rh
bmNlKHJlaW50ZXJwcmV0X2Nhc3Q8R1R5cGVJbnN0YW5jZSo+KG9iamVjdCkpLCBvYmplY3QsIEdf
T0JKRUNUKG9iamVjdCktPnJlZl9jb3VudCk7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisgICAg
ICAgIGdfYXNzZXJ0X3RydWUobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKwor
ICAgIHZvaWQgd2F0Y2godm9pZCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShHX0lTX09CSkVDVChvYmplY3QpKTsKKyAgICAgICAgbV93YXRjaGVkT2JqZWN0cy5hZGQob2Jq
ZWN0KTsKKyAgICAgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1Qob2JqZWN0KSwgW10oZ3Bv
aW50ZXIgdXNlckRhdGEsIEdPYmplY3QqIG9iamVjdCkgeworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TGVha0NoZWNrZXIqPih1c2VyRGF0YSktPm1fd2F0Y2hlZE9iamVjdHMucmVtb3ZlKG9iamVj
dCk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PHZv
aWQqPiBtX3dhdGNoZWRPYmplY3RzOworfTsKKworY2xhc3MgRXhjZXB0aW9uSGFuZGxlciB7Citw
dWJsaWM6CisgICAgRXhjZXB0aW9uSGFuZGxlcihKU0NDb250ZXh0KiBjb250ZXh0KQorICAgICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAgICAgICAganNjX2NvbnRleHRfcHVzaF9l
eGNlcHRpb25faGFuZGxlcihtX2NvbnRleHQsIFtdKEpTQ0NvbnRleHQqLCBKU0NFeGNlcHRpb24q
IGV4Y2VwdGlvbiwgZ3BvaW50ZXIpIHsKKyAgICAgICAgICAgIGdfZXJyb3IoIlVORVhQRUNURUQg
RVhDRVBUSU9OOiAlcyIsIGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0aW9uKSk7Cisg
ICAgICAgIH0sIG51bGxwdHIsIG51bGxwdHIpOworICAgIH0KKworICAgIH5FeGNlcHRpb25IYW5k
bGVyKCkKKyAgICB7CisgICAgICAgIHBvcCgpOworICAgIH0KKworICAgIHZvaWQgcHVzaChKU0NF
eGNlcHRpb25IYW5kbGVyIGhhbmRsZXIsIGdwb2ludGVyIHVzZXJEYXRhLCBHRGVzdHJveU5vdGlm
eSBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyKQorICAgIHsKKyAgICAgICAganNjX2NvbnRleHRf
cHVzaF9leGNlcHRpb25faGFuZGxlcihtX2NvbnRleHQsIGhhbmRsZXIsIHVzZXJEYXRhLCBkZXN0
cm95RnVuY3Rpb24pOworICAgIH0KKworICAgIHZvaWQgcG9wKCkKKyAgICB7CisgICAgICAgIGpz
Y19jb250ZXh0X3BvcF9leGNlcHRpb25faGFuZGxlcihtX2NvbnRleHQpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBKU0NDb250ZXh0KiBtX2NvbnRleHQ7Cit9OworCisjZGVmaW5lIGdfYXNzZXJ0
X3Rocm93X2JlZ2luKGhhbmRsZXIsIGRpZFRocm93KSBcCisgICAgZGlkVGhyb3cgPSBmYWxzZTsg
XAorICAgIGhhbmRsZXIucHVzaChbXShKU0NDb250ZXh0KiwgSlNDRXhjZXB0aW9uKiwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsgXAorICAgICAgICAqc3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKSA9
IHRydWU7IFwKKyAgICB9LCAmZGlkVGhyb3csIG51bGxwdHIpOworCisjZGVmaW5lIGdfYXNzZXJ0
X2RpZF90aHJvdyhoYW5kbGVyLCBkaWRUaHJvdykgXAorICAgIGhhbmRsZXIucG9wKCk7IFwKKyAg
ICBnX2Fzc2VydF90cnVlKGRpZFRocm93KTsgXAorICAgIGRpZFRocm93ID0gZmFsc2U7CisKK2V4
dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlND
b250ZXh0UmVmKTsKKworc3RhdGljIHZvaWQganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KEpTQ0Nv
bnRleHQqIGNvbnRleHQpCit7CisgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVi
dWdnaW5nKGpzY0NvbnRleHRHZXRKU0NvbnRleHQoY29udGV4dCkpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0SlNDQmFzaWMoKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsK
KyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisg
ICAgICAgIGF1dG8qIGRlZmF1bHRWTSA9IGpzY19jb250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUo
Y29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X25vbm51bGwoZGVmYXVsdFZNKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChkZWZhdWx0Vk0pOworCisgICAgICAgIEdSZWZQdHI8SlNDVmly
dHVhbE1hY2hpbmU+IHZtID0gYWRvcHRHUmVmKGpzY192aXJ0dWFsX21hY2hpbmVfbmV3KCkpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHZtLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2Uo
dm0uZ2V0KCkgPT0gZGVmYXVsdFZNKTsKKworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNv
bnRleHQyID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGluZSh2
bS5nZXQoKSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQyLmdldCgpKTsKKyAgICAg
ICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyMihjb250ZXh0LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfY29udGV4dF9nZXRfdmlydHVhbF9tYWNoaW5lKGNvbnRl
eHQyLmdldCgpKSA9PSB2bS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBj
b250ZXh0MyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21hY2hpbmUo
ZGVmYXVsdFZNKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dDMuZ2V0KCkpOworICAg
ICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIzKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY19jb250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoY29u
dGV4dDMuZ2V0KCkpID09IGpzY19jb250ZXh0X2dldF92aXJ0dWFsX21hY2hpbmUoY29udGV4dC5n
ZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlMSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAyNSkpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHZhbHVlMS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dl
dF9jb250ZXh0KHZhbHVlMS5nZXQoKSkgPT0gY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZTEuZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZTEuZ2V0KCkpLCA9PSwgMjUpOwor
ICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInZhbHVlMSIsIHZh
bHVlMS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ2YWx1ZTEiKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShy
ZXN1bHQuZ2V0KCkgPT0gdmFsdWUxLmdldCgpKTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dDIuZ2V0KCksICJ2YWx1ZTEiKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfZ2V0X2NvbnRleHQocmVzdWx0LmdldCgpKSA9PSBjb250ZXh0Mi5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkp
KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNv
bnRleHQzLmdldCgpLCAidmFsdWUxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3Vs
dC5nZXQoKSkgPT0gY29udGV4dDMuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQzLmdldCgpLCAidmFsdWUxIiwgdmFsdWUxLmdldCgpKTsKKyAgICAg
ICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQzLmdldCgp
LCAidmFsdWUxIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5nZXQoKSkgPT0g
Y29udGV4dDMuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShyZXN1bHQuZ2V0KCkgPT0g
dmFsdWUxLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVy
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHJlc3VsdC5nZXQoKSksID09LCAyNSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFr
Q2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29u
dGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIyICsgMiIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpz
Y192YWx1ZV9nZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwg
PT0sIDQpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdDIgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIjIgKyAyIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdDIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9nZXRfY29udGV4dChyZXN1bHQyLmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gcmVzdWx0Mi5nZXQoKSk7CisKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0MyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFs
dWF0ZShjb250ZXh0LmdldCgpLCAiMyArIDEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0My5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0
KHJlc3VsdDMuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KHJlc3VsdC5nZXQoKSA9PSByZXN1bHQzLmdldCgpKTsKKworICAgICAgICBhdXRvKiByZXN1bHRQ
dHIgPSByZXN1bHQuZ2V0KCk7CisgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIHJl
c3VsdDIgPSBudWxscHRyOworICAgICAgICByZXN1bHQzID0gbnVsbHB0cjsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gcmVzdWx0NCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiMiArIDIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0NC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3Vs
dDQuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9pc19udW1iZXIocmVzdWx0NC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
anNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdDQuZ2V0KCkpLCA9PSwgNCk7CisgICAgICAgIGdfYXNz
ZXJ0X2ZhbHNlKHJlc3VsdDQuZ2V0KCkgPT0gcmVzdWx0UHRyKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9u
SGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIjIgKyAy
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2dldF9jb250ZXh0KHJlc3VsdC5nZXQoKSkgPT0gY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZm91
ciIsIHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmb3VyIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfZ2V0X2NvbnRleHQodmFsdWUuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSks
ID09LCA0KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0
KCkpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmb3VyIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9u
SGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAidHdvID0gMjsgZm91ciA9IHR3byArIHR3byIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9n
ZXRfY29udGV4dChyZXN1bHQuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAidHdvIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfZ2V0X2NvbnRl
eHQodmFsdWUuZ2V0KCkpID09IGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAyKTsKKworICAgICAgICB2
YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImZv
dXIiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gcmVzdWx0MiA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZml2ZSA9IDQiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Mi5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0Mi5nZXQoKSA9PSB2YWx1ZS5nZXQo
KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDVHlwZXMoKQoreworICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkp
OworICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsK
KworICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdf
bnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkpOworICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkp
OworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGpzY192YWx1ZV90b19kb3VibGUodmFsdWUuZ2V0KCkp
LCA9PSwgMTI1Lik7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1
ZS5nZXQoKSksID09LCAxMjUpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xl
YW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gdmFsdWVTdHJp
bmcoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxMjUiKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFs
dWUoY29udGV4dC5nZXQoKSwgImkiLCB2YWx1ZS5nZXQoKSk7CisgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgp
LCAiaSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdS
ZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMTIuNSkpOworICAgIGNoZWNr
ZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251
bWJlcih2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGpzY192YWx1ZV90b19k
b3VibGUodmFsdWUuZ2V0KCkpLCA9PSwgMTIuNSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192
YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAxMik7CisgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJVRSk7CisgICAgdmFsdWVTdHJp
bmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxMi41Iik7CisgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJkIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImQiKSk7Cisg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0
LmdldCgpID09IHZhbHVlLmdldCgpKTsKKworICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9uZXdfYm9vbGVhbihjb250ZXh0LmdldCgpLCBUUlVFKSk7CisgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbih2YWx1
ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUu
Z2V0KCkpID09IFRSVUUpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIo
dmFsdWUuZ2V0KCkpLCA9PSwgMSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3Rv
X3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5n
ZXQoKSwgPT0sICJ0cnVlIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJiMSIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJiMSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJl
c3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0
KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19ib29sZWFuKGNvbnRl
eHQuZ2V0KCksIEZBTFNFKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbih2YWx1ZS5nZXQoKSkpOworICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IEZBTFNFKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0s
IDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiZmFsc2Ui
KTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImIyIiwgdmFsdWUu
Z2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgImIyIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1
ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3N0cmluZyhjb250ZXh0LmdldCgpLCAiSGVsbG8g
V29ybGQiKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlLmdldCgpKSk7CisgICAgdmFsdWVTdHJpbmcu
cmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJIZWxsbyBXb3JsZCIpOworICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7Cisg
ICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzMSIsIHZhbHVlLmdldCgp
KTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJzMSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19zdHJpbmcoY29udGV4dC5nZXQoKSwgbnVsbHB0cikpOwor
ICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192
YWx1ZV90b19zdHJpbmcodmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVT
dHJpbmcuZ2V0KCksID09LCAiIik7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9v
bGVhbih2YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFs
dWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAganNjX2NvbnRleHRfc2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJzMiIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzMiIpKTsKKyAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0
KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25l
d19zdHJpbmcoY29udGV4dC5nZXQoKSwgIjEyLjUiKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1
ZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKHZhbHVlLmdl
dCgpKSk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICIxMi41
Iik7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkg
PT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoanNjX3ZhbHVlX3RvX2RvdWJsZSh2YWx1
ZS5nZXQoKSksID09LCAxMi41KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2lu
dDMyKHZhbHVlLmdldCgpKSwgPT0sIDEyKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgInMzIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInMzIikpOworICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKHJlc3VsdC5nZXQoKSA9PSB2
YWx1ZS5nZXQoKSk7CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2FycmF5
KGNvbnRleHQuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYXJyYXkodmFsdWUuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QodmFsdWUuZ2V0KCkpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHZhbHVlLmdldCgpKSA9PSBU
UlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgp
KSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcodmFs
dWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAi
Iik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJhMSIsIHZhbHVl
LmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksICJhMSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0
X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJy
YXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihh
cnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50
MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwgMCk7CisgICAgR1JlZlB0cjxKU0NWYWx1ZT4gYXJy
YXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEp
KTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAganNjX3ZhbHVlX29i
amVjdF9zZXRfcHJvcGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIGpzY192YWx1ZV90b19pbnQz
MihhcnJheUxlbmd0aC5nZXQoKSksIGFycmF5SXRlbS5nZXQoKSk7CisgICAgYXJyYXlMZW5ndGgg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFsdWUuZ2V0KCksICJs
ZW5ndGgiKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09
LCAxKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVlLmdl
dCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEiKTsK
KyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5n
ZXQoKSwgNSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBqc2Nf
dmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwganNjX3ZhbHVl
X3RvX2ludDMyKGFycmF5TGVuZ3RoLmdldCgpKSwgYXJyYXlJdGVtLmdldCgpKTsKKyAgICBhcnJh
eUxlbmd0aCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eSh2YWx1ZS5n
ZXQoKSwgImxlbmd0aCIpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5TGVuZ3RoLmdldCgpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoYXJyYXlMZW5ndGguZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5TGVuZ3RoLmdl
dCgpKSwgPT0sIDIpOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmco
dmFsdWUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAiMSw1Iik7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVy
KGNvbnRleHQuZ2V0KCksIDEwKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkp
OworICAgIGpzY192YWx1ZV9vYmplY3Rfc2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgp
LCAzLCBhcnJheUl0ZW0uZ2V0KCkpOworICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5KHZhbHVlLmdldCgpLCAibGVuZ3RoIikpOworICAgIGNo
ZWNrZXIud2F0Y2goYXJyYXlMZW5ndGguZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX251bWJlcihhcnJheUxlbmd0aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChq
c2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGguZ2V0KCkpLCA9PSwgNCk7CisgICAgYXJyYXlJ
dGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZh
bHVlLmdldCgpLCAwKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09
LCAxKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJv
cGVydHlfYXRfaW5kZXgodmFsdWUuZ2V0KCksIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5
SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKGFycmF5
SXRlbS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJy
YXlJdGVtLmdldCgpKSwgPT0sIDUpOworICAgIGFycmF5SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFs
dWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleCh2YWx1ZS5nZXQoKSwgMikpOworICAgIGNo
ZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc191bmRlZmluZWQoYXJyYXlJdGVtLmdldCgpKSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCAz
KSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCAxMCk7CisgICAg
YXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkodmFs
dWUuZ2V0KCksICJsZW5ndGgiKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQo
KSk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3Bl
cnR5X2F0X2luZGV4KHZhbHVlLmdldCgpLCBqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlMZW5ndGgu
Z2V0KCkpICsgMSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRlZmluZWQoYXJyYXlJdGVtLmdldCgpKSk7CisK
KyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBhcnJheSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Fy
cmF5KGNvbnRleHQuZ2V0KCksIEdfVFlQRV9JTlQsIDEsIEdfVFlQRV9TVFJJTkcsICJ0d28iLCBH
X1RZUEVfQk9PTEVBTiwgVFJVRSwgSlNDX1RZUEVfVkFMVUUsIHZhbHVlLmdldCgpLCBHX1RZUEVf
Tk9ORSkpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXkuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX2FycmF5KGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfaXNfb2JqZWN0KGFycmF5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfdG9fYm9vbGVhbihhcnJheS5nZXQoKSkgPT0gVFJVRSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMihhcnJheS5nZXQoKSksID09LCAwKTsKKyAgICB2YWx1ZVN0
cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKGFycmF5LmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIjEsdHdvLHRydWUsMSw1LCwxMCIpOwor
ICAgIGFycmF5TGVuZ3RoID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfZ2V0X3Byb3BlcnR5
KGFycmF5LmdldCgpLCAibGVuZ3RoIikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlMZW5ndGgu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihhcnJheUxlbmd0
aC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoYXJyYXlM
ZW5ndGguZ2V0KCkpLCA9PSwgNCk7CisgICAgYXJyYXlJdGVtID0gYWRvcHRHUmVmKGpzY192YWx1
ZV9vYmplY3RfZ2V0X3Byb3BlcnR5X2F0X2luZGV4KGFycmF5LmdldCgpLCAwKSk7CisgICAgY2hl
Y2tlci53YXRjaChhcnJheUl0ZW0uZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X2lzX251bWJlcihhcnJheUl0ZW0uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3Zh
bHVlX3RvX2ludDMyKGFycmF5SXRlbS5nZXQoKSksID09LCAxKTsKKyAgICBhcnJheUl0ZW0gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0
KCksIDEpKTsKKyAgICBjaGVja2VyLndhdGNoKGFycmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfc3RyaW5nKGFycmF5SXRlbS5nZXQoKSkpOworICAgIHZhbHVl
U3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmcoYXJyYXlJdGVtLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInR3byIpOworICAgIGFycmF5
SXRlbSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2dldF9wcm9wZXJ0eV9hdF9pbmRleChh
cnJheS5nZXQoKSwgMikpOworICAgIGNoZWNrZXIud2F0Y2goYXJyYXlJdGVtLmdldCgpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKGFycmF5SXRlbS5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4oYXJyYXlJdGVtLmdldCgpKSA9
PSBUUlVFKTsKKyAgICBhcnJheUl0ZW0gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9nZXRf
cHJvcGVydHlfYXRfaW5kZXgoYXJyYXkuZ2V0KCksIDMpKTsKKyAgICBjaGVja2VyLndhdGNoKGFy
cmF5SXRlbS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhcnJheUl0ZW0uZ2V0KCkgPT0gdmFs
dWUuZ2V0KCkpOworCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGdBcnJheSA9IGFkb3B0R1JlZihn
X3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19vYmplY3RfdW5yZWYpKTsKKyAgICBnX3B0
cl9hcnJheV9hZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0Lmdl
dCgpLCAxKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25l
d19zdHJpbmcoY29udGV4dC5nZXQoKSwgInR3byIpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQoZ0Fy
cmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X2Jvb2xlYW4oY29udGV4dC5nZXQoKSwgVFJVRSkpOwor
ICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGdfb2JqZWN0X3JlZih2YWx1ZS5nZXQo
KSkpOworICAgIGFycmF5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfYXJyYXlfZnJvbV9nYXJy
YXkoY29udGV4dC5nZXQoKSwgZ0FycmF5LmdldCgpKSk7CisgICAgY2hlY2tlci53YXRjaChhcnJh
eS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYXJyYXkoYXJyYXkuZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoYXJyYXkuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKGFycmF5LmdldCgpKSA9
PSBUUlVFKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKGFycmF5Lmdl
dCgpKSwgPT0sIDApOworICAgIHZhbHVlU3RyaW5nLnJlc2V0KGpzY192YWx1ZV90b19zdHJpbmco
YXJyYXkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAiMSx0d28sdHJ1ZSwxLDUsLDEwIik7CisgICAgYXJyYXlMZW5ndGggPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX29iamVjdF9nZXRfcHJvcGVydHkoYXJyYXkuZ2V0KCksICJsZW5ndGgiKSk7CisgICAg
Y2hlY2tlci53YXRjaChhcnJheUxlbmd0aC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2Nf
dmFsdWVfaXNfbnVtYmVyKGFycmF5TGVuZ3RoLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50
KGpzY192YWx1ZV90b19pbnQzMihhcnJheUxlbmd0aC5nZXQoKSksID09LCBnQXJyYXktPmxlbik7
CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0Lmdl
dCgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KHZhbHVlLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gVFJV
RSk7CisgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSks
ID09LCAwKTsKKyAgICB2YWx1ZVN0cmluZy5yZXNldChqc2NfdmFsdWVfdG9fc3RyaW5nKHZhbHVl
LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIltv
YmplY3QgT2JqZWN0XSIpOworICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgp
LCAibyIsIHZhbHVlLmdldCgpKTsKKyAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
Z2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJvIikpOworICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKHJlc3VsdC5nZXQoKSA9PSB2YWx1ZS5nZXQoKSk7
CisKKyAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X3VuZGVmaW5lZChjb250ZXh0
LmdldCgpKSk7CisgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbih2YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7Cisg
ICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3ZhbHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ1bmRlZmluZWQiKTsK
KyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgInUiLCB2YWx1ZS5nZXQo
KSk7CisgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0
LmdldCgpLCAidSIpKTsKKyAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShyZXN1bHQuZ2V0KCkgPT0gdmFsdWUuZ2V0KCkpOworCisgICAgdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udWxsKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBjaGVja2Vy
LndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udWxs
KHZhbHVlLmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbih2
YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMCk7CisgICAgdmFsdWVTdHJpbmcucmVzZXQoanNjX3Zh
bHVlX3RvX3N0cmluZyh2YWx1ZS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sICJudWxsIik7CisgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRl
eHQuZ2V0KCksICJuIiwgdmFsdWUuZ2V0KCkpOworICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9nZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgIm4iKSk7CisgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUocmVzdWx0LmdldCgpID09IHZhbHVl
LmdldCgpKTsKK30KKworc3RhdGljIGludCBmb28oaW50IG4pCit7CisgICAgcmV0dXJuIG4gKiAy
OworfQorCitzdGF0aWMgdm9pZCBjYWxsYmFjayhKU0NWYWx1ZSogZnVuY3Rpb24pCit7CisgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2Nh
bGwoZnVuY3Rpb24sIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05PTkUpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc191bmRlZmluZWQodmFsdWUuZ2V0KCkpKTsKK30KKworc3RhdGlj
IHZvaWQgZG91YmxlQW5kU2V0SW5SZXN1bHQoaW50IG4pCit7CisgICAgR1JlZlB0cjxKU0NWYWx1
ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoanNjX2NvbnRleHRfZ2V0
X2N1cnJlbnQoKSwgbiAqIDIpKTsKKyAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoanNjX2NvbnRl
eHRfZ2V0X2N1cnJlbnQoKSwgInJlc3VsdCIsIHZhbHVlLmdldCgpKTsKK30KKworc3RhdGljIGlu
dCBzdW1GdW5jdGlvbihHUHRyQXJyYXkqIGFycmF5KQoreworICAgIGludCByZXR2YWwgPSAwOwor
CisgICAgZ19wdHJfYXJyYXlfZm9yZWFjaChhcnJheSwgW10oZ3BvaW50ZXIgZGF0YSwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUoZGF0YSkp
OworICAgICAgICBKU0NWYWx1ZSogaXRlbSA9IEpTQ19WQUxVRShkYXRhKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKGl0ZW0pKTsKKyAgICAgICAgKnN0YXRpY19j
YXN0PGludCo+KHVzZXJEYXRhKSArPSBqc2NfdmFsdWVfdG9faW50MzIoaXRlbSk7CisgICAgfSwg
JnJldHZhbCk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SlND
RnVuY3Rpb24oKQoreworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAg
ICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25l
dygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhj
ZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVu
Y3Rpb24oY29udGV4dC5nZXQoKSwgImZvbyIsIEdfQ0FMTEJBQ0soZm9vKSwgbnVsbHB0ciwgbnVs
bHB0ciwgIEdfVFlQRV9JTlQsIDEsIEdfVFlQRV9JTlQpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0
LmdldCgpLCAiZm9vIiwgZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImZvbygyMDApIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9
PSwgNDAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihq
c2NfdmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX0lOVCwgMjAwLCBH
X1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZSh2YWx1ZS5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBl
eGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmb28gPSBmdW5jdGlvbihuKSB7IHJldHVybiBuICogMjsgfSIpKTsKKyAgICAgICAgY2hl
Y2tlci53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
cmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJm
b28oMjAwKSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0s
IDQwMCk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNj
X3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24uZ2V0KCksIEdfVFlQRV9JTlQsIDIwMCwgR19U
WVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUodmFsdWUuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhj
ZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVl
PiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X2Z1bmN0aW9uKGNvbnRleHQuZ2V0
KCksICJjYWxsYmFjayIsIEdfQ0FMTEJBQ0soY2FsbGJhY2spLCBudWxscHRyLCBudWxscHRyLCBH
X1RZUEVfTk9ORSwgMSwgSlNDX1RZUEVfVkFMVUUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChm
dW5jdGlvbi5nZXQoKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0Lmdl
dCgpLCAiY2FsbGJhY2siLCBmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAidmFyIHJlc3VsdCA9IDA7IGNhbGxiYWNrKGZ1bmN0aW9uKG4peyByZXN1bHQgPSBuICogMjsg
fSk7IHJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwg
PT0sIDQwMCk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1
YXRlKGNvbnRleHQuZ2V0KCksICJyZXN1bHQgPSAwIikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0IikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJl
cihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19p
bnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgMCk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
ZGJsID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwgImRv
dWJsZUFuZFNldEluUmVzdWx0IiwgR19DQUxMQkFDSyhkb3VibGVBbmRTZXRJblJlc3VsdCksIG51
bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfSU5UKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2goZGJsLmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUg
PSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24uZ2V0KCksIEpTQ19U
WVBFX1ZBTFVFLCBkYmwuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1i
ZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9f
aW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7CisgICAgfQorCisgICAgeworICAgICAgICBM
ZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIo
Y29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwKKyAgICAgICAgICAg
ICJzdW1GdW5jdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4iCisgICAgICAgICAgICAiICAgIHZh
ciByZXN1bHQgPSAwO1xuIgorICAgICAgICAgICAgIiAgICBmb3IgKHZhciBpIGluIGFycmF5KSB7
IHJlc3VsdCArPSBhcnJheVtpXTsgfVxuIgorICAgICAgICAgICAgIiAgICByZXR1cm4gcmVzdWx0
O1xuIgorICAgICAgICAgICAgIn0iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24u
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZnVuY3Rp
b24uZ2V0KCkpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBhcnJheSA9IGFkb3B0R1Jl
Zihqc2NfdmFsdWVfbmV3X2FycmF5KGNvbnRleHQuZ2V0KCksIEdfVFlQRV9JTlQsIDIsIEdfVFlQ
RV9JTlQsIDQsIEdfVFlQRV9JTlQsIDYsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goYXJyYXkuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0g
YWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKGZ1bmN0aW9uLmdldCgpLCBKU0NfVFlQ
RV9WQUxVRSwgYXJyYXkuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1i
ZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19p
bnQzMih2YWx1ZS5nZXQoKSksID09LCAxMik7CisKKyAgICAgICAgR1JlZlB0cjxHUHRyQXJyYXk+
IGdBcnJheSA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19vYmpl
Y3RfdW5yZWYpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3Zh
bHVlX25ld19udW1iZXIoY29udGV4dC5nZXQoKSwgMSkpOworICAgICAgICBnX3B0cl9hcnJheV9h
ZGQoZ0FycmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAzKSk7
CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVt
YmVyKGNvbnRleHQuZ2V0KCksIDUpKTsKKworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2Nf
dmFsdWVfZnVuY3Rpb25fY2FsbChmdW5jdGlvbi5nZXQoKSwgR19UWVBFX1BUUl9BUlJBWSwgZ0Fy
cmF5LmdldCgpLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgOSk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVj
a2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOwor
ICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7
CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX3Zh
bHVlX25ld19mdW5jdGlvbihjb250ZXh0LmdldCgpLCAic3VtRnVuY3Rpb24iLCBHX0NBTExCQUNL
KHN1bUZ1bmN0aW9uKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX0lOVCwgMSwgR19UWVBFX1BU
Ul9BUlJBWSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKyAgICAg
ICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJzdW1GdW5jdGlvbiIsIGZ1
bmN0aW9uLmdldCgpKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInN1bUZ1bmN0aW9uKFsyLDQs
Nl0pIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTIpOwor
CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBnQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJy
YXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfb2JqZWN0X3VucmVmKSk7CisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChnQXJyYXkuZ2V0KCksIGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCks
IDEpKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGdBcnJheS5nZXQoKSwganNjX3ZhbHVlX25l
d19udW1iZXIoY29udGV4dC5nZXQoKSwgMykpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoZ0Fy
cmF5LmdldCgpLCBqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCA1KSk7CisKKyAg
ICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX2Z1bmN0aW9uX2NhbGwoZnVuY3Rpb24u
Z2V0KCksIEdfVFlQRV9QVFJfQVJSQVksIGdBcnJheS5nZXQoKSwgR19UWVBFX05PTkUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDkpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdEpTQ09iamVjdCgpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tl
ciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0
KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5n
ZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJjbGFzcyBGb28geyBmb28obikgeyByZXR1
cm4gbiAqIDI7IH0gfTsgZm9vID0gbmV3IEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
Zm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGZv
by5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5z
dGFuY2Vfb2YoZm9vLmdldCgpLCAiRm9vIikpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+
IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdl
dCgpLCAiZm9vIiwgR19UWVBFX0lOVCwgMjAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192
YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNDAwKTsKKworICAgICAgICBib29sIGRp
ZFRocm93ID0gZmFsc2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhh
bmRsZXIsIGRpZFRocm93KTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9v
YmplY3RfaW52b2tlX21ldGhvZChmb28uZ2V0KCksICJiYXIiLCBHX1RZUEVfSU5ULCAyMDAsIEdf
VFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJGb28iKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQoKSkpOworCisgICAgICAgIGZvbyA9IGFk
b3B0R1JlZihqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbChjb25zdHJ1Y3Rvci5nZXQoKSwgR19U
WVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksICJG
b28iKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9vYmplY3RfaW52
b2tlX21ldGhvZChmb28uZ2V0KCksICJmb28iLCBHX1RZUEVfSU5ULCAzMDAsIEdfVFlQRV9OT05F
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQoKSksID09LCA2MDApOwor
CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZm9vMiIsIGZv
by5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0
ZShjb250ZXh0LmdldCgpLCAiZm9vMiBpbnN0YW5jZW9mIEZvbyIpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9vMi5mb28oNTAwKSIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDEwMDApOworICAg
IH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0
cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFu
ZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8
SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X29iamVjdChjb250ZXh0
LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gob2JqZWN0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVj
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5z
dGFuY2Vfb2Yob2JqZWN0LmdldCgpLCAiT2JqZWN0IikpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHByb3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQu
Z2V0KCksIDI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOworCisg
ICAgICAgIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEob2JqZWN0LmdldCgp
LCAidmFsIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPigwKSwgcHJvcGVydHku
Z2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYi
LCBvYmplY3QuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDsiKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAyNSk7CisKKyAgICAgICAg
Ym9vbCBkaWRUaHJvdyA9IGZhbHNlOworICAgICAgICBnX2Fzc2VydF90aHJvd19iZWdpbihleGNl
cHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19j
b250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICIndXNlIHN0cmljdCc7IGYudmFsID0gMzI7
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAg
dmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYu
cHJvcGVydHlJc0VudW1lcmFibGUoJ3ZhbCcpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4o
dmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVh
bih2YWx1ZS5nZXQoKSkgPT0gRkFMU0UpOworCisgICAgICAgIHZhbHVlID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJkZWxldGUgZi52YWw7IikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdS
ZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsOyIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
anNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICBwcm9w
ZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCA1Mikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICBqc2Nf
dmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgInZhbCIsIHN0
YXRpY19jYXN0PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oMCksIHByb3BlcnR5LmdldCgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfZGlkX3Rocm93KGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKwor
ICAgICAgICBwcm9wZXJ0eSA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0
LmdldCgpLCAzMikpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAg
ICAgICAganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCks
ICJ2YWwyIiwgc3RhdGljX2Nhc3Q8SlNDVmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJP
UEVSVFlfRU5VTUVSQUJMRSB8IEpTQ19WQUxVRV9QUk9QRVJUWV9XUklUQUJMRSksIHByb3BlcnR5
LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYudmFsMjsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1
ZS5nZXQoKSksID09LCAzMik7CisKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRl
eHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgIid1c2Ugc3RyaWN0JzsgZi52YWwyID0gNDU7Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYudmFsMjsiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA0NSk7CisKKyAgICAg
ICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwg
ImYucHJvcGVydHlJc0VudW1lcmFibGUoJ3ZhbDInKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29s
ZWFuKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jv
b2xlYW4odmFsdWUuZ2V0KCkpID09IFRSVUUpOworCisgICAgICAgIHByb3BlcnR5ID0gYWRvcHRH
UmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDEyNSkpOworICAgICAgICBj
aGVja2VyLndhdGNoKHByb3BlcnR5LmdldCgpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9k
ZWZpbmVfcHJvcGVydHlfZGF0YShvYmplY3QuZ2V0KCksICJ2YWwzIiwgc3RhdGljX2Nhc3Q8SlND
VmFsdWVQcm9wZXJ0eUZsYWdzPihKU0NfVkFMVUVfUFJPUEVSVFlfQ09ORklHVVJBQkxFIHwgSlND
X1ZBTFVFX1BST1BFUlRZX1dSSVRBQkxFKSwgcHJvcGVydHkuZ2V0KCkpOworICAgICAgICB2YWx1
ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi52YWwz
OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDEyNSk7CisK
KyAgICAgICAgcHJvcGVydHkgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4
dC5nZXQoKSwgMTUwKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOwor
ICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQo
KSwgInZhbDMiLCBzdGF0aWNfY2FzdDxKU0NWYWx1ZVByb3BlcnR5RmxhZ3M+KEpTQ19WQUxVRV9Q
Uk9QRVJUWV9DT05GSUdVUkFCTEUpLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAgICAgIHZhbHVlID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnZhbDM7Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgMTUwKTsKKworICAg
ICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgp
LCAiZGVsZXRlIGYudmFsMzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkp
OworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZi52YWwzOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZCh2YWx1ZS5nZXQo
KSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGZ1bmN0aW9uID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9uZXdfZnVuY3Rpb24oY29udGV4dC5nZXQoKSwgImZvbyIsIEdfQ0FMTEJBQ0soZm9v
KSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX0lOVCwgMSwgR19UWVBFX0lOVCkpOworICAgICAg
ICBjaGVja2VyLndhdGNoKGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2Jq
ZWN0X2RlZmluZV9wcm9wZXJ0eV9kYXRhKG9iamVjdC5nZXQoKSwgImZvbyIsIHN0YXRpY19jYXN0
PEpTQ1ZhbHVlUHJvcGVydHlGbGFncz4oMCksIGZ1bmN0aW9uLmdldCgpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZv
a2VfbWV0aG9kKG9iamVjdC5nZXQoKSwgImZvbyIsIEdfVFlQRV9JTlQsIDIwMCwgR19UWVBFX05P
TkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwgPT0sIDQwMCk7
CisKKyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhy
b3cpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2Vf
bWV0aG9kKG9iamVjdC5nZXQoKSwgImZvbyIsIEdfVFlQRV9QT0lOVEVSLCAiMjAwIiwgR19UWVBF
X05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAg
fQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRy
PEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5k
bGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29udGV4dC5n
ZXQoKSwgMTI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAg
ICAgZ19hc3NlcnRfZmFsc2UoanNjX3ZhbHVlX2lzX29iamVjdCh2YWx1ZS5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKHZhbHVl
LmdldCgpLCAiT2JqZWN0IikpOworCisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAg
ICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOwor
ICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29i
amVjdF9pbnZva2VfbWV0aG9kKHZhbHVlLmdldCgpLCAiZm9vIiwgR19UWVBFX0lOVCwgMjAwLCBH
X1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAg
ICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfdGhyb3dfYmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cp
OworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgX0ZvbyBGb287CitzdHJ1Y3QgX0ZvbyB7Cisg
ICAgaW50IGZvbzsKKyAgICBGb28qIHNpYmxpbmc7Cit9OworCitzdGF0aWMgRm9vKiBmb29DcmVh
dGUoKQoreworICAgIHJldHVybiBnX25ldzAoRm9vLCAxKTsKK30KKworc3RhdGljIEZvbyogZm9v
Q3JlYXRlV2l0aEZvbyhpbnQgdmFsdWUpCit7CisgICAgYXV0byogZiA9IGZvb0NyZWF0ZSgpOwor
ICAgIGYtPmZvbyA9IHZhbHVlOworICAgIHJldHVybiBmOworfQorCitzdGF0aWMgdm9pZCBmb29G
cmVlKEZvbyogZm9vKQoreworICAgIGdfZnJlZShmb28pOworfQorCitzdGF0aWMgdm9pZCBzZXRG
b28oRm9vKiBmb28sIGludCB2YWx1ZSkKK3sKKyAgICBmb28tPmZvbyA9IHZhbHVlOworfQorCitz
dGF0aWMgaW50IGdldEZvbyhGb28qIGZvbykKK3sKKyAgICByZXR1cm4gZm9vLT5mb287Cit9CisK
K3N0YXRpYyB2b2lkIHNldFNpYmxpbmcoRm9vKiBmb28sIEZvbyogc2libGluZykKK3sKKyAgICBm
b28tPnNpYmxpbmcgPSBzaWJsaW5nOworfQorCitzdGF0aWMgRm9vKiBnZXRTaWJsaW5nKEZvbyog
Zm9vKQoreworICAgIHJldHVybiBmb28tPnNpYmxpbmc7Cit9CisKK3N0YXRpYyB2b2lkIG11bHRp
cGx5Rm9vKEZvbyogZm9vLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICBmb28tPmZvbyAqPSBtdWx0
aXBsaWVyOworfQorCitzdHJ1Y3QgUHJvbWlzZURhdGEgeworICAgIEZvbyogZm9vOworICAgIGlu
dCBtdWx0aXBsaWVyOworICAgIExlYWtDaGVja2VyKiBjaGVja2VyOworfTsKKworc3RhdGljIHZv
aWQgZ2V0TXVsdGlwbHlGb28oSlNDVmFsdWUqIHJlc29sdmUsIEpTQ1ZhbHVlKiByZWplY3QsIFBy
b21pc2VEYXRhKiBkYXRhKQoreworICAgIGRhdGEtPmNoZWNrZXItPndhdGNoKHJlc29sdmUpOwor
ICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX1ZBTFVFKHJlc29sdmUpKTsKKyAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19mdW5jdGlvbihyZXNvbHZlKSk7CisgICAgZGF0YS0+Y2hlY2tlci0+
d2F0Y2gocmVqZWN0KTsKKyAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19WQUxVRShyZWplY3QpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19mdW5jdGlvbihyZWplY3QpKTsKKworICAg
IEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdDsKKyAgICBpZiAoZGF0YS0+bXVsdGlwbGllciA+IDAp
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfdmFsdWVfZnVuY3Rpb25fY2FsbChyZXNv
bHZlLCBHX1RZUEVfSU5ULCBkYXRhLT5mb28tPmZvbyAqIGRhdGEtPm11bHRpcGxpZXIsIEdfVFlQ
RV9OT05FKSk7CisgICAgZWxzZSB7CisgICAgICAgIEdSZWZQdHI8SlNDRXhjZXB0aW9uPiBleGNl
cHRpb24gPSBhZG9wdEdSZWYoanNjX2V4Y2VwdGlvbl9uZXcoanNjX2NvbnRleHRfZ2V0X2N1cnJl
bnQoKSwgIk11bHRpcGxpZXIgbXVzdCBiZSBwb3NpdGl2ZSBncmVhdGVyIHRoYW4gMCIpKTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9mdW5jdGlvbl9jYWxsKHJlamVjdCwg
SlNDX1RZUEVfRVhDRVBUSU9OLCBleGNlcHRpb24uZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAg
fQorICAgIGRhdGEtPmNoZWNrZXItPndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOworfQorCitzdGF0aWMg
SlNDVmFsdWUqIGdldE11bHRpcGx5Rm9vQXN5bmMoRm9vKiBmb28sIGludCBtdWx0aXBsaWVyLCBM
ZWFrQ2hlY2tlciogY2hlY2tlcikKK3sKKyAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NfY29udGV4
dF9nZXRfY3VycmVudCgpOworICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX0NPTlRFWFQoanNDb250
ZXh0KSk7CisKKyAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmdW5jdGlvbiA9IGFkb3B0R1JlZihqc2Nf
dmFsdWVfbmV3X2Z1bmN0aW9uKGpzQ29udGV4dCwgbnVsbHB0ciwgR19DQUxMQkFDSyhnZXRNdWx0
aXBseUZvbyksIG5ldyBQcm9taXNlRGF0YSB7IGZvbywgbXVsdGlwbGllciwgY2hlY2tlcn0sCisg
ICAgICAgIFtdKGdwb2ludGVyIGRhdGEpIHsgZGVsZXRlIHN0YXRpY19jYXN0PFByb21pc2VEYXRh
Kj4oZGF0YSk7IH0sIEdfVFlQRV9OT05FLCAyLCBKU0NfVFlQRV9WQUxVRSwgSlNDX1RZUEVfVkFM
VUUpKTsKKyAgICBjaGVja2VyLT53YXRjaChmdW5jdGlvbi5nZXQoKSk7CisgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gcHJvbWlzZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoanNDb250
ZXh0LCAiUHJvbWlzZSIpKTsKKyAgICBjaGVja2VyLT53YXRjaChwcm9taXNlLmdldCgpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihwcm9taXNlLmdldCgpKSk7
CisgICAgYXV0byogcmV0dXJuVmFsdWUgPSBqc2NfdmFsdWVfY29uc3RydWN0b3JfY2FsbChwcm9t
aXNlLmdldCgpLCBKU0NfVFlQRV9WQUxVRSwgZnVuY3Rpb24uZ2V0KCksIEdfVFlQRV9OT05FKTsK
KyAgICBjaGVja2VyLT53YXRjaChyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVl
OworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IGJhejsKK30gQmF6OworCitzdGF0aWMg
QmF6KiBiYXpDcmVhdGUoKQoreworICAgIHJldHVybiBnX25ldzAoQmF6LCAxKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdEpTQ0NsYXNzKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgp
KTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9j
bGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNzKTsK
KyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NsYXNzX2dldF9wYXJlbnQoanNjQ2xhc3MpKTsK
KworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2Nf
Y2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0Ny
ZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkp
OworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29uc3RydWN0b3IuZ2V0KCkpKTsK
KyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksIGpzY19jbGFzc19n
ZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9yLmdldCgpKTsKKworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5n
ZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChmb28uZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29m
KGZvby5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYgaW5zdGFuY2VvZiBGb287IikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xl
YW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jv
b2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAganNjX2NsYXNzX2FkZF9tZXRob2QoanNj
Q2xhc3MsICJnZXRGb28iLCBHX0NBTExCQUNLKGdldEZvbyksIG51bGxwdHIsIG51bGxwdHIsIEdf
VFlQRV9JTlQsIDAsIEdfVFlQRV9OT05FKTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gdmFs
dWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQoKSwg
ImdldEZvbyIsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0
KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5n
ZXQoKSksID09LCAwKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1ZTIgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZ2V0Rm9vKCkiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
dHJ1ZSh2YWx1ZS5nZXQoKSA9PSB2YWx1ZTIuZ2V0KCkpOworCisgICAgICAgIGpzY19jbGFzc19h
ZGRfbWV0aG9kKGpzY0NsYXNzLCAic2V0Rm9vIiwgR19DQUxMQkFDSyhzZXRGb28pLCBudWxscHRy
LCBudWxscHRyLCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7CisgICAgICAgIHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfdmFsdWVfb2JqZWN0X2ludm9rZV9tZXRob2QoZm9vLmdldCgpLCAic2V0
Rm9vIiwgR19UWVBFX0lOVCwgMjUsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRf
ZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuZ2V0Rm9vKCkiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19u
dW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90
b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAyNSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLnNldEZvbyg0NSkiKSk7
CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX29iamVjdF9pbnZva2VfbWV0aG9kKGZvby5nZXQoKSwgImdldEZv
byIsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSks
ID09LCA0NSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IyID0gYWRv
cHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsICJDcmVhdGVXaXRoRm9v
IiwgR19DQUxMQkFDSyhmb29DcmVhdGVXaXRoRm9vKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBF
X1BPSU5URVIsIDEsIEdfVFlQRV9JTlQpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1
Y3RvcjIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1
Y3Rvcihjb25zdHJ1Y3RvcjIuZ2V0KCkpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRf
cHJvcGVydHkoY29uc3RydWN0b3IuZ2V0KCksICJDcmVhdGVXaXRoRm9vIiwgY29uc3RydWN0b3Iy
LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28yID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMiA9IG5ldyBGb28uQ3JlYXRlV2l0
aEZvbyg0Mik7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvbzIuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZm9vMi5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vMi5nZXQo
KSwganNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSkpOworICAgICAgICBnX2Fzc2VydF9mYWxz
ZShmb28uZ2V0KCkgPT0gZm9vMi5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIgaW5zdGFuY2VvZiBGb287Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIg
aW5zdGFuY2VvZiBGb28uQ3JlYXRlV2l0aEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVh
bihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9v
bGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpz
Y0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNL
KHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIuZm9vIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2Nf
dmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDIpOworICAgICAgICByZXN1bHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYyLmZvbyA9IDUy
IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHZhbHVl
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMi5mb28i
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCA1Mik7CisKKyAg
ICAgICAgSlNDQ2xhc3MqIG90aGVyQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhj
b250ZXh0LmdldCgpLCAiQmF6IiwgbnVsbHB0ciwgZ19mcmVlKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChvdGhlckNsYXNzKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NsYXNzX2dldF9w
YXJlbnQob3RoZXJDbGFzcykpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVj
dG9yMyA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKG90aGVyQ2xhc3MsIG51
bGxwdHIsIEdfQ0FMTEJBQ0soYmF6Q3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BP
SU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0
b3IzLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0
b3IoY29uc3RydWN0b3IzLmdldCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShj
b250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUob3RoZXJDbGFzcyksIGNvbnN0cnVjdG9y
My5nZXQoKSk7CisKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX3ZhbHVlX29iamVjdF9pc19p
bnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShvdGhlckNsYXNzKSkpOwor
ICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29mKGZv
bzIuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShvdGhlckNsYXNzKSkpOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IGJheiA9IGFkb3B0R1JlZihqc2NfdmFsdWVfY29uc3RydWN0b3JfY2Fs
bChjb25zdHJ1Y3RvcjMuZ2V0KCksIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0
Y2goYmF6LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0
KGJhei5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNf
aW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUob3RoZXJDbGFzcykpKTsK
KyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihi
YXouZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcykpKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0
aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3Mg
PSBqc2NfY29udGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0
ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBj
aGVja2VyLndhdGNoKGpzY0NsYXNzKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25z
dHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBu
dWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9Q
T0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVj
dG9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0
b3IoY29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9yLmdl
dCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgInNpYmxpbmci
LCBHX1RZUEVfUE9JTlRFUiwgR19DQUxMQkFDSyhnZXRTaWJsaW5nKSwgR19DQUxMQkFDSyhzZXRT
aWJsaW5nKSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4g
cmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJm
MSA9IG5ldyBGb28oKTsgZjIgPSBuZXcgRm9vKCk7IGYyLnNpYmxpbmcgPSBmMSIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IGYxID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAi
ZjEiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZjEuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZjEuZ2V0KCkpKTsKKyAgICAgICAgR1JlZlB0cjxK
U0NWYWx1ZT4gZjIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0
KCksICJmMiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmMi5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChmMi5nZXQoKSkpOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNv
bnRleHQuZ2V0KCksICJmMi5zaWJsaW5nIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh2YWx1ZS5nZXQoKSA9PSBmMS5nZXQoKSk7
CisKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoZjEuZ2V0KCksICJzaWJs
aW5nIiwgZjIuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEuc2libGluZyIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUodmFsdWUuZ2V0KCkgPT0g
ZjIuZ2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsK
KyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisg
ICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNv
bnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19h
ZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwg
bnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAg
ICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1l
KGpzY0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBqc2NfY2xhc3NfYWRkX3By
b3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBH
X0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIEZvbyogZiA9
IGZvb0NyZWF0ZVdpdGhGb28oMjUpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28gPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgZiwganNjQ2xhc3Mp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19n
ZXRfbmFtZShqc2NDbGFzcykpKTsKKworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgImYiLCBmb28uZ2V0KCkpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYg
aW5zdGFuY2VvZiBGb287IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0Lmdl
dCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJmLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVz
dWx0LmdldCgpKSwgPT0sIDI1KTsKKworICAgICAgICBzZXRGb28oZiwgNDIpOworICAgICAgICBy
ZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYu
Zm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMihyZXN1bHQuZ2V0KCkpLCA9PSwgNDIp
OworCisgICAgICAgIEpTQ0NsYXNzKiBiYXpDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2Ns
YXNzKGNvbnRleHQuZ2V0KCksICJCYXoiLCBudWxscHRyLCBnX2ZyZWUpOworICAgICAgICBjaGVj
a2VyLndhdGNoKGJhekNsYXNzKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1
Y3RvcjIgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3RvcihiYXpDbGFzcywgbnVs
bHB0ciwgR19DQUxMQkFDSyhiYXpDcmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9J
TlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3Rv
cjIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rv
cihjb25zdHJ1Y3RvcjIuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShiYXpDbGFzcyksIGNvbnN0cnVjdG9yMi5n
ZXQoKSk7CisKKyAgICAgICAgQmF6KiBieiA9IGJhekNyZWF0ZSgpOworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBiYXogPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5n
ZXQoKSwgYnosIGJhekNsYXNzKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goYmF6LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGJhei5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6
LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmF6Q2xhc3MpKSk7CisgICAgICAgIGdfYXNzZXJ0
X2ZhbHNlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmF6LmdldCgpLCBqc2NfY2xh
c3NfZ2V0X25hbWUoanNjQ2xhc3MpKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY192YWx1
ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoYmF6
Q2xhc3MpKSk7CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCks
ICJieiIsIGJhei5nZXQoKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYnogaW5zdGFuY2VvZiBCYXo7IikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJieiBpbnN0YW5j
ZW9mIEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7
CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmIGluc3RhbmNlb2YgQmF6OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFu
KHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfdG9fYm9v
bGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9w
ZXJ0eShiYXouZ2V0KCksICJmb28iLCBmb28uZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImJ6LmZvbyIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KHJlc3VsdC5nZXQoKSA9PSBmb28uZ2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVh
a0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250
ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNv
bnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0
X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
anNjQ2xhc3MpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRv
cHRHUmVmKGpzY19jbGFzc19hZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FM
TEJBQ0soZm9vQ3JlYXRlKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdf
VFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rv
ci5nZXQoKSkpOworICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwg
anNjX2NsYXNzX2dldF9uYW1lKGpzY0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAg
ICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGpzY0NsYXNzLCAiZm9vIiwgR19UWVBFX0lOVCwgR19D
QUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIsIG51bGxwdHIpOwor
CisgICAgICAgIEZvbyogZiA9IGZvb0NyZWF0ZVdpdGhGb28oMjUpOworICAgICAgICBHUmVmUHRy
PEpTQ1ZhbHVlPiBmb28gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5n
ZXQoKSwgZiwganNjQ2xhc3MpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28u
Z2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcykpKTsKKworICAgICAgICBqc2NfY29u
dGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYxIiwgZm9vLmdldCgpKTsKKyAgICAgICAg
anNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmMiIsIGZvby5nZXQoKSk7Cisg
ICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9l
dmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjEgPT09IGYyOyIpKTsKKyAgICAgICAgY2hlY2tlci53
YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19i
b29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90
b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHBy
b3BlcnR5ID0gYWRvcHRHUmVmKGpzY192YWx1ZV9uZXdfbnVtYmVyKGNvbnRleHQuZ2V0KCksIDUw
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocHJvcGVydHkuZ2V0KCkpOworICAgICAgICBqc2Nf
dmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShmb28uZ2V0KCksICJuIiwgcHJvcGVydHkuZ2V0KCkp
OworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImYxLm4iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQo
KSksID09LCA1MCk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2Vy
OworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAg
ICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQoKSk7CisK
KyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRleHRfcmVnaXN0ZXJfY2xhc3Mo
Y29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGZvb0ZyZWUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChqc2NDbGFzcyk7CisgICAg
ICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19jbGFzc19nZXRfcGFyZW50KGpzY0NsYXNzKSk7CisKKyAg
ICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNz
X2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29DcmVhdGUp
LCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7CisgICAg
ICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGpzY19jbGFzc19hZGRf
cHJvcGVydHkoanNjQ2xhc3MsICJmb28iLCBHX1RZUEVfSU5ULCBHX0NBTExCQUNLKGdldEZvbyks
IEdfQ0FMTEJBQ0soc2V0Rm9vKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIEdSZWZQdHI8
SlNDVmFsdWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0Lmdl
dCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGZvby5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2Yo
Zm9vLmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpKSk7CisKKyAgICAgICAgR1Jl
ZlB0cjxKU0NWYWx1ZT4gdmFsdWUgPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19udW1iZXIoY29u
dGV4dC5nZXQoKSwgMTI1KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOwor
ICAgICAgICBqc2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShmb28uZ2V0KCksICJmb28iLCB2
YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRH
UmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmLl9fbG9va3VwR2V0dGVy
X18oJ2ZvbycpLmNhbGwoZikiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh2YWx1ZS5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOwor
CisgICAgICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICAgICAgZ19hc3NlcnRfdGhyb3df
YmVnaW4oZXhjZXB0aW9uSGFuZGxlciwgZGlkVGhyb3cpOworICAgICAgICByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYuX19sb29rdXBHZXR0
ZXJfXygnZm9vJykuY2FsbCh7fSkiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0Lmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3Vs
dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9kaWRfdGhyb3coZXhjZXB0aW9uSGFuZGxlciwg
ZGlkVGhyb3cpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsK
KyAgICAgICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X25ldygpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisg
ICAgICAgIEpTQ0NsYXNzKiBqc2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNv
bnRleHQuZ2V0KCksICJGb28iLCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pihmb29GcmVlKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goanNjQ2xhc3MpOworICAgICAg
ICBnX2Fzc2VydF9mYWxzZShqc2NfY2xhc3NfZ2V0X3BhcmVudChqc2NDbGFzcykpOworCisgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19h
ZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwg
bnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2goY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci5nZXQoKSkpOworICAgICAgICBq
c2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGpz
Y0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBib29sIGRpZFRocm93ID0gZmFs
c2U7CisgICAgICAgIGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRo
cm93KTsKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1
ZV9pc191bmRlZmluZWQoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhl
eGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgfQorCisgICAgeworICAgICAgICBMZWFr
Q2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29u
dGV4dC5nZXQoKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4ganNOYW1lc3BhY2UgPSBh
ZG9wdEdSZWYoanNjX3ZhbHVlX25ld19vYmplY3QoY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cikpOworICAgICAgICBjaGVja2VyLndhdGNoKGpzTmFtZXNwYWNlLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGpzTmFtZXNwYWNlLmdldCgpKSk7
CisKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJ3ayIsIGpz
TmFtZXNwYWNlLmdldCgpKTsKKworICAgICAgICBKU0NDbGFzcyoganNjQ2xhc3MgPSBqc2NfY29u
dGV4dF9yZWdpc3Rlcl9jbGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRl
cnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndh
dGNoKGpzY0NsYXNzKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBjb25zdHJ1Y3RvciA9
IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGpzY0NsYXNzLCBudWxscHRyLCBH
X0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lOVEVSLCAw
LCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3IoY29uc3Ry
dWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoanNO
YW1lc3BhY2UuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcyksIGNvbnN0cnVjdG9y
LmdldCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShqc2NDbGFzcywgImZvbyIs
IEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pLCBudWxs
cHRyLCBudWxscHRyKTsKKworICAgICAgICBib29sIGRpZFRocm93ID0gZmFsc2U7CisgICAgICAg
IGdfYXNzZXJ0X3Rocm93X2JlZ2luKGV4Y2VwdGlvbkhhbmRsZXIsIGRpZFRocm93KTsKKyAgICAg
ICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRl
KGNvbnRleHQuZ2V0KCksICJmID0gbmV3IEZvbygpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChmb28uZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRlZmlu
ZWQoZm9vLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90aHJvdyhleGNlcHRpb25IYW5k
bGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAgZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2
YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gbmV3IHdrLkZvbygpOyIpKTsKKyAgICAgICAgZ19h
c3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGZvby5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoZm9vLmdldCgpLCAid2su
Rm9vIikpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNj
X2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgaW5zdGFuY2VvZiB3ay5Gb287Iikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0b3IyID0gYWRvcHRHUmVmKGpzY19jbGFzc19hZGRf
Y29uc3RydWN0b3IoanNjQ2xhc3MsICJDcmVhdGVXaXRoRm9vIiwgR19DQUxMQkFDSyhmb29DcmVh
dGVXaXRoRm9vKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDEsIEdfVFlQRV9J
TlQpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3RvcjIuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19jb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcjIuZ2V0
KCkpKTsKKyAgICAgICAganNjX3ZhbHVlX29iamVjdF9zZXRfcHJvcGVydHkoY29uc3RydWN0b3Iu
Z2V0KCksICJDcmVhdGVXaXRoRm9vIiwgY29uc3RydWN0b3IyLmdldCgpKTsKKworICAgICAgICBn
X2Fzc2VydF90aHJvd19iZWdpbihleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisgICAgICAg
IEdSZWZQdHI8SlNDVmFsdWU+IGZvbzIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYyID0gbmV3IEZvby5DcmVhdGVXaXRoRm9vKDQyKTsiKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZm9vMi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2lzX3VuZGVmaW5lZChmb28yLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2RpZF90
aHJvdyhleGNlcHRpb25IYW5kbGVyLCBkaWRUaHJvdyk7CisKKyAgICAgICAgZm9vMiA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjIgPSBuZXcgd2suRm9v
LkNyZWF0ZVdpdGhGb28oNDIpOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28yLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KGZvbzIuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29m
KGZvbzIuZ2V0KCksICJ3ay5Gb28iKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X29iamVjdF9pc19pbnN0YW5jZV9vZihmb28yLmdldCgpLCAid2suRm9vLkNyZWF0ZVdpdGhGb28i
KSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGZvby5nZXQoKSA9PSBmb28yLmdldCgpKTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0
KCksICJmMiBpbnN0YW5jZW9mIHdrLkZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihy
ZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVh
bihyZXN1bHQuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmMiBpbnN0YW5jZW9mIHdrLkZvby5DcmVhdGVXaXRo
Rm9vOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQo
KSwgImYyLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIocmVzdWx0LmdldCgpKSwg
PT0sIDQyKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBmb28zID0gYWRvcHRHUmVmKGpz
Y192YWx1ZV9jb25zdHJ1Y3Rvcl9jYWxsKGNvbnN0cnVjdG9yMi5nZXQoKSwgR19UWVBFX0lOVCwg
NjIsIEdfVFlQRV9OT05FKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZm9vMy5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChmb28zLmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28z
LmdldCgpLCAid2suRm9vIikpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9vYmpl
Y3RfaXNfaW5zdGFuY2Vfb2YoZm9vMy5nZXQoKSwgIndrLkZvby5DcmVhdGVXaXRoRm9vIikpOwor
ICAgICAgICBnX2Fzc2VydF9mYWxzZShmb28yLmdldCgpID09IGZvbzMuZ2V0KCkpOworICAgICAg
ICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYzIiwgZm9vMy5nZXQoKSk7
CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0
LmdldCgpLCAiZjMgaW5zdGFuY2VvZiB3ay5Gb287IikpOworICAgICAgICBjaGVja2VyLndhdGNo
KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xl
YW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jv
b2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29u
dGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZjMgaW5zdGFuY2VvZiB3ay5Gb28uQ3JlYXRl
V2l0aEZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKyAg
ICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsK
KyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQu
Z2V0KCksICJmMy5mb28iKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHJlc3VsdC5nZXQo
KSksID09LCA2Mik7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgRm9vIHBhcmVu
dDsKKyAgICBpbnQgYmFyOworfSBCYXI7CisKK3N0YXRpYyBCYXIqIGJhckNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIGdfbmV3MChCYXIsIDEpOworfQorCitzdGF0aWMgdm9pZCBiYXJGcmVlKEJhciog
YmFyKQoreworICAgIGdfZnJlZShiYXIpOworfQorCitzdGF0aWMgdm9pZCBzZXRCYXIoQmFyKiBi
YXIsIGludCB2YWx1ZSkKK3sKKyAgICBiYXItPmJhciA9IHZhbHVlOworfQorCitzdGF0aWMgaW50
IGdldEJhcihCYXIqIGJhcikKK3sKKyAgICByZXR1cm4gYmFyLT5iYXI7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RKU0NQcm90b3R5cGVzKCkKK3sKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNo
ZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihq
c2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7
CisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgp
KTsKKworICAgICAgICBKU0NDbGFzcyogZm9vQ2xhc3MgPSBqc2NfY29udGV4dF9yZWdpc3Rlcl9j
bGFzcyhjb250ZXh0LmdldCgpLCAiRm9vIiwgbnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZm9vRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvb0NsYXNzKTsK
KyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NsYXNzX2dldF9wYXJlbnQoZm9vQ2xhc3MpKTsK
KyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gZm9vQ29uc3RydWN0b3IgPSBhZG9wdEdSZWYoanNj
X2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihmb29DbGFzcywgbnVsbHB0ciwgR19DQUxMQkFDSyhmb29D
cmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRFUiwgMCwgR19UWVBFX05PTkUp
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb29Db25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGZvb0NvbnN0cnVjdG9yLmdl
dCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCBqc2Nf
Y2xhc3NfZ2V0X25hbWUoZm9vQ2xhc3MpLCBmb29Db25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAg
IGpzY19jbGFzc19hZGRfbWV0aG9kKGZvb0NsYXNzLCAibXVsdGlwbHkiLCBHX0NBTExCQUNLKG11
bHRpcGx5Rm9vKSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9JTlQp
OworICAgICAgICBqc2NfY2xhc3NfYWRkX3Byb3BlcnR5KGZvb0NsYXNzLCAiZm9vIiwgR19UWVBF
X0lOVCwgR19DQUxMQkFDSyhnZXRGb28pLCBHX0NBTExCQUNLKHNldEZvbyksIG51bGxwdHIsIG51
bGxwdHIpOworCisgICAgICAgIEpTQ0NsYXNzKiBiYXJDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lz
dGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJCYXIiLCBmb29DbGFzcywgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oYmFyRnJlZSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGJhckNs
YXNzKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfY2xhc3NfZ2V0X3BhcmVudChiYXJDbGFz
cykgPT0gZm9vQ2xhc3MpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXJDb25zdHJ1Y3Rv
ciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGJhckNsYXNzLCBudWxscHRy
LCBHX0NBTExCQUNLKGJhckNyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdfVFlQRV9QT0lOVEVS
LCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGJhckNvbnN0cnVjdG9y
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfY29uc3RydWN0b3Io
YmFyQ29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRfc2V0X3ZhbHVlKGNv
bnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShiYXJDbGFzcyksIGJhckNvbnN0cnVjdG9y
LmdldCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShiYXJDbGFzcywgImJhciIs
IEdfVFlQRV9JTlQsIEdfQ0FMTEJBQ0soZ2V0QmFyKSwgR19DQUxMQkFDSyhzZXRCYXIpLCBudWxs
cHRyLCBudWxscHRyKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9w
dEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7
IGIgPSBuZXcgQmFyKCk7IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRl
eHQuZ2V0KCksICJmLl9fcHJvdG9fXyA9PSBGb28ucHJvdG90eXBlIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1Jl
Zihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5fX3Byb3RvX18gPT0gQmFy
LnByb3RvdHlwZSIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAg
ICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4
dC5nZXQoKSwgImIuX19wcm90b19fLl9fcHJvdG9fXyA9PSBGb28ucHJvdG90eXBlIikpOworICAg
ICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
anNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisKKyAgICAgICAgR1JlZlB0
cjxKU0NWYWx1ZT4gZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0
LmdldCgpLCAiZiIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19vYmplY3QoZm9vLmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCks
IGpzY19jbGFzc19nZXRfbmFtZShmb29DbGFzcykpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2Uo
anNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihmb28uZ2V0KCksIGpzY19jbGFzc19nZXRf
bmFtZShiYXJDbGFzcykpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0
X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIGluc3RhbmNlb2YgRm9vIikpOworICAgICAgICBj
aGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3Zh
bHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiBpbnN0YW5jZW9mIEJh
ciIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydF9mYWxzZShqc2NfdmFsdWVfdG9fYm9vbGVhbihyZXN1bHQuZ2V0KCkpKTsKKworICAg
ICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBiYXIgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3Zh
bHVlKGNvbnRleHQuZ2V0KCksICJiIikpOworICAgICAgICBjaGVja2VyLndhdGNoKGJhci5nZXQo
KSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChiYXIuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfb2JqZWN0X2lzX2luc3RhbmNlX29m
KGJhci5nZXQoKSwganNjX2NsYXNzX2dldF9uYW1lKGJhckNsYXNzKSkpOworICAgICAgICBnX2Fz
c2VydF90cnVlKGpzY192YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2YoYmFyLmdldCgpLCBqc2Nf
Y2xhc3NfZ2V0X25hbWUoZm9vQ2xhc3MpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJiIGluc3RhbmNlb2YgQmFyIikp
OworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGdfYXNz
ZXJ0X3RydWUoanNjX3ZhbHVlX3RvX2Jvb2xlYW4ocmVzdWx0LmdldCgpKSk7CisgICAgICAgIHJl
c3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYiBp
bnN0YW5jZW9mIEZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOwor
ICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19ib29sZWFuKHJlc3VsdC5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV90b19ib29sZWFuKHJlc3VsdC5nZXQo
KSkpOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShj
b250ZXh0LmdldCgpLCAiYi5iYXIgPSAyNTsgYi5mb28gPSA0MjsiKSk7CisgICAgICAgIGNoZWNr
ZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiB2YWx1
ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiYi5iYXIi
KSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2godmFsdWUuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KGpzY192YWx1ZV90b19pbnQzMih2YWx1ZS5nZXQoKSksID09LCAyNSk7CisgICAg
ICAgIHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCks
ICJiLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2YWx1ZS5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2YWx1ZS5nZXQoKSkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlLmdldCgpKSwgPT0sIDQy
KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImIubXVsdGlwbHkoMikiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVz
dWx0LmdldCgpKTsKKyAgICAgICAgdmFsdWUgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImIuZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVl
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVl
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFs
dWUuZ2V0KCkpLCA9PSwgODQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlRXJyb3Io
KQoreworICAgIGpzY19jb250ZXh0X3Rocm93KGpzY19jb250ZXh0X2dldF9jdXJyZW50KCksICJB
UEkgZXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RKU0NFeGNlcHRpb25zKCkKK3sK
KyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlND
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAg
IGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpz
Y19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQ
dHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250
ZXh0LmdldCgpLCAiZm9vIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7
CisgICAgICAgIC8vIEJ5IGRlZmF1bHQgZXhjZXB0aW9ucyBhcmUgbm90IGNhdWdodC4KKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJlc3VsdC5nZXQoKSkpOwor
ICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRl
eHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19FWENFUFRJT04oZXhjZXB0
aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0aW9uKSwgPT0sICJDYW4n
dCBmaW5kIHZhcmlhYmxlOiBmb28iKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfZXhj
ZXB0aW9uX2dldF9saW5lX251bWJlcihleGNlcHRpb24pLCA9PSwgMSk7CisgICAgICAgIGdfYXNz
ZXJ0X2ZhbHNlKGpzY19leGNlcHRpb25fZ2V0X3NvdXJjZV91cmkoZXhjZXB0aW9uKSk7CisgICAg
fQorCisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRy
PEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAg
ICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9mYWxz
ZShqc2NfY29udGV4dF9nZXRfZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpKTsKKworICAgICAgICBH
UmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUo
Y29udGV4dC5nZXQoKSwgImYgPSAyNTtcbmZvbzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2go
cmVzdWx0LmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc191bmRl
ZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250
ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUo
SlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChleGNl
cHRpb24pOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGpzY19leGNlcHRpb25fZ2V0X2xpbmVf
bnVtYmVyKGV4Y2VwdGlvbiksID09LCAyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQdHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4
dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19jb250ZXh0X2dldF9leGNlcHRp
b24oY29udGV4dC5nZXQoKSkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9
IGFkb3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZV93aXRoX3NvdXJjZV91cmkoY29udGV4dC5n
ZXQoKSwgImZvbyIsICJmaWxlOi8vL2Zvby9zY3JpcHQuanMiKSk7CisgICAgICAgIGNoZWNrZXIu
d2F0Y2gocmVzdWx0LmdldCgpKTsKKworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9p
c191bmRlZmluZWQocmVzdWx0LmdldCgpKSk7CisgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpz
Y19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24pKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChleGNlcHRpb24pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoanNjX2V4Y2VwdGlvbl9nZXRf
c291cmNlX3VyaShleGNlcHRpb24pLCA9PSwgImZpbGU6Ly8vZm9vL3NjcmlwdC5qcyIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0
cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFs
c2UoanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAg
R1JlZlB0cjxKU0NWYWx1ZT4gZnVuY3Rpb24gPSBhZG9wdEdSZWYoanNjX3ZhbHVlX25ld19mdW5j
dGlvbihjb250ZXh0LmdldCgpLCAiY3JlYXRlRXJyb3IiLCBHX0NBTExCQUNLKGNyZWF0ZUVycm9y
KSwgbnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZnVuY3Rpb24uZ2V0KCkpOworICAgICAgICBqc2NfY29udGV4dF9z
ZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImNyZWF0ZUVycm9yIiwgZnVuY3Rpb24uZ2V0KCkpOwor
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAidmFyIHJlc3VsdDsgdHJ5IHsgY3JlYXRlRXJyb3Io
KTsgfSBjYXRjaCAoZSkgeyByZXN1bHQgPSAnQ2F1Z2h0IGV4Y2VwdGlvbic7IH0iKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfaXNfc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAgICAgICBHVW5pcXVlUHRyPGNo
YXI+IHJlc3VsdFN0cmluZyhqc2NfdmFsdWVfdG9fc3RyaW5nKHJlc3VsdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0U3RyaW5nLmdldCgpLCA9PSwgIkNhdWdodCBleGNl
cHRpb24iKTsKKyAgICAgICAgZ19hc3NlcnRfZmFsc2UoanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlv
bihjb250ZXh0LmdldCgpKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVmKGpzY19jb250
ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ2YXIgcmVzdWx0OyBjcmVhdGVFcnJvcigpOyBy
ZXN1bHQgPSAnTm8gZXhjZXB0aW9uJzsiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0
LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfdW5kZWZpbmVkKHJl
c3VsdC5nZXQoKSkpOworICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBqc2NfY29udGV4dF9nZXRf
ZXhjZXB0aW9uKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKEpTQ19JU19F
WENFUFRJT04oZXhjZXB0aW9uKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2goZXhjZXB0aW9uKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGpzY19leGNlcHRpb25fZ2V0X21lc3NhZ2UoZXhjZXB0
aW9uKSwgPT0sICJBUEkgZXhjZXB0aW9uIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoanNj
X2V4Y2VwdGlvbl9nZXRfbGluZV9udW1iZXIoZXhjZXB0aW9uKSwgPT0sIDEpOworICAgICAgICBn
X2Fzc2VydF9mYWxzZShqc2NfZXhjZXB0aW9uX2dldF9zb3VyY2VfdXJpKGV4Y2VwdGlvbikpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1Jl
ZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRf
ZmFsc2UoanNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSk7CisKKyAgICAg
ICAgc3RydWN0IFRlc3QgeworICAgICAgICAgICAgSlNDQ29udGV4dCogY29udGV4dDsKKyAgICAg
ICAgICAgIEdSZWZQdHI8SlNDRXhjZXB0aW9uPiBleGNlcHRpb247CisgICAgICAgICAgICBib29s
IHdhc0RlbGV0ZWQ7CisgICAgICAgIH07CisKKyAgICAgICAgVGVzdCB0ZXN0ID0geyBjb250ZXh0
LmdldCgpLCBudWxscHRyLCBmYWxzZSB9OworICAgICAgICBqc2NfY29udGV4dF9wdXNoX2V4Y2Vw
dGlvbl9oYW5kbGVyKGNvbnRleHQuZ2V0KCksIFtdKEpTQ0NvbnRleHQqIGNvbnRleHQsIEpTQ0V4
Y2VwdGlvbiogZXhjZXB0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0
byogdGVzdCA9IHN0YXRpY19jYXN0PFRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBnX2Fz
c2VydF90cnVlKGNvbnRleHQgPT0gdGVzdC0+Y29udGV4dCk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9mYWxzZSh0ZXN0LT5leGNlcHRpb24pOworICAgICAgICAgICAgZ19hc3NlcnRfZmFsc2UodGVz
dC0+d2FzRGVsZXRlZCk7CisgICAgICAgICAgICB0ZXN0LT5leGNlcHRpb24gPSBleGNlcHRpb247
CisgICAgICAgIH0sICZ0ZXN0LCBbXShncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8VGVzdCo+KHVzZXJEYXRhKS0+d2FzRGVsZXRlZCA9IHRydWU7CisgICAgICAg
IH0pOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0R1JlZihqc2Nf
Y29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZm9vIikpOworICAgICAgICBjaGVja2Vy
LndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIC8vIEV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5
IHRoZSB1c2VyIGhhbmRsZXIuCisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19jb250ZXh0X2dl
dF9leGNlcHRpb24oY29udGV4dC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKEpTQ19J
U19FWENFUFRJT04odGVzdC5leGNlcHRpb24uZ2V0KCkpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aCh0ZXN0LmV4Y2VwdGlvbi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihqc2NfZXhj
ZXB0aW9uX2dldF9tZXNzYWdlKHRlc3QuZXhjZXB0aW9uLmdldCgpKSwgPT0sICJDYW4ndCBmaW5k
IHZhcmlhYmxlOiBmb28iKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChqc2NfZXhjZXB0aW9u
X2dldF9saW5lX251bWJlcih0ZXN0LmV4Y2VwdGlvbi5nZXQoKSksID09LCAxKTsKKyAgICAgICAg
Z19hc3NlcnRfZmFsc2UoanNjX2V4Y2VwdGlvbl9nZXRfc291cmNlX3VyaSh0ZXN0LmV4Y2VwdGlv
bi5nZXQoKSkpOworCisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3Qud2FzRGVsZXRlZCk7Cisg
ICAgICAgIGpzY19jb250ZXh0X3BvcF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0Lndhc0RlbGV0ZWQpOworCisgICAgICAgIHRlc3Qu
ZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgdGVzdC53YXNEZWxldGVkID0gZmFsc2U7Cisg
ICAgICAgIGpzY19jb250ZXh0X3B1c2hfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dC5nZXQoKSwg
W10oSlNDQ29udGV4dCogY29udGV4dCwgSlNDRXhjZXB0aW9uKiBleGNlcHRpb24sIGdwb2ludGVy
IHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvKiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VGVzdCo+
KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUoY29udGV4dCA9PSB0ZXN0LT5j
b250ZXh0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPmV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT53YXNEZWxldGVkKTsKKyAgICAgICAgICAg
IHRlc3QtPmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICAgICAgICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgICAgICB9LCAmdGVzdCwgW10o
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFRlc3QqPih1c2Vy
RGF0YSktPndhc0RlbGV0ZWQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICByZXN1bHQg
PSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgImZvbyIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICAvLyBFeGNlcHRp
b24gd2FzIGhhbmRsZWQgYnkgdGhlIHVzZXIgaGFuZGxlciwgYnV0IG5vdCBjYXVnaHQuCisgICAg
ICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzY19jb250ZXh0X2dldF9leGNlcHRpb24oY29udGV4dC5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoSlNDX0lTX0VYQ0VQVElPTihleGNlcHRpb24p
KTsKKyAgICAgICAgY2hlY2tlci53YXRjaChleGNlcHRpb24pOworICAgICAgICBnX2Fzc2VydF90
cnVlKGV4Y2VwdGlvbiA9PSB0ZXN0LmV4Y2VwdGlvbi5nZXQoKSk7CisKKyAgICAgICAgZ19hc3Nl
cnRfZmFsc2UodGVzdC53YXNEZWxldGVkKTsKKyAgICAgICAganNjX2NvbnRleHRfcG9wX2V4Y2Vw
dGlvbl9oYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKHRlc3Qu
d2FzRGVsZXRlZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SlNDUHJvbWlzZXMoKQor
eworICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxK
U0NDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxl
ciBleGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlND
VmFsdWU+IHByb21pc2UgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQu
Z2V0KCksICJQcm9taXNlIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHByb21pc2UuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19mdW5jdGlvbihwcm9taXNlLmdl
dCgpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRvcHRHUmVmKGpz
Y19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJ0eXBlb2YgUHJvbWlzZSIpKTsKKyAg
ICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVl
KGpzY192YWx1ZV9pc19zdHJpbmcocmVzdWx0LmdldCgpKSk7CisgICAgICAgIEdVbmlxdWVQdHI8
Y2hhcj4gcmVzdWx0U3RyaW5nKGpzY192YWx1ZV90b19zdHJpbmcocmVzdWx0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHRTdHJpbmcuZ2V0KCksID09LCAiZnVuY3Rpb24i
KTsKKworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgInJlc3VsdCA9IDA7IFByb21pc2UucmVzb2x2ZSg0MikudGhlbihmdW5jdGlv
biAodmFsdWUpIHsgcmVzdWx0ID0gdmFsdWU7IH0pOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRj
aChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAicmVzdWx0IikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1
ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUuZ2V0KCkpLCA9PSwgNDIpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgTGVha0NoZWNrZXIgY2hlY2tlcjsKKyAgICAgICAgR1JlZlB0cjxKU0ND
b250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X25ldygpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlciBl
eGNlcHRpb25IYW5kbGVyKGNvbnRleHQuZ2V0KCkpOworCisgICAgICAgIEpTQ0NsYXNzKiBmb29D
bGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28iLCBu
dWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlKSk7CisgICAg
ICAgIGNoZWNrZXIud2F0Y2goZm9vQ2xhc3MpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShqc2Nf
Y2xhc3NfZ2V0X3BhcmVudChmb29DbGFzcykpOworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBm
b29Db25zdHJ1Y3RvciA9IGFkb3B0R1JlZihqc2NfY2xhc3NfYWRkX2NvbnN0cnVjdG9yKGZvb0Ns
YXNzLCBudWxscHRyLCBHX0NBTExCQUNLKGZvb0NyZWF0ZSksIG51bGxwdHIsIG51bGxwdHIsIEdf
VFlQRV9QT0lOVEVSLCAwLCBHX1RZUEVfTk9ORSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZv
b0NvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNf
Y29uc3RydWN0b3IoZm9vQ29uc3RydWN0b3IuZ2V0KCkpKTsKKyAgICAgICAganNjX2NvbnRleHRf
c2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShmb29DbGFzcyksIGZv
b0NvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAganNjX2NsYXNzX2FkZF9tZXRob2QoZm9vQ2xh
c3MsICJnZXRNdWx0aXBseUZvb0FzeW5jIiwgR19DQUxMQkFDSyhnZXRNdWx0aXBseUZvb0FzeW5j
KSwgJmNoZWNrZXIsIG51bGxwdHIsIEpTQ19UWVBFX1ZBTFVFLCAxLCBHX1RZUEVfSU5UKTsKKyAg
ICAgICAganNjX2NsYXNzX2FkZF9wcm9wZXJ0eShmb29DbGFzcywgImZvbyIsIEdfVFlQRV9JTlQs
IEdfQ0FMTEJBQ0soZ2V0Rm9vKSwgR19DQUxMQkFDSyhzZXRGb28pLCBudWxscHRyLCBudWxscHRy
KTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2Nv
bnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwgInJlc3VsdCA9IDA7IGYgPSBuZXcgRm9vKCk7
IGYuZm9vID0gNTsgZi5nZXRNdWx0aXBseUZvb0FzeW5jKDIpLnRoZW4oZnVuY3Rpb24gKHZhbHVl
KSB7IHJlc3VsdCA9IHZhbHVlOyB9LCBmdW5jdGlvbiAoZXJyb3IpIHsgcmVzdWx0ID0gLTE7IH0p
OyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworCisgICAgICAgIEdS
ZWZQdHI8SlNDVmFsdWU+IHZhbHVlID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShj
b250ZXh0LmdldCgpLCAicmVzdWx0IikpOworICAgICAgICBjaGVja2VyLndhdGNoKHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfbnVtYmVyKHZhbHVlLmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIodmFsdWUu
Z2V0KCkpLCA9PSwgMTApOworCisgICAgICAgIHJlc3VsdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAicmVzdWx0ID0gMDsgZi5nZXRNdWx0aXBseUZvb0Fz
eW5jKDApLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7IHJlc3VsdCA9IHZhbHVlOyB9LCBmdW5jdGlv
biAoZXJyb3IpIHsgcmVzdWx0ID0gLTE7IH0pOyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChy
ZXN1bHQuZ2V0KCkpOworICAgICAgICB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRf
dmFsdWUoY29udGV4dC5nZXQoKSwgInJlc3VsdCIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaCh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcih2
YWx1ZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMy
KHZhbHVlLmdldCgpKSwgPT0sIC0xKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNfZm9vV2Fz
RnJlZWQ7CisKK3N0YXRpYyB2b2lkIGZvb0ZyZWVBbmRMb2coRm9vKiBmb28pCit7CisgICAgZm9v
RnJlZShmb28pOworICAgIHNfZm9vV2FzRnJlZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0SlNDR2FyYmFnZUNvbGxlY3RvcigpCit7CisgICAgeworICAgICAgICBMZWFrQ2hlY2tlciBj
aGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNoKGNvbnRleHQuZ2V0KCkp
OworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRsZXIoY29udGV4dC5nZXQo
KSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gb2JqZWN0ID0gYWRvcHRHUmVmKGpzY192
YWx1ZV9uZXdfb2JqZWN0KGNvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAg
ICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworCisgICAgICAgIEdSZWZQdHI8SlNDVmFs
dWU+IGZvbyA9IGFkb3B0R1JlZihqc2NfdmFsdWVfbmV3X251bWJlcihjb250ZXh0LmdldCgpLCAy
NSkpOworICAgICAgICBjaGVja2VyLndhdGNoKGZvby5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
X3RydWUoanNjX3ZhbHVlX2lzX251bWJlcihmb28uZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGpzY192YWx1ZV90b19pbnQzMihmb28uZ2V0KCkpLCA9PSwgMjUpOworICAgICAgICBq
c2NfdmFsdWVfb2JqZWN0X3NldF9wcm9wZXJ0eShvYmplY3QuZ2V0KCksICJmb28iLCBmb28uZ2V0
KCkpOworCisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIs
IG9iamVjdC5nZXQoKSk7CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IHJlc3VsdCA9IGFkb3B0
R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiIpKTsKKyAgICAgICAg
Y2hlY2tlci53YXRjaChyZXN1bHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKG9iamVj
dC5nZXQoKSA9PSByZXN1bHQuZ2V0KCkpOworCisgICAgICAgIG9iamVjdCA9IG51bGxwdHI7Cisg
ICAgICAgIGZvbyA9IG51bGxwdHI7CisgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAg
IGpzY0NvbnRleHRHYXJiYWdlQ29sbGVjdChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgb2JqZWN0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2dldF92YWx1ZShjb250ZXh0LmdldCgpLCAiZiIpKTsK
KyAgICAgICAgY2hlY2tlci53YXRjaChvYmplY3QuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF90
cnVlKGpzY192YWx1ZV9pc19vYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgIGZvbyA9IGFk
b3B0R1JlZihqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZi5mb28iKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goZm9vLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShq
c2NfdmFsdWVfaXNfbnVtYmVyKGZvby5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
anNjX3ZhbHVlX3RvX2ludDMyKGZvby5nZXQoKSksID09LCAyNSk7CisKKyAgICAgICAgcmVzdWx0
ID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gdW5k
ZWZpbmVkIikpOworICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKwor
ICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7CisKKyAgICAg
ICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfaXNfb2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAg
ICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwgImYiLCBvYmplY3QuZ2V0
KCkpOworICAgICAgICByZXN1bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29u
dGV4dC5nZXQoKSwgImYiKSk7CisgICAgICAgIGNoZWNrZXIud2F0Y2gocmVzdWx0LmdldCgpKTsK
KyAgICAgICAgZ19hc3NlcnRfdHJ1ZShvYmplY3QuZ2V0KCkgPT0gcmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgZm9vID0gYWRvcHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCks
ICJmLmZvbyIpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChmb28uZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIoZm9vLmdldCgpKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChqc2NfdmFsdWVfdG9faW50MzIoZm9vLmdldCgpKSwgPT0sIDI1KTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIExlYWtDaGVja2VyIGNoZWNrZXI7CisgICAgICAgIEdSZWZQ
dHI8SlNDQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXcoKSk7Cisg
ICAgICAgIGNoZWNrZXIud2F0Y2goY29udGV4dC5nZXQoKSk7CisgICAgICAgIEV4Y2VwdGlvbkhh
bmRsZXIgZXhjZXB0aW9uSGFuZGxlcihjb250ZXh0LmdldCgpKTsKKworICAgICAgICBzX2Zvb1dh
c0ZyZWVkID0gZmFsc2U7CisKKyAgICAgICAgSlNDQ2xhc3MqIGpzY0NsYXNzID0ganNjX2NvbnRl
eHRfcmVnaXN0ZXJfY2xhc3MoY29udGV4dC5nZXQoKSwgIkZvbyIsIG51bGxwdHIsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGZvb0ZyZWVBbmRMb2cpKTsKKyAgICAgICAgY2hlY2tl
ci53YXRjaChqc2NDbGFzcyk7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKGpzY19jbGFzc19nZXRf
cGFyZW50KGpzY0NsYXNzKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gY29uc3RydWN0
b3IgPSBhZG9wdEdSZWYoanNjX2NsYXNzX2FkZF9jb25zdHJ1Y3Rvcihqc2NDbGFzcywgbnVsbHB0
ciwgR19DQUxMQkFDSyhmb29DcmVhdGUpLCBudWxscHRyLCBudWxscHRyLCBHX1RZUEVfUE9JTlRF
UiwgMCwgR19UWVBFX05PTkUpKTsKKyAgICAgICAgY2hlY2tlci53YXRjaChjb25zdHJ1Y3Rvci5n
ZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNv
bnN0cnVjdG9yLmdldCgpKSk7CisgICAgICAgIGpzY19jb250ZXh0X3NldF92YWx1ZShjb250ZXh0
LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25hbWUoanNjQ2xhc3MpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7
CisgICAgICAgIEdSZWZQdHI8SlNDVmFsdWU+IG9iamVjdCA9IGFkb3B0R1JlZihqc2NfY29udGV4
dF9ldmFsdWF0ZShjb250ZXh0LmdldCgpLCAiZiA9IG5ldyBGb28oKTsiKSk7CisgICAgICAgIGNo
ZWNrZXIud2F0Y2gob2JqZWN0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfaXNfb2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGpzY192
YWx1ZV9vYmplY3RfaXNfaW5zdGFuY2Vfb2Yob2JqZWN0LmdldCgpLCBqc2NfY2xhc3NfZ2V0X25h
bWUoanNjQ2xhc3MpKSk7CisKKyAgICAgICAgR1JlZlB0cjxKU0NWYWx1ZT4gcmVzdWx0ID0gYWRv
cHRHUmVmKGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAg
ICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUob2Jq
ZWN0LmdldCgpID09IHJlc3VsdC5nZXQoKSk7CisKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRHUmVm
KGpzY19jb250ZXh0X2V2YWx1YXRlKGNvbnRleHQuZ2V0KCksICJmID0gdW5kZWZpbmVkIikpOwor
ICAgICAgICBjaGVja2VyLndhdGNoKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3Ry
dWUoanNjX3ZhbHVlX2lzX3VuZGVmaW5lZChyZXN1bHQuZ2V0KCkpKTsKKworICAgICAgICBnX2Fz
c2VydF9mYWxzZShzX2Zvb1dhc0ZyZWVkKTsKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xs
ZWN0KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShzX2Zvb1dhc0ZyZWVk
KTsKKworICAgICAgICBvYmplY3QgPSBudWxscHRyOworICAgICAgICBnX2Fzc2VydF9mYWxzZShz
X2Zvb1dhc0ZyZWVkKTsKKyAgICAgICAganNjQ29udGV4dEdhcmJhZ2VDb2xsZWN0KGNvbnRleHQu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF90cnVlKHNfZm9vV2FzRnJlZWQpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgdGVzdHNKU0NWaXJ0dWFsTWFjaGluZSgpCit7CisgICAgeworICAgICAg
ICBMZWFrQ2hlY2tlciBjaGVja2VyOworICAgICAgICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfbmV3KCkpOworICAgICAgICBjaGVja2VyLndhdGNo
KGNvbnRleHQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25IYW5kbGVyIGV4Y2VwdGlvbkhhbmRs
ZXIoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0
ZSgiSlNDVmlydHVhbE1hY2hpbmVUZXN0IiwgWyZdIHsKKyAgICAgICAgICAgIEpTQ0NsYXNzKiBq
c2NDbGFzcyA9IGpzY19jb250ZXh0X3JlZ2lzdGVyX2NsYXNzKGNvbnRleHQuZ2V0KCksICJGb28i
LCBudWxscHRyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihmb29GcmVlQW5kTG9n
KSk7CisgICAgICAgICAgICBjaGVja2VyLndhdGNoKGpzY0NsYXNzKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0X2ZhbHNlKGpzY19jbGFzc19nZXRfcGFyZW50KGpzY0NsYXNzKSk7CisKKyAgICAgICAg
ICAgIEdSZWZQdHI8SlNDVmFsdWU+IGNvbnN0cnVjdG9yID0gYWRvcHRHUmVmKGpzY19jbGFzc19h
ZGRfY29uc3RydWN0b3IoanNjQ2xhc3MsIG51bGxwdHIsIEdfQ0FMTEJBQ0soZm9vQ3JlYXRlKSwg
bnVsbHB0ciwgbnVsbHB0ciwgR19UWVBFX1BPSU5URVIsIDAsIEdfVFlQRV9OT05FKSk7CisgICAg
ICAgICAgICBjaGVja2VyLndhdGNoKGNvbnN0cnVjdG9yLmdldCgpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLmdldCgpKSk7
CisgICAgICAgICAgICBqc2NfY29udGV4dF9zZXRfdmFsdWUoY29udGV4dC5nZXQoKSwganNjX2Ns
YXNzX2dldF9uYW1lKGpzY0NsYXNzKSwgY29uc3RydWN0b3IuZ2V0KCkpOworCisgICAgICAgICAg
ICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVh
dGUoY29udGV4dC5nZXQoKSwgImYgPSBuZXcgRm9vKCk7IikpOworICAgICAgICAgICAgY2hlY2tl
ci53YXRjaChvYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFs
dWVfZ2V0X2NvbnRleHQob2JqZWN0LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVlX29iamVjdF9pc19pbnN0YW5jZV9vZihv
YmplY3QuZ2V0KCksIGpzY19jbGFzc19nZXRfbmFtZShqc2NDbGFzcykpKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgdGhyZWFkLT5k
ZXRhY2goKTsKKworICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiBvYmplY3QgPSBhZG9wdEdSZWYo
anNjX2NvbnRleHRfZ2V0X3ZhbHVlKGNvbnRleHQuZ2V0KCksICJmIikpOworICAgICAgICBjaGVj
a2VyLndhdGNoKG9iamVjdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X3RydWUoanNjX3ZhbHVl
X2lzX29iamVjdChvYmplY3QuZ2V0KCkpKTsKKworICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNv
bGxlY3QoY29udGV4dC5nZXQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBWZWN0b3I8UmVm
PFRocmVhZD4sIDU+IHRocmVhZHM7CisgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgICAgICAgICB0aHJlYWRzLmFw
cGVuZChUaHJlYWQ6OmNyZWF0ZSgiSlNDVmlydHVhbE1hY2hpbmVUZXN0IiwgWyZva10geworICAg
ICAgICAgICAgICAgIEdSZWZQdHI8SlNDVmlydHVhbE1hY2hpbmU+IHZtID0gYWRvcHRHUmVmKGpz
Y192aXJ0dWFsX21hY2hpbmVfbmV3KCkpOworICAgICAgICAgICAgICAgIEdSZWZQdHI8SlNDQ29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9uZXdfd2l0aF92aXJ0dWFsX21h
Y2hpbmUodm0uZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBHUmVmUHRyPEpTQ1ZhbHVlPiByZXN1
bHQgPSBhZG9wdEdSZWYoanNjX2NvbnRleHRfZXZhbHVhdGUoY29udGV4dC5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgInZhciBhcnJheSA9IFt7fV07XG4iCisgICAgICAgICAgICAgICAgICAg
ICJmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHtcbiIKKyAgICAgICAgICAgICAgICAgICAg
IiAgICB2YXIgbmV3QXJyYXkgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoICogMik7XG4iCisgICAg
ICAgICAgICAgICAgICAgICIgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdBcnJheS5sZW5ndGg7
ICsrailcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgbmV3QXJyYXlbal0gPSB7cGFy
ZW50OiBhcnJheVtqIC8gMl19O1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgIGFycmF5ID0g
bmV3QXJyYXk7XG4iCisgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
KSk7CisgICAgICAgICAgICAgICAgZ19hc3NlcnRfdHJ1ZShqc2NfdmFsdWVfZ2V0X2NvbnRleHQo
cmVzdWx0LmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byogZXhjZXB0aW9uID0ganNjX2NvbnRleHRfZ2V0X2V4Y2VwdGlvbihjb250ZXh0LmdldCgpKSkg
eworICAgICAgICAgICAgICAgICAgICBnX21lc3NhZ2UoIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXMi
LCBqc2NfZXhjZXB0aW9uX2dldF9tZXNzYWdlKGV4Y2VwdGlvbikpOworICAgICAgICAgICAgICAg
ICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBHUmVm
UHRyPEpTQ1ZhbHVlPiB2YWx1ZSA9IGFkb3B0R1JlZihqc2NfY29udGV4dF9nZXRfdmFsdWUoY29u
dGV4dC5nZXQoKSwgImFycmF5IikpOworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X3RydWUoanNj
X3ZhbHVlX2dldF9jb250ZXh0KHZhbHVlLmdldCgpKSA9PSBjb250ZXh0LmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWpzY192YWx1ZV9pc19vYmplY3QodmFsdWUuZ2V0KCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGdfbWVzc2FnZSgiRGlkIG5vdCBmaW5kIFwiYXJyYXlcIiB2YXJpYWJs
ZSIpOworICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBqc2NDb250ZXh0R2FyYmFnZUNvbGxlY3QoY29udGV4dC5nZXQoKSk7
CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHRocmVh
ZCA6IHRocmVhZHMpIHsKKyAgICAgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsK
KyAgICAgICAgICAgIHRocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fz
c2VydF90cnVlKG9rKTsKKyAgICB9Cit9CisKKyNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQworc3RhdGljIHZvaWQgdGVzdHNKU0NBdXRvY2xlYW51cHMoKQoreworICAgIExlYWtD
aGVja2VyIGNoZWNrZXI7CisgICAgZ19hdXRvcHRyKEpTQ1ZpcnR1YWxNYWNoaW5lKSB2bSA9IGpz
Y192aXJ0dWFsX21hY2hpbmVfbmV3KCk7CisgICAgY2hlY2tlci53YXRjaCh2bSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShKU0NfSVNfVklSVFVBTF9NQUNISU5FKHZtKSk7CisKKyAgICBnX2F1dG9wdHIo
SlNDQ29udGV4dCkgY29udGV4dCA9IGpzY19jb250ZXh0X25ld193aXRoX3ZpcnR1YWxfbWFjaGlu
ZSh2bSk7CisgICAgY2hlY2tlci53YXRjaChjb250ZXh0KTsKKyAgICBnX2Fzc2VydF90cnVlKEpT
Q19JU19DT05URVhUKGNvbnRleHQpKTsKKworICAgIGdfYXV0b3B0cihKU0NWYWx1ZSkgdmFsdWUg
PSBqc2NfY29udGV4dF9ldmFsdWF0ZShjb250ZXh0LCAidiA9IDI1Iik7CisgICAgY2hlY2tlci53
YXRjaCh2YWx1ZSk7CisgICAgZ19hc3NlcnRfdHJ1ZShKU0NfSVNfVkFMVUUodmFsdWUpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGpzY192YWx1ZV9pc19udW1iZXIodmFsdWUpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoanNjX3ZhbHVlX3RvX2ludDMyKHZhbHVlKSwgPT0sIDI1KTsKKworICAgIGdfYXV0
b3B0cihKU0NFeGNlcHRpb24pIGV4Y2VwdGlvbiA9IGpzY19leGNlcHRpb25fbmV3KGNvbnRleHQs
ICJBUEkgZXJyb3IiKTsKKyAgICBjaGVja2VyLndhdGNoKGV4Y2VwdGlvbik7CisgICAgZ19hc3Nl
cnRfdHJ1ZShKU0NfSVNfRVhDRVBUSU9OKGV4Y2VwdGlvbikpOworICAgIGpzY19jb250ZXh0X3Ro
cm93X2V4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworfQorI2VuZGlmCisKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBnX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IG51bGxwdHIpOworCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL2Jhc2ljIiwgdGVzdEpTQ0Jh
c2ljKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi9qc2MvdHlwZXMiLCB0ZXN0SlNDVHlwZXMpOwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL2pzYy9mdW5jdGlvbiIsIHRlc3RKU0NGdW5jdGlvbik7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL29iamVjdCIsIHRlc3RKU0NPYmplY3QpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL2pzYy9jbGFzcyIsIHRlc3RKU0NDbGFzcyk7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvanNjL3Byb3RvdHlwZXMiLCB0ZXN0SlNDUHJvdG90eXBlcyk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvanNjL2V4Y2VwdGlvbnMiLCB0ZXN0SlNDRXhjZXB0aW9ucyk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvanNjL3Byb21pc2VzIiwgdGVzdEpTQ1Byb21pc2VzKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi9qc2MvZ2FyYmFnZS1jb2xsZWN0b3IiLCB0ZXN0SlNDR2FyYmFnZUNvbGxl
Y3Rvcik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvanNjL3ZtIiwgdGVzdHNKU0NWaXJ0dWFsTWFj
aGluZSk7CisjaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi9qc2MvYXV0b2NsZWFudXBzIiwgdGVzdHNKU0NBdXRvY2xlYW51cHMpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3Rr
L2dlbmVyYXRlLWd0a2RvYyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5kZXggZDcxNTUy
MjFiN2MuLjBjNjI4YzNiYjc2IDEwMDc1NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9j
CisrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKQEAgLTExOCw4ICsxMTgsOCBAQCBkZWYg
Z2V0X2dlbmVyYXRvcl9mb3JfY29uZmlnKGNvbmZpZ19maWxlLCB2aXJ0dWFsX3Jvb3QsIGNyb3Nz
X3JlZmVyZW5jZV9kZXBzID0gWwogICAgIHNvdXJjZV9kaXJzID0gY29uZmlnLmdldChtb2R1bGVf
bmFtZSwgJ3NvdXJjZV9kaXJzJykucmVwbGFjZSgnOycsICcgJykuc3BsaXQoKQogICAgIGhlYWRl
cnMgPSBbb3MucGF0aC5hYnNwYXRoKGYpIGZvciBmIGluIGNvbmZpZy5nZXQobW9kdWxlX25hbWUs
ICdoZWFkZXJzJykucmVwbGFjZSgnOycsICcgJykuc3BsaXQoKV0KICAgICByZXR1cm4gZ3RrZG9j
LlBrZ0NvbmZpZ0dUS0RvYyhwa2djb25maWdfZmlsZSwgewotICAgICAgICAnZGVjb3JhdG9yJzog
J1dFQktJVF9BUEl8V0VCS0lUX0RFUFJFQ0FURUR8V0VCS0lUX0RFUFJFQ0FURURfRk9SXCguK1wp
JywKLSAgICAgICAgJ2RlcHJlY2F0aW9uX2d1YXJkJzogJ1dFQktJVF9ESVNBQkxFX0RFUFJFQ0FU
RUQnLAorICAgICAgICAnZGVjb3JhdG9yJzogY29uZmlnLmdldChtb2R1bGVfbmFtZSwgJ2RlY29y
YXRvcicpLAorICAgICAgICAnZGVwcmVjYXRpb25fZ3VhcmQnOiBjb25maWcuZ2V0KG1vZHVsZV9u
YW1lLCAnZGVwcmVjYXRpb25fZ3VhcmQnKSwKICAgICAgICAgJ2xpYnJhcnlfcGF0aCc6IGNvbW1v
bi5saWJyYXJ5X2J1aWxkX3BhdGgoKSwKICAgICAgICAgJ3ZpcnR1YWxfcm9vdCc6IHZpcnR1YWxf
cm9vdCwKICAgICAgICAgJ21vZHVsZV9uYW1lJzogbW9kdWxlX25hbWUsCkBAIC0xOTYsNiArMTk2
LDE0IEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAKICAgICBwcmVwYXJlX2Vudmlyb25t
ZW50X2Zvcl9ndGtkb2NfZ2VuZXJhdGlvbigpCiAKKyAgICBqc2NfZ2VuZXJhdG9yID0gZ2V0X2dl
bmVyYXRvcl9mb3JfY29uZmlnKGNvbW1vbi5idWlsZF9wYXRoKCdndGtkb2MtanNjLWdsaWIuY2Zn
JyksIGFyZ3VtZW50cy52aXJ0dWFsX3Jvb3QpCisgICAgaWYgbm90IGpzY19nZW5lcmF0b3I6Cisg
ICAgICAgIHByaW50KCJndGtkb2MtanNjLWdsaWIuY2ZnIGRvZXMgbm90IGV4aXN0ISBTa2lwcGlu
ZyB0aGF0IGRvY3VtZW50YXRpb24iKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHNhd193YXJu
aW5ncyA9IGdlbmVyYXRlX2RvY3VtZW50YXRpb24oanNjX2dlbmVyYXRvcikKKyAgICBpZiBzYXdf
d2FybmluZ3M6CisgICAgICAgIHN5cy5leGl0KHNhd193YXJuaW5ncykKKwogICAgIHdlYmtpdGRv
bV9nZW5lcmF0b3IgPSBnZXRfZ2VuZXJhdG9yX2Zvcl9jb25maWcoY29tbW9uLmJ1aWxkX3BhdGgo
J2d0a2RvYy13ZWJraXRkb20uY2ZnJyksIGFyZ3VtZW50cy52aXJ0dWFsX3Jvb3QpCiAgICAgaWYg
bm90IHdlYmtpdGRvbV9nZW5lcmF0b3I6CiAgICAgICAgIHByaW50KCJndGtkb2Mtd2Via2l0ZG9t
LmNmZyBkb2VzIG5vdCBleGlzdCEgU2tpcHBpbmcgdGhhdCBkb2N1bWVudGF0aW9uIikK
</data>
<flag name="review"
          id="354652"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>