<?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>93476</bug_id>
          
          <creation_ts>2012-08-08 07:24:45 -0700</creation_ts>
          <short_desc>[Qt] Port meta method/signal/slot handling in run-time bridge to use JSC C API</short_desc>
          <delta_ts>2012-08-13 10:54:12 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60842</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>cmarcelo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>690291</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-08 07:24:45 -0700</bug_when>
    <thetext>[Qt] Port meta method/signal/slot handling in run-time bridge to use JSC C API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691531</commentid>
    <comment_count>1</comment_count>
      <attachid>157476</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-09 10:05:54 -0700</bug_when>
    <thetext>Created attachment 157476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691557</commentid>
    <comment_count>2</comment_count>
      <attachid>157476</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-09 10:30:23 -0700</bug_when>
    <thetext>Comment on attachment 157476
Patch

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

Much cleaner though!

&gt; Source/WebCore/ChangeLog:13
&gt; +        The use of functions objects (JSObjectMakeFunction) we loose the ability to store the

By using... ? English is a bit weird

&gt; Source/WebCore/ChangeLog:16
&gt; +

So both use function objects. Maybe this could be rewritten a bit to be more clear

&gt; Source/WebCore/bridge/qt/qt_class.cpp:80
&gt; +    QtRuntimeMethod* method= qtinst-&gt;m_methods.value(name);

missing space before =

&gt; Source/WebCore/bridge/qt/qt_class.cpp:82
&gt; +    if (method)
&gt; +        return toJS(method-&gt;jsObjectRef(context, exception));

why not just if (QtRuntime...

&gt; Source/WebCore/bridge/qt/qt_class.cpp:95
&gt; +            qtinst-&gt;m_methods.insert(name, method);
&gt; +            return toJS(method-&gt;jsObjectRef(context, exception));

newline before return?

&gt; Source/WebCore/bridge/qt/qt_instance.cpp:100
&gt;      // clean up (unprotect from gc) the JSValues we&apos;ve created

Fix comment to be style compliant?

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1348
&gt; +QtRuntimeMethod::QtRuntimeMethod(JSContextRef ctx, JSValueRef* exception, QObject* object, const QByteArray&amp; identifier, int index, int flags, QtInstance *instance)

* placement :-)

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1378
&gt; +    QVarLengthArray&lt;QVariant, 10&gt; vargs;
&gt; +    void* qargs[11];

Comment why this exact size is used?

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1454
&gt; +    // object.method.connect(); object.method.disconnect();

Maybe that comment could be better?

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1463
&gt; +    // object.slot.connect(...); object.slot.disconnect(...);
&gt; +    if ((!(d-&gt;m_flags &amp; QtRuntimeMethod::MethodIsSignal))) {
&gt; +        setException(context, exception, QStringLiteral(&quot;QtMetaMethod.%3: %1::%2() is not a signal&quot;).arg(QString::fromUtf8(d-&gt;m_object.data()-&gt;metaObject()-&gt;className())).arg(QString::fromAscii(d-&gt;m_identifier)).arg(functionName));

the comment says slot, not signal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691587</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-09 10:51:04 -0700</bug_when>
    <thetext>All very valid points. Will fix tomorrow. Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692208</commentid>
    <comment_count>4</comment_count>
      <attachid>157476</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-09 22:18:55 -0700</bug_when>
    <thetext>Comment on attachment 157476
Patch

Clearing review, will upload a new patch today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692493</commentid>
    <comment_count>5</comment_count>
      <attachid>157476</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-10 05:43:13 -0700</bug_when>
    <thetext>Comment on attachment 157476
Patch

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

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1378
&gt;&gt; +    void* qargs[11];
&gt; 
&gt; Comment why this exact size is used?

Well spotted, the old code actually had a if (argumentCount &gt; 10) return; check in there that got lost. I&apos;ll re-add it, then
this is clearer.

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1463
&gt;&gt; +        setException(context, exception, QStringLiteral(&quot;QtMetaMethod.%3: %1::%2() is not a signal&quot;).arg(QString::fromUtf8(d-&gt;m_object.data()-&gt;metaObject()-&gt;className())).arg(QString::fromAscii(d-&gt;m_identifier)).arg(functionName));
&gt; 
&gt; the comment says slot, not signal?

Yeah, you cannot call connect on a slot, you can only call it on a signal.
I&apos;ll remove this and the earlier comment, as they&apos;re more confusing than helping. The error message that follows the comment does a much better job at explaining this
rare error situation anyway :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692499</commentid>
    <comment_count>6</comment_count>
      <attachid>157717</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-10 05:47:37 -0700</bug_when>
    <thetext>Created attachment 157717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692541</commentid>
    <comment_count>7</comment_count>
      <attachid>157731</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-10 06:54:39 -0700</bug_when>
    <thetext>Created attachment 157731
Patch

Updated patch, give credits to Noam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692543</commentid>
    <comment_count>8</comment_count>
      <attachid>157717</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-10 06:55:55 -0700</bug_when>
    <thetext>Comment on attachment 157717
Patch

Thought I am no expert on this, I looked through it a couple of times and it makes sense. I don&apos;t know all the details, so you might want someone else to look it through as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693068</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-11 01:57:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 157717 [details])
&gt; Thought I am no expert on this, I looked through it a couple of times and it makes sense. I don&apos;t know all the details, so you might want someone else to look it through as well

Caio, could you help us here with an informal review? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693116</commentid>
    <comment_count>10</comment_count>
      <attachid>157731</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-11 08:58:01 -0700</bug_when>
    <thetext>Comment on attachment 157731
Patch

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

Overall looks good to me, I have some suggestions and two potential issues that I think need to be fixed, see below.

&gt; Source/WebCore/bridge/qt/qt_class.cpp:110
&gt; +            int flags = m.methodType() == QMetaMethod::Signal ? QtRuntimeMethod::MethodIsSignal : 0;
&gt; +            QtRuntimeMethod* method = new QtRuntimeMethod(context, exception, static_cast&lt;QtInstance*&gt;(inst)-&gt;getObject(), normal, index, flags, qtinst);
&gt; +            qtinst-&gt;m_methods.insert(name, method);
&gt; +            return toJS(method-&gt;jsObjectRef(context, exception));

We could try to avoid this duplication. One possible approach could be first figure out if there&apos;s a valid index and then if so run this block of code.

// Sketchy pseudo code.
int index = -1;
if (index = indexOfMethod(normal)) {
    if (isPrivate)
        index = -1;
}

if (index == -1) {
    // Search by basename.
}

if (index == -1) {
    return jsUndefined;
}

// Create runtime method with index.


Optional: I&apos;m also wondering while reading this if we could just &quot;return early&quot; if the exact match is private, simplifying the code further. This would change behavior for cases where our object have a private foo(int) and another public foo(), and we are asking explicitly for obj[&quot;foo(int)&quot;]. Currently we return the method for &quot;foo&quot;, I think should be OK to return jsUndefined in this case.

&gt; Source/WebCore/bridge/qt/qt_instance.cpp:97
&gt; +    // Clean up (unprotect from gc) the JSValues we&apos;ve created.

This comment doesn&apos;t seem to be truth. If I got this right, we are not GC protecting the methods.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1300
&gt; +    JSClassDefinition classDef = {
&gt; +        0, 0, m_identifier.constData(), prototypeForSignalsAndSlots(), 0, 0,
&gt; +        0, 0, 0, 0, 0, 0, 0, call, 0, 0, 0
&gt; +    };
&gt; +    m_classRef = JSClassCreate(&amp;classDef);

Do we need a different class for each meta method?

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1311
&gt; +    QtRuntimeMethod* d = reinterpret_cast&lt;QtRuntimeMethod*&gt;(JSObjectGetPrivate(function));
&gt; +    QObject* obj = d-&gt;m_object;

We might have a problem here.

Without this patch runtime methods are JS values, and our method table stored weak references for it. Even if we cleared our method table, a reference for a method in JS would keep its QtRuntimeMetaMethod alive.

With the patch, QtRuntimeMethod objects themselves are deleted when we clear the method table. So if we still have a reference for that method in JS, and call it, we&apos;ll end up here with an invalid QtRuntimeMethod pointer.

One solution I could think of is adding a Null check here for the JSObjectGetPrivate result, and in QtRuntimeMethod destructor, if we have m_jsObject, use JSObjectSetPrivate to clear its private data.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1374
&gt; +    JSStringRef actualNameStr = JSStringCreateWithUTF8CString(m_identifier.constData());

Use JSRetainPtr then you can avoid the JSStringRelease below.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1442
&gt; +        // object.signal.connect(object, someFunction);
&gt; +        targetObject = JSValueToObject(context, arguments[0], exception);
&gt; +        if (JSValueIsObject(context, arguments[1]))
&gt; +            targetFunction = JSValueToObject(context, arguments[1], exception);

In this case we need to check if arguments[1] is really a function.

Also: in the previous version we treated the case in which arguments[1] was a string, for example: &apos;object.signal.connect(targetObject, &quot;slotName&quot;)&apos;. I think we could still do it here. Even better if we had a test for it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693123</commentid>
    <comment_count>11</comment_count>
      <attachid>157731</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-11 11:34:46 -0700</bug_when>
    <thetext>Comment on attachment 157731
Patch

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

Great, thanks a lot for the review, Caio! I&apos;m taking this patch now out of the review queue to revise it.

&gt;&gt; Source/WebCore/bridge/qt/qt_class.cpp:110
&gt;&gt; +            return toJS(method-&gt;jsObjectRef(context, exception));
&gt; 
&gt; We could try to avoid this duplication. One possible approach could be first figure out if there&apos;s a valid index and then if so run this block of code.
&gt; 
&gt; // Sketchy pseudo code.
&gt; int index = -1;
&gt; if (index = indexOfMethod(normal)) {
&gt;     if (isPrivate)
&gt;         index = -1;
&gt; }
&gt; 
&gt; if (index == -1) {
&gt;     // Search by basename.
&gt; }
&gt; 
&gt; if (index == -1) {
&gt;     return jsUndefined;
&gt; }
&gt; 
&gt; // Create runtime method with index.
&gt; 
&gt; 
&gt; Optional: I&apos;m also wondering while reading this if we could just &quot;return early&quot; if the exact match is private, simplifying the code further. This would change behavior for cases where our object have a private foo(int) and another public foo(), and we are asking explicitly for obj[&quot;foo(int)&quot;]. Currently we return the method for &quot;foo&quot;, I think should be OK to return jsUndefined in this case.

Good idea, I&apos;ll play with cleaning this up a little bit.

&gt;&gt; Source/WebCore/bridge/qt/qt_instance.cpp:97
&gt;&gt; +    // Clean up (unprotect from gc) the JSValues we&apos;ve created.
&gt; 
&gt; This comment doesn&apos;t seem to be truth. If I got this right, we are not GC protecting the methods.

That&apos;s true, since the methods aren&apos;t JS objects anymore.

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1300
&gt;&gt; +    m_classRef = JSClassCreate(&amp;classDef);
&gt; 
&gt; Do we need a different class for each meta method?

If we want to store the identifier in it then yes.

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1311
&gt;&gt; +    QObject* obj = d-&gt;m_object;
&gt; 
&gt; We might have a problem here.
&gt; 
&gt; Without this patch runtime methods are JS values, and our method table stored weak references for it. Even if we cleared our method table, a reference for a method in JS would keep its QtRuntimeMetaMethod alive.
&gt; 
&gt; With the patch, QtRuntimeMethod objects themselves are deleted when we clear the method table. So if we still have a reference for that method in JS, and call it, we&apos;ll end up here with an invalid QtRuntimeMethod pointer.
&gt; 
&gt; One solution I could think of is adding a Null check here for the JSObjectGetPrivate result, and in QtRuntimeMethod destructor, if we have m_jsObject, use JSObjectSetPrivate to clear its private data.

That&apos;s a good idea. I have to check how this combines with my follow-up patches that change the storage model slightly. But your point seems valid.

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1374
&gt;&gt; +    JSStringRef actualNameStr = JSStringCreateWithUTF8CString(m_identifier.constData());
&gt; 
&gt; Use JSRetainPtr then you can avoid the JSStringRelease below.

Yeah, I guess :)

&gt;&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1442
&gt;&gt; +            targetFunction = JSValueToObject(context, arguments[1], exception);
&gt; 
&gt; In this case we need to check if arguments[1] is really a function.
&gt; 
&gt; Also: in the previous version we treated the case in which arguments[1] was a string, for example: &apos;object.signal.connect(targetObject, &quot;slotName&quot;)&apos;. I think we could still do it here. Even better if we had a test for it. :)

Well spotted! I&apos;ll try to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693149</commentid>
    <comment_count>12</comment_count>
      <attachid>157879</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-11 14:47:07 -0700</bug_when>
    <thetext>Created attachment 157879
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693262</commentid>
    <comment_count>13</comment_count>
      <attachid>157879</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-12 06:57:51 -0700</bug_when>
    <thetext>Comment on attachment 157879
Patch

r=me, but let&apos;s have Caio look through it once more and maybe give him a bit of credit in the changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693643</commentid>
    <comment_count>14</comment_count>
      <attachid>157879</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-13 07:31:02 -0700</bug_when>
    <thetext>Comment on attachment 157879
Patch

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

Looks good to me. :-)

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1452
&gt; +            JSValueRef ex = 0;
&gt; +            JSRetainPtr&lt;JSStringRef&gt; functionName(Adopt, JSValueToStringCopy(context, arguments[1], &amp;ex));

Nitpick: &quot;ex&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693822</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-13 10:54:12 -0700</bug_when>
    <thetext>Committed r125428: &lt;http://trac.webkit.org/changeset/125428&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157476</attachid>
            <date>2012-08-09 10:05:54 -0700</date>
            <delta_ts>2012-08-10 05:47:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93476-20120809190628.patch</filename>
            <type>text/plain</type>
            <size>51838</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUyNTRkMzBjNzBmYTg1
ZWM0MmY2NTNhNGFkMzJlZWVkMTkyOTllZi4uOGYyZmZkNjQ2ZmI4NTU5MDc0MzVmMmFlZGU3MzY4
YjM3YmE0ZTQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA4LTA4ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFBv
cnQgbWV0YSBtZXRob2Qvc2lnbmFsL3Nsb3QgaGFuZGxpbmcgaW4gcnVuLXRpbWUgYnJpZGdlIHRv
IHVzZSBKU0MgQyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzNDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUG9ydGVkIHRoZSBjb2RlIHRoYXQgbWFwcGVkIGludm9rYWJsZSBtZXRob2RzIChhbmQg
c2lnbmFscy9zbG90cykgYXMgd2VsbCBhcyB0aGUKKyAgICAgICAgY29kZSB0aGF0IHByb3ZpZGVz
IHRoZSBjb25uZWN0KCkgYW5kIGRpc2Nvbm5lY3QoKSBmdW5jdGlvbnMgb3ZlciB0byB1c2UgdGhl
IEpTQyBDCisgICAgICAgIEFQSS4gSW4gdGhlIHByb2Nlc3Mgb25lIGJlaGF2aW91cmFsIGNoYW5n
ZSB3YXMgaW1wbGVtZW50ZWQ6IFByZXZpb3VzbHkgbWV0YSBtZXRob2RzCisgICAgICAgIHdlcmUg
YWN0dWFsbHkgZnVuY3Rpb24gb2JqZWN0cyB0aGF0IHRocm91Z2ggRnVuY3Rpb24ucHJvdG90eXBl
IGFsbG93ZWQgY2FsbGluZyB2aWEKKyAgICAgICAgb2JqZWN0Lm1ldGhvZC5jYWxsKG9iamVjdCku
IFRocm91Z2ggdGhlIHVzZSBvZiBwbGFpbiBKUyBvYmplY3RzIHRoYXQgaXMgbm90IHBvc3NpYmxl
IGFueW1vcmUuCisgICAgICAgIFRoZSB1c2Ugb2YgZnVuY3Rpb25zIG9iamVjdHMgKEpTT2JqZWN0
TWFrZUZ1bmN0aW9uKSB3ZSBsb29zZSB0aGUgYWJpbGl0eSB0byBzdG9yZSB0aGUKKyAgICAgICAg
cHJpdmF0ZSBwb2ludGVyIGFuZCB1bmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCBpbmplY3QgdGhlIEZ1
bmN0aW9uLnByb3RvdHlwZSBpbnRvIHRoZQorICAgICAgICBwcm90b3R5cGUgY2hhaW4gd2l0aG91
dCBsb29zaW5nIHRoZSBjb21tb24gcHJvdG90eXBlIGZvciBzaWduYWxzIGFuZCBzbG90cy4KKwor
ICAgICAgICAqIGJyaWRnZS9xdC9xdF9jbGFzcy5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdENsYXNzOjpmYWxsYmFja09iamVjdCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3Rh
bmNlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3RhbmNl
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3Qp
OgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5oOgorICAgICAgICAoQmluZGluZ3Mp
OgorICAgICAgICAoUXRJbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWUu
Y3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6cHJvdG90eXBlRm9yU2lnbmFsc0FuZFNsb3Rz
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6UXRSdW50aW1lTWV0
aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6flF0UnVudGlt
ZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmNhbGwp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpjb25uZWN0KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6ZGlzY29ubmVjdCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmpzT2JqZWN0UmVmKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6Y29ubmVjdE9yRGlzY29ubmVjdCk6
CisgICAgICAgIChCaW5kaW5ncyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rp
b25PYmplY3Q6On5RdENvbm5lY3Rpb25PYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9y
dW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6Om5hbWUp
OgorICAgICAgICAoUXRSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKFF0Q29ubmVjdGlvbk9iamVj
dCk6CisKIDIwMTItMDgtMDggIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RvcmUgbGFzdCBldmFsdWF0aW9uIHJlc3VsdCBp
biAkXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCA2NmMzYTZiY2EzOWU1MjI1NDZlYjU4ZGQ2ZmUwMDE5NzM4
ODYyMjZkLi43NzNlMzdjMzAxYzMwZGVkOTUwYzBmZDIyNDljYjgyMjM3ZjJhNjZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSw1ICsxLDIzIEBACiAyMDEyLTA4LTA4ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRdIFBvcnQgbWV0YSBtZXRob2Qv
c2lnbmFsL3Nsb3QgaGFuZGxpbmcgaW4gcnVuLXRpbWUgYnJpZGdlIHRvIHVzZSBKU0MgQyBBUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNDc2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBz
ZW1hbnRpY3Mgb2Ygc29tZSB0ZXN0IGV4cGVjdGF0aW9ucy4gU2ltaWxhcmx5IHRvIHIxMjUwMzIg
d2hlbiBnZW5lcmF0aW5nCisgICAgICAgIGVycm9yIGV4Y2VwdGlvbnMgZm9yIGNvbm5lY3QvZGlz
Y29ubmVjdCwgd2UgY2Fubm90IGdlbmVyYXRlIGV4cGxpY2l0IHR5cGUgZXJyb3IKKyAgICAgICAg
ZXhjZXB0aW9ucyBidXQgb25seSBnZW5lcmljIGVycm9ycy4gQW5vdGhlciBjaGFuZ2UgaXMgdGhh
dCB0aGUgbWV0YS1tZXRob2Qgd3JhcHBlcgorICAgICAgICBkb2Vzbid0IHN1cHBvcnQgdGhlIGNh
bGwoKSB0aHJvdWdoIEZ1bmN0aW9uLnByb3RvdHlwZSBhbnltb3JlLiBTZWUgV2ViQ29yZSBjaGFu
Z2Vsb2cKKyAgICAgICAgZm9yIGRldGFpbHMuCisKKyAgICAgICAgKiB0ZXN0cy9xb2JqZWN0YnJp
ZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcDoKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjpj
b25uZWN0QW5kRGlzY29ubmVjdCk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6b2JqZWN0
RGVsZXRlZCk6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6aW50cm9zcGVjdFF0TWV0aG9k
cyk6CisKKzIwMTItMDgtMDggIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEu
Y29tPgorCiAgICAgICAgIFtRdF0gUG9ydCBpbnRlcm5hbCBmaW5kTWV0aG9kSW5kZXggbWV0aG9k
IG1hdGNoZXIgdG8gdXNlIEpTQyBDIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTM0NjMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X2NsYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5j
cHAKaW5kZXggZWUyMmE2ODYxYmM1MWFlYjc1OGM3ZThhNjlhOGYyYjliMzRjYTFjOS4uYTQwMjA3
Y2ViM2ZkZWJlOTVjY2YwZWZjOTU4MGUyYTQzN2E5NzVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfY2xhc3MuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAicXRfY2xhc3MuaCIKIAorI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKICNpbmNsdWRlICJxdF9ydW50
aW1lLmgiCkBAIC02OSwxNCArNzAsMTYgQEAgY29uc3QgY2hhciogUXRDbGFzczo6bmFtZSgpIGNv
bnN0CiBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSW5z
dGFuY2UqIGluc3QsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyKQogewogICAgIFF0SW5zdGFuY2Uq
IHF0aW5zdCA9IHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KTsKKyAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IHRvUmVmKGV4ZWMpOworICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiA9IDA7
CiAKICAgICBVU3RyaW5nIHVzdHJpbmcoaWRlbnRpZmllci5wdWJsaWNOYW1lKCkpOwogICAgIGNv
bnN0IFFCeXRlQXJyYXkgbmFtZSA9IFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hh
cio+KHVzdHJpbmcuY2hhcmFjdGVycygpKSwgdXN0cmluZy5sZW5ndGgoKSkudG9MYXRpbjEoKTsK
IAogICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBoYXZlIGEgY2FjaGUgaGl0Ci0gICAgSlNPYmplY3Qq
IHZhbCA9IHF0aW5zdC0+bV9tZXRob2RzLnZhbHVlKG5hbWUpLmdldCgpOwotICAgIGlmICh2YWwp
Ci0gICAgICAgIHJldHVybiB2YWw7CisgICAgUXRSdW50aW1lTWV0aG9kKiBtZXRob2Q9IHF0aW5z
dC0+bV9tZXRob2RzLnZhbHVlKG5hbWUpOworICAgIGlmIChtZXRob2QpCisgICAgICAgIHJldHVy
biB0b0pTKG1ldGhvZC0+anNPYmplY3RSZWYoY29udGV4dCwgZXhjZXB0aW9uKSk7CiAKICAgICAv
LyBOb3BlLCBjcmVhdGUgYW4gZW50cnkKICAgICBjb25zdCBRQnl0ZUFycmF5IG5vcm1hbCA9IFFN
ZXRhT2JqZWN0Ojpub3JtYWxpemVkU2lnbmF0dXJlKG5hbWUuY29uc3REYXRhKCkpOwpAQCAtODYs
OSArODksMTAgQEAgSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEluc3RhbmNlKiBpbnN0LCBQcm9wZXJ0eU5hbWUgaWQKICAgICBpZiAobm9ybWFsLmNvbnRh
aW5zKCcoJykgJiYgKGluZGV4ID0gbV9tZXRhT2JqZWN0LT5pbmRleE9mTWV0aG9kKG5vcm1hbCkp
ICE9IC0xKSB7CiAgICAgICAgIFFNZXRhTWV0aG9kIG0gPSBtX21ldGFPYmplY3QtPm1ldGhvZChp
bmRleCk7CiAgICAgICAgIGlmIChtLmFjY2VzcygpICE9IFFNZXRhTWV0aG9kOjpQcml2YXRlKSB7
Ci0gICAgICAgICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBRdFJ1bnRpbWVNZXRhTWV0
aG9kOjpjcmVhdGUoZXhlYywgdXN0cmluZywgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3Qp
LCBpbmRleCwgbm9ybWFsLCBmYWxzZSk7Ci0gICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5p
bnNlcnQobmFtZSwgdmFsKTsKLSAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgICAgICBp
bnQgZmxhZ3MgPSBtLm1ldGhvZFR5cGUoKSA9PSBRTWV0YU1ldGhvZDo6U2lnbmFsID8gUXRSdW50
aW1lTWV0aG9kOjpNZXRob2RJc1NpZ25hbCA6IDA7CisgICAgICAgICAgICBRdFJ1bnRpbWVNZXRo
b2QqIG1ldGhvZCA9IG5ldyBRdFJ1bnRpbWVNZXRob2QoY29udGV4dCwgZXhjZXB0aW9uLCBzdGF0
aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5zdCktPmdldE9iamVjdCgpLCBub3JtYWwsIGluZGV4LCBm
bGFncywgcXRpbnN0KTsKKyAgICAgICAgICAgIHF0aW5zdC0+bV9tZXRob2RzLmluc2VydChuYW1l
LCBtZXRob2QpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMobWV0aG9kLT5qc09iamVjdFJlZihj
b250ZXh0LCBleGNlcHRpb24pKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAwLDkgKzEwNCwx
MCBAQCBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSW5z
dGFuY2UqIGluc3QsIFByb3BlcnR5TmFtZSBpZAogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgaWYgKG5vcm1hbCA9PSBtLm5hbWUoKSkgewotICAgICAgICAgICAgUXRSdW50aW1lTWV0
YU1ldGhvZCogdmFsID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIHVzdHJpbmcs
IHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwgZmFsc2UpOwot
ICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIHZhbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsOworICAgICAgICAgICAgaW50IGZsYWdzID0gbS5tZXRob2RUeXBlKCkg
PT0gUU1ldGFNZXRob2Q6OlNpZ25hbCA/IFF0UnVudGltZU1ldGhvZDo6TWV0aG9kSXNTaWduYWwg
OiAwOworICAgICAgICAgICAgUXRSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBuZXcgUXRSdW50aW1l
TWV0aG9kKGNvbnRleHQsIGV4Y2VwdGlvbiwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3Qp
LT5nZXRPYmplY3QoKSwgbm9ybWFsLCBpbmRleCwgZmxhZ3MsIHF0aW5zdCk7CisgICAgICAgICAg
ICBxdGluc3QtPm1fbWV0aG9kcy5pbnNlcnQobmFtZSwgbWV0aG9kKTsKKyAgICAgICAgICAgIHJl
dHVybiB0b0pTKG1ldGhvZC0+anNPYmplY3RSZWYoY29udGV4dCwgZXhjZXB0aW9uKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9p
bnN0YW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCmlu
ZGV4IDRhMDg3NTUwNmQ3ZWZhY2NiYjI0NjkxMGU1NzY3YzEwYzAxNTZlOGUuLjM5ZjYyYWE3Yzg5
OTk3NjU5Zjg5NDJlMzU0MmEzOTBkOTkzZjQ0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X2luc3RhbmNlLmNwcApAQCAtOTgsNiArOTgsNyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5j
ZSgpCiAgICAgY2FjaGVkSW5zdGFuY2VzLnJlbW92ZShtX2hhc2hrZXkpOwogCiAgICAgLy8gY2xl
YW4gdXAgKHVucHJvdGVjdCBmcm9tIGdjKSB0aGUgSlNWYWx1ZXMgd2UndmUgY3JlYXRlZAorICAg
IHFEZWxldGVBbGwobV9tZXRob2RzKTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsKIAogICAgIHFE
ZWxldGVBbGwobV9maWVsZHMpOwpAQCAtMTUwLDE2ICsxNTEsNiBAQCB2b2lkIFF0SW5zdGFuY2U6
OnB1dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbQogICAgIEpTT2JqZWN0OjpwdXQob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKIH0KIAotdm9pZCBRdEluc3RhbmNlOjpyZW1vdmVVbnVzZWRNZXRob2RzKCkK
LXsKLSAgICBmb3IgKFFIYXNoPFFCeXRlQXJyYXksIFF0V2Vha09iamVjdFJlZmVyZW5jZT46Okl0
ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCksIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsgaXQg
IT0gZW5kOyApIHsKLSAgICAgICAgaWYgKCFpdC52YWx1ZSgpLmdldCgpKQotICAgICAgICAgICAg
aXQgPSBtX21ldGhvZHMuZXJhc2UoaXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK2l0
OwotICAgIH0KLX0KLQogUXRJbnN0YW5jZSogUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2UoSlNPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBpZiAoIW9iamVjdCkKQEAgLTE4Miw2ICsxNzMsNyBAQCBDbGFz
cyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogUnVudGltZU9iamVjdCogUXRJbnN0YW5j
ZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CisgICAgcURlbGV0ZUFsbChtX21ldGhvZHMpOwogICAgIG1fbWV0aG9kcy5j
bGVhcigpOwogICAgIHJldHVybiBRdFJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
aW5zdGFuY2UuaAppbmRleCAxMTBjYjFiOGJlNTg0MThhNzM2NmRkNGI4OTRjYTIxNGM5ODEyZTg1
Li4zMzAzMmE1YTY4MTMxZGQ4ZTFmYjA3NWI1ZTE0ZDRiM2EwZTkyODQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgQmlu
ZGluZ3MgewogCiBjbGFzcyBRdENsYXNzOwogY2xhc3MgUXRGaWVsZDsKLWNsYXNzIFF0UnVudGlt
ZU1ldGFNZXRob2Q7CitjbGFzcyBRdFJ1bnRpbWVNZXRob2Q7CiAKIGNsYXNzIFF0SW5zdGFuY2Ug
OiBwdWJsaWMgSW5zdGFuY2UgewogcHVibGljOgpAQCAtNzIsOCArNzIsNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAKLSAgICB2b2lkIHJlbW92ZVVudXNlZE1ldGhvZHMoKTsKLQogICAgIHN0YXRpYyBRdElu
c3RhbmNlKiBnZXRJbnN0YW5jZShKU09iamVjdCopOwogCiAgICAgY2xhc3MgUXRTZW5kZXJTdGFj
ayB7CkBAIC04OSwzOSArODcsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFF0U2VuZGVyU3RhY2sq
IHF0U2VuZGVyU3RhY2soKTsKIAogcHJpdmF0ZToKLQotICAgIGNsYXNzIFF0V2Vha09iamVjdFJl
ZmVyZW5jZSB7Ci0gICAgcHVibGljOgotICAgICAgICBRdFdlYWtPYmplY3RSZWZlcmVuY2UoSlNP
YmplY3QqIHJlZmVyZW5jZSkKLSAgICAgICAgICAgIDogbV9yZWZlcmVuY2UocmVmZXJlbmNlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBRdFdlYWtPYmplY3RSZWZlcmVuY2UoY29u
c3QgUXRXZWFrT2JqZWN0UmVmZXJlbmNlJiBzb3VyY2UpCi0gICAgICAgICAgICA6IG1fcmVmZXJl
bmNlKHNvdXJjZS5tX3JlZmVyZW5jZS5nZXQoKSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgUXRXZWFrT2JqZWN0UmVmZXJlbmNlKCkKLSAgICAgICAgICAgIDogbV9yZWZlcmVuY2Uo
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBRdFdlYWtPYmplY3RSZWZlcmVuY2Um
IG9wZXJhdG9yPShjb25zdCBRdFdlYWtPYmplY3RSZWZlcmVuY2UmIHNvdXJjZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9yZWZlcmVuY2UgPSBQYXNzV2VhazxKU09iamVjdD4oc291cmNlLm1f
cmVmZXJlbmNlLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQot
Ci0gICAgICAgIEpTT2JqZWN0KiBnZXQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9yZWZlcmVuY2UuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFdlYWs8SlNPYmplY3Q+IG1fcmVmZXJlbmNlOwotICAgIH07Ci0KICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxRdEluc3RhbmNlPiBjcmVhdGUoUU9iamVjdCAqaW5zdGFuY2UsIFBhc3NSZWZQdHI8
Um9vdE9iamVjdD4gcm9vdE9iamVjdCwgVmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBRdEluc3RhbmNlKGluc3RhbmNlLCByb290T2Jq
ZWN0LCBvd25lcnNoaXApKTsKQEAgLTEzMyw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBRdENsYXNzKiBtX2NsYXNzOwogICAgIFFQb2ludGVyPFFPYmplY3Q+IG1fb2JqZWN0OwogICAg
IFFPYmplY3QqIG1faGFzaGtleTsKLSAgICBtdXRhYmxlIFFIYXNoPFFCeXRlQXJyYXksIFF0V2Vh
a09iamVjdFJlZmVyZW5jZT4gbV9tZXRob2RzOworICAgIG11dGFibGUgUUhhc2g8UUJ5dGVBcnJh
eSwgUXRSdW50aW1lTWV0aG9kKj4gbV9tZXRob2RzOwogICAgIG11dGFibGUgUUhhc2g8UVN0cmlu
ZywgUXRGaWVsZCo+IG1fZmllbGRzOwogICAgIFZhbHVlT3duZXJzaGlwIG1fb3duZXJzaGlwOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAppbmRleCA4Y2ZlMzBiOTdh
OGMzZmFkZmY3ZGM2NDVlOWY2NTExNmFlMjk3MDhiLi5lYzJlZmZkZTMwNjEyMzJmNTcxMjg3M2E0
Nzc5NmZmMmJhMGI0ZThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
cnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
CkBAIC05NzIsNjEgKzk3Miw2IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uCiAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIHVzdHJpbmcpOwogfQogCi0vLyA9PT09PT09PT09PT09PT0KLQotLy8g
UXQtbGlrZSBtYWNyb3MKLSNkZWZpbmUgUVdfRChDbGFzcykgQ2xhc3MjI0RhdGEqIGQgPSBkX2Z1
bmMoKQotI2RlZmluZSBRV19EUyhDbGFzcyxJbnN0YW5jZSkgQ2xhc3MjI0RhdGEqIGQgPSBJbnN0
YW5jZS0+ZF9mdW5jKCkKLQotY29uc3QgQ2xhc3NJbmZvIFF0UnVudGltZU1ldGhvZDo6c19pbmZv
ID0geyAiUXRSdW50aW1lTWV0aG9kIiwgJkludGVybmFsRnVuY3Rpb246OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShRdFJ1bnRpbWVNZXRob2QpIH07Ci0KLVF0UnVudGltZU1ldGhv
ZDo6UXRSdW50aW1lTWV0aG9kKFF0UnVudGltZU1ldGhvZERhdGEqIGRkLCBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyKQotICAg
IDogSW50ZXJuYWxGdW5jdGlvbihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVy
ZSkKLSAgICAsIGRfcHRyKGRkKQotewotfQotCi12b2lkIFF0UnVudGltZU1ldGhvZDo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNz
UmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllcik7Ci0gICAgUVdfRChRdFJ1bnRpbWVNZXRo
b2QpOwotICAgIGQtPm1faW5zdGFuY2UgPSBpbnN0YW5jZTsKLSAgICBkLT5tX2ZpbmFsaXplciA9
IFBhc3NXZWFrPFF0UnVudGltZU1ldGhvZD4odGhpcywgZCk7Ci19Ci0KLVF0UnVudGltZU1ldGhv
ZDo6flF0UnVudGltZU1ldGhvZCgpCi17Ci0gICAgZGVsZXRlIGRfcHRyOwotfQotCi12b2lkIFF0
UnVudGltZU1ldGhvZDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8
UXRSdW50aW1lTWV0aG9kKj4oY2VsbCktPlF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhv
ZCgpOwotfQotCi0vLyA9PT09PT09PT09PT09PT0KLQotUXRSdW50aW1lTWV0aG9kRGF0YTo6flF0
UnVudGltZU1ldGhvZERhdGEoKQotewotfQotCi12b2lkIFF0UnVudGltZU1ldGhvZERhdGE6OmZp
bmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopCi17Ci0gICAgbV9pbnN0YW5jZS0+cmVtb3Zl
VW51c2VkTWV0aG9kcygpOwotfQotCi1RdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YTo6flF0UnVudGlt
ZU1ldGFNZXRob2REYXRhKCkKLXsKLQotfQotCi1RdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0
YTo6flF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKCkKLXsKLQotfQotCi0vLyA9PT09PT09
PT09PT09PT0KLQogLy8gVHlwZSBjb252ZXJzaW9uIG1ldGFkYXRhIChmcm9tIFF0U2NyaXB0IG9y
aWdpbmFsbHkpCiBjbGFzcyBRdE1ldGhvZE1hdGNoVHlwZQogewpAQCAtMTM5NCwzNjQgKzEzMzks
MjIzIEBAIHN0YXRpYyBpbnQgZmluZFNpZ25hbEluZGV4KGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRh
LCBpbnQgaW5pdGlhbEluZGV4LCBRQnl0ZUFycmF5CiAgICAgcmV0dXJuIGluZGV4OwogfQogCi1j
b25zdCBDbGFzc0luZm8gUXRSdW50aW1lTWV0YU1ldGhvZDo6c19pbmZvID0geyAiUXRSdW50aW1l
TWV0aG9kIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShRdFJ1bnRp
bWVNZXRhTWV0aG9kKSB9OwotCi1RdFJ1bnRpbWVNZXRhTWV0aG9kOjpRdFJ1bnRpbWVNZXRhTWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcm
IGlkZW50aWZpZXIpCi0gICAgOiBRdFJ1bnRpbWVNZXRob2QgKG5ldyBRdFJ1bnRpbWVNZXRhTWV0
aG9kRGF0YSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpCi17Ci19Ci0KLXZvaWQgUXRS
dW50aW1lTWV0YU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBV
U3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQg
aW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUpCitz
dGF0aWMgSlNDbGFzc1JlZiBwcm90b3R5cGVGb3JTaWduYWxzQW5kU2xvdHMoKQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIsIGluc3RhbmNlKTsKLSAgICBRV19E
KFF0UnVudGltZU1ldGFNZXRob2QpOwotICAgIGQtPm1fc2lnbmF0dXJlID0gc2lnbmF0dXJlOwot
ICAgIGQtPm1faW5kZXggPSBpbmRleDsKLSAgICBkLT5tX2FsbG93UHJpdmF0ZSA9IGFsbG93UHJp
dmF0ZTsKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbHMgPSBKU0NsYXNzQ3JlYXRlKCZrSlNDbGFz
c0RlZmluaXRpb25FbXB0eSk7CisgICAgcmV0dXJuIGNsczsKIH0KIAotdm9pZCBRdFJ1bnRpbWVN
ZXRhTWV0aG9kOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCitRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZChKU0NvbnRleHRSZWYgY3R4LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24sIFFPYmplY3QqIG9iamVjdCwgY29uc3QgUUJ5dGVBcnJheSYg
aWRlbnRpZmllciwgaW50IGluZGV4LCBpbnQgZmxhZ3MsIFF0SW5zdGFuY2UgKmluc3RhbmNlKQor
ICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisg
ICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9mbGFncyhmbGFncykKKyAgICAsIG1faW5zdGFu
Y2UoaW5zdGFuY2UpCiB7Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iamVjdCA9IGpz
Q2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oY2VsbCk7Ci0gICAgUXRSdW50aW1lTWV0aG9kOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIFF0UnVudGltZU1ldGFNZXRo
b2REYXRhKiBkID0gdGhpc09iamVjdC0+ZF9mdW5jKCk7Ci0gICAgaWYgKGQtPm1fY29ubmVjdCkK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmQtPm1fY29ubmVjdCk7Ci0gICAgaWYgKGQtPm1fZGlz
Y29ubmVjdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmQtPm1fZGlzY29ubmVjdCk7Ci19Ci0K
LUVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50
aW1lTWV0YU1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRfZnVuYygpOwotCi0gICAgLy8gV2Un
cmUgbGltaXRlZCB0byAxMCBhcmdzCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEw
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAg
Ly8gV2UgaGF2ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7Ci0KLSAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRP
YmplY3QoKTsKLSAgICBpZiAob2JqKSB7Ci0gICAgICAgIGNvbnN0IGludCBhcmd1bWVudENvdW50
ID0gc3RhdGljX2Nhc3Q8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkpOwotICAgICAgICBWZWN0
b3I8SlNWYWx1ZVJlZiwgMTA+IGFyZ3MoYXJndW1lbnRDb3VudCk7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICAgICAgYXJnc1tpXSA9IHRv
UmVmKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KGkpKTsKLQotICAgICAgICBRVmFyTGVuZ3RoQXJyYXk8
UVZhcmlhbnQsIDEwPiB2YXJnczsKLSAgICAgICAgdm9pZCAqcWFyZ3NbMTFdOwotCi0gICAgICAg
IGludCBtZXRob2RJbmRleDsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAg
ICAgICBpZiAoKG1ldGhvZEluZGV4ID0gZmluZE1ldGhvZEluZGV4KHRvUmVmKGV4ZWMpLCBvYmot
Pm1ldGFPYmplY3QoKSwgZC0+bV9zaWduYXR1cmUsIGFyZ3VtZW50Q291bnQsIGFyZ3MuZGF0YSgp
LCBkLT5tX2FsbG93UHJpdmF0ZSwgdmFyZ3MsICh2b2lkICoqKXFhcmdzLCAmZXhjZXB0aW9uKSkg
IT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChRTWV0YU9iamVjdDo6bWV0YWNhbGwob2JqLCBRTWV0
YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCwgbWV0aG9kSW5kZXgsIHFhcmdzKSA+PSAwKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICAgICAgICAgIGlmICh2YXJncy5zaXplKCkgPiAwICYmIHZhcmdzWzBdLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnZlcnRRVmFyaWFudFRvVmFs
dWUoZXhlYywgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpLCB2YXJnc1swXSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJjYW5ub3QgY2Fs
bCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7Ci0gICAgfQotCi0gICAgLy8gdm9pZCBm
dW5jdGlvbnMgcmV0dXJuIHVuZGVmaW5lZAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWYgPSB7CisgICAgICAg
IDAsIDAsIG1faWRlbnRpZmllci5jb25zdERhdGEoKSwgcHJvdG90eXBlRm9yU2lnbmFsc0FuZFNs
b3RzKCksIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGNhbGwsIDAsIDAsIDAK
KyAgICB9OworICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZik7CiB9CiAK
LUNhbGxUeXBlIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJiBjYWxsRGF0YSkKK1F0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCgpCiB7Ci0g
ICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKLSAgICByZXR1cm4gQ2FsbFR5cGVI
b3N0OworICAgIEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYpOwogfQogCi1ib29sIFF0UnVudGlt
ZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiAvKnRoaXNPYmplY3QqLywgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0
UnVudGltZU1ldGFNZXRob2QqPihjZWxsKTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IElkZW50
aWZpZXIoZXhlYywgImNvbm5lY3QiKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
ZWN0LCB0aGlzT2JqZWN0LT5jb25uZWN0R2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcihleGVjLCAiZGlzY29ubmVj
dCIpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmRp
c2Nvbm5lY3RHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBRdFJ1bnRpbWVNZXRob2QqIGQgPSByZWludGVy
cHJldF9jYXN0PFF0UnVudGltZU1ldGhvZCo+KEpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbikp
OworICAgIFFPYmplY3QqIG9iaiA9IGQtPm1fb2JqZWN0OwogCi0gICAgcmV0dXJuIFF0UnVudGlt
ZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7Ci19Ci0KLWJvb2wgUXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFF0
UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhv
ZCo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyKGV4ZWMsICJj
b25uZWN0IikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIGNvbm5lY3RHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICgh
b2JqKSB7CisgICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmdM
aXRlcmFsKCJjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICBp
ZiAocHJvcGVydHlOYW1lID09IElkZW50aWZpZXIoZXhlYywgImRpc2Nvbm5lY3QiKSkgewotICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVj
dCwgZGlzY29ubmVjdEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIFFWYXJMZW5ndGhB
cnJheTxRVmFyaWFudCwgMTA+IHZhcmdzOworICAgIHZvaWQqIHFhcmdzWzExXTsKIAotICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
bGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVu
dW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaW50IG1ldGhvZEluZGV4ID0g
ZmluZE1ldGhvZEluZGV4KGNvbnRleHQsIG9iai0+bWV0YU9iamVjdCgpLCBkLT5tX2lkZW50aWZp
ZXIsICBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChkLT5tX2ZsYWdzICYgQWxsb3dQcml2YXRlKSwgdmFyZ3MsICh2b2lkICoq
KXFhcmdzLCBleGNlcHRpb24pOwogCi0gICAgcmV0dXJuIFF0UnVudGltZU1ldGhvZDo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Ci19CisgICAgaWYgKFFNZXRhT2JqZWN0OjptZXRhY2FsbChvYmosIFFNZXRhT2JqZWN0
OjpJbnZva2VNZXRhTWV0aG9kLCBtZXRob2RJbmRleCwgcWFyZ3MpID49IDApCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotdm9pZCBRdFJ1bnRpbWVNZXRh
TWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQotewotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCAiY29ubmVjdCIpKTsKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCAiZGlzY29ubmVjdCIpKTsK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7
Ci0gICAgfQorICAgIGlmICh2YXJncy5zaXplKCkgPiAwICYmIHZhcmdzWzBdLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIHRvUmVmKHRvSlMoY29udGV4dCksIGNvbnZlcnRRVmFyaWFudFRvVmFs
dWUodG9KUyhjb250ZXh0KSwgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpLCB2YXJnc1swXSkp
OwogCi0gICAgUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCi1KU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6Omxlbmd0aEdldHRl
cihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitKU1ZhbHVlUmVmIFF0UnVudGlt
ZU1ldGhvZDo6Y29ubmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8g
UXRTY3JpcHQgYWx3YXlzIHJldHVybnMgMAotICAgIHJldHVybiBqc051bWJlcigwKTsKKyAgICBy
ZXR1cm4gY29ubmVjdE9yRGlzY29ubmVjdChjb250ZXh0LCBmdW5jdGlvbiwgdGhpc09iamVjdCwg
YXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHRydWUpOwogfQogCi1KU1ZhbHVl
IFF0UnVudGltZU1ldGFNZXRob2Q6OmNvbm5lY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCitKU1ZhbHVlUmVmIFF0UnVudGltZU1l
dGhvZDo6ZGlzY29ubmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgUXRS
dW50aW1lTWV0YU1ldGhvZCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRo
b2QqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2Qs
IHRoaXNPYmopOwotCi0gICAgaWYgKCFkLT5tX2Nvbm5lY3QpCi0gICAgICAgIGQtPm1fY29ubmVj
dC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kOjpjcmVhdGUoZXhlYywgaWRlbnQucHVibGljTmFtZSgpLCB0cnVlLCBkLT5tX2luc3RhbmNl
LCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSkpOwotICAgIHJldHVybiBkLT5tX2Nvbm5lY3Qu
Z2V0KCk7CisgICAgcmV0dXJuIGNvbm5lY3RPckRpc2Nvbm5lY3QoY29udGV4dCwgZnVuY3Rpb24s
IHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBmYWxzZSk7
CiB9CiAKLUpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZGlzY29ubmVjdEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSBpZGVudCkKK0pTT2Jq
ZWN0UmVmIFF0UnVudGltZU1ldGhvZDo6anNPYmplY3RSZWYoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlz
T2JqID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGFzT2JqZWN0KHNsb3RCYXNl
KSk7Ci0gICAgUVdfRFMoUXRSdW50aW1lTWV0YU1ldGhvZCwgdGhpc09iaik7Ci0KLSAgICBpZiAo
IWQtPm1fZGlzY29ubmVjdCkKLSAgICAgICAgZC0+bV9kaXNjb25uZWN0LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXNPYmosIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNyZWF0ZShleGVj
LCBpZGVudC5wdWJsaWNOYW1lKCksIGZhbHNlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBk
LT5tX3NpZ25hdHVyZSkpOwotICAgIHJldHVybiBkLT5tX2Rpc2Nvbm5lY3QuZ2V0KCk7Ci19Cisg
ICAgaWYgKG1fanNPYmplY3QpCisgICAgICAgIHJldHVybiB0b1JlZihtX2pzT2JqZWN0LmdldCgp
KTsKIAotLy8gPT09PT09PT09PT09PT09Ci0KLVFNdWx0aU1hcDxRT2JqZWN0KiwgUXRDb25uZWN0
aW9uT2JqZWN0Kj4gUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y29ubmVjdGlvbnM7CisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmRm9yQ29ubmVjdCA9IHsKKyAg
ICAgICAgMCwgMCwgImNvbm5lY3QiLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCBjb25uZWN0LCAwLCAwLCAwCisgICAgfTsKIAotY29uc3QgQ2xhc3NJbmZvIFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhvZCIsICZCYXNlOjpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZCkgfTsKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZGb3JEaXNj
b25uZWN0ID0geworICAgICAgICAwLCAwLCAiZGlzY29ubmVjdCIsIDAsIDAsIDAsCisgICAgICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIGRpc2Nvbm5lY3QsIDAsIDAsIDAKKyAgICB9OwogCi1RdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIp
Ci0gICAgOiBRdFJ1bnRpbWVNZXRob2QgKG5ldyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0
YSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpCi17CisgICAgc3RhdGljIEpTQ2xhc3NS
ZWYgY2xhc3NSZWZDb25uZWN0ID0gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZGb3JDb25uZWN0KTsK
KyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZkRpc2Nvbm5lY3QgPSBKU0NsYXNzQ3JlYXRl
KCZjbGFzc0RlZkZvckRpc2Nvbm5lY3QpOworICAgIGJvb2wgaXNTaWduYWwgPSBtX2ZsYWdzICYg
TWV0aG9kSXNTaWduYWw7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNv
bnRleHQsIG1fY2xhc3NSZWYsIHRoaXMpOworICAgIEpTT2JqZWN0UmVmIGNvbm5lY3RGdW5jdGlv
biA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZkNvbm5lY3QsIHRoaXMpOworICAgIEpT
T2JqZWN0UmVmIGRpc2Nvbm5lY3RGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFz
c1JlZkRpc2Nvbm5lY3QsIHRoaXMpOworICAgIEpTUHJvcGVydHlBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMgPSBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlOworCisgICAgc3RhdGljIEpTU3RyaW5nUmVmIGNvbm5lY3RTdHIgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29ubmVjdCIpOworICAgIHN0YXRpYyBKU1N0cmluZ1Jl
ZiBkaXNjb25uZWN0U3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRpc2Nvbm5l
Y3QiKTsKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyID0gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBuYW1lU3Ry
ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKTsKKyAgICBKU1N0cmluZ1Jl
ZiBhY3R1YWxOYW1lU3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9pZGVudGlm
aWVyLmNvbnN0RGF0YSgpKTsKKworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgY29u
bmVjdEZ1bmN0aW9uLCBsZW5ndGhTdHIsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGlzU2ln
bmFsID8gMSA6IDApLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoY29udGV4dCwgY29ubmVjdEZ1bmN0aW9uLCBuYW1lU3RyLCBKU1ZhbHVlTWFrZVN0cmlu
Zyhjb250ZXh0LCBjb25uZWN0U3RyKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKKyAgICBKU09i
amVjdFNldFByb3BlcnR5KGNvbnRleHQsIGRpc2Nvbm5lY3RGdW5jdGlvbiwgbGVuZ3RoU3RyLCBK
U1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBpc1NpZ25hbCA/IDEgOiAwKSwgYXR0cmlidXRlcywg
ZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGRpc2Nvbm5lY3RG
dW5jdGlvbiwgbmFtZVN0ciwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZGlzY29ubmVjdFN0
ciksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgY29ubmVjdFN0ciwgY29ubmVjdEZ1bmN0aW9uLCBhdHRyaWJ1dGVzLCBl
eGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBkaXNj
b25uZWN0U3RyLCBkaXNjb25uZWN0RnVuY3Rpb24sIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7Cisg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIGxlbmd0aFN0ciwgSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgMCksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWVTdHIsIEpTVmFsdWVNYWtlU3Ry
aW5nKGNvbnRleHQsIGFjdHVhbE5hbWVTdHIpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworCisg
ICAgSlNTdHJpbmdSZWxlYXNlKGFjdHVhbE5hbWVTdHIpOworICAgIG1fanNPYmplY3QgPSBQYXNz
V2VhazxKU09iamVjdD4odG9KUyhvYmplY3QpKTsKKyAgICByZXR1cm4gb2JqZWN0OwogfQogCi12
b2lkIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllciwgYm9vbCBpc0Nvbm5lY3QsIFBhc3NSZWZQ
dHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2ln
bmF0dXJlKQorSlNWYWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNvbm5lY3RPckRpc2Nvbm5lY3Qo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBib29sIGNvbm5lY3QpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwgaW5zdGFuY2UpOwotICAgIFFXX0QoUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZCk7Ci0KLSAgICBkLT5tX3NpZ25hdHVyZSA9IHNpZ25hdHVy
ZTsKLSAgICBkLT5tX2luZGV4ID0gaW5kZXg7Ci0gICAgZC0+bV9pc0Nvbm5lY3QgPSBpc0Nvbm5l
Y3Q7Ci19CisgICAgUXRSdW50aW1lTWV0aG9kKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0
aG9kKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWQpCisgICAg
ICAgIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2QqPihKU09iamVjdEdldFByaXZhdGUo
ZnVuY3Rpb24pKTsKIAotRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6
Y2FsbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERh
dGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNh
bGxlZSgpKS0+ZF9mdW5jKCk7CisgICAgUVN0cmluZyBmdW5jdGlvbk5hbWUgPSBjb25uZWN0ID8g
UVN0cmluZ0xpdGVyYWwoImNvbm5lY3QiKSA6IFFTdHJpbmdMaXRlcmFsKCJkaXNjb25uZWN0Iik7
CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAvLyBvYmplY3QubWV0aG9kLmNv
bm5lY3QoKTsgb2JqZWN0Lm1ldGhvZC5kaXNjb25uZWN0KCk7CisgICAgaWYgKCFhcmd1bWVudENv
dW50KSB7CisgICAgICAgIFFTdHJpbmcgZXJyb3JTdHIgPSBRU3RyaW5nTGl0ZXJhbCgiUXRNZXRh
TWV0aG9kLiUxOiBubyBhcmd1bWVudHMgZ2l2ZW4iKS5hcmcoY29ubmVjdCA/ICBRU3RyaW5nTGl0
ZXJhbCgiY29ubmVjdCIpIDogUVN0cmluZ0xpdGVyYWwoImRpc2Nvbm5lY3QiKSk7CisgICAgICAg
IHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIGVycm9yU3RyKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgIFFPYmplY3Qq
IHNlbmRlciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOworICAgIC8vIG9iamVjdC5zbG90
LmNvbm5lY3QoLi4uKTsgb2JqZWN0LnNsb3QuZGlzY29ubmVjdCguLi4pOworICAgIGlmICgoIShk
LT5tX2ZsYWdzICYgUXRSdW50aW1lTWV0aG9kOjpNZXRob2RJc1NpZ25hbCkpKSB7CisgICAgICAg
IHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmdMaXRlcmFsKCJRdE1ldGFN
ZXRob2QuJTM6ICUxOjolMigpIGlzIG5vdCBhIHNpZ25hbCIpLmFyZyhRU3RyaW5nOjpmcm9tVXRm
OChkLT5tX29iamVjdC5kYXRhKCktPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKS5hcmcoUVN0
cmluZzo6ZnJvbUFzY2lpKGQtPm1faWRlbnRpZmllcikpLmFyZyhmdW5jdGlvbk5hbWUpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAg
IGlmIChzZW5kZXIpIHsKKyAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX29iamVjdC5kYXRhKCk7
CiAKLSAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm1ldGhvZFRhYmxlKCktPnRvVGhpc09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGV4ZWMpOwotICAgICAgICBKU09iamVjdCogZnVuY09iamVjdCA9IDA7CisgICAgLy8g
ZGVsZXRlZE9iamVjdC5zaWduYWwuY29ubmVjdCguLi4pOworICAgIGlmICghc2VuZGVyKSB7Cisg
ICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmdMaXRlcmFsKCJj
YW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CiAKLSAgICAgICAgLy8gUXRT
Y3JpcHQgY2hlY2tzIHNpZ25hbG5lc3MgZmlyc3QsIGFyZ3VtZW50cyBzZWNvbmQKLSAgICAgICAg
aW50IHNpZ25hbEluZGV4ID0gLTE7CisgICAgaW50IHNpZ25hbEluZGV4ID0gZmluZFNpZ25hbElu
ZGV4KHNlbmRlci0+bWV0YU9iamVjdCgpLCBkLT5tX2luZGV4LCBkLT5tX2lkZW50aWZpZXIpOwog
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5pdGlhbCBpbmRleCBpcyBhIHNpZ25hbAotICAg
ICAgICBRTWV0YU1ldGhvZCBtID0gc2VuZGVyLT5tZXRhT2JqZWN0KCktPm1ldGhvZChkLT5tX2lu
ZGV4KTsKLSAgICAgICAgaWYgKG0ubWV0aG9kVHlwZSgpID09IFFNZXRhTWV0aG9kOjpTaWduYWwp
Ci0gICAgICAgICAgICBzaWduYWxJbmRleCA9IGZpbmRTaWduYWxJbmRleChzZW5kZXItPm1ldGFP
YmplY3QoKSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpOworICAgIEpTT2JqZWN0UmVmIHRh
cmdldE9iamVjdCA9IDA7CisgICAgSlNPYmplY3RSZWYgdGFyZ2V0RnVuY3Rpb24gPSAwOwogCi0g
ICAgICAgIGlmIChzaWduYWxJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgZnVuY09iamVjdCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgICAgICAgICAgICAgIGlmIChmdW5jT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShmdW5jT2JqZWN0LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1l
dGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6
IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpc09iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIGZ1bmN0aW9uIHRvIGNhbGwKLSAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmFzT2JqID0gZXhlYy0+YXJndW1lbnQoMSkudG9P
YmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoYXNPYmotPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGFz
T2JqLCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGdW5jdGlvbiB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0
ID0gYXNPYmo7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAg
ICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBmdW5jSWRlbnQo
ZXhlYywgZnVuY05hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAjIyMgRHJvcEFs
bExvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHJlc29sdmVkIGF0IHRo
aXMgcG9pbnQgaW4gUXRTY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
ID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGZ1bmNJZGVudCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCogYXNGdW5jT2JqID0gdmFsLnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXNGdW5jT2JqLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0
YShhc0Z1bmNPYmosIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNGdW5jT2JqOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nv
bm5lY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuY29ubmVjdDogdGFy
Z2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0YXJn
ZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9k
LmNvbm5lY3Q6IHRoaXNPYmplY3QgaXMgbm90IGFuIG9iamVjdCIpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0aGlz
T2JqZWN0IGlzIG5vdCBhbiBvYmplY3QiKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywg
IlF0TWV0YU1ldGhvZC5jb25uZWN0OiBubyBhcmd1bWVudHMgZ2l2ZW4iKSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogbm8gYXJndW1lbnRz
IGdpdmVuIikpOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKKyAgICAgICAgaWYgKCFK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdKSkgeworICAgICAgICAgICAgc2V0
RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZ0xpdGVyYWwoIlF0TWV0YU1ldGhv
ZC4lMTogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikuYXJnKGZ1bmN0aW9uTmFtZSkpOworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9
CisgICAgICAgIHRhcmdldEZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKTsKKworICAgICAgICAvLyBvYmplY3Quc2lnbmFsLmNvbm5lY3Qo
c29tZUZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKEpTT2JqZWN0SXNGdW5jdGlvbihjb250ZXh0LCB0
YXJnZXRGdW5jdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlSXNPYmplY3RPZkNsYXNz
KGNvbnRleHQsIHRhcmdldEZ1bmN0aW9uLCBwcm90b3R5cGVGb3JTaWduYWxzQW5kU2xvdHMoKSkp
IHsKKyAgICAgICAgICAgICAgICAvLyBvYmplY3Quc2lnbmFsLmNvbm5lY3Qob3RoZXJPYmplY3Qu
c2xvdCk7CisgICAgICAgICAgICAgICAgaWYgKFF0UnVudGltZU1ldGhvZCogdGFyZ2V0TWV0aG9k
ID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0aG9kKj4oSlNPYmplY3RHZXRQcml2YXRlKHRhcmdl
dEZ1bmN0aW9uKSkpCisgICAgICAgICAgICAgICAgICAgIHRhcmdldE9iamVjdCA9IHRvUmVmKFF0
SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UodGFyZ2V0TWV0aG9kLT5tX29iamVjdC5kYXRhKCksIGQt
Pm1faW5zdGFuY2UtPnJvb3RPYmplY3QoKSwgUXRJbnN0YW5jZTo6UXRPd25lcnNoaXApLT5jcmVh
dGVSdW50aW1lT2JqZWN0KHRvSlMoY29udGV4dCkpKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICB0YXJnZXRGdW5jdGlvbiA9IDA7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gb2JqZWN0LnNpZ25hbC5jb25uZWN0KG9iamVjdCwgc29tZUZ1bmN0aW9uKTsKKyAg
ICAgICAgdGFyZ2V0T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcmd1
bWVudHNbMV0pKQorICAgICAgICAgICAgdGFyZ2V0RnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIH0KIAotICAgICAgICAgICAg
aWYgKGQtPm1faXNDb25uZWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gdG8gY29ubmVjdCwgd2Ug
bmVlZDoKLSAgICAgICAgICAgICAgICAvLyAgdGFyZ2V0IG9iamVjdCBbZnJvbSBjdG9yXQotICAg
ICAgICAgICAgICAgIC8vICB0YXJnZXQgc2lnbmFsIGluZGV4IGV0Yy4gW2Zyb20gY3Rvcl0KLSAg
ICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIgZnVuY3Rpb24gW2Zyb20gYXJndW1lbnRzXQotICAg
ICAgICAgICAgICAgIC8vICByZWNlaXZlciB0aGlzIG9iamVjdCBbZnJvbSBhcmd1bWVudHNdCi0K
LSAgICAgICAgICAgICAgICBRdENvbm5lY3Rpb25PYmplY3QqIGNvbm4gPSBRdENvbm5lY3Rpb25P
YmplY3Q6OmNyZWF0ZVdpdGhJbnRlcm5hbEpTQyhleGVjLCBkLT5tX2luc3RhbmNlLCBzaWduYWxJ
bmRleCwgdGhpc09iamVjdCwgZnVuY09iamVjdCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBvayA9
IFFNZXRhT2JqZWN0Ojpjb25uZWN0KHNlbmRlciwgc2lnbmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1l
dGFPYmplY3QoKS0+bWV0aG9kT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGlmICghb2spIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbm47Ci0gICAgICAgICAgICAgICAgICAgIFFT
dHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuY29ubmVjdDog
ZmFpbGVkIHRvIGNvbm5lY3QgdG8gJTE6OiUyKCkiKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9z
aWduYXR1cmUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVFcnJvcihleGVjLCBtc2cudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gU3RvcmUgY29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9ucy5pbnNl
cnQoc2VuZGVyLCBjb25uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIC8vIE5vdyB0byBmaW5kIG91ciBwcmV2aW91cyBjb25uZWN0aW9u
IG9iamVjdC4gSG1tLgotICAgICAgICAgICAgICAgIFFMaXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+
IGNvbm5zID0gY29ubmVjdGlvbnMudmFsdWVzKHNlbmRlcik7Ci0gICAgICAgICAgICAgICAgYm9v
bCByZXQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
Ojp0b1JlZihleGVjKTsKLSAgICAgICAgICAgICAgICBKU09iamVjdFJlZiByZWNlaXZlciA9IDo6
dG9SZWYodGhpc09iamVjdCk7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3RSZWYgcmVjZWl2ZXJG
dW5jdGlvbiA9IDo6dG9SZWYoZnVuY09iamVjdCk7Ci0KLSAgICAgICAgICAgICAgICBmb3JlYWNo
KFF0Q29ubmVjdGlvbk9iamVjdCogY29ubiwgY29ubnMpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSXMgdGhpcyB0aGUgcmlnaHQgY29ubmVjdGlvbj8KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbm4tPm1hdGNoKGNvbnRleHQsIHNlbmRlciwgc2lnbmFsSW5kZXgsIHJlY2VpdmVyLCByZWNl
aXZlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWVwLCBkaXNjb25u
ZWN0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICBRTWV0YU9iamVjdDo6ZGlzY29ubmVjdChz
ZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25uLT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25uOyAvLyB0aGlzIHdpbGwg
YWxzbyByZW1vdmUgaXQgZnJvbSB0aGUgbWFwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgLy8gb2JqZWN0LnNpZ25hbC5jb25uZWN0KHNv
bWVPYmplY3QpOworICAgIGlmICghdGFyZ2V0RnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXhjZXB0
aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZ0xpdGVyYWwoIlF0TWV0YU1ldGhvZC5jb25u
ZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIXJl
dCkgewotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0
cmluZygiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IGZhaWxlZCB0byBkaXNjb25uZWN0IGZyb20g
JTE6OiUyKCkiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJp
bmcoc2VuZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9zaWduYXR1cmUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBt
c2cudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmlu
ZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuJTE6ICUyOjolMygpIGlzIG5vdCBhIHNpZ25h
bCIpKQotICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9pc0Nvbm5l
Y3QgPyAiY29ubmVjdCI6ICJkaXNjb25uZWN0IikpCisgICAgaWYgKGNvbm5lY3QpIHsKKyAgICAg
ICAgLy8gdG8gY29ubmVjdCwgd2UgbmVlZDoKKyAgICAgICAgLy8gIHRhcmdldCBvYmplY3QgW2Zy
b20gY3Rvcl0KKyAgICAgICAgLy8gIHRhcmdldCBzaWduYWwgaW5kZXggZXRjLiBbZnJvbSBjdG9y
XQorICAgICAgICAvLyAgcmVjZWl2ZXIgZnVuY3Rpb24gW2Zyb20gYXJndW1lbnRzXQorICAgICAg
ICAvLyAgcmVjZWl2ZXIgdGhpcyBvYmplY3QgW2Zyb20gYXJndW1lbnRzXQorCisgICAgICAgIFF0
Q29ubmVjdGlvbk9iamVjdCogY29ubiA9IG5ldyBRdENvbm5lY3Rpb25PYmplY3QoY29udGV4dCwg
UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShzZW5kZXIsIGQtPm1faW5zdGFuY2UtPnJvb3RPYmpl
Y3QoKSwgUXRJbnN0YW5jZTo6UXRPd25lcnNoaXApLCBzaWduYWxJbmRleCwgdGFyZ2V0T2JqZWN0
LCB0YXJnZXRGdW5jdGlvbik7CisgICAgICAgIGJvb2wgb2sgPSBRTWV0YU9iamVjdDo6Y29ubmVj
dChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25uLT5tZXRhT2JqZWN0KCktPm1ldGhvZE9m
ZnNldCgpKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgZGVsZXRlIGNvbm47Cisg
ICAgICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0
aG9kLmNvbm5lY3Q6IGZhaWxlZCB0byBjb25uZWN0IHRvICUxOjolMigpIikpCiAgICAgICAgICAg
ICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NO
YW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9zaWdu
YXR1cmUpKTsKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX2lkZW50aWZpZXIpKTsKKyAgICAgICAgICAg
IHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIG1zZyk7CisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJj
YW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7Ci0gICAgfQogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotQ2FsbFR5cGUgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNh
bGxEYXRhKQotewotICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGw7Ci0gICAgcmV0
dXJuIENhbGxUeXBlSG9zdDsKLX0KKyAgICAgICAgLy8gU3RvcmUgY29ubmVjdGlvbgorICAgICAg
ICBRdENvbm5lY3Rpb25PYmplY3Q6OmNvbm5lY3Rpb25zLmluc2VydChzZW5kZXIsIGNvbm4pOwog
Ci1ib29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQotewotICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCo+KGNlbGwpOwotICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogICAgIH0KIAotICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1i
b29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRo
b2QqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cisg
ICAgLy8gTm93IHRvIGZpbmQgb3VyIHByZXZpb3VzIGNvbm5lY3Rpb24gb2JqZWN0LgorICAgIFFM
aXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5zID0gUXRDb25uZWN0aW9uT2JqZWN0Ojpjb25u
ZWN0aW9ucy52YWx1ZXMoc2VuZGVyKTsKIAotICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwotfQorICAgIGZvcmVhY2ggKFF0Q29ubmVjdGlvbk9iamVjdCogY29ubiwgY29u
bnMpIHsKKyAgICAgICAgLy8gSXMgdGhpcyB0aGUgcmlnaHQgY29ubmVjdGlvbj8KKyAgICAgICAg
aWYgKCFjb25uLT5tYXRjaChjb250ZXh0LCBzZW5kZXIsIHNpZ25hbEluZGV4LCB0YXJnZXRPYmpl
Y3QsIHRhcmdldEZ1bmN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi12b2lkIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7CisgICAgICAgIC8vIFllcCwgZGlzY29ubmVjdCBpdAorICAgICAgICBRTWV0YU9i
amVjdDo6ZGlzY29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25uLT5tZXRhT2Jq
ZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKKyAgICAgICAgZGVsZXRlIGNvbm47IC8vIHRoaXMgd2ls
bCBhbHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgIFF0UnVudGltZU1ldGhvZDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQorICAg
IFFTdHJpbmcgbXNnID0gUVN0cmluZ0xpdGVyYWwoIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBm
YWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tICUxOjolMigpIikKKyAgICAgICAgICAgIC5hcmcoUUxh
dGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKQorICAgICAgICAg
ICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faWRlbnRpZmllcikpOwogCi1KU1ZhbHVlIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCi17Ci0gICAgLy8gd2UgaGF2ZSBvbmUgZm9ybWFsIGFyZ3VtZW50LCBhbmQg
b25lIG9wdGlvbmFsCi0gICAgcmV0dXJuIGpzTnVtYmVyKDEpOworICAgIHNldEV4Y2VwdGlvbihj
b250ZXh0LCBleGNlcHRpb24sIG1zZyk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCiAvLyA9PT09PT09PT09PT09PT0KIAorUU11bHRpTWFwPFFPYmplY3Qq
LCBRdENvbm5lY3Rpb25PYmplY3QqPiBRdENvbm5lY3Rpb25PYmplY3Q6OmNvbm5lY3Rpb25zOwor
CiBRdENvbm5lY3Rpb25PYmplY3Q6OlF0Q29ubmVjdGlvbk9iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBzZW5kZXJJbnN0YW5jZSwgaW50IHNpZ25hbElu
ZGV4LCBKU09iamVjdFJlZiByZWNlaXZlciwgSlNPYmplY3RSZWYgcmVjZWl2ZXJGdW5jdGlvbikK
ICAgICA6IFFPYmplY3Qoc2VuZGVySW5zdGFuY2UtPmdldE9iamVjdCgpKQogICAgICwgbV9jb250
ZXh0KEpTQ29udGV4dEdldEdsb2JhbENvbnRleHQoY29udGV4dCkpCkBAIC0xNzY5LDcgKzE1NzMs
NyBAQCBRdENvbm5lY3Rpb25PYmplY3Q6On5RdENvbm5lY3Rpb25PYmplY3QoKQogewogICAgIC8v
IFdlIGNhbiBzYWZlbHkgdXNlIG1fb3JpZ2luYWxTZW5kZXIgYmVjYXVzZSBjb25uZWN0aW9uIG9i
amVjdCB3aWxsIG5ldmVyIG91dGxpdmUgdGhlIHNlbmRlciwKICAgICAvLyB3aGljaCBpcyBpdHMg
UU9iamVjdCBwYXJlbnQuCi0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y29ubmVjdGlv
bnMucmVtb3ZlKG1fb3JpZ2luYWxTZW5kZXIsIHRoaXMpOworICAgIGNvbm5lY3Rpb25zLnJlbW92
ZShtX29yaWdpbmFsU2VuZGVyLCB0aGlzKTsKIAogICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250
ZXh0LCBtX3JlY2VpdmVyKTsKICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9yZWNl
aXZlckZ1bmN0aW9uKTsKQEAgLTE5MTYsMTEgKzE3MjAsNiBAQCBib29sIFF0Q29ubmVjdGlvbk9i
amVjdDo6bWF0Y2goSlNDb250ZXh0UmVmIGNvbnRleHQsIFFPYmplY3QqIHNlbmRlciwgaW50IHNp
Z25hbAogICAgIHJldHVybiByZWNlaXZlck1hdGNoICYmIEpTVmFsdWVJc0VxdWFsKGNvbnRleHQs
IHJlY2VpdmVyRnVuY3Rpb24sIG1fcmVjZWl2ZXJGdW5jdGlvbiwgaWdub3JlZEV4Y2VwdGlvbik7
CiB9CiAKLVF0Q29ubmVjdGlvbk9iamVjdCogUXRDb25uZWN0aW9uT2JqZWN0OjpjcmVhdGVXaXRo
SW50ZXJuYWxKU0MoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNlbmRl
ckluc3RhbmNlLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0KiByZWNlaXZlciwgSlNPYmplY3Qq
IHJlY2VpdmVyRnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIG5ldyBRdENvbm5lY3Rpb25PYmplY3Qo
Ojp0b1JlZihleGVjKSwgc2VuZGVySW5zdGFuY2UsIHNpZ25hbEluZGV4LCA6OnRvUmVmKHJlY2Vp
dmVyKSwgOjp0b1JlZihyZWNlaXZlckZ1bmN0aW9uKSk7Ci19Ci0KIC8vID09PT09PT09PT09PT09
PQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6UXRBcnJheShRTGlzdDxUPiBs
aXN0LCBRTWV0YVR5cGU6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2Jq
ZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKaW5kZXggYjJmZDY2ZDQzNjUz
YWI1NmQyNjk3Mjk2YjYxMDk4NDM3ZDAzMDg3ZS4uNDdkMGJhMGZkZjBiMDdjN2NiOWFhZGZkZjE0
ODBlMTliM2I2MjkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCkBAIC05
NSwxNDMgKzk1LDM2IEBAIHByaXZhdGU6CiAgICAgUU1ldGFUeXBlOjpUeXBlIG1fdHlwZTsKIH07
CiAKLS8vIEJhc2VkIG9uIFJ1bnRpbWVNZXRob2QKLQotLy8gRXh0cmEgZGF0YSBjbGFzc2VzICh0
byBhdm9pZCB0aGUgQ0VMTF9TSVpFIGxpbWl0IG9uIEpTIG9iamVjdHMpCi1jbGFzcyBRdFJ1bnRp
bWVNZXRob2Q7Ci1jbGFzcyBRdFJ1bnRpbWVNZXRob2REYXRhIDogcHVibGljIFdlYWtIYW5kbGVP
d25lciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5RdFJ1bnRpbWVNZXRob2REYXRh
KCk7Ci0gICAgICAgIFJlZlB0cjxRdEluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgICAgICBXZWFr
PFF0UnVudGltZU1ldGhvZD4gbV9maW5hbGl6ZXI7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2
b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopOwotfTsKLQotY2xhc3MgUXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZDsKLWNsYXNzIFF0UnVudGltZU1ldGFNZXRob2REYXRhIDogcHVi
bGljIFF0UnVudGltZU1ldGhvZERhdGEgewotICAgIHB1YmxpYzoKLSAgICAgICAgflF0UnVudGlt
ZU1ldGFNZXRob2REYXRhKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgbV9zaWduYXR1cmU7Ci0gICAg
ICAgIGJvb2wgbV9hbGxvd1ByaXZhdGU7Ci0gICAgICAgIGludCBtX2luZGV4OwotICAgICAgICBX
cml0ZUJhcnJpZXI8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZD4gbV9jb25uZWN0OwotICAgICAg
ICBXcml0ZUJhcnJpZXI8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZD4gbV9kaXNjb25uZWN0Owot
fTsKLQotY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEgOiBwdWJsaWMgUXRSdW50
aW1lTWV0aG9kRGF0YSB7Ci0gICAgcHVibGljOgotICAgICAgICB+UXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZERhdGEoKTsKLSAgICAgICAgUUJ5dGVBcnJheSBtX3NpZ25hdHVyZTsKLSAgICAgICAg
aW50IG1faW5kZXg7Ci0gICAgICAgIGJvb2wgbV9pc0Nvbm5lY3Q7Ci19OwotCi0vLyBDb21tb24g
YmFzZSBjbGFzcyAoZG9lc24ndCByZWFsbHkgZG8gYW55dGhpbmcgaW50ZXJlc3RpbmcpCi1jbGFz
cyBRdFJ1bnRpbWVNZXRob2QgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitjbGFzcyBRdFJ1
bnRpbWVNZXRob2QgewogcHVibGljOgotICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNl
OworICAgIGVudW0gTWV0aG9kRmxhZ3MgeworICAgICAgICBNZXRob2RJc1NpZ25hbCA9IDEsCisg
ICAgICAgIEFsbG93UHJpdmF0ZSA9IDIKKyAgICB9OwogCisgICAgUXRSdW50aW1lTWV0aG9kKEpT
Q29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBRT2JqZWN0KiwgY29uc3QgUUJ5dGVB
cnJheSYgaWRlbnRpZmllciwgaW50IHNpZ25hbEluZGV4LCBpbnQgZmxhZ3MsIFF0SW5zdGFuY2Uq
KTsKICAgICB+UXRSdW50aW1lTWV0aG9kKCk7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBK
U1ZhbHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1Zh
bHVlUmVmIGNvbm5lY3QoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1Zh
bHVlUmVmIGRpc2Nvbm5lY3QoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgc3RhdGlj
IEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3Qt
PmZ1bmN0aW9uUHJvdG90eXBlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLQotcHJv
dGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgY29uc3QgVVN0cmlu
ZyYsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4pOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW47Ci0KLSAgICBRdFJ1bnRpbWVNZXRob2REYXRhICpkX2Z1bmMoKSBj
b25zdCB7cmV0dXJuIGRfcHRyO30KLSAgICBRdFJ1bnRpbWVNZXRob2QoUXRSdW50aW1lTWV0aG9k
RGF0YSAqZGQsIEV4ZWNTdGF0ZSAqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJiBuYW1lKTsK
LSAgICBRdFJ1bnRpbWVNZXRob2REYXRhICpkX3B0cjsKLX07Ci0KLWNsYXNzIFF0UnVudGltZU1l
dGFNZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IFF0UnVudGltZU1ldGhvZCBCYXNlOworICAgIEpTT2JqZWN0UmVmIGpzT2JqZWN0UmVmKEpTQ29u
dGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIHN0YXRpYyBRdFJ1bnRpbWVN
ZXRhTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJy
YXkmIHNpZ25hdHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUpCi0gICAgewotICAgICAgICBTdHJ1Y3R1
cmUqIGRvbVN0cnVjdHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UXRS
dW50aW1lTWV0YU1ldGhvZD4oZXhlYyk7Ci0gICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIG1l
dGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU1ldGFNZXRob2Q+KCpleGVjLT5oZWFw
KCkpKSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIGRvbVN0cnVjdHVyZSwgbmFtZSk7Ci0gICAg
ICAgIG1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgbmFtZSwgaW5zdGFuY2UsIGluZGV4LCBz
aWduYXR1cmUsIGFsbG93UHJpdmF0ZSk7Ci0gICAgICAgIHJldHVybiBtZXRob2Q7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSAq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKLQotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSogZF9m
dW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZU1ldGFNZXRob2RE
YXRhKj4oZF9wdHIpO30KKyAgICBjb25zdCBRQnl0ZUFycmF5JiBuYW1lKCkgeyByZXR1cm4gbV9p
ZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiwgaW50
IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKTsK
LQotICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwot
ICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKiBl
eGVjKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBjb25uZWN0R2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgZGlzY29u
bmVjdEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotfTsKLQotY2xh
c3MgUXRDb25uZWN0aW9uT2JqZWN0OwotY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCA6
IHB1YmxpYyBRdFJ1bnRpbWVNZXRob2QgewotcHVibGljOgotICAgIHR5cGVkZWYgUXRSdW50aW1l
TWV0aG9kIEJhc2U7Ci0KLSAgICBzdGF0aWMgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbmFtZSwgYm9vbCBpc0Nvbm5lY3Qs
IFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3QgUUJ5dGVB
cnJheSYgc2lnbmF0dXJlKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUg
PSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2Q+KGV4ZWMpOwotICAgICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKiBtZXRob2Qg
PSBuZXcgKGFsbG9jYXRlQ2VsbDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kPigqZXhlYy0+aGVh
cCgpKSkgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZChleGVjLCBkb21TdHJ1Y3R1cmUsIG5hbWUp
OwotICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIG5hbWUsIGlzQ29ubmVjdCwg
aW5zdGFuY2UsIGluZGV4LCBzaWduYXR1cmUpOwotICAgICAgICByZXR1cm4gbWV0aG9kOwotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUgKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7Ci0gCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0KLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERh
dGEqIGRfZnVuYygpIGNvbnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kRGF0YSo+KGRfcHRyKTt9Ci0KLXByaXZhdGU6Ci0gICAgUXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiwgYm9vbCBp
c0Nvbm5lY3QsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4sIGludCBpbmRleCwgY29uc3QgUUJ5dGVB
cnJheSYgc2lnbmF0dXJlKTsKLQotICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGwoRXhlY1N0YXRlKiBleGVjKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgUU11bHRpTWFw
PFFPYmplY3QgKiwgUXRDb25uZWN0aW9uT2JqZWN0ICo+IGNvbm5lY3Rpb25zOwotICAgIGZyaWVu
ZCBjbGFzcyBRdENvbm5lY3Rpb25PYmplY3Q7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVu
Y3Rpb24gY29ubmVjdEZ1bmN0aW9uOworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9u
IGRpc2Nvbm5lY3RGdW5jdGlvbjsKKworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNvbm5lY3RPckRp
c2Nvbm5lY3QoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGJvb2wgY29ubmVjdCk7CisgICAgUVBv
aW50ZXI8UU9iamVjdD4gbV9vYmplY3Q7CisgICAgUUJ5dGVBcnJheSBtX2lkZW50aWZpZXI7Cisg
ICAgaW50IG1faW5kZXg7CisgICAgaW50IG1fZmxhZ3M7CisgICAgSlNDbGFzc1JlZiBtX2NsYXNz
UmVmOworICAgIFdlYWs8SlNPYmplY3Q+IG1fanNPYmplY3Q7CisgICAgUXRJbnN0YW5jZSogbV9p
bnN0YW5jZTsKIH07CiAKIC8vIEEgUXRDb25uZWN0aW9uT2JqZWN0IHJlcHJlc2VudHMgYSBjb25u
ZWN0aW9uIGNyZWF0ZWQgaW5zaWRlIEpTLiBJdCB3aWxsIGNvbm5lY3QgaXRzIG93biBleGVjdXRl
KCkgc2xvdApAQCAtMjQ3LDkgKzE0MCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbWF0Y2goSlND
b250ZXh0UmVmLCBRT2JqZWN0KiBzZW5kZXIsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgSlNPYmplY3RSZWYgZnVuY09iamVjdCk7CiAKLSAgICAvLyBOb3RlOiBmb3Ig
Y2FsbGVycyB1c2luZyBKU0MgaW50ZXJuYWxzLCByZW1vdmUgb25jZSB3ZSBkb24ndCBuZWVkIGFu
eW1vcmUuCi0gICAgc3RhdGljIFF0Q29ubmVjdGlvbk9iamVjdCogY3JlYXRlV2l0aEludGVybmFs
SlNDKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gc2VuZGVySW5zdGFuY2UsIGlu
dCBzaWduYWxJbmRleCwgSlNPYmplY3QqIHJlY2VpdmVyLCBKU09iamVjdCogcmVjZWl2ZXJGdW5j
dGlvbik7Ci0KIHByaXZhdGU6CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKICAg
ICBSZWZQdHI8UXRJbnN0YW5jZT4gbV9zZW5kZXJJbnN0YW5jZTsKQEAgLTI2MCw2ICsxNTAsOSBA
QCBwcml2YXRlOgogICAgIGludCBtX3NpZ25hbEluZGV4OwogICAgIEpTT2JqZWN0UmVmIG1fcmVj
ZWl2ZXI7CiAgICAgSlNPYmplY3RSZWYgbV9yZWNlaXZlckZ1bmN0aW9uOworCisgICAgZnJpZW5k
IGNsYXNzIFF0UnVudGltZU1ldGhvZDsKKyAgICBzdGF0aWMgUU11bHRpTWFwPFFPYmplY3QqLCBR
dENvbm5lY3Rpb25PYmplY3QqPiBjb25uZWN0aW9uczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5j
cHAKaW5kZXggOGQ0NDM1ODlhZDhmNDk0MDU2MDkzMWIyNjQ4YjIyZmZlMDc0Mjg1MS4uNzUyZjA0
OThiZWJjNTAyN2RhODlhYWFhZmFmOWQwZWQ5ZDE5OTRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC90ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0X3FvYmplY3RicmlkZ2UuY3Bw
CkBAIC0xNjAyLDIwICsxNjAyLDIwIEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmNvbm5lY3RB
bmREaXNjb25uZWN0KCkKICAgICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJl
dCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGUuY29ubmVjdCgxMjMpIiwgdHlwZSk7CiAg
ICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxh
dGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogTXlRT2JqZWN0Ojpt
eUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBR
TGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJ
bnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgUVN0
cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZv
a2FibGUuY29ubmVjdChmdW5jdGlvbigpIHsgfSkiLCB0eXBlKTsKICAgICAgICAgUUNPTVBBUkUo
dHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBl
RXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMg
bm90IGEgc2lnbmFsIikpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVy
cm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5v
dCBhIHNpZ25hbCIpKTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIFFTdHJpbmcgdHlwZTsKICAg
ICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmNvbm5lY3QoMTIz
KSIsIHR5cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09N
UEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6
IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0
aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBm
dW5jdGlvbiIpKTsKICAgICB9CiAKICAgICB7CkBAIC0xNjQ0LDI3ICsxNjQ0LDI3IEBAIHZvaWQg
dHN0X1FPYmplY3RCcmlkZ2U6OmNvbm5lY3RBbmREaXNjb25uZWN0KCkKICAgICAgICAgUVN0cmlu
ZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygidmFyIG8gPSB7IH07IG8uZGlz
Y29ubmVjdCA9IG15T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3Q7IG8uZGlzY29ubmVjdCgx
MjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFD
T01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29u
bmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAg
ICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nv
bm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAg
fQogCiAgICAgewogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0g
ZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5kaXNjb25uZWN0KDEyMykiLCB0eXBlKTsKICAg
ICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0
aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6
Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOworICAgICAgICBRQ09NUEFSRShyZXQs
IFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0
OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKICAgICB9CiAgICAgewogICAgICAg
ICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5t
eUludm9rYWJsZS5kaXNjb25uZWN0KGZ1bmN0aW9uKCkgeyB9KSIsIHR5cGUpOwogICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJp
bmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZv
a2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGlu
MVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6Om15SW52
b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUVN0
cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlTaWdu
YWwuZGlzY29ubmVjdCgxMjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJv
cik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1l
dGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgICAg
ICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29u
bmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwogICAgIH0KIAogICAgIHsKQEAgLTE4
NjcsNyArMTg2Nyw3IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6Om9iamVjdERlbGV0ZWQoKQog
ICAgIGV2YWxKUygiYmFyLmludFByb3BlcnR5ID0gMTIzOyIpOwogICAgIFFDT01QQVJFKHFvYmot
PmludFByb3BlcnR5KCksIDEyMyk7CiAgICAgcW9iai0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgp
OwotICAgIGV2YWxKUygiYmFyLm15SW52b2thYmxlLmNhbGwoYmFyKTsiKTsKKyAgICBldmFsSlMo
ImJhci5teUludm9rYWJsZShiYXIpOyIpOwogICAgIFFDT01QQVJFKHFvYmotPnF0RnVuY3Rpb25J
bnZva2VkKCksIDApOwogCiAgICAgLy8gZG8gdGhpcywgdG8gZW5zdXJlIHRoYXQgd2UgY2FjaGUg
dGhhdCBpdCBpbXBsZW1lbnRzIGNhbGwKQEAgLTIxNjcsNyArMjE2Nyw3IEBAIHZvaWQgdHN0X1FP
YmplY3RCcmlkZ2U6OmludHJvc3BlY3RRdE1ldGhvZHMoKQogICAgICAgICBRQ09NUEFSRShldmFs
SlMoImRlc2NyaXB0b3Iuc2V0IiksIHNVbmRlZmluZWQpOwogICAgICAgICBRQ09NUEFSRShldmFs
SlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci52YWx1ZSA9PT0gJTBbJyUxJ10iKS5h
cmcobWV0aG9kTG9va3VwKS5hcmcobmFtZSkpLCBzVHJ1ZSk7CiAgICAgICAgIFFDT01QQVJFKGV2
YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCJkZXNjcmlwdG9yLmVudW1lcmFibGUiKSksIHNGYWxz
ZSk7Ci0gICAgICAgIFFDT01QQVJFKGV2YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCJkZXNjcmlw
dG9yLmNvbmZpZ3VyYWJsZSIpKSwgc0ZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUoZXZhbEpTKFFT
dHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IuY29uZmlndXJhYmxlIikpLCBzVHJ1ZSk7CiAg
ICAgfQogCiAgICAgUVZFUklGWShldmFsSlNWKCJ2YXIgcHJvcHM9W107IGZvciAodmFyIHAgaW4g
bXlPYmplY3QuZGVsZXRlTGF0ZXIpIHtwcm9wcy5wdXNoKHApO307IHByb3BzLnNvcnQoKSIpLnRv
U3RyaW5nTGlzdCgpLmlzRW1wdHkoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157717</attachid>
            <date>2012-08-10 05:47:37 -0700</date>
            <delta_ts>2012-08-11 14:46:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93476-20120810144811.patch</filename>
            <type>text/plain</type>
            <size>52017</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUyNTRkMzBjNzBmYTg1
ZWM0MmY2NTNhNGFkMzJlZWVkMTkyOTllZi4uNDNjOTI5ODNkNzMyZGEwYTQ5ZTJkYzkwOTE2MjQ2
ODk2MmZiZjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA4LTA4ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFBv
cnQgbWV0YSBtZXRob2Qvc2lnbmFsL3Nsb3QgaGFuZGxpbmcgaW4gcnVuLXRpbWUgYnJpZGdlIHRv
IHVzZSBKU0MgQyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzNDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUG9ydGVkIHRoZSBjb2RlIHRoYXQgbWFwcGVkIGludm9rYWJsZSBtZXRob2RzIChhbmQg
c2lnbmFscy9zbG90cykgYXMKKyAgICAgICAgd2VsbCBhcyB0aGUgY29kZSB0aGF0IHByb3ZpZGVz
IHRoZSBjb25uZWN0KCkgYW5kIGRpc2Nvbm5lY3QoKSBmdW5jdGlvbnMKKyAgICAgICAgb3ZlciB0
byB1c2UgdGhlIEpTQyBDIEFQSS4gSW4gdGhlIHByb2Nlc3Mgb25lIGJlaGF2aW91cmFsIGNoYW5n
ZSB3YXMKKyAgICAgICAgaW1wbGVtZW50ZWQ6IFByZXZpb3VzbHkgbWV0YSBtZXRob2RzIHdlcmUg
YWN0dWFsbHkgZnVuY3Rpb24gb2JqZWN0cworICAgICAgICB0aGF0IHRocm91Z2ggRnVuY3Rpb24u
cHJvdG90eXBlIGFsbG93ZWQgY2FsbGluZyB2aWEKKyAgICAgICAgb2JqZWN0Lm1ldGhvZC5jYWxs
KG9iamVjdCkuIFRocm91Z2ggdGhlIHVzZSBvZiBwbGFpbiBKUyBvYmplY3RzIHRoYXQgaXMKKyAg
ICAgICAgbm90IHBvc3NpYmxlIGFueW1vcmUuCisKKyAgICAgICAgSWYgd2UgdHJpZWQgdG8gY29u
dGludWUgdG8gdXNlIGZ1bmN0aW9uIG9iamVjdHMgKEpTT2JqZWN0TWFrZUZ1bmN0aW9uKQorICAg
ICAgICB0aGVuIHdlIHdvdWxkIGxvb3NlIHRoZSBhYmlsaXR5IHRvIHN0b3JlIHRoZSBwcml2YXRl
IHBvaW50ZXIuIEFuCisgICAgICAgIGFsdGVybmF0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHVz
ZSBhIHJlZ3VsYXIgb2JqZWN0IGFuZCBpbnN0YWxsIHRoZQorICAgICAgICBGdW5jdGlvbiBwcm90
b3R5cGUgKEZ1bmN0aW9uLnByb3RvdHlwZSksIGJ1dCB1bmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCBk
bworICAgICAgICB0aGF0IHdpdGhvdXQgbG9vc2luZyB0aGUgY29tbW9uIHByb3RvdHlwZSBmb3Ig
c2lnbmFscyBhbmQgc2xvdHMuCisKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDbGFzczo6ZmFsbGJhY2tPYmplY3QpOgorICAgICAg
ICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpR
dEluc3RhbmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3Rh
bmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfaW5zdGFuY2Uu
aDoKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKFF0SW5zdGFuY2UpOgorICAgICAgICAq
IGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OnByb3Rv
dHlwZUZvclNpZ25hbHNBbmRTbG90cyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRp
bWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1
bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRSdW50aW1lTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGlt
ZU1ldGhvZDo6Y29ubmVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRo
b2Q6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9k
Ojpqc09iamVjdFJlZik6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6
OmNvbm5lY3RPckRpc2Nvbm5lY3QpOgorICAgICAgICAoQmluZGluZ3MpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0Ojp+UXRDb25uZWN0aW9uT2JqZWN0KToKKyAg
ICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRSdW50aW1lTWV0aG9kOjpuYW1lKToKKyAgICAgICAgKFF0UnVudGltZU1ldGhvZCk6CisgICAg
ICAgIChRdENvbm5lY3Rpb25PYmplY3QpOgorCiAyMDEyLTA4LTA4ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN0b3JlIGxh
c3QgZXZhbHVhdGlvbiByZXN1bHQgaW4gJF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNjZjM2E2YmNhMzll
NTIyNTQ2ZWI1OGRkNmZlMDAxOTczODg2MjI2ZC4uNzczZTM3YzMwMWMzMGRlZDk1MGMwZmQyMjQ5
Y2I4MjIzN2YyYTY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyMyBAQAogMjAxMi0wOC0w
OCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKKyAgICAgICAg
W1F0XSBQb3J0IG1ldGEgbWV0aG9kL3NpZ25hbC9zbG90IGhhbmRsaW5nIGluIHJ1bi10aW1lIGJy
aWRnZSB0byB1c2UgSlNDIEMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MzQ3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENoYW5nZWQgc2VtYW50aWNzIG9mIHNvbWUgdGVzdCBleHBlY3RhdGlvbnMu
IFNpbWlsYXJseSB0byByMTI1MDMyIHdoZW4gZ2VuZXJhdGluZworICAgICAgICBlcnJvciBleGNl
cHRpb25zIGZvciBjb25uZWN0L2Rpc2Nvbm5lY3QsIHdlIGNhbm5vdCBnZW5lcmF0ZSBleHBsaWNp
dCB0eXBlIGVycm9yCisgICAgICAgIGV4Y2VwdGlvbnMgYnV0IG9ubHkgZ2VuZXJpYyBlcnJvcnMu
IEFub3RoZXIgY2hhbmdlIGlzIHRoYXQgdGhlIG1ldGEtbWV0aG9kIHdyYXBwZXIKKyAgICAgICAg
ZG9lc24ndCBzdXBwb3J0IHRoZSBjYWxsKCkgdGhyb3VnaCBGdW5jdGlvbi5wcm90b3R5cGUgYW55
bW9yZS4gU2VlIFdlYkNvcmUgY2hhbmdlbG9nCisgICAgICAgIGZvciBkZXRhaWxzLgorCisgICAg
ICAgICogdGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHA6CisgICAgICAg
ICh0c3RfUU9iamVjdEJyaWRnZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QpOgorICAgICAgICAodHN0
X1FPYmplY3RCcmlkZ2U6Om9iamVjdERlbGV0ZWQpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlk
Z2U6OmludHJvc3BlY3RRdE1ldGhvZHMpOgorCisyMDEyLTA4LTA4ICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKwogICAgICAgICBbUXRdIFBvcnQgaW50ZXJuYWwg
ZmluZE1ldGhvZEluZGV4IG1ldGhvZCBtYXRjaGVyIHRvIHVzZSBKU0MgQyBBUEkKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNDYzCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCmluZGV4IGVlMjJhNjg2MWJjNTFhZWI3NThjN2U4YTY5
YThmMmI5YjM0Y2ExYzkuLjIwOGIxYzBmYjNiM2E5YWNmODVjMjQ2MDBmN2YyOWE2Y2M1MzgwYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcApAQCAtMjAsNiArMjAsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF0X2NsYXNzLmgiCiAKKyNpbmNsdWRlICJB
UElDYXN0LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgInF0X2luc3RhbmNl
LmgiCiAjaW5jbHVkZSAicXRfcnVudGltZS5oIgpAQCAtNjksMTQgKzcwLDE1IEBAIGNvbnN0IGNo
YXIqIFF0Q2xhc3M6Om5hbWUoKSBjb25zdAogSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFja09iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEluc3RhbmNlKiBpbnN0LCBQcm9wZXJ0eU5hbWUgaWRlbnRpZmll
cikKIHsKICAgICBRdEluc3RhbmNlKiBxdGluc3QgPSBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4o
aW5zdCk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKKyAgICBKU1Zh
bHVlUmVmKiBleGNlcHRpb24gPSAwOwogCiAgICAgVVN0cmluZyB1c3RyaW5nKGlkZW50aWZpZXIu
cHVibGljTmFtZSgpKTsKICAgICBjb25zdCBRQnl0ZUFycmF5IG5hbWUgPSBRU3RyaW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPih1c3RyaW5nLmNoYXJhY3RlcnMoKSksIHVzdHJpbmcu
bGVuZ3RoKCkpLnRvTGF0aW4xKCk7CiAKICAgICAvLyBGaXJzdCBzZWUgaWYgd2UgaGF2ZSBhIGNh
Y2hlIGhpdAotICAgIEpTT2JqZWN0KiB2YWwgPSBxdGluc3QtPm1fbWV0aG9kcy52YWx1ZShuYW1l
KS5nZXQoKTsKLSAgICBpZiAodmFsKQotICAgICAgICByZXR1cm4gdmFsOworICAgIGlmIChRdFJ1
bnRpbWVNZXRob2QqIG1ldGhvZCA9IHF0aW5zdC0+bV9tZXRob2RzLnZhbHVlKG5hbWUpKQorICAg
ICAgICByZXR1cm4gdG9KUyhtZXRob2QtPmpzT2JqZWN0UmVmKGNvbnRleHQsIGV4Y2VwdGlvbikp
OwogCiAgICAgLy8gTm9wZSwgY3JlYXRlIGFuIGVudHJ5CiAgICAgY29uc3QgUUJ5dGVBcnJheSBu
b3JtYWwgPSBRTWV0YU9iamVjdDo6bm9ybWFsaXplZFNpZ25hdHVyZShuYW1lLmNvbnN0RGF0YSgp
KTsKQEAgLTg2LDkgKzg4LDExIEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdCwgUHJvcGVydHlOYW1lIGlkCiAgICAgaWYgKG5v
cm1hbC5jb250YWlucygnKCcpICYmIChpbmRleCA9IG1fbWV0YU9iamVjdC0+aW5kZXhPZk1ldGhv
ZChub3JtYWwpKSAhPSAtMSkgewogICAgICAgICBRTWV0YU1ldGhvZCBtID0gbV9tZXRhT2JqZWN0
LT5tZXRob2QoaW5kZXgpOwogICAgICAgICBpZiAobS5hY2Nlc3MoKSAhPSBRTWV0YU1ldGhvZDo6
UHJpdmF0ZSkgewotICAgICAgICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gUXRSdW50
aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIHVzdHJpbmcsIHN0YXRpY19jYXN0PFF0SW5zdGFu
Y2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwgZmFsc2UpOwotICAgICAgICAgICAgcXRpbnN0LT5t
X21ldGhvZHMuaW5zZXJ0KG5hbWUsIHZhbCk7Ci0gICAgICAgICAgICByZXR1cm4gdmFsOworICAg
ICAgICAgICAgaW50IGZsYWdzID0gbS5tZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6OlNpZ25h
bCA/IFF0UnVudGltZU1ldGhvZDo6TWV0aG9kSXNTaWduYWwgOiAwOworICAgICAgICAgICAgUXRS
dW50aW1lTWV0aG9kKiBtZXRob2QgPSBuZXcgUXRSdW50aW1lTWV0aG9kKGNvbnRleHQsIGV4Y2Vw
dGlvbiwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3QpLT5nZXRPYmplY3QoKSwgbm9ybWFs
LCBpbmRleCwgZmxhZ3MsIHF0aW5zdCk7CisgICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5p
bnNlcnQobmFtZSwgbWV0aG9kKTsKKworICAgICAgICAgICAgcmV0dXJuIHRvSlMobWV0aG9kLT5q
c09iamVjdFJlZihjb250ZXh0LCBleGNlcHRpb24pKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTAwLDkgKzEwNCwxMCBAQCBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgSW5zdGFuY2UqIGluc3QsIFByb3BlcnR5TmFtZSBpZAogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKG5vcm1hbCA9PSBtLm5hbWUoKSkgewotICAgICAgICAgICAg
UXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4
ZWMsIHVzdHJpbmcsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1h
bCwgZmFsc2UpOwotICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIHZh
bCk7Ci0gICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAgICAgICAgaW50IGZsYWdzID0gbS5t
ZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6OlNpZ25hbCA/IFF0UnVudGltZU1ldGhvZDo6TWV0
aG9kSXNTaWduYWwgOiAwOworICAgICAgICAgICAgUXRSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBu
ZXcgUXRSdW50aW1lTWV0aG9kKGNvbnRleHQsIGV4Y2VwdGlvbiwgc3RhdGljX2Nhc3Q8UXRJbnN0
YW5jZSo+KGluc3QpLT5nZXRPYmplY3QoKSwgbm9ybWFsLCBpbmRleCwgZmxhZ3MsIHF0aW5zdCk7
CisgICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5pbnNlcnQobmFtZSwgbWV0aG9kKTsKKyAg
ICAgICAgICAgIHJldHVybiB0b0pTKG1ldGhvZC0+anNPYmplY3RSZWYoY29udGV4dCwgZXhjZXB0
aW9uKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwCmluZGV4IDRhMDg3NTUwNmQ3ZWZhY2NiYjI0NjkxMGU1NzY3YzEwYzAxNTZlOGUu
LjZhZjQ5ODI0YzkxZjk4ZjQ1NmI0MTQ3MTc1MTQxZmUwYzAwMDk3Y2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcApAQCAtOTcsNyArOTcsOCBAQCBRdEluc3RhbmNl
Ojp+UXRJbnN0YW5jZSgpCiAKICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7
CiAKLSAgICAvLyBjbGVhbiB1cCAodW5wcm90ZWN0IGZyb20gZ2MpIHRoZSBKU1ZhbHVlcyB3ZSd2
ZSBjcmVhdGVkCisgICAgLy8gQ2xlYW4gdXAgKHVucHJvdGVjdCBmcm9tIGdjKSB0aGUgSlNWYWx1
ZXMgd2UndmUgY3JlYXRlZC4KKyAgICBxRGVsZXRlQWxsKG1fbWV0aG9kcyk7CiAgICAgbV9tZXRo
b2RzLmNsZWFyKCk7CiAKICAgICBxRGVsZXRlQWxsKG1fZmllbGRzKTsKQEAgLTE1MCwxNiArMTUx
LDYgQEAgdm9pZCBRdEluc3RhbmNlOjpwdXQoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW0KICAgICBKU09iamVjdDo6cHV0KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgUXRJbnN0YW5jZTo6
cmVtb3ZlVW51c2VkTWV0aG9kcygpCi17Ci0gICAgZm9yIChRSGFzaDxRQnl0ZUFycmF5LCBRdFdl
YWtPYmplY3RSZWZlcmVuY2U+OjpJdGVyYXRvciBpdCA9IG1fbWV0aG9kcy5iZWdpbigpLCBlbmQg
PSBtX21ldGhvZHMuZW5kKCk7IGl0ICE9IGVuZDsgKSB7Ci0gICAgICAgIGlmICghaXQudmFsdWUo
KS5nZXQoKSkKLSAgICAgICAgICAgIGl0ID0gbV9tZXRob2RzLmVyYXNlKGl0KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgKytpdDsKLSAgICB9Ci19Ci0KIFF0SW5zdGFuY2UqIFF0SW5zdGFu
Y2U6OmdldEluc3RhbmNlKEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFvYmplY3QpCkBA
IC0xODIsNiArMTczLDcgQEAgQ2xhc3MqIFF0SW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKIFJ1
bnRpbWVPYmplY3QqIFF0SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIHFEZWxldGVBbGwobV9tZXRo
b2RzKTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsKICAgICByZXR1cm4gUXRSdW50aW1lT2JqZWN0
OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmgKaW5kZXggMTEwY2IxYjhiZTU4NDE4YTcz
NjZkZDRiODk0Y2EyMTRjOTgxMmU4NS4uMzMwMzJhNWE2ODEzMWRkOGUxZmIwNzViNWUxNGQ0YjNh
MGU5Mjg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmgKQEAgLTM0LDcg
KzM0LDcgQEAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAogY2xhc3MgUXRDbGFzczsKIGNsYXNzIFF0
RmllbGQ7Ci1jbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kOworY2xhc3MgUXRSdW50aW1lTWV0aG9k
OwogCiBjbGFzcyBRdEluc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsKIHB1YmxpYzoKQEAgLTcy
LDggKzcyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBwdXQoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgdm9pZCByZW1vdmVVbnVzZWRNZXRob2Rz
KCk7Ci0KICAgICBzdGF0aWMgUXRJbnN0YW5jZSogZ2V0SW5zdGFuY2UoSlNPYmplY3QqKTsKIAog
ICAgIGNsYXNzIFF0U2VuZGVyU3RhY2sgewpAQCAtODksMzkgKzg3LDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBRdFNlbmRlclN0YWNrKiBxdFNlbmRlclN0YWNrKCk7CiAKIHByaXZhdGU6Ci0KLSAg
ICBjbGFzcyBRdFdlYWtPYmplY3RSZWZlcmVuY2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUXRX
ZWFrT2JqZWN0UmVmZXJlbmNlKEpTT2JqZWN0KiByZWZlcmVuY2UpCi0gICAgICAgICAgICA6IG1f
cmVmZXJlbmNlKHJlZmVyZW5jZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUXRX
ZWFrT2JqZWN0UmVmZXJlbmNlKGNvbnN0IFF0V2Vha09iamVjdFJlZmVyZW5jZSYgc291cmNlKQot
ICAgICAgICAgICAgOiBtX3JlZmVyZW5jZShzb3VyY2UubV9yZWZlcmVuY2UuZ2V0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFF0V2Vha09iamVjdFJlZmVyZW5jZSgpCi0gICAg
ICAgICAgICA6IG1fcmVmZXJlbmNlKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
UXRXZWFrT2JqZWN0UmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgUXRXZWFrT2JqZWN0UmVmZXJl
bmNlJiBzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fcmVmZXJlbmNlID0gUGFzc1dl
YWs8SlNPYmplY3Q+KHNvdXJjZS5tX3JlZmVyZW5jZS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBKU09iamVjdCogZ2V0KCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmZXJlbmNlLmdldCgpOwotICAgICAgICB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBXZWFrPEpTT2JqZWN0PiBtX3JlZmVyZW5jZTsKLSAg
ICB9OwotCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gY3JlYXRlKFFPYmplY3Qg
Kmluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJz
aGlwIG93bmVyc2hpcCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXRJbnN0
YW5jZShpbnN0YW5jZSwgcm9vdE9iamVjdCwgb3duZXJzaGlwKSk7CkBAIC0xMzMsNyArOTgsNyBA
QCBwcml2YXRlOgogICAgIG11dGFibGUgUXRDbGFzcyogbV9jbGFzczsKICAgICBRUG9pbnRlcjxR
T2JqZWN0PiBtX29iamVjdDsKICAgICBRT2JqZWN0KiBtX2hhc2hrZXk7Ci0gICAgbXV0YWJsZSBR
SGFzaDxRQnl0ZUFycmF5LCBRdFdlYWtPYmplY3RSZWZlcmVuY2U+IG1fbWV0aG9kczsKKyAgICBt
dXRhYmxlIFFIYXNoPFFCeXRlQXJyYXksIFF0UnVudGltZU1ldGhvZCo+IG1fbWV0aG9kczsKICAg
ICBtdXRhYmxlIFFIYXNoPFFTdHJpbmcsIFF0RmllbGQqPiBtX2ZpZWxkczsKICAgICBWYWx1ZU93
bmVyc2hpcCBtX293bmVyc2hpcDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAKaW5kZXggOGNmZTMwYjk3YThjM2ZhZGZmN2RjNjQ1ZTlmNjUxMTZhZTI5NzA4Yi4uZDM4
MTAzOGJmMzhmZmMzYjRiNDlkMjA4N2JhZWM1NGViMmJhMjRmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9ydW50aW1lLmNwcApAQCAtOTcyLDYxICs5NzIsNiBAQCBKU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3QsIGNvbgogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5nKTsKIH0KIAotLy8g
PT09PT09PT09PT09PT09Ci0KLS8vIFF0LWxpa2UgbWFjcm9zCi0jZGVmaW5lIFFXX0QoQ2xhc3Mp
IENsYXNzIyNEYXRhKiBkID0gZF9mdW5jKCkKLSNkZWZpbmUgUVdfRFMoQ2xhc3MsSW5zdGFuY2Up
IENsYXNzIyNEYXRhKiBkID0gSW5zdGFuY2UtPmRfZnVuYygpCi0KLWNvbnN0IENsYXNzSW5mbyBR
dFJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhvZCIsICZJbnRlcm5hbEZ1
bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0aG9k
KSB9OwotCi1RdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2RE
YXRhKiBkZCwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0
cmluZyYgaWRlbnRpZmllcikKLSAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpCi0gICAgLCBkX3B0cihkZCkKLXsKLX0KLQotdm9pZCBR
dFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0
cmluZyYgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSkKLXsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIpOwot
ICAgIFFXX0QoUXRSdW50aW1lTWV0aG9kKTsKLSAgICBkLT5tX2luc3RhbmNlID0gaW5zdGFuY2U7
Ci0gICAgZC0+bV9maW5hbGl6ZXIgPSBQYXNzV2VhazxRdFJ1bnRpbWVNZXRob2Q+KHRoaXMsIGQp
OwotfQotCi1RdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKQotewotICAgIGRlbGV0
ZSBkX3B0cjsKLX0KLQotdm9pZCBRdFJ1bnRpbWVNZXRob2Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQotewotICAgIHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGhvZCo+KGNlbGwpLT5RdFJ1bnRpbWVN
ZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KLVF0
UnVudGltZU1ldGhvZERhdGE6On5RdFJ1bnRpbWVNZXRob2REYXRhKCkKLXsKLX0KLQotdm9pZCBR
dFJ1bnRpbWVNZXRob2REYXRhOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqKQotewot
ICAgIG1faW5zdGFuY2UtPnJlbW92ZVVudXNlZE1ldGhvZHMoKTsKLX0KLQotUXRSdW50aW1lTWV0
YU1ldGhvZERhdGE6On5RdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSgpCi17Ci0KLX0KLQotUXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZERhdGE6On5RdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSgp
Ci17Ci0KLX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KIC8vIFR5cGUgY29udmVyc2lvbiBtZXRh
ZGF0YSAoZnJvbSBRdFNjcmlwdCBvcmlnaW5hbGx5KQogY2xhc3MgUXRNZXRob2RNYXRjaFR5cGUK
IHsKQEAgLTEzOTQsMzY0ICsxMzM5LDIyNCBAQCBzdGF0aWMgaW50IGZpbmRTaWduYWxJbmRleChj
b25zdCBRTWV0YU9iamVjdCogbWV0YSwgaW50IGluaXRpYWxJbmRleCwgUUJ5dGVBcnJheQogICAg
IHJldHVybiBpbmRleDsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIFF0UnVudGltZU1ldGFNZXRob2Q6
OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhvZCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0YU1ldGhvZCkgfTsKLQotUXRSdW50aW1lTWV0YU1l
dGhvZDo6UXRSdW50aW1lTWV0YU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyKQotICAgIDogUXRSdW50aW1lTWV0aG9k
IChuZXcgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudGlm
aWVyKQorc3RhdGljIEpTQ2xhc3NSZWYgcHJvdG90eXBlRm9yU2lnbmFsc0FuZFNsb3RzKCkKIHsK
KyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbHMgPSBKU0NsYXNzQ3JlYXRlKCZrSlNDbGFzc0RlZmlu
aXRpb25FbXB0eSk7CisgICAgcmV0dXJuIGNsczsKIH0KIAotdm9pZCBRdFJ1bnRpbWVNZXRhTWV0
aG9kOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGlkZW50
aWZpZXIsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3Qg
UUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSkKK1F0UnVudGltZU1ldGhv
ZDo6UXRSdW50aW1lTWV0aG9kKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
biwgUU9iamVjdCogb2JqZWN0LCBjb25zdCBRQnl0ZUFycmF5JiBpZGVudGlmaWVyLCBpbnQgaW5k
ZXgsIGludCBmbGFncywgUXRJbnN0YW5jZSogaW5zdGFuY2UpCisgICAgOiBtX29iamVjdChvYmpl
Y3QpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1faW5kZXgoaW5kZXgp
CisgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKIHsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCBpbnN0YW5jZSk7Ci0gICAg
UVdfRChRdFJ1bnRpbWVNZXRhTWV0aG9kKTsKLSAgICBkLT5tX3NpZ25hdHVyZSA9IHNpZ25hdHVy
ZTsKLSAgICBkLT5tX2luZGV4ID0gaW5kZXg7Ci0gICAgZC0+bV9hbGxvd1ByaXZhdGUgPSBhbGxv
d1ByaXZhdGU7CisgICAgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWYgPSB7CisgICAgICAgIDAs
IDAsIG1faWRlbnRpZmllci5jb25zdERhdGEoKSwgcHJvdG90eXBlRm9yU2lnbmFsc0FuZFNsb3Rz
KCksIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGNhbGwsIDAsIDAsIDAKKyAg
ICB9OworICAgIG1fY2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZik7CiB9CiAKLXZv
aWQgUXRSdW50aW1lTWV0YU1ldGhvZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQorUXRSdW50aW1lTWV0aG9kOjp+UXRSdW50aW1lTWV0aG9kKCkKIHsK
LSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZU1l
dGFNZXRob2QqPihjZWxsKTsKLSAgICBRdFJ1bnRpbWVNZXRob2Q6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEqIGQgPSB0aGlz
T2JqZWN0LT5kX2Z1bmMoKTsKLSAgICBpZiAoZC0+bV9jb25uZWN0KQotICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZC0+bV9jb25uZWN0KTsKLSAgICBpZiAoZC0+bV9kaXNjb25uZWN0KQotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZC0+bV9kaXNjb25uZWN0KTsKKyAgICBKU0NsYXNzUmVsZWFzZSht
X2NsYXNzUmVmKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2Fs
bChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlUmVmIFF0UnVudGltZU1ldGhvZDo6Y2FsbChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIC8qdGhp
c09iamVjdCovLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIFF0UnVudGltZU1ldGFNZXRob2RE
YXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCAqPihleGVjLT5jYWxsZWUo
KSktPmRfZnVuYygpOwotCi0gICAgLy8gV2UncmUgbGltaXRlZCB0byAxMCBhcmdzCi0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFF0UnVudGltZU1ldGhvZCogZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UXRSdW50aW1lTWV0aG9kKj4oSlNPYmplY3RHZXRQcml2YXRlKGZ1bmN0aW9uKSk7Cisg
ICAgUU9iamVjdCogb2JqID0gZC0+bV9vYmplY3Q7CiAKLSAgICAvLyBXZSBoYXZlIHRvIHBpY2sg
YSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLQot
ICAgIFFPYmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwotICAgIGlmIChv
YmopIHsKLSAgICAgICAgY29uc3QgaW50IGFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxMD4g
YXJncyhhcmd1bWVudENvdW50KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVu
dENvdW50OyArK2kpCi0gICAgICAgICAgICBhcmdzW2ldID0gdG9SZWYoZXhlYywgZXhlYy0+YXJn
dW1lbnQoaSkpOwotCi0gICAgICAgIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+IHZhcmdz
OwotICAgICAgICB2b2lkICpxYXJnc1sxMV07Ci0KLSAgICAgICAgaW50IG1ldGhvZEluZGV4Owot
ICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAgIGlmICgobWV0aG9kSW5k
ZXggPSBmaW5kTWV0aG9kSW5kZXgodG9SZWYoZXhlYyksIG9iai0+bWV0YU9iamVjdCgpLCBkLT5t
X3NpZ25hdHVyZSwgYXJndW1lbnRDb3VudCwgYXJncy5kYXRhKCksIGQtPm1fYWxsb3dQcml2YXRl
LCB2YXJncywgKHZvaWQgKiopcWFyZ3MsICZleGNlcHRpb24pKSAhPSAtMSkgewotICAgICAgICAg
ICAgaWYgKFFNZXRhT2JqZWN0OjptZXRhY2FsbChvYmosIFFNZXRhT2JqZWN0OjpJbnZva2VNZXRh
TWV0aG9kLCBtZXRob2RJbmRleCwgcWFyZ3MpID49IDApCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAgICAgICAgICAgaWYgKHZhcmdz
LnNpemUoKSA+IDAgJiYgdmFyZ3NbMF0uaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVjLCBkLT5tX2luc3Rh
bmNlLT5yb290T2JqZWN0KCksIHZhcmdzWzBdKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCB0b0pTKGV4
ZWMsIGV4Y2VwdGlvbikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgImNhbm5vdCBjYWxsIGZ1bmN0aW9uIG9mIGRlbGV0
ZWQgUU9iamVjdCIpKTsKKyAgICBpZiAoIW9iaikgeworICAgICAgICBzZXRFeGNlcHRpb24oY29u
dGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nTGl0ZXJhbCgiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2Yg
ZGVsZXRlZCBRT2JqZWN0IikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAgICAgfQogCi0gICAgLy8gdm9pZCBmdW5jdGlvbnMgcmV0dXJuIHVuZGVmaW5l
ZAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19CisgICAgLy8g
QWxsb3cgZm9yIG1heGltdW0gb2YgMTAgYXJndW1lbnRzIGFuZCBzaXplIHN0YWNrIGFycmF5cyBh
Y2NvcmRpbmdseS4KKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDEwKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLUNhbGxUeXBlIFF0UnVudGltZU1ldGFN
ZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKLXsKLSAgICBj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsOwotICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7
Ci19CisgICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gdmFyZ3M7CisgICAgdm9pZCog
cWFyZ3NbMTFdOwogCi1ib29sIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGNlbGwpOwotICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gSWRlbnRpZmllcihleGVjLCAiY29ubmVjdCIpKSB7Ci0gICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmNvbm5lY3RHZXR0ZXIpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVy
KGV4ZWMsICJkaXNjb25uZWN0IikpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVj
dCwgdGhpc09iamVjdC0+ZGlzY29ubmVjdEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVu
Z3RoR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGludCBtZXRob2RJ
bmRleCA9IGZpbmRNZXRob2RJbmRleChjb250ZXh0LCBvYmotPm1ldGFPYmplY3QoKSwgZC0+bV9p
ZGVudGlmaWVyLCAgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZC0+bV9mbGFncyAmIEFsbG93UHJpdmF0ZSksIHZhcmdzLCAo
dm9pZCAqKilxYXJncywgZXhjZXB0aW9uKTsKIAotICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotfQorICAgIGlmIChRTWV0YU9iamVjdDo6bWV0YWNhbGwob2JqLCBRTWV0YU9iamVjdDo6SW52
b2tlTWV0YU1ldGhvZCwgbWV0aG9kSW5kZXgsIHFhcmdzKSA+PSAwKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLWJvb2wgUXRSdW50aW1lTWV0YU1ldGhv
ZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
UXRSdW50aW1lTWV0YU1ldGhvZCo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJ
ZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNvbm5lY3RHZXR0ZXIpOwotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcihleGVj
LCAiZGlzY29ubmVjdCIpKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBkaXNjb25uZWN0R2V0dGVyKTsKLSAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgaWYgKHZhcmdzLnNpemUoKSA+IDAgJiYgdmFyZ3NbMF0uaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdG9SZWYodG9KUyhjb250ZXh0KSwgY29udmVydFFWYXJpYW50VG9WYWx1
ZSh0b0pTKGNvbnRleHQpLCBkLT5tX2luc3RhbmNlLT5yb290T2JqZWN0KCksIHZhcmdzWzBdKSk7
CiAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXNPYmplY3QsIGxlbmd0aEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQogCi12b2lkIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCitKU1ZhbHVlUmVm
IFF0UnVudGltZU1ldGhvZDo6Y29ubmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgewotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpOwotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsICJkaXNjb25uZWN0IikpOwotICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICB9
Ci0KLSAgICBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9k
OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAg
IC8vIFF0U2NyaXB0IGFsd2F5cyByZXR1cm5zIDAKLSAgICByZXR1cm4ganNOdW1iZXIoMCk7Cisg
ICAgcmV0dXJuIGNvbm5lY3RPckRpc2Nvbm5lY3QoY29udGV4dCwgZnVuY3Rpb24sIHRoaXNPYmpl
Y3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCB0cnVlKTsKIH0KIAotSlNW
YWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjb25uZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lIGlkZW50KQorSlNWYWx1ZVJlZiBRdFJ1bnRp
bWVNZXRob2Q6OmRpc2Nvbm5lY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAg
IFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRh
TWV0aG9kKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBRV19EUyhRdFJ1bnRpbWVNZXRhTWV0
aG9kLCB0aGlzT2JqKTsKLQotICAgIGlmICghZC0+bV9jb25uZWN0KQotICAgICAgICBkLT5tX2Nv
bm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwgUXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50LnB1YmxpY05hbWUoKSwgdHJ1ZSwgZC0+bV9pbnN0
YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpKTsKLSAgICByZXR1cm4gZC0+bV9jb25u
ZWN0LmdldCgpOworICAgIHJldHVybiBjb25uZWN0T3JEaXNjb25uZWN0KGNvbnRleHQsIGZ1bmN0
aW9uLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgZmFs
c2UpOwogfQogCi1KU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmRpc2Nvbm5lY3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCitK
U09iamVjdFJlZiBRdFJ1bnRpbWVNZXRob2Q6OmpzT2JqZWN0UmVmKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCog
dGhpc09iaiA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihhc09iamVjdChzbG90
QmFzZSkpOwotICAgIFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNPYmopOwotCi0gICAg
aWYgKCFkLT5tX2Rpc2Nvbm5lY3QpCi0gICAgICAgIGQtPm1fZGlzY29ubmVjdC5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjcmVhdGUo
ZXhlYywgaWRlbnQucHVibGljTmFtZSgpLCBmYWxzZSwgZC0+bV9pbnN0YW5jZSwgZC0+bV9pbmRl
eCwgZC0+bV9zaWduYXR1cmUpKTsKLSAgICByZXR1cm4gZC0+bV9kaXNjb25uZWN0LmdldCgpOwot
fQotCi0vLyA9PT09PT09PT09PT09PT0KKyAgICBpZiAobV9qc09iamVjdCkKKyAgICAgICAgcmV0
dXJuIHRvUmVmKG1fanNPYmplY3QuZ2V0KCkpOwogCi1RTXVsdGlNYXA8UU9iamVjdCosIFF0Q29u
bmVjdGlvbk9iamVjdCo+IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNvbm5lY3Rpb25zOwor
ICAgIHN0YXRpYyBjb25zdCBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZkZvckNvbm5lY3QgPSB7
CisgICAgICAgIDAsIDAsICJjb25uZWN0IiwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgY29ubmVjdCwgMCwgMCwgMAorICAgIH07CiAKLWNvbnN0IENsYXNzSW5mbyBRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpzX2luZm8gPSB7ICJRdFJ1bnRpbWVNZXRob2QiLCAmQmFz
ZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QpIH07CisgICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmRm9y
RGlzY29ubmVjdCA9IHsKKyAgICAgICAgMCwgMCwgImRpc2Nvbm5lY3QiLCAwLCAwLCAwLAorICAg
ICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCBkaXNjb25uZWN0LCAwLCAwLCAwCisgICAgfTsKIAot
UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBpZGVudGlm
aWVyKQotICAgIDogUXRSdW50aW1lTWV0aG9kIChuZXcgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZERhdGEoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudGlmaWVyKQoteworICAgIHN0YXRpYyBKU0Ns
YXNzUmVmIGNsYXNzUmVmQ29ubmVjdCA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmRm9yQ29ubmVj
dCk7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xhc3NSZWZEaXNjb25uZWN0ID0gSlNDbGFzc0Ny
ZWF0ZSgmY2xhc3NEZWZGb3JEaXNjb25uZWN0KTsKKyAgICBib29sIGlzU2lnbmFsID0gbV9mbGFn
cyAmIE1ldGhvZElzU2lnbmFsOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFr
ZShjb250ZXh0LCBtX2NsYXNzUmVmLCB0aGlzKTsKKyAgICBKU09iamVjdFJlZiBjb25uZWN0RnVu
Y3Rpb24gPSBKU09iamVjdE1ha2UoY29udGV4dCwgY2xhc3NSZWZDb25uZWN0LCB0aGlzKTsKKyAg
ICBKU09iamVjdFJlZiBkaXNjb25uZWN0RnVuY3Rpb24gPSBKU09iamVjdE1ha2UoY29udGV4dCwg
Y2xhc3NSZWZEaXNjb25uZWN0LCB0aGlzKTsKKyAgICBKU1Byb3BlcnR5QXR0cmlidXRlcyBhdHRy
aWJ1dGVzID0ga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZTsKKworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBjb25uZWN0U3RyID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbm5lY3QiKTsKKyAgICBzdGF0aWMgSlNTdHJp
bmdSZWYgZGlzY29ubmVjdFN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkaXNj
b25uZWN0Iik7CisgICAgc3RhdGljIEpTU3RyaW5nUmVmIGxlbmd0aFN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKTsKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgbmFt
ZVN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIik7CisgICAgSlNTdHJp
bmdSZWYgYWN0dWFsTmFtZVN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1faWRl
bnRpZmllci5jb25zdERhdGEoKSk7CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQs
IGNvbm5lY3RGdW5jdGlvbiwgbGVuZ3RoU3RyLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBp
c1NpZ25hbCA/IDEgOiAwKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIGNvbm5lY3RGdW5jdGlvbiwgbmFtZVN0ciwgSlNWYWx1ZU1ha2VT
dHJpbmcoY29udGV4dCwgY29ubmVjdFN0ciksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisgICAg
SlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBkaXNjb25uZWN0RnVuY3Rpb24sIGxlbmd0aFN0
ciwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgaXNTaWduYWwgPyAxIDogMCksIGF0dHJpYnV0
ZXMsIGV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBkaXNjb25u
ZWN0RnVuY3Rpb24sIG5hbWVTdHIsIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGRpc2Nvbm5l
Y3RTdHIpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworCisgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eShjb250ZXh0LCBvYmplY3QsIGNvbm5lY3RTdHIsIGNvbm5lY3RGdW5jdGlvbiwgYXR0cmlidXRl
cywgZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwg
ZGlzY29ubmVjdFN0ciwgZGlzY29ubmVjdEZ1bmN0aW9uLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24p
OworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBsZW5ndGhTdHIsIEpT
VmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDApLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworICAg
IEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lU3RyLCBKU1ZhbHVlTWFr
ZVN0cmluZyhjb250ZXh0LCBhY3R1YWxOYW1lU3RyKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsK
KworICAgIEpTU3RyaW5nUmVsZWFzZShhY3R1YWxOYW1lU3RyKTsKKyAgICBtX2pzT2JqZWN0ID0g
UGFzc1dlYWs8SlNPYmplY3Q+KHRvSlMob2JqZWN0KSk7CisgICAgcmV0dXJuIG9iamVjdDsKIH0K
IAotdm9pZCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wgaXNDb25uZWN0LCBQYXNz
UmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkm
IHNpZ25hdHVyZSkKK0pTVmFsdWVSZWYgUXRSdW50aW1lTWV0aG9kOjpjb25uZWN0T3JEaXNjb25u
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgYm9vbCBjb25uZWN0KQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIsIGluc3RhbmNlKTsKLSAgICBRV19E
KFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QpOworICAgIFF0UnVudGltZU1ldGhvZCogZCA9IHN0
YXRpY19jYXN0PFF0UnVudGltZU1ldGhvZCo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgaWYgKCFkKQorICAgICAgICBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0aG9k
Kj4oSlNPYmplY3RHZXRQcml2YXRlKGZ1bmN0aW9uKSk7CiAKLSAgICBkLT5tX3NpZ25hdHVyZSA9
IHNpZ25hdHVyZTsKLSAgICBkLT5tX2luZGV4ID0gaW5kZXg7Ci0gICAgZC0+bV9pc0Nvbm5lY3Qg
PSBpc0Nvbm5lY3Q7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRo
b2Q6OmNhbGwoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRo
b2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVj
LT5jYWxsZWUoKSktPmRfZnVuYygpOworICAgIFFTdHJpbmcgZnVuY3Rpb25OYW1lID0gY29ubmVj
dCA/IFFTdHJpbmdMaXRlcmFsKCJjb25uZWN0IikgOiBRU3RyaW5nTGl0ZXJhbCgiZGlzY29ubmVj
dCIpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgaWYgKCFhcmd1bWVudENv
dW50KSB7CisgICAgICAgIFFTdHJpbmcgZXJyb3JTdHIgPSBRU3RyaW5nTGl0ZXJhbCgiUXRNZXRh
TWV0aG9kLiUxOiBubyBhcmd1bWVudHMgZ2l2ZW4iKS5hcmcoY29ubmVjdCA/ICBRU3RyaW5nTGl0
ZXJhbCgiY29ubmVjdCIpIDogUVN0cmluZ0xpdGVyYWwoImRpc2Nvbm5lY3QiKSk7CisgICAgICAg
IHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIGVycm9yU3RyKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgIFFPYmplY3Qq
IHNlbmRlciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOworICAgIGlmICgoIShkLT5tX2Zs
YWdzICYgUXRSdW50aW1lTWV0aG9kOjpNZXRob2RJc1NpZ25hbCkpKSB7CisgICAgICAgIHNldEV4
Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmdMaXRlcmFsKCJRdE1ldGFNZXRob2Qu
JTM6ICUxOjolMigpIGlzIG5vdCBhIHNpZ25hbCIpLmFyZyhRU3RyaW5nOjpmcm9tVXRmOChkLT5t
X29iamVjdC5kYXRhKCktPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKS5hcmcoUVN0cmluZzo6
ZnJvbUFzY2lpKGQtPm1faWRlbnRpZmllcikpLmFyZyhmdW5jdGlvbk5hbWUpKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgIGlmIChz
ZW5kZXIpIHsKKyAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX29iamVjdC5kYXRhKCk7CiAKLSAg
ICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm1ldGhvZFRhYmxlKCktPnRvVGhpc09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGV4ZWMpOwotICAgICAgICBKU09iamVjdCogZnVuY09iamVjdCA9IDA7CisgICAgaWYgKCFzZW5k
ZXIpIHsKKyAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZ0xp
dGVyYWwoImNhbm5vdCBjYWxsIGZ1bmN0aW9uIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgICAg
ICAvLyBRdFNjcmlwdCBjaGVja3Mgc2lnbmFsbmVzcyBmaXJzdCwgYXJndW1lbnRzIHNlY29uZAot
ICAgICAgICBpbnQgc2lnbmFsSW5kZXggPSAtMTsKKyAgICBpbnQgc2lnbmFsSW5kZXggPSBmaW5k
U2lnbmFsSW5kZXgoc2VuZGVyLT5tZXRhT2JqZWN0KCksIGQtPm1faW5kZXgsIGQtPm1faWRlbnRp
Zmllcik7CiAKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbml0aWFsIGluZGV4IGlzIGEgc2ln
bmFsCi0gICAgICAgIFFNZXRhTWV0aG9kIG0gPSBzZW5kZXItPm1ldGFPYmplY3QoKS0+bWV0aG9k
KGQtPm1faW5kZXgpOwotICAgICAgICBpZiAobS5tZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6
OlNpZ25hbCkKLSAgICAgICAgICAgIHNpZ25hbEluZGV4ID0gZmluZFNpZ25hbEluZGV4KHNlbmRl
ci0+bWV0YU9iamVjdCgpLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSk7CisgICAgSlNPYmpl
Y3RSZWYgdGFyZ2V0T2JqZWN0ID0gMDsKKyAgICBKU09iamVjdFJlZiB0YXJnZXRGdW5jdGlvbiA9
IDA7CiAKLSAgICAgICAgaWYgKHNpZ25hbEluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBmdW5jT2JqZWN0
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldENhbGxEYXRhKGZ1bmNPYmplY3QsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlz
Y29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzT2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhl
Yyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8g
Y2FsbAotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqYXNPYmogPSBleGVjLT5hcmd1bWVu
dCgxKS50b09iamVjdChleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhc09iai0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoYXNPYmosIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmNPYmplY3QgPSBhc09iajsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBzdHJpbmcKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFVTdHJpbmcgZnVuY05hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1
bmNJZGVudChleGVjLCBmdW5jTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICMj
IyBEcm9wQWxsTG9ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVzb2x2
ZWQgYXQgdGhpcyBwb2ludCBpbiBRdFNjcmlwdAotICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZnVuY0lkZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBhc0Z1bmNPYmogPSB2YWwudG9PYmplY3QoZXhlYyk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc0Z1bmNPYmotPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKGFzRnVuY09iaiwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBhc0Z1bmNPYmo7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
LT5tX2lzQ29ubmVjdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25u
ZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5l
Y3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1l
dGFNZXRob2QuY29ubmVjdDogdGhpc09iamVjdCBpcyBub3QgYW4gb2JqZWN0IikpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5l
Y3Q6IHRoaXNPYmplY3QgaXMgbm90IGFuIG9iamVjdCIpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IG5vIGFyZ3VtZW50cyBnaXZlbiIpKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBubyBh
cmd1bWVudHMgZ2l2ZW4iKSk7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgeworICAgICAg
ICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0pKSB7CisgICAgICAg
ICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nTGl0ZXJhbCgiUXRN
ZXRhTWV0aG9kLiUxOiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKS5hcmcoZnVuY3Rpb25OYW1l
KSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdGFyZ2V0RnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworCisgICAgICAgIC8vIG9iamVjdC5zaWduYWwu
Y29ubmVjdChzb21lRnVuY3Rpb24pOworICAgICAgICBpZiAoSlNPYmplY3RJc0Z1bmN0aW9uKGNv
bnRleHQsIHRhcmdldEZ1bmN0aW9uKSkgeworICAgICAgICAgICAgaWYgKEpTVmFsdWVJc09iamVj
dE9mQ2xhc3MoY29udGV4dCwgdGFyZ2V0RnVuY3Rpb24sIHByb3RvdHlwZUZvclNpZ25hbHNBbmRT
bG90cygpKSkgeworICAgICAgICAgICAgICAgIC8vIG9iamVjdC5zaWduYWwuY29ubmVjdChvdGhl
ck9iamVjdC5zbG90KTsKKyAgICAgICAgICAgICAgICBpZiAoUXRSdW50aW1lTWV0aG9kKiB0YXJn
ZXRNZXRob2QgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2QqPihKU09iamVjdEdldFByaXZh
dGUodGFyZ2V0RnVuY3Rpb24pKSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0T2JqZWN0ID0g
dG9SZWYoUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZSh0YXJnZXRNZXRob2QtPm1fb2JqZWN0LmRh
dGEoKSwgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpLCBRdEluc3RhbmNlOjpRdE93bmVyc2hp
cCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QodG9KUyhjb250ZXh0KSkpOwogICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRhcmdldEZ1bmN0aW9uID0gMDsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBvYmplY3Quc2lnbmFsLmNvbm5lY3Qob2JqZWN0LCBzb21lRnVuY3Rp
b24pOworICAgICAgICB0YXJnZXRPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgICAgICBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIGFyZ3VtZW50c1sxXSkpCisgICAgICAgICAgICB0YXJnZXRGdW5jdGlvbiA9IEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgfQogCi0gICAg
ICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpIHsKLSAgICAgICAgICAgICAgICAvLyB0byBjb25u
ZWN0LCB3ZSBuZWVkOgotICAgICAgICAgICAgICAgIC8vICB0YXJnZXQgb2JqZWN0IFtmcm9tIGN0
b3JdCi0gICAgICAgICAgICAgICAgLy8gIHRhcmdldCBzaWduYWwgaW5kZXggZXRjLiBbZnJvbSBj
dG9yXQotICAgICAgICAgICAgICAgIC8vICByZWNlaXZlciBmdW5jdGlvbiBbZnJvbSBhcmd1bWVu
dHNdCi0gICAgICAgICAgICAgICAgLy8gIHJlY2VpdmVyIHRoaXMgb2JqZWN0IFtmcm9tIGFyZ3Vt
ZW50c10KLQotICAgICAgICAgICAgICAgIFF0Q29ubmVjdGlvbk9iamVjdCogY29ubiA9IFF0Q29u
bmVjdGlvbk9iamVjdDo6Y3JlYXRlV2l0aEludGVybmFsSlNDKGV4ZWMsIGQtPm1faW5zdGFuY2Us
IHNpZ25hbEluZGV4LCB0aGlzT2JqZWN0LCBmdW5jT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBi
b29sIG9rID0gUU1ldGFPYmplY3Q6OmNvbm5lY3Qoc2VuZGVyLCBzaWduYWxJbmRleCwgY29ubiwg
Y29ubi0+bWV0YU9iamVjdCgpLT5tZXRob2RPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFvaykgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29ubjsKLSAgICAgICAgICAgICAg
ICAgICAgUVN0cmluZyBtc2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC5j
b25uZWN0OiBmYWlsZWQgdG8gY29ubmVjdCB0byAlMTo6JTIoKSIpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xh
c3NOYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmlu
ZyhkLT5tX3NpZ25hdHVyZSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAvLyBTdG9yZSBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rp
b25zLmluc2VydChzZW5kZXIsIGNvbm4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTm93IHRvIGZpbmQgb3VyIHByZXZpb3VzIGNv
bm5lY3Rpb24gb2JqZWN0LiBIbW0uCi0gICAgICAgICAgICAgICAgUUxpc3Q8UXRDb25uZWN0aW9u
T2JqZWN0Kj4gY29ubnMgPSBjb25uZWN0aW9ucy52YWx1ZXMoc2VuZGVyKTsKLSAgICAgICAgICAg
ICAgICBib29sIHJldCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSA6OnRvUmVmKGV4ZWMpOwotICAgICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHJlY2Vp
dmVyID0gOjp0b1JlZih0aGlzT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBKU09iamVjdFJlZiBy
ZWNlaXZlckZ1bmN0aW9uID0gOjp0b1JlZihmdW5jT2JqZWN0KTsKLQotICAgICAgICAgICAgICAg
IGZvcmVhY2goUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uLCBjb25ucykgewotICAgICAgICAgICAg
ICAgICAgICAvLyBJcyB0aGlzIHRoZSByaWdodCBjb25uZWN0aW9uPwotICAgICAgICAgICAgICAg
ICAgICBpZiAoY29ubi0+bWF0Y2goY29udGV4dCwgc2VuZGVyLCBzaWduYWxJbmRleCwgcmVjZWl2
ZXIsIHJlY2VpdmVyRnVuY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBZZXAs
IGRpc2Nvbm5lY3QgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIFFNZXRhT2JqZWN0OjpkaXNj
b25uZWN0KHNlbmRlciwgc2lnbmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmplY3QoKS0+bWV0
aG9kT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbm47IC8vIHRo
aXMgd2lsbCBhbHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAvLyBvYmplY3Quc2lnbmFsLmNv
bm5lY3Qoc29tZU9iamVjdCk7CisgICAgaWYgKCF0YXJnZXRGdW5jdGlvbikgeworICAgICAgICBz
ZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nTGl0ZXJhbCgiUXRNZXRhTWV0
aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgICAgICAgICAgICAg
IGlmICghcmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhR
TGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogZmFpbGVkIHRvIGRpc2Nvbm5l
Y3QgZnJvbSAlMTo6JTIoKSIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxh
dGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX3NpZ25hdHVyZSkpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9y
KGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVN0cmluZyBtc2cg
PSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC4lMTogJTI6OiUzKCkgaXMgbm90
IGEgc2lnbmFsIikpCi0gICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5t
X2lzQ29ubmVjdCA/ICJjb25uZWN0IjogImRpc2Nvbm5lY3QiKSkKKyAgICBpZiAoY29ubmVjdCkg
eworICAgICAgICAvLyB0byBjb25uZWN0LCB3ZSBuZWVkOgorICAgICAgICAvLyAgdGFyZ2V0IG9i
amVjdCBbZnJvbSBjdG9yXQorICAgICAgICAvLyAgdGFyZ2V0IHNpZ25hbCBpbmRleCBldGMuIFtm
cm9tIGN0b3JdCisgICAgICAgIC8vICByZWNlaXZlciBmdW5jdGlvbiBbZnJvbSBhcmd1bWVudHNd
CisgICAgICAgIC8vICByZWNlaXZlciB0aGlzIG9iamVjdCBbZnJvbSBhcmd1bWVudHNdCisKKyAg
ICAgICAgUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uID0gbmV3IFF0Q29ubmVjdGlvbk9iamVjdChj
b250ZXh0LCBRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKHNlbmRlciwgZC0+bV9pbnN0YW5jZS0+
cm9vdE9iamVjdCgpLCBRdEluc3RhbmNlOjpRdE93bmVyc2hpcCksIHNpZ25hbEluZGV4LCB0YXJn
ZXRPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICAgICAgYm9vbCBvayA9IFFNZXRhT2JqZWN0
Ojpjb25uZWN0KHNlbmRlciwgc2lnbmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmplY3QoKS0+
bWV0aG9kT2Zmc2V0KCkpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBkZWxldGUg
Y29ubjsKKyAgICAgICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJR
dE1ldGFNZXRob2QuY29ubmVjdDogZmFpbGVkIHRvIGNvbm5lY3QgdG8gJTE6OiUyKCkiKSkKICAg
ICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgp
LT5jbGFzc05hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhk
LT5tX3NpZ25hdHVyZSkpOwotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgbXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faWRlbnRpZmllcikpOworICAg
ICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbXNnKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3Io
ZXhlYywgImNhbm5vdCBjYWxsIGZ1bmN0aW9uIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsKLSAgICB9
CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1DYWxs
VHlwZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYgY2FsbERhdGEpCi17Ci0gICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsK
LSAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwotfQorICAgICAgICAvLyBTdG9yZSBjb25uZWN0aW9u
CisgICAgICAgIFF0Q29ubmVjdGlvbk9iamVjdDo6Y29ubmVjdGlvbnMuaW5zZXJ0KHNlbmRlciwg
Y29ubik7CiAKLWJvb2wgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZCogdGhpc09iamVjdCA9IGpzQ2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKj4oY2VsbCk7
Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmxlbmd0aEdl
dHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFF0UnVudGltZU1ldGhvZDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Ci19Ci0KLWJvb2wgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZCo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOwotICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICAvLyBOb3cgdG8gZmluZCBvdXIgcHJldmlvdXMgY29ubmVjdGlvbiBvYmplY3Qu
CisgICAgUUxpc3Q8UXRDb25uZWN0aW9uT2JqZWN0Kj4gY29ubnMgPSBRdENvbm5lY3Rpb25PYmpl
Y3Q6OmNvbm5lY3Rpb25zLnZhbHVlcyhzZW5kZXIpOwogCi0gICAgcmV0dXJuIFF0UnVudGltZU1l
dGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Ci19CisgICAgZm9yZWFjaCAoUXRDb25uZWN0aW9uT2JqZWN0KiBj
b25uLCBjb25ucykgeworICAgICAgICAvLyBJcyB0aGlzIHRoZSByaWdodCBjb25uZWN0aW9uPwor
ICAgICAgICBpZiAoIWNvbm4tPm1hdGNoKGNvbnRleHQsIHNlbmRlciwgc2lnbmFsSW5kZXgsIHRh
cmdldE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24pKQorICAgICAgICAgICAgY29udGludWU7CiAKLXZv
aWQgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAgICAgLy8gWWVwLCBkaXNjb25uZWN0IGl0CisgICAgICAg
IFFNZXRhT2JqZWN0OjpkaXNjb25uZWN0KHNlbmRlciwgc2lnbmFsSW5kZXgsIGNvbm4sIGNvbm4t
Pm1ldGFPYmplY3QoKS0+bWV0aG9kT2Zmc2V0KCkpOworICAgICAgICBkZWxldGUgY29ubjsgLy8g
dGhpcyB3aWxsIGFsc28gcmVtb3ZlIGl0IGZyb20gdGhlIG1hcAorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQogCi0gICAgUXRSdW50aW1lTWV0aG9k
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
Ci19CisgICAgUVN0cmluZyBtc2cgPSBRU3RyaW5nTGl0ZXJhbCgiUXRNZXRhTWV0aG9kLmRpc2Nv
bm5lY3Q6IGZhaWxlZCB0byBkaXNjb25uZWN0IGZyb20gJTE6OiUyKCkiKQorICAgICAgICAgICAg
LmFyZyhRTGF0aW4xU3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpCisg
ICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9pZGVudGlmaWVyKSk7CiAKLUpTVmFs
dWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICAvLyB3ZSBoYXZlIG9uZSBmb3JtYWwgYXJndW1l
bnQsIGFuZCBvbmUgb3B0aW9uYWwKLSAgICByZXR1cm4ganNOdW1iZXIoMSk7CisgICAgc2V0RXhj
ZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbXNnKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CiAKIC8vID09PT09PT09PT09PT09PQogCitRTXVsdGlNYXA8
UU9iamVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IFF0Q29ubmVjdGlvbk9iamVjdDo6Y29ubmVj
dGlvbnM7CisKIFF0Q29ubmVjdGlvbk9iamVjdDo6UXRDb25uZWN0aW9uT2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNlbmRlckluc3RhbmNlLCBpbnQg
c2lnbmFsSW5kZXgsIEpTT2JqZWN0UmVmIHJlY2VpdmVyLCBKU09iamVjdFJlZiByZWNlaXZlckZ1
bmN0aW9uKQogICAgIDogUU9iamVjdChzZW5kZXJJbnN0YW5jZS0+Z2V0T2JqZWN0KCkpCiAgICAg
LCBtX2NvbnRleHQoSlNDb250ZXh0R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSkKQEAgLTE3Njks
NyArMTU3NCw3IEBAIFF0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVjdCgpCiB7
CiAgICAgLy8gV2UgY2FuIHNhZmVseSB1c2UgbV9vcmlnaW5hbFNlbmRlciBiZWNhdXNlIGNvbm5l
Y3Rpb24gb2JqZWN0IHdpbGwgbmV2ZXIgb3V0bGl2ZSB0aGUgc2VuZGVyLAogICAgIC8vIHdoaWNo
IGlzIGl0cyBRT2JqZWN0IHBhcmVudC4KLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpj
b25uZWN0aW9ucy5yZW1vdmUobV9vcmlnaW5hbFNlbmRlciwgdGhpcyk7CisgICAgY29ubmVjdGlv
bnMucmVtb3ZlKG1fb3JpZ2luYWxTZW5kZXIsIHRoaXMpOwogCiAgICAgSlNWYWx1ZVVucHJvdGVj
dChtX2NvbnRleHQsIG1fcmVjZWl2ZXIpOwogICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0
LCBtX3JlY2VpdmVyRnVuY3Rpb24pOwpAQCAtMTkxNiwxMSArMTcyMSw2IEBAIGJvb2wgUXRDb25u
ZWN0aW9uT2JqZWN0OjptYXRjaChKU0NvbnRleHRSZWYgY29udGV4dCwgUU9iamVjdCogc2VuZGVy
LCBpbnQgc2lnbmFsCiAgICAgcmV0dXJuIHJlY2VpdmVyTWF0Y2ggJiYgSlNWYWx1ZUlzRXF1YWwo
Y29udGV4dCwgcmVjZWl2ZXJGdW5jdGlvbiwgbV9yZWNlaXZlckZ1bmN0aW9uLCBpZ25vcmVkRXhj
ZXB0aW9uKTsKIH0KIAotUXRDb25uZWN0aW9uT2JqZWN0KiBRdENvbm5lY3Rpb25PYmplY3Q6OmNy
ZWF0ZVdpdGhJbnRlcm5hbEpTQyhFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8UXRJbnN0YW5j
ZT4gc2VuZGVySW5zdGFuY2UsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3QqIHJlY2VpdmVyLCBK
U09iamVjdCogcmVjZWl2ZXJGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gbmV3IFF0Q29ubmVjdGlv
bk9iamVjdCg6OnRvUmVmKGV4ZWMpLCBzZW5kZXJJbnN0YW5jZSwgc2lnbmFsSW5kZXgsIDo6dG9S
ZWYocmVjZWl2ZXIpLCA6OnRvUmVmKHJlY2VpdmVyRnVuY3Rpb24pKTsKLX0KLQogLy8gPT09PT09
PT09PT09PT09CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5PFQ+OjpRdEFycmF5KFFM
aXN0PFQ+IGxpc3QsIFFNZXRhVHlwZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3RPYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVu
dGltZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAppbmRleCBiMmZk
NjZkNDM2NTNhYjU2ZDI2OTcyOTZiNjEwOTg0MzdkMDMwODdlLi40N2QwYmEwZmRmMGIwN2M3Y2I5
YWFkZmRmMTQ4MGUxOWIzYjYyOTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1l
LmgKQEAgLTk1LDE0MyArOTUsMzYgQEAgcHJpdmF0ZToKICAgICBRTWV0YVR5cGU6OlR5cGUgbV90
eXBlOwogfTsKIAotLy8gQmFzZWQgb24gUnVudGltZU1ldGhvZAotCi0vLyBFeHRyYSBkYXRhIGNs
YXNzZXMgKHRvIGF2b2lkIHRoZSBDRUxMX1NJWkUgbGltaXQgb24gSlMgb2JqZWN0cykKLWNsYXNz
IFF0UnVudGltZU1ldGhvZDsKLWNsYXNzIFF0UnVudGltZU1ldGhvZERhdGEgOiBwdWJsaWMgV2Vh
a0hhbmRsZU93bmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflF0UnVudGltZU1l
dGhvZERhdGEoKTsKLSAgICAgICAgUmVmUHRyPFF0SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0gICAg
ICAgIFdlYWs8UXRSdW50aW1lTWV0aG9kPiBtX2ZpbmFsaXplcjsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKik7Ci19OwotCi1jbGFz
cyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOwotY2xhc3MgUXRSdW50aW1lTWV0YU1ldGhvZERh
dGEgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kRGF0YSB7Ci0gICAgcHVibGljOgotICAgICAgICB+
UXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKTsKLSAgICAgICAgUUJ5dGVBcnJheSBtX3NpZ25hdHVy
ZTsKLSAgICAgICAgYm9vbCBtX2FsbG93UHJpdmF0ZTsKLSAgICAgICAgaW50IG1faW5kZXg7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kPiBtX2Nvbm5lY3Q7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kPiBtX2Rpc2Nv
bm5lY3Q7Ci19OwotCi1jbGFzcyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSA6IHB1Ymxp
YyBRdFJ1bnRpbWVNZXRob2REYXRhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5RdFJ1bnRpbWVD
b25uZWN0aW9uTWV0aG9kRGF0YSgpOwotICAgICAgICBRQnl0ZUFycmF5IG1fc2lnbmF0dXJlOwot
ICAgICAgICBpbnQgbV9pbmRleDsKLSAgICAgICAgYm9vbCBtX2lzQ29ubmVjdDsKLX07Ci0KLS8v
IENvbW1vbiBiYXNlIGNsYXNzIChkb2Vzbid0IHJlYWxseSBkbyBhbnl0aGluZyBpbnRlcmVzdGlu
ZykKLWNsYXNzIFF0UnVudGltZU1ldGhvZCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK2Ns
YXNzIFF0UnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0
aW9uIEJhc2U7CisgICAgZW51bSBNZXRob2RGbGFncyB7CisgICAgICAgIE1ldGhvZElzU2lnbmFs
ID0gMSwKKyAgICAgICAgQWxsb3dQcml2YXRlID0gMgorICAgIH07CiAKKyAgICBRdFJ1bnRpbWVN
ZXRob2QoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFFPYmplY3QqLCBjb25z
dCBRQnl0ZUFycmF5JiBpZGVudGlmaWVyLCBpbnQgc2lnbmFsSW5kZXgsIGludCBmbGFncywgUXRJ
bnN0YW5jZSopOwogICAgIH5RdFJ1bnRpbWVNZXRob2QoKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
c3RhdGljIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3Rh
dGljIEpTVmFsdWVSZWYgY29ubmVjdChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3Rh
dGljIEpTVmFsdWVSZWYgZGlzY29ubmVjdChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKLSAg
ICBzdGF0aWMgRnVuY3Rpb25Qcm90b3R5cGUqIGNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsb2Jh
bE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBjb25z
dCBVU3RyaW5nJiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPik7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbjsKLQotICAgIFF0UnVudGltZU1ldGhvZERhdGEgKmRf
ZnVuYygpIGNvbnN0IHtyZXR1cm4gZF9wdHI7fQotICAgIFF0UnVudGltZU1ldGhvZChRdFJ1bnRp
bWVNZXRob2REYXRhICpkZCwgRXhlY1N0YXRlICosIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcm
IG5hbWUpOwotICAgIFF0UnVudGltZU1ldGhvZERhdGEgKmRfcHRyOwotfTsKLQotY2xhc3MgUXRS
dW50aW1lTWV0YU1ldGhvZCA6IHB1YmxpYyBRdFJ1bnRpbWVNZXRob2QgewotcHVibGljOgotICAg
IHR5cGVkZWYgUXRSdW50aW1lTWV0aG9kIEJhc2U7CisgICAgSlNPYmplY3RSZWYganNPYmplY3RS
ZWYoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgc3RhdGljIFF0
UnVudGltZU1ldGFNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3Qg
UUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSkKLSAgICB7Ci0gICAgICAg
IFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVj
dHVyZTxRdFJ1bnRpbWVNZXRhTWV0aG9kPihleGVjKTsKLSAgICAgICAgUXRSdW50aW1lTWV0YU1l
dGhvZCogbWV0aG9kID0gbmV3IChhbGxvY2F0ZUNlbGw8UXRSdW50aW1lTWV0YU1ldGhvZD4oKmV4
ZWMtPmhlYXAoKSkpIFF0UnVudGltZU1ldGFNZXRob2QoZXhlYywgZG9tU3RydWN0dXJlLCBuYW1l
KTsKLSAgICAgICAgbWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLCBuYW1lLCBpbnN0YW5jZSwg
aW5kZXgsIHNpZ25hdHVyZSwgYWxsb3dQcml2YXRlKTsKLSAgICAgICAgcmV0dXJuIG1ldGhvZDsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlICosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwotCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwotCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFF0UnVudGltZU1ldGFNZXRob2RE
YXRhKiBkX2Z1bmMoKSBjb25zdCB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1lTWV0
YU1ldGhvZERhdGEqPihkX3B0cik7fQorICAgIGNvbnN0IFFCeXRlQXJyYXkmIG5hbWUoKSB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KIAogcHJpdmF0ZToKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9k
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmLCBQYXNzUmVmUHRyPFF0SW5zdGFu
Y2U+LCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwgYm9vbCBhbGxvd1By
aXZhdGUpOwotCi0gICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJik7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVj
U3RhdGUqIGV4ZWMpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGNvbm5lY3RHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgSlNWYWx1
ZSBkaXNjb25uZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci19
OwotCi1jbGFzcyBRdENvbm5lY3Rpb25PYmplY3Q7Ci1jbGFzcyBRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBR
dFJ1bnRpbWVNZXRob2QgQmFzZTsKLQotICAgIHN0YXRpYyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBuYW1lLCBib29sIGlz
Q29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSwgaW50IGluZGV4LCBjb25z
dCBRQnl0ZUFycmF5JiBzaWduYXR1cmUpCi0gICAgewotICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0
cnVjdHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZD4oZXhlYyk7Ci0gICAgICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Qq
IG1ldGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q+KCpl
eGVjLT5oZWFwKCkpKSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMsIGRvbVN0cnVjdHVy
ZSwgbmFtZSk7Ci0gICAgICAgIG1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgbmFtZSwgaXND
b25uZWN0LCBpbnN0YW5jZSwgaW5kZXgsIHNpZ25hdHVyZSk7Ci0gICAgICAgIHJldHVybiBtZXRo
b2Q7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSAqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKLSAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKLQot
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2REYXRhKj4oZF9wdHIpO30KLQotcHJpdmF0ZToKLSAgICBRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJp
bmcmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcm
LCBib29sIGlzQ29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiwgaW50IGluZGV4LCBjb25z
dCBRQnl0ZUFycmF5JiBzaWduYXR1cmUpOwotCi0gICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0
aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBR
TXVsdGlNYXA8UU9iamVjdCAqLCBRdENvbm5lY3Rpb25PYmplY3QgKj4gY29ubmVjdGlvbnM7Ci0g
ICAgZnJpZW5kIGNsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDsKKyAgICBzdGF0aWMgY29uc3QgSlNT
dGF0aWNGdW5jdGlvbiBjb25uZWN0RnVuY3Rpb247CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24gZGlzY29ubmVjdEZ1bmN0aW9uOworCisgICAgc3RhdGljIEpTVmFsdWVSZWYgY29u
bmVjdE9yRGlzY29ubmVjdChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgYm9vbCBjb25uZWN0KTsK
KyAgICBRUG9pbnRlcjxRT2JqZWN0PiBtX29iamVjdDsKKyAgICBRQnl0ZUFycmF5IG1faWRlbnRp
ZmllcjsKKyAgICBpbnQgbV9pbmRleDsKKyAgICBpbnQgbV9mbGFnczsKKyAgICBKU0NsYXNzUmVm
IG1fY2xhc3NSZWY7CisgICAgV2VhazxKU09iamVjdD4gbV9qc09iamVjdDsKKyAgICBRdEluc3Rh
bmNlKiBtX2luc3RhbmNlOwogfTsKIAogLy8gQSBRdENvbm5lY3Rpb25PYmplY3QgcmVwcmVzZW50
cyBhIGNvbm5lY3Rpb24gY3JlYXRlZCBpbnNpZGUgSlMuIEl0IHdpbGwgY29ubmVjdCBpdHMgb3du
IGV4ZWN1dGUoKSBzbG90CkBAIC0yNDcsOSArMTQwLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBt
YXRjaChKU0NvbnRleHRSZWYsIFFPYmplY3QqIHNlbmRlciwgaW50IHNpZ25hbEluZGV4LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBKU09iamVjdFJlZiBmdW5jT2JqZWN0KTsKIAotICAgIC8vIE5v
dGU6IGZvciBjYWxsZXJzIHVzaW5nIEpTQyBpbnRlcm5hbHMsIHJlbW92ZSBvbmNlIHdlIGRvbid0
IG5lZWQgYW55bW9yZS4KLSAgICBzdGF0aWMgUXRDb25uZWN0aW9uT2JqZWN0KiBjcmVhdGVXaXRo
SW50ZXJuYWxKU0MoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBzZW5kZXJJbnN0
YW5jZSwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdCogcmVjZWl2ZXIsIEpTT2JqZWN0KiByZWNl
aXZlckZ1bmN0aW9uKTsKLQogcHJpdmF0ZToKICAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9jb250
ZXh0OwogICAgIFJlZlB0cjxRdEluc3RhbmNlPiBtX3NlbmRlckluc3RhbmNlOwpAQCAtMjYwLDYg
KzE1MCw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc2lnbmFsSW5kZXg7CiAgICAgSlNPYmplY3RS
ZWYgbV9yZWNlaXZlcjsKICAgICBKU09iamVjdFJlZiBtX3JlY2VpdmVyRnVuY3Rpb247CisKKyAg
ICBmcmllbmQgY2xhc3MgUXRSdW50aW1lTWV0aG9kOworICAgIHN0YXRpYyBRTXVsdGlNYXA8UU9i
amVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5lY3Rpb25zOwogfTsKIAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0X3FvYmplY3Ricmlk
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0
YnJpZGdlLmNwcAppbmRleCA4ZDQ0MzU4OWFkOGY0OTQwNTYwOTMxYjI2NDhiMjJmZmUwNzQyODUx
Li43NTJmMDQ5OGJlYmM1MDI3ZGE4OWFhYWFmYWY5ZDBlZDlkMTk5NGZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0X3FvYmplY3RicmlkZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJy
aWRnZS5jcHAKQEAgLTE2MDIsMjAgKzE2MDIsMjAgQEAgdm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6
Y29ubmVjdEFuZERpc2Nvbm5lY3QoKQogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFT
dHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5jb25uZWN0KDEyMykiLCB0
eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUo
cmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFP
YmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOworICAgICAgICBRQ09NUEFS
RShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogTXlRT2Jq
ZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKICAgICB9CiAgICAgewogICAg
ICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVj
dC5teUludm9rYWJsZS5jb25uZWN0KGZ1bmN0aW9uKCkgeyB9KSIsIHR5cGUpOwogICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJp
bmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2Fi
bGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0
cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxl
KCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUVN0cmluZyB0
eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuY29u
bmVjdCgxMjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAg
ICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2Qu
Y29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgICAgICBRQ09NUEFSRShy
ZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlz
IG5vdCBhIGZ1bmN0aW9uIikpOwogICAgIH0KIAogICAgIHsKQEAgLTE2NDQsMjcgKzE2NDQsMjcg
QEAgdm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QoKQogICAgICAg
ICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJ2YXIgbyA9IHsg
fTsgby5kaXNjb25uZWN0ID0gbXlPYmplY3QubXlJbnZva2FibGUuZGlzY29ubmVjdDsgby5kaXNj
b25uZWN0KDEyMykiLCB0eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAg
ICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhv
ZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikp
OworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRo
b2QuZGlzY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIp
KTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIFFTdHJpbmcgdHlwZTsKICAgICAgICAgUVN0cmlu
ZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3QoMTIzKSIsIHR5
cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShy
ZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15
UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFDT01Q
QVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBN
eVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KICAgICB7
CiAgICAgICAgIFFTdHJpbmcgdHlwZTsKICAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15
T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3QoZnVuY3Rpb24oKSB7IH0pIiwgdHlwZSk7CiAg
ICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxh
dGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0
OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0
LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15UU9iamVj
dDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAgfQogCiAgICAgewogICAg
ICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVj
dC5teVNpZ25hbC5kaXNjb25uZWN0KDEyMykiLCB0eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlw
ZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJy
b3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7
CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhv
ZC5kaXNjb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CiAgICAgfQogCiAgICAg
ewpAQCAtMTg2Nyw3ICsxODY3LDcgQEAgdm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6b2JqZWN0RGVs
ZXRlZCgpCiAgICAgZXZhbEpTKCJiYXIuaW50UHJvcGVydHkgPSAxMjM7Iik7CiAgICAgUUNPTVBB
UkUocW9iai0+aW50UHJvcGVydHkoKSwgMTIzKTsKICAgICBxb2JqLT5yZXNldFF0RnVuY3Rpb25J
bnZva2VkKCk7Ci0gICAgZXZhbEpTKCJiYXIubXlJbnZva2FibGUuY2FsbChiYXIpOyIpOworICAg
IGV2YWxKUygiYmFyLm15SW52b2thYmxlKGJhcik7Iik7CiAgICAgUUNPTVBBUkUocW9iai0+cXRG
dW5jdGlvbkludm9rZWQoKSwgMCk7CiAKICAgICAvLyBkbyB0aGlzLCB0byBlbnN1cmUgdGhhdCB3
ZSBjYWNoZSB0aGF0IGl0IGltcGxlbWVudHMgY2FsbApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgdm9p
ZCB0c3RfUU9iamVjdEJyaWRnZTo6aW50cm9zcGVjdFF0TWV0aG9kcygpCiAgICAgICAgIFFDT01Q
QVJFKGV2YWxKUygiZGVzY3JpcHRvci5zZXQiKSwgc1VuZGVmaW5lZCk7CiAgICAgICAgIFFDT01Q
QVJFKGV2YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCJkZXNjcmlwdG9yLnZhbHVlID09PSAlMFsn
JTEnXSIpLmFyZyhtZXRob2RMb29rdXApLmFyZyhuYW1lKSksIHNUcnVlKTsKICAgICAgICAgUUNP
TVBBUkUoZXZhbEpTKFFTdHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IuZW51bWVyYWJsZSIp
KSwgc0ZhbHNlKTsKLSAgICAgICAgUUNPTVBBUkUoZXZhbEpTKFFTdHJpbmc6OmZyb21MYXRpbjEo
ImRlc2NyaXB0b3IuY29uZmlndXJhYmxlIikpLCBzRmFsc2UpOworICAgICAgICBRQ09NUEFSRShl
dmFsSlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci5jb25maWd1cmFibGUiKSksIHNU
cnVlKTsKICAgICB9CiAKICAgICBRVkVSSUZZKGV2YWxKU1YoInZhciBwcm9wcz1bXTsgZm9yICh2
YXIgcCBpbiBteU9iamVjdC5kZWxldGVMYXRlcikge3Byb3BzLnB1c2gocCk7fTsgcHJvcHMuc29y
dCgpIikudG9TdHJpbmdMaXN0KCkuaXNFbXB0eSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157731</attachid>
            <date>2012-08-10 06:54:39 -0700</date>
            <delta_ts>2012-08-11 14:47:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93476-20120810155514.patch</filename>
            <type>text/plain</type>
            <size>52004</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Mjc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNmNjJhZTUzNGNmZDBi
ZDhlNWJlM2VkMmIyZjFhNTE1MjRhZDZjYS4uN2NkZDk4NmE3ZTM0ZDZmMDZkMTMxY2M5MTQ0MDI2
NmExODczYzE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA4LTEwICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFBv
cnQgbWV0YSBtZXRob2Qvc2lnbmFsL3Nsb3QgaGFuZGxpbmcgaW4gcnVuLXRpbWUgYnJpZGdlIHRv
IHVzZSBKU0MgQyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzNDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQmFzZWQgb24gcGF0Y2ggYnkgTm8nYW0gUm9zZW50aGFsLgorCisgICAgICAgIFBvcnRl
ZCB0aGUgY29kZSB0aGF0IG1hcHBlZCBpbnZva2FibGUgbWV0aG9kcyAoYW5kIHNpZ25hbHMvc2xv
dHMpIGFzCisgICAgICAgIHdlbGwgYXMgdGhlIGNvZGUgdGhhdCBwcm92aWRlcyB0aGUgY29ubmVj
dCgpIGFuZCBkaXNjb25uZWN0KCkgZnVuY3Rpb25zCisgICAgICAgIG92ZXIgdG8gdXNlIHRoZSBK
U0MgQyBBUEkuIEluIHRoZSBwcm9jZXNzIG9uZSBiZWhhdmlvdXJhbCBjaGFuZ2Ugd2FzCisgICAg
ICAgIGltcGxlbWVudGVkOiBQcmV2aW91c2x5IG1ldGEgbWV0aG9kcyB3ZXJlIGFjdHVhbGx5IGZ1
bmN0aW9uIG9iamVjdHMKKyAgICAgICAgdGhhdCB0aHJvdWdoIEZ1bmN0aW9uLnByb3RvdHlwZSBh
bGxvd2VkIGNhbGxpbmcgdmlhCisgICAgICAgIG9iamVjdC5tZXRob2QuY2FsbChvYmplY3QpLiBU
aHJvdWdoIHRoZSB1c2Ugb2YgcGxhaW4gSlMgb2JqZWN0cyB0aGF0IGlzCisgICAgICAgIG5vdCBw
b3NzaWJsZSBhbnltb3JlLgorCisgICAgICAgIElmIHdlIHRyaWVkIHRvIGNvbnRpbnVlIHRvIHVz
ZSBmdW5jdGlvbiBvYmplY3RzIChKU09iamVjdE1ha2VGdW5jdGlvbikKKyAgICAgICAgdGhlbiB3
ZSB3b3VsZCBsb29zZSB0aGUgYWJpbGl0eSB0byBzdG9yZSB0aGUgcHJpdmF0ZSBwb2ludGVyLiBB
bgorICAgICAgICBhbHRlcm5hdGl2ZSBhcHByb2FjaCB3b3VsZCBiZSB0byB1c2UgYSByZWd1bGFy
IG9iamVjdCBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgRnVuY3Rpb24gcHJvdG90eXBlIChGdW5j
dGlvbi5wcm90b3R5cGUpLCBidXQgdW5mb3J0dW5hdGVseSB3ZSBjYW5ub3QgZG8KKyAgICAgICAg
dGhhdCB3aXRob3V0IGxvb3NpbmcgdGhlIGNvbW1vbiBwcm90b3R5cGUgZm9yIHNpZ25hbHMgYW5k
IHNsb3RzLgorCisgICAgICAgICogYnJpZGdlL3F0L3F0X2NsYXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6
flF0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6bmV3UnVu
dGltZU9iamVjdCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmg6CisgICAgICAg
IChCaW5kaW5ncyk6CisgICAgICAgIChRdEluc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvcXQv
cXRfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpwcm90b3R5cGVGb3JTaWdu
YWxzQW5kU2xvdHMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpR
dFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9k
Ojp+UXRSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1l
dGhvZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmNv
bm5lY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpkaXNjb25u
ZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6anNPYmplY3RS
ZWYpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpjb25uZWN0T3JE
aXNjb25uZWN0KToKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVjdCk6CisgICAgICAgICogYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1l
dGhvZDo6bmFtZSk6CisgICAgICAgIChRdFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoUXRDb25u
ZWN0aW9uT2JqZWN0KToKKwogMjAxMi0wOC0xMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBmcmFtZSBpZHMgdG8gVGlt
ZVN0YW1wLCBUaW1lIGFuZCBUaW1lRW5kIHJlY29yZHMgaW4gVGltZWxpbmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
aW5kZXggZTExZTU5MjQ2Yzk5MjIxYzZjNTEwZTBmMjM2NDNkZGIwZmE3NjFiOC4uZDdkMWZiNWY2
NGMxNTNlOTk2ZWVjOWVjMzdjMWJmNmIyZGI3ZjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSwyMyBAQAogMjAxMi0wOC0xMCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tp
YS5jb20+CiAKKyAgICAgICAgW1F0XSBQb3J0IG1ldGEgbWV0aG9kL3NpZ25hbC9zbG90IGhhbmRs
aW5nIGluIHJ1bi10aW1lIGJyaWRnZSB0byB1c2UgSlNDIEMgQVBJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzQ3NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgc2VtYW50aWNzIG9mIHNvbWUg
dGVzdCBleHBlY3RhdGlvbnMuIFNpbWlsYXJseSB0byByMTI1MDMyIHdoZW4gZ2VuZXJhdGluZwor
ICAgICAgICBlcnJvciBleGNlcHRpb25zIGZvciBjb25uZWN0L2Rpc2Nvbm5lY3QsIHdlIGNhbm5v
dCBnZW5lcmF0ZSBleHBsaWNpdCB0eXBlIGVycm9yCisgICAgICAgIGV4Y2VwdGlvbnMgYnV0IG9u
bHkgZ2VuZXJpYyBlcnJvcnMuIEFub3RoZXIgY2hhbmdlIGlzIHRoYXQgdGhlIG1ldGEtbWV0aG9k
IHdyYXBwZXIKKyAgICAgICAgZG9lc24ndCBzdXBwb3J0IHRoZSBjYWxsKCkgdGhyb3VnaCBGdW5j
dGlvbi5wcm90b3R5cGUgYW55bW9yZS4gU2VlIFdlYkNvcmUgY2hhbmdlbG9nCisgICAgICAgIGZv
ciBkZXRhaWxzLgorCisgICAgICAgICogdGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJy
aWRnZS5jcHA6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6Y29ubmVjdEFuZERpc2Nvbm5l
Y3QpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6Om9iamVjdERlbGV0ZWQpOgorICAgICAg
ICAodHN0X1FPYmplY3RCcmlkZ2U6OmludHJvc3BlY3RRdE1ldGhvZHMpOgorCisyMDEyLTA4LTEw
ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKwogICAgICAgICBb
UXRdIFJlbW92ZSBRUmVnRXhwIDw+IEpTIFJlZ0V4cCBjb252ZXJzaW9uCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzcxNgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X2NsYXNzLmNwcAppbmRleCBlZTIyYTY4NjFiYzUxYWViNzU4YzdlOGE2OWE4ZjJi
OWIzNGNhMWM5Li4yMDhiMWMwZmIzYjNhOWFjZjg1YzI0NjAwZjdmMjlhNmNjNTM4MGJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxdF9jbGFzcy5oIgogCisjaW5jbHVkZSAiQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgog
I2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKQEAgLTY5LDE0ICs3MCwxNSBAQCBjb25zdCBjaGFyKiBR
dENsYXNzOjpuYW1lKCkgY29uc3QKIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdCwgUHJvcGVydHlOYW1lIGlkZW50aWZpZXIpCiB7
CiAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3Qp
OworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhlYyk7CisgICAgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uID0gMDsKIAogICAgIFVTdHJpbmcgdXN0cmluZyhpZGVudGlmaWVyLnB1Ymxp
Y05hbWUoKSk7CiAgICAgY29uc3QgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFFDaGFyKj4odXN0cmluZy5jaGFyYWN0ZXJzKCkpLCB1c3RyaW5nLmxlbmd0
aCgpKS50b0xhdGluMSgpOwogCiAgICAgLy8gRmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBjYWNoZSBo
aXQKLSAgICBKU09iamVjdCogdmFsID0gcXRpbnN0LT5tX21ldGhvZHMudmFsdWUobmFtZSkuZ2V0
KCk7Ci0gICAgaWYgKHZhbCkKLSAgICAgICAgcmV0dXJuIHZhbDsKKyAgICBpZiAoUXRSdW50aW1l
TWV0aG9kKiBtZXRob2QgPSBxdGluc3QtPm1fbWV0aG9kcy52YWx1ZShuYW1lKSkKKyAgICAgICAg
cmV0dXJuIHRvSlMobWV0aG9kLT5qc09iamVjdFJlZihjb250ZXh0LCBleGNlcHRpb24pKTsKIAog
ICAgIC8vIE5vcGUsIGNyZWF0ZSBhbiBlbnRyeQogICAgIGNvbnN0IFFCeXRlQXJyYXkgbm9ybWFs
ID0gUU1ldGFPYmplY3Q6Om5vcm1hbGl6ZWRTaWduYXR1cmUobmFtZS5jb25zdERhdGEoKSk7CkBA
IC04Niw5ICs4OCwxMSBAQCBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgSW5zdGFuY2UqIGluc3QsIFByb3BlcnR5TmFtZSBpZAogICAgIGlmIChub3JtYWwu
Y29udGFpbnMoJygnKSAmJiAoaW5kZXggPSBtX21ldGFPYmplY3QtPmluZGV4T2ZNZXRob2Qobm9y
bWFsKSkgIT0gLTEpIHsKICAgICAgICAgUU1ldGFNZXRob2QgbSA9IG1fbWV0YU9iamVjdC0+bWV0
aG9kKGluZGV4KTsKICAgICAgICAgaWYgKG0uYWNjZXNzKCkgIT0gUU1ldGFNZXRob2Q6OlByaXZh
dGUpIHsKLSAgICAgICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHZhbCA9IFF0UnVudGltZU1l
dGFNZXRob2Q6OmNyZWF0ZShleGVjLCB1c3RyaW5nLCBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4o
aW5zdCksIGluZGV4LCBub3JtYWwsIGZhbHNlKTsKLSAgICAgICAgICAgIHF0aW5zdC0+bV9tZXRo
b2RzLmluc2VydChuYW1lLCB2YWwpOwotICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAg
ICAgIGludCBmbGFncyA9IG0ubWV0aG9kVHlwZSgpID09IFFNZXRhTWV0aG9kOjpTaWduYWwgPyBR
dFJ1bnRpbWVNZXRob2Q6Ok1ldGhvZElzU2lnbmFsIDogMDsKKyAgICAgICAgICAgIFF0UnVudGlt
ZU1ldGhvZCogbWV0aG9kID0gbmV3IFF0UnVudGltZU1ldGhvZChjb250ZXh0LCBleGNlcHRpb24s
IHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KS0+Z2V0T2JqZWN0KCksIG5vcm1hbCwgaW5k
ZXgsIGZsYWdzLCBxdGluc3QpOworICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0
KG5hbWUsIG1ldGhvZCk7CisKKyAgICAgICAgICAgIHJldHVybiB0b0pTKG1ldGhvZC0+anNPYmpl
Y3RSZWYoY29udGV4dCwgZXhjZXB0aW9uKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMCw5
ICsxMDQsMTAgQEAgSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEluc3RhbmNlKiBpbnN0LCBQcm9wZXJ0eU5hbWUgaWQKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGlmIChub3JtYWwgPT0gbS5uYW1lKCkpIHsKLSAgICAgICAgICAgIFF0UnVu
dGltZU1ldGFNZXRob2QqIHZhbCA9IFF0UnVudGltZU1ldGFNZXRob2Q6OmNyZWF0ZShleGVjLCB1
c3RyaW5nLCBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5zdCksIGluZGV4LCBub3JtYWwsIGZh
bHNlKTsKLSAgICAgICAgICAgIHF0aW5zdC0+bV9tZXRob2RzLmluc2VydChuYW1lLCB2YWwpOwot
ICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgICAgIGludCBmbGFncyA9IG0ubWV0aG9k
VHlwZSgpID09IFFNZXRhTWV0aG9kOjpTaWduYWwgPyBRdFJ1bnRpbWVNZXRob2Q6Ok1ldGhvZElz
U2lnbmFsIDogMDsKKyAgICAgICAgICAgIFF0UnVudGltZU1ldGhvZCogbWV0aG9kID0gbmV3IFF0
UnVudGltZU1ldGhvZChjb250ZXh0LCBleGNlcHRpb24sIHN0YXRpY19jYXN0PFF0SW5zdGFuY2Uq
PihpbnN0KS0+Z2V0T2JqZWN0KCksIG5vcm1hbCwgaW5kZXgsIGZsYWdzLCBxdGluc3QpOworICAg
ICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIG1ldGhvZCk7CisgICAgICAg
ICAgICByZXR1cm4gdG9KUyhtZXRob2QtPmpzT2JqZWN0UmVmKGNvbnRleHQsIGV4Y2VwdGlvbikp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcAppbmRleCA3ODUyNTEyZDM4ZjQwZTk0ODA3MDEwNjk5YWRiNDIzOWE4NWRkZWNmLi5hYThm
ZDc2NWM2MDkyODNlZDE2YmNiZDdhNTViN2ExMzQ4NmViYmNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKQEAgLTk0LDcgKzk0LDggQEAgUXRJbnN0YW5jZTo6flF0
SW5zdGFuY2UoKQogCiAgICAgY2FjaGVkSW5zdGFuY2VzLnJlbW92ZShtX2hhc2hrZXkpOwogCi0g
ICAgLy8gY2xlYW4gdXAgKHVucHJvdGVjdCBmcm9tIGdjKSB0aGUgSlNWYWx1ZXMgd2UndmUgY3Jl
YXRlZAorICAgIC8vIENsZWFuIHVwICh1bnByb3RlY3QgZnJvbSBnYykgdGhlIEpTVmFsdWVzIHdl
J3ZlIGNyZWF0ZWQuCisgICAgcURlbGV0ZUFsbChtX21ldGhvZHMpOwogICAgIG1fbWV0aG9kcy5j
bGVhcigpOwogCiAgICAgcURlbGV0ZUFsbChtX2ZpZWxkcyk7CkBAIC0xNDcsMTYgKzE0OCw2IEBA
IHZvaWQgUXRJbnN0YW5jZTo6cHV0KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtCiAgICAgSlNPYmplY3Q6OnB1dChvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIFF0SW5zdGFuY2U6OnJlbW92
ZVVudXNlZE1ldGhvZHMoKQotewotICAgIGZvciAoUUhhc2g8UUJ5dGVBcnJheSwgUXRXZWFrT2Jq
ZWN0UmVmZXJlbmNlPjo6SXRlcmF0b3IgaXQgPSBtX21ldGhvZHMuYmVnaW4oKSwgZW5kID0gbV9t
ZXRob2RzLmVuZCgpOyBpdCAhPSBlbmQ7ICkgewotICAgICAgICBpZiAoIWl0LnZhbHVlKCkuZ2V0
KCkpCi0gICAgICAgICAgICBpdCA9IG1fbWV0aG9kcy5lcmFzZShpdCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgICsraXQ7Ci0gICAgfQotfQotCiBRdEluc3RhbmNlKiBRdEluc3RhbmNlOjpn
ZXRJbnN0YW5jZShKU09iamVjdCogb2JqZWN0KQogewogICAgIGlmICghb2JqZWN0KQpAQCAtMTc5
LDYgKzE3MCw3IEBAIENsYXNzKiBRdEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiBSdW50aW1l
T2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBxRGVsZXRlQWxsKG1fbWV0aG9kcyk7
CiAgICAgbV9tZXRob2RzLmNsZWFyKCk7CiAgICAgcmV0dXJuIFF0UnVudGltZU9iamVjdDo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCmluZGV4IDZjOWRlMGQxNTkxMGQxM2Q3ZTE3YzY2
OWJlZDkxZDhmZmM3OWY5NzMuLjVlNGI1MzAzMGI1N2M5NjUxNTU5OTQ3YWY2YWM0ZjU1MmNmNTE3
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCkBAIC0zNCw3ICszNCw3
IEBAIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIGNsYXNzIFF0Q2xhc3M7CiBjbGFzcyBRdEZpZWxk
OwotY2xhc3MgUXRSdW50aW1lTWV0YU1ldGhvZDsKK2NsYXNzIFF0UnVudGltZU1ldGhvZDsKIAog
Y2xhc3MgUXRJbnN0YW5jZSA6IHB1YmxpYyBJbnN0YW5jZSB7CiBwdWJsaWM6CkBAIC03Miw4ICs3
Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHZvaWQgcmVtb3ZlVW51c2VkTWV0aG9kcygpOwot
CiAgICAgc3RhdGljIFF0SW5zdGFuY2UqIGdldEluc3RhbmNlKEpTT2JqZWN0Kik7CiAKICAgICBj
bGFzcyBRdFNlbmRlclN0YWNrIHsKQEAgLTg2LDM5ICs4NCw2IEBAIHB1YmxpYzoKICAgICB9Owog
CiBwcml2YXRlOgotCi0gICAgY2xhc3MgUXRXZWFrT2JqZWN0UmVmZXJlbmNlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFF0V2Vha09iamVjdFJlZmVyZW5jZShKU09iamVjdCogcmVmZXJlbmNlKQot
ICAgICAgICAgICAgOiBtX3JlZmVyZW5jZShyZWZlcmVuY2UpCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIFF0V2Vha09iamVjdFJlZmVyZW5jZShjb25zdCBRdFdlYWtPYmplY3RSZWZl
cmVuY2UmIHNvdXJjZSkKLSAgICAgICAgICAgIDogbV9yZWZlcmVuY2Uoc291cmNlLm1fcmVmZXJl
bmNlLmdldCgpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBRdFdlYWtPYmplY3RS
ZWZlcmVuY2UoKQotICAgICAgICAgICAgOiBtX3JlZmVyZW5jZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFF0V2Vha09iamVjdFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IFF0
V2Vha09iamVjdFJlZmVyZW5jZSYgc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Jl
ZmVyZW5jZSA9IFBhc3NXZWFrPEpTT2JqZWN0Pihzb3VyY2UubV9yZWZlcmVuY2UuZ2V0KCkpOwot
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNPYmplY3Qq
IGdldCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZmVyZW5jZS5n
ZXQoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2VhazxKU09iamVjdD4g
bV9yZWZlcmVuY2U7Ci0gICAgfTsKLQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+
IGNyZWF0ZShRT2JqZWN0ICppbnN0YW5jZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2Jq
ZWN0LCBWYWx1ZU93bmVyc2hpcCBvd25lcnNoaXApCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFF0SW5zdGFuY2UoaW5zdGFuY2UsIHJvb3RPYmplY3QsIG93bmVyc2hpcCkpOwpA
QCAtMTMwLDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFF0Q2xhc3MqIG1fY2xhc3M7
CiAgICAgUVBvaW50ZXI8UU9iamVjdD4gbV9vYmplY3Q7CiAgICAgUU9iamVjdCogbV9oYXNoa2V5
OwotICAgIG11dGFibGUgUUhhc2g8UUJ5dGVBcnJheSwgUXRXZWFrT2JqZWN0UmVmZXJlbmNlPiBt
X21ldGhvZHM7CisgICAgbXV0YWJsZSBRSGFzaDxRQnl0ZUFycmF5LCBRdFJ1bnRpbWVNZXRob2Qq
PiBtX21ldGhvZHM7CiAgICAgbXV0YWJsZSBRSGFzaDxRU3RyaW5nLCBRdEZpZWxkKj4gbV9maWVs
ZHM7CiAgICAgVmFsdWVPd25lcnNoaXAgbV9vd25lcnNoaXA7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCmluZGV4IDk1MWE3NTk4ZWI2YTAxZDJmMDE2NDE2YmE2OWZh
MDU1ZWRhYTM0NDguLmYwMzk5NzA0NGEyODFiNTljNmFiNWE1NDM2ODIwMTFlOWQ1NWI2NzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKQEAgLTkxMyw2MSArOTEzLDYg
QEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxSb290T2JqZWN0PiByb290LCBjb24KICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXN0
cmluZyk7CiB9CiAKLS8vID09PT09PT09PT09PT09PQotCi0vLyBRdC1saWtlIG1hY3JvcwotI2Rl
ZmluZSBRV19EKENsYXNzKSBDbGFzcyMjRGF0YSogZCA9IGRfZnVuYygpCi0jZGVmaW5lIFFXX0RT
KENsYXNzLEluc3RhbmNlKSBDbGFzcyMjRGF0YSogZCA9IEluc3RhbmNlLT5kX2Z1bmMoKQotCi1j
b25zdCBDbGFzc0luZm8gUXRSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJRdFJ1bnRpbWVNZXRo
b2QiLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFF0UnVudGltZU1ldGhvZCkgfTsKLQotUXRSdW50aW1lTWV0aG9kOjpRdFJ1bnRpbWVNZXRob2Qo
UXRSdW50aW1lTWV0aG9kRGF0YSogZGQsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlKQotICAgICwgZF9wdHIoZGQp
Ci17Ci19Ci0KLXZvaWQgUXRSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4g
aW5zdGFuY2UpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBpZGVudGlmaWVyKTsKLSAgICBRV19EKFF0UnVudGltZU1ldGhvZCk7Ci0gICAgZC0+bV9pbnN0
YW5jZSA9IGluc3RhbmNlOwotICAgIGQtPm1fZmluYWxpemVyID0gUGFzc1dlYWs8UXRSdW50aW1l
TWV0aG9kPih0aGlzLCBkKTsKLX0KLQotUXRSdW50aW1lTWV0aG9kOjp+UXRSdW50aW1lTWV0aG9k
KCkKLXsKLSAgICBkZWxldGUgZF9wdHI7Ci19Ci0KLXZvaWQgUXRSdW50aW1lTWV0aG9kOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2QqPihj
ZWxsKS0+UXRSdW50aW1lTWV0aG9kOjp+UXRSdW50aW1lTWV0aG9kKCk7Ci19Ci0KLS8vID09PT09
PT09PT09PT09PQotCi1RdFJ1bnRpbWVNZXRob2REYXRhOjp+UXRSdW50aW1lTWV0aG9kRGF0YSgp
Ci17Ci19Ci0KLXZvaWQgUXRSdW50aW1lTWV0aG9kRGF0YTo6ZmluYWxpemUoSGFuZGxlPFVua25v
d24+LCB2b2lkKikKLXsKLSAgICBtX2luc3RhbmNlLT5yZW1vdmVVbnVzZWRNZXRob2RzKCk7Ci19
Ci0KLVF0UnVudGltZU1ldGFNZXRob2REYXRhOjp+UXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKQot
ewotCi19Ci0KLVF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhOjp+UXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZERhdGEoKQotewotCi19Ci0KLS8vID09PT09PT09PT09PT09PQotCiAvLyBUeXBl
IGNvbnZlcnNpb24gbWV0YWRhdGEgKGZyb20gUXRTY3JpcHQgb3JpZ2luYWxseSkKIGNsYXNzIFF0
TWV0aG9kTWF0Y2hUeXBlCiB7CkBAIC0xMzM1LDM2NCArMTI4MCwyMjQgQEAgc3RhdGljIGludCBm
aW5kU2lnbmFsSW5kZXgoY29uc3QgUU1ldGFPYmplY3QqIG1ldGEsIGludCBpbml0aWFsSW5kZXgs
IFFCeXRlQXJyYXkKICAgICByZXR1cm4gaW5kZXg7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBRdFJ1
bnRpbWVNZXRhTWV0aG9kOjpzX2luZm8gPSB7ICJRdFJ1bnRpbWVNZXRob2QiLCAmQmFzZTo6c19p
bmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFF0UnVudGltZU1ldGFNZXRob2QpIH07Ci0K
LVF0UnVudGltZU1ldGFNZXRob2Q6OlF0UnVudGltZU1ldGFNZXRob2QoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6
IFF0UnVudGltZU1ldGhvZCAobmV3IFF0UnVudGltZU1ldGFNZXRob2REYXRhKCksIGV4ZWMsIHN0
cnVjdHVyZSwgaWRlbnRpZmllcikKK3N0YXRpYyBKU0NsYXNzUmVmIHByb3RvdHlwZUZvclNpZ25h
bHNBbmRTbG90cygpCiB7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xzID0gSlNDbGFzc0NyZWF0
ZSgma0pTQ2xhc3NEZWZpbml0aW9uRW1wdHkpOworICAgIHJldHVybiBjbHM7CiB9CiAKLXZvaWQg
UXRSdW50aW1lTWV0YU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBVU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBp
bnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUp
CitRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZChKU0NvbnRleHRSZWYgY3R4LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24sIFFPYmplY3QqIG9iamVjdCwgY29uc3QgUUJ5dGVBcnJheSYgaWRl
bnRpZmllciwgaW50IGluZGV4LCBpbnQgZmxhZ3MsIFF0SW5zdGFuY2UqIGluc3RhbmNlKQorICAg
IDogbV9vYmplY3Qob2JqZWN0KQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICwgbV9mbGFncyhmbGFncykKKyAgICAsIG1faW5zdGFuY2Uo
aW5zdGFuY2UpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwg
aW5zdGFuY2UpOwotICAgIFFXX0QoUXRSdW50aW1lTWV0YU1ldGhvZCk7Ci0gICAgZC0+bV9zaWdu
YXR1cmUgPSBzaWduYXR1cmU7Ci0gICAgZC0+bV9pbmRleCA9IGluZGV4OwotICAgIGQtPm1fYWxs
b3dQcml2YXRlID0gYWxsb3dQcml2YXRlOworICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
ID0geworICAgICAgICAwLCAwLCBtX2lkZW50aWZpZXIuY29uc3REYXRhKCksIHByb3RvdHlwZUZv
clNpZ25hbHNBbmRTbG90cygpLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCBj
YWxsLCAwLCAwLCAwCisgICAgfTsKKyAgICBtX2NsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmY2xh
c3NEZWYpOwogfQogCi12b2lkIFF0UnVudGltZU1ldGFNZXRob2Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK1F0UnVudGltZU1ldGhvZDo6flF0UnVu
dGltZU1ldGhvZCgpCiB7Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iamVjdCA9IGpz
Q2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oY2VsbCk7Ci0gICAgUXRSdW50aW1lTWV0aG9kOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIFF0UnVudGltZU1ldGFNZXRo
b2REYXRhKiBkID0gdGhpc09iamVjdC0+ZF9mdW5jKCk7Ci0gICAgaWYgKGQtPm1fY29ubmVjdCkK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmQtPm1fY29ubmVjdCk7Ci0gICAgaWYgKGQtPm1fZGlz
Y29ubmVjdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmQtPm1fZGlzY29ubmVjdCk7CisgICAg
SlNDbGFzc1JlbGVhc2UobV9jbGFzc1JlZik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIFF0UnVudGlt
ZU1ldGFNZXRob2Q6OmNhbGwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZVJlZiBRdFJ1bnRpbWVN
ZXRob2Q6OmNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiAvKnRoaXNPYmplY3QqLywgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBRdFJ1
bnRpbWVNZXRhTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2Qg
Kj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMoKTsKLQotICAgIC8vIFdlJ3JlIGxpbWl0ZWQgdG8g
MTAgYXJncwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxMCkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBRdFJ1bnRpbWVNZXRob2Qq
IGQgPSByZWludGVycHJldF9jYXN0PFF0UnVudGltZU1ldGhvZCo+KEpTT2JqZWN0R2V0UHJpdmF0
ZShmdW5jdGlvbikpOworICAgIFFPYmplY3QqIG9iaiA9IGQtPm1fb2JqZWN0OwogCi0gICAgLy8g
V2UgaGF2ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0KLSAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmpl
Y3QoKTsKLSAgICBpZiAob2JqKSB7Ci0gICAgICAgIGNvbnN0IGludCBhcmd1bWVudENvdW50ID0g
c3RhdGljX2Nhc3Q8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkpOwotICAgICAgICBWZWN0b3I8
SlNWYWx1ZVJlZiwgMTA+IGFyZ3MoYXJndW1lbnRDb3VudCk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICAgICAgYXJnc1tpXSA9IHRvUmVm
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KGkpKTsKLQotICAgICAgICBRVmFyTGVuZ3RoQXJyYXk8UVZh
cmlhbnQsIDEwPiB2YXJnczsKLSAgICAgICAgdm9pZCAqcWFyZ3NbMTFdOwotCi0gICAgICAgIGlu
dCBtZXRob2RJbmRleDsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAg
ICBpZiAoKG1ldGhvZEluZGV4ID0gZmluZE1ldGhvZEluZGV4KHRvUmVmKGV4ZWMpLCBvYmotPm1l
dGFPYmplY3QoKSwgZC0+bV9zaWduYXR1cmUsIGFyZ3VtZW50Q291bnQsIGFyZ3MuZGF0YSgpLCBk
LT5tX2FsbG93UHJpdmF0ZSwgdmFyZ3MsICh2b2lkICoqKXFhcmdzLCAmZXhjZXB0aW9uKSkgIT0g
LTEpIHsKLSAgICAgICAgICAgIGlmIChRTWV0YU9iamVjdDo6bWV0YWNhbGwob2JqLCBRTWV0YU9i
amVjdDo6SW52b2tlTWV0YU1ldGhvZCwgbWV0aG9kSW5kZXgsIHFhcmdzKSA+PSAwKQotICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICAg
ICAgICAgIGlmICh2YXJncy5zaXplKCkgPiAwICYmIHZhcmdzWzBdLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnZlcnRRVmFyaWFudFRvVmFsdWUo
ZXhlYywgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpLCB2YXJnc1swXSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJjYW5ub3QgY2FsbCBm
dW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3QiKSk7CisgICAgaWYgKCFvYmopIHsKKyAgICAgICAg
c2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZ0xpdGVyYWwoImNhbm5vdCBj
YWxsIGZ1bmN0aW9uIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAotICAgIC8vIHZvaWQgZnVuY3Rpb25z
IHJldHVybiB1bmRlZmluZWQKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotfQorICAgIC8vIEFsbG93IGZvciBtYXhpbXVtIG9mIDEwIGFyZ3VtZW50cyBhbmQgc2l6
ZSBzdGFjayBhcnJheXMgYWNjb3JkaW5nbHkuCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxMCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi1DYWxsVHlw
ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2Fs
bERhdGEpCi17Ci0gICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKLSAgICByZXR1
cm4gQ2FsbFR5cGVIb3N0OwotfQorICAgIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+IHZh
cmdzOworICAgIHZvaWQqIHFhcmdzWzExXTsKIAotYm9vbCBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBRdFJ1bnRpbWVN
ZXRhTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihjZWxs
KTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IElkZW50aWZpZXIoZXhlYywgImNvbm5lY3QiKSkg
ewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jb25uZWN0
R2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gSWRlbnRpZmllcihleGVjLCAiZGlzY29ubmVjdCIpKSB7Ci0gICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmRpc2Nvbm5lY3RHZXR0ZXIpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
KyAgICBpbnQgbWV0aG9kSW5kZXggPSBmaW5kTWV0aG9kSW5kZXgoY29udGV4dCwgb2JqLT5tZXRh
T2JqZWN0KCksIGQtPm1faWRlbnRpZmllciwgIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQtPm1fZmxhZ3MgJiBBbGxvd1By
aXZhdGUpLCB2YXJncywgKHZvaWQgKiopcWFyZ3MsIGV4Y2VwdGlvbik7CiAKLSAgICByZXR1cm4g
UXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKLX0KKyAgICBpZiAoUU1ldGFPYmplY3Q6Om1ldGFjYWxsKG9iaiwg
UU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QsIG1ldGhvZEluZGV4LCBxYXJncykgPj0gMCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi1ib29sIFF0
UnVudGltZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihvYmplY3QpOwotICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcihleGVjLCAiY29ubmVjdCIpKSB7Ci0gICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjb25u
ZWN0R2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFs
dWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHlOYW1lID09
IElkZW50aWZpZXIoZXhlYywgImRpc2Nvbm5lY3QiKSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZGlzY29ubmVjdEdldHRl
cik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmICh2YXJncy5zaXplKCkgPiAwICYmIHZhcmdz
WzBdLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKHRvSlMoY29udGV4dCksIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUodG9KUyhjb250ZXh0KSwgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVj
dCgpLCB2YXJnc1swXSkpOwogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotdm9pZCBRdFJ1bnRpbWVNZXRh
TWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQorSlNWYWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNvbm5lY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpIHsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCAiY29ubmVj
dCIpKTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCAiZGlzY29u
bmVjdCIpKTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7Ci0gICAgfQotCi0gICAgUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUpTVmFsdWUgUXRS
dW50aW1lTWV0YU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSkKLXsKLSAgICAvLyBRdFNjcmlwdCBhbHdheXMgcmV0dXJucyAwCi0gICAgcmV0dXJu
IGpzTnVtYmVyKDApOworICAgIHJldHVybiBjb25uZWN0T3JEaXNjb25uZWN0KGNvbnRleHQsIGZ1
bmN0aW9uLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwg
dHJ1ZSk7CiB9CiAKLUpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y29ubmVjdEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSBpZGVudCkKK0pT
VmFsdWVSZWYgUXRSdW50aW1lTWV0aG9kOjpkaXNjb25uZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgUVdfRFMo
UXRSdW50aW1lTWV0YU1ldGhvZCwgdGhpc09iaik7Ci0KLSAgICBpZiAoIWQtPm1fY29ubmVjdCkK
LSAgICAgICAgZC0+bV9jb25uZWN0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmosIFF0
UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNyZWF0ZShleGVjLCBpZGVudC5wdWJsaWNOYW1lKCks
IHRydWUsIGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAg
cmV0dXJuIGQtPm1fY29ubmVjdC5nZXQoKTsKKyAgICByZXR1cm4gY29ubmVjdE9yRGlzY29ubmVj
dChjb250ZXh0LCBmdW5jdGlvbiwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRz
LCBleGNlcHRpb24sIGZhbHNlKTsKIH0KIAotSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpk
aXNjb25uZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVy
dHlOYW1lIGlkZW50KQorSlNPYmplY3RSZWYgUXRSdW50aW1lTWV0aG9kOjpqc09iamVjdFJlZihK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIFF0UnVu
dGltZU1ldGFNZXRob2QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9k
Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBRV19EUyhRdFJ1bnRpbWVNZXRhTWV0aG9kLCB0
aGlzT2JqKTsKLQotICAgIGlmICghZC0+bV9kaXNjb25uZWN0KQotICAgICAgICBkLT5tX2Rpc2Nv
bm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwgUXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50LnB1YmxpY05hbWUoKSwgZmFsc2UsIGQtPm1faW5z
dGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAgcmV0dXJuIGQtPm1fZGlz
Y29ubmVjdC5nZXQoKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09CisgICAgaWYgKG1fanNPYmpl
Y3QpCisgICAgICAgIHJldHVybiB0b1JlZihtX2pzT2JqZWN0LmdldCgpKTsKIAotUU11bHRpTWFw
PFFPYmplY3QqLCBRdENvbm5lY3Rpb25PYmplY3QqPiBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
Ojpjb25uZWN0aW9uczsKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NE
ZWZGb3JDb25uZWN0ID0geworICAgICAgICAwLCAwLCAiY29ubmVjdCIsIDAsIDAsIDAsCisgICAg
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGNvbm5lY3QsIDAsIDAsIDAKKyAgICB9OwogCi1jb25z
dCBDbGFzc0luZm8gUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6c19pbmZvID0geyAiUXRSdW50
aW1lTWV0aG9kIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kKSB9OworICAgIHN0YXRpYyBjb25zdCBKU0NsYXNzRGVmaW5p
dGlvbiBjbGFzc0RlZkZvckRpc2Nvbm5lY3QgPSB7CisgICAgICAgIDAsIDAsICJkaXNjb25uZWN0
IiwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgZGlzY29ubmVjdCwgMCwg
MCwgMAorICAgIH07CiAKLVF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OlF0UnVudGltZUNvbm5l
Y3Rpb25NZXRob2QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
VVN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6IFF0UnVudGltZU1ldGhvZCAobmV3IFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2REYXRhKCksIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnRpZmllcikKLXsK
KyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZkNvbm5lY3QgPSBKU0NsYXNzQ3JlYXRlKCZj
bGFzc0RlZkZvckNvbm5lY3QpOworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmRGlzY29u
bmVjdCA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmRm9yRGlzY29ubmVjdCk7CisgICAgYm9vbCBp
c1NpZ25hbCA9IG1fZmxhZ3MgJiBNZXRob2RJc1NpZ25hbDsKKyAgICBKU09iamVjdFJlZiBvYmpl
Y3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbV9jbGFzc1JlZiwgdGhpcyk7CisgICAgSlNPYmpl
Y3RSZWYgY29ubmVjdEZ1bmN0aW9uID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmQ29u
bmVjdCwgdGhpcyk7CisgICAgSlNPYmplY3RSZWYgZGlzY29ubmVjdEZ1bmN0aW9uID0gSlNPYmpl
Y3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmRGlzY29ubmVjdCwgdGhpcyk7CisgICAgSlNQcm9wZXJ0
eUF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0gfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGU7CisKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYg
Y29ubmVjdFN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb25uZWN0Iik7Cisg
ICAgc3RhdGljIEpTU3RyaW5nUmVmIGRpc2Nvbm5lY3RTdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiZGlzY29ubmVjdCIpOworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBsZW5ndGhT
dHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIik7CisgICAgc3RhdGlj
IEpTU3RyaW5nUmVmIG5hbWVTdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFt
ZSIpOworICAgIEpTU3RyaW5nUmVmIGFjdHVhbE5hbWVTdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhtX2lkZW50aWZpZXIuY29uc3REYXRhKCkpOworCisgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eShjb250ZXh0LCBjb25uZWN0RnVuY3Rpb24sIGxlbmd0aFN0ciwgSlNWYWx1ZU1ha2VO
dW1iZXIoY29udGV4dCwgaXNTaWduYWwgPyAxIDogMCksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7
CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBjb25uZWN0RnVuY3Rpb24sIG5hbWVT
dHIsIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNvbm5lY3RTdHIpLCBhdHRyaWJ1dGVzLCBl
eGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgZGlzY29ubmVjdEZ1
bmN0aW9uLCBsZW5ndGhTdHIsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGlzU2lnbmFsID8g
MSA6IDApLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
Y29udGV4dCwgZGlzY29ubmVjdEZ1bmN0aW9uLCBuYW1lU3RyLCBKU1ZhbHVlTWFrZVN0cmluZyhj
b250ZXh0LCBkaXNjb25uZWN0U3RyKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKKworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjb25uZWN0U3RyLCBjb25uZWN0RnVu
Y3Rpb24sIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShj
b250ZXh0LCBvYmplY3QsIGRpc2Nvbm5lY3RTdHIsIGRpc2Nvbm5lY3RGdW5jdGlvbiwgYXR0cmli
dXRlcywgZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVj
dCwgbGVuZ3RoU3RyLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAwKSwgYXR0cmlidXRlcywg
ZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFt
ZVN0ciwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgYWN0dWFsTmFtZVN0ciksIGF0dHJpYnV0
ZXMsIGV4Y2VwdGlvbik7CisKKyAgICBKU1N0cmluZ1JlbGVhc2UoYWN0dWFsTmFtZVN0cik7Cisg
ICAgbV9qc09iamVjdCA9IFBhc3NXZWFrPEpTT2JqZWN0Pih0b0pTKG9iamVjdCkpOworICAgIHJl
dHVybiBvYmplY3Q7CiB9CiAKLXZvaWQgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyLCBib29s
IGlzQ29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSwgaW50IGluZGV4LCBj
b25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUpCitKU1ZhbHVlUmVmIFF0UnVudGltZU1ldGhvZDo6
Y29ubmVjdE9yRGlzY29ubmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGJvb2wgY29u
bmVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCBpbnN0
YW5jZSk7Ci0gICAgUVdfRChRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKTsKKyAgICBRdFJ1bnRp
bWVNZXRob2QqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2QqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGlmICghZCkKKyAgICAgICAgZCA9IHN0YXRpY19jYXN0
PFF0UnVudGltZU1ldGhvZCo+KEpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbikpOwogCi0gICAg
ZC0+bV9zaWduYXR1cmUgPSBzaWduYXR1cmU7Ci0gICAgZC0+bV9pbmRleCA9IGluZGV4OwotICAg
IGQtPm1faXNDb25uZWN0ID0gaXNDb25uZWN0OwotfQotCi1FbmNvZGVkSlNWYWx1ZSBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMoKTsKKyAgICBRU3RyaW5nIGZ1bmN0
aW9uTmFtZSA9IGNvbm5lY3QgPyBRU3RyaW5nTGl0ZXJhbCgiY29ubmVjdCIpIDogUVN0cmluZ0xp
dGVyYWwoImRpc2Nvbm5lY3QiKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAg
IGlmICghYXJndW1lbnRDb3VudCkgeworICAgICAgICBRU3RyaW5nIGVycm9yU3RyID0gUVN0cmlu
Z0xpdGVyYWwoIlF0TWV0YU1ldGhvZC4lMTogbm8gYXJndW1lbnRzIGdpdmVuIikuYXJnKGNvbm5l
Y3QgPyAgUVN0cmluZ0xpdGVyYWwoImNvbm5lY3QiKSA6IFFTdHJpbmdMaXRlcmFsKCJkaXNjb25u
ZWN0IikpOworICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBlcnJvclN0
cik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9
CiAKLSAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKKyAg
ICBpZiAoKCEoZC0+bV9mbGFncyAmIFF0UnVudGltZU1ldGhvZDo6TWV0aG9kSXNTaWduYWwpKSkg
eworICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nTGl0ZXJh
bCgiUXRNZXRhTWV0aG9kLiUzOiAlMTo6JTIoKSBpcyBub3QgYSBzaWduYWwiKS5hcmcoUVN0cmlu
Zzo6ZnJvbVV0ZjgoZC0+bV9vYmplY3QuZGF0YSgpLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgp
KSkuYXJnKFFTdHJpbmc6OmZyb21Bc2NpaShkLT5tX2lkZW50aWZpZXIpKS5hcmcoZnVuY3Rpb25O
YW1lKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAg
ICB9CiAKLSAgICBpZiAoc2VuZGVyKSB7CisgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9vYmpl
Y3QuZGF0YSgpOwogCi0gICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT50b1RoaXNPYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjKTsKLSAgICAgICAgSlNPYmplY3QqIGZ1bmNPYmplY3QgPSAw
OworICAgIGlmICghc2VuZGVyKSB7CisgICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNl
cHRpb24sIFFTdHJpbmdMaXRlcmFsKCJjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFP
YmplY3QiKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICB9CiAKLSAgICAgICAgLy8gUXRTY3JpcHQgY2hlY2tzIHNpZ25hbG5lc3MgZmlyc3QsIGFy
Z3VtZW50cyBzZWNvbmQKLSAgICAgICAgaW50IHNpZ25hbEluZGV4ID0gLTE7CisgICAgaW50IHNp
Z25hbEluZGV4ID0gZmluZFNpZ25hbEluZGV4KHNlbmRlci0+bWV0YU9iamVjdCgpLCBkLT5tX2lu
ZGV4LCBkLT5tX2lkZW50aWZpZXIpOwogCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5pdGlh
bCBpbmRleCBpcyBhIHNpZ25hbAotICAgICAgICBRTWV0YU1ldGhvZCBtID0gc2VuZGVyLT5tZXRh
T2JqZWN0KCktPm1ldGhvZChkLT5tX2luZGV4KTsKLSAgICAgICAgaWYgKG0ubWV0aG9kVHlwZSgp
ID09IFFNZXRhTWV0aG9kOjpTaWduYWwpCi0gICAgICAgICAgICBzaWduYWxJbmRleCA9IGZpbmRT
aWduYWxJbmRleChzZW5kZXItPm1ldGFPYmplY3QoKSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1
cmUpOworICAgIEpTT2JqZWN0UmVmIHRhcmdldE9iamVjdCA9IDA7CisgICAgSlNPYmplY3RSZWYg
dGFyZ2V0RnVuY3Rpb24gPSAwOwogCi0gICAgICAgIGlmIChzaWduYWxJbmRleCAhPSAtMSkgewot
ICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAg
ICAgICAgZnVuY09iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAg
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgIGlmIChmdW5j
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jT2JqZWN0LCBjYWxsRGF0YSkg
PT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVj
dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBh
IGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
UXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdCA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0
dWFsIGZ1bmN0aW9uIHRvIGNhbGwKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmFzT2Jq
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXNPYmotPm1ldGhv
ZFRhYmxlKCktPmdldENhbGxEYXRhKGFzT2JqLCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB2ZXJzaW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNPYmo7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgc3RyaW5n
Ci0gICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJndW1l
bnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgSWRlbnRpZmllciBmdW5jSWRlbnQoZXhlYywgZnVuY05hbWUpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyAjIyMgRHJvcEFsbExvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHJlc29sdmVkIGF0IHRoaXMgcG9pbnQgaW4gUXRTY3JpcHQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGZ1bmNJZGVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogYXNGdW5jT2JqID0gdmFsLnRv
T2JqZWN0KGV4ZWMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNGdW5jT2JqLT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShhc0Z1bmNPYmosIGNhbGxEYXRhKSAhPSBDYWxsVHlw
ZU5vbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNGdW5j
T2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJR
dE1ldGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0
YU1ldGhvZC5kaXNjb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRoaXNPYmplY3QgaXMgbm90IGFuIG9i
amVjdCIpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0
YU1ldGhvZC5kaXNjb25uZWN0OiB0aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3QiKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiBubyBhcmd1bWVu
dHMgZ2l2ZW4iKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2Qu
ZGlzY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIikpOworICAgIGlmIChhcmd1bWVudENvdW50
ID09IDEpIHsKKyAgICAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJndW1lbnRz
WzBdKSkgeworICAgICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0
cmluZ0xpdGVyYWwoIlF0TWV0YU1ldGhvZC4lMTogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIiku
YXJnKGZ1bmN0aW9uTmFtZSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIHRhcmdldEZ1bmN0aW9uID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKworICAgICAgICAv
LyBvYmplY3Quc2lnbmFsLmNvbm5lY3Qoc29tZUZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKEpTT2Jq
ZWN0SXNGdW5jdGlvbihjb250ZXh0LCB0YXJnZXRGdW5jdGlvbikpIHsKKyAgICAgICAgICAgIGlm
IChKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIHRhcmdldEZ1bmN0aW9uLCBwcm90b3R5
cGVGb3JTaWduYWxzQW5kU2xvdHMoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBvYmplY3Quc2ln
bmFsLmNvbm5lY3Qob3RoZXJPYmplY3Quc2xvdCk7CisgICAgICAgICAgICAgICAgaWYgKFF0UnVu
dGltZU1ldGhvZCogdGFyZ2V0TWV0aG9kID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0aG9kKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRhcmdldEZ1bmN0aW9uKSkpCisgICAgICAgICAgICAgICAgICAg
IHRhcmdldE9iamVjdCA9IHRvUmVmKFF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UodGFyZ2V0TWV0
aG9kLT5tX29iamVjdC5kYXRhKCksIGQtPm1faW5zdGFuY2UtPnJvb3RPYmplY3QoKSwgUXRJbnN0
YW5jZTo6UXRPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KHRvSlMoY29udGV4dCkpKTsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0YXJnZXRGdW5jdGlv
biA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gb2JqZWN0LnNpZ25hbC5jb25uZWN0KG9i
amVjdCwgc29tZUZ1bmN0aW9uKTsKKyAgICAgICAgdGFyZ2V0T2JqZWN0ID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKEpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0pKQorICAgICAgICAgICAgdGFyZ2V0RnVu
Y3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24p
OworICAgIH0KIAotICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KSB7Ci0gICAgICAgICAg
ICAgICAgLy8gdG8gY29ubmVjdCwgd2UgbmVlZDoKLSAgICAgICAgICAgICAgICAvLyAgdGFyZ2V0
IG9iamVjdCBbZnJvbSBjdG9yXQotICAgICAgICAgICAgICAgIC8vICB0YXJnZXQgc2lnbmFsIGlu
ZGV4IGV0Yy4gW2Zyb20gY3Rvcl0KLSAgICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIgZnVuY3Rp
b24gW2Zyb20gYXJndW1lbnRzXQotICAgICAgICAgICAgICAgIC8vICByZWNlaXZlciB0aGlzIG9i
amVjdCBbZnJvbSBhcmd1bWVudHNdCi0KLSAgICAgICAgICAgICAgICBRdENvbm5lY3Rpb25PYmpl
Y3QqIGNvbm4gPSBRdENvbm5lY3Rpb25PYmplY3Q6OmNyZWF0ZVdpdGhJbnRlcm5hbEpTQyhleGVj
LCBkLT5tX2luc3RhbmNlLCBzaWduYWxJbmRleCwgdGhpc09iamVjdCwgZnVuY09iamVjdCk7Ci0g
ICAgICAgICAgICAgICAgYm9vbCBvayA9IFFNZXRhT2JqZWN0Ojpjb25uZWN0KHNlbmRlciwgc2ln
bmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmplY3QoKS0+bWV0aG9kT2Zmc2V0KCkpOwotICAg
ICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbm47
Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5n
KCJRdE1ldGFNZXRob2QuY29ubmVjdDogZmFpbGVkIHRvIGNvbm5lY3QgdG8gJTE6OiUyKCkiKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5t
ZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
YXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9zaWduYXR1cmUpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtc2cudG9MYXRpbjEo
KS5jb25zdERhdGEoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgY29ubmVjdGlvbgotICAgICAgICAgICAg
ICAgICAgICBjb25uZWN0aW9ucy5pbnNlcnQoc2VuZGVyLCBjb25uKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE5vdyB0byBmaW5k
IG91ciBwcmV2aW91cyBjb25uZWN0aW9uIG9iamVjdC4gSG1tLgotICAgICAgICAgICAgICAgIFFM
aXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5zID0gY29ubmVjdGlvbnMudmFsdWVzKHNlbmRl
cik7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKLSAgICAgICAgICAgICAgICBK
U09iamVjdFJlZiByZWNlaXZlciA9IDo6dG9SZWYodGhpc09iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgSlNPYmplY3RSZWYgcmVjZWl2ZXJGdW5jdGlvbiA9IDo6dG9SZWYoZnVuY09iamVjdCk7Ci0K
LSAgICAgICAgICAgICAgICBmb3JlYWNoKFF0Q29ubmVjdGlvbk9iamVjdCogY29ubiwgY29ubnMp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyB0aGUgcmlnaHQgY29ubmVjdGlvbj8K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4tPm1hdGNoKGNvbnRleHQsIHNlbmRlciwgc2ln
bmFsSW5kZXgsIHJlY2VpdmVyLCByZWNlaXZlckZ1bmN0aW9uKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gWWVwLCBkaXNjb25uZWN0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICBR
TWV0YU9iamVjdDo6ZGlzY29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25uLT5t
ZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBjb25uOyAvLyB0aGlzIHdpbGwgYWxzbyByZW1vdmUgaXQgZnJvbSB0aGUgbWFwCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgLy8g
b2JqZWN0LnNpZ25hbC5jb25uZWN0KHNvbWVPYmplY3QpOworICAgIGlmICghdGFyZ2V0RnVuY3Rp
b24pIHsKKyAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZ0xp
dGVyYWwoIlF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IGZh
aWxlZCB0byBkaXNjb25uZWN0IGZyb20gJTE6OiUyKCkiKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFt
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+
bV9zaWduYXR1cmUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCBtc2cudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuJTE6
ICUyOjolMygpIGlzIG5vdCBhIHNpZ25hbCIpKQotICAgICAgICAgICAgICAgICAgICAuYXJnKFFM
YXRpbjFTdHJpbmcoZC0+bV9pc0Nvbm5lY3QgPyAiY29ubmVjdCI6ICJkaXNjb25uZWN0IikpCisg
ICAgaWYgKGNvbm5lY3QpIHsKKyAgICAgICAgLy8gdG8gY29ubmVjdCwgd2UgbmVlZDoKKyAgICAg
ICAgLy8gIHRhcmdldCBvYmplY3QgW2Zyb20gY3Rvcl0KKyAgICAgICAgLy8gIHRhcmdldCBzaWdu
YWwgaW5kZXggZXRjLiBbZnJvbSBjdG9yXQorICAgICAgICAvLyAgcmVjZWl2ZXIgZnVuY3Rpb24g
W2Zyb20gYXJndW1lbnRzXQorICAgICAgICAvLyAgcmVjZWl2ZXIgdGhpcyBvYmplY3QgW2Zyb20g
YXJndW1lbnRzXQorCisgICAgICAgIFF0Q29ubmVjdGlvbk9iamVjdCogY29ubiA9IG5ldyBRdENv
bm5lY3Rpb25PYmplY3QoY29udGV4dCwgUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShzZW5kZXIs
IGQtPm1faW5zdGFuY2UtPnJvb3RPYmplY3QoKSwgUXRJbnN0YW5jZTo6UXRPd25lcnNoaXApLCBz
aWduYWxJbmRleCwgdGFyZ2V0T2JqZWN0LCB0YXJnZXRGdW5jdGlvbik7CisgICAgICAgIGJvb2wg
b2sgPSBRTWV0YU9iamVjdDo6Y29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25u
LT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKKyAgICAgICAgaWYgKCFvaykgeworICAg
ICAgICAgICAgZGVsZXRlIGNvbm47CisgICAgICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmco
UUxhdGluMVN0cmluZygiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IGZhaWxlZCB0byBjb25uZWN0IHRv
ICUxOjolMigpIikpCiAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5k
ZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAuYXJn
KFFMYXRpbjFTdHJpbmcoZC0+bV9zaWduYXR1cmUpKTsKLSAgICAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0
RGF0YSgpKSk7CisgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX2lk
ZW50aWZpZXIpKTsKKyAgICAgICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24s
IG1zZyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFP
YmplY3QiKSk7Ci0gICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLX0KLQotQ2FsbFR5cGUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0Q2FsbERh
dGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQotewotICAgIGNhbGxEYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IGNhbGw7Ci0gICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKLX0KKyAgICAgICAgLy8g
U3RvcmUgY29ubmVjdGlvbgorICAgICAgICBRdENvbm5lY3Rpb25PYmplY3Q6OmNvbm5lY3Rpb25z
Lmluc2VydChzZW5kZXIsIGNvbm4pOwogCi1ib29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6
OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZCo+KGNlbGwpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LT5sZW5ndGhHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAotICAgIHJldHVybiBR
dFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1ib29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKLXsKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVy
KTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywg
cHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgLy8gTm93IHRvIGZpbmQgb3VyIHByZXZpb3VzIGNv
bm5lY3Rpb24gb2JqZWN0LgorICAgIFFMaXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5zID0g
UXRDb25uZWN0aW9uT2JqZWN0Ojpjb25uZWN0aW9ucy52YWx1ZXMoc2VuZGVyKTsKIAotICAgIHJl
dHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQorICAgIGZvcmVhY2ggKFF0Q29u
bmVjdGlvbk9iamVjdCogY29ubiwgY29ubnMpIHsKKyAgICAgICAgLy8gSXMgdGhpcyB0aGUgcmln
aHQgY29ubmVjdGlvbj8KKyAgICAgICAgaWYgKCFjb25uLT5tYXRjaChjb250ZXh0LCBzZW5kZXIs
IHNpZ25hbEluZGV4LCB0YXJnZXRPYmplY3QsIHRhcmdldEZ1bmN0aW9uKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi12b2lkIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKLSAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgICAgIC8vIFllcCwgZGlzY29u
bmVjdCBpdAorICAgICAgICBRTWV0YU9iamVjdDo6ZGlzY29ubmVjdChzZW5kZXIsIHNpZ25hbElu
ZGV4LCBjb25uLCBjb25uLT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKKyAgICAgICAg
ZGVsZXRlIGNvbm47IC8vIHRoaXMgd2lsbCBhbHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAg
IFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwotfQorICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZ0xpdGVyYWwoIlF0
TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBmYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tICUxOjolMigp
IikKKyAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+
Y2xhc3NOYW1lKCkpKQorICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faWRlbnRp
ZmllcikpOwogCi1KU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6Omxlbmd0aEdldHRl
cihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgLy8gd2UgaGF2ZSBv
bmUgZm9ybWFsIGFyZ3VtZW50LCBhbmQgb25lIG9wdGlvbmFsCi0gICAgcmV0dXJuIGpzTnVtYmVy
KDEpOworICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIG1zZyk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiAvLyA9PT09PT09PT09PT09
PT0KIAorUU11bHRpTWFwPFFPYmplY3QqLCBRdENvbm5lY3Rpb25PYmplY3QqPiBRdENvbm5lY3Rp
b25PYmplY3Q6OmNvbm5lY3Rpb25zOworCiBRdENvbm5lY3Rpb25PYmplY3Q6OlF0Q29ubmVjdGlv
bk9iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBzZW5k
ZXJJbnN0YW5jZSwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdFJlZiByZWNlaXZlciwgSlNPYmpl
Y3RSZWYgcmVjZWl2ZXJGdW5jdGlvbikKICAgICA6IFFPYmplY3Qoc2VuZGVySW5zdGFuY2UtPmdl
dE9iamVjdCgpKQogICAgICwgbV9jb250ZXh0KEpTQ29udGV4dEdldEdsb2JhbENvbnRleHQoY29u
dGV4dCkpCkBAIC0xNzExLDcgKzE1MTYsNyBAQCBRdENvbm5lY3Rpb25PYmplY3Q6On5RdENvbm5l
Y3Rpb25PYmplY3QoKQogewogICAgIC8vIFdlIGNhbiBzYWZlbHkgdXNlIG1fb3JpZ2luYWxTZW5k
ZXIgYmVjYXVzZSBjb25uZWN0aW9uIG9iamVjdCB3aWxsIG5ldmVyIG91dGxpdmUgdGhlIHNlbmRl
ciwKICAgICAvLyB3aGljaCBpcyBpdHMgUU9iamVjdCBwYXJlbnQuCi0gICAgUXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZDo6Y29ubmVjdGlvbnMucmVtb3ZlKG1fb3JpZ2luYWxTZW5kZXIsIHRoaXMp
OworICAgIGNvbm5lY3Rpb25zLnJlbW92ZShtX29yaWdpbmFsU2VuZGVyLCB0aGlzKTsKIAogICAg
IGlmIChtX3JlY2VpdmVyKQogICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9y
ZWNlaXZlcik7CkBAIC0xODQ1LDExICsxNjUwLDYgQEAgYm9vbCBRdENvbm5lY3Rpb25PYmplY3Q6
Om1hdGNoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBRT2JqZWN0KiBzZW5kZXIsIGludCBzaWduYWwK
ICAgICByZXR1cm4gcmVjZWl2ZXJNYXRjaCAmJiBKU1ZhbHVlSXNFcXVhbChjb250ZXh0LCByZWNl
aXZlckZ1bmN0aW9uLCBtX3JlY2VpdmVyRnVuY3Rpb24sIGlnbm9yZWRFeGNlcHRpb24pOwogfQog
Ci1RdENvbm5lY3Rpb25PYmplY3QqIFF0Q29ubmVjdGlvbk9iamVjdDo6Y3JlYXRlV2l0aEludGVy
bmFsSlNDKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBzZW5kZXJJbnN0
YW5jZSwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdCogcmVjZWl2ZXIsIEpTT2JqZWN0KiByZWNl
aXZlckZ1bmN0aW9uKQotewotICAgIHJldHVybiBuZXcgUXRDb25uZWN0aW9uT2JqZWN0KDo6dG9S
ZWYoZXhlYyksIHNlbmRlckluc3RhbmNlLCBzaWduYWxJbmRleCwgOjp0b1JlZihyZWNlaXZlciks
IDo6dG9SZWYocmVjZWl2ZXJGdW5jdGlvbikpOwotfQotCiAvLyA9PT09PT09PT09PT09PT0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFF0QXJyYXk8VD46OlF0QXJyYXkoUUxpc3Q8VD4gbGlzdCwg
UU1ldGFUeXBlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCmluZGV4IGIyZmQ2NmQ0MzY1M2FiNTZk
MjY5NzI5NmI2MTA5ODQzN2QwMzA4N2UuLjQ3ZDBiYTBmZGYwYjA3YzdjYjlhYWRmZGYxNDgwZTE5
YjNiNjI5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaApAQCAtOTUsMTQz
ICs5NSwzNiBAQCBwcml2YXRlOgogICAgIFFNZXRhVHlwZTo6VHlwZSBtX3R5cGU7CiB9OwogCi0v
LyBCYXNlZCBvbiBSdW50aW1lTWV0aG9kCi0KLS8vIEV4dHJhIGRhdGEgY2xhc3NlcyAodG8gYXZv
aWQgdGhlIENFTExfU0laRSBsaW1pdCBvbiBKUyBvYmplY3RzKQotY2xhc3MgUXRSdW50aW1lTWV0
aG9kOwotY2xhc3MgUXRSdW50aW1lTWV0aG9kRGF0YSA6IHB1YmxpYyBXZWFrSGFuZGxlT3duZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+UXRSdW50aW1lTWV0aG9kRGF0YSgpOwot
ICAgICAgICBSZWZQdHI8UXRJbnN0YW5jZT4gbV9pbnN0YW5jZTsKLSAgICAgICAgV2VhazxRdFJ1
bnRpbWVNZXRob2Q+IG1fZmluYWxpemVyOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBm
aW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqKTsKLX07Ci0KLWNsYXNzIFF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2Q7Ci1jbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSA6IHB1YmxpYyBR
dFJ1bnRpbWVNZXRob2REYXRhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5RdFJ1bnRpbWVNZXRh
TWV0aG9kRGF0YSgpOwotICAgICAgICBRQnl0ZUFycmF5IG1fc2lnbmF0dXJlOwotICAgICAgICBi
b29sIG1fYWxsb3dQcml2YXRlOwotICAgICAgICBpbnQgbV9pbmRleDsKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q+IG1fY29ubmVjdDsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q+IG1fZGlzY29ubmVjdDsKLX07Ci0K
LWNsYXNzIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhIDogcHVibGljIFF0UnVudGltZU1l
dGhvZERhdGEgewotICAgIHB1YmxpYzoKLSAgICAgICAgflF0UnVudGltZUNvbm5lY3Rpb25NZXRo
b2REYXRhKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgbV9zaWduYXR1cmU7Ci0gICAgICAgIGludCBt
X2luZGV4OwotICAgICAgICBib29sIG1faXNDb25uZWN0OwotfTsKLQotLy8gQ29tbW9uIGJhc2Ug
Y2xhc3MgKGRvZXNuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIGludGVyZXN0aW5nKQotY2xhc3MgUXRS
dW50aW1lTWV0aG9kIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworY2xhc3MgUXRSdW50aW1l
TWV0aG9kIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKyAg
ICBlbnVtIE1ldGhvZEZsYWdzIHsKKyAgICAgICAgTWV0aG9kSXNTaWduYWwgPSAxLAorICAgICAg
ICBBbGxvd1ByaXZhdGUgPSAyCisgICAgfTsKIAorICAgIFF0UnVudGltZU1ldGhvZChKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgUU9iamVjdCosIGNvbnN0IFFCeXRlQXJyYXkm
IGlkZW50aWZpZXIsIGludCBzaWduYWxJbmRleCwgaW50IGZsYWdzLCBRdEluc3RhbmNlKik7CiAg
ICAgflF0UnVudGltZU1ldGhvZCgpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiBjYWxsKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJl
ZiBjb25uZWN0KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJl
ZiBkaXNjb25uZWN0KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIHN0YXRpYyBGdW5j
dGlvblByb3RvdHlwZSogY3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5mdW5j
dGlvblByb3RvdHlwZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKLSAgICB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmLCBQ
YXNzUmVmUHRyPFF0SW5zdGFuY2U+KTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuOwotCi0gICAgUXRSdW50aW1lTWV0aG9kRGF0YSAqZF9mdW5jKCkgY29uc3Qg
e3JldHVybiBkX3B0cjt9Ci0gICAgUXRSdW50aW1lTWV0aG9kKFF0UnVudGltZU1ldGhvZERhdGEg
KmRkLCBFeGVjU3RhdGUgKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYgbmFtZSk7Ci0gICAg
UXRSdW50aW1lTWV0aG9kRGF0YSAqZF9wdHI7Ci19OwotCi1jbGFzcyBRdFJ1bnRpbWVNZXRhTWV0
aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBRdFJ1
bnRpbWVNZXRob2QgQmFzZTsKKyAgICBKU09iamVjdFJlZiBqc09iamVjdFJlZihKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKLSAgICBzdGF0aWMgUXRSdW50aW1lTWV0YU1l
dGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBz
aWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBk
b21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UnVudGlt
ZU1ldGFNZXRob2Q+KGV4ZWMpOwotICAgICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiBtZXRob2Qg
PSBuZXcgKGFsbG9jYXRlQ2VsbDxRdFJ1bnRpbWVNZXRhTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkg
UXRSdW50aW1lTWV0YU1ldGhvZChleGVjLCBkb21TdHJ1Y3R1cmUsIG5hbWUpOwotICAgICAgICBt
ZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIG5hbWUsIGluc3RhbmNlLCBpbmRleCwgc2lnbmF0
dXJlLCBhbGxvd1ByaXZhdGUpOwotICAgICAgICByZXR1cm4gbWV0aG9kOwotICAgIH0KLQotICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUgKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0K
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0g
ICAgCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0KLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0g
ICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEqIGRfZnVuYygp
IGNvbnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSo+
KGRfcHRyKTt9CisgICAgY29uc3QgUUJ5dGVBcnJheSYgbmFtZSgpIHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQogCiBwcml2YXRlOgotICAgIFF0UnVudGltZU1ldGFNZXRob2QoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiwgY29uc3QgVVN0cmluZyYsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4sIGludCBpbmRl
eCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSk7Ci0KLSAg
ICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKLSAgICBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0ZSogZXhlYyk7
Ci0gICAgc3RhdGljIEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgY29ubmVjdEdldHRlcihFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGRpc2Nvbm5lY3RH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLX07Ci0KLWNsYXNzIFF0
Q29ubmVjdGlvbk9iamVjdDsKLWNsYXNzIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgOiBwdWJs
aWMgUXRSdW50aW1lTWV0aG9kIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFF0UnVudGltZU1ldGhv
ZCBCYXNlOwotCi0gICAgc3RhdGljIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIG5hbWUsIGJvb2wgaXNDb25uZWN0LCBQYXNz
UmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkm
IHNpZ25hdHVyZSkKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2Vi
Q29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
PihleGVjKTsKLSAgICAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCogbWV0aG9kID0gbmV3
IChhbGxvY2F0ZUNlbGw8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkp
IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoZXhlYywgZG9tU3RydWN0dXJlLCBuYW1lKTsKLSAg
ICAgICAgbWV0aG9kLT5maW5pc2hDcmVhdGlvbihleGVjLCBuYW1lLCBpc0Nvbm5lY3QsIGluc3Rh
bmNlLCBpbmRleCwgc2lnbmF0dXJlKTsKLSAgICAgICAgcmV0dXJuIG1ldGhvZDsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlICos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwotCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwot
ICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBk
X2Z1bmMoKSBjb25zdCB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZERhdGEqPihkX3B0cik7fQotCi1wcml2YXRlOgotICAgIFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYsIGJvb2wgaXNDb25u
ZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+LCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkm
IHNpZ25hdHVyZSk7Ci0KLSAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
KEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgc3RhdGljIEpTVmFsdWUgbGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIFFNdWx0aU1hcDxRT2Jq
ZWN0ICosIFF0Q29ubmVjdGlvbk9iamVjdCAqPiBjb25uZWN0aW9uczsKLSAgICBmcmllbmQgY2xh
c3MgUXRDb25uZWN0aW9uT2JqZWN0OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9u
IGNvbm5lY3RGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBkaXNj
b25uZWN0RnVuY3Rpb247CisKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjb25uZWN0T3JEaXNjb25u
ZWN0KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBib29sIGNvbm5lY3QpOworICAgIFFQb2ludGVy
PFFPYmplY3Q+IG1fb2JqZWN0OworICAgIFFCeXRlQXJyYXkgbV9pZGVudGlmaWVyOworICAgIGlu
dCBtX2luZGV4OworICAgIGludCBtX2ZsYWdzOworICAgIEpTQ2xhc3NSZWYgbV9jbGFzc1JlZjsK
KyAgICBXZWFrPEpTT2JqZWN0PiBtX2pzT2JqZWN0OworICAgIFF0SW5zdGFuY2UqIG1faW5zdGFu
Y2U7CiB9OwogCiAvLyBBIFF0Q29ubmVjdGlvbk9iamVjdCByZXByZXNlbnRzIGEgY29ubmVjdGlv
biBjcmVhdGVkIGluc2lkZSBKUy4gSXQgd2lsbCBjb25uZWN0IGl0cyBvd24gZXhlY3V0ZSgpIHNs
b3QKQEAgLTI0Nyw5ICsxNDAsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIG1hdGNoKEpTQ29udGV4
dFJlZiwgUU9iamVjdCogc2VuZGVyLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIEpTT2JqZWN0UmVmIGZ1bmNPYmplY3QpOwogCi0gICAgLy8gTm90ZTogZm9yIGNhbGxl
cnMgdXNpbmcgSlNDIGludGVybmFscywgcmVtb3ZlIG9uY2Ugd2UgZG9uJ3QgbmVlZCBhbnltb3Jl
LgotICAgIHN0YXRpYyBRdENvbm5lY3Rpb25PYmplY3QqIGNyZWF0ZVdpdGhJbnRlcm5hbEpTQyhF
eGVjU3RhdGUqLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNlbmRlckluc3RhbmNlLCBpbnQgc2ln
bmFsSW5kZXgsIEpTT2JqZWN0KiByZWNlaXZlciwgSlNPYmplY3QqIHJlY2VpdmVyRnVuY3Rpb24p
OwotCiBwcml2YXRlOgogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRleHQ7CiAgICAgUmVm
UHRyPFF0SW5zdGFuY2U+IG1fc2VuZGVySW5zdGFuY2U7CkBAIC0yNjAsNiArMTUwLDkgQEAgcHJp
dmF0ZToKICAgICBpbnQgbV9zaWduYWxJbmRleDsKICAgICBKU09iamVjdFJlZiBtX3JlY2VpdmVy
OwogICAgIEpTT2JqZWN0UmVmIG1fcmVjZWl2ZXJGdW5jdGlvbjsKKworICAgIGZyaWVuZCBjbGFz
cyBRdFJ1bnRpbWVNZXRob2Q7CisgICAgc3RhdGljIFFNdWx0aU1hcDxRT2JqZWN0KiwgUXRDb25u
ZWN0aW9uT2JqZWN0Kj4gY29ubmVjdGlvbnM7CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvdGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0X3FvYmplY3RicmlkZ2UuY3BwCmlu
ZGV4IDQ1NjI2ZDllZjIxZjBiY2ZmNTZmYmE3YmQzMzBiNGQxZjBmYjJjZDguLjAxYmYzMjkxMjA0
MTAyNmNiMmFjMTRlYjI4YjBlOGU3NTlmYmVmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcApAQCAt
MTU4NywyMCArMTU4NywyMCBAQCB2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpjb25uZWN0QW5kRGlz
Y29ubmVjdCgpCiAgICAgICAgIFFTdHJpbmcgdHlwZTsKICAgICAgICAgUVN0cmluZyByZXQgPSBl
dmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlLmNvbm5lY3QoMTIzKSIsIHR5cGUpOwogICAgICAg
ICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFT
dHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZv
a2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGlu
MVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2th
YmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KICAgICB7CiAgICAgICAgIFFTdHJpbmcg
dHlwZTsKICAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxl
LmNvbm5lY3QoZnVuY3Rpb24oKSB7IH0pIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUs
IHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9y
OiBRdE1ldGFNZXRob2QuY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBh
IHNpZ25hbCIpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjog
UXRNZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBz
aWduYWwiKSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAg
IFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0KDEyMykiLCB0
eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUo
cmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJn
ZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0
cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rp
b24iKSk7CiAgICAgfQogCiAgICAgewpAQCAtMTYyOSwyNyArMTYyOSwyNyBAQCB2b2lkIHRzdF9R
T2JqZWN0QnJpZGdlOjpjb25uZWN0QW5kRGlzY29ubmVjdCgpCiAgICAgICAgIFFTdHJpbmcgdHlw
ZTsKICAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoInZhciBvID0geyB9OyBvLmRpc2Nvbm5l
Y3QgPSBteU9iamVjdC5teUludm9rYWJsZS5kaXNjb25uZWN0OyBvLmRpc2Nvbm5lY3QoMTIzKSIs
IHR5cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFS
RShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6
IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFD
T01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0
OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KIAog
ICAgIHsKICAgICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxK
UygibXlPYmplY3QubXlJbnZva2FibGUuZGlzY29ubmVjdCgxMjMpIiwgdHlwZSk7CiAgICAgICAg
IFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0
cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0OjpteUlu
dm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0
aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15UU9iamVjdDo6bXlJ
bnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgUVN0
cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlJbnZv
a2FibGUuZGlzY29ubmVjdChmdW5jdGlvbigpIHsgfSkiLCB0eXBlKTsKICAgICAgICAgUUNPTVBB
UkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJU
eXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxl
KCkgaXMgbm90IGEgc2lnbmFsIikpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJp
bmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJs
ZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIFFTdHJpbmcg
dHlwZTsKICAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmRp
c2Nvbm5lY3QoMTIzKSIsIHR5cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwot
ICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0
aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKKyAgICAgICAgUUNP
TVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6
IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKICAgICB9CiAKICAgICB7CkBAIC0xODQ3LDcg
KzE4NDcsNyBAQCB2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpvYmplY3REZWxldGVkKCkKICAgICBl
dmFsSlMoImJhci5pbnRQcm9wZXJ0eSA9IDEyMzsiKTsKICAgICBRQ09NUEFSRShxb2JqLT5pbnRQ
cm9wZXJ0eSgpLCAxMjMpOwogICAgIHFvYmotPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKLSAg
ICBldmFsSlMoImJhci5teUludm9rYWJsZS5jYWxsKGJhcik7Iik7CisgICAgZXZhbEpTKCJiYXIu
bXlJbnZva2FibGUoYmFyKTsiKTsKICAgICBRQ09NUEFSRShxb2JqLT5xdEZ1bmN0aW9uSW52b2tl
ZCgpLCAwKTsKIAogICAgIC8vIGRvIHRoaXMsIHRvIGVuc3VyZSB0aGF0IHdlIGNhY2hlIHRoYXQg
aXQgaW1wbGVtZW50cyBjYWxsCkBAIC0yMTQ1LDcgKzIxNDUsNyBAQCB2b2lkIHRzdF9RT2JqZWN0
QnJpZGdlOjppbnRyb3NwZWN0UXRNZXRob2RzKCkKICAgICAgICAgUUNPTVBBUkUoZXZhbEpTKCJk
ZXNjcmlwdG9yLnNldCIpLCBzVW5kZWZpbmVkKTsKICAgICAgICAgUUNPTVBBUkUoZXZhbEpTKFFT
dHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IudmFsdWUgPT09ICUwWyclMSddIikuYXJnKG1l
dGhvZExvb2t1cCkuYXJnKG5hbWUpKSwgc1RydWUpOwogICAgICAgICBRQ09NUEFSRShldmFsSlMo
UVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci5lbnVtZXJhYmxlIikpLCBzRmFsc2UpOwot
ICAgICAgICBRQ09NUEFSRShldmFsSlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci5j
b25maWd1cmFibGUiKSksIHNGYWxzZSk7CisgICAgICAgIFFDT01QQVJFKGV2YWxKUyhRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSIpKSwgc1RydWUpOwogICAgIH0K
IAogICAgIFFWRVJJRlkoZXZhbEpTVigidmFyIHByb3BzPVtdOyBmb3IgKHZhciBwIGluIG15T2Jq
ZWN0LmRlbGV0ZUxhdGVyKSB7cHJvcHMucHVzaChwKTt9OyBwcm9wcy5zb3J0KCkiKS50b1N0cmlu
Z0xpc3QoKS5pc0VtcHR5KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157879</attachid>
            <date>2012-08-11 14:47:07 -0700</date>
            <delta_ts>2012-08-13 07:31:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93476-20120811234743.patch</filename>
            <type>text/plain</type>
            <size>56455</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmE5ZTIyY2U1YTg1ODZl
YzY4NGRmZTZmOWQzYzY2ZWE0YzIzODM5Yi4uMjhlNzBhN2RiMTI1OTQyOTk0ODRjOTEyOGI0NDZl
NzIyNDdmYjFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA4LTExICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFBv
cnQgbWV0YSBtZXRob2Qvc2lnbmFsL3Nsb3QgaGFuZGxpbmcgaW4gcnVuLXRpbWUgYnJpZGdlIHRv
IHVzZSBKU0MgQyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzNDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQmFzZWQgb24gcGF0Y2ggYnkgTm8nYW0gUm9zZW50aGFsLgorCisgICAgICAgIFBvcnRl
ZCB0aGUgY29kZSB0aGF0IG1hcHBlZCBpbnZva2FibGUgbWV0aG9kcyAoYW5kIHNpZ25hbHMvc2xv
dHMpIGFzCisgICAgICAgIHdlbGwgYXMgdGhlIGNvZGUgdGhhdCBwcm92aWRlcyB0aGUgY29ubmVj
dCgpIGFuZCBkaXNjb25uZWN0KCkgZnVuY3Rpb25zCisgICAgICAgIG92ZXIgdG8gdXNlIHRoZSBK
U0MgQyBBUEkuIEluIHRoZSBwcm9jZXNzIG9uZSBiZWhhdmlvdXJhbCBjaGFuZ2Ugd2FzCisgICAg
ICAgIGltcGxlbWVudGVkOiBQcmV2aW91c2x5IG1ldGEgbWV0aG9kcyB3ZXJlIGFjdHVhbGx5IGZ1
bmN0aW9uIG9iamVjdHMKKyAgICAgICAgdGhhdCB0aHJvdWdoIEZ1bmN0aW9uLnByb3RvdHlwZSBh
bGxvd2VkIGNhbGxpbmcgdmlhCisgICAgICAgIG9iamVjdC5tZXRob2QuY2FsbChvYmplY3QpLiBU
aHJvdWdoIHRoZSB1c2Ugb2YgcGxhaW4gSlMgb2JqZWN0cyB0aGF0IGlzCisgICAgICAgIG5vdCBw
b3NzaWJsZSBhbnltb3JlLgorCisgICAgICAgIElmIHdlIHRyaWVkIHRvIGNvbnRpbnVlIHRvIHVz
ZSBmdW5jdGlvbiBvYmplY3RzIChKU09iamVjdE1ha2VGdW5jdGlvbikKKyAgICAgICAgdGhlbiB3
ZSB3b3VsZCBsb29zZSB0aGUgYWJpbGl0eSB0byBzdG9yZSB0aGUgcHJpdmF0ZSBwb2ludGVyLiBB
bgorICAgICAgICBhbHRlcm5hdGl2ZSBhcHByb2FjaCB3b3VsZCBiZSB0byB1c2UgYSByZWd1bGFy
IG9iamVjdCBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgRnVuY3Rpb24gcHJvdG90eXBlIChGdW5j
dGlvbi5wcm90b3R5cGUpLCBidXQgdW5mb3J0dW5hdGVseSB3ZSBjYW5ub3QgZG8KKyAgICAgICAg
dGhhdCB3aXRob3V0IGxvb3NpbmcgdGhlIGNvbW1vbiBwcm90b3R5cGUgZm9yIHNpZ25hbHMgYW5k
IHNsb3RzLgorCisgICAgICAgICogYnJpZGdlL3F0L3F0X2NsYXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6
flF0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6bmV3UnVu
dGltZU9iamVjdCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmg6CisgICAgICAg
IChCaW5kaW5ncyk6CisgICAgICAgIChRdEluc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvcXQv
cXRfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpwcm90b3R5cGVGb3JTaWdu
YWxzQW5kU2xvdHMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpR
dFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9k
Ojp+UXRSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1l
dGhvZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmNv
bm5lY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpkaXNjb25u
ZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6anNPYmplY3RS
ZWYpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpjb25uZWN0T3JE
aXNjb25uZWN0KToKKyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVjdCk6CisgICAgICAgICogYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1l
dGhvZDo6bmFtZSk6CisgICAgICAgIChRdFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoUXRDb25u
ZWN0aW9uT2JqZWN0KToKKwogMjAxMi0wOC0xMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZp
bGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF0gUmVtb3Zl
IFF0U2VuZGVyU3RhY2sgbm93IHdlIGRvIG5vdCBzdXBwb3J0IF9fcXRfc2VuZGVyX18gYW55bW9y
ZSBpbiBRdCBicmlkZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYjAwOGMyMDVkYTQxYTliYmU5ZDM0YjI3
ZjVjNmEzYjhhYWE4MWIzNi4uMGY5OWMxYjEyYWNiN2RiNDU3ZmJlMDUwOTJiNmE3NGY5ODFkNTkx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wOC0xMSAgU2ltb24gSGF1
c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBQb3J0IG1l
dGEgbWV0aG9kL3NpZ25hbC9zbG90IGhhbmRsaW5nIGluIHJ1bi10aW1lIGJyaWRnZSB0byB1c2Ug
SlNDIEMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MzQ3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENoYW5nZWQgc2VtYW50aWNzIG9mIHNvbWUgdGVzdCBleHBlY3RhdGlvbnMuIFNpbWlsYXJseSB0
byByMTI1MDMyIHdoZW4gZ2VuZXJhdGluZworICAgICAgICBlcnJvciBleGNlcHRpb25zIGZvciBj
b25uZWN0L2Rpc2Nvbm5lY3QsIHdlIGNhbm5vdCBnZW5lcmF0ZSBleHBsaWNpdCB0eXBlIGVycm9y
CisgICAgICAgIGV4Y2VwdGlvbnMgYnV0IG9ubHkgZ2VuZXJpYyBlcnJvcnMuIEFub3RoZXIgY2hh
bmdlIGlzIHRoYXQgdGhlIG1ldGEtbWV0aG9kIHdyYXBwZXIKKyAgICAgICAgZG9lc24ndCBzdXBw
b3J0IHRoZSBjYWxsKCkgdGhyb3VnaCBGdW5jdGlvbi5wcm90b3R5cGUgYW55bW9yZS4gU2VlIFdl
YkNvcmUgY2hhbmdlbG9nCisgICAgICAgIGZvciBkZXRhaWxzLgorCisgICAgICAgICogdGVzdHMv
cW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHA6CisgICAgICAgICh0c3RfUU9iamVj
dEJyaWRnZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlk
Z2U6Om9iamVjdERlbGV0ZWQpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6OmludHJvc3Bl
Y3RRdE1ldGhvZHMpOgorCiAyMDEyLTA4LTExICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lA
Z21haWwuY29tPgogCiAgICAgICAgIFtRdF0gQWRkIHN1cHBvcnQgZm9yIEhUTUw1IHN0YXRlIG9i
amVjdCBoaXN0b3J5IEFQSSBpbiBGcmFtZUxvYWRlckNsaWVudFF0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X2NsYXNzLmNwcAppbmRleCBlZTIyYTY4NjFiYzUxYWViNzU4YzdlOGE2OWE4ZjJiOWIz
NGNhMWM5Li42MjQ4ZWUzNTI4MzYxNGFkMjJlODYwOTVkMmJmMDdjNjBkODY4YTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJxdF9jbGFzcy5oIgogCisjaW5jbHVkZSAiQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgogI2lu
Y2x1ZGUgInF0X3J1bnRpbWUuaCIKQEAgLTY5LDQ0ICs3MCw0OCBAQCBjb25zdCBjaGFyKiBRdENs
YXNzOjpuYW1lKCkgY29uc3QKIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0
YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdCwgUHJvcGVydHlOYW1lIGlkZW50aWZpZXIpCiB7CiAg
ICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3QpOwor
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhlYyk7CisgICAgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uID0gMDsKIAogICAgIFVTdHJpbmcgdXN0cmluZyhpZGVudGlmaWVyLnB1YmxpY05h
bWUoKSk7CiAgICAgY29uc3QgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IFFDaGFyKj4odXN0cmluZy5jaGFyYWN0ZXJzKCkpLCB1c3RyaW5nLmxlbmd0aCgp
KS50b0xhdGluMSgpOwogCiAgICAgLy8gRmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBjYWNoZSBoaXQK
LSAgICBKU09iamVjdCogdmFsID0gcXRpbnN0LT5tX21ldGhvZHMudmFsdWUobmFtZSkuZ2V0KCk7
Ci0gICAgaWYgKHZhbCkKLSAgICAgICAgcmV0dXJuIHZhbDsKKyAgICBpZiAoUXRSdW50aW1lTWV0
aG9kKiBtZXRob2QgPSBxdGluc3QtPm1fbWV0aG9kcy52YWx1ZShuYW1lKSkKKyAgICAgICAgcmV0
dXJuIHRvSlMobWV0aG9kLT5qc09iamVjdFJlZihjb250ZXh0LCBleGNlcHRpb24pKTsKIAogICAg
IC8vIE5vcGUsIGNyZWF0ZSBhbiBlbnRyeQogICAgIGNvbnN0IFFCeXRlQXJyYXkgbm9ybWFsID0g
UU1ldGFPYmplY3Q6Om5vcm1hbGl6ZWRTaWduYXR1cmUobmFtZS5jb25zdERhdGEoKSk7CiAKICAg
ICAvLyBTZWUgaWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2gKICAgICBpbnQgaW5kZXggPSAtMTsK
KyAgICBRTWV0YU1ldGhvZCBtZXRhTWV0aG9kOwogICAgIGlmIChub3JtYWwuY29udGFpbnMoJygn
KSAmJiAoaW5kZXggPSBtX21ldGFPYmplY3QtPmluZGV4T2ZNZXRob2Qobm9ybWFsKSkgIT0gLTEp
IHsKLSAgICAgICAgUU1ldGFNZXRob2QgbSA9IG1fbWV0YU9iamVjdC0+bWV0aG9kKGluZGV4KTsK
LSAgICAgICAgaWYgKG0uYWNjZXNzKCkgIT0gUU1ldGFNZXRob2Q6OlByaXZhdGUpIHsKLSAgICAg
ICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHZhbCA9IFF0UnVudGltZU1ldGFNZXRob2Q6OmNy
ZWF0ZShleGVjLCB1c3RyaW5nLCBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5zdCksIGluZGV4
LCBub3JtYWwsIGZhbHNlKTsKLSAgICAgICAgICAgIHF0aW5zdC0+bV9tZXRob2RzLmluc2VydChu
YW1lLCB2YWwpOwotICAgICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAgfQorICAgICAgICBt
ZXRhTWV0aG9kID0gbV9tZXRhT2JqZWN0LT5tZXRob2QoaW5kZXgpOworICAgICAgICBpZiAobWV0
YU1ldGhvZC5hY2Nlc3MoKSA9PSBRTWV0YU1ldGhvZDo6UHJpdmF0ZSkKKyAgICAgICAgICAgIGlu
ZGV4ID0gLTE7CiAgICAgfQogCiAgICAgLy8gTm9wZS4uIHRyeSBhIGJhc2VuYW1lIG1hdGNoCi0g
ICAgY29uc3QgaW50IGNvdW50ID0gbV9tZXRhT2JqZWN0LT5tZXRob2RDb3VudCgpOwotICAgIGZv
ciAoaW5kZXggPSBjb3VudCAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKLSAgICAgICAgY29u
c3QgUU1ldGFNZXRob2QgbSA9IG1fbWV0YU9iamVjdC0+bWV0aG9kKGluZGV4KTsKLSAgICAgICAg
aWYgKG0uYWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBpZiAobm9ybWFsID09IG0ubmFtZSgpKSB7Ci0gICAgICAgICAgICBR
dFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjcmVhdGUoZXhl
YywgdXN0cmluZywgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3QpLCBpbmRleCwgbm9ybWFs
LCBmYWxzZSk7Ci0gICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5pbnNlcnQobmFtZSwgdmFs
KTsKLSAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgaWYgKGluZGV4ID09IC0xKSB7CisgICAg
ICAgIGNvbnN0IGludCBjb3VudCA9IG1fbWV0YU9iamVjdC0+bWV0aG9kQ291bnQoKTsKKyAgICAg
ICAgZm9yIChpbmRleCA9IGNvdW50IC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkgeworICAgICAg
ICAgICAgbWV0YU1ldGhvZCA9IG1fbWV0YU9iamVjdC0+bWV0aG9kKGluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChtZXRhTWV0aG9kLmFjY2VzcygpID09IFFNZXRhTWV0aG9kOjpQcml2YXRlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobWV0YU1ldGhvZC5uYW1l
KCkgPT0gbm9ybWFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGludCBmbGFncyA9IG1ldGFNZXRob2QubWV0
aG9kVHlwZSgpID09IFFNZXRhTWV0aG9kOjpTaWduYWwgPyBRdFJ1bnRpbWVNZXRob2Q6Ok1ldGhv
ZElzU2lnbmFsIDogMDsKKyAgICBRdFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IG5ldyBRdFJ1bnRp
bWVNZXRob2QoY29udGV4dCwgZXhjZXB0aW9uLCBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5z
dCktPmdldE9iamVjdCgpLCBub3JtYWwsIGluZGV4LCBmbGFncywgcXRpbnN0KTsKKyAgICBxdGlu
c3QtPm1fbWV0aG9kcy5pbnNlcnQobmFtZSwgbWV0aG9kKTsKKyAgICByZXR1cm4gdG9KUyhtZXRo
b2QtPmpzT2JqZWN0UmVmKGNvbnRleHQsIGV4Y2VwdGlvbikpOwogfQogCiAvLyBUaGlzIGZ1bmN0
aW9uYWxpdHkgaXMgaGFuZGxlZCBieSB0aGUgZmFsbGJhY2sgY2FzZSBhYm92ZS4uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggNzg1MjUxMmQzOGY0MGU5NDgw
NzAxMDY5OWFkYjQyMzlhODVkZGVjZi4uNTEzZDcxMWRiNTY1OTEyOGQwZGY0N2JhNjA0NjY0ZDNh
OGVkNDgzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBAIC05
NCw3ICs5NCw3IEBAIFF0SW5zdGFuY2U6On5RdEluc3RhbmNlKCkKIAogICAgIGNhY2hlZEluc3Rh
bmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIAotICAgIC8vIGNsZWFuIHVwICh1bnByb3RlY3QgZnJv
bSBnYykgdGhlIEpTVmFsdWVzIHdlJ3ZlIGNyZWF0ZWQKKyAgICBxRGVsZXRlQWxsKG1fbWV0aG9k
cyk7CiAgICAgbV9tZXRob2RzLmNsZWFyKCk7CiAKICAgICBxRGVsZXRlQWxsKG1fZmllbGRzKTsK
QEAgLTE0NywxNiArMTQ3LDYgQEAgdm9pZCBRdEluc3RhbmNlOjpwdXQoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW0KICAgICBKU09iamVj
dDo6cHV0KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZv
aWQgUXRJbnN0YW5jZTo6cmVtb3ZlVW51c2VkTWV0aG9kcygpCi17Ci0gICAgZm9yIChRSGFzaDxR
Qnl0ZUFycmF5LCBRdFdlYWtPYmplY3RSZWZlcmVuY2U+OjpJdGVyYXRvciBpdCA9IG1fbWV0aG9k
cy5iZWdpbigpLCBlbmQgPSBtX21ldGhvZHMuZW5kKCk7IGl0ICE9IGVuZDsgKSB7Ci0gICAgICAg
IGlmICghaXQudmFsdWUoKS5nZXQoKSkKLSAgICAgICAgICAgIGl0ID0gbV9tZXRob2RzLmVyYXNl
KGl0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKytpdDsKLSAgICB9Ci19Ci0KIFF0SW5z
dGFuY2UqIFF0SW5zdGFuY2U6OmdldEluc3RhbmNlKEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAg
aWYgKCFvYmplY3QpCkBAIC0xNzksNiArMTY5LDcgQEAgQ2xhc3MqIFF0SW5zdGFuY2U6OmdldENs
YXNzKCkgY29uc3QKIFJ1bnRpbWVPYmplY3QqIFF0SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3Qo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIHFE
ZWxldGVBbGwobV9tZXRob2RzKTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsKICAgICByZXR1cm4g
UXRSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCB0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0
YW5jZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmgKaW5kZXggY2M0
MmFlZGM2NmRkNmVlNzAxMjBmODk0OTU4Y2Q0Y2ZjYzEwZGUyMS4uY2RkNzM0YWZjNTNhODAxYjI2
NGFkOWNmMmM0MzMxZWVmNjRkM2Y3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X2luc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3Rh
bmNlLmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAogY2xhc3MgUXRD
bGFzczsKIGNsYXNzIFF0RmllbGQ7Ci1jbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kOworY2xhc3Mg
UXRSdW50aW1lTWV0aG9kOwogCiBjbGFzcyBRdEluc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsK
IHB1YmxpYzoKQEAgLTcxLDQ0ICs3MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHZvaWQgcmVt
b3ZlVW51c2VkTWV0aG9kcygpOwotCiAgICAgc3RhdGljIFF0SW5zdGFuY2UqIGdldEluc3RhbmNl
KEpTT2JqZWN0Kik7CiAKIHByaXZhdGU6Ci0KLSAgICBjbGFzcyBRdFdlYWtPYmplY3RSZWZlcmVu
Y2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUXRXZWFrT2JqZWN0UmVmZXJlbmNlKEpTT2JqZWN0
KiByZWZlcmVuY2UpCi0gICAgICAgICAgICA6IG1fcmVmZXJlbmNlKHJlZmVyZW5jZSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUXRXZWFrT2JqZWN0UmVmZXJlbmNlKGNvbnN0IFF0
V2Vha09iamVjdFJlZmVyZW5jZSYgc291cmNlKQotICAgICAgICAgICAgOiBtX3JlZmVyZW5jZShz
b3VyY2UubV9yZWZlcmVuY2UuZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IFF0V2Vha09iamVjdFJlZmVyZW5jZSgpCi0gICAgICAgICAgICA6IG1fcmVmZXJlbmNlKCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUXRXZWFrT2JqZWN0UmVmZXJlbmNlJiBvcGVy
YXRvcj0oY29uc3QgUXRXZWFrT2JqZWN0UmVmZXJlbmNlJiBzb3VyY2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fcmVmZXJlbmNlID0gUGFzc1dlYWs8SlNPYmplY3Q+KHNvdXJjZS5tX3JlZmVy
ZW5jZS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICBKU09iamVjdCogZ2V0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fcmVmZXJlbmNlLmdldCgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBX
ZWFrPEpTT2JqZWN0PiBtX3JlZmVyZW5jZTsKLSAgICB9OwotCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UXRJbnN0YW5jZT4gY3JlYXRlKFFPYmplY3QgKmluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RP
YmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXRJbnN0YW5jZShpbnN0YW5jZSwgcm9vdE9iamVjdCwg
b3duZXJzaGlwKSk7CkBAIC0xMjAsNyArODUsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUXRD
bGFzcyogbV9jbGFzczsKICAgICBRUG9pbnRlcjxRT2JqZWN0PiBtX29iamVjdDsKICAgICBRT2Jq
ZWN0KiBtX2hhc2hrZXk7Ci0gICAgbXV0YWJsZSBRSGFzaDxRQnl0ZUFycmF5LCBRdFdlYWtPYmpl
Y3RSZWZlcmVuY2U+IG1fbWV0aG9kczsKKyAgICBtdXRhYmxlIFFIYXNoPFFCeXRlQXJyYXksIFF0
UnVudGltZU1ldGhvZCo+IG1fbWV0aG9kczsKICAgICBtdXRhYmxlIFFIYXNoPFFTdHJpbmcsIFF0
RmllbGQqPiBtX2ZpZWxkczsKICAgICBWYWx1ZU93bmVyc2hpcCBtX293bmVyc2hpcDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKaW5kZXggOTUxYTc1OThlYjZhMDFk
MmYwMTY0MTZiYTY5ZmEwNTVlZGFhMzQ0OC4uMzQ1YzI2MzEzNzBjZWY3MDkyY2ExNWQ0NmE5Njc1
Y2FmZWU0YzE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcApAQCAt
OTEzLDYxICs5MTMsNiBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbgogICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCB1c3RyaW5nKTsKIH0KIAotLy8gPT09PT09PT09PT09PT09Ci0KLS8vIFF0LWxp
a2UgbWFjcm9zCi0jZGVmaW5lIFFXX0QoQ2xhc3MpIENsYXNzIyNEYXRhKiBkID0gZF9mdW5jKCkK
LSNkZWZpbmUgUVdfRFMoQ2xhc3MsSW5zdGFuY2UpIENsYXNzIyNEYXRhKiBkID0gSW5zdGFuY2Ut
PmRfZnVuYygpCi0KLWNvbnN0IENsYXNzSW5mbyBRdFJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsg
IlF0UnVudGltZU1ldGhvZCIsICZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0aG9kKSB9OwotCi1RdFJ1bnRpbWVNZXRob2Q6OlF0
UnVudGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2REYXRhKiBkZCwgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6IElu
dGVybmFsRnVuY3Rpb24oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBkX3B0cihkZCkKLXsKLX0KLQotdm9pZCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllciwgUGFzc1JlZlB0
cjxRdEluc3RhbmNlPiBpbnN0YW5jZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIpOwotICAgIFFXX0QoUXRSdW50aW1lTWV0aG9kKTsK
LSAgICBkLT5tX2luc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgZC0+bV9maW5hbGl6ZXIgPSBQYXNz
V2VhazxRdFJ1bnRpbWVNZXRob2Q+KHRoaXMsIGQpOwotfQotCi1RdFJ1bnRpbWVNZXRob2Q6On5R
dFJ1bnRpbWVNZXRob2QoKQotewotICAgIGRlbGV0ZSBkX3B0cjsKLX0KLQotdm9pZCBRdFJ1bnRp
bWVNZXRob2Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PFF0UnVu
dGltZU1ldGhvZCo+KGNlbGwpLT5RdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KLVF0UnVudGltZU1ldGhvZERhdGE6On5RdFJ1bnRp
bWVNZXRob2REYXRhKCkKLXsKLX0KLQotdm9pZCBRdFJ1bnRpbWVNZXRob2REYXRhOjpmaW5hbGl6
ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqKQotewotICAgIG1faW5zdGFuY2UtPnJlbW92ZVVudXNl
ZE1ldGhvZHMoKTsKLX0KLQotUXRSdW50aW1lTWV0YU1ldGhvZERhdGE6On5RdFJ1bnRpbWVNZXRh
TWV0aG9kRGF0YSgpCi17Ci0KLX0KLQotUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGE6On5R
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSgpCi17Ci0KLX0KLQotLy8gPT09PT09PT09PT09
PT09Ci0KIC8vIFR5cGUgY29udmVyc2lvbiBtZXRhZGF0YSAoZnJvbSBRdFNjcmlwdCBvcmlnaW5h
bGx5KQogY2xhc3MgUXRNZXRob2RNYXRjaFR5cGUKIHsKQEAgLTEzMzUsMzY0ICsxMjgwLDI0OCBA
QCBzdGF0aWMgaW50IGZpbmRTaWduYWxJbmRleChjb25zdCBRTWV0YU9iamVjdCogbWV0YSwgaW50
IGluaXRpYWxJbmRleCwgUUJ5dGVBcnJheQogICAgIHJldHVybiBpbmRleDsKIH0KIAotY29uc3Qg
Q2xhc3NJbmZvIFF0UnVudGltZU1ldGFNZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhv
ZCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0
YU1ldGhvZCkgfTsKLQotUXRSdW50aW1lTWV0YU1ldGhvZDo6UXRSdW50aW1lTWV0YU1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBpZGVu
dGlmaWVyKQotICAgIDogUXRSdW50aW1lTWV0aG9kIChuZXcgUXRSdW50aW1lTWV0YU1ldGhvZERh
dGEoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudGlmaWVyKQorc3RhdGljIEpTQ2xhc3NSZWYgcHJv
dG90eXBlRm9yU2lnbmFsc0FuZFNsb3RzKCkKIHsKKyAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRp
b24gY2xhc3NEZWYgPSB7CisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIFF0UnVudGltZU1ldGhvZDo6Y2FsbCwgMCwgMCwgMAorICAgIH07Cisg
ICAgc3RhdGljIEpTQ2xhc3NSZWYgY2xzID0gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWYpOworICAg
IHJldHVybiBjbHM7CiB9CiAKLXZvaWQgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzUmVmUHRy
PFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25h
dHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUpCitRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhv
ZChKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFFPYmplY3QqIG9iamVj
dCwgY29uc3QgUUJ5dGVBcnJheSYgaWRlbnRpZmllciwgaW50IGluZGV4LCBpbnQgZmxhZ3MsIFF0
SW5zdGFuY2UqIGluc3RhbmNlKQorICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICwgbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9mbGFncyhm
bGFncykKKyAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYywgaWRlbnRpZmllciwgaW5zdGFuY2UpOwotICAgIFFXX0QoUXRSdW50aW1lTWV0
YU1ldGhvZCk7Ci0gICAgZC0+bV9zaWduYXR1cmUgPSBzaWduYXR1cmU7Ci0gICAgZC0+bV9pbmRl
eCA9IGluZGV4OwotICAgIGQtPm1fYWxsb3dQcml2YXRlID0gYWxsb3dQcml2YXRlOwogfQogCi12
b2lkIFF0UnVudGltZU1ldGFNZXRob2Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK1F0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCgpCiB7
Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iamVjdCA9IGpzQ2FzdDxRdFJ1bnRpbWVN
ZXRhTWV0aG9kKj4oY2VsbCk7Ci0gICAgUXRSdW50aW1lTWV0aG9kOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwotICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkID0gdGhp
c09iamVjdC0+ZF9mdW5jKCk7Ci0gICAgaWYgKGQtPm1fY29ubmVjdCkKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJmQtPm1fY29ubmVjdCk7Ci0gICAgaWYgKGQtPm1fZGlzY29ubmVjdCkKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmQtPm1fZGlzY29ubmVjdCk7CisgICAgaWYgKG1fanNPYmplY3Qp
CisgICAgICAgIEpTT2JqZWN0U2V0UHJpdmF0ZSh0b1JlZihtX2pzT2JqZWN0LmdldCgpKSwgMCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNhbGwoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiAvKnRoaXNPYmplY3QqLywg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSogZCA9IHN0
YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMo
KTsKLQotICAgIC8vIFdlJ3JlIGxpbWl0ZWQgdG8gMTAgYXJncwotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAxMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQotICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMu
LgotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotCi0gICAgUU9iamVjdCAqb2JqID0gZC0+
bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7Ci0gICAgaWYgKG9iaikgewotICAgICAgICBjb25zdCBp
bnQgYXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgp
KTsKLSAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDEwPiBhcmdzKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAg
ICAgIGFyZ3NbaV0gPSB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudChpKSk7Ci0KLSAgICAgICAg
UVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gdmFyZ3M7Ci0gICAgICAgIHZvaWQgKnFhcmdz
WzExXTsKLQotICAgICAgICBpbnQgbWV0aG9kSW5kZXg7Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhj
ZXB0aW9uID0gMDsKLSAgICAgICAgaWYgKChtZXRob2RJbmRleCA9IGZpbmRNZXRob2RJbmRleCh0
b1JlZihleGVjKSwgb2JqLT5tZXRhT2JqZWN0KCksIGQtPm1fc2lnbmF0dXJlLCBhcmd1bWVudENv
dW50LCBhcmdzLmRhdGEoKSwgZC0+bV9hbGxvd1ByaXZhdGUsIHZhcmdzLCAodm9pZCAqKilxYXJn
cywgJmV4Y2VwdGlvbikpICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoUU1ldGFPYmplY3Q6Om1l
dGFjYWxsKG9iaiwgUU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QsIG1ldGhvZEluZGV4LCBx
YXJncykgPj0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotCi0gICAgICAgICAgICBpZiAodmFyZ3Muc2l6ZSgpID4gMCAmJiB2YXJnc1sw
XS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb252
ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4ZWMsIGQtPm1faW5zdGFuY2UtPnJvb3RPYmplY3QoKSwgdmFy
Z3NbMF0pKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBRT2JqZWN0IikpOworICAgIFF0
UnVudGltZU1ldGhvZCogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1lTWV0aG9kKj4oSlNP
YmplY3RHZXRQcml2YXRlKGZ1bmN0aW9uKSk7CisgICAgaWYgKCFkKSB7CisgICAgICAgIHNldEV4
Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmdMaXRlcmFsKCJjYW5ub3QgY2FsbCBm
dW5jdGlvbiBvZiBkZWxldGVkIHJ1bnRpbWUgbWV0aG9kIikpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQorICAgIFFPYmplY3QqIG9iaiA9IGQt
Pm1fb2JqZWN0OwogCi0gICAgLy8gdm9pZCBmdW5jdGlvbnMgcmV0dXJuIHVuZGVmaW5lZAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUNhbGxUeXBlIFF0
UnVudGltZU1ldGFNZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsOwotICAgIHJldHVybiBD
YWxsVHlwZUhvc3Q7Ci19Ci0KLWJvb2wgUXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCog
dGhpc09iamVjdCA9IGpzQ2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oY2VsbCk7Ci0gICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpIHsKLSAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Y29ubmVjdEdldHRlcik7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlOYW1lID09IElkZW50
aWZpZXIoZXhlYywgImRpc2Nvbm5lY3QiKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
T2JqZWN0LCB0aGlzT2JqZWN0LT5kaXNjb25uZWN0R2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5sZW5ndGhHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW9iaikgewor
ICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nTGl0ZXJhbCgi
Y2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBRT2JqZWN0IikpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFF0
UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Ci19CisgICAgLy8gQWxsb3cgZm9yIG1heGltdW0gb2YgMTAgYXJndW1l
bnRzIGFuZCBzaXplIHN0YWNrIGFycmF5cyBhY2NvcmRpbmdseS4KKyAgICBpZiAoYXJndW1lbnRD
b3VudCA+IDEwKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiAKLWJvb2wgUXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFF0UnVudGltZU1ldGFN
ZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KG9iamVjdCk7
Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpIHsK
LSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIGNvbm5lY3RHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
c2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBRVmFyTGVuZ3Ro
QXJyYXk8UVZhcmlhbnQsIDEwPiB2YXJnczsKKyAgICB2b2lkKiBxYXJnc1sxMV07CiAKLSAgICBp
ZiAocHJvcGVydHlOYW1lID09IElkZW50aWZpZXIoZXhlYywgImRpc2Nvbm5lY3QiKSkgewotICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVj
dCwgZGlzY29ubmVjdEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhH
ZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpbnQgbWV0aG9kSW5kZXggPSBmaW5kTWV0
aG9kSW5kZXgoY29udGV4dCwgb2JqLT5tZXRhT2JqZWN0KCksIGQtPm1faWRlbnRpZmllciwgIGFy
Z3VtZW50Q291bnQsIGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGQtPm1fZmxhZ3MgJiBBbGxvd1ByaXZhdGUpLCB2YXJncywgKHZvaWQgKiopcWFyZ3Ms
IGV4Y2VwdGlvbik7CiAKLSAgICByZXR1cm4gUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
LX0KKyAgICBpZiAoUU1ldGFPYmplY3Q6Om1ldGFjYWxsKG9iaiwgUU1ldGFPYmplY3Q6Okludm9r
ZU1ldGFNZXRob2QsIG1ldGhvZEluZGV4LCBxYXJncykgPj0gMCkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi12b2lkIFF0UnVudGltZU1ldGFNZXRob2Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17
Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgewotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpOwotICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsICJkaXNjb25uZWN0IikpOwotICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICB9
CisgICAgaWYgKHZhcmdzLnNpemUoKSA+IDAgJiYgdmFyZ3NbMF0uaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gdG9SZWYodG9KUyhjb250ZXh0KSwgY29udmVydFFWYXJpYW50VG9WYWx1ZSh0b0pT
KGNvbnRleHQpLCBkLT5tX2luc3RhbmNlLT5yb290T2JqZWN0KCksIHZhcmdzWzBdKSk7CiAKLSAg
ICBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiB9CiAKLUpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0pTVmFsdWVSZWYgUXRSdW50aW1lTWV0aG9k
Ojpjb25uZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBRdFNjcmlw
dCBhbHdheXMgcmV0dXJucyAwCi0gICAgcmV0dXJuIGpzTnVtYmVyKDApOworICAgIHJldHVybiBj
b25uZWN0T3JEaXNjb25uZWN0KGNvbnRleHQsIGZ1bmN0aW9uLCB0aGlzT2JqZWN0LCBhcmd1bWVu
dENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUgUXRSdW50
aW1lTWV0YU1ldGhvZDo6Y29ubmVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIFByb3BlcnR5TmFtZSBpZGVudCkKK0pTVmFsdWVSZWYgUXRSdW50aW1lTWV0aG9kOjpk
aXNjb25uZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBRdFJ1bnRpbWVN
ZXRhTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgUVdfRFMoUXRSdW50aW1lTWV0YU1ldGhvZCwgdGhpc09i
aik7Ci0KLSAgICBpZiAoIWQtPm1fY29ubmVjdCkKLSAgICAgICAgZC0+bV9jb25uZWN0LnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmosIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNy
ZWF0ZShleGVjLCBpZGVudC5wdWJsaWNOYW1lKCksIHRydWUsIGQtPm1faW5zdGFuY2UsIGQtPm1f
aW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAgcmV0dXJuIGQtPm1fY29ubmVjdC5nZXQoKTsK
KyAgICByZXR1cm4gY29ubmVjdE9yRGlzY29ubmVjdChjb250ZXh0LCBmdW5jdGlvbiwgdGhpc09i
amVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIGZhbHNlKTsKIH0KIAot
SlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpkaXNjb25uZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lIGlkZW50KQorSlNPYmplY3RSZWYg
UXRSdW50aW1lTWV0aG9kOjpqc09iamVjdFJlZihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmogPSBz
dGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAg
ICBRV19EUyhRdFJ1bnRpbWVNZXRhTWV0aG9kLCB0aGlzT2JqKTsKLQotICAgIGlmICghZC0+bV9k
aXNjb25uZWN0KQotICAgICAgICBkLT5tX2Rpc2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpc09iaiwgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50
LnB1YmxpY05hbWUoKSwgZmFsc2UsIGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2ln
bmF0dXJlKSk7Ci0gICAgcmV0dXJuIGQtPm1fZGlzY29ubmVjdC5nZXQoKTsKLX0KLQotLy8gPT09
PT09PT09PT09PT09CisgICAgaWYgKG1fanNPYmplY3QpCisgICAgICAgIHJldHVybiB0b1JlZiht
X2pzT2JqZWN0LmdldCgpKTsKIAotUU11bHRpTWFwPFFPYmplY3QqLCBRdENvbm5lY3Rpb25PYmpl
Y3QqPiBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjb25uZWN0aW9uczsKKyAgICBzdGF0aWMg
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZGb3JDb25uZWN0ID0geworICAgICAgICAw
LCAwLCAiY29ubmVjdCIsIDAsIDAsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGNv
bm5lY3QsIDAsIDAsIDAKKyAgICB9OwogCi1jb25zdCBDbGFzc0luZm8gUXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZDo6c19pbmZvID0geyAiUXRSdW50aW1lTWV0aG9kIiwgJkJhc2U6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKSB9Owor
ICAgIHN0YXRpYyBjb25zdCBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZkZvckRpc2Nvbm5lY3Qg
PSB7CisgICAgICAgIDAsIDAsICJkaXNjb25uZWN0IiwgMCwgMCwgMCwKKyAgICAgICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgZGlzY29ubmVjdCwgMCwgMCwgMAorICAgIH07CiAKLVF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2Q6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6
IFF0UnVudGltZU1ldGhvZCAobmV3IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKCksIGV4
ZWMsIHN0cnVjdHVyZSwgaWRlbnRpZmllcikKLXsKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFz
c1JlZkNvbm5lY3QgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZkZvckNvbm5lY3QpOworICAgIHN0
YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmRGlzY29ubmVjdCA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNz
RGVmRm9yRGlzY29ubmVjdCk7CisgICAgYm9vbCBpc1NpZ25hbCA9IG1fZmxhZ3MgJiBNZXRob2RJ
c1NpZ25hbDsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwg
cHJvdG90eXBlRm9yU2lnbmFsc0FuZFNsb3RzKCksIHRoaXMpOworICAgIEpTT2JqZWN0UmVmIGNv
bm5lY3RGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZkNvbm5lY3QsIHRo
aXMpOworICAgIEpTT2JqZWN0UmVmIGRpc2Nvbm5lY3RGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZShj
b250ZXh0LCBjbGFzc1JlZkRpc2Nvbm5lY3QsIHRoaXMpOworICAgIEpTUHJvcGVydHlBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMgPSBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtIHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlOworCisgICAgc3RhdGljIEpTU3RyaW5nUmVmIGNvbm5lY3RT
dHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29ubmVjdCIpOworICAgIHN0YXRp
YyBKU1N0cmluZ1JlZiBkaXNjb25uZWN0U3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImRpc2Nvbm5lY3QiKTsKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgIHN0YXRpYyBKU1N0cmlu
Z1JlZiBuYW1lU3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKTsKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWN0dWFsTmFtZVN0cihBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcobV9pZGVudGlmaWVyLmNvbnN0RGF0YSgpKSk7CisKKyAgICBK
U09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGNvbm5lY3RGdW5jdGlvbiwgbGVuZ3RoU3RyLCBK
U1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBpc1NpZ25hbCA/IDEgOiAwKSwgYXR0cmlidXRlcywg
ZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGNvbm5lY3RGdW5j
dGlvbiwgbmFtZVN0ciwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY29ubmVjdFN0ciksIGF0
dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBk
aXNjb25uZWN0RnVuY3Rpb24sIGxlbmd0aFN0ciwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
aXNTaWduYWwgPyAxIDogMCksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eShjb250ZXh0LCBkaXNjb25uZWN0RnVuY3Rpb24sIG5hbWVTdHIsIEpTVmFsdWVN
YWtlU3RyaW5nKGNvbnRleHQsIGRpc2Nvbm5lY3RTdHIpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24p
OworCisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIGNvbm5lY3RTdHIs
IGNvbm5lY3RGdW5jdGlvbiwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgZGlzY29ubmVjdFN0ciwgZGlzY29ubmVjdEZ1bmN0
aW9uLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBsZW5ndGhTdHIsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDApLCBh
dHRyaWJ1dGVzLCBleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwg
b2JqZWN0LCBuYW1lU3RyLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBhY3R1YWxOYW1lU3Ry
LmdldCgpKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKKworICAgIG1fanNPYmplY3QgPSBQYXNz
V2VhazxKU09iamVjdD4odG9KUyhvYmplY3QpKTsKKyAgICByZXR1cm4gb2JqZWN0OwogfQogCi12
b2lkIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllciwgYm9vbCBpc0Nvbm5lY3QsIFBhc3NSZWZQ
dHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2ln
bmF0dXJlKQorSlNWYWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNvbm5lY3RPckRpc2Nvbm5lY3Qo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBib29sIGNvbm5lY3QpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwgaW5zdGFuY2UpOwotICAgIFFXX0QoUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZCk7Ci0KLSAgICBkLT5tX3NpZ25hdHVyZSA9IHNpZ25hdHVy
ZTsKLSAgICBkLT5tX2luZGV4ID0gaW5kZXg7Ci0gICAgZC0+bV9pc0Nvbm5lY3QgPSBpc0Nvbm5l
Y3Q7Ci19CisgICAgUXRSdW50aW1lTWV0aG9kKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0
aG9kKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBpZiAoIWQpCisgICAg
ICAgIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2QqPihKU09iamVjdEdldFByaXZhdGUo
ZnVuY3Rpb24pKTsKIAotRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6
Y2FsbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERh
dGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNh
bGxlZSgpKS0+ZF9mdW5jKCk7CisgICAgUVN0cmluZyBmdW5jdGlvbk5hbWUgPSBjb25uZWN0ID8g
UVN0cmluZ0xpdGVyYWwoImNvbm5lY3QiKSA6IFFTdHJpbmdMaXRlcmFsKCJkaXNjb25uZWN0Iik7
CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBpZiAoIWFyZ3VtZW50Q291bnQp
IHsKKyAgICAgICAgUVN0cmluZyBlcnJvclN0ciA9IFFTdHJpbmdMaXRlcmFsKCJRdE1ldGFNZXRo
b2QuJTE6IG5vIGFyZ3VtZW50cyBnaXZlbiIpLmFyZyhjb25uZWN0ID8gIFFTdHJpbmdMaXRlcmFs
KCJjb25uZWN0IikgOiBRU3RyaW5nTGl0ZXJhbCgiZGlzY29ubmVjdCIpKTsKKyAgICAgICAgc2V0
RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgZXJyb3JTdHIpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQogCi0gICAgUU9iamVjdCogc2Vu
ZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CisgICAgaWYgKCghKGQtPm1fZmxhZ3Mg
JiBRdFJ1bnRpbWVNZXRob2Q6Ok1ldGhvZElzU2lnbmFsKSkpIHsKKyAgICAgICAgc2V0RXhjZXB0
aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZ0xpdGVyYWwoIlF0TWV0YU1ldGhvZC4lMzog
JTE6OiUyKCkgaXMgbm90IGEgc2lnbmFsIikuYXJnKFFTdHJpbmc6OmZyb21VdGY4KGQtPm1fb2Jq
ZWN0LmRhdGEoKS0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpLmFyZyhRU3RyaW5nOjpmcm9t
QXNjaWkoZC0+bV9pZGVudGlmaWVyKSkuYXJnKGZ1bmN0aW9uTmFtZSkpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQogCi0gICAgaWYgKHNlbmRl
cikgeworICAgIFFPYmplY3QqIHNlbmRlciA9IGQtPm1fb2JqZWN0LmRhdGEoKTsKIAotICAgICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bWV0
aG9kVGFibGUoKS0+dG9UaGlzT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhl
Yyk7Ci0gICAgICAgIEpTT2JqZWN0KiBmdW5jT2JqZWN0ID0gMDsKKyAgICBpZiAoIXNlbmRlcikg
eworICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nTGl0ZXJh
bCgiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBRT2JqZWN0IikpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQogCi0gICAgICAgIC8v
IFF0U2NyaXB0IGNoZWNrcyBzaWduYWxuZXNzIGZpcnN0LCBhcmd1bWVudHMgc2Vjb25kCi0gICAg
ICAgIGludCBzaWduYWxJbmRleCA9IC0xOworICAgIGludCBzaWduYWxJbmRleCA9IGZpbmRTaWdu
YWxJbmRleChzZW5kZXItPm1ldGFPYmplY3QoKSwgZC0+bV9pbmRleCwgZC0+bV9pZGVudGlmaWVy
KTsKIAotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGluaXRpYWwgaW5kZXggaXMgYSBzaWduYWwK
LSAgICAgICAgUU1ldGFNZXRob2QgbSA9IHNlbmRlci0+bWV0YU9iamVjdCgpLT5tZXRob2QoZC0+
bV9pbmRleCk7Ci0gICAgICAgIGlmIChtLm1ldGhvZFR5cGUoKSA9PSBRTWV0YU1ldGhvZDo6U2ln
bmFsKQotICAgICAgICAgICAgc2lnbmFsSW5kZXggPSBmaW5kU2lnbmFsSW5kZXgoc2VuZGVyLT5t
ZXRhT2JqZWN0KCksIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKTsKKyAgICBKU09iamVjdFJl
ZiB0YXJnZXRPYmplY3QgPSAwOworICAgIEpTT2JqZWN0UmVmIHRhcmdldEZ1bmN0aW9uID0gMDsK
IAotICAgICAgICBpZiAoc2lnbmFsSW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBl
eGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuY09iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEoZnVuY09iamVjdCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
UXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNjb25u
ZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewotICAgICAg
ICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxs
Ci0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICphc09iaiA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFzT2JqLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0
YShhc09iaiwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRnVuY3Rpb24gdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY09i
amVjdCA9IGFzT2JqOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29udmVydCBpdCB0byBhIHN0cmluZwotICAgICAgICAgICAgICAgICAg
ICAgICAgVVN0cmluZyBmdW5jTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgZnVuY0lk
ZW50KGV4ZWMsIGZ1bmNOYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyMjIERy
b3BBbGxMb2NrcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyByZXNvbHZlZCBh
dCB0aGlzIHBvaW50IGluIFF0U2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbCA9IHRoaXNPYmplY3QtPmdldChleGVjLCBmdW5jSWRlbnQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgSlNPYmplY3QqIGFzRnVuY09iaiA9IHZhbC50b09iamVjdChleGVjKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFzRnVuY09iai0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoYXNGdW5jT2JqLCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY09iamVjdCA9IGFzRnVuY09iajsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQtPm1f
aXNDb25uZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6
IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDog
dGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1l
dGhvZC5jb25uZWN0OiB0aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3QiKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDog
dGhpc09iamVjdCBpcyBub3QgYW4gb2JqZWN0IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsICJRdE1ldGFNZXRob2QuY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIikpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IG5vIGFyZ3Vt
ZW50cyBnaXZlbiIpKTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKSB7CisgICAgICAgIGlm
ICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSkpIHsKKyAgICAgICAgICAg
IHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmdMaXRlcmFsKCJRdE1ldGFN
ZXRob2QuJTE6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpLmFyZyhmdW5jdGlvbk5hbWUpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAg
ICAgfQorICAgICAgICB0YXJnZXRGdW5jdGlvbiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisKKyAgICAgICAgLy8gb2JqZWN0LnNpZ25hbC5jb25u
ZWN0KHNvbWVGdW5jdGlvbik7CisgICAgICAgIGlmIChKU09iamVjdElzRnVuY3Rpb24oY29udGV4
dCwgdGFyZ2V0RnVuY3Rpb24pKSB7CisgICAgICAgICAgICBpZiAoSlNWYWx1ZUlzT2JqZWN0T2ZD
bGFzcyhjb250ZXh0LCB0YXJnZXRGdW5jdGlvbiwgcHJvdG90eXBlRm9yU2lnbmFsc0FuZFNsb3Rz
KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gb2JqZWN0LnNpZ25hbC5jb25uZWN0KG90aGVyT2Jq
ZWN0LnNsb3QpOworICAgICAgICAgICAgICAgIGlmIChRdFJ1bnRpbWVNZXRob2QqIHRhcmdldE1l
dGhvZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGhvZCo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
YXJnZXRGdW5jdGlvbikpKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRPYmplY3QgPSB0b1Jl
ZihRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKHRhcmdldE1ldGhvZC0+bV9vYmplY3QuZGF0YSgp
LCBkLT5tX2luc3RhbmNlLT5yb290T2JqZWN0KCksIFF0SW5zdGFuY2U6OlF0T3duZXJzaGlwKS0+
Y3JlYXRlUnVudGltZU9iamVjdCh0b0pTKGNvbnRleHQpKSk7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkgewotICAgICAgICAgICAgICAgIC8vIHRvIGNv
bm5lY3QsIHdlIG5lZWQ6Ci0gICAgICAgICAgICAgICAgLy8gIHRhcmdldCBvYmplY3QgW2Zyb20g
Y3Rvcl0KLSAgICAgICAgICAgICAgICAvLyAgdGFyZ2V0IHNpZ25hbCBpbmRleCBldGMuIFtmcm9t
IGN0b3JdCi0gICAgICAgICAgICAgICAgLy8gIHJlY2VpdmVyIGZ1bmN0aW9uIFtmcm9tIGFyZ3Vt
ZW50c10KLSAgICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIgdGhpcyBvYmplY3QgW2Zyb20gYXJn
dW1lbnRzXQotCi0gICAgICAgICAgICAgICAgUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uID0gUXRD
b25uZWN0aW9uT2JqZWN0OjpjcmVhdGVXaXRoSW50ZXJuYWxKU0MoZXhlYywgZC0+bV9pbnN0YW5j
ZSwgc2lnbmFsSW5kZXgsIHRoaXNPYmplY3QsIGZ1bmNPYmplY3QpOwotICAgICAgICAgICAgICAg
IGJvb2wgb2sgPSBRTWV0YU9iamVjdDo6Y29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25u
LCBjb25uLT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25uOwotICAgICAgICAgICAg
ICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0aG9k
LmNvbm5lY3Q6IGZhaWxlZCB0byBjb25uZWN0IHRvICUxOjolMigpIikpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgpLT5j
bGFzc05hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3Ry
aW5nKGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFN0b3JlIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgY29ubmVj
dGlvbnMuaW5zZXJ0KHNlbmRlciwgY29ubik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBOb3cgdG8gZmluZCBvdXIgcHJldmlvdXMg
Y29ubmVjdGlvbiBvYmplY3QuIEhtbS4KLSAgICAgICAgICAgICAgICBRTGlzdDxRdENvbm5lY3Rp
b25PYmplY3QqPiBjb25ucyA9IGNvbm5lY3Rpb25zLnZhbHVlcyhzZW5kZXIpOwotICAgICAgICAg
ICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBKU0NvbnRleHRSZWYg
Y29udGV4dCA9IDo6dG9SZWYoZXhlYyk7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3RSZWYgcmVj
ZWl2ZXIgPSA6OnRvUmVmKHRoaXNPYmplY3QpOwotICAgICAgICAgICAgICAgIEpTT2JqZWN0UmVm
IHJlY2VpdmVyRnVuY3Rpb24gPSA6OnRvUmVmKGZ1bmNPYmplY3QpOwotCi0gICAgICAgICAgICAg
ICAgZm9yZWFjaChRdENvbm5lY3Rpb25PYmplY3QqIGNvbm4sIGNvbm5zKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElzIHRoaXMgdGhlIHJpZ2h0IGNvbm5lY3Rpb24/Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChjb25uLT5tYXRjaChjb250ZXh0LCBzZW5kZXIsIHNpZ25hbEluZGV4LCByZWNl
aXZlciwgcmVjZWl2ZXJGdW5jdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFll
cCwgZGlzY29ubmVjdCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgUU1ldGFPYmplY3Q6OmRp
c2Nvbm5lY3Qoc2VuZGVyLCBzaWduYWxJbmRleCwgY29ubiwgY29ubi0+bWV0YU9iamVjdCgpLT5t
ZXRob2RPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29ubjsgLy8g
dGhpcyB3aWxsIGFsc28gcmVtb3ZlIGl0IGZyb20gdGhlIG1hcAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KCFyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtc2cgPSBRU3RyaW5nKFFMYXRp
bjFTdHJpbmcoIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBmYWlsZWQgdG8gZGlzY29ubmVjdCBm
cm9tICUxOjolMigpIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4x
U3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgbXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICB0YXJnZXRGdW5jdGlvbiA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gb2JqZWN0
LnNpZ25hbC5jb25uZWN0KG9iamVjdCwgc29tZUZ1bmN0aW9uKTsKKyAgICAgICAgdGFyZ2V0T2Jq
ZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0pKSB7Cisg
ICAgICAgICAgICBKU09iamVjdFJlZiBvYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJn
dW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKEpTT2JqZWN0SXNGdW5jdGlv
bihjb250ZXh0LCBvYmopKQorICAgICAgICAgICAgICAgIHRhcmdldEZ1bmN0aW9uID0gb2JqOwor
ICAgICAgICB9CisgICAgICAgIGlmICghdGFyZ2V0RnVuY3Rpb24pIHsKKyAgICAgICAgICAgIC8v
IE1heWJlIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBzdHJpbmcKKyAgICAgICAgICAgIEpTVmFs
dWVSZWYgZXggPSAwOworICAgICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGZ1bmN0
aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0s
ICZleCkpOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSAmJiAhZXgpIHsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVmIGZ1bmN0aW9uUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIHRhcmdldE9iamVjdCwgZnVuY3Rpb25OYW1lLmdldCgpLCAmZXgpOworICAgICAg
ICAgICAgICAgIGlmICghZXggJiYgZnVuY3Rpb25Qcm9wZXJ0eSAmJiBKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgZnVuY3Rpb25Qcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0
RnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZnVuY3Rpb25Qcm9wZXJ0eSwgMCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghSlNPYmplY3RJc0Z1bmN0aW9uKGNvbnRleHQsIHRh
cmdldEZ1bmN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZ1bmN0aW9uID0g
MDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0
aG9kLiUxOiAlMjo6JTMoKSBpcyBub3QgYSBzaWduYWwiKSkKLSAgICAgICAgICAgICAgICAgICAg
LmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faXNDb25uZWN0ID8gImNvbm5lY3QiOiAiZGlzY29ubmVj
dCIpKQotICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5tZXRh
T2JqZWN0KCktPmNsYXNzTmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4x
U3RyaW5nKGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtc2cudG9MYXRpbjEoKS5jb25zdERhdGEoKSkp
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBR
T2JqZWN0IikpOwogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci19Ci0KLUNhbGxUeXBlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjYWxsOwotICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Ci19Ci0KLWJvb2wgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCogdGhpc09iamVjdCA9IGpz
Q2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKj4oY2VsbCk7Ci0gICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIC8vIG9iamVjdC5zaWduYWwuY29ubmVjdChzb21lT2JqZWN0KTsKKyAg
ICBpZiAoIXRhcmdldEZ1bmN0aW9uKSB7CisgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IFFTdHJp
bmdMaXRlcmFsKCJRdE1ldGFNZXRob2QuJTE6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpOwor
ICAgICAgICBpZiAoY29ubmVjdCkKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLmFyZyhR
U3RyaW5nTGl0ZXJhbCgiY29ubmVjdCIpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVz
c2FnZSA9IG1lc3NhZ2UuYXJnKFFTdHJpbmdMaXRlcmFsKCJkaXNjb25uZWN0IikpOworICAgICAg
ICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBtZXNzYWdlKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAgIH0KIAotICAgIHJldHVybiBR
dFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwotfQorICAgIGlmIChjb25uZWN0KSB7CisgICAgICAgIC8vIHRvIGNv
bm5lY3QsIHdlIG5lZWQ6CisgICAgICAgIC8vICB0YXJnZXQgb2JqZWN0IFtmcm9tIGN0b3JdCisg
ICAgICAgIC8vICB0YXJnZXQgc2lnbmFsIGluZGV4IGV0Yy4gW2Zyb20gY3Rvcl0KKyAgICAgICAg
Ly8gIHJlY2VpdmVyIGZ1bmN0aW9uIFtmcm9tIGFyZ3VtZW50c10KKyAgICAgICAgLy8gIHJlY2Vp
dmVyIHRoaXMgb2JqZWN0IFtmcm9tIGFyZ3VtZW50c10KKworICAgICAgICBRdENvbm5lY3Rpb25P
YmplY3QqIGNvbm4gPSBuZXcgUXRDb25uZWN0aW9uT2JqZWN0KGNvbnRleHQsIFF0SW5zdGFuY2U6
OmdldFF0SW5zdGFuY2Uoc2VuZGVyLCBkLT5tX2luc3RhbmNlLT5yb290T2JqZWN0KCksIFF0SW5z
dGFuY2U6OlF0T3duZXJzaGlwKSwgc2lnbmFsSW5kZXgsIHRhcmdldE9iamVjdCwgdGFyZ2V0RnVu
Y3Rpb24pOworICAgICAgICBib29sIG9rID0gUU1ldGFPYmplY3Q6OmNvbm5lY3Qoc2VuZGVyLCBz
aWduYWxJbmRleCwgY29ubiwgY29ubi0+bWV0YU9iamVjdCgpLT5tZXRob2RPZmZzZXQoKSk7Cisg
ICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIGRlbGV0ZSBjb25uOworICAgICAgICAgICAg
UVN0cmluZyBtc2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC5jb25uZWN0
OiBmYWlsZWQgdG8gY29ubmVjdCB0byAlMTo6JTIoKSIpKQorICAgICAgICAgICAgICAgICAgICAu
YXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faWRlbnRpZmllcikpOwor
ICAgICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbXNnKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQog
Ci1ib29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBRdFJ1bnRpbWVD
b25uZWN0aW9uTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QqPihvYmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgLy8gU3RvcmUgY29ubmVjdGlvbgorICAgICAgICBRdENvbm5lY3Rpb25PYmplY3Q6OmNvbm5l
Y3Rpb25zLmluc2VydChzZW5kZXIsIGNvbm4pOworCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICByZXR1cm4gUXRSdW50aW1lTWV0aG9k
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KKyAgICAvLyBOb3cgdG8gZmluZCBvdXIgcHJldmlvdXMgY29ubmVj
dGlvbiBvYmplY3QuCisgICAgUUxpc3Q8UXRDb25uZWN0aW9uT2JqZWN0Kj4gY29ubnMgPSBRdENv
bm5lY3Rpb25PYmplY3Q6OmNvbm5lY3Rpb25zLnZhbHVlcyhzZW5kZXIpOwogCi12b2lkIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7CisgICAgZm9yZWFjaCAoUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uLCBjb25ucykg
eworICAgICAgICAvLyBJcyB0aGlzIHRoZSByaWdodCBjb25uZWN0aW9uPworICAgICAgICBpZiAo
IWNvbm4tPm1hdGNoKGNvbnRleHQsIHNlbmRlciwgc2lnbmFsSW5kZXgsIHRhcmdldE9iamVjdCwg
dGFyZ2V0RnVuY3Rpb24pKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBRdFJ1bnRpbWVN
ZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKLX0KKyAgICAgICAgLy8gWWVwLCBkaXNjb25uZWN0IGl0CisgICAgICAgIFFNZXRhT2Jq
ZWN0OjpkaXNjb25uZWN0KHNlbmRlciwgc2lnbmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmpl
Y3QoKS0+bWV0aG9kT2Zmc2V0KCkpOworICAgICAgICBkZWxldGUgY29ubjsgLy8gdGhpcyB3aWxs
IGFsc28gcmVtb3ZlIGl0IGZyb20gdGhlIG1hcAorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgfQogCi1KU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17
Ci0gICAgLy8gd2UgaGF2ZSBvbmUgZm9ybWFsIGFyZ3VtZW50LCBhbmQgb25lIG9wdGlvbmFsCi0g
ICAgcmV0dXJuIGpzTnVtYmVyKDEpOworICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZ0xpdGVyYWwo
IlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBmYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tICUxOjol
MigpIikKKyAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3Qo
KS0+Y2xhc3NOYW1lKCkpKQorICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faWRl
bnRpZmllcikpOworCisgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbXNnKTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIC8vID09PT09
PT09PT09PT09PQogCitRTXVsdGlNYXA8UU9iamVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IFF0
Q29ubmVjdGlvbk9iamVjdDo6Y29ubmVjdGlvbnM7CisKIFF0Q29ubmVjdGlvbk9iamVjdDo6UXRD
b25uZWN0aW9uT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBQYXNzUmVmUHRyPFF0SW5zdGFu
Y2U+IHNlbmRlckluc3RhbmNlLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0UmVmIHJlY2VpdmVy
LCBKU09iamVjdFJlZiByZWNlaXZlckZ1bmN0aW9uKQogICAgIDogUU9iamVjdChzZW5kZXJJbnN0
YW5jZS0+Z2V0T2JqZWN0KCkpCiAgICAgLCBtX2NvbnRleHQoSlNDb250ZXh0R2V0R2xvYmFsQ29u
dGV4dChjb250ZXh0KSkKQEAgLTE3MTEsNyArMTU0MCw3IEBAIFF0Q29ubmVjdGlvbk9iamVjdDo6
flF0Q29ubmVjdGlvbk9iamVjdCgpCiB7CiAgICAgLy8gV2UgY2FuIHNhZmVseSB1c2UgbV9vcmln
aW5hbFNlbmRlciBiZWNhdXNlIGNvbm5lY3Rpb24gb2JqZWN0IHdpbGwgbmV2ZXIgb3V0bGl2ZSB0
aGUgc2VuZGVyLAogICAgIC8vIHdoaWNoIGlzIGl0cyBRT2JqZWN0IHBhcmVudC4KLSAgICBRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjb25uZWN0aW9ucy5yZW1vdmUobV9vcmlnaW5hbFNlbmRl
ciwgdGhpcyk7CisgICAgY29ubmVjdGlvbnMucmVtb3ZlKG1fb3JpZ2luYWxTZW5kZXIsIHRoaXMp
OwogCiAgICAgaWYgKG1fcmVjZWl2ZXIpCiAgICAgICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250
ZXh0LCBtX3JlY2VpdmVyKTsKQEAgLTE4NDUsMTEgKzE2NzQsNiBAQCBib29sIFF0Q29ubmVjdGlv
bk9iamVjdDo6bWF0Y2goSlNDb250ZXh0UmVmIGNvbnRleHQsIFFPYmplY3QqIHNlbmRlciwgaW50
IHNpZ25hbAogICAgIHJldHVybiByZWNlaXZlck1hdGNoICYmIEpTVmFsdWVJc0VxdWFsKGNvbnRl
eHQsIHJlY2VpdmVyRnVuY3Rpb24sIG1fcmVjZWl2ZXJGdW5jdGlvbiwgaWdub3JlZEV4Y2VwdGlv
bik7CiB9CiAKLVF0Q29ubmVjdGlvbk9iamVjdCogUXRDb25uZWN0aW9uT2JqZWN0OjpjcmVhdGVX
aXRoSW50ZXJuYWxKU0MoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNl
bmRlckluc3RhbmNlLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0KiByZWNlaXZlciwgSlNPYmpl
Y3QqIHJlY2VpdmVyRnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIG5ldyBRdENvbm5lY3Rpb25PYmpl
Y3QoOjp0b1JlZihleGVjKSwgc2VuZGVySW5zdGFuY2UsIHNpZ25hbEluZGV4LCA6OnRvUmVmKHJl
Y2VpdmVyKSwgOjp0b1JlZihyZWNlaXZlckZ1bmN0aW9uKSk7Ci19Ci0KIC8vID09PT09PT09PT09
PT09PQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6UXRBcnJheShRTGlzdDxU
PiBsaXN0LCBRTWV0YVR5cGU6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290
T2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKaW5kZXggYjJmZDY2ZDQz
NjUzYWI1NmQyNjk3Mjk2YjYxMDk4NDM3ZDAzMDg3ZS4uNzYzYWNiYTVkMDU5ZTgxOThiYmY2ZTRl
ZjBkOTNiMWM0ZmFkYzUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCkBA
IC05NSwxNDMgKzk1LDM1IEBAIHByaXZhdGU6CiAgICAgUU1ldGFUeXBlOjpUeXBlIG1fdHlwZTsK
IH07CiAKLS8vIEJhc2VkIG9uIFJ1bnRpbWVNZXRob2QKLQotLy8gRXh0cmEgZGF0YSBjbGFzc2Vz
ICh0byBhdm9pZCB0aGUgQ0VMTF9TSVpFIGxpbWl0IG9uIEpTIG9iamVjdHMpCi1jbGFzcyBRdFJ1
bnRpbWVNZXRob2Q7Ci1jbGFzcyBRdFJ1bnRpbWVNZXRob2REYXRhIDogcHVibGljIFdlYWtIYW5k
bGVPd25lciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5RdFJ1bnRpbWVNZXRob2RE
YXRhKCk7Ci0gICAgICAgIFJlZlB0cjxRdEluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgICAgICBX
ZWFrPFF0UnVudGltZU1ldGhvZD4gbV9maW5hbGl6ZXI7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCopOwotfTsKLQotY2xhc3MgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZDsKLWNsYXNzIFF0UnVudGltZU1ldGFNZXRob2REYXRhIDog
cHVibGljIFF0UnVudGltZU1ldGhvZERhdGEgewotICAgIHB1YmxpYzoKLSAgICAgICAgflF0UnVu
dGltZU1ldGFNZXRob2REYXRhKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkgbV9zaWduYXR1cmU7Ci0g
ICAgICAgIGJvb2wgbV9hbGxvd1ByaXZhdGU7Ci0gICAgICAgIGludCBtX2luZGV4OwotICAgICAg
ICBXcml0ZUJhcnJpZXI8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZD4gbV9jb25uZWN0OwotICAg
ICAgICBXcml0ZUJhcnJpZXI8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZD4gbV9kaXNjb25uZWN0
OwotfTsKLQotY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEgOiBwdWJsaWMgUXRS
dW50aW1lTWV0aG9kRGF0YSB7Ci0gICAgcHVibGljOgotICAgICAgICB+UXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZERhdGEoKTsKLSAgICAgICAgUUJ5dGVBcnJheSBtX3NpZ25hdHVyZTsKLSAgICAg
ICAgaW50IG1faW5kZXg7Ci0gICAgICAgIGJvb2wgbV9pc0Nvbm5lY3Q7Ci19OwotCi0vLyBDb21t
b24gYmFzZSBjbGFzcyAoZG9lc24ndCByZWFsbHkgZG8gYW55dGhpbmcgaW50ZXJlc3RpbmcpCi1j
bGFzcyBRdFJ1bnRpbWVNZXRob2QgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitjbGFzcyBR
dFJ1bnRpbWVNZXRob2QgewogcHVibGljOgotICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBC
YXNlOworICAgIGVudW0gTWV0aG9kRmxhZ3MgeworICAgICAgICBNZXRob2RJc1NpZ25hbCA9IDEs
CisgICAgICAgIEFsbG93UHJpdmF0ZSA9IDIKKyAgICB9OwogCisgICAgUXRSdW50aW1lTWV0aG9k
KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBRT2JqZWN0KiwgY29uc3QgUUJ5
dGVBcnJheSYgaWRlbnRpZmllciwgaW50IHNpZ25hbEluZGV4LCBpbnQgZmxhZ3MsIFF0SW5zdGFu
Y2UqKTsKICAgICB+UXRSdW50aW1lTWV0aG9kKCk7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKIAotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRp
YyBKU1ZhbHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBK
U1ZhbHVlUmVmIGNvbm5lY3QoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBK
U1ZhbHVlUmVmIGRpc2Nvbm5lY3QoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgc3Rh
dGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbG9iYWxPYmpl
Y3QtPmZ1bmN0aW9uUHJvdG90eXBlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgY29uc3QgVVN0
cmluZyYsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4pOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW47Ci0KLSAgICBRdFJ1bnRpbWVNZXRob2REYXRhICpkX2Z1bmMo
KSBjb25zdCB7cmV0dXJuIGRfcHRyO30KLSAgICBRdFJ1bnRpbWVNZXRob2QoUXRSdW50aW1lTWV0
aG9kRGF0YSAqZGQsIEV4ZWNTdGF0ZSAqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJiBuYW1l
KTsKLSAgICBRdFJ1bnRpbWVNZXRob2REYXRhICpkX3B0cjsKLX07Ci0KLWNsYXNzIFF0UnVudGlt
ZU1ldGFNZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kIHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIFF0UnVudGltZU1ldGhvZCBCYXNlOworICAgIEpTT2JqZWN0UmVmIGpzT2JqZWN0UmVmKEpT
Q29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIHN0YXRpYyBRdFJ1bnRp
bWVNZXRhTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRl
QXJyYXkmIHNpZ25hdHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUpCi0gICAgewotICAgICAgICBTdHJ1
Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8
UXRSdW50aW1lTWV0YU1ldGhvZD4oZXhlYyk7Ci0gICAgICAgIFF0UnVudGltZU1ldGFNZXRob2Qq
IG1ldGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU1ldGFNZXRob2Q+KCpleGVjLT5o
ZWFwKCkpKSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIGRvbVN0cnVjdHVyZSwgbmFtZSk7Ci0g
ICAgICAgIG1ldGhvZC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgbmFtZSwgaW5zdGFuY2UsIGluZGV4
LCBzaWduYXR1cmUsIGFsbG93UHJpdmF0ZSk7Ci0gICAgICAgIHJldHVybiBtZXRob2Q7Ci0gICAg
fQotCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSAqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKLQotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKLQotICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSog
ZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZU1ldGFNZXRo
b2REYXRhKj4oZF9wdHIpO30KKyAgICBjb25zdCBRQnl0ZUFycmF5JiBuYW1lKCkgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiwg
aW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRl
KTsKLQotICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYp
OwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRl
KiBleGVjKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBjb25uZWN0R2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgZGlz
Y29ubmVjdEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotfTsKLQot
Y2xhc3MgUXRDb25uZWN0aW9uT2JqZWN0OwotY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZCA6IHB1YmxpYyBRdFJ1bnRpbWVNZXRob2QgewotcHVibGljOgotICAgIHR5cGVkZWYgUXRSdW50
aW1lTWV0aG9kIEJhc2U7Ci0KLSAgICBzdGF0aWMgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbmFtZSwgYm9vbCBpc0Nvbm5l
Y3QsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3QgUUJ5
dGVBcnJheSYgc2lnbmF0dXJlKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1
cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2Q+KGV4ZWMpOwotICAgICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKiBtZXRo
b2QgPSBuZXcgKGFsbG9jYXRlQ2VsbDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kPigqZXhlYy0+
aGVhcCgpKSkgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZChleGVjLCBkb21TdHJ1Y3R1cmUsIG5h
bWUpOwotICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIG5hbWUsIGlzQ29ubmVj
dCwgaW5zdGFuY2UsIGluZGV4LCBzaWduYXR1cmUpOwotICAgICAgICByZXR1cm4gbWV0aG9kOwot
ICAgIH0KLQotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUgKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7Ci0gCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0KLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZERhdGEqIGRfZnVuYygpIGNvbnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1bnRpbWVD
b25uZWN0aW9uTWV0aG9kRGF0YSo+KGRfcHRyKTt9Ci0KLXByaXZhdGU6Ci0gICAgUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiwgYm9v
bCBpc0Nvbm5lY3QsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4sIGludCBpbmRleCwgY29uc3QgUUJ5
dGVBcnJheSYgc2lnbmF0dXJlKTsKLQotICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGwoRXhlY1N0YXRlKiBleGVjKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgUU11bHRp
TWFwPFFPYmplY3QgKiwgUXRDb25uZWN0aW9uT2JqZWN0ICo+IGNvbm5lY3Rpb25zOwotICAgIGZy
aWVuZCBjbGFzcyBRdENvbm5lY3Rpb25PYmplY3Q7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24gY29ubmVjdEZ1bmN0aW9uOworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0
aW9uIGRpc2Nvbm5lY3RGdW5jdGlvbjsKKworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNvbm5lY3RP
ckRpc2Nvbm5lY3QoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGJvb2wgY29ubmVjdCk7CisgICAg
UVBvaW50ZXI8UU9iamVjdD4gbV9vYmplY3Q7CisgICAgUUJ5dGVBcnJheSBtX2lkZW50aWZpZXI7
CisgICAgaW50IG1faW5kZXg7CisgICAgaW50IG1fZmxhZ3M7CisgICAgV2VhazxKU09iamVjdD4g
bV9qc09iamVjdDsKKyAgICBRdEluc3RhbmNlKiBtX2luc3RhbmNlOwogfTsKIAogLy8gQSBRdENv
bm5lY3Rpb25PYmplY3QgcmVwcmVzZW50cyBhIGNvbm5lY3Rpb24gY3JlYXRlZCBpbnNpZGUgSlMu
IEl0IHdpbGwgY29ubmVjdCBpdHMgb3duIGV4ZWN1dGUoKSBzbG90CkBAIC0yNDcsOSArMTM5LDYg
QEAgcHVibGljOgogCiAgICAgYm9vbCBtYXRjaChKU0NvbnRleHRSZWYsIFFPYmplY3QqIHNlbmRl
ciwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU09iamVjdFJlZiBm
dW5jT2JqZWN0KTsKIAotICAgIC8vIE5vdGU6IGZvciBjYWxsZXJzIHVzaW5nIEpTQyBpbnRlcm5h
bHMsIHJlbW92ZSBvbmNlIHdlIGRvbid0IG5lZWQgYW55bW9yZS4KLSAgICBzdGF0aWMgUXRDb25u
ZWN0aW9uT2JqZWN0KiBjcmVhdGVXaXRoSW50ZXJuYWxKU0MoRXhlY1N0YXRlKiwgUGFzc1JlZlB0
cjxRdEluc3RhbmNlPiBzZW5kZXJJbnN0YW5jZSwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdCog
cmVjZWl2ZXIsIEpTT2JqZWN0KiByZWNlaXZlckZ1bmN0aW9uKTsKLQogcHJpdmF0ZToKICAgICBK
U0dsb2JhbENvbnRleHRSZWYgbV9jb250ZXh0OwogICAgIFJlZlB0cjxRdEluc3RhbmNlPiBtX3Nl
bmRlckluc3RhbmNlOwpAQCAtMjYwLDYgKzE0OSw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc2ln
bmFsSW5kZXg7CiAgICAgSlNPYmplY3RSZWYgbV9yZWNlaXZlcjsKICAgICBKU09iamVjdFJlZiBt
X3JlY2VpdmVyRnVuY3Rpb247CisKKyAgICBmcmllbmQgY2xhc3MgUXRSdW50aW1lTWV0aG9kOwor
ICAgIHN0YXRpYyBRTXVsdGlNYXA8UU9iamVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5l
Y3Rpb25zOwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmpl
Y3RicmlkZ2UvdHN0X3FvYmplY3RicmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9x
b2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcAppbmRleCA0NTYyNmQ5ZWYyMWYwYmNm
ZjU2ZmJhN2JkMzMwYjRkMWYwZmIyY2Q4Li4wZTY0NDE4YjU0NThjOGJiMmIzNGY4N2U3OTQ5MTk3
M2YyYTVkYjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3Ricmlk
Z2UvdHN0X3FvYmplY3RicmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcW9i
amVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHAKQEAgLTE0OTksMTAgKzE0OTksMTMgQEAg
dm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QoKQogICAgIFFDT01Q
QVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwyLmRpc2Nvbm5lY3QobXlPYmplY3QsIG15SGFu
ZGxlcikiKSwgc1VuZGVmaW5lZCk7CiAKICAgICAvLyBjb25uZWN0KG9iaiwgc3RyaW5nKQotICAg
IFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuY29ubmVjdCh5ZXRBbm90aGVyT2Jq
ZWN0LCAnZnVuYycpIiksIHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmpl
Y3QubXlTaWduYWwuY29ubmVjdChteU9iamVjdCwgJ215U2xvdCcpIiksIHNVbmRlZmluZWQpOwot
ICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVjdCh5ZXRBbm90
aGVyT2JqZWN0LCAnZnVuYycpIiksIHNVbmRlZmluZWQpOwotICAgIFFDT01QQVJFKGV2YWxKUygi
bXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVjdChteU9iamVjdCwgJ215U2xvdCcpIiksIHNVbmRl
ZmluZWQpOworICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRQ09NUEFSRShl
dmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmNvbm5lY3QoeWV0QW5vdGhlck9iamVjdCwgJ2Z1bmMn
KSIsIHR5cGUpLCBzVW5kZWZpbmVkKTsKKyAgICAgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVj
dC5teVNpZ25hbC5jb25uZWN0KG15T2JqZWN0LCAnbXlTbG90JykiLCB0eXBlKSwgc1VuZGVmaW5l
ZCk7CisgICAgICAgIFFDT01QQVJFKGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVj
dCh5ZXRBbm90aGVyT2JqZWN0LCAnZnVuYycpIiwgdHlwZSksIHNVbmRlZmluZWQpOworICAgICAg
ICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsLmRpc2Nvbm5lY3QobXlPYmplY3Qs
ICdteVNsb3QnKSIsIHR5cGUpLCBzVW5kZWZpbmVkKTsKKyAgICB9CiAKICAgICAvLyBjaGVjayB0
aGF0IGVtaXR0aW5nIHNpZ25hbHMgZnJvbSBzY3JpcHQgd29ya3MKIApAQCAtMTU1NSw2ICsxNTU4
LDE0IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmNvbm5lY3RBbmREaXNjb25uZWN0KCkKICAg
ICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0aW9uQWN0dWFscygpLmF0KDApLnRvSW50KCks
IDQ1Nik7CiAgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcu
ZGlzY29ubmVjdChteU9iamVjdFsnbXlPdmVybG9hZGVkU2xvdChpbnQpJ10pIiksIHNVbmRlZmlu
ZWQpOwogCisgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbFdpdGhJbnRBcmcu
Y29ubmVjdChteU9iamVjdCwgJ215T3ZlcmxvYWRlZFNsb3QoaW50KScpIiksIHNVbmRlZmluZWQp
OworICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKKyAgICBRQ09NUEFS
RShldmFsSlMoIm15T2JqZWN0Lm15U2lnbmFsV2l0aEludEFyZyg0NTYpIiksIHNVbmRlZmluZWQp
OworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIDI4KTsgLy8g
aW50IG92ZXJsb2FkCisgICAgUUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkFjdHVhbHMo
KS5zaXplKCksIDEpOworICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25BY3R1YWxz
KCkuYXQoMCkudG9JbnQoKSwgNDU2KTsKKyAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0Lm15
U2lnbmFsV2l0aEludEFyZy5kaXNjb25uZWN0KG15T2JqZWN0LCAnbXlPdmVybG9hZGVkU2xvdChp
bnQpJykiKSwgc1VuZGVmaW5lZCk7CisKICAgICAvLyBlcnJvbmVvdXMgaW5wdXQKICAgICB7CiAg
ICAgICAgIC8vICMjIyBRdFNjcmlwdCBhZGRzIC5jb25uZWN0IHRvIGFsbCBmdW5jdGlvbnMsIFdl
YktpdCBkb2VzIG9ubHkgdG8gc2lnbmFscy9zbG90cwpAQCAtMTU4NywyMCArMTU5OCwzNCBAQCB2
b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpjb25uZWN0QW5kRGlzY29ubmVjdCgpCiAgICAgICAgIFFT
dHJpbmcgdHlwZTsKICAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52
b2thYmxlLmNvbm5lY3QoMTIzKSIsIHR5cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJy
b3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRN
ZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWdu
YWwiKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0
YU1ldGhvZC5jb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFs
IikpOwogICAgIH0KICAgICB7CiAgICAgICAgIFFTdHJpbmcgdHlwZTsKICAgICAgICAgUVN0cmlu
ZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15SW52b2thYmxlLmNvbm5lY3QoZnVuY3Rpb24oKSB7
IH0pIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFD
T01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVj
dDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAgICAg
UUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6
IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAgfQogCiAg
ICAgewogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpT
KCJteU9iamVjdC5teVNpZ25hbC5jb25uZWN0KDEyMykiLCB0eXBlKTsKICAgICAgICAgUUNPTVBB
UkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJU
eXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24i
KSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1l
dGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CisgICAgfQorCisgICAg
eworICAgICAgICBRU3RyaW5nIHR5cGU7CisgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJ2
YXIgcmFuZG9tT2JqZWN0ID0gbmV3IE9iamVjdDsgbXlPYmplY3QubXlTaWduYWwuY29ubmVjdCht
eU9iamVjdCwgcmFuZG9tT2JqZWN0KSIsIHR5cGUpOworICAgICAgICBRQ09NUEFSRSh0eXBlLCBz
RXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1l
dGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgUVN0cmluZyB0eXBlOworICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxK
UygibXlPYmplY3QubXlTaWduYWwuY29ubmVjdChteU9iamVjdCwgJ25vbkV4aXN0YW50U2xvdCcp
IiwgdHlwZSk7CisgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7CisgICAgICAgIFFDT01Q
QVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJn
ZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CiAgICAgfQogCiAgICAgewpAQCAtMTYxNiw2ICsxNjQx
LDEzIEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmNvbm5lY3RBbmREaXNjb25uZWN0KCkKICAg
ICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRp
c2Nvbm5lY3Q6IG5vIGFyZ3VtZW50cyBnaXZlbiIpKTsKICAgICB9CiAKKyAgICB7CisgICAgICAg
IFFTdHJpbmcgdHlwZTsKKyAgICAgICAgUVN0cmluZyByZXQgPSBldmFsSlMoIm15T2JqZWN0Lm15
U2lnbmFsLmRpc2Nvbm5lY3QobXlPYmplY3QsICdub25FeGlzdGFudFNsb3QnKSIsIHR5cGUpOwor
ICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFM
YXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5v
dCBhIGZ1bmN0aW9uIikpOworICAgIH0KKwogICAgIC8qIFhGQUlMIC0gRnVuY3Rpb24ucHJvdG90
eXBlIGRvZXNuJ3QgZ2V0IGNvbm5lY3QvZGlzY29ubmVjdCwganVzdCBzaWduYWxzL3Nsb3RzCiAg
ICAgewogICAgICAgICBRU3RyaW5nIHR5cGU7CkBAIC0xNjI5LDI3ICsxNjYxLDI3IEBAIHZvaWQg
dHN0X1FPYmplY3RCcmlkZ2U6OmNvbm5lY3RBbmREaXNjb25uZWN0KCkKICAgICAgICAgUVN0cmlu
ZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygidmFyIG8gPSB7IH07IG8uZGlz
Y29ubmVjdCA9IG15T2JqZWN0Lm15SW52b2thYmxlLmRpc2Nvbm5lY3Q7IG8uZGlzY29ubmVjdCgx
MjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFD
T01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29u
bmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAg
ICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nv
bm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAg
fQogCiAgICAgewogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0g
ZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5kaXNjb25uZWN0KDEyMykiLCB0eXBlKTsKICAg
ICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0
aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6
Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOworICAgICAgICBRQ09NUEFSRShyZXQs
IFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0
OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKICAgICB9CiAgICAgewogICAgICAg
ICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5t
eUludm9rYWJsZS5kaXNjb25uZWN0KGZ1bmN0aW9uKCkgeyB9KSIsIHR5cGUpOwogICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJp
bmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZv
a2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGlu
MVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6Om15SW52
b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUVN0
cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlTaWdu
YWwuZGlzY29ubmVjdCgxMjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJv
cik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1l
dGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgICAg
ICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29u
bmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwogICAgIH0KIAogICAgIHsKQEAgLTE4
NDcsNyArMTg3OSw3IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6Om9iamVjdERlbGV0ZWQoKQog
ICAgIGV2YWxKUygiYmFyLmludFByb3BlcnR5ID0gMTIzOyIpOwogICAgIFFDT01QQVJFKHFvYmot
PmludFByb3BlcnR5KCksIDEyMyk7CiAgICAgcW9iai0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgp
OwotICAgIGV2YWxKUygiYmFyLm15SW52b2thYmxlLmNhbGwoYmFyKTsiKTsKKyAgICBldmFsSlMo
ImJhci5teUludm9rYWJsZShiYXIpOyIpOwogICAgIFFDT01QQVJFKHFvYmotPnF0RnVuY3Rpb25J
bnZva2VkKCksIDApOwogCiAgICAgLy8gZG8gdGhpcywgdG8gZW5zdXJlIHRoYXQgd2UgY2FjaGUg
dGhhdCBpdCBpbXBsZW1lbnRzIGNhbGwKQEAgLTIxNDUsNyArMjE3Nyw3IEBAIHZvaWQgdHN0X1FP
YmplY3RCcmlkZ2U6OmludHJvc3BlY3RRdE1ldGhvZHMoKQogICAgICAgICBRQ09NUEFSRShldmFs
SlMoImRlc2NyaXB0b3Iuc2V0IiksIHNVbmRlZmluZWQpOwogICAgICAgICBRQ09NUEFSRShldmFs
SlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci52YWx1ZSA9PT0gJTBbJyUxJ10iKS5h
cmcobWV0aG9kTG9va3VwKS5hcmcobmFtZSkpLCBzVHJ1ZSk7CiAgICAgICAgIFFDT01QQVJFKGV2
YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCJkZXNjcmlwdG9yLmVudW1lcmFibGUiKSksIHNGYWxz
ZSk7Ci0gICAgICAgIFFDT01QQVJFKGV2YWxKUyhRU3RyaW5nOjpmcm9tTGF0aW4xKCJkZXNjcmlw
dG9yLmNvbmZpZ3VyYWJsZSIpKSwgc0ZhbHNlKTsKKyAgICAgICAgUUNPTVBBUkUoZXZhbEpTKFFT
dHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IuY29uZmlndXJhYmxlIikpLCBzVHJ1ZSk7CiAg
ICAgfQogCiAgICAgUVZFUklGWShldmFsSlNWKCJ2YXIgcHJvcHM9W107IGZvciAodmFyIHAgaW4g
bXlPYmplY3QuZGVsZXRlTGF0ZXIpIHtwcm9wcy5wdXNoKHApO307IHByb3BzLnNvcnQoKSIpLnRv
U3RyaW5nTGlzdCgpLmlzRW1wdHkoKSk7Cg==
</data>
<flag name="review"
          id="167863"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>