<?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>146177</bug_id>
          
          <creation_ts>2015-06-19 18:54:10 -0700</creation_ts>
          <short_desc>AX: AXObjectCache should try to use an unignored accessibilityObject when posting a selection notification when on the border between two accessibilityObjects</short_desc>
          <delta_ts>2015-06-24 13:52:07 -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>Accessibility</component>
          <version>528+ (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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Doug Russell">d_russell</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103547</commentid>
    <comment_count>0</comment_count>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-19 18:54:10 -0700</bug_when>
    <thetext>When

1. AXObjectCache is asked to post a notification that selection state has changed
2. the selection is a caret
3. the selection is on a boundary between two accessibilityObjects and one of them is ignored

it is possible for AXObjectCache to try to resolve an observableObject() and end up with NULL because that element is ignored and won&apos;t have a useful tree.

This can be observed when tabbing between two links with a space in between them and observing that the accessibilityObject is the static text in between the links, not the second link.

The concrete fallout of this bug is difficulty correctly echoing links when tabbing between them.

This should be resolved by checking if the object is on a boundary and if the object on the other side of the boundary isn&apos;t ignored and using that instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103548</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-06-19 18:54:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/21472191&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103570</commentid>
    <comment_count>2</comment_count>
      <attachid>255275</attachid>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-19 21:11:32 -0700</bug_when>
    <thetext>Created attachment 255275
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104170</commentid>
    <comment_count>3</comment_count>
      <attachid>255275</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-23 13:59:26 -0700</bug_when>
    <thetext>Comment on attachment 255275
patch

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

Same comments apply to all the copied and pasted versions in DumpRenderTree; I commented on the WebKitTestRunner code.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1020
&gt; +    Node* node = position.deprecatedNode();

Why is it right to use deprecatedNode here? Ryosuke, is that right?

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:112
&gt; +    static Class cls = nil;
&gt; +    static dispatch_once_t onceToken;
&gt; +    dispatch_once(&amp;onceToken, ^{
&gt; +        cls = NSClassFromString(@&quot;WebAccessibilityObjectWrapper&quot;);
&gt; +    });
&gt; +    ASSERT(cls);
&gt; +    return cls;

In WebKit code itself we often turn off the thread safety for globals. But if this is only used from one thread or if the thread safety for globals is turned on in WebKitTestRunner (which I think it could be), then this should just be:

    static Class wrapperClass = objc_getClass(&quot;WebAccessibilityObjectWrapper&quot;);
    return wrapperClass;

I also suggest using objc_getClass, since NSClassFromString just turns around and calls that.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:129
&gt; +static JSValueRef MakeValueRefForValue(JSContextRef context, id value)

WebKit project does not capitalize function names.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:132
&gt; +        return JSValueMakeString(context, JSRetainPtr&lt;JSStringRef&gt;(Adopt, [value createJSStringRef]).get());

We really need an adopt function to help write this kind of thing. The constructor syntax is super awkward.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:139
&gt; +        return toJS(context, WTF::getPtr(WTR::AccessibilityUIElement::create(static_cast&lt;PlatformUIElement&gt;(value))));

No need to use WTF::getPtr here. Should just use the .get() function. The getPtr functions exists for generic programming that needs to work without knowing the type.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:147
&gt; +static JSValueRef MakeArrayRefForArray(JSContextRef context, NSArray *array)

WebKit project does not capitalize function names.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:150
&gt; +    JSValueRef arguments[count];

We normally don’t use the variable-sized array extension, but it’s probably oK for code only used in the test tool.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:158
&gt; +static JSValueRef MakeObjectRefForDictionary(JSContextRef context, NSDictionary *dictionary)

WebKit project does not capitalize function names.

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:164
&gt; +
&gt; +        JSRetainPtr&lt;JSStringRef&gt; propertyName = JSRetainPtr&lt;JSStringRef&gt;(Adopt, [key createJSStringRef]);

This should just be:

    JSRetainPtr&lt;JSStringRef&gt; propertyName { Adopt, [key createJSStringRef] };

But it would be even better if we had an adopt function so we could write:

    auto propertyName = adopt([key createJSStringRef]);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104187</commentid>
    <comment_count>4</comment_count>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-23 14:39:48 -0700</bug_when>
    <thetext>Can adopt just be a free function in JSRetainPtr.h like

template&lt;typename T&gt; JSRetainPtr&lt;T&gt; adopt(T value)
{
    return JSRetainPtr&lt;T&gt;(Adopt, value);
}

or should it be a static method on JSRetainPtr (or something else)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104224</commentid>
    <comment_count>5</comment_count>
      <attachid>255444</attachid>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-23 15:52:05 -0700</bug_when>
    <thetext>Created attachment 255444
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104246</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-23 17:01:06 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Can adopt just be a free function in JSRetainPtr.h like
&gt; 
&gt; template&lt;typename T&gt; JSRetainPtr&lt;T&gt; adopt(T value)
&gt; {
&gt;     return JSRetainPtr&lt;T&gt;(Adopt, value);
&gt; }
&gt; 
&gt; or should it be a static method on JSRetainPtr (or something else)?

It can and should be something like that, but that template is too generic and would apply to too many different classes. Instead we should just do overloading, I think:

    inline JSRetainPtr&lt;JSStringRef&gt; adopt(JSStringRef string)
    {
        return JSRetainPtr&lt;JSStringRef&gt;(Adopt, string);
    }

We can overload for other types as needed. Not sure what types JSRetainPtr supports.

Later we will want to make the JSRetainPtr constructor for Adopt be private and move to this function exclusively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104256</commentid>
    <comment_count>7</comment_count>
      <attachid>255452</attachid>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-23 17:18:16 -0700</bug_when>
    <thetext>Created attachment 255452
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104427</commentid>
    <comment_count>8</comment_count>
      <attachid>255452</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 11:37:18 -0700</bug_when>
    <thetext>Comment on attachment 255452
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1010
&gt; +    AccessibilityObject* object = getOrCreate(node);
&gt; +    postTextStateChangeNotification(object, intent, selection);

Would read better without the local variable.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1028
&gt; +    if (object &amp;&amp; object-&gt;accessibilityIsIgnored()) {

Does getOrCreate actually ever return null? The name makes it sound like it wouldn’t.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1030
&gt; +            if (AccessibilityObject *nextSibling = object-&gt;nextSiblingUnignored(1))

Incorrect formatting for WebKit coding style; * is in the wrong place. Also, I suggest using auto or auto* for this.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1033
&gt; +            if (AccessibilityObject *previousSibling = object-&gt;previousSiblingUnignored(1))

Ditto.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:464
&gt; +    if (limit &lt; 0)
&gt; +        limit = std::numeric_limits&lt;int&gt;::max();

This seems unnecessarily complex. If the default should be std::numeric_limits&lt;int&gt;::max(), then lets specify that default in the header, instead of making negative numbers magic. Also, we never use this feature, always passing 1 for limit, so this is dead untested code.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:465
&gt; +    for (previous = this-&gt;previousSibling(); previous &amp;&amp; previous-&gt;accessibilityIsIgnored(); previous = previous-&gt;previousSibling()) {

Normally we’d write this without this-&gt;

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:447
&gt; +        if ((userInfo = dictionaryRemovingNonSupportedTypes(userInfo)))
&gt; +            info = [NSDictionary dictionaryWithObjectsAndKeys:notificationName, @&quot;notificationName&quot;, userInfo, @&quot;userInfo&quot;, nil];
&gt; +        else
&gt;              info = [NSDictionary dictionaryWithObjectsAndKeys:notificationName, @&quot;notificationName&quot;, nil];

Looks OK, but there is one sleazy shortcut we could take. No need to do the null check on userInfo because if it’s nil it will do the right thing, terminating the list early.

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:100
&gt; +    static Class cls = nil;
&gt; +    if (!cls)
&gt; +        cls = NSClassFromString(@&quot;WebAccessibilityObjectWrapper&quot;);

This is C++; no need for the if statement. This works:

    static Class cls = objc_getClass(&quot;WebAccessibilityObjectWrapper&quot;);

In fact, I would have just added &quot;static&quot; to the existing code instead of adding a new function. And even that change is not really needed; just makes this patch bigger for no significant benefit.

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:129
&gt; +        return AccessibilityUIElement::makeJSAccessibilityUIElement(context, AccessibilityUIElement(value));

Is the explicit conversation to AccessibilityUIElement needed? Does it compile if you just leave it Oout?

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:152
&gt; +    for (NSString *key in dictionary) {

Probably more efficient to use the method that enumerates with a block, since it gives both key and value and eliminates all the hash table lookups.

&gt; Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.mm:154
&gt; +        auto propertyName = adopt([key createJSStringRef]);

Not great to do this outside the if since it’s only used inside the if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104440</commentid>
    <comment_count>9</comment_count>
      <attachid>255501</attachid>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-24 12:10:58 -0700</bug_when>
    <thetext>Created attachment 255501
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104443</commentid>
    <comment_count>10</comment_count>
      <attachid>255502</attachid>
    <who name="Doug Russell">d_russell</who>
    <bug_when>2015-06-24 12:19:54 -0700</bug_when>
    <thetext>Created attachment 255502
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104467</commentid>
    <comment_count>11</comment_count>
      <attachid>255502</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-24 13:52:03 -0700</bug_when>
    <thetext>Comment on attachment 255502
patch

Clearing flags on attachment: 255502

Committed r185924: &lt;http://trac.webkit.org/changeset/185924&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104468</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-24 13:52:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255275</attachid>
            <date>2015-06-19 21:11:32 -0700</date>
            <delta_ts>2015-06-23 15:52:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>select.patch</filename>
            <type>text/plain</type>
            <size>30753</size>
            <attacher name="Doug Russell">d_russell</attacher>
            
              <data encoding="base64">Y29tbWl0IDljM2JlNGEyNjgzMDQxMGRlZjNjZjk4OTMxZGRiODJkODU4MThmZDYKQXV0aG9yOiBE
b3VnIFJ1c3NlbGwgPGRfcnVzc2VsbEBhcHBsZS5jb20+CkRhdGU6ICAgVGh1IEp1biAxOCAxNjox
NDo0NCAyMDE1IC0wNzAwCgogICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3Vs
ZCB0cnkgdG8gdXNlIGFuIHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IHdoZW4gcG9zdGlu
ZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdlZW4gdHdv
IGFjY2Vzc2liaWxpdHlPYmplY3RzCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdhNmRjM2IuLmI4ODE5MzIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxNS0wNi0xOSAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxsQGFwcGxl
LmNvbT4KKworICAgICAgICBCdWcgMTQ2MTc3IC0gQVg6IEFYT2JqZWN0Q2FjaGUgc2hvdWxkIHRy
eSB0byB1c2UgYW4gdW5pZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgCisgICAgICAgIHdoZW4g
cG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdl
ZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBBZGQgdGVzdCBmb3IgZm9yd2Fy
ZCBhbmQgYmFja3dhcmQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGFuZCBjb3JyZXNwb25kaW5nIG5v
dGlmaWNhdGlvbnMKKyAgICAgICAgY2hhbmdlIGVsZW1lbnQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L3NlbGVjdGlvbi1lbGVtZW50LXRhYmJpbmctdG8tbGluay1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1lbGVtZW50LXRh
YmJpbmctdG8tbGluay5odG1sOiBBZGRlZC4KKwogMjAxNS0wNi0xOSAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgRXh0cmVtZWx5IGxhcmdlIGNhbnZhcyBjcmFzaGVz
IG9uIHByZS1FbCBDYXBpdGFuIG1hY2hpbmVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVudC10YWJiaW5nLXRvLWxpbmst
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvc2Vs
ZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYwOWI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmlu
Zy10by1saW5rLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitvbmUgdHdvCitUaGlzIHRl
c3RzIHRoYXQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGluY2x1ZGVzIGEgcmVsZXZhbnQgYWNjZXNz
aWJpbGl0eU9iamVjdCBpbiB0aGUgdXNlckluZm8gd2hlbiBvbiB0aGUgYm91bmRhcnkgYmV0d2Vl
biBhbiBpZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgYW5kIGFuIHVuaWdub3JlZCBhY2Nlc3Np
YmlsaXR5T2JqZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhZGRl
ZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hhbmdlRWxlbWVu
dE9uZSwgIkFYUm9sZTogQVhMaW5rIikuaXNFcXVhbChsaW5rVHdvKSBpcyB0cnVlCitQQVNTIGFu
Y2VzdG9yV2l0aFJvbGUoY2hhbmdlRWxlbWVudFR3bywgIkFYUm9sZTogQVhMaW5rIikuaXNFcXVh
bChsaW5rT25lKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVudC10YWJiaW5n
LXRvLWxpbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGViNTBj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwKQEAgLTAsMCArMSw3OCBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2PgorPGEgaHJlZj0i
IiBpZD0ib25lIj5vbmU8L2E+Cis8YSBocmVmPSIiIGlkPSJ0d28iPnR3bzwvYT4KKzwvZGl2Pgor
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGRp
diBpZD0ibm90aWZpY2F0aW9ucyI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlv
bigiVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgYmV0d2VlbiBsaW5rcyBpbmNsdWRlcyBhIHJlbGV2
YW50IGFjY2Vzc2liaWxpdHlPYmplY3QgaW4gdGhlIHVzZXJJbmZvIHdoZW4gb24gdGhlIGJvdW5k
YXJ5IGJldHdlZW4gYW4gaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IGFuZCBhbiB1bmlnbm9y
ZWQgYWNjZXNzaWJpbGl0eU9iamVjdC4iKTsKKworICAgIHZhciBheFRleHRDaGFuZ2VFbGVtZW50
ID0gMDsKKyAgICB2YXIgd2ViQXJlYSA9IDA7CisgICAgdmFyIGNoYW5nZUVsZW1lbnRPbmUgPSAw
OworICAgIHZhciBjaGFuZ2VFbGVtZW50VHdvID0gMDsKKyAgICB2YXIgbGlua1R3byA9IDA7Cisg
ICAgdmFyIGxpbmtPbmUgPSAwOworICAgIHZhciBjb3VudCA9IDA7CisKKyAgICBmdW5jdGlvbiBh
bmNlc3RvcldpdGhSb2xlKGF4RWxlbWVudCwgcm9sZSkgeworICAgICAgICB2YXIgYW5jZXN0b3Ig
PSBheEVsZW1lbnQ7CisgICAgICAgIHdoaWxlIChhbmNlc3RvcikgeworICAgICAgICAgICAgaWYg
KGFuY2VzdG9yLnJvbGUgPT0gcm9sZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50RWxlbWVudCgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBhbmNlc3RvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3RpZmljYXRpb25D
YWxsYmFjayhub3RpZmljYXRpb24sIHVzZXJJbmZvKSB7CisgICAgICAgIGlmIChub3RpZmljYXRp
b24gPT0gIkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCIpIHsKKyAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGNoYW5nZUVsZW1l
bnRPbmUgPSB1c2VySW5mb1siQVhUZXh0Q2hhbmdlRWxlbWVudCJdOworICAgICAgICAgICAgICAg
IGxpbmtUd28gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
InR3byIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJhbmNlc3RvcldpdGhSb2xlKGNoYW5n
ZUVsZW1lbnRPbmUsIFwiQVhSb2xlOiBBWExpbmtcIikuaXNFcXVhbChsaW5rVHdvKSIsICJ0cnVl
Iik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKKyAgICAgICAgICAgICAg
ICBjaGFuZ2VFbGVtZW50VHdvID0gdXNlckluZm9bIkFYVGV4dENoYW5nZUVsZW1lbnQiXTsKKyAg
ICAgICAgICAgICAgICBsaW5rT25lID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKCJvbmUiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgiYW5jZXN0b3JX
aXRoUm9sZShjaGFuZ2VFbGVtZW50VHdvLCBcIkFYUm9sZTogQVhMaW5rXCIpLmlzRXF1YWwobGlu
a09uZSkiLCAidHJ1ZSIpOworICAgICAgICAgICAgICAgIHdlYkFyZWEucmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5kb3cuYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRUYWJUb0xpbmtz
UHJlZmVyZW5jZUtleSIsIDEpOworCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmVu
YWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgd2ViQXJlYSA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsKKyAgICAgICAg
d2ViQXJlYS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYQ2FyZXRCcm93c2luZ0VuYWJsZWQiLCB0
cnVlKQorCisgICAgICAgIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25lIik7Cisg
ICAgICAgIGxpbmsuZm9jdXMoKTsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSB3
ZWJBcmVhLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKKyAg
ICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKworICAgICAgICBl
dmVudFNlbmRlci5rZXlEb3duKCJcdCIpOworICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJc
dCIsIFsic2hpZnRLZXkiXSk7CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDYwNzA2NWMuLmRmYjhlNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMyBAQAorMjAxNS0wNi0xOSAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxsQGFwcGxlLmNvbT4K
KworICAgICAgICBCdWcgMTQ2MTc3IC0gQVg6IEFYT2JqZWN0Q2FjaGUgc2hvdWxkIHRyeSB0byB1
c2UgYW4gdW5pZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgCisgICAgICAgIHdoZW4gcG9zdGlu
ZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdlZW4gdHdv
IGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcG9zaXRpb24gdG8gYmUgcGFzc2VkIGZvciBz
ZWxlY3Rpb24gY2hhbmdlcyB0byBhbGxvdyBjaGVja2luZy4KKyAgICAgICAgZm9yIGJvdW5kYXJp
ZXMgaW4gdGhlIGNhc2Ugb2YgaWdub3JlZCBlbGVtZW50cy4KKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIHNlYXJjaGluZyBmb3IgdW5pZ25vcmVkIHNpYmxpbmdzIG9mIEFjY2Vzc2liaWxpdHlPYmpl
Y3RzLgorICAgICAgICBJbmNsdWRlIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3JhcHBlcnMgaW4gbm90
aWZpY2F0aW9ucyBmb3IgdGVzdHMuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwKKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTaWJsaW5nVW5pZ25vcmVkKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW06CisgICAgICAgIChpc1Zh
bHVlVHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChhcnJheVJlbW92aW5nTm9uU3VwcG9ydGVkVHlw
ZXMpOgorICAgICAgICAoZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXMpOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYWNjZXNzaWJpbGl0eVBv
c3RlZE5vdGlmaWNhdGlvbjp1c2VySW5mbzpdKToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9GcmFt
ZVNlbGVjdGlvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpub3Rp
ZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKwogMjAxNS0wNi0xOSAgTWljaGFl
bCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IGFic29s
dXRlIHZhbHVlIHdhcm5pbmcgaW4gTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDQ3NzUwZGQuLjE0
YTRjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcApAQCAtMTAwNSwxNyArMTAwNSw1OCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSogbm9kZSwgY29uc3QgQVhUZXh0U3RhdAogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0
ZXMoKTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0
ZShub2RlKTsKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG9iamVjdCwgaW50
ZW50LCBzZWxlY3Rpb24pOworI2Vsc2UKKyAgICBwb3N0Tm90aWZpY2F0aW9uKG5vZGUtPnJlbmRl
cmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCwgVGFyZ2V0T2JzZXJ2
YWJsZVBhcmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGludGVudCk7CisgICAgVU5VU0VEX1BBUkFN
KHNlbGVjdGlvbik7CisjZW5kaWYKK30KIAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgQVhU
ZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQoreworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcENhY2hpbmdDb21wdXRl
ZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5vZGUpOworICAgIGlmIChvYmplY3Qg
JiYgb2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKKyAgICAgICAgaWYgKHBvc2l0
aW9uLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkgeworICAgICAgICAgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QgKm5leHRTaWJsaW5nID0gb2JqZWN0LT5uZXh0U2libGluZ1VuaWdu
b3JlZCgxKSkKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXh0U2libGluZzsKKyAgICAgICAg
fSBlbHNlIGlmIChwb3NpdGlvbi5hdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCAqcHJldmlvdXNTaWJsaW5nID0gb2Jq
ZWN0LT5wcmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoMSkpCisgICAgICAgICAgICAgICAgb2JqZWN0
ID0gcHJldmlvdXNTaWJsaW5nOworICAgICAgICB9CisgICAgfQorCisgICAgcG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3QsIGludGVudCwgc2VsZWN0aW9uKTsKKyNlbHNlCisg
ICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihub2RlLCBpbnRlbnQsIHNlbGVjdGlv
bik7CisjZW5kaWYKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgY29uc3QgQVhUZXh0U3Rh
dGVDaGFuZ2VJbnRlbnQmIGludGVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQoreworICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBpZiAob2JqZWN0KSB7CiAgICAgICAgIGlmIChpc1Bhc3N3b3Jk
RmllbGRPckNvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZChvYmplY3QpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKTsKKworICAg
ICAgICBpZiAoYXV0byBvYnNlcnZhYmxlT2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0
KCkpCisgICAgICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxlT2JqZWN0OwogICAgIH0KIAogICAg
IHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIChpbnRlbnQu
dHlwZSA9PSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVVbmtub3duIHx8IG1faXNTeW5jaHJvbml6aW5n
U2VsZWN0aW9uKSA/IG1fdGV4dFNlbGVjdGlvbkludGVudCA6IGludGVudCwgc2VsZWN0aW9uKTsK
ICNlbHNlCi0gICAgcG9zdE5vdGlmaWNhdGlvbihub2RlLT5yZW5kZXJlcigpLCBBWE9iamVjdENh
Y2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIFRhcmdldE9ic2VydmFibGVQYXJlbnQpOworICAg
IFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShpbnRlbnQpOwogICAgIFVO
VVNFRF9QQVJBTShzZWxlY3Rpb24pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDY3ZTA3Y2YuLmYyYWFiYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0yMDUsNiArMjA1LDcg
QEAgcHVibGljOgogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2Rl
KiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbihOb2RlKiwgQVhUZXh0
RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBBWFRleHRF
ZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKE5vZGUqLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKTsKKyAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oY29u
c3QgUG9zaXRpb24mLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mKTsKIAogICAgIGVudW0gQVhMb2FkaW5nRXZlbnQgewogICAgICAgICBBWExv
YWRpbmdTdGFydGVkLApAQCAtMjU5LDYgKzI2MCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG5v
dGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKCk7CiAKKyAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IEFYVGV4dFN0YXRlQ2hh
bmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworCiAgICAgYm9vbCBlbnF1ZXVl
UGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CiAg
ICAgdm9pZCBwYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmlu
ZGV4IDM0ZTYzZDYuLmVkODI2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNDU3LDYgKzQ1NywzMiBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJlbnRPYmplY3RVbmlnbm9y
ZWQoKSBjb25zdAogICAgIHJldHVybiBwYXJlbnQ7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3Qq
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQgbGltaXQp
IGNvbnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcHJldmlvdXM7CisgICAgaWYgKGxp
bWl0IDwgMCkKKyAgICAgICAgbGltaXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
OworICAgIGZvciAocHJldmlvdXMgPSB0aGlzLT5wcmV2aW91c1NpYmxpbmcoKTsgcHJldmlvdXMg
JiYgcHJldmlvdXMtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsgcHJldmlvdXMgPSBwcmV2aW91
cy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgbGltaXQtLTsKKyAgICAgICAgaWYgKGxp
bWl0IDw9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpb3Vz
OworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2li
bGluZ1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogbmV4dDsKKyAgICBpZiAobGltaXQgPCAwKQorICAgICAgICBsaW1pdCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgZm9yIChuZXh0ID0gdGhpcy0+bmV4dFNpYmxpbmco
KTsgbmV4dCAmJiBuZXh0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7IG5leHQgPSBuZXh0LT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgIGxpbWl0LS07CisgICAgICAgIGlmIChsaW1pdCA8PSAw
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBuZXh0OworfQorCiBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaXJzdEFjY2Vzc2libGVPYmpl
Y3RGcm9tTm9kZShjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXgg
NmNiZDFhMC4uZGM0YTkwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTY0NSw2ICs2NDUsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxp
bmcoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIG5leHRTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCA9
IC0xKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2li
bGluZ1VuaWdub3JlZChpbnQgbGltaXQgPSAtMSkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdElmRXhpc3RzKCkgY29uc3QgeyBy
ZXR1cm4gbnVsbHB0cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1t
CmluZGV4IGU4YjJlZjAuLjRhM2FlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UubW0KQEAgLTM5NCwxNyArMzk0LDIyIEBAIHN0YXRpYyBCT09MIGFjY2Vzc2liaWxp
dHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOwogICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5
UG9zdGVkTm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUgdXNlckluZm86bmlsXTsKIH0KIAot
c3RhdGljIE5TQXJyYXkgKmFycmF5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNBcnJheSAqYXJyYXkp
CitzdGF0aWMgYm9vbCBpc1ZhbHVlVHlwZVN1cHBvcnRlZChpZCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBjbGFzc11dOworfQorCitzdGF0aWMgTlNBcnJh
eSAqYXJyYXlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKE5TQXJyYXkgKmFycmF5KQogewogICAg
IEFTU0VSVChbYXJyYXkgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKTsKICAgICBOU011
dGFibGVBcnJheSAqbXV0YWJsZUFycmF5ID0gW2FycmF5IG11dGFibGVDb3B5XTsKICAgICBmb3Ig
KE5TVUludGVnZXIgaSA9IDA7IGkgPCBbbXV0YWJsZUFycmF5IGNvdW50XTspIHsKICAgICAgICAg
aWQgdmFsdWUgPSBbbXV0YWJsZUFycmF5IG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAgIGlmIChb
dmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgICAgICBb
bXV0YWJsZUFycmF5IHJlcGxhY2VPYmplY3RBdEluZGV4Omkgd2l0aE9iamVjdDpkaWN0aW9uYXJ5
UmVtb3ZpbmdOb25KU09OVHlwZXModmFsdWUpXTsKKyAgICAgICAgICAgIFttdXRhYmxlQXJyYXkg
cmVwbGFjZU9iamVjdEF0SW5kZXg6aSB3aXRoT2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05vblN1
cHBvcnRlZFR5cGVzKHZhbHVlKV07CiAgICAgICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNs
YXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgICAgICBbbXV0YWJsZUFycmF5IHJlcGxhY2VP
YmplY3RBdEluZGV4Omkgd2l0aE9iamVjdDphcnJheVJlbW92aW5nTm9uSlNPTlR5cGVzKHZhbHVl
KV07Ci0gICAgICAgIGVsc2UgaWYgKCEoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pKSB7CisgICAg
ICAgICAgICBbbXV0YWJsZUFycmF5IHJlcGxhY2VPYmplY3RBdEluZGV4Omkgd2l0aE9iamVjdDph
cnJheVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXModmFsdWUpXTsKKyAgICAgICAgZWxzZSBpZiAo
IWlzVmFsdWVUeXBlU3VwcG9ydGVkKHZhbHVlKSkgewogICAgICAgICAgICAgW211dGFibGVBcnJh
eSByZW1vdmVPYmplY3RBdEluZGV4OmldOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KQEAgLTQxMywxNyArNDE4LDE5IEBAIHN0YXRpYyBOU0FycmF5ICphcnJheVJlbW92aW5nTm9u
SlNPTlR5cGVzKE5TQXJyYXkgKmFycmF5KQogICAgIHJldHVybiBbbXV0YWJsZUFycmF5IGF1dG9y
ZWxlYXNlXTsKIH0KIAotc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeVJlbW92aW5nTm9u
SlNPTlR5cGVzKE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKK3N0YXRpYyBOU0RpY3Rpb25hcnkg
KmRpY3Rpb25hcnlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKE5TRGljdGlvbmFyeSAqZGljdGlv
bmFyeSkKIHsKKyAgICBpZiAoIWRpY3Rpb25hcnkpCisgICAgICAgIHJldHVybiBuaWw7CiAgICAg
QVNTRVJUKFtkaWN0aW9uYXJ5IGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsK
ICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICptdXRhYmxlRGljdGlvbmFyeSA9IFtkaWN0aW9uYXJ5
IG11dGFibGVDb3B5XTsKICAgICBmb3IgKE5TU3RyaW5nICprZXkgaW4gZGljdGlvbmFyeSkgewog
ICAgICAgICBpZCB2YWx1ZSA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldOwogICAgICAg
ICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQotICAgICAg
ICAgICAgW211dGFibGVEaWN0aW9uYXJ5IHNldE9iamVjdDpkaWN0aW9uYXJ5UmVtb3ZpbmdOb25K
U09OVHlwZXModmFsdWUpIGZvcktleTprZXldOworICAgICAgICAgICAgW211dGFibGVEaWN0aW9u
YXJ5IHNldE9iamVjdDpkaWN0aW9uYXJ5UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyh2YWx1ZSkg
Zm9yS2V5OmtleV07CiAgICAgICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0Fy
cmF5IGNsYXNzXV0pCi0gICAgICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0OmFy
cmF5UmVtb3ZpbmdOb25KU09OVHlwZXModmFsdWUpIGZvcktleTprZXldOwotICAgICAgICBlbHNl
IGlmICghKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dIHx8IFt2YWx1ZSBp
c0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSkKKyAgICAgICAgICAgIFttdXRhYmxlRGlj
dGlvbmFyeSBzZXRPYmplY3Q6YXJyYXlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKHZhbHVlKSBm
b3JLZXk6a2V5XTsKKyAgICAgICAgZWxzZSBpZiAoIWlzVmFsdWVUeXBlU3VwcG9ydGVkKHZhbHVl
KSkKICAgICAgICAgICAgIFttdXRhYmxlRGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6a2V5
XTsKICAgICB9CiAgICAgcmV0dXJuIFttdXRhYmxlRGljdGlvbmFyeSBhdXRvcmVsZWFzZV07CkBA
IC00MzQsMTYgKzQ0MSw5IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnlSZW1vdmlu
Z05vbkpTT05UeXBlcyhOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCiAgICAgaWYgKGFjY2Vzc2li
aWxpdHlTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zKSB7CiAgICAgICAgIEFTU0VSVChub3RpZmlj
YXRpb25OYW1lKTsKICAgICAgICAgTlNEaWN0aW9uYXJ5ICppbmZvID0gbmlsOwotICAgICAgICBp
ZiAodXNlckluZm8pIHsKLSAgICAgICAgICAgIE5TRGF0YSAqdXNlckluZm9EYXRhID0gW05TSlNP
TlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpT
T05UeXBlcyh1c2VySW5mbykgb3B0aW9uczooTlNKU09OV3JpdGluZ09wdGlvbnMpMCBlcnJvcjpu
aWxdOwotICAgICAgICAgICAgaWYgKHVzZXJJbmZvRGF0YSkgewotICAgICAgICAgICAgICAgIE5T
U3RyaW5nICp1c2VySW5mb1N0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTp1
c2VySW5mb0RhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgICAgICAgICAg
ICAgIGlmICh1c2VySW5mb1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgaW5mbyA9IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpub3RpZmljYXRpb25OYW1lLCBA
Im5vdGlmaWNhdGlvbk5hbWUiLCB1c2VySW5mb1N0cmluZywgQCJ1c2VySW5mbyIsIG5pbF07Ci0g
ICAgICAgICAgICAgICAgW3VzZXJJbmZvU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmICghaW5mbykKKyAgICAgICAgaWYgKCh1c2VySW5mbyA9IGRp
Y3Rpb25hcnlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKHVzZXJJbmZvKSkpCisgICAgICAgICAg
ICBpbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOm5vdGlm
aWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIHVzZXJJbmZvLCBAInVzZXJJbmZvIiwg
bmlsXTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5mbyA9IFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpub3RpZmljYXRpb25OYW1lLCBAIm5vdGlmaWNhdGlv
bk5hbWUiLCBuaWxdOwogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpzZWxm
IHVzZXJJbmZvOmluZm9dOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RnJhbWVTZWxlY3Rpb25NYWMubW0KaW5kZXggMWE4MmVmOS4uNjllYjI5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMubW0KQEAgLTUzLDcgKzUz
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW4KIAogICAgIGlmIChtX3NlbGVjdGlvbi5zdGFy
dCgpLmlzTm90TnVsbCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7CiAgICAg
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50LT5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSkKLSAgICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSwgaW50ZW50LCBtX3NlbGVj
dGlvbik7CisgICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihtX3NlbGVjdGlvbi5zdGFydCgpLCBpbnRlbnQsIG1fc2VsZWN0aW9uKTsKICAgICB9CiAKICNp
ZiAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDdiZjY1OGUuLjhlOGZiOTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNS0wNi0xOSAgRG91
ZyBSdXNzZWxsICA8ZF9ydXNzZWxsQGFwcGxlLmNvbT4KKworICAgICAgICBCdWcgMTQ2MTc3IC0g
QVg6IEFYT2JqZWN0Q2FjaGUgc2hvdWxkIHRyeSB0byB1c2UgYW4gdW5pZ25vcmVkIGFjY2Vzc2li
aWxpdHlPYmplY3QgCisgICAgICAgIHdoZW4gcG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRp
b24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdlZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgbWFwcGluZyBXZWJDb3JlIEFjY2Vzc2liaWxpdHkgdHlwZXMgaW50byBKU1ZhbHVlUmVm
IHR5cGVzCisgICAgICAgIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gdGVzdHMuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW06
CisgICAgICAgIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKToKKyAgICAgICAg
KC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc3RhcnRPYnNlcnZpbmddKToKKyAg
ICAgICAgKE1ha2VWYWx1ZVJlZkZvclZhbHVlKToKKyAgICAgICAgKE1ha2VBcnJheVJlZkZvckFy
cmF5KToKKyAgICAgICAgKE1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KToKKyAgICAgICAgKC1b
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgX25vdGlmaWNhdGlvblJlY2VpdmVkOl0p
OgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzdG9wT2JzZXJ2
aW5nXSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW06CisgICAgICAgIChXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIgc3RhcnRPYnNlcnZpbmddKToKKyAgICAgICAgKE1ha2VWYWx1
ZVJlZkZvclZhbHVlKToKKyAgICAgICAgKE1ha2VBcnJheVJlZkZvckFycmF5KToKKyAgICAgICAg
KE1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXIgX25vdGlmaWNhdGlvblJlY2VpdmVkOl0pOgorCiAyMDE1LTA2LTE5
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBh
ZnRlciByMTQ2MTI1LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCmluZGV4IDFiZTgwNjcuLmZjMzMz
N2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlci5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KQEAgLTkzLDEyICs5MywyMyBAQAogICAgIEpT
VmFsdWVQcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayk7CiB9CiAKK3N0YXRpYyBDbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgY2xzID0gbmlsOworICAgIHN0YXRp
YyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tl
biwgXnsKKyAgICAgICAgY2xzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciIpOworICAgIH0pOworICAgIEFTU0VSVChjbHMpOworICAgIHJldHVybiBj
bHM7Cit9CisKIC0gKHZvaWQpc3RhcnRPYnNlcnZpbmcKIHsKICAgICAvLyBPbmNlIHdlIHN0YXJ0
IHJlcXVlc3Rpbmcgbm90aWZpY2F0aW9ucywgaXQncyBvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo
ZSBwcm9ncmFtLgogICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucyBi
ZXR3ZWVuIHRlc3RzIHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQKICAgICAv
LyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4gaWdub3JlIGV2ZW50cyBpdCBk
b2Vzbid0IGNhcmUgYWJvdXQuCi0gICAgaWQgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJD
bGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIi
KTsKKyAgICBpZCB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0gV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpOwogICAgIEFTU0VSVCh3ZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckNsYXNzKTsKICAgICBbd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJD
bGFzcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOwogICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90
aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsKQEAgLTEwOSw2ICsxMjAsNTAgQEAKICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogfQog
CitzdGF0aWMgSlNWYWx1ZVJlZiBNYWtlVmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgaWQgdmFsdWUpCit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdKS5n
ZXQoKSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7
CisgICAgICAgIGlmICghc3RyY21wKFt2YWx1ZSBvYmpDVHlwZV0sIEBlbmNvZGUoQk9PTCkpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBbdmFsdWUgYm9v
bFZhbHVlXSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBbdmFs
dWUgZG91YmxlVmFsdWVdKTsKKyAgICB9CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOldl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKV0pCisgICAgICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnRleHQs
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQodmFsdWUpKTsKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICByZXR1cm4gTWFrZU9iamVjdFJl
ZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICByZXR1cm4gTWFrZUFycmF5UmVmRm9yQXJy
YXkoY29udGV4dCwgdmFsdWUpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBNYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJh
eSAqYXJyYXkpCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IGFycmF5LmNvdW50OworICAgIEpT
VmFsdWVSZWYgYXJndW1lbnRzW2NvdW50XTsKKyAgICAKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBhcmd1bWVudHNbaV0gPSBNYWtlVmFsdWVSZWZG
b3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgCisgICAgcmV0
dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIp
OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBNYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0Nv
bnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQoreworICAgIEpTT2Jq
ZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsK
KyAgICAKKyAgICBmb3IgKE5TU3RyaW5nICprZXkgaW4gZGljdGlvbmFyeSkgeworICAgICAgICAK
KyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZSA9IEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgW2tleSBjcmVhdGVKU1N0cmluZ1JlZl0pOworICAgICAg
ICAKKyAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9IE1ha2VWYWx1ZVJlZkZv
clZhbHVlKGNvbnRleHQsIFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldKSkKKyAgICAgICAg
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0
KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBvYmplY3Q7Cit9CisKIC0gKHZvaWQpX25vdGlmaWNhdGlv
blJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIE5TU3RyaW5n
ICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktl
eTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKQEAgLTExNywyNyArMTcyLDIyIEBACiAgICAgaWYgKG1f
cGxhdGZvcm1FbGVtZW50ICYmIG1fcGxhdGZvcm1FbGVtZW50ICE9IFtub3RpZmljYXRpb24gb2Jq
ZWN0XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNTdHJpbmcgKnVzZXJJbmZvSlNPTlZhbHVl
ID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAInVzZXJJbmZvIl07Cisg
ICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmpl
Y3RGb3JLZXk6QCJ1c2VySW5mbyJdOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpz
Tm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0p
OwotICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VT
dHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwot
ICAgIEpTVmFsdWVSZWYgdXNlckluZm9KU09OVmFsdWVBcmd1bWVudCA9IG5pbDsKLSAgICBpZiAo
W3VzZXJJbmZvSlNPTlZhbHVlIGxlbmd0aF0pIHsKLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGpzVXNlckluZm9KU09OVmFsdWUoQWRvcHQsIFt1c2VySW5mb0pTT05WYWx1ZSBjcmVh
dGVKU1N0cmluZ1JlZl0pOwotICAgICAgICB1c2VySW5mb0pTT05WYWx1ZUFyZ3VtZW50ID0gSlNW
YWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBqc1VzZXJJ
bmZvSlNPTlZhbHVlLmdldCgpKTsKLSAgICB9CisgICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25O
YW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRd
LCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0
ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgdXNlckluZm9Bcmd1bWVudCA9
IE1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIHVz
ZXJJbmZvKTsKICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpIHsKICAgICAgICAgLy8gTGlzdGVu
ZXIgZm9yIG9uZSBlbGVtZW50IGdldHMgdGhlIG5vdGlmaWNhdGlvbiBuYW1lIGFuZCB1c2VySW5m
by4KICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl07CiAgICAgICAgIGFyZ3VtZW50c1sw
XSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRzWzFdID0gdXNl
ckluZm9KU09OVmFsdWVBcmd1bWVudDsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gdXNlckluZm9B
cmd1bWVudDsKICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50
cywgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0
aGUgZWxlbWVudCwgbm90aWZpY2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1szXTsKICAgICAgICAgYXJndW1lbnRzWzBdID0gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFtub3RpZmljYXRpb24gb2JqZWN0XSkp
OwogICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7Ci0gICAg
ICAgIGFyZ3VtZW50c1syXSA9IHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQ7CisgICAgICAgIGFy
Z3VtZW50c1syXSA9IHVzZXJJbmZvQXJndW1lbnQ7CiAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrLCAwLCAyLCBhcmd1bWVudHMsIDApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KaW5kZXggZjEzMDM2Ni4uMGZi
YTA2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIubW0KQEAgLTEwMSwxNCArMTAxLDIzIEBACiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4
dCwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKIH0KIAorc3RhdGljIENsYXNzIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBj
bHMgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlz
cGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBjbHMgPSBOU0NsYXNzRnJvbVN0cmlu
ZyhAIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIik7CisgICAgfSk7CisgICAgQVNTRVJU
KGNscyk7CisgICAgcmV0dXJuIGNsczsKK30KKwogLSAodm9pZClzdGFydE9ic2VydmluZwogewog
ICAgIC8vIE9uY2Ugd2Ugc3RhcnQgcmVxdWVzdGluZyBub3RpZmljYXRpb25zLCBpdCdzIG9uIGZv
ciB0aGUgZHVyYXRpb24gb2YgdGhlIHByb2dyYW0uCiAgICAgLy8gVGhpcyBpcyB0byBhdm9pZCBh
bnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGVzdHMgdHVybmluZyB0aGlzIGZsYWcgb24gYW5k
IG9mZi4gSW5zdGVhZAogICAgIC8vIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGNh
biBpZ25vcmUgZXZlbnRzIGl0IGRvZXNuJ3QgY2FyZSBhYm91dC4KLSAgICBpZCB3ZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciIpOwotICAgIEFTU0VSVCh3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckNsYXNzKTsKLSAgICBbd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcyBh
Y2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOworICAgIFtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkgYWNjZXNzaWJpbGl0eVNldFNob3VsZFJl
cG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9ub3RpZmljYXRp
b25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbF07CiB9CiAK
QEAgLTExNyw2ICsxMjYsNTAgQEAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBNYWtl
VmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgaWQgdmFsdWUpCit7CisgICAg
aWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFk
b3B0LCBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdKS5nZXQoKSk7CisgICAgaWYgKFt2YWx1ZSBp
c0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7CisgICAgICAgIGlmICghc3RyY21wKFt2
YWx1ZSBvYmpDVHlwZV0sIEBlbmNvZGUoQk9PTCkpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlQm9vbGVhbihjb250ZXh0LCBbdmFsdWUgYm9vbFZhbHVlXSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBbdmFsdWUgZG91YmxlVmFsdWVdKTsKKyAgICB9
CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQ2xhc3MoKV0pCisgICAgICAgIHJldHVybiB0b0pTKGNvbnRleHQsIFdURjo6Z2V0UHRyKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVUlF
bGVtZW50Pih2YWx1ZSkpKSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rp
b25hcnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5
KGNvbnRleHQsIHZhbHVlKTsKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkg
Y2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE1ha2VBcnJheVJlZkZvckFycmF5KGNvbnRleHQsIHZh
bHVlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgTWFrZUFy
cmF5UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQorewor
ICAgIE5TVUludGVnZXIgY291bnQgPSBhcnJheS5jb3VudDsKKyAgICBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tjb3VudF07CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICBhcmd1bWVudHNbaV0gPSBNYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBb
YXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXko
Y29udGV4dCwgY291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIE1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0Rp
Y3Rpb25hcnkgKmRpY3Rpb25hcnkpCit7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNPYmpl
Y3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgZm9yIChOU1N0cmluZyAq
a2V5IGluIGRpY3Rpb25hcnkpIHsKKworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
cHJvcGVydHlOYW1lID0gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBba2V5IGNyZWF0
ZUpTU3RyaW5nUmVmXSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9
IE1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpr
ZXldKSkKKyAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUuZ2V0KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9u
ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwogLSAodm9pZClf
bm90aWZpY2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAg
ICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10g
b2JqZWN0Rm9yS2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOwpAQCAtMTI1LDMxICsxNzgsMjYgQEAK
ICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlm
aWNhdGlvbiBvYmplY3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU1N0cmluZyAqdXNlcklu
Zm9KU09OVmFsdWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAidXNl
ckluZm8iXTsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpAInVzZXJJbmZvIl07CiAKICAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAotICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlv
bk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5h
bWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzTm90aWZpY2F0aW9uLmdl
dCgpKTsKLSAgICBKU1ZhbHVlUmVmIHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQgPSBuaWw7Ci0g
ICAgaWYgKFt1c2VySW5mb0pTT05WYWx1ZSBsZW5ndGhdKSB7Ci0gICAgICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBqc1VzZXJJbmZvSlNPTlZhbHVlKEFkb3B0LCBbdXNlckluZm9KU09OVmFs
dWUgY3JlYXRlSlNTdHJpbmdSZWZdKTsKLSAgICAgICAgdXNlckluZm9KU09OVmFsdWVBcmd1bWVu
dCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwganNVc2VySW5mb0pTT05WYWx1
ZS5nZXQoKSk7Ci0gICAgfQorICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50
ID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFk
b3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0pLmdldCgpKTsKKyAgICBK
U1ZhbHVlUmVmIHVzZXJJbmZvQXJndW1lbnQgPSBNYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShj
b250ZXh0LCB1c2VySW5mbyk7CiAgICAgaWYgKG1fcGxhdGZvcm1FbGVtZW50KSB7CiAgICAgICAg
IC8vIExpc3RlbmVyIGZvciBvbmUgZWxlbWVudCBnZXRzIHRoZSBub3RpZmljYXRpb24gbmFtZSBh
bmQgdXNlckluZm8uCiAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzJdOwogICAgICAgICBh
cmd1bWVudHNbMF0gPSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7Ci0gICAgICAgIGFyZ3VtZW50
c1sxXSA9IHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQ7CisgICAgICAgIGFyZ3VtZW50c1sxXSA9
IHVzZXJJbmZvQXJndW1lbnQ7CiAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4
dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4obV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
KSwgMCwgMiwgYXJndW1lbnRzLCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBIGdsb2Jh
bCBsaXN0ZW5lciBnZXRzIHRoZSBlbGVtZW50LCBub3RpZmljYXRpb24gbmFtZSBhbmQgdXNlcklu
Zm8uCiAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzNdOwogICAgICAgICBhcmd1bWVudHNb
MF0gPSB0b0pTKGNvbnRleHQsIFdURjo6Z2V0UHRyKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y3JlYXRlKFtub3RpZmljYXRpb24gb2JqZWN0XSkpKTsKICAgICAgICAgYXJndW1lbnRzWzFd
ID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OwotICAgICAgICBhcmd1bWVudHNbMl0gPSB1c2Vy
SW5mb0pTT05WYWx1ZUFyZ3VtZW50OwotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNv
bnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjayksIDAsIDIsIGFyZ3VtZW50cywgMCk7CisgICAgICAgIGFyZ3VtZW50c1syXSA9IHVzZXJJ
bmZvQXJndW1lbnQ7CisgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY29u
c3RfY2FzdDxKU09iamVjdFJlZj4obV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKSwgMCwg
MywgYXJndW1lbnRzLCAwKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255444</attachid>
            <date>2015-06-23 15:52:05 -0700</date>
            <delta_ts>2015-06-23 17:18:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>146177.patch</filename>
            <type>text/plain</type>
            <size>31877</size>
            <attacher name="Doug Russell">d_russell</attacher>
            
              <data encoding="base64">Y29tbWl0IDdlODE2YzdmYTRiYjBmOTViYmE1ZmU3MTA4Mzk1M2NiNDZkMzIxNmIKQXV0aG9yOiBE
b3VnIFJ1c3NlbGwgPGRfcnVzc2VsbEBhcHBsZS5jb20+CkRhdGU6ICAgTW9uIEp1biAyMiAwOTo1
MzoxMCAyMDE1IC0wNzAwCgogICAgQnVnIDE0NjE3NwogICAgCiAgICBBWDogQVhPYmplY3RDYWNo
ZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCB3aGVu
IHBvc3RpbmcgYSBzZWxlY3Rpb24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3
ZWVuIHR3byBhY2Nlc3NpYmlsaXR5T2JqZWN0cwogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NjE3NwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NjBkNGI2Li5hODU3MGQ3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0
cnkgdG8gdXNlIGFuIHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0CisgICAgICAgIHdoZW4g
cG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdl
ZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBBZGQgdGVzdCBmb3IgZm9yd2Fy
ZCBhbmQgYmFja3dhcmQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGFuZCBjb3JyZXNwb25kaW5nIG5v
dGlmaWNhdGlvbnMKKyAgICAgICAgY2hhbmdlIGVsZW1lbnQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L3NlbGVjdGlvbi1lbGVtZW50LXRhYmJpbmctdG8tbGluay1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1lbGVtZW50LXRh
YmJpbmctdG8tbGluay5odG1sOiBBZGRlZC4KKwogMjAxNS0wNi0yMiAgRGFuaWVsIEJhdGVzICA8
ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJIEF1dG9tYXRpb24gY2Fubm90IGZp
bmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25zCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVudC10YWJiaW5n
LXRvLWxpbmstZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYwOWI1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1l
bnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitvbmUgdHdv
CitUaGlzIHRlc3RzIHRoYXQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGluY2x1ZGVzIGEgcmVsZXZh
bnQgYWNjZXNzaWJpbGl0eU9iamVjdCBpbiB0aGUgdXNlckluZm8gd2hlbiBvbiB0aGUgYm91bmRh
cnkgYmV0d2VlbiBhbiBpZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgYW5kIGFuIHVuaWdub3Jl
ZCBhY2Nlc3NpYmlsaXR5T2JqZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBhZGRlZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hh
bmdlRWxlbWVudE9uZSwgIkFYUm9sZTogQVhMaW5rIikuaXNFcXVhbChsaW5rVHdvKSBpcyB0cnVl
CitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hhbmdlRWxlbWVudFR3bywgIkFYUm9sZTogQVhMaW5r
IikuaXNFcXVhbChsaW5rT25lKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVu
dC10YWJiaW5nLXRvLWxpbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNGViNTBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwKQEAgLTAs
MCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2Pgor
PGEgaHJlZj0iIiBpZD0ib25lIj5vbmU8L2E+Cis8YSBocmVmPSIiIGlkPSJ0d28iPnR3bzwvYT4K
KzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGRpdiBpZD0ibm90aWZpY2F0aW9ucyI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgYmV0d2VlbiBsaW5rcyBpbmNsdWRl
cyBhIHJlbGV2YW50IGFjY2Vzc2liaWxpdHlPYmplY3QgaW4gdGhlIHVzZXJJbmZvIHdoZW4gb24g
dGhlIGJvdW5kYXJ5IGJldHdlZW4gYW4gaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IGFuZCBh
biB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdC4iKTsKKworICAgIHZhciBheFRleHRDaGFu
Z2VFbGVtZW50ID0gMDsKKyAgICB2YXIgd2ViQXJlYSA9IDA7CisgICAgdmFyIGNoYW5nZUVsZW1l
bnRPbmUgPSAwOworICAgIHZhciBjaGFuZ2VFbGVtZW50VHdvID0gMDsKKyAgICB2YXIgbGlua1R3
byA9IDA7CisgICAgdmFyIGxpbmtPbmUgPSAwOworICAgIHZhciBjb3VudCA9IDA7CisKKyAgICBm
dW5jdGlvbiBhbmNlc3RvcldpdGhSb2xlKGF4RWxlbWVudCwgcm9sZSkgeworICAgICAgICB2YXIg
YW5jZXN0b3IgPSBheEVsZW1lbnQ7CisgICAgICAgIHdoaWxlIChhbmNlc3RvcikgeworICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLnJvbGUgPT0gcm9sZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50RWxlbWVudCgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhbmNlc3RvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3Rp
ZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24sIHVzZXJJbmZvKSB7CisgICAgICAgIGlmIChu
b3RpZmljYXRpb24gPT0gIkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCIpIHsKKyAgICAgICAgICAgIGNv
dW50Kys7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGNo
YW5nZUVsZW1lbnRPbmUgPSB1c2VySW5mb1siQVhUZXh0Q2hhbmdlRWxlbWVudCJdOworICAgICAg
ICAgICAgICAgIGxpbmtUd28gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInR3byIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJhbmNlc3RvcldpdGhS
b2xlKGNoYW5nZUVsZW1lbnRPbmUsIFwiQVhSb2xlOiBBWExpbmtcIikuaXNFcXVhbChsaW5rVHdv
KSIsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VFbGVtZW50VHdvID0gdXNlckluZm9bIkFYVGV4dENoYW5nZUVsZW1l
bnQiXTsKKyAgICAgICAgICAgICAgICBsaW5rT25lID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJvbmUiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgi
YW5jZXN0b3JXaXRoUm9sZShjaGFuZ2VFbGVtZW50VHdvLCBcIkFYUm9sZTogQVhMaW5rXCIpLmlz
RXF1YWwobGlua09uZSkiLCAidHJ1ZSIpOworICAgICAgICAgICAgICAgIHdlYkFyZWEucmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRU
YWJUb0xpbmtzUHJlZmVyZW5jZUtleSIsIDEpOworCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgd2ViQXJl
YSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsK
KyAgICAgICAgd2ViQXJlYS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYQ2FyZXRCcm93c2luZ0Vu
YWJsZWQiLCB0cnVlKQorCisgICAgICAgIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b25lIik7CisgICAgICAgIGxpbmsuZm9jdXMoKTsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmlj
YXRpb24gPSB3ZWJBcmVhLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKwor
ICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJcdCIpOworICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJcdCIsIFsic2hpZnRLZXkiXSk7CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Jl
dGFpblB0ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCmluZGV4
IGYyM2UzMmYuLjhlOWE5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNSZXRhaW5QdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKQEAgLTc1LDYgKzc1LDExIEBAIHByaXZhdGU6CiAgICAgVCBtX3B0cjsKIH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU1JldGFpblB0cjxUPiBhZG9wdChUIG8pCit7CisgICAg
cmV0dXJuIEpTUmV0YWluUHRyPFQ+KEFkb3B0LCBvKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTUmV0YWluUHRyPFQ+OjpKU1JldGFpblB0cihjb25zdCBKU1JldGFpblB0ciYg
bykKICAgICA6IG1fcHRyKG8ubV9wdHIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjLi5hMzQwNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxNS0wNi0yMyAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxsQGFwcGxlLmNvbT4KKworICAg
ICAgICBCdWcgMTQ2MTc3IC0gQVg6IEFYT2JqZWN0Q2FjaGUgc2hvdWxkIHRyeSB0byB1c2UgYW4g
dW5pZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgCisgICAgICAgIHdoZW4gcG9zdGluZyBhIHNl
bGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdlZW4gdHdvIGFjY2Vz
c2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDYxNzcKKworICAgICAgICBBZGQgYW4gYWRvcHQoKSBmdW5jdGlvbiB0byBzaW1w
bGlmeSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4geyBBZG9wdCwgc3RyaW5nIH0gdG8gYWRvcHQo
c3RyaW5nKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIEFQSS9KU1JldGFpblB0ci5oOgorICAgICAgICAoYWRvcHQpOgorCiAyMDE1LTA2LTIwICBZ
dXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtFUzZdIERl
c3RydWN0dXJpbmcgYXNzaWdubWVudCBuZWVkIHRvIGFjY2VwdCBpdGVyYWJsZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA3MTZhZTc4Li45MzA2YjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTUt
MDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBsZS5jb20+CisKKyAgICAgICAgQnVn
IDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0cnkgdG8gdXNlIGFuIHVuaWdub3Jl
ZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IAorICAgICAgICB3aGVuIHBvc3RpbmcgYSBzZWxlY3Rpb24g
bm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3ZWVuIHR3byBhY2Nlc3NpYmlsaXR5
T2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ2MTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHBvc2l0aW9uIHRvIGJlIHBhc3NlZCBmb3Igc2VsZWN0aW9uIGNoYW5n
ZXMgdG8gYWxsb3cgY2hlY2tpbmcuCisgICAgICAgIGZvciBib3VuZGFyaWVzIGluIHRoZSBjYXNl
IG9mIGlnbm9yZWQgZWxlbWVudHMuCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzZWFyY2hpbmcg
Zm9yIHVuaWdub3JlZCBzaWJsaW5ncyBvZiBBY2Nlc3NpYmlsaXR5T2JqZWN0cy4KKyAgICAgICAg
SW5jbHVkZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdyYXBwZXJzIGluIG5vdGlmaWNhdGlvbnMgZm9y
IHRlc3RzLgorCisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlbGVj
dGlvbi1lbGVtZW50LXRhYmJpbmctdG8tbGluay5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZp
b3VzU2libGluZ1VuaWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpuZXh0U2libGluZ1VuaWdub3JlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tOgorICAgICAgICAoaXNWYWx1ZVR5cGVTdXBwb3J0
ZWQpOgorICAgICAgICAoYXJyYXlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKToKKyAgICAgICAg
KGRpY3Rpb25hcnlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRp
b246dXNlckluZm86XSk6CisgICAgICAgICogZWRpdGluZy9tYWMvRnJhbWVTZWxlY3Rpb25NYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0
eUZvclNlbGVjdGlvbkNoYW5nZSk6CisKIDIwMTUtMDYtMjIgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBVSSBBdXRvbWF0aW9uIGNhbm5vdCBmaW5kIEF1
dG9GaWxsIG9yIHNlYXJjaCBjYW5jZWwgYnV0dG9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNDc3NTBkZC4uMTRhNGM3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xMDA1
LDE3ICsxMDA1LDU4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbihOb2RlKiBub2RlLCBjb25zdCBBWFRleHRTdGF0CiAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworICAgIAor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5vZGUpOworICAg
IHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0LCBpbnRlbnQsIHNlbGVjdGlv
bik7CisjZWxzZQorICAgIHBvc3ROb3RpZmljYXRpb24obm9kZS0+cmVuZGVyZXIoKSwgQVhPYmpl
Y3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBUYXJnZXRPYnNlcnZhYmxlUGFyZW50KTsK
KyAgICBVTlVTRURfUEFSQU0oaW50ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsK
KyNlbmRpZgorfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYgaW50ZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7Cisg
ICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmli
dXRlcygpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqZWN0ID0gZ2V0T3JDcmVhdGUobm9kZSk7CisgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAgICBpZiAocG9zaXRpb24uYXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9i
amVjdCAqbmV4dFNpYmxpbmcgPSBvYmplY3QtPm5leHRTaWJsaW5nVW5pZ25vcmVkKDEpKQorICAg
ICAgICAgICAgICAgIG9iamVjdCA9IG5leHRTaWJsaW5nOworICAgICAgICB9IGVsc2UgaWYgKHBv
c2l0aW9uLmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpIHsKKyAgICAgICAgICAgIGlm
IChBY2Nlc3NpYmlsaXR5T2JqZWN0ICpwcmV2aW91c1NpYmxpbmcgPSBvYmplY3QtPnByZXZpb3Vz
U2libGluZ1VuaWdub3JlZCgxKSkKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBwcmV2aW91c1Np
Ymxpbmc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKG9iamVjdCwgaW50ZW50LCBzZWxlY3Rpb24pOworI2Vsc2UKKyAgICBwb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG5vZGUsIGludGVudCwgc2VsZWN0aW9uKTsKKyNlbmRpZgor
fQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24o
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dCYgaW50ZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7CisgICAgc3Rv
cENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgaWYgKGlzUGFzc3dvcmRGaWVsZE9yQ29udGFp
bmVkQnlQYXNzd29yZEZpZWxkKG9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG9iamVjdCA9IG9iamVjdC0+b2JzZXJ2YWJsZU9iamVjdCgpOworCisgICAgICAgIGlmIChhdXRv
IG9ic2VydmFibGVPYmplY3QgPSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKSkKKyAgICAgICAg
ICAgIG9iamVjdCA9IG9ic2VydmFibGVPYmplY3Q7CiAgICAgfQogCiAgICAgcG9zdFRleHRTdGF0
ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwgKGludGVudC50eXBlID09IEFYVGV4
dFN0YXRlQ2hhbmdlVHlwZVVua25vd24gfHwgbV9pc1N5bmNocm9uaXppbmdTZWxlY3Rpb24pID8g
bV90ZXh0U2VsZWN0aW9uSW50ZW50IDogaW50ZW50LCBzZWxlY3Rpb24pOwogI2Vsc2UKLSAgICBw
b3N0Tm90aWZpY2F0aW9uKG5vZGUtPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0
ZWRUZXh0Q2hhbmdlZCwgVGFyZ2V0T2JzZXJ2YWJsZVBhcmVudCk7CisgICAgVU5VU0VEX1BBUkFN
KG9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKGludGVudCk7CiAgICAgVU5VU0VEX1BBUkFNKHNl
bGVjdGlvbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKaW5kZXggNjdlMDdjZi4uZjJhYWJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0
VHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBw
b3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSBkZWxl
dGlvblR5cGUsIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIEFYVGV4dEVkaXRUeXBlIGluc2Vy
dGlvblR5cGUsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIGNv
bnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwor
ICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihjb25zdCBQb3NpdGlvbiYs
IGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OwogCiAgICAgZW51bSBBWExvYWRpbmdFdmVudCB7CiAgICAgICAgIEFYTG9hZGluZ1N0YXJ0ZWQs
CkBAIC0yNTksNiArMjYwLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbm90aWZpY2F0aW9uUG9z
dFRpbWVyRmlyZWQoKTsKIAorICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisKICAgICBib29sIGVucXVldWVQYXNzd29yZFZhbHVl
Q2hhbmdlTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKICAgICB2b2lkIHBhc3N3
b3JkTm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggMzRlNjNkNi4u
ZWQ4MjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCkBAIC00NTcsNiArNDU3LDMyIEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHBhcmVudDsKIH0KIAorQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3QKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91czsKKyAgICBpZiAobGltaXQgPCAwKQorICAg
ICAgICBsaW1pdCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgZm9yIChw
cmV2aW91cyA9IHRoaXMtPnByZXZpb3VzU2libGluZygpOyBwcmV2aW91cyAmJiBwcmV2aW91cy0+
YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOyBwcmV2aW91cyA9IHByZXZpb3VzLT5wcmV2aW91c1Np
YmxpbmcoKSkgeworICAgICAgICBsaW1pdC0tOworICAgICAgICBpZiAobGltaXQgPD0gMCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcHJldmlvdXM7Cit9CisKK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTaWJsaW5nVW5pZ25vcmVk
KGludCBsaW1pdCkgY29uc3QKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXh0OworICAg
IGlmIChsaW1pdCA8IDApCisgICAgICAgIGxpbWl0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKKyAgICBmb3IgKG5leHQgPSB0aGlzLT5uZXh0U2libGluZygpOyBuZXh0ICYmIG5l
eHQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsgbmV4dCA9IG5leHQtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgbGltaXQtLTsKKyAgICAgICAgaWYgKGxpbWl0IDw9IDApCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG5leHQ7Cit9CisKIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNv
bnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCA2Y2JkMWEwLi5kYzRh
OTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaApAQCAtNjQ1LDYgKzY0NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICAg
ICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZygpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIG5leHRT
aWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eU9iamVjdCogbmV4dFNpYmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0ID0gLTEpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcHJldmlvdXNTaWJsaW5nVW5pZ25vcmVk
KGludCBsaW1pdCA9IC0xKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHBhcmVudE9iamVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdCB7IHJldHVybiBudWxscHRy
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KaW5kZXggZThiMmVm
MC4uNGEzYWVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpA
QCAtMzk0LDE3ICszOTQsMjIgQEAgc3RhdGljIEJPT0wgYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9z
dE5vdGlmaWNhdGlvbnM7CiAgICAgICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmlj
YXRpb246bm90aWZpY2F0aW9uTmFtZSB1c2VySW5mbzpuaWxdOwogfQogCi1zdGF0aWMgTlNBcnJh
eSAqYXJyYXlSZW1vdmluZ05vbkpTT05UeXBlcyhOU0FycmF5ICphcnJheSkKK3N0YXRpYyBib29s
IGlzVmFsdWVUeXBlU3VwcG9ydGVkKGlkIHZhbHVlKQoreworICAgIHJldHVybiBbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNO
dW1iZXIgY2xhc3NdXSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlIGNsYXNzXV07Cit9CisKK3N0YXRpYyBOU0FycmF5ICphcnJheVJlbW92
aW5nTm9uU3VwcG9ydGVkVHlwZXMoTlNBcnJheSAqYXJyYXkpCiB7CiAgICAgQVNTRVJUKFthcnJh
eSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pOwogICAgIE5TTXV0YWJsZUFycmF5ICpt
dXRhYmxlQXJyYXkgPSBbYXJyYXkgbXV0YWJsZUNvcHldOwogICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgaSA8IFttdXRhYmxlQXJyYXkgY291bnRdOykgewogICAgICAgICBpZCB2YWx1ZSA9IFtt
dXRhYmxlQXJyYXkgb2JqZWN0QXRJbmRleDppXTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxlQXJyYXkg
cmVwbGFjZU9iamVjdEF0SW5kZXg6aSB3aXRoT2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpT
T05UeXBlcyh2YWx1ZSldOworICAgICAgICAgICAgW211dGFibGVBcnJheSByZXBsYWNlT2JqZWN0
QXRJbmRleDppIHdpdGhPYmplY3Q6ZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXMo
dmFsdWUpXTsKICAgICAgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkg
Y2xhc3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVjdEF0SW5kZXg6
aSB3aXRoT2JqZWN0OmFycmF5UmVtb3ZpbmdOb25KU09OVHlwZXModmFsdWUpXTsKLSAgICAgICAg
ZWxzZSBpZiAoIShbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCBbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkpIHsKKyAgICAgICAgICAgIFttdXRh
YmxlQXJyYXkgcmVwbGFjZU9iamVjdEF0SW5kZXg6aSB3aXRoT2JqZWN0OmFycmF5UmVtb3ZpbmdO
b25TdXBwb3J0ZWRUeXBlcyh2YWx1ZSldOworICAgICAgICBlbHNlIGlmICghaXNWYWx1ZVR5cGVT
dXBwb3J0ZWQodmFsdWUpKSB7CiAgICAgICAgICAgICBbbXV0YWJsZUFycmF5IHJlbW92ZU9iamVj
dEF0SW5kZXg6aV07CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDEzLDE3
ICs0MTgsMTkgQEAgc3RhdGljIE5TQXJyYXkgKmFycmF5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNB
cnJheSAqYXJyYXkpCiAgICAgcmV0dXJuIFttdXRhYmxlQXJyYXkgYXV0b3JlbGVhc2VdOwogfQog
Ci1zdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNE
aWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQorc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeVJl
bW92aW5nTm9uU3VwcG9ydGVkVHlwZXMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogeworICAg
IGlmICghZGljdGlvbmFyeSkKKyAgICAgICAgcmV0dXJuIG5pbDsKICAgICBBU1NFUlQoW2RpY3Rp
b25hcnkgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pOwogICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkgKm11dGFibGVEaWN0aW9uYXJ5ID0gW2RpY3Rpb25hcnkgbXV0YWJsZUNvcHld
OwogICAgIGZvciAoTlNTdHJpbmcgKmtleSBpbiBkaWN0aW9uYXJ5KSB7CiAgICAgICAgIGlkIHZh
bHVlID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV07CiAgICAgICAgIGlmIChbdmFsdWUg
aXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgICAgICBbbXV0YWJs
ZURpY3Rpb25hcnkgc2V0T2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1
ZSkgZm9yS2V5OmtleV07CisgICAgICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0
OmRpY3Rpb25hcnlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKHZhbHVlKSBmb3JLZXk6a2V5XTsK
ICAgICAgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkK
LSAgICAgICAgICAgIFttdXRhYmxlRGljdGlvbmFyeSBzZXRPYmplY3Q6YXJyYXlSZW1vdmluZ05v
bkpTT05UeXBlcyh2YWx1ZSkgZm9yS2V5OmtleV07Ci0gICAgICAgIGVsc2UgaWYgKCEoW3ZhbHVl
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6
W05TTnVtYmVyIGNsYXNzXV0pKQorICAgICAgICAgICAgW211dGFibGVEaWN0aW9uYXJ5IHNldE9i
amVjdDphcnJheVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXModmFsdWUpIGZvcktleTprZXldOwor
ICAgICAgICBlbHNlIGlmICghaXNWYWx1ZVR5cGVTdXBwb3J0ZWQodmFsdWUpKQogICAgICAgICAg
ICAgW211dGFibGVEaWN0aW9uYXJ5IHJlbW92ZU9iamVjdEZvcktleTprZXldOwogICAgIH0KICAg
ICByZXR1cm4gW211dGFibGVEaWN0aW9uYXJ5IGF1dG9yZWxlYXNlXTsKQEAgLTQzNCwxNiArNDQx
LDkgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVz
KE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKICAgICBpZiAoYWNjZXNzaWJpbGl0eVNob3VsZFJl
cG9zdE5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgQVNTRVJUKG5vdGlmaWNhdGlvbk5hbWUpOwog
ICAgICAgICBOU0RpY3Rpb25hcnkgKmluZm8gPSBuaWw7Ci0gICAgICAgIGlmICh1c2VySW5mbykg
ewotICAgICAgICAgICAgTlNEYXRhICp1c2VySW5mb0RhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlv
biBkYXRhV2l0aEpTT05PYmplY3Q6ZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVzKHVzZXJJ
bmZvKSBvcHRpb25zOihOU0pTT05Xcml0aW5nT3B0aW9ucykwIGVycm9yOm5pbF07Ci0gICAgICAg
ICAgICBpZiAodXNlckluZm9EYXRhKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKnVzZXJJ
bmZvU3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOnVzZXJJbmZvRGF0YSBl
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgICAgICAgICAgICAgaWYgKHVzZXJJ
bmZvU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBpbmZvID0gW05TRGljdGlvbmFyeSBkaWN0
aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9u
TmFtZSIsIHVzZXJJbmZvU3RyaW5nLCBAInVzZXJJbmZvIiwgbmlsXTsKLSAgICAgICAgICAgICAg
ICBbdXNlckluZm9TdHJpbmcgcmVsZWFzZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFpbmZvKQorICAgICAgICBpZiAoKHVzZXJJbmZvID0gZGljdGlvbmFyeVJlbW92
aW5nTm9uU3VwcG9ydGVkVHlwZXModXNlckluZm8pKSkKKyAgICAgICAgICAgIGluZm8gPSBbTlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6bm90aWZpY2F0aW9uTmFtZSwg
QCJub3RpZmljYXRpb25OYW1lIiwgdXNlckluZm8sIEAidXNlckluZm8iLCBuaWxdOworICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBpbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIG5pbF07
CiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlm
aWNhdGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0OnNlbGYgdXNlckluZm86aW5m
b107CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRnJhbWVT
ZWxlY3Rpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlv
bk1hYy5tbQppbmRleCAxYTgyZWY5Li42OWViMjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0
IEFYVGV4dFN0YXRlQ2hhbgogCiAgICAgaWYgKG1fc2VsZWN0aW9uLnN0YXJ0KCkuaXNOb3ROdWxs
KCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQtPmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQotICAg
ICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obV9zZWxlY3Rp
b24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLCBpbnRlbnQsIG1fc2VsZWN0aW9uKTsKKyAgICAg
ICAgICAgIGNhY2hlLT5wb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKG1fc2VsZWN0aW9u
LnN0YXJ0KCksIGludGVudCwgbV9zZWxlY3Rpb24pOwogICAgIH0KIAogI2lmICFQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MDFmNTQ1OC4uZmU2YWYxZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA2LTIzICBEb3VnIFJ1c3NlbGwgIDxk
X3J1c3NlbGxAYXBwbGUuY29tPgorCisgICAgICAgIEJ1ZyAxNDYxNzcgLSBBWDogQVhPYmplY3RD
YWNoZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCAK
KyAgICAgICAgd2hlbiBwb3N0aW5nIGEgc2VsZWN0aW9uIG5vdGlmaWNhdGlvbiB3aGVuIG9uIHRo
ZSBib3JkZXIgYmV0d2VlbiB0d28gYWNjZXNzaWJpbGl0eU9iamVjdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE3NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtYXBwaW5n
IFdlYkNvcmUgQWNjZXNzaWJpbGl0eSB0eXBlcyBpbnRvIEpTVmFsdWVSZWYgdHlwZXMKKyAgICAg
ICAgc28gdGhleSBjYW4gYmUgdXNlZCBpbiB0ZXN0cy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbToKKyAgICAgICAgKHdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MpOgorICAgICAgICAoLVtBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzdGFydE9ic2VydmluZ10pOgorICAgICAgICAobWFrZVZh
bHVlUmVmRm9yVmFsdWUpOgorICAgICAgICAobWFrZUFycmF5UmVmRm9yQXJyYXkpOgorICAgICAg
ICAobWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkpOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlciBfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6XSk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIubW06CisgICAgICAgICh3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNs
YXNzKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc3RhcnRP
YnNlcnZpbmddKToKKyAgICAgICAgKG1ha2VWYWx1ZVJlZkZvclZhbHVlKToKKyAgICAgICAgKG1h
a2VBcnJheVJlZkZvckFycmF5KToKKyAgICAgICAgKG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5
KToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgX25vdGlmaWNh
dGlvblJlY2VpdmVkOl0pOgorCiAyMDE1LTA2LTIxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNzI5NzUpOiBuYXZpZ2F0b3IubGFu
Z3VhZ2UgdW5hYmxlIHRvIHRlbGwgcmVnaW9uIGZvciBUcmFkaXRpb25hbCBDaGluZXNlIHVzZXJz
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KaW5kZXggMWJlODA2Ny4uOTVlZjgwMCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5tbQpAQCAtOTMsMTQgKzkzLDIxIEBACiAgICAgSlNWYWx1ZVByb3RlY3Qo
W21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
KTsKIH0KIAorc3RhdGljIENsYXNzIHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3Mo
KQoreworICAgIHN0YXRpYyBDbGFzcyBjbHMgPSBuaWw7CisgICAgaWYgKCFjbHMpCisgICAgICAg
IGNscyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIi
KTsKKyAgICBBU1NFUlQoY2xzKTsKKyAgICByZXR1cm4gY2xzOworfQorCiAtICh2b2lkKXN0YXJ0
T2JzZXJ2aW5nCiB7CiAgICAgLy8gT25jZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlmaWNhdGlv
bnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KICAgICAvLyBUaGlz
IGlzIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRo
aXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0ZWFkCiAgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIgY2FuIGlnbm9yZSBldmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0LgotICAg
IGlkIHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmlu
ZyhAIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIik7Ci0gICAgQVNTRVJUKHdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MpOwotICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckNsYXNzIGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOllF
U107CisgICAgW3dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKSBhY2Nlc3NpYmls
aXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOwogICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmpl
Y3Q6bmlsXTsKIH0KIApAQCAtMTA5LDYgKzExNiw1MCBAQAogICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CiB9CiAKK3N0YXRpYyBK
U1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZvclZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpZCB2
YWx1ZSkKK3sKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBhZG9wdChbdmFsdWUg
Y3JlYXRlSlNTdHJpbmdSZWZdKS5nZXQoKSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU051bWJlciBjbGFzc11dKSB7CisgICAgICAgIGlmICghc3RyY21wKFt2YWx1ZSBvYmpDVHlw
ZV0sIEBlbmNvZGUoQk9PTCkpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCBbdmFsdWUgYm9vbFZhbHVlXSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZU51bWJlcihjb250ZXh0LCBbdmFsdWUgZG91YmxlVmFsdWVdKTsKKyAgICB9CisgICAgaWYgKFt2
YWx1ZSBpc0tpbmRPZkNsYXNzOndlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKV0p
CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KGNvbnRleHQsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQodmFsdWUpKTsKKyAg
ICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAg
ICByZXR1cm4gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdmFsdWUpOworICAg
IGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICByZXR1
cm4gbWFrZUFycmF5UmVmRm9yQXJyYXkoY29udGV4dCwgdmFsdWUpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRl
eHRSZWYgY29udGV4dCwgTlNBcnJheSAqYXJyYXkpCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9
IGFycmF5LmNvdW50OworICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW2NvdW50XTsKKworICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGFyZ3VtZW50c1tp
XSA9IG1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIFthcnJheSBvYmplY3RBdEluZGV4Omld
KTsKKworICAgIHJldHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwgYXJndW1l
bnRzLCBudWxscHRyKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFrZU9iamVjdFJlZkZvckRp
Y3Rpb25hcnkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkK
K3sKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0
ciwgbnVsbHB0cik7CisKKyAgICBmb3IgKE5TU3RyaW5nICprZXkgaW4gZGljdGlvbmFyeSkgewor
CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gYWRvcHQoW2tleSBjcmVhdGVKU1N0cmluZ1Jl
Zl0pOworCisgICAgICAgIGlmIChKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUgPSBtYWtlVmFsdWVS
ZWZGb3JWYWx1ZShjb250ZXh0LCBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XSkpCisgICAg
ICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1l
LmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIp
OworICAgIH0KKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKIC0gKHZvaWQpX25vdGlmaWNhdGlv
blJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewogICAgIE5TU3RyaW5n
ICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktl
eTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKQEAgLTExNywyNyArMTY4LDIyIEBACiAgICAgaWYgKG1f
cGxhdGZvcm1FbGVtZW50ICYmIG1fcGxhdGZvcm1FbGVtZW50ICE9IFtub3RpZmljYXRpb24gb2Jq
ZWN0XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNTdHJpbmcgKnVzZXJJbmZvSlNPTlZhbHVl
ID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAInVzZXJJbmZvIl07Cisg
ICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmpl
Y3RGb3JLZXk6QCJ1c2VySW5mbyJdOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpz
Tm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0p
OwotICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VT
dHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwganNOb3RpZmljYXRpb24uZ2V0KCkpOwot
ICAgIEpTVmFsdWVSZWYgdXNlckluZm9KU09OVmFsdWVBcmd1bWVudCA9IG5pbDsKLSAgICBpZiAo
W3VzZXJJbmZvSlNPTlZhbHVlIGxlbmd0aF0pIHsKLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGpzVXNlckluZm9KU09OVmFsdWUoQWRvcHQsIFt1c2VySW5mb0pTT05WYWx1ZSBjcmVh
dGVKU1N0cmluZ1JlZl0pOwotICAgICAgICB1c2VySW5mb0pTT05WYWx1ZUFyZ3VtZW50ID0gSlNW
YWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBqc1VzZXJJ
bmZvSlNPTlZhbHVlLmdldCgpKTsKLSAgICB9CisgICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25O
YW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRd
LCBhZG9wdChbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0pLmdldCgpKTsKKyAg
ICBKU1ZhbHVlUmVmIHVzZXJJbmZvQXJndW1lbnQgPSBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFy
eShbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCB1c2VySW5mbyk7CiAgICAgaWYgKG1fcGxhdGZv
cm1FbGVtZW50KSB7CiAgICAgICAgIC8vIExpc3RlbmVyIGZvciBvbmUgZWxlbWVudCBnZXRzIHRo
ZSBub3RpZmljYXRpb24gbmFtZSBhbmQgdXNlckluZm8uCiAgICAgICAgIEpTVmFsdWVSZWYgYXJn
dW1lbnRzWzJdOwogICAgICAgICBhcmd1bWVudHNbMF0gPSBub3RpZmljYXRpb25OYW1lQXJndW1l
bnQ7Ci0gICAgICAgIGFyZ3VtZW50c1sxXSA9IHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQ7Cisg
ICAgICAgIGFyZ3VtZW50c1sxXSA9IHVzZXJJbmZvQXJndW1lbnQ7CiAgICAgICAgIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25G
dW5jdGlvbkNhbGxiYWNrLCAwLCAyLCBhcmd1bWVudHMsIDApOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVyIGdldHMgdGhlIGVsZW1lbnQsIG5vdGlmaWNhdGlvbiBu
YW1lIGFuZCB1c2VySW5mby4KICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbM107CiAgICAg
ICAgIGFyZ3VtZW50c1swXSA9IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1ha2VKU0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudChbbm90aWZpY2F0aW9uIG9iamVjdF0pKTsKICAgICAgICAgYXJndW1lbnRzWzFdID0g
bm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OwotICAgICAgICBhcmd1bWVudHNbMl0gPSB1c2VySW5m
b0pTT05WYWx1ZUFyZ3VtZW50OworICAgICAgICBhcmd1bWVudHNbMl0gPSB1c2VySW5mb0FyZ3Vt
ZW50OwogICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29u
dGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMiwgYXJndW1lbnRzLCAw
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLm1tCmluZGV4IGYxMzAzNjYuLmFiOGViZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCkBAIC0xMDEsMTQgKzEwMSwy
MSBAQAogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjayk7CiB9CiAKK3N0YXRpYyBDbGFzcyB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgY2xzID0gbmlsOworICAgIGlmICghY2xzKQor
ICAgICAgICBjbHMgPSBOU0NsYXNzRnJvbVN0cmluZyhAIldlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIik7CisgICAgQVNTRVJUKGNscyk7CisgICAgcmV0dXJuIGNsczsKK30KKwogLSAodm9p
ZClzdGFydE9ic2VydmluZwogewogICAgIC8vIE9uY2Ugd2Ugc3RhcnQgcmVxdWVzdGluZyBub3Rp
ZmljYXRpb25zLCBpdCdzIG9uIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHByb2dyYW0uCiAgICAg
Ly8gVGhpcyBpcyB0byBhdm9pZCBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGVzdHMgdHVy
bmluZyB0aGlzIGZsYWcgb24gYW5kIG9mZi4gSW5zdGVhZAogICAgIC8vIEFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyIGNhbiBpZ25vcmUgZXZlbnRzIGl0IGRvZXNuJ3QgY2FyZSBhYm91
dC4KLSAgICBpZCB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0gTlNDbGFzc0Zy
b21TdHJpbmcoQCJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciIpOwotICAgIEFTU0VSVCh3
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKTsKLSAgICBbd2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJDbGFzcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0
aW9uczpZRVNdOworICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkgYWNj
ZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKF9ub3RpZmljYXRpb25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNhdGlv
biIgb2JqZWN0Om5pbF07CiB9CiAKQEAgLTExNyw2ICsxMjQsNTAgQEAKICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogfQogCitz
dGF0aWMgSlNWYWx1ZVJlZiBtYWtlVmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4
dCwgaWQgdmFsdWUpCit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgYWRvcHQo
W3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIGlmIChbdmFsdWUgaXNLaW5k
T2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBpZiAoIXN0cmNtcChbdmFsdWUg
b2JqQ1R5cGVdLCBAZW5jb2RlKEJPT0wpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZUJvb2xlYW4oY29udGV4dCwgW3ZhbHVlIGJvb2xWYWx1ZV0pOworICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgW3ZhbHVlIGRvdWJsZVZhbHVlXSk7CisgICAgfQorICAg
IGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNs
YXNzKCldKQorICAgICAgICByZXR1cm4gdG9KUyhjb250ZXh0LCBXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4odmFsdWUpKS5n
ZXQoKSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3Nd
XSkKKyAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNvbnRleHQsIHZh
bHVlKTsKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VBcnJheVJlZkZvckFycmF5KGNvbnRleHQsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQoreworICAgIE5TVUludGVn
ZXIgY291bnQgPSBhcnJheS5jb3VudDsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tjb3VudF07
CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBh
cmd1bWVudHNbaV0gPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2JqZWN0
QXRJbmRleDppXSk7CisKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291
bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VPYmpl
Y3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRp
Y3Rpb25hcnkpCit7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRl
eHQsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIGRpY3Rp
b25hcnkpIHsKKworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJvcGVydHlOYW1l
ID0gYWRvcHQoW2tleSBjcmVhdGVKU1N0cmluZ1JlZl0pOworCisgICAgICAgIGlmIChKU1ZhbHVl
UmVmIHByb3BlcnR5VmFsdWUgPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBbZGljdGlv
bmFyeSBvYmplY3RGb3JLZXk6a2V5XSkpCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5
KGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIH0KKworICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKIC0gKHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgogewogICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0gW1tub3Rp
ZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKQEAg
LTEyNSwzMSArMTc2LDI2IEBACiAgICAgaWYgKG1fcGxhdGZvcm1FbGVtZW50ICYmIG1fcGxhdGZv
cm1FbGVtZW50ICE9IFtub3RpZmljYXRpb24gb2JqZWN0XSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTlNTdHJpbmcgKnVzZXJJbmZvSlNPTlZhbHVlID0gW1tub3RpZmljYXRpb24gdXNlckluZm9d
IG9iamVjdEZvcktleTpAInVzZXJJbmZvIl07CisgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9
IFtbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJ1c2VySW5mbyJdOwogCiAg
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1h
aW5GcmFtZSk7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24o
QWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1
ZVJlZiBub3RpZmljYXRpb25OYW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0gICAgSlNWYWx1ZVJlZiB1c2VySW5mb0pTT05WYWx1
ZUFyZ3VtZW50ID0gbmlsOwotICAgIGlmIChbdXNlckluZm9KU09OVmFsdWUgbGVuZ3RoXSkgewot
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNVc2VySW5mb0pTT05WYWx1ZShBZG9w
dCwgW3VzZXJJbmZvSlNPTlZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgICAgIHVzZXJJ
bmZvSlNPTlZhbHVlQXJndW1lbnQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQs
IGpzVXNlckluZm9KU09OVmFsdWUuZ2V0KCkpOwotICAgIH0KKyAgICBKU1ZhbHVlUmVmIG5vdGlm
aWNhdGlvbk5hbWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGFkb3B0KFtu
b3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIEpTVmFsdWVS
ZWYgdXNlckluZm9Bcmd1bWVudCA9IG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNvbnRleHQs
IHVzZXJJbmZvKTsKICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpIHsKICAgICAgICAgLy8gTGlz
dGVuZXIgZm9yIG9uZSBlbGVtZW50IGdldHMgdGhlIG5vdGlmaWNhdGlvbiBuYW1lIGFuZCB1c2Vy
SW5mby4KICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl07CiAgICAgICAgIGFyZ3VtZW50
c1swXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRzWzFdID0g
dXNlckluZm9KU09OVmFsdWVBcmd1bWVudDsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gdXNlcklu
Zm9Bcmd1bWVudDsKICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25z
dF9jYXN0PEpTT2JqZWN0UmVmPihtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spLCAwLCAy
LCBhcmd1bWVudHMsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3Rl
bmVyIGdldHMgdGhlIGVsZW1lbnQsIG5vdGlmaWNhdGlvbiBuYW1lIGFuZCB1c2VySW5mby4KICAg
ICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbM107Ci0gICAgICAgIGFyZ3VtZW50c1swXSA9IHRv
SlMoY29udGV4dCwgV1RGOjpnZXRQdHIoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVh
dGUoW25vdGlmaWNhdGlvbiBvYmplY3RdKSkpOworICAgICAgICBhcmd1bWVudHNbMF0gPSB0b0pT
KGNvbnRleHQsIFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKFtub3RpZmljYXRp
b24gb2JqZWN0XSkuZ2V0KCkpOwogICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRpb25O
YW1lQXJndW1lbnQ7Ci0gICAgICAgIGFyZ3VtZW50c1syXSA9IHVzZXJJbmZvSlNPTlZhbHVlQXJn
dW1lbnQ7Ci0gICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY29uc3RfY2Fz
dDxKU09iamVjdFJlZj4obV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKSwgMCwgMiwgYXJn
dW1lbnRzLCAwKTsKKyAgICAgICAgYXJndW1lbnRzWzJdID0gdXNlckluZm9Bcmd1bWVudDsKKyAg
ICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0
UmVmPihtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spLCAwLCAzLCBhcmd1bWVudHMsIDAp
OwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255452</attachid>
            <date>2015-06-23 17:18:16 -0700</date>
            <delta_ts>2015-06-24 12:10:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>146177.patch</filename>
            <type>text/plain</type>
            <size>32017</size>
            <attacher name="Doug Russell">d_russell</attacher>
            
              <data encoding="base64">Y29tbWl0IDJjOTg2NTIxZDMyYTI3ZWRhNDFkYjY4ODg4YzI0ODcwNzU1NjI3ZWEKQXV0aG9yOiBE
b3VnIFJ1c3NlbGwgPGRfcnVzc2VsbEBhcHBsZS5jb20+CkRhdGU6ICAgTW9uIEp1biAyMiAwOTo1
MzoxMCAyMDE1IC0wNzAwCgogICAgQnVnIDE0NjE3NwogICAgCiAgICBBWDogQVhPYmplY3RDYWNo
ZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCB3aGVu
IHBvc3RpbmcgYSBzZWxlY3Rpb24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3
ZWVuIHR3byBhY2Nlc3NpYmlsaXR5T2JqZWN0cwogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NjE3NwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NjBkNGI2Li5hODU3MGQ3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0
cnkgdG8gdXNlIGFuIHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0CisgICAgICAgIHdoZW4g
cG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdl
ZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBBZGQgdGVzdCBmb3IgZm9yd2Fy
ZCBhbmQgYmFja3dhcmQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGFuZCBjb3JyZXNwb25kaW5nIG5v
dGlmaWNhdGlvbnMKKyAgICAgICAgY2hhbmdlIGVsZW1lbnQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L3NlbGVjdGlvbi1lbGVtZW50LXRhYmJpbmctdG8tbGluay1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1lbGVtZW50LXRh
YmJpbmctdG8tbGluay5odG1sOiBBZGRlZC4KKwogMjAxNS0wNi0yMiAgRGFuaWVsIEJhdGVzICA8
ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJIEF1dG9tYXRpb24gY2Fubm90IGZp
bmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25zCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVudC10YWJiaW5n
LXRvLWxpbmstZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYwOWI1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1l
bnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitvbmUgdHdv
CitUaGlzIHRlc3RzIHRoYXQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGluY2x1ZGVzIGEgcmVsZXZh
bnQgYWNjZXNzaWJpbGl0eU9iamVjdCBpbiB0aGUgdXNlckluZm8gd2hlbiBvbiB0aGUgYm91bmRh
cnkgYmV0d2VlbiBhbiBpZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgYW5kIGFuIHVuaWdub3Jl
ZCBhY2Nlc3NpYmlsaXR5T2JqZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBhZGRlZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hh
bmdlRWxlbWVudE9uZSwgIkFYUm9sZTogQVhMaW5rIikuaXNFcXVhbChsaW5rVHdvKSBpcyB0cnVl
CitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hhbmdlRWxlbWVudFR3bywgIkFYUm9sZTogQVhMaW5r
IikuaXNFcXVhbChsaW5rT25lKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVu
dC10YWJiaW5nLXRvLWxpbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNGViNTBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwKQEAgLTAs
MCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2Pgor
PGEgaHJlZj0iIiBpZD0ib25lIj5vbmU8L2E+Cis8YSBocmVmPSIiIGlkPSJ0d28iPnR3bzwvYT4K
KzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGRpdiBpZD0ibm90aWZpY2F0aW9ucyI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgYmV0d2VlbiBsaW5rcyBpbmNsdWRl
cyBhIHJlbGV2YW50IGFjY2Vzc2liaWxpdHlPYmplY3QgaW4gdGhlIHVzZXJJbmZvIHdoZW4gb24g
dGhlIGJvdW5kYXJ5IGJldHdlZW4gYW4gaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IGFuZCBh
biB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdC4iKTsKKworICAgIHZhciBheFRleHRDaGFu
Z2VFbGVtZW50ID0gMDsKKyAgICB2YXIgd2ViQXJlYSA9IDA7CisgICAgdmFyIGNoYW5nZUVsZW1l
bnRPbmUgPSAwOworICAgIHZhciBjaGFuZ2VFbGVtZW50VHdvID0gMDsKKyAgICB2YXIgbGlua1R3
byA9IDA7CisgICAgdmFyIGxpbmtPbmUgPSAwOworICAgIHZhciBjb3VudCA9IDA7CisKKyAgICBm
dW5jdGlvbiBhbmNlc3RvcldpdGhSb2xlKGF4RWxlbWVudCwgcm9sZSkgeworICAgICAgICB2YXIg
YW5jZXN0b3IgPSBheEVsZW1lbnQ7CisgICAgICAgIHdoaWxlIChhbmNlc3RvcikgeworICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLnJvbGUgPT0gcm9sZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50RWxlbWVudCgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhbmNlc3RvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3Rp
ZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24sIHVzZXJJbmZvKSB7CisgICAgICAgIGlmIChu
b3RpZmljYXRpb24gPT0gIkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCIpIHsKKyAgICAgICAgICAgIGNv
dW50Kys7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGNo
YW5nZUVsZW1lbnRPbmUgPSB1c2VySW5mb1siQVhUZXh0Q2hhbmdlRWxlbWVudCJdOworICAgICAg
ICAgICAgICAgIGxpbmtUd28gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInR3byIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJhbmNlc3RvcldpdGhS
b2xlKGNoYW5nZUVsZW1lbnRPbmUsIFwiQVhSb2xlOiBBWExpbmtcIikuaXNFcXVhbChsaW5rVHdv
KSIsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VFbGVtZW50VHdvID0gdXNlckluZm9bIkFYVGV4dENoYW5nZUVsZW1l
bnQiXTsKKyAgICAgICAgICAgICAgICBsaW5rT25lID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJvbmUiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgi
YW5jZXN0b3JXaXRoUm9sZShjaGFuZ2VFbGVtZW50VHdvLCBcIkFYUm9sZTogQVhMaW5rXCIpLmlz
RXF1YWwobGlua09uZSkiLCAidHJ1ZSIpOworICAgICAgICAgICAgICAgIHdlYkFyZWEucmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRU
YWJUb0xpbmtzUHJlZmVyZW5jZUtleSIsIDEpOworCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgd2ViQXJl
YSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsK
KyAgICAgICAgd2ViQXJlYS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYQ2FyZXRCcm93c2luZ0Vu
YWJsZWQiLCB0cnVlKQorCisgICAgICAgIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b25lIik7CisgICAgICAgIGxpbmsuZm9jdXMoKTsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmlj
YXRpb24gPSB3ZWJBcmVhLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKwor
ICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJcdCIpOworICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJcdCIsIFsic2hpZnRLZXkiXSk7CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Jl
dGFpblB0ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCmluZGV4
IGYyM2UzMmYuLjI2MmM0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNSZXRhaW5QdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKQEAgLTc1LDYgKzc1LDE2IEBAIHByaXZhdGU6CiAgICAgVCBtX3B0cjsKIH07CiAKK2lubGlu
ZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYgbykKK3sKKyAgICBy
ZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBvKTsKK30KKworaW5saW5lIEpT
UmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4gYWRvcHQoSlNHbG9iYWxDb250ZXh0UmVmIG8p
Cit7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4oQWRvcHQsIG8p
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpTUmV0
YWluUHRyKGNvbnN0IEpTUmV0YWluUHRyJiBvKQogICAgIDogbV9wdHIoby5tX3B0cikKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVkYzBkNWMuLmEzNDA1MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA2LTIzICBEb3VnIFJ1c3NlbGwgIDxk
X3J1c3NlbGxAYXBwbGUuY29tPgorCisgICAgICAgIEJ1ZyAxNDYxNzcgLSBBWDogQVhPYmplY3RD
YWNoZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCAK
KyAgICAgICAgd2hlbiBwb3N0aW5nIGEgc2VsZWN0aW9uIG5vdGlmaWNhdGlvbiB3aGVuIG9uIHRo
ZSBib3JkZXIgYmV0d2VlbiB0d28gYWNjZXNzaWJpbGl0eU9iamVjdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE3NworCisgICAgICAgIEFkZCBh
biBhZG9wdCgpIGZ1bmN0aW9uIHRvIHNpbXBsaWZ5IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB7
IEFkb3B0LCBzdHJpbmcgfSB0byBhZG9wdChzdHJpbmcpLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTUmV0YWluUHRyLmg6CisgICAgICAg
IChhZG9wdCk6CisKIDIwMTUtMDYtMjAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgW0VTNl0gRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IG5lZWQgdG8g
YWNjZXB0IGl0ZXJhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDcxNmFlNzguLjkzMDZiMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMyBAQAorMjAxNS0wNi0yMyAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxs
QGFwcGxlLmNvbT4KKworICAgICAgICBCdWcgMTQ2MTc3IC0gQVg6IEFYT2JqZWN0Q2FjaGUgc2hv
dWxkIHRyeSB0byB1c2UgYW4gdW5pZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgCisgICAgICAg
IHdoZW4gcG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVy
IGJldHdlZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcG9zaXRpb24gdG8gYmUg
cGFzc2VkIGZvciBzZWxlY3Rpb24gY2hhbmdlcyB0byBhbGxvdyBjaGVja2luZy4KKyAgICAgICAg
Zm9yIGJvdW5kYXJpZXMgaW4gdGhlIGNhc2Ugb2YgaWdub3JlZCBlbGVtZW50cy4KKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBmb3IgdW5pZ25vcmVkIHNpYmxpbmdzIG9mIEFjY2Vz
c2liaWxpdHlPYmplY3RzLgorICAgICAgICBJbmNsdWRlIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3Jh
cHBlcnMgaW4gbm90aWZpY2F0aW9ucyBmb3IgdGVzdHMuCisKKyAgICAgICAgVGVzdDogcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0
bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTaWJsaW5nVW5pZ25vcmVkKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW06Cisg
ICAgICAgIChpc1ZhbHVlVHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChhcnJheVJlbW92aW5nTm9u
U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYWNj
ZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjp1c2VySW5mbzpdKToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKwogMjAxNS0w
Ni0yMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJ
IEF1dG9tYXRpb24gY2Fubm90IGZpbmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25z
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRl
eCA0Nzc1MGRkLi4xNGE0Yzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTEwMDUsMTcgKzEwMDUsNTggQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IEFY
VGV4dFN0YXQKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVzKCk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
ID0gZ2V0T3JDcmVhdGUobm9kZSk7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihvYmplY3QsIGludGVudCwgc2VsZWN0aW9uKTsKKyNlbHNlCisgICAgcG9zdE5vdGlmaWNhdGlv
bihub2RlLT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQs
IFRhcmdldE9ic2VydmFibGVQYXJlbnQpOworICAgIFVOVVNFRF9QQVJBTShpbnRlbnQpOworICAg
IFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOworI2VuZGlmCit9CiAKK3ZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24sIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3BD
YWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZShub2RlKTsKKyAg
ICBpZiAob2JqZWN0ICYmIG9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7CisgICAg
ICAgIGlmIChwb3NpdGlvbi5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpIHsKKyAgICAg
ICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0ICpuZXh0U2libGluZyA9IG9iamVjdC0+bmV4
dFNpYmxpbmdVbmlnbm9yZWQoMSkpCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV4dFNpYmxp
bmc7CisgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24uYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUoKSkgeworICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QgKnByZXZpb3Vz
U2libGluZyA9IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKDEpKQorICAgICAgICAg
ICAgICAgIG9iamVjdCA9IHByZXZpb3VzU2libGluZzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0LCBpbnRlbnQsIHNlbGVjdGlv
bik7CisjZWxzZQorICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24obm9kZSwgaW50
ZW50LCBzZWxlY3Rpb24pOworI2VuZGlmCit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGNv
bnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbikKK3sKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRl
cygpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBp
ZiAoaXNQYXNzd29yZEZpZWxkT3JDb250YWluZWRCeVBhc3N3b3JkRmllbGQob2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2Jq
ZWN0KCk7CisKKyAgICAgICAgaWYgKGF1dG8gb2JzZXJ2YWJsZU9iamVjdCA9IG9iamVjdC0+b2Jz
ZXJ2YWJsZU9iamVjdCgpKQorICAgICAgICAgICAgb2JqZWN0ID0gb2JzZXJ2YWJsZU9iamVjdDsK
ICAgICB9CiAKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2Jq
ZWN0LCAoaW50ZW50LnR5cGUgPT0gQVhUZXh0U3RhdGVDaGFuZ2VUeXBlVW5rbm93biB8fCBtX2lz
U3luY2hyb25pemluZ1NlbGVjdGlvbikgPyBtX3RleHRTZWxlY3Rpb25JbnRlbnQgOiBpbnRlbnQs
IHNlbGVjdGlvbik7CiAjZWxzZQotICAgIHBvc3ROb3RpZmljYXRpb24obm9kZS0+cmVuZGVyZXIo
KSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBUYXJnZXRPYnNlcnZhYmxl
UGFyZW50KTsKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0oaW50
ZW50KTsKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCA2N2UwN2NmLi5mMmFhYmJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAt
MjA1LDYgKzIwNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3Rp
ZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24o
Tm9kZSosIEFYVGV4dEVkaXRUeXBlIGRlbGV0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVk
VGV4dCwgQVhUZXh0RWRpdFR5cGUgaW5zZXJ0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBpbnNlcnRl
ZFRleHQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKICAgICBlbnVtIEFYTG9hZGluZ0V2ZW50IHsK
ICAgICAgICAgQVhMb2FkaW5nU3RhcnRlZCwKQEAgLTI1OSw2ICsyNjAsOCBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCgpOwogCisgICAgdm9pZCBwb3N0
VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25zdCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKwogICAg
IGJvb2wgZW5xdWV1ZVBhc3N3b3JkVmFsdWVDaGFuZ2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0
eU9iamVjdCopOwogICAgIHZvaWQgcGFzc3dvcmROb3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAppbmRleCAzNGU2M2Q2Li5lZDgyNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTQ1Nyw2ICs0
NTcsMzIgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6cGFyZW50
T2JqZWN0VW5pZ25vcmVkKCkgY29uc3QKICAgICByZXR1cm4gcGFyZW50OwogfQogCitBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1NpYmxpbmdVbmlnbm9y
ZWQoaW50IGxpbWl0KSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3Vz
OworICAgIGlmIChsaW1pdCA8IDApCisgICAgICAgIGxpbWl0ID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKKyAgICBmb3IgKHByZXZpb3VzID0gdGhpcy0+cHJldmlvdXNTaWJsaW5n
KCk7IHByZXZpb3VzICYmIHByZXZpb3VzLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7IHByZXZp
b3VzID0gcHJldmlvdXMtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgIGxpbWl0LS07Cisg
ICAgICAgIGlmIChsaW1pdCA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBwcmV2aW91czsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9i
amVjdDo6bmV4dFNpYmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25zdAoreworICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIG5leHQ7CisgICAgaWYgKGxpbWl0IDwgMCkKKyAgICAgICAgbGltaXQg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIGZvciAobmV4dCA9IHRoaXMt
Pm5leHRTaWJsaW5nKCk7IG5leHQgJiYgbmV4dC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOyBu
ZXh0ID0gbmV4dC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBsaW1pdC0tOworICAgICAgICBp
ZiAobGltaXQgPD0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbmV4
dDsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6Zmlyc3RB
Y2Nlc3NpYmxlT2JqZWN0RnJvbU5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5v
ZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCmluZGV4IDZjYmQxYTAuLmRjNGE5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC02NDUsNiArNjQ1LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbGFzdENoaWxkKCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCog
cHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eU9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBudWxscHRy
OyB9CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXh0U2libGluZ1VuaWdub3Jl
ZChpbnQgbGltaXQgPSAtMSkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwcmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0ID0gLTEpIGNvbnN0OwogICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0VW5pZ25vcmVkKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3RJZkV4aXN0
cygpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5tbQppbmRleCBlOGIyZWYwLi40YTNhZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCkBAIC0zOTQsMTcgKzM5NCwyMiBAQCBzdGF0aWMgQk9P
TCBhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczsKICAgICAgICAgW3NlbGYg
YWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25OYW1lIHVzZXJJbmZv
Om5pbF07CiB9CiAKLXN0YXRpYyBOU0FycmF5ICphcnJheVJlbW92aW5nTm9uSlNPTlR5cGVzKE5T
QXJyYXkgKmFycmF5KQorc3RhdGljIGJvb2wgaXNWYWx1ZVR5cGVTdXBwb3J0ZWQoaWQgdmFsdWUp
Cit7CisgICAgcmV0dXJuIFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dIHx8
IFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dIHx8IFt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgY2xhc3NdXTsKK30KKwor
c3RhdGljIE5TQXJyYXkgKmFycmF5UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyhOU0FycmF5ICph
cnJheSkKIHsKICAgICBBU1NFUlQoW2FycmF5IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3Nd
XSk7CiAgICAgTlNNdXRhYmxlQXJyYXkgKm11dGFibGVBcnJheSA9IFthcnJheSBtdXRhYmxlQ29w
eV07CiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgW211dGFibGVBcnJheSBjb3VudF07
KSB7CiAgICAgICAgIGlkIHZhbHVlID0gW211dGFibGVBcnJheSBvYmplY3RBdEluZGV4OmldOwog
ICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQot
ICAgICAgICAgICAgW211dGFibGVBcnJheSByZXBsYWNlT2JqZWN0QXRJbmRleDppIHdpdGhPYmpl
Y3Q6ZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVzKHZhbHVlKV07CisgICAgICAgICAgICBb
bXV0YWJsZUFycmF5IHJlcGxhY2VPYmplY3RBdEluZGV4Omkgd2l0aE9iamVjdDpkaWN0aW9uYXJ5
UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyh2YWx1ZSldOwogICAgICAgICBlbHNlIGlmIChbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICAgICAgW211dGFibGVB
cnJheSByZXBsYWNlT2JqZWN0QXRJbmRleDppIHdpdGhPYmplY3Q6YXJyYXlSZW1vdmluZ05vbkpT
T05UeXBlcyh2YWx1ZSldOwotICAgICAgICBlbHNlIGlmICghKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU1N0cmluZyBjbGFzc11dIHx8IFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFz
c11dKSkgeworICAgICAgICAgICAgW211dGFibGVBcnJheSByZXBsYWNlT2JqZWN0QXRJbmRleDpp
IHdpdGhPYmplY3Q6YXJyYXlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKHZhbHVlKV07CisgICAg
ICAgIGVsc2UgaWYgKCFpc1ZhbHVlVHlwZVN1cHBvcnRlZCh2YWx1ZSkpIHsKICAgICAgICAgICAg
IFttdXRhYmxlQXJyYXkgcmVtb3ZlT2JqZWN0QXRJbmRleDppXTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CkBAIC00MTMsMTcgKzQxOCwxOSBAQCBzdGF0aWMgTlNBcnJheSAqYXJy
YXlSZW1vdmluZ05vbkpTT05UeXBlcyhOU0FycmF5ICphcnJheSkKICAgICByZXR1cm4gW211dGFi
bGVBcnJheSBhdXRvcmVsZWFzZV07CiB9CiAKLXN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25h
cnlSZW1vdmluZ05vbkpTT05UeXBlcyhOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCitzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyhOU0RpY3Rp
b25hcnkgKmRpY3Rpb25hcnkpCiB7CisgICAgaWYgKCFkaWN0aW9uYXJ5KQorICAgICAgICByZXR1
cm4gbmlsOwogICAgIEFTU0VSVChbZGljdGlvbmFyeSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25h
cnkgY2xhc3NdXSk7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqbXV0YWJsZURpY3Rpb25hcnkg
PSBbZGljdGlvbmFyeSBtdXRhYmxlQ29weV07CiAgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIGRp
Y3Rpb25hcnkpIHsKICAgICAgICAgaWQgdmFsdWUgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6
a2V5XTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xh
c3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxlRGljdGlvbmFyeSBzZXRPYmplY3Q6ZGljdGlvbmFy
eVJlbW92aW5nTm9uSlNPTlR5cGVzKHZhbHVlKSBmb3JLZXk6a2V5XTsKKyAgICAgICAgICAgIFtt
dXRhYmxlRGljdGlvbmFyeSBzZXRPYmplY3Q6ZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVk
VHlwZXModmFsdWUpIGZvcktleTprZXldOwogICAgICAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5k
T2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICAgICAgW211dGFibGVEaWN0aW9uYXJ5
IHNldE9iamVjdDphcnJheVJlbW92aW5nTm9uSlNPTlR5cGVzKHZhbHVlKSBmb3JLZXk6a2V5XTsK
LSAgICAgICAgZWxzZSBpZiAoIShbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkpCisgICAgICAgICAg
ICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0OmFycmF5UmVtb3ZpbmdOb25TdXBwb3J0ZWRU
eXBlcyh2YWx1ZSkgZm9yS2V5OmtleV07CisgICAgICAgIGVsc2UgaWYgKCFpc1ZhbHVlVHlwZVN1
cHBvcnRlZCh2YWx1ZSkpCiAgICAgICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OmtleV07CiAgICAgfQogICAgIHJldHVybiBbbXV0YWJsZURpY3Rpb25hcnkgYXV0
b3JlbGVhc2VdOwpAQCAtNDM0LDE2ICs0NDEsOSBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0
aW9uYXJ5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogICAg
IGlmIChhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucykgewogICAgICAgICBB
U1NFUlQobm90aWZpY2F0aW9uTmFtZSk7CiAgICAgICAgIE5TRGljdGlvbmFyeSAqaW5mbyA9IG5p
bDsKLSAgICAgICAgaWYgKHVzZXJJbmZvKSB7Ci0gICAgICAgICAgICBOU0RhdGEgKnVzZXJJbmZv
RGF0YSA9IFtOU0pTT05TZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpkaWN0aW9uYXJ5
UmVtb3ZpbmdOb25KU09OVHlwZXModXNlckluZm8pIG9wdGlvbnM6KE5TSlNPTldyaXRpbmdPcHRp
b25zKTAgZXJyb3I6bmlsXTsKLSAgICAgICAgICAgIGlmICh1c2VySW5mb0RhdGEpIHsKLSAgICAg
ICAgICAgICAgICBOU1N0cmluZyAqdXNlckluZm9TdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aERhdGE6dXNlckluZm9EYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsK
LSAgICAgICAgICAgICAgICBpZiAodXNlckluZm9TdHJpbmcpCi0gICAgICAgICAgICAgICAgICAg
IGluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6bm90aWZp
Y2F0aW9uTmFtZSwgQCJub3RpZmljYXRpb25OYW1lIiwgdXNlckluZm9TdHJpbmcsIEAidXNlcklu
Zm8iLCBuaWxdOwotICAgICAgICAgICAgICAgIFt1c2VySW5mb1N0cmluZyByZWxlYXNlXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWluZm8pCisgICAgICAgIGlmICgo
dXNlckluZm8gPSBkaWN0aW9uYXJ5UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyh1c2VySW5mbykp
KQorICAgICAgICAgICAgaW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czpub3RpZmljYXRpb25OYW1lLCBAIm5vdGlmaWNhdGlvbk5hbWUiLCB1c2VySW5mbywg
QCJ1c2VySW5mbyIsIG5pbF07CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIGluZm8gPSBbTlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6bm90aWZpY2F0aW9uTmFtZSwg
QCJub3RpZmljYXRpb25OYW1lIiwgbmlsXTsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpAIkFYRFJUTm90aWZpY2F0aW9u
IiBvYmplY3Q6c2VsZiB1c2VySW5mbzppbmZvXTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmluZGV4IDFhODJlZjkuLjY5ZWIyOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1t
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxp
dHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAKICAgICBpZiAobV9z
ZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51
bGwoKSkgewogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudC0+ZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCksIGlu
dGVudCwgbV9zZWxlY3Rpb24pOworICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3RhdGVDaGFu
Z2VOb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVjdGlvbik7
CiAgICAgfQogCiAjaWYgIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMWY1NDU4Li5mZTZhZjFkIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIw
MTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBsZS5jb20+CisKKyAgICAgICAg
QnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0cnkgdG8gdXNlIGFuIHVuaWdu
b3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IAorICAgICAgICB3aGVuIHBvc3RpbmcgYSBzZWxlY3Rp
b24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3ZWVuIHR3byBhY2Nlc3NpYmls
aXR5T2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ2MTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yIG1hcHBpbmcgV2ViQ29yZSBBY2Nlc3NpYmlsaXR5IHR5cGVzIGlu
dG8gSlNWYWx1ZVJlZiB0eXBlcworICAgICAgICBzbyB0aGV5IGNhbiBiZSB1c2VkIGluIHRlc3Rz
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLm1tOgorICAgICAgICAod2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFz
cyk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIHN0YXJ0T2Jz
ZXJ2aW5nXSk6CisgICAgICAgIChtYWtlVmFsdWVSZWZGb3JWYWx1ZSk6CisgICAgICAgIChtYWtl
QXJyYXlSZWZGb3JBcnJheSk6CisgICAgICAgIChtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeSk6
CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3RpZmljYXRp
b25SZWNlaXZlZDpdKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbToKKyAgICAgICAgKHdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MpOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlciBzdGFydE9ic2VydmluZ10pOgorICAgICAgICAobWFrZVZhbHVl
UmVmRm9yVmFsdWUpOgorICAgICAgICAobWFrZUFycmF5UmVmRm9yQXJyYXkpOgorICAgICAgICAo
bWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkpOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciBfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6XSk6CisKIDIwMTUtMDYtMjEg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TiAocjE3Mjk3NSk6IG5hdmlnYXRvci5sYW5ndWFnZSB1bmFibGUgdG8gdGVsbCByZWdpb24gZm9y
IFRyYWRpdGlvbmFsIENoaW5lc2UgdXNlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQppbmRleCAx
YmU4MDY3Li45NWVmODAwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCkBAIC05MywxNCArOTMs
MjEgQEAKICAgICBKU1ZhbHVlUHJvdGVjdChbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25v
dGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOwogfQogCitzdGF0aWMgQ2xhc3Mgd2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCit7CisgICAgc3RhdGljIENsYXNzIGNscyA9IG5p
bDsKKyAgICBpZiAoIWNscykKKyAgICAgICAgY2xzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciIpOworICAgIEFTU0VSVChjbHMpOworICAgIHJldHVy
biBjbHM7Cit9CisKIC0gKHZvaWQpc3RhcnRPYnNlcnZpbmcKIHsKICAgICAvLyBPbmNlIHdlIHN0
YXJ0IHJlcXVlc3Rpbmcgbm90aWZpY2F0aW9ucywgaXQncyBvbiBmb3IgdGhlIGR1cmF0aW9uIG9m
IHRoZSBwcm9ncmFtLgogICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9u
cyBiZXR3ZWVuIHRlc3RzIHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQKICAg
ICAvLyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4gaWdub3JlIGV2ZW50cyBp
dCBkb2Vzbid0IGNhcmUgYWJvdXQuCi0gICAgaWQgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJDbGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIiKTsKLSAgICBBU1NFUlQod2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcyk7Ci0g
ICAgW3dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MgYWNjZXNzaWJpbGl0eVNldFNo
b3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKKyAgICBbd2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJDbGFzcygpIGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25z
OllFU107CiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KSBuYW1l
OkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWxdOwogfQogCkBAIC0xMDksNiArMTE2LDUw
IEBACiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjpzZWxmXTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgbWFrZVZhbHVlUmVmRm9yVmFsdWUo
SlNDb250ZXh0UmVmIGNvbnRleHQsIGlkIHZhbHVlKQoreworICAgIGlmIChbdmFsdWUgaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3Ry
aW5nKGNvbnRleHQsIGFkb3B0KFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl0pLmdldCgpKTsKKyAg
ICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pIHsKKyAgICAgICAg
aWYgKCFzdHJjbXAoW3ZhbHVlIG9iakNUeXBlXSwgQGVuY29kZShCT09MKSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIFt2YWx1ZSBib29sVmFsdWVdKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIFt2YWx1ZSBkb3VibGVW
YWx1ZV0pOworICAgIH0KKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6d2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJDbGFzcygpXSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om1ha2VKU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29udGV4dCwgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCh2YWx1ZSkpOworICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNE
aWN0aW9uYXJ5IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBtYWtlT2JqZWN0UmVmRm9yRGljdGlv
bmFyeShjb250ZXh0LCB2YWx1ZSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0Fy
cmF5IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBtYWtlQXJyYXlSZWZGb3JBcnJheShjb250ZXh0
LCB2YWx1ZSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG1h
a2VBcnJheVJlZkZvckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5ICphcnJheSkK
K3sKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gYXJyYXkuY291bnQ7CisgICAgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbY291bnRdOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgYXJndW1lbnRzW2ldID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29udGV4
dCwgW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOworCisgICAgcmV0dXJuIEpTT2JqZWN0TWFrZUFy
cmF5KGNvbnRleHQsIGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0NvbnRleHRSZWYgY29udGV4dCwg
TlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQoreworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpT
T2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKKworICAgIGZvciAoTlNTdHJp
bmcgKmtleSBpbiBkaWN0aW9uYXJ5KSB7CisKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBh
ZG9wdChba2V5IGNyZWF0ZUpTU3RyaW5nUmVmXSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWVSZWYg
cHJvcGVydHlWYWx1ZSA9IG1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIFtkaWN0aW9uYXJ5
IG9iamVjdEZvcktleTprZXldKSkKKyAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKwogLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCiB7CiAgICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNh
dGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOwpAQCAtMTE3
LDI3ICsxNjgsMjIgQEAKICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVs
ZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBO
U1N0cmluZyAqdXNlckluZm9KU09OVmFsdWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2Jq
ZWN0Rm9yS2V5OkAidXNlckluZm8iXTsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tu
b3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAInVzZXJJbmZvIl07CiAKLSAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRp
b25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25O
YW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRd
LCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0gICAgSlNWYWx1ZVJlZiB1c2VySW5mb0pTT05WYWx1
ZUFyZ3VtZW50ID0gbmlsOwotICAgIGlmIChbdXNlckluZm9KU09OVmFsdWUgbGVuZ3RoXSkgewot
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNVc2VySW5mb0pTT05WYWx1ZShBZG9w
dCwgW3VzZXJJbmZvSlNPTlZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgICAgIHVzZXJJ
bmZvSlNPTlZhbHVlQXJndW1lbnQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKFttYWluRnJh
bWUgZ2xvYmFsQ29udGV4dF0sIGpzVXNlckluZm9KU09OVmFsdWUuZ2V0KCkpOwotICAgIH0KKyAg
ICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5n
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGFkb3B0KFtub3RpZmljYXRpb25OYW1lIGNyZWF0
ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgdXNlckluZm9Bcmd1bWVudCA9
IG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIHVz
ZXJJbmZvKTsKICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpIHsKICAgICAgICAgLy8gTGlzdGVu
ZXIgZm9yIG9uZSBlbGVtZW50IGdldHMgdGhlIG5vdGlmaWNhdGlvbiBuYW1lIGFuZCB1c2VySW5m
by4KICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl07CiAgICAgICAgIGFyZ3VtZW50c1sw
XSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRzWzFdID0gdXNl
ckluZm9KU09OVmFsdWVBcmd1bWVudDsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gdXNlckluZm9B
cmd1bWVudDsKICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50
cywgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0
aGUgZWxlbWVudCwgbm90aWZpY2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1szXTsKICAgICAgICAgYXJndW1lbnRzWzBdID0gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFtub3RpZmljYXRpb24gb2JqZWN0XSkp
OwogICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7Ci0gICAg
ICAgIGFyZ3VtZW50c1syXSA9IHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQ7CisgICAgICAgIGFy
Z3VtZW50c1syXSA9IHVzZXJJbmZvQXJndW1lbnQ7CiAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrLCAwLCAyLCBhcmd1bWVudHMsIDApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KaW5kZXggZjEzMDM2Ni4uYWI4
ZWJlZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIubW0KQEAgLTEwMSwxNCArMTAxLDIxIEBACiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4
dCwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKIH0KIAorc3RhdGljIENsYXNzIHdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBj
bHMgPSBuaWw7CisgICAgaWYgKCFjbHMpCisgICAgICAgIGNscyA9IE5TQ2xhc3NGcm9tU3RyaW5n
KEAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIiKTsKKyAgICBBU1NFUlQoY2xzKTsKKyAg
ICByZXR1cm4gY2xzOworfQorCiAtICh2b2lkKXN0YXJ0T2JzZXJ2aW5nCiB7CiAgICAgLy8gT25j
ZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgcHJvZ3JhbS4KICAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNlIGNv
bmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0
ZWFkCiAgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGlnbm9yZSBl
dmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0LgotICAgIGlkIHdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIik7Ci0gICAgQVNTRVJUKHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xh
c3MpOwotICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzIGFjY2Vzc2liaWxp
dHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOllFU107CisgICAgW3dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQ2xhc3MoKSBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZp
Y2F0aW9uczpZRVNdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVk
OikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsKIH0KIApAQCAtMTE3LDYg
KzEyNCw1MCBAQAogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVt
b3ZlT2JzZXJ2ZXI6c2VsZl07CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZv
clZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpZCB2YWx1ZSkKK3sKKyAgICBpZiAoW3ZhbHVl
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCBhZG9wdChbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdKS5nZXQo
KSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7Cisg
ICAgICAgIGlmICghc3RyY21wKFt2YWx1ZSBvYmpDVHlwZV0sIEBlbmNvZGUoQk9PTCkpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBbdmFsdWUgYm9vbFZh
bHVlXSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBbdmFsdWUg
ZG91YmxlVmFsdWVdKTsKKyAgICB9CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOndlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKV0pCisgICAgICAgIHJldHVybiB0b0pTKGNv
bnRleHQsIFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBs
YXRmb3JtVUlFbGVtZW50Pih2YWx1ZSkpLmdldCgpKTsKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICByZXR1cm4gbWFrZU9iamVjdFJl
ZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9yQXJy
YXkoY29udGV4dCwgdmFsdWUpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJh
eSAqYXJyYXkpCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IGFycmF5LmNvdW50OworICAgIEpT
VmFsdWVSZWYgYXJndW1lbnRzW2NvdW50XTsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG1ha2VWYWx1ZVJlZkZvclZh
bHVlKGNvbnRleHQsIFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKKworICAgIHJldHVybiBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKK3sKKyAgICBKU09iamVjdFJlZiBv
YmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBm
b3IgKE5TU3RyaW5nICprZXkgaW4gZGljdGlvbmFyeSkgeworCisgICAgICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBwcm9wZXJ0eU5hbWUgPSBhZG9wdChba2V5IGNyZWF0ZUpTU3RyaW5nUmVm
XSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9IG1ha2VWYWx1ZVJl
ZkZvclZhbHVlKGNvbnRleHQsIFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldKSkKKyAgICAg
ICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUu
Z2V0KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7
CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwogLSAodm9pZClfbm90aWZpY2F0aW9u
UmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAgICAgTlNTdHJpbmcg
Km5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5
OkAibm90aWZpY2F0aW9uTmFtZSJdOwpAQCAtMTI1LDMxICsxNzYsMjYgQEAKICAgICBpZiAobV9w
bGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBvYmpl
Y3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU1N0cmluZyAqdXNlckluZm9KU09OVmFsdWUg
PSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAidXNlckluZm8iXTsKKyAg
ICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVj
dEZvcktleTpAInVzZXJJbmZvIl07CiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAotICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRl
SlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9
IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICBK
U1ZhbHVlUmVmIHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQgPSBuaWw7Ci0gICAgaWYgKFt1c2Vy
SW5mb0pTT05WYWx1ZSBsZW5ndGhdKSB7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBqc1VzZXJJbmZvSlNPTlZhbHVlKEFkb3B0LCBbdXNlckluZm9KU09OVmFsdWUgY3JlYXRlSlNT
dHJpbmdSZWZdKTsKLSAgICAgICAgdXNlckluZm9KU09OVmFsdWVBcmd1bWVudCA9IEpTVmFsdWVN
YWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwganNVc2VySW5mb0pTT05WYWx1ZS5nZXQoKSk7Ci0g
ICAgfQorICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgYWRvcHQoW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdS
ZWZdKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiB1c2VySW5mb0FyZ3VtZW50ID0gbWFrZU9iamVj
dFJlZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdXNlckluZm8pOwogICAgIGlmIChtX3BsYXRmb3Jt
RWxlbWVudCkgewogICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQgZ2V0cyB0aGUg
bm90aWZpY2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1syXTsKICAgICAgICAgYXJndW1lbnRzWzBdID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50
OwotICAgICAgICBhcmd1bWVudHNbMV0gPSB1c2VySW5mb0pTT05WYWx1ZUFyZ3VtZW50OworICAg
ICAgICBhcmd1bWVudHNbMV0gPSB1c2VySW5mb0FyZ3VtZW50OwogICAgICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjayksIDAsIDIsIGFyZ3VtZW50cywgMCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0aGUgZWxlbWVudCwgbm90aWZpY2F0
aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1szXTsK
LSAgICAgICAgYXJndW1lbnRzWzBdID0gdG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cihXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShbbm90aWZpY2F0aW9uIG9iamVjdF0pKSk7Cisg
ICAgICAgIGFyZ3VtZW50c1swXSA9IHRvSlMoY29udGV4dCwgV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjcmVhdGUoW25vdGlmaWNhdGlvbiBvYmplY3RdKS5nZXQoKSk7CiAgICAgICAgIGFy
Z3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRz
WzJdID0gdXNlckluZm9KU09OVmFsdWVBcmd1bWVudDsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihtX25vdGlmaWNhdGlvbkZ1
bmN0aW9uQ2FsbGJhY2spLCAwLCAyLCBhcmd1bWVudHMsIDApOworICAgICAgICBhcmd1bWVudHNb
Ml0gPSB1c2VySW5mb0FyZ3VtZW50OworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNv
bnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjayksIDAsIDMsIGFyZ3VtZW50cywgMCk7CiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="280577"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255501</attachid>
            <date>2015-06-24 12:10:58 -0700</date>
            <delta_ts>2015-06-24 12:19:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>146177.patch</filename>
            <type>text/plain</type>
            <size>32245</size>
            <attacher name="Doug Russell">d_russell</attacher>
            
              <data encoding="base64">Y29tbWl0IDQyMDhiNGI0YzNhZDhkN2YxOTljYzliNDgzY2U1YWY2MTA5OTE4MzUKQXV0aG9yOiBE
b3VnIFJ1c3NlbGwgPGRfcnVzc2VsbEBhcHBsZS5jb20+CkRhdGU6ICAgTW9uIEp1biAyMiAwOTo1
MzoxMCAyMDE1IC0wNzAwCgogICAgQnVnIDE0NjE3NwogICAgCiAgICBBWDogQVhPYmplY3RDYWNo
ZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCB3aGVu
IHBvc3RpbmcgYSBzZWxlY3Rpb24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3
ZWVuIHR3byBhY2Nlc3NpYmlsaXR5T2JqZWN0cwogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NjE3NwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NjBkNGI2Li5hODU3MGQ3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0
cnkgdG8gdXNlIGFuIHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0CisgICAgICAgIHdoZW4g
cG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdl
ZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBBZGQgdGVzdCBmb3IgZm9yd2Fy
ZCBhbmQgYmFja3dhcmQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGFuZCBjb3JyZXNwb25kaW5nIG5v
dGlmaWNhdGlvbnMKKyAgICAgICAgY2hhbmdlIGVsZW1lbnQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L3NlbGVjdGlvbi1lbGVtZW50LXRhYmJpbmctdG8tbGluay1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1lbGVtZW50LXRh
YmJpbmctdG8tbGluay5odG1sOiBBZGRlZC4KKwogMjAxNS0wNi0yMiAgRGFuaWVsIEJhdGVzICA8
ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJIEF1dG9tYXRpb24gY2Fubm90IGZp
bmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25zCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVudC10YWJiaW5n
LXRvLWxpbmstZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYwOWI1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1l
bnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitvbmUgdHdv
CitUaGlzIHRlc3RzIHRoYXQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGluY2x1ZGVzIGEgcmVsZXZh
bnQgYWNjZXNzaWJpbGl0eU9iamVjdCBpbiB0aGUgdXNlckluZm8gd2hlbiBvbiB0aGUgYm91bmRh
cnkgYmV0d2VlbiBhbiBpZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgYW5kIGFuIHVuaWdub3Jl
ZCBhY2Nlc3NpYmlsaXR5T2JqZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBhZGRlZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hh
bmdlRWxlbWVudE9uZSwgIkFYUm9sZTogQVhMaW5rIikuaXNFcXVhbChsaW5rVHdvKSBpcyB0cnVl
CitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hhbmdlRWxlbWVudFR3bywgIkFYUm9sZTogQVhMaW5r
IikuaXNFcXVhbChsaW5rT25lKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVu
dC10YWJiaW5nLXRvLWxpbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNGViNTBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwKQEAgLTAs
MCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2Pgor
PGEgaHJlZj0iIiBpZD0ib25lIj5vbmU8L2E+Cis8YSBocmVmPSIiIGlkPSJ0d28iPnR3bzwvYT4K
KzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGRpdiBpZD0ibm90aWZpY2F0aW9ucyI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgYmV0d2VlbiBsaW5rcyBpbmNsdWRl
cyBhIHJlbGV2YW50IGFjY2Vzc2liaWxpdHlPYmplY3QgaW4gdGhlIHVzZXJJbmZvIHdoZW4gb24g
dGhlIGJvdW5kYXJ5IGJldHdlZW4gYW4gaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IGFuZCBh
biB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdC4iKTsKKworICAgIHZhciBheFRleHRDaGFu
Z2VFbGVtZW50ID0gMDsKKyAgICB2YXIgd2ViQXJlYSA9IDA7CisgICAgdmFyIGNoYW5nZUVsZW1l
bnRPbmUgPSAwOworICAgIHZhciBjaGFuZ2VFbGVtZW50VHdvID0gMDsKKyAgICB2YXIgbGlua1R3
byA9IDA7CisgICAgdmFyIGxpbmtPbmUgPSAwOworICAgIHZhciBjb3VudCA9IDA7CisKKyAgICBm
dW5jdGlvbiBhbmNlc3RvcldpdGhSb2xlKGF4RWxlbWVudCwgcm9sZSkgeworICAgICAgICB2YXIg
YW5jZXN0b3IgPSBheEVsZW1lbnQ7CisgICAgICAgIHdoaWxlIChhbmNlc3RvcikgeworICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLnJvbGUgPT0gcm9sZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50RWxlbWVudCgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhbmNlc3RvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3Rp
ZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24sIHVzZXJJbmZvKSB7CisgICAgICAgIGlmIChu
b3RpZmljYXRpb24gPT0gIkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCIpIHsKKyAgICAgICAgICAgIGNv
dW50Kys7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGNo
YW5nZUVsZW1lbnRPbmUgPSB1c2VySW5mb1siQVhUZXh0Q2hhbmdlRWxlbWVudCJdOworICAgICAg
ICAgICAgICAgIGxpbmtUd28gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInR3byIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJhbmNlc3RvcldpdGhS
b2xlKGNoYW5nZUVsZW1lbnRPbmUsIFwiQVhSb2xlOiBBWExpbmtcIikuaXNFcXVhbChsaW5rVHdv
KSIsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VFbGVtZW50VHdvID0gdXNlckluZm9bIkFYVGV4dENoYW5nZUVsZW1l
bnQiXTsKKyAgICAgICAgICAgICAgICBsaW5rT25lID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJvbmUiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgi
YW5jZXN0b3JXaXRoUm9sZShjaGFuZ2VFbGVtZW50VHdvLCBcIkFYUm9sZTogQVhMaW5rXCIpLmlz
RXF1YWwobGlua09uZSkiLCAidHJ1ZSIpOworICAgICAgICAgICAgICAgIHdlYkFyZWEucmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRU
YWJUb0xpbmtzUHJlZmVyZW5jZUtleSIsIDEpOworCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgd2ViQXJl
YSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsK
KyAgICAgICAgd2ViQXJlYS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYQ2FyZXRCcm93c2luZ0Vu
YWJsZWQiLCB0cnVlKQorCisgICAgICAgIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b25lIik7CisgICAgICAgIGxpbmsuZm9jdXMoKTsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmlj
YXRpb24gPSB3ZWJBcmVhLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKwor
ICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJcdCIpOworICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJcdCIsIFsic2hpZnRLZXkiXSk7CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Jl
dGFpblB0ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCmluZGV4
IGYyM2UzMmYuLjI2MmM0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNSZXRhaW5QdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKQEAgLTc1LDYgKzc1LDE2IEBAIHByaXZhdGU6CiAgICAgVCBtX3B0cjsKIH07CiAKK2lubGlu
ZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYgbykKK3sKKyAgICBy
ZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBvKTsKK30KKworaW5saW5lIEpT
UmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4gYWRvcHQoSlNHbG9iYWxDb250ZXh0UmVmIG8p
Cit7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4oQWRvcHQsIG8p
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpTUmV0
YWluUHRyKGNvbnN0IEpTUmV0YWluUHRyJiBvKQogICAgIDogbV9wdHIoby5tX3B0cikKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVkYzBkNWMuLmEzNDA1MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA2LTIzICBEb3VnIFJ1c3NlbGwgIDxk
X3J1c3NlbGxAYXBwbGUuY29tPgorCisgICAgICAgIEJ1ZyAxNDYxNzcgLSBBWDogQVhPYmplY3RD
YWNoZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCAK
KyAgICAgICAgd2hlbiBwb3N0aW5nIGEgc2VsZWN0aW9uIG5vdGlmaWNhdGlvbiB3aGVuIG9uIHRo
ZSBib3JkZXIgYmV0d2VlbiB0d28gYWNjZXNzaWJpbGl0eU9iamVjdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE3NworCisgICAgICAgIEFkZCBh
biBhZG9wdCgpIGZ1bmN0aW9uIHRvIHNpbXBsaWZ5IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB7
IEFkb3B0LCBzdHJpbmcgfSB0byBhZG9wdChzdHJpbmcpLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTUmV0YWluUHRyLmg6CisgICAgICAg
IChhZG9wdCk6CisKIDIwMTUtMDYtMjAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgW0VTNl0gRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IG5lZWQgdG8g
YWNjZXB0IGl0ZXJhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDcxNmFlNzguLjkzMDZiMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMyBAQAorMjAxNS0wNi0yMyAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxs
QGFwcGxlLmNvbT4KKworICAgICAgICBCdWcgMTQ2MTc3IC0gQVg6IEFYT2JqZWN0Q2FjaGUgc2hv
dWxkIHRyeSB0byB1c2UgYW4gdW5pZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgCisgICAgICAg
IHdoZW4gcG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVy
IGJldHdlZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcG9zaXRpb24gdG8gYmUg
cGFzc2VkIGZvciBzZWxlY3Rpb24gY2hhbmdlcyB0byBhbGxvdyBjaGVja2luZy4KKyAgICAgICAg
Zm9yIGJvdW5kYXJpZXMgaW4gdGhlIGNhc2Ugb2YgaWdub3JlZCBlbGVtZW50cy4KKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBmb3IgdW5pZ25vcmVkIHNpYmxpbmdzIG9mIEFjY2Vz
c2liaWxpdHlPYmplY3RzLgorICAgICAgICBJbmNsdWRlIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3Jh
cHBlcnMgaW4gbm90aWZpY2F0aW9ucyBmb3IgdGVzdHMuCisKKyAgICAgICAgVGVzdDogcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0
bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTaWJsaW5nVW5pZ25vcmVkKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW06Cisg
ICAgICAgIChpc1ZhbHVlVHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChhcnJheVJlbW92aW5nTm9u
U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYWNj
ZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjp1c2VySW5mbzpdKToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKwogMjAxNS0w
Ni0yMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJ
IEF1dG9tYXRpb24gY2Fubm90IGZpbmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25z
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRl
eCA0Nzc1MGRkLi5jZGZiYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTEwMDYsMTYgKzEwMDYsNTYgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IEFY
VGV4dFN0YXQKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlcygpOwogCisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihn
ZXRPckNyZWF0ZShub2RlKSwgaW50ZW50LCBzZWxlY3Rpb24pOworI2Vsc2UKKyAgICBwb3N0Tm90
aWZpY2F0aW9uKG5vZGUtPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRUZXh0
Q2hhbmdlZCwgVGFyZ2V0T2JzZXJ2YWJsZVBhcmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGludGVu
dCk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBBWE9i
amVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5v
ZGUpOworICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkp
IHsKKyAgICAgICAgaWYgKHBvc2l0aW9uLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkg
eworICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG5leHRTaWJsaW5nID0gb2Jq
ZWN0LT5uZXh0U2libGluZ1VuaWdub3JlZCgxKSkKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBu
ZXh0U2libGluZzsKKyAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbi5hdEZpcnN0RWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
cHJldmlvdXNTaWJsaW5nID0gb2JqZWN0LT5wcmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoMSkpCisg
ICAgICAgICAgICAgICAgb2JqZWN0ID0gcHJldmlvdXNTaWJsaW5nOworICAgICAgICB9CisgICAg
fQorCisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3QsIGludGVudCwg
c2VsZWN0aW9uKTsKKyNlbHNlCisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihu
b2RlLCBpbnRlbnQsIHNlbGVjdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBBWE9iamVjdENhY2hl
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVzKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAob2JqZWN0KSB7CiAg
ICAgICAgIGlmIChpc1Bhc3N3b3JkRmllbGRPckNvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZChvYmpl
Y3QpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2Vy
dmFibGVPYmplY3QoKTsKKworICAgICAgICBpZiAoYXV0byBvYnNlcnZhYmxlT2JqZWN0ID0gb2Jq
ZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCkpCisgICAgICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxl
T2JqZWN0OwogICAgIH0KIAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNh
dGlvbihvYmplY3QsIChpbnRlbnQudHlwZSA9PSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVVbmtub3du
IHx8IG1faXNTeW5jaHJvbml6aW5nU2VsZWN0aW9uKSA/IG1fdGV4dFNlbGVjdGlvbkludGVudCA6
IGludGVudCwgc2VsZWN0aW9uKTsKICNlbHNlCi0gICAgcG9zdE5vdGlmaWNhdGlvbihub2RlLT5y
ZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIFRhcmdldE9i
c2VydmFibGVQYXJlbnQpOworICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9Q
QVJBTShpbnRlbnQpOwogICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDY3ZTA3Y2Yu
LmYyYWFiYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oCkBAIC0yMDUsNiArMjA1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlm
aWNhdGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGRlbGV0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4
dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUlu
dGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAogICAgIGVudW0gQVhMb2FkaW5n
RXZlbnQgewogICAgICAgICBBWExvYWRpbmdTdGFydGVkLApAQCAtMjU5LDYgKzI2MCw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIG5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKCk7CiAKKyAgICB2
b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCos
IGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OworCiAgICAgYm9vbCBlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihBY2Nl
c3NpYmlsaXR5T2JqZWN0Kik7CiAgICAgdm9pZCBwYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1l
ckZpcmVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDM0ZTYzZDYuLmY3NGI3NTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAt
NDU3LDYgKzQ1NywzMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpwYXJlbnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdAogICAgIHJldHVybiBwYXJlbnQ7CiB9CiAK
K0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2libGlu
Z1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
cHJldmlvdXM7CisgICAgQVNTRVJUKGxpbWl0ID49IDApOworICAgIGZvciAocHJldmlvdXMgPSBw
cmV2aW91c1NpYmxpbmcoKTsgcHJldmlvdXMgJiYgcHJldmlvdXMtPmFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKTsgcHJldmlvdXMgPSBwcmV2aW91cy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAg
ICAgbGltaXQtLTsKKyAgICAgICAgaWYgKGxpbWl0IDw9IDApCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHByZXZpb3VzOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2libGluZ1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0
Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbmV4dDsKKyAgICBBU1NFUlQobGltaXQgPj0g
MCk7CisgICAgZm9yIChuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dCAmJiBuZXh0LT5hY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCk7IG5leHQgPSBuZXh0LT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGxpbWl0LS07CisgICAgICAgIGlmIChsaW1pdCA8PSAwKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBuZXh0OworfQorCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpmaXJzdEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZShjb25zdCBOb2RlKiBu
b2RlKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggNmNiZDFhMC4uMTAyZGI5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgK
QEAgLTY0NSw2ICs2NDUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXh0U2libGluZygpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG5leHRTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25z
dDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdFVuaWdu
b3JlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2Jq
ZWN0SWZFeGlzdHMoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UubW0KaW5kZXggZThiMmVmMC4uOTM1MzRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpAQCAtMzk0LDE3ICszOTQsMjIgQEAg
c3RhdGljIEJPT0wgYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM7CiAgICAg
ICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFt
ZSB1c2VySW5mbzpuaWxdOwogfQogCi1zdGF0aWMgTlNBcnJheSAqYXJyYXlSZW1vdmluZ05vbkpT
T05UeXBlcyhOU0FycmF5ICphcnJheSkKK3N0YXRpYyBib29sIGlzVmFsdWVUeXBlU3VwcG9ydGVk
KGlkIHZhbHVlKQoreworICAgIHJldHVybiBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdXSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSB8fCBbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGNsYXNz
XV07Cit9CisKK3N0YXRpYyBOU0FycmF5ICphcnJheVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXMo
TlNBcnJheSAqYXJyYXkpCiB7CiAgICAgQVNTRVJUKFthcnJheSBpc0tpbmRPZkNsYXNzOltOU0Fy
cmF5IGNsYXNzXV0pOwogICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlQXJyYXkgPSBbYXJyYXkg
bXV0YWJsZUNvcHldOwogICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IFttdXRhYmxlQXJy
YXkgY291bnRdOykgewogICAgICAgICBpZCB2YWx1ZSA9IFttdXRhYmxlQXJyYXkgb2JqZWN0QXRJ
bmRleDppXTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkg
Y2xhc3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVjdEF0SW5kZXg6
aSB3aXRoT2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1ZSldOworICAg
ICAgICAgICAgW211dGFibGVBcnJheSByZXBsYWNlT2JqZWN0QXRJbmRleDppIHdpdGhPYmplY3Q6
ZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXModmFsdWUpXTsKICAgICAgICAgZWxz
ZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAg
IFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVjdEF0SW5kZXg6aSB3aXRoT2JqZWN0OmFycmF5UmVt
b3ZpbmdOb25KU09OVHlwZXModmFsdWUpXTsKLSAgICAgICAgZWxzZSBpZiAoIShbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNO
dW1iZXIgY2xhc3NdXSkpIHsKKyAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVj
dEF0SW5kZXg6aSB3aXRoT2JqZWN0OmFycmF5UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyh2YWx1
ZSldOworICAgICAgICBlbHNlIGlmICghaXNWYWx1ZVR5cGVTdXBwb3J0ZWQodmFsdWUpKSB7CiAg
ICAgICAgICAgICBbbXV0YWJsZUFycmF5IHJlbW92ZU9iamVjdEF0SW5kZXg6aV07CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDEzLDE3ICs0MTgsMTkgQEAgc3RhdGljIE5T
QXJyYXkgKmFycmF5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNBcnJheSAqYXJyYXkpCiAgICAgcmV0
dXJuIFttdXRhYmxlQXJyYXkgYXV0b3JlbGVhc2VdOwogfQogCi1zdGF0aWMgTlNEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
KQorc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVkVHlw
ZXMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogeworICAgIGlmICghZGljdGlvbmFyeSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICBBU1NFUlQoW2RpY3Rpb25hcnkgaXNLaW5kT2ZDbGFzczpb
TlNEaWN0aW9uYXJ5IGNsYXNzXV0pOwogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKm11dGFibGVE
aWN0aW9uYXJ5ID0gW2RpY3Rpb25hcnkgbXV0YWJsZUNvcHldOwogICAgIGZvciAoTlNTdHJpbmcg
KmtleSBpbiBkaWN0aW9uYXJ5KSB7CiAgICAgICAgIGlkIHZhbHVlID0gW2RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OmtleV07CiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0
OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1ZSkgZm9yS2V5OmtleV07CisgICAg
ICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05v
blN1cHBvcnRlZFR5cGVzKHZhbHVlKSBmb3JLZXk6a2V5XTsKICAgICAgICAgZWxzZSBpZiAoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxl
RGljdGlvbmFyeSBzZXRPYmplY3Q6YXJyYXlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1ZSkgZm9y
S2V5OmtleV07Ci0gICAgICAgIGVsc2UgaWYgKCEoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pKQor
ICAgICAgICAgICAgW211dGFibGVEaWN0aW9uYXJ5IHNldE9iamVjdDphcnJheVJlbW92aW5nTm9u
U3VwcG9ydGVkVHlwZXModmFsdWUpIGZvcktleTprZXldOworICAgICAgICBlbHNlIGlmICghaXNW
YWx1ZVR5cGVTdXBwb3J0ZWQodmFsdWUpKQogICAgICAgICAgICAgW211dGFibGVEaWN0aW9uYXJ5
IHJlbW92ZU9iamVjdEZvcktleTprZXldOwogICAgIH0KICAgICByZXR1cm4gW211dGFibGVEaWN0
aW9uYXJ5IGF1dG9yZWxlYXNlXTsKQEAgLTQzMywxOCArNDQwLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVzKE5TRGljdGlvbmFyeSAqZGljdGlv
bmFyeSkKIHsKICAgICBpZiAoYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMp
IHsKICAgICAgICAgQVNTRVJUKG5vdGlmaWNhdGlvbk5hbWUpOwotICAgICAgICBOU0RpY3Rpb25h
cnkgKmluZm8gPSBuaWw7Ci0gICAgICAgIGlmICh1c2VySW5mbykgewotICAgICAgICAgICAgTlNE
YXRhICp1c2VySW5mb0RhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmpl
Y3Q6ZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVzKHVzZXJJbmZvKSBvcHRpb25zOihOU0pT
T05Xcml0aW5nT3B0aW9ucykwIGVycm9yOm5pbF07Ci0gICAgICAgICAgICBpZiAodXNlckluZm9E
YXRhKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKnVzZXJJbmZvU3RyaW5nID0gW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOnVzZXJJbmZvRGF0YSBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ107Ci0gICAgICAgICAgICAgICAgaWYgKHVzZXJJbmZvU3RyaW5nKQotICAgICAg
ICAgICAgICAgICAgICBpbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIHVzZXJJbmZvU3Ry
aW5nLCBAInVzZXJJbmZvIiwgbmlsXTsKLSAgICAgICAgICAgICAgICBbdXNlckluZm9TdHJpbmcg
cmVsZWFzZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFpbmZvKQot
ICAgICAgICAgICAgaW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5k
S2V5czpub3RpZmljYXRpb25OYW1lLCBAIm5vdGlmaWNhdGlvbk5hbWUiLCBuaWxdOworICAgICAg
ICB1c2VySW5mbyA9IGRpY3Rpb25hcnlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKHVzZXJJbmZv
KTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICppbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIs
IHVzZXJJbmZvLCBAInVzZXJJbmZvIiwgbmlsXTsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpAIkFYRFJUTm90aWZpY2F0
aW9uIiBvYmplY3Q6c2VsZiB1c2VySW5mbzppbmZvXTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmluZGV4IDFhODJlZjkuLjY5
ZWIyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0
aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9u
TWFjLm1tCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vz
c2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAKICAgICBp
ZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5p
c05vdE51bGwoKSkgewogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVu
dC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCksIGludGVudCwgbV9zZWxlY3Rpb24pOworICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVj
dGlvbik7CiAgICAgfQogCiAjaWYgIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMWY1NDU4Li5mZTZhZjFkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0cnkgdG8gdXNlIGFu
IHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IAorICAgICAgICB3aGVuIHBvc3RpbmcgYSBz
ZWxlY3Rpb24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3ZWVuIHR3byBhY2Nl
c3NpYmlsaXR5T2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ2MTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIG1hcHBpbmcgV2ViQ29yZSBBY2Nlc3NpYmlsaXR5IHR5
cGVzIGludG8gSlNWYWx1ZVJlZiB0eXBlcworICAgICAgICBzbyB0aGV5IGNhbiBiZSB1c2VkIGlu
IHRlc3RzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyLm1tOgorICAgICAgICAod2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJDbGFzcyk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIHN0
YXJ0T2JzZXJ2aW5nXSk6CisgICAgICAgIChtYWtlVmFsdWVSZWZGb3JWYWx1ZSk6CisgICAgICAg
IChtYWtlQXJyYXlSZWZGb3JBcnJheSk6CisgICAgICAgIChtYWtlT2JqZWN0UmVmRm9yRGljdGlv
bmFyeSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3Rp
ZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbToKKyAgICAgICAg
KHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MpOgorICAgICAgICAoLVtBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzdGFydE9ic2VydmluZ10pOgorICAgICAgICAobWFr
ZVZhbHVlUmVmRm9yVmFsdWUpOgorICAgICAgICAobWFrZUFycmF5UmVmRm9yQXJyYXkpOgorICAg
ICAgICAobWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkpOgorICAgICAgICAoLVtBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlciBfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6XSk6CisKIDIwMTUt
MDYtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTiAocjE3Mjk3NSk6IG5hdmlnYXRvci5sYW5ndWFnZSB1bmFibGUgdG8gdGVsbCByZWdp
b24gZm9yIFRyYWRpdGlvbmFsIENoaW5lc2UgdXNlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQpp
bmRleCAxYmU4MDY3Li42MmUzOGQ4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCkBAIC0zNyw2
ICszNyw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZy
YW1lLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KIAogQGludGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
ZGRpdGlvbnMpCkBAIC05MywxNCArOTQsMTkgQEAKICAgICBKU1ZhbHVlUHJvdGVjdChbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOwogfQog
CitzdGF0aWMgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCit7Cisg
ICAgc3RhdGljIENsYXNzIGNscyA9IG9iamNfZ2V0Q2xhc3MoIldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIik7CisgICAgQVNTRVJUKGNscyk7CisgICAgcmV0dXJuIGNsczsKK30KKwogLSAo
dm9pZClzdGFydE9ic2VydmluZwogewogICAgIC8vIE9uY2Ugd2Ugc3RhcnQgcmVxdWVzdGluZyBu
b3RpZmljYXRpb25zLCBpdCdzIG9uIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHByb2dyYW0uCiAg
ICAgLy8gVGhpcyBpcyB0byBhdm9pZCBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGVzdHMg
dHVybmluZyB0aGlzIGZsYWcgb24gYW5kIG9mZi4gSW5zdGVhZAogICAgIC8vIEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIGNhbiBpZ25vcmUgZXZlbnRzIGl0IGRvZXNuJ3QgY2FyZSBh
Ym91dC4KLSAgICBpZCB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0gTlNDbGFz
c0Zyb21TdHJpbmcoQCJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciIpOwotICAgIEFTU0VS
VCh3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKTsKLSAgICBbd2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJDbGFzcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZp
Y2F0aW9uczpZRVNdOworICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkg
YWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKICAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKF9ub3RpZmljYXRpb25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNh
dGlvbiIgb2JqZWN0Om5pbF07CiB9CiAKQEAgLTEwOSw2ICsxMTUsNTAgQEAKICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogfQog
CitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlVmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgaWQgdmFsdWUpCit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgYWRv
cHQoW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIGlmIChbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBpZiAoIXN0cmNtcChbdmFs
dWUgb2JqQ1R5cGVdLCBAZW5jb2RlKEJPT0wpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZUJvb2xlYW4oY29udGV4dCwgW3ZhbHVlIGJvb2xWYWx1ZV0pOworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgW3ZhbHVlIGRvdWJsZVZhbHVlXSk7CisgICAgfQor
ICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckNsYXNzKCldKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWFrZUpT
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250ZXh0LCB2YWx1ZSk7CisgICAgaWYgKFt2YWx1ZSBp
c0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG1ha2VP
YmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNvbnRleHQsIHZhbHVlKTsKKyAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG1ha2VBcnJheVJl
ZkZvckFycmF5KGNvbnRleHQsIHZhbHVlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IE5TQXJyYXkgKmFycmF5KQoreworICAgIE5TVUludGVnZXIgY291bnQgPSBhcnJheS5jb3VudDsK
KyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tjb3VudF07CisKKyAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBhcmd1bWVudHNbaV0gPSBtYWtlVmFsdWVS
ZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICByZXR1
cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCit7CisgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwor
CisgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIGRpY3Rpb25hcnkpIHsKKworICAgICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IGFkb3B0KFtrZXkgY3JlYXRlSlNTdHJpbmdSZWZdKTsKKworICAgICAg
ICBpZiAoSlNWYWx1ZVJlZiBwcm9wZXJ0eVZhbHVlID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29u
dGV4dCwgW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV0pKQorICAgICAgICAgICAgSlNPYmpl
Y3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZS5nZXQoKSwgcHJvcGVy
dHlWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCiAtICh2b2lkKV9ub3RpZmljYXRpb25SZWNlaXZlZDooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKICAgICBOU1N0cmluZyAqbm90aWZpY2F0aW9u
TmFtZSA9IFtbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJub3RpZmljYXRp
b25OYW1lIl07CkBAIC0xMTcsMjcgKzE2NywyMiBAQAogICAgIGlmIChtX3BsYXRmb3JtRWxlbWVu
dCAmJiBtX3BsYXRmb3JtRWxlbWVudCAhPSBbbm90aWZpY2F0aW9uIG9iamVjdF0pCiAgICAgICAg
IHJldHVybjsKIAotICAgIE5TU3RyaW5nICp1c2VySW5mb0pTT05WYWx1ZSA9IFtbbm90aWZpY2F0
aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJ1c2VySW5mbyJdOworICAgIE5TRGljdGlvbmFy
eSAqdXNlckluZm8gPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAidXNl
ckluZm8iXTsKIAotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihB
ZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVl
UmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKFttYWluRnJh
bWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICBKU1ZhbHVlUmVm
IHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQgPSBuaWw7Ci0gICAgaWYgKFt1c2VySW5mb0pTT05W
YWx1ZSBsZW5ndGhdKSB7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1VzZXJJ
bmZvSlNPTlZhbHVlKEFkb3B0LCBbdXNlckluZm9KU09OVmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZd
KTsKLSAgICAgICAgdXNlckluZm9KU09OVmFsdWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlRnJvbUpT
T05TdHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwganNVc2VySW5mb0pTT05WYWx1ZS5n
ZXQoKSk7Ci0gICAgfQorICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0g
SlNWYWx1ZU1ha2VTdHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgYWRvcHQoW25vdGlm
aWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZdKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiB1
c2VySW5mb0FyZ3VtZW50ID0gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoW21haW5GcmFtZSBn
bG9iYWxDb250ZXh0XSwgdXNlckluZm8pOwogICAgIGlmIChtX3BsYXRmb3JtRWxlbWVudCkgewog
ICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQgZ2V0cyB0aGUgbm90aWZpY2F0aW9u
IG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1syXTsKICAg
ICAgICAgYXJndW1lbnRzWzBdID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OwotICAgICAgICBh
cmd1bWVudHNbMV0gPSB1c2VySW5mb0pTT05WYWx1ZUFyZ3VtZW50OworICAgICAgICBhcmd1bWVu
dHNbMV0gPSB1c2VySW5mb0FyZ3VtZW50OwogICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFj
aywgMCwgMiwgYXJndW1lbnRzLCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBIGdsb2Jh
bCBsaXN0ZW5lciBnZXRzIHRoZSBlbGVtZW50LCBub3RpZmljYXRpb24gbmFtZSBhbmQgdXNlcklu
Zm8uCiAgICAgICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzWzNdOwogICAgICAgICBhcmd1bWVudHNb
MF0gPSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoW25vdGlm
aWNhdGlvbiBvYmplY3RdKSk7CiAgICAgICAgIGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5h
bWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRzWzJdID0gdXNlckluZm9KU09OVmFsdWVBcmd1
bWVudDsKKyAgICAgICAgYXJndW1lbnRzWzJdID0gdXNlckluZm9Bcmd1bWVudDsKICAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlm
aWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50cywgMCk7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQpp
bmRleCBmMTMwMzY2Li4zOGU2MTIwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZUZyYW1lLmg+CisjaW1wb3J0IDxv
YmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGludGVyZmFjZSBO
U09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBZGRpdGlvbnMpCkBAIC0xMDEs
MTQgKzEwMiwxOSBAQAogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG1fbm90aWZpY2F0aW9u
RnVuY3Rpb25DYWxsYmFjayk7CiB9CiAKK3N0YXRpYyBDbGFzcyB3ZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgY2xzID0gb2JqY19nZXRDbGFz
cygiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIiKTsKKyAgICBBU1NFUlQoY2xzKTsKKyAg
ICByZXR1cm4gY2xzOworfQorCiAtICh2b2lkKXN0YXJ0T2JzZXJ2aW5nCiB7CiAgICAgLy8gT25j
ZSB3ZSBzdGFydCByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgcHJvZ3JhbS4KICAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSByYWNlIGNv
bmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2ZmLiBJbnN0
ZWFkCiAgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGlnbm9yZSBl
dmVudHMgaXQgZG9lc24ndCBjYXJlIGFib3V0LgotICAgIGlkIHdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIik7Ci0gICAgQVNTRVJUKHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xh
c3MpOwotICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzIGFjY2Vzc2liaWxp
dHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOllFU107CisgICAgW3dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQ2xhc3MoKSBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZp
Y2F0aW9uczpZRVNdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVk
OikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9uIiBvYmplY3Q6bmlsXTsKIH0KIApAQCAtMTE3LDYg
KzEyMyw1MCBAQAogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVt
b3ZlT2JzZXJ2ZXI6c2VsZl07CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZv
clZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpZCB2YWx1ZSkKK3sKKyAgICBpZiAoW3ZhbHVl
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCBhZG9wdChbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdKS5nZXQo
KSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKSB7Cisg
ICAgICAgIGlmICghc3RyY21wKFt2YWx1ZSBvYmpDVHlwZV0sIEBlbmNvZGUoQk9PTCkpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBbdmFsdWUgYm9vbFZh
bHVlXSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBbdmFsdWUg
ZG91YmxlVmFsdWVdKTsKKyAgICB9CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOndlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKV0pCisgICAgICAgIHJldHVybiB0b0pTKGNv
bnRleHQsIFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBs
YXRmb3JtVUlFbGVtZW50Pih2YWx1ZSkpLmdldCgpKTsKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICByZXR1cm4gbWFrZU9iamVjdFJl
ZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9yQXJy
YXkoY29udGV4dCwgdmFsdWUpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJh
eSAqYXJyYXkpCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IGFycmF5LmNvdW50OworICAgIEpT
VmFsdWVSZWYgYXJndW1lbnRzW2NvdW50XTsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIGFyZ3VtZW50c1tpXSA9IG1ha2VWYWx1ZVJlZkZvclZh
bHVlKGNvbnRleHQsIFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKKworICAgIHJldHVybiBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKK3sKKyAgICBKU09iamVjdFJlZiBv
YmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBm
b3IgKE5TU3RyaW5nICprZXkgaW4gZGljdGlvbmFyeSkgeworCisgICAgICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBwcm9wZXJ0eU5hbWUgPSBhZG9wdChba2V5IGNyZWF0ZUpTU3RyaW5nUmVm
XSk7CisKKyAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9IG1ha2VWYWx1ZVJl
ZkZvclZhbHVlKGNvbnRleHQsIFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTprZXldKSkKKyAgICAg
ICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUu
Z2V0KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7
CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwogLSAodm9pZClfbm90aWZpY2F0aW9u
UmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAgICAgTlNTdHJpbmcg
Km5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5
OkAibm90aWZpY2F0aW9uTmFtZSJdOwpAQCAtMTI1LDMxICsxNzUsMjYgQEAKICAgICBpZiAobV9w
bGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBvYmpl
Y3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU1N0cmluZyAqdXNlckluZm9KU09OVmFsdWUg
PSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAidXNlckluZm8iXTsKKyAg
ICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVj
dEZvcktleTpAInVzZXJJbmZvIl07CiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAotICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRl
SlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9
IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAgICBK
U1ZhbHVlUmVmIHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQgPSBuaWw7Ci0gICAgaWYgKFt1c2Vy
SW5mb0pTT05WYWx1ZSBsZW5ndGhdKSB7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBqc1VzZXJJbmZvSlNPTlZhbHVlKEFkb3B0LCBbdXNlckluZm9KU09OVmFsdWUgY3JlYXRlSlNT
dHJpbmdSZWZdKTsKLSAgICAgICAgdXNlckluZm9KU09OVmFsdWVBcmd1bWVudCA9IEpTVmFsdWVN
YWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwganNVc2VySW5mb0pTT05WYWx1ZS5nZXQoKSk7Ci0g
ICAgfQorICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgYWRvcHQoW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdS
ZWZdKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiB1c2VySW5mb0FyZ3VtZW50ID0gbWFrZU9iamVj
dFJlZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdXNlckluZm8pOwogICAgIGlmIChtX3BsYXRmb3Jt
RWxlbWVudCkgewogICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQgZ2V0cyB0aGUg
bm90aWZpY2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1syXTsKICAgICAgICAgYXJndW1lbnRzWzBdID0gbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50
OwotICAgICAgICBhcmd1bWVudHNbMV0gPSB1c2VySW5mb0pTT05WYWx1ZUFyZ3VtZW50OworICAg
ICAgICBhcmd1bWVudHNbMV0gPSB1c2VySW5mb0FyZ3VtZW50OwogICAgICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjayksIDAsIDIsIGFyZ3VtZW50cywgMCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0aGUgZWxlbWVudCwgbm90aWZpY2F0
aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1szXTsK
LSAgICAgICAgYXJndW1lbnRzWzBdID0gdG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cihXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShbbm90aWZpY2F0aW9uIG9iamVjdF0pKSk7Cisg
ICAgICAgIGFyZ3VtZW50c1swXSA9IHRvSlMoY29udGV4dCwgV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjcmVhdGUoW25vdGlmaWNhdGlvbiBvYmplY3RdKS5nZXQoKSk7CiAgICAgICAgIGFy
Z3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRz
WzJdID0gdXNlckluZm9KU09OVmFsdWVBcmd1bWVudDsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihtX25vdGlmaWNhdGlvbkZ1
bmN0aW9uQ2FsbGJhY2spLCAwLCAyLCBhcmd1bWVudHMsIDApOworICAgICAgICBhcmd1bWVudHNb
Ml0gPSB1c2VySW5mb0FyZ3VtZW50OworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNv
bnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjayksIDAsIDMsIGFyZ3VtZW50cywgMCk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255502</attachid>
            <date>2015-06-24 12:19:54 -0700</date>
            <delta_ts>2015-06-24 13:52:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>146177.patch</filename>
            <type>text/plain</type>
            <size>32191</size>
            <attacher name="Doug Russell">d_russell</attacher>
            
              <data encoding="base64">Y29tbWl0IDczZDUzNzRjZjVkZjAxMDViODVjOWFkMmVhN2NjM2I2M2ZmOThmYjkKQXV0aG9yOiBE
b3VnIFJ1c3NlbGwgPGRfcnVzc2VsbEBhcHBsZS5jb20+CkRhdGU6ICAgTW9uIEp1biAyMiAwOTo1
MzoxMCAyMDE1IC0wNzAwCgogICAgQnVnIDE0NjE3NwogICAgCiAgICBBWDogQVhPYmplY3RDYWNo
ZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCB3aGVu
IHBvc3RpbmcgYSBzZWxlY3Rpb24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3
ZWVuIHR3byBhY2Nlc3NpYmlsaXR5T2JqZWN0cwogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NjE3NwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NjBkNGI2Li5hODU3MGQ3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0
cnkgdG8gdXNlIGFuIHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0CisgICAgICAgIHdoZW4g
cG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVyIGJldHdl
ZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBBZGQgdGVzdCBmb3IgZm9yd2Fy
ZCBhbmQgYmFja3dhcmQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGFuZCBjb3JyZXNwb25kaW5nIG5v
dGlmaWNhdGlvbnMKKyAgICAgICAgY2hhbmdlIGVsZW1lbnQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L3NlbGVjdGlvbi1lbGVtZW50LXRhYmJpbmctdG8tbGluay1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1lbGVtZW50LXRh
YmJpbmctdG8tbGluay5odG1sOiBBZGRlZC4KKwogMjAxNS0wNi0yMiAgRGFuaWVsIEJhdGVzICA8
ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJIEF1dG9tYXRpb24gY2Fubm90IGZp
bmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25zCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVudC10YWJiaW5n
LXRvLWxpbmstZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmYwOWI1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1l
bnQtdGFiYmluZy10by1saW5rLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitvbmUgdHdv
CitUaGlzIHRlc3RzIHRoYXQgdGFiYmluZyBiZXR3ZWVuIGxpbmtzIGluY2x1ZGVzIGEgcmVsZXZh
bnQgYWNjZXNzaWJpbGl0eU9iamVjdCBpbiB0aGUgdXNlckluZm8gd2hlbiBvbiB0aGUgYm91bmRh
cnkgYmV0d2VlbiBhbiBpZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgYW5kIGFuIHVuaWdub3Jl
ZCBhY2Nlc3NpYmlsaXR5T2JqZWN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBhZGRlZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hh
bmdlRWxlbWVudE9uZSwgIkFYUm9sZTogQVhMaW5rIikuaXNFcXVhbChsaW5rVHdvKSBpcyB0cnVl
CitQQVNTIGFuY2VzdG9yV2l0aFJvbGUoY2hhbmdlRWxlbWVudFR3bywgIkFYUm9sZTogQVhMaW5r
IikuaXNFcXVhbChsaW5rT25lKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWxlY3Rpb24tZWxlbWVu
dC10YWJiaW5nLXRvLWxpbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNGViNTBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0bWwKQEAgLTAs
MCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2Pgor
PGEgaHJlZj0iIiBpZD0ib25lIj5vbmU8L2E+Cis8YSBocmVmPSIiIGlkPSJ0d28iPnR3bzwvYT4K
KzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGRpdiBpZD0ibm90aWZpY2F0aW9ucyI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgYmV0d2VlbiBsaW5rcyBpbmNsdWRl
cyBhIHJlbGV2YW50IGFjY2Vzc2liaWxpdHlPYmplY3QgaW4gdGhlIHVzZXJJbmZvIHdoZW4gb24g
dGhlIGJvdW5kYXJ5IGJldHdlZW4gYW4gaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IGFuZCBh
biB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdC4iKTsKKworICAgIHZhciBheFRleHRDaGFu
Z2VFbGVtZW50ID0gMDsKKyAgICB2YXIgd2ViQXJlYSA9IDA7CisgICAgdmFyIGNoYW5nZUVsZW1l
bnRPbmUgPSAwOworICAgIHZhciBjaGFuZ2VFbGVtZW50VHdvID0gMDsKKyAgICB2YXIgbGlua1R3
byA9IDA7CisgICAgdmFyIGxpbmtPbmUgPSAwOworICAgIHZhciBjb3VudCA9IDA7CisKKyAgICBm
dW5jdGlvbiBhbmNlc3RvcldpdGhSb2xlKGF4RWxlbWVudCwgcm9sZSkgeworICAgICAgICB2YXIg
YW5jZXN0b3IgPSBheEVsZW1lbnQ7CisgICAgICAgIHdoaWxlIChhbmNlc3RvcikgeworICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLnJvbGUgPT0gcm9sZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50RWxlbWVudCgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhbmNlc3RvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3Rp
ZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24sIHVzZXJJbmZvKSB7CisgICAgICAgIGlmIChu
b3RpZmljYXRpb24gPT0gIkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCIpIHsKKyAgICAgICAgICAgIGNv
dW50Kys7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgICAgIGNo
YW5nZUVsZW1lbnRPbmUgPSB1c2VySW5mb1siQVhUZXh0Q2hhbmdlRWxlbWVudCJdOworICAgICAg
ICAgICAgICAgIGxpbmtUd28gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInR3byIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJhbmNlc3RvcldpdGhS
b2xlKGNoYW5nZUVsZW1lbnRPbmUsIFwiQVhSb2xlOiBBWExpbmtcIikuaXNFcXVhbChsaW5rVHdv
KSIsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VFbGVtZW50VHdvID0gdXNlckluZm9bIkFYVGV4dENoYW5nZUVsZW1l
bnQiXTsKKyAgICAgICAgICAgICAgICBsaW5rT25lID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJvbmUiKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgi
YW5jZXN0b3JXaXRoUm9sZShjaGFuZ2VFbGVtZW50VHdvLCBcIkFYUm9sZTogQVhMaW5rXCIpLmlz
RXF1YWwobGlua09uZSkiLCAidHJ1ZSIpOworICAgICAgICAgICAgICAgIHdlYkFyZWEucmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRU
YWJUb0xpbmtzUHJlZmVyZW5jZUtleSIsIDEpOworCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgd2ViQXJl
YSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsK
KyAgICAgICAgd2ViQXJlYS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYQ2FyZXRCcm93c2luZ0Vu
YWJsZWQiLCB0cnVlKQorCisgICAgICAgIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b25lIik7CisgICAgICAgIGxpbmsuZm9jdXMoKTsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmlj
YXRpb24gPSB3ZWJBcmVhLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG5vdGlmaWNhdGlvbkNhbGxi
YWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKwor
ICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJcdCIpOworICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJcdCIsIFsic2hpZnRLZXkiXSk7CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Jl
dGFpblB0ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCmluZGV4
IGYyM2UzMmYuLjI2MmM0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNSZXRhaW5QdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKQEAgLTc1LDYgKzc1LDE2IEBAIHByaXZhdGU6CiAgICAgVCBtX3B0cjsKIH07CiAKK2lubGlu
ZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYgbykKK3sKKyAgICBy
ZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBvKTsKK30KKworaW5saW5lIEpT
UmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4gYWRvcHQoSlNHbG9iYWxDb250ZXh0UmVmIG8p
Cit7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTR2xvYmFsQ29udGV4dFJlZj4oQWRvcHQsIG8p
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpTUmV0
YWluUHRyKGNvbnN0IEpTUmV0YWluUHRyJiBvKQogICAgIDogbV9wdHIoby5tX3B0cikKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVkYzBkNWMuLmEzNDA1MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA2LTIzICBEb3VnIFJ1c3NlbGwgIDxk
X3J1c3NlbGxAYXBwbGUuY29tPgorCisgICAgICAgIEJ1ZyAxNDYxNzcgLSBBWDogQVhPYmplY3RD
YWNoZSBzaG91bGQgdHJ5IHRvIHVzZSBhbiB1bmlnbm9yZWQgYWNjZXNzaWJpbGl0eU9iamVjdCAK
KyAgICAgICAgd2hlbiBwb3N0aW5nIGEgc2VsZWN0aW9uIG5vdGlmaWNhdGlvbiB3aGVuIG9uIHRo
ZSBib3JkZXIgYmV0d2VlbiB0d28gYWNjZXNzaWJpbGl0eU9iamVjdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE3NworCisgICAgICAgIEFkZCBh
biBhZG9wdCgpIGZ1bmN0aW9uIHRvIHNpbXBsaWZ5IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB7
IEFkb3B0LCBzdHJpbmcgfSB0byBhZG9wdChzdHJpbmcpLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTUmV0YWluUHRyLmg6CisgICAgICAg
IChhZG9wdCk6CisKIDIwMTUtMDYtMjAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgW0VTNl0gRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IG5lZWQgdG8g
YWNjZXB0IGl0ZXJhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDcxNmFlNzguLjkzMDZiMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMyBAQAorMjAxNS0wNi0yMyAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxs
QGFwcGxlLmNvbT4KKworICAgICAgICBCdWcgMTQ2MTc3IC0gQVg6IEFYT2JqZWN0Q2FjaGUgc2hv
dWxkIHRyeSB0byB1c2UgYW4gdW5pZ25vcmVkIGFjY2Vzc2liaWxpdHlPYmplY3QgCisgICAgICAg
IHdoZW4gcG9zdGluZyBhIHNlbGVjdGlvbiBub3RpZmljYXRpb24gd2hlbiBvbiB0aGUgYm9yZGVy
IGJldHdlZW4gdHdvIGFjY2Vzc2liaWxpdHlPYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcG9zaXRpb24gdG8gYmUg
cGFzc2VkIGZvciBzZWxlY3Rpb24gY2hhbmdlcyB0byBhbGxvdyBjaGVja2luZy4KKyAgICAgICAg
Zm9yIGJvdW5kYXJpZXMgaW4gdGhlIGNhc2Ugb2YgaWdub3JlZCBlbGVtZW50cy4KKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBmb3IgdW5pZ25vcmVkIHNpYmxpbmdzIG9mIEFjY2Vz
c2liaWxpdHlPYmplY3RzLgorICAgICAgICBJbmNsdWRlIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3Jh
cHBlcnMgaW4gbm90aWZpY2F0aW9ucyBmb3IgdGVzdHMuCisKKyAgICAgICAgVGVzdDogcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLWVsZW1lbnQtdGFiYmluZy10by1saW5rLmh0
bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTaWJsaW5nVW5pZ25vcmVkKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW06Cisg
ICAgICAgIChpc1ZhbHVlVHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChhcnJheVJlbW92aW5nTm9u
U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVk
VHlwZXMpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgYWNj
ZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjp1c2VySW5mbzpdKToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKToKKwogMjAxNS0w
Ni0yMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFVJ
IEF1dG9tYXRpb24gY2Fubm90IGZpbmQgQXV0b0ZpbGwgb3Igc2VhcmNoIGNhbmNlbCBidXR0b25z
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRl
eCA0Nzc1MGRkLi5jZGZiYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTEwMDYsMTYgKzEwMDYsNTYgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IEFY
VGV4dFN0YXQKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlcygpOwogCisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihn
ZXRPckNyZWF0ZShub2RlKSwgaW50ZW50LCBzZWxlY3Rpb24pOworI2Vsc2UKKyAgICBwb3N0Tm90
aWZpY2F0aW9uKG5vZGUtPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRUZXh0
Q2hhbmdlZCwgVGFyZ2V0T2JzZXJ2YWJsZVBhcmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGludGVu
dCk7CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBBWE9i
amVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5v
ZGUpOworICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkp
IHsKKyAgICAgICAgaWYgKHBvc2l0aW9uLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkg
eworICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG5leHRTaWJsaW5nID0gb2Jq
ZWN0LT5uZXh0U2libGluZ1VuaWdub3JlZCgxKSkKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBu
ZXh0U2libGluZzsKKyAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbi5hdEZpcnN0RWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
cHJldmlvdXNTaWJsaW5nID0gb2JqZWN0LT5wcmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoMSkpCisg
ICAgICAgICAgICAgICAgb2JqZWN0ID0gcHJldmlvdXNTaWJsaW5nOworICAgICAgICB9CisgICAg
fQorCisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3QsIGludGVudCwg
c2VsZWN0aW9uKTsKKyNlbHNlCisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihu
b2RlLCBpbnRlbnQsIHNlbGVjdGlvbik7CisjZW5kaWYKK30KKwordm9pZCBBWE9iamVjdENhY2hl
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVzKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAob2JqZWN0KSB7CiAg
ICAgICAgIGlmIChpc1Bhc3N3b3JkRmllbGRPckNvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZChvYmpl
Y3QpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2Vy
dmFibGVPYmplY3QoKTsKKworICAgICAgICBpZiAoYXV0byBvYnNlcnZhYmxlT2JqZWN0ID0gb2Jq
ZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCkpCisgICAgICAgICAgICBvYmplY3QgPSBvYnNlcnZhYmxl
T2JqZWN0OwogICAgIH0KIAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNh
dGlvbihvYmplY3QsIChpbnRlbnQudHlwZSA9PSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVVbmtub3du
IHx8IG1faXNTeW5jaHJvbml6aW5nU2VsZWN0aW9uKSA/IG1fdGV4dFNlbGVjdGlvbkludGVudCA6
IGludGVudCwgc2VsZWN0aW9uKTsKICNlbHNlCi0gICAgcG9zdE5vdGlmaWNhdGlvbihub2RlLT5y
ZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIFRhcmdldE9i
c2VydmFibGVQYXJlbnQpOworICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9Q
QVJBTShpbnRlbnQpOwogICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDY3ZTA3Y2Yu
LmYyYWFiYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oCkBAIC0yMDUsNiArMjA1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlm
aWNhdGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGRlbGV0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4
dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUlu
dGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAogICAgIGVudW0gQVhMb2FkaW5n
RXZlbnQgewogICAgICAgICBBWExvYWRpbmdTdGFydGVkLApAQCAtMjU5LDYgKzI2MCw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIG5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKCk7CiAKKyAgICB2
b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCos
IGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OworCiAgICAgYm9vbCBlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihBY2Nl
c3NpYmlsaXR5T2JqZWN0Kik7CiAgICAgdm9pZCBwYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1l
ckZpcmVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDM0ZTYzZDYuLmY3NGI3NTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAt
NDU3LDYgKzQ1NywzMCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpwYXJlbnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdAogICAgIHJldHVybiBwYXJlbnQ7CiB9CiAK
K0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2libGlu
Z1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
cHJldmlvdXM7CisgICAgQVNTRVJUKGxpbWl0ID49IDApOworICAgIGZvciAocHJldmlvdXMgPSBw
cmV2aW91c1NpYmxpbmcoKTsgcHJldmlvdXMgJiYgcHJldmlvdXMtPmFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKTsgcHJldmlvdXMgPSBwcmV2aW91cy0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAg
ICAgbGltaXQtLTsKKyAgICAgICAgaWYgKGxpbWl0IDw9IDApCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHByZXZpb3VzOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2libGluZ1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0
Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbmV4dDsKKyAgICBBU1NFUlQobGltaXQgPj0g
MCk7CisgICAgZm9yIChuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dCAmJiBuZXh0LT5hY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCk7IG5leHQgPSBuZXh0LT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGxpbWl0LS07CisgICAgICAgIGlmIChsaW1pdCA8PSAwKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBuZXh0OworfQorCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpmaXJzdEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZShjb25zdCBOb2RlKiBu
b2RlKQogewogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggNmNiZDFhMC4uMTAyZGI5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgK
QEAgLTY0NSw2ICs2NDUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXh0U2libGluZygpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG5leHRTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25z
dDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdFVuaWdu
b3JlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2Jq
ZWN0SWZFeGlzdHMoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UubW0KaW5kZXggZThiMmVmMC4uOTM1MzRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpAQCAtMzk0LDE3ICszOTQsMjIgQEAg
c3RhdGljIEJPT0wgYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM7CiAgICAg
ICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFt
ZSB1c2VySW5mbzpuaWxdOwogfQogCi1zdGF0aWMgTlNBcnJheSAqYXJyYXlSZW1vdmluZ05vbkpT
T05UeXBlcyhOU0FycmF5ICphcnJheSkKK3N0YXRpYyBib29sIGlzVmFsdWVUeXBlU3VwcG9ydGVk
KGlkIHZhbHVlKQoreworICAgIHJldHVybiBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdXSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSB8fCBbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGNsYXNz
XV07Cit9CisKK3N0YXRpYyBOU0FycmF5ICphcnJheVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXMo
TlNBcnJheSAqYXJyYXkpCiB7CiAgICAgQVNTRVJUKFthcnJheSBpc0tpbmRPZkNsYXNzOltOU0Fy
cmF5IGNsYXNzXV0pOwogICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlQXJyYXkgPSBbYXJyYXkg
bXV0YWJsZUNvcHldOwogICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IFttdXRhYmxlQXJy
YXkgY291bnRdOykgewogICAgICAgICBpZCB2YWx1ZSA9IFttdXRhYmxlQXJyYXkgb2JqZWN0QXRJ
bmRleDppXTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkg
Y2xhc3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVjdEF0SW5kZXg6
aSB3aXRoT2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1ZSldOworICAg
ICAgICAgICAgW211dGFibGVBcnJheSByZXBsYWNlT2JqZWN0QXRJbmRleDppIHdpdGhPYmplY3Q6
ZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVkVHlwZXModmFsdWUpXTsKICAgICAgICAgZWxz
ZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAg
IFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVjdEF0SW5kZXg6aSB3aXRoT2JqZWN0OmFycmF5UmVt
b3ZpbmdOb25KU09OVHlwZXModmFsdWUpXTsKLSAgICAgICAgZWxzZSBpZiAoIShbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCBbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNO
dW1iZXIgY2xhc3NdXSkpIHsKKyAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgcmVwbGFjZU9iamVj
dEF0SW5kZXg6aSB3aXRoT2JqZWN0OmFycmF5UmVtb3ZpbmdOb25TdXBwb3J0ZWRUeXBlcyh2YWx1
ZSldOworICAgICAgICBlbHNlIGlmICghaXNWYWx1ZVR5cGVTdXBwb3J0ZWQodmFsdWUpKSB7CiAg
ICAgICAgICAgICBbbXV0YWJsZUFycmF5IHJlbW92ZU9iamVjdEF0SW5kZXg6aV07CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDEzLDE3ICs0MTgsMTkgQEAgc3RhdGljIE5T
QXJyYXkgKmFycmF5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNBcnJheSAqYXJyYXkpCiAgICAgcmV0
dXJuIFttdXRhYmxlQXJyYXkgYXV0b3JlbGVhc2VdOwogfQogCi1zdGF0aWMgTlNEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5UmVtb3ZpbmdOb25KU09OVHlwZXMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
KQorc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeVJlbW92aW5nTm9uU3VwcG9ydGVkVHlw
ZXMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogeworICAgIGlmICghZGljdGlvbmFyeSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICBBU1NFUlQoW2RpY3Rpb25hcnkgaXNLaW5kT2ZDbGFzczpb
TlNEaWN0aW9uYXJ5IGNsYXNzXV0pOwogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKm11dGFibGVE
aWN0aW9uYXJ5ID0gW2RpY3Rpb25hcnkgbXV0YWJsZUNvcHldOwogICAgIGZvciAoTlNTdHJpbmcg
KmtleSBpbiBkaWN0aW9uYXJ5KSB7CiAgICAgICAgIGlkIHZhbHVlID0gW2RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OmtleV07CiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0
OmRpY3Rpb25hcnlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1ZSkgZm9yS2V5OmtleV07CisgICAg
ICAgICAgICBbbXV0YWJsZURpY3Rpb25hcnkgc2V0T2JqZWN0OmRpY3Rpb25hcnlSZW1vdmluZ05v
blN1cHBvcnRlZFR5cGVzKHZhbHVlKSBmb3JLZXk6a2V5XTsKICAgICAgICAgZWxzZSBpZiAoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAgIFttdXRhYmxl
RGljdGlvbmFyeSBzZXRPYmplY3Q6YXJyYXlSZW1vdmluZ05vbkpTT05UeXBlcyh2YWx1ZSkgZm9y
S2V5OmtleV07Ci0gICAgICAgIGVsc2UgaWYgKCEoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pKQor
ICAgICAgICAgICAgW211dGFibGVEaWN0aW9uYXJ5IHNldE9iamVjdDphcnJheVJlbW92aW5nTm9u
U3VwcG9ydGVkVHlwZXModmFsdWUpIGZvcktleTprZXldOworICAgICAgICBlbHNlIGlmICghaXNW
YWx1ZVR5cGVTdXBwb3J0ZWQodmFsdWUpKQogICAgICAgICAgICAgW211dGFibGVEaWN0aW9uYXJ5
IHJlbW92ZU9iamVjdEZvcktleTprZXldOwogICAgIH0KICAgICByZXR1cm4gW211dGFibGVEaWN0
aW9uYXJ5IGF1dG9yZWxlYXNlXTsKQEAgLTQzMywxOCArNDQwLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVzKE5TRGljdGlvbmFyeSAqZGljdGlv
bmFyeSkKIHsKICAgICBpZiAoYWNjZXNzaWJpbGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMp
IHsKICAgICAgICAgQVNTRVJUKG5vdGlmaWNhdGlvbk5hbWUpOwotICAgICAgICBOU0RpY3Rpb25h
cnkgKmluZm8gPSBuaWw7Ci0gICAgICAgIGlmICh1c2VySW5mbykgewotICAgICAgICAgICAgTlNE
YXRhICp1c2VySW5mb0RhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmpl
Y3Q6ZGljdGlvbmFyeVJlbW92aW5nTm9uSlNPTlR5cGVzKHVzZXJJbmZvKSBvcHRpb25zOihOU0pT
T05Xcml0aW5nT3B0aW9ucykwIGVycm9yOm5pbF07Ci0gICAgICAgICAgICBpZiAodXNlckluZm9E
YXRhKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKnVzZXJJbmZvU3RyaW5nID0gW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOnVzZXJJbmZvRGF0YSBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ107Ci0gICAgICAgICAgICAgICAgaWYgKHVzZXJJbmZvU3RyaW5nKQotICAgICAg
ICAgICAgICAgICAgICBpbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIsIHVzZXJJbmZvU3Ry
aW5nLCBAInVzZXJJbmZvIiwgbmlsXTsKLSAgICAgICAgICAgICAgICBbdXNlckluZm9TdHJpbmcg
cmVsZWFzZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFpbmZvKQot
ICAgICAgICAgICAgaW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5k
S2V5czpub3RpZmljYXRpb25OYW1lLCBAIm5vdGlmaWNhdGlvbk5hbWUiLCBuaWxdOworICAgICAg
ICB1c2VySW5mbyA9IGRpY3Rpb25hcnlSZW1vdmluZ05vblN1cHBvcnRlZFR5cGVzKHVzZXJJbmZv
KTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICppbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0aW9uTmFtZSIs
IHVzZXJJbmZvLCBAInVzZXJJbmZvIiwgbmlsXTsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpAIkFYRFJUTm90aWZpY2F0
aW9uIiBvYmplY3Q6c2VsZiB1c2VySW5mbzppbmZvXTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9GcmFtZVNlbGVjdGlvbk1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9uTWFjLm1tCmluZGV4IDFhODJlZjkuLjY5
ZWIyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0
aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0ZyYW1lU2VsZWN0aW9u
TWFjLm1tCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vz
c2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuCiAKICAgICBp
ZiAobV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5p
c05vdE51bGwoKSkgewogICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVu
dC0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCksIGludGVudCwgbV9zZWxlY3Rpb24pOworICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgaW50ZW50LCBtX3NlbGVj
dGlvbik7CiAgICAgfQogCiAjaWYgIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMWY1NDU4Li5mZTZhZjFkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTUtMDYtMjMgIERvdWcgUnVzc2VsbCAgPGRfcnVzc2VsbEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQnVnIDE0NjE3NyAtIEFYOiBBWE9iamVjdENhY2hlIHNob3VsZCB0cnkgdG8gdXNlIGFu
IHVuaWdub3JlZCBhY2Nlc3NpYmlsaXR5T2JqZWN0IAorICAgICAgICB3aGVuIHBvc3RpbmcgYSBz
ZWxlY3Rpb24gbm90aWZpY2F0aW9uIHdoZW4gb24gdGhlIGJvcmRlciBiZXR3ZWVuIHR3byBhY2Nl
c3NpYmlsaXR5T2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ2MTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIG1hcHBpbmcgV2ViQ29yZSBBY2Nlc3NpYmlsaXR5IHR5
cGVzIGludG8gSlNWYWx1ZVJlZiB0eXBlcworICAgICAgICBzbyB0aGV5IGNhbiBiZSB1c2VkIGlu
IHRlc3RzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyLm1tOgorICAgICAgICAod2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJDbGFzcyk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIHN0
YXJ0T2JzZXJ2aW5nXSk6CisgICAgICAgIChtYWtlVmFsdWVSZWZGb3JWYWx1ZSk6CisgICAgICAg
IChtYWtlQXJyYXlSZWZGb3JBcnJheSk6CisgICAgICAgIChtYWtlT2JqZWN0UmVmRm9yRGljdGlv
bmFyeSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3Rp
ZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbToKKyAgICAgICAg
KHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MpOgorICAgICAgICAoLVtBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBzdGFydE9ic2VydmluZ10pOgorICAgICAgICAobWFr
ZVZhbHVlUmVmRm9yVmFsdWUpOgorICAgICAgICAobWFrZUFycmF5UmVmRm9yQXJyYXkpOgorICAg
ICAgICAobWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkpOgorICAgICAgICAoLVtBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlciBfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6XSk6CisKIDIwMTUt
MDYtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTiAocjE3Mjk3NSk6IG5hdmlnYXRvci5sYW5ndWFnZSB1bmFibGUgdG8gdGVsbCByZWdp
b24gZm9yIFRyYWRpdGlvbmFsIENoaW5lc2UgdXNlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQpp
bmRleCAxYmU4MDY3Li40OTQ0NDc1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCkBAIC0zNyw2
ICszNyw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZy
YW1lLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KIAogQGludGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
ZGRpdGlvbnMpCkBAIC05MywxNCArOTQsMTkgQEAKICAgICBKU1ZhbHVlUHJvdGVjdChbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOwogfQog
CitzdGF0aWMgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCit7Cisg
ICAgc3RhdGljIENsYXNzIGNscyA9IG9iamNfZ2V0Q2xhc3MoIldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIik7CisgICAgQVNTRVJUKGNscyk7CisgICAgcmV0dXJuIGNsczsKK30KKwogLSAo
dm9pZClzdGFydE9ic2VydmluZwogewogICAgIC8vIE9uY2Ugd2Ugc3RhcnQgcmVxdWVzdGluZyBu
b3RpZmljYXRpb25zLCBpdCdzIG9uIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHByb2dyYW0uCiAg
ICAgLy8gVGhpcyBpcyB0byBhdm9pZCBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGVzdHMg
dHVybmluZyB0aGlzIGZsYWcgb24gYW5kIG9mZi4gSW5zdGVhZAogICAgIC8vIEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIGNhbiBpZ25vcmUgZXZlbnRzIGl0IGRvZXNuJ3QgY2FyZSBh
Ym91dC4KLSAgICBpZCB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0gTlNDbGFz
c0Zyb21TdHJpbmcoQCJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciIpOwotICAgIEFTU0VS
VCh3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKTsKLSAgICBbd2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJDbGFzcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZp
Y2F0aW9uczpZRVNdOworICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkg
YWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKICAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKF9ub3RpZmljYXRpb25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5vdGlmaWNh
dGlvbiIgb2JqZWN0Om5pbF07CiB9CiAKQEAgLTEwOSw2ICsxMTUsNDggQEAKICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogfQog
CitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlVmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgaWQgdmFsdWUpCit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgYWRv
cHQoW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIGlmIChbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBpZiAoIXN0cmNtcChbdmFs
dWUgb2JqQ1R5cGVdLCBAZW5jb2RlKEJPT0wpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZUJvb2xlYW4oY29udGV4dCwgW3ZhbHVlIGJvb2xWYWx1ZV0pOworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgW3ZhbHVlIGRvdWJsZVZhbHVlXSk7CisgICAgfQor
ICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckNsYXNzKCldKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWFrZUpT
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250ZXh0LCB2YWx1ZSk7CisgICAgaWYgKFt2YWx1ZSBp
c0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG1ha2VP
YmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNvbnRleHQsIHZhbHVlKTsKKyAgICBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG1ha2VBcnJheVJl
ZkZvckFycmF5KGNvbnRleHQsIHZhbHVlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3Rh
dGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IE5TQXJyYXkgKmFycmF5KQoreworICAgIE5TVUludGVnZXIgY291bnQgPSBhcnJheS5jb3VudDsK
KyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tjb3VudF07CisKKyAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBhcmd1bWVudHNbaV0gPSBtYWtlVmFsdWVS
ZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICByZXR1
cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCit7CisgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwor
CisgICAgW2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNT
dHJpbmcgKmtleSwgaWQgb2JqLCBCT09MICpzdG9wKQorICAgIHsKKyAgICAgICAgaWYgKEpTVmFs
dWVSZWYgcHJvcGVydHlWYWx1ZSA9IG1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIG9iaikp
CisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgYWRvcHQo
W2tleSBjcmVhdGVKU1N0cmluZ1JlZl0pLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIH1dOworCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKwogLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCiB7CiAgICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNh
dGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOwpAQCAtMTE3
LDI3ICsxNjUsMjIgQEAKICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVs
ZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBvYmplY3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBO
U1N0cmluZyAqdXNlckluZm9KU09OVmFsdWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2Jq
ZWN0Rm9yS2V5OkAidXNlckluZm8iXTsKKyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tu
b3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpAInVzZXJJbmZvIl07CiAKLSAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRp
b25OYW1lIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25O
YW1lQXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRd
LCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0gICAgSlNWYWx1ZVJlZiB1c2VySW5mb0pTT05WYWx1
ZUFyZ3VtZW50ID0gbmlsOwotICAgIGlmIChbdXNlckluZm9KU09OVmFsdWUgbGVuZ3RoXSkgewot
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNVc2VySW5mb0pTT05WYWx1ZShBZG9w
dCwgW3VzZXJJbmZvSlNPTlZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgICAgIHVzZXJJ
bmZvSlNPTlZhbHVlQXJndW1lbnQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKFttYWluRnJh
bWUgZ2xvYmFsQ29udGV4dF0sIGpzVXNlckluZm9KU09OVmFsdWUuZ2V0KCkpOwotICAgIH0KKyAg
ICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5n
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGFkb3B0KFtub3RpZmljYXRpb25OYW1lIGNyZWF0
ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgdXNlckluZm9Bcmd1bWVudCA9
IG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIHVz
ZXJJbmZvKTsKICAgICBpZiAobV9wbGF0Zm9ybUVsZW1lbnQpIHsKICAgICAgICAgLy8gTGlzdGVu
ZXIgZm9yIG9uZSBlbGVtZW50IGdldHMgdGhlIG5vdGlmaWNhdGlvbiBuYW1lIGFuZCB1c2VySW5m
by4KICAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl07CiAgICAgICAgIGFyZ3VtZW50c1sw
XSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1lbnRzWzFdID0gdXNl
ckluZm9KU09OVmFsdWVBcmd1bWVudDsKKyAgICAgICAgYXJndW1lbnRzWzFdID0gdXNlckluZm9B
cmd1bWVudDsKICAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIDAsIDIsIGFyZ3VtZW50
cywgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0
aGUgZWxlbWVudCwgbm90aWZpY2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1szXTsKICAgICAgICAgYXJndW1lbnRzWzBdID0gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChbbWFpbkZyYW1lIGdsb2Jh
bENvbnRleHRdLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFtub3RpZmljYXRpb24gb2JqZWN0XSkp
OwogICAgICAgICBhcmd1bWVudHNbMV0gPSBub3RpZmljYXRpb25OYW1lQXJndW1lbnQ7Ci0gICAg
ICAgIGFyZ3VtZW50c1syXSA9IHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQ7CisgICAgICAgIGFy
Z3VtZW50c1syXSA9IHVzZXJJbmZvQXJndW1lbnQ7CiAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrLCAwLCAyLCBhcmd1bWVudHMsIDApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KaW5kZXggZjEzMDM2Ni4uMDFl
OThkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIubW0KQEAgLTM5LDYgKzM5LDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tCdW5kbGVGcmFtZS5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQWRkaXRpb25zKQpAQCAtMTAxLDE0ICsxMDIsMTkgQEAKICAg
ICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sp
OwogfQogCitzdGF0aWMgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygp
Cit7CisgICAgc3RhdGljIENsYXNzIGNscyA9IG9iamNfZ2V0Q2xhc3MoIldlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIik7CisgICAgQVNTRVJUKGNscyk7CisgICAgcmV0dXJuIGNsczsKK30K
KwogLSAodm9pZClzdGFydE9ic2VydmluZwogewogICAgIC8vIE9uY2Ugd2Ugc3RhcnQgcmVxdWVz
dGluZyBub3RpZmljYXRpb25zLCBpdCdzIG9uIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHByb2dy
YW0uCiAgICAgLy8gVGhpcyBpcyB0byBhdm9pZCBhbnkgcmFjZSBjb25kaXRpb25zIGJldHdlZW4g
dGVzdHMgdHVybmluZyB0aGlzIGZsYWcgb24gYW5kIG9mZi4gSW5zdGVhZAogICAgIC8vIEFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGNhbiBpZ25vcmUgZXZlbnRzIGl0IGRvZXNuJ3Qg
Y2FyZSBhYm91dC4KLSAgICBpZCB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzID0g
TlNDbGFzc0Zyb21TdHJpbmcoQCJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciIpOwotICAg
IEFTU0VSVCh3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKTsKLSAgICBbd2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcyBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uczpZRVNdOworICAgIFt3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNs
YXNzKCkgYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6WUVTXTsKICAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKF9ub3RpZmljYXRpb25SZWNlaXZlZDopIG5hbWU6QCJBWERSVE5v
dGlmaWNhdGlvbiIgb2JqZWN0Om5pbF07CiB9CiAKQEAgLTExNyw2ICsxMjMsNDggQEAKICAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZd
OwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlVmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRS
ZWYgY29udGV4dCwgaWQgdmFsdWUpCit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U1N0cmluZyBjbGFzc11dKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4
dCwgYWRvcHQoW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXSkuZ2V0KCkpOworICAgIGlmIChbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkgeworICAgICAgICBpZiAoIXN0cmNt
cChbdmFsdWUgb2JqQ1R5cGVdLCBAZW5jb2RlKEJPT0wpKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgW3ZhbHVlIGJvb2xWYWx1ZV0pOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgW3ZhbHVlIGRvdWJsZVZhbHVlXSk7Cisg
ICAgfQorICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckNsYXNzKCldKQorICAgICAgICByZXR1cm4gdG9KUyhjb250ZXh0LCBXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4o
dmFsdWUpKS5nZXQoKSk7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25h
cnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNv
bnRleHQsIHZhbHVlKTsKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xh
c3NdXSkKKyAgICAgICAgcmV0dXJuIG1ha2VBcnJheVJlZkZvckFycmF5KGNvbnRleHQsIHZhbHVl
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFrZUFycmF5
UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQoreworICAg
IE5TVUludGVnZXIgY291bnQgPSBhcnJheS5jb3VudDsKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tjb3VudF07CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICBhcmd1bWVudHNbaV0gPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJy
YXkgb2JqZWN0QXRJbmRleDppXSk7CisKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXkoY29u
dGV4dCwgY291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVm
IG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rp
b25hcnkgKmRpY3Rpb25hcnkpCit7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNPYmplY3RN
YWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgW2RpY3Rpb25hcnkgZW51bWVy
YXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmtleSwgaWQgb2JqLCBCT09M
ICpzdG9wKQorICAgIHsKKyAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9IG1h
a2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIG9iaikpCisgICAgICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgYWRvcHQoW2tleSBjcmVhdGVKU1N0cmluZ1JlZl0p
LmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIp
OworICAgIH1dOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwogLSAodm9pZClfbm90aWZpY2F0
aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAgICAgTlNTdHJp
bmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9y
S2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOwpAQCAtMTI1LDMxICsxNzMsMjYgQEAKICAgICBpZiAo
bV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBv
YmplY3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU1N0cmluZyAqdXNlckluZm9KU09OVmFs
dWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAidXNlckluZm8iXTsK
KyAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tub3RpZmljYXRpb24gdXNlckluZm9dIG9i
amVjdEZvcktleTpAInVzZXJJbmZvIl07CiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3Jl
YXRlSlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVu
dCA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKLSAg
ICBKU1ZhbHVlUmVmIHVzZXJJbmZvSlNPTlZhbHVlQXJndW1lbnQgPSBuaWw7Ci0gICAgaWYgKFt1
c2VySW5mb0pTT05WYWx1ZSBsZW5ndGhdKSB7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBqc1VzZXJJbmZvSlNPTlZhbHVlKEFkb3B0LCBbdXNlckluZm9KU09OVmFsdWUgY3JlYXRl
SlNTdHJpbmdSZWZdKTsKLSAgICAgICAgdXNlckluZm9KU09OVmFsdWVBcmd1bWVudCA9IEpTVmFs
dWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwganNVc2VySW5mb0pTT05WYWx1ZS5nZXQoKSk7
Ci0gICAgfQorICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50ID0gSlNWYWx1
ZU1ha2VTdHJpbmcoY29udGV4dCwgYWRvcHQoW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJp
bmdSZWZdKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiB1c2VySW5mb0FyZ3VtZW50ID0gbWFrZU9i
amVjdFJlZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdXNlckluZm8pOwogICAgIGlmIChtX3BsYXRm
b3JtRWxlbWVudCkgewogICAgICAgICAvLyBMaXN0ZW5lciBmb3Igb25lIGVsZW1lbnQgZ2V0cyB0
aGUgbm90aWZpY2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1syXTsKICAgICAgICAgYXJndW1lbnRzWzBdID0gbm90aWZpY2F0aW9uTmFtZUFyZ3Vt
ZW50OwotICAgICAgICBhcmd1bWVudHNbMV0gPSB1c2VySW5mb0pTT05WYWx1ZUFyZ3VtZW50Owor
ICAgICAgICBhcmd1bWVudHNbMV0gPSB1c2VySW5mb0FyZ3VtZW50OwogICAgICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjayksIDAsIDIsIGFyZ3VtZW50cywgMCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gQSBnbG9iYWwgbGlzdGVuZXIgZ2V0cyB0aGUgZWxlbWVudCwgbm90aWZp
Y2F0aW9uIG5hbWUgYW5kIHVzZXJJbmZvLgogICAgICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1sz
XTsKLSAgICAgICAgYXJndW1lbnRzWzBdID0gdG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cihXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShbbm90aWZpY2F0aW9uIG9iamVjdF0pKSk7
CisgICAgICAgIGFyZ3VtZW50c1swXSA9IHRvSlMoY29udGV4dCwgV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjcmVhdGUoW25vdGlmaWNhdGlvbiBvYmplY3RdKS5nZXQoKSk7CiAgICAgICAg
IGFyZ3VtZW50c1sxXSA9IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgYXJndW1l
bnRzWzJdID0gdXNlckluZm9KU09OVmFsdWVBcmd1bWVudDsKLSAgICAgICAgSlNPYmplY3RDYWxs
QXNGdW5jdGlvbihjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihtX25vdGlmaWNhdGlv
bkZ1bmN0aW9uQ2FsbGJhY2spLCAwLCAyLCBhcmd1bWVudHMsIDApOworICAgICAgICBhcmd1bWVu
dHNbMl0gPSB1c2VySW5mb0FyZ3VtZW50OworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KG1fbm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjayksIDAsIDMsIGFyZ3VtZW50cywgMCk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>