<?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>19269</bug_id>
          
          <creation_ts>2008-05-27 09:29:52 -0700</creation_ts>
          <short_desc>speed up SunSpider by eliminating the toObject call for most get/put/delete</short_desc>
          <delta_ts>2008-06-05 09:33:46 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>81613</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 09:29:52 -0700</bug_when>
    <thetext>I have a design that combines the getOwnPropertySlot virtual function call with the toObject function. It&apos;s going to give us a 1% or 2% speedup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81633</commentid>
    <comment_count>1</comment_count>
      <attachid>21365</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 12:23:27 -0700</bug_when>
    <thetext>Created attachment 21365
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81634</commentid>
    <comment_count>2</comment_count>
      <attachid>21365</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 12:24:02 -0700</bug_when>
    <thetext>Comment on attachment 21365
patch

Oops, broken!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81636</commentid>
    <comment_count>3</comment_count>
      <attachid>21366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 12:27:38 -0700</bug_when>
    <thetext>Created attachment 21366
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81638</commentid>
    <comment_count>4</comment_count>
      <attachid>21367</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 12:28:12 -0700</bug_when>
    <thetext>Created attachment 21367
earlier try -- this made things slower because I went too far in some way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81639</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 12:29:13 -0700</bug_when>
    <thetext>Removes most of the legacy code (not all) and leaves things 1.025x as fast. I&apos;m excited about getting this in, but maybe not until after the Acid3 effort is done?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81741</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-28 09:12:46 -0700</bug_when>
    <thetext>Note. This patch will also resolve bug 19286.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82177</commentid>
    <comment_count>7</comment_count>
      <attachid>21366</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-06-02 21:30:28 -0700</bug_when>
    <thetext>Comment on attachment 21366
patch

+          speed up SunSpider by eliminating the toObject call for most get/put/delete

You ended up leaving out delete.

+        The getOwnPropertySlot virtual function now takes care of the toObject call
+        for get. Similarly, the put and deleteProperty functions do the same for those
+        operations. To do this, the virtual functions were moved from the JSObject class

deleteProperty? o&apos;rly?

+        * kjs/lexer.cpp:
+        (KJS::Lexer::shift): Changed shift to just do a single character, to unroll
+        the loop and especially to make the one character case faster.
+        (KJS::Lexer::setCode): Call shift multiple times instead of passing a number.
+        (KJS::Lexer::lex): Ditto.
+        (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns.
+        (KJS::Lexer::scanRegExp): Ditto.
+        * kjs/lexer.h: Removed the count argument from shift.

Separate patch for this stuff, please.

+        (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot.
+        This function has to always return true, because the caller can&apos;t walk the prototype
+        chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works
+        for the caller. This is private, only called by getOwnPropertySlotInternal.

I think you meant something other than &quot;getOwnPropertySlotInternal.&quot;

Index: JavaScriptCore/kjs/grammar.y
===================================================================
--- JavaScriptCore/kjs/grammar.y	(revision 34151)
+++ JavaScriptCore/kjs/grammar.y	(working copy)
@@ -1094,34 +1094,11 @@ SourceElement:
 
 static AddNode* makeAddNode(ExpressionNode* left, ExpressionNode* right)
 {
-    JSType t1 = left-&gt;expectedReturnType();
-    JSType t2 = right-&gt;expectedReturnType();
-
-    if (t1 == NumberType &amp;&amp; t2 == NumberType)
-        return new AddNumbersNode(left, right);
-    if (t1 == StringType &amp;&amp; t2 == StringType)
-        return new AddStringsNode(left, right);
-    if (t1 == StringType)
-        return new AddStringLeftNode(left, right);
-    if (t2 == StringType)
-        return new AddStringRightNode(left, right);
     return new AddNode(left, right);
 }
 
 static LessNode* makeLessNode(ExpressionNode* left, ExpressionNode* right)
 {
-    JSType t1 = left-&gt;expectedReturnType();
-    JSType t2 = right-&gt;expectedReturnType();
-    
-    if (t1 == StringType &amp;&amp; t2 == StringType)
-        return new LessStringsNode(left, right);
-
-    // There are certainly more efficient ways to do this type check if necessary
-    if (t1 == NumberType || t1 == BooleanType || t1 == UndefinedType || t1 == NullType ||
-        t2 == NumberType || t2 == BooleanType || t2 == UndefinedType || t2 == NullType)
-        return new LessNumbersNode(left, right);
-
-    // Neither is certain to be a number, nor were both certain to be strings, so we use the default (slow) implementation.
     return new LessNode(left, right);
 }

Is this change related?
 
Index: JavaScriptCore/kjs/value.cpp
===================================================================
--- JavaScriptCore/kjs/value.cpp	(revision 34151)
+++ JavaScriptCore/kjs/value.cpp	(working copy)
@@ -217,6 +217,59 @@ ConstructType JSCell::getConstructData(C
     return ConstructTypeNone;
 }
 
+bool JSCell::getOwnPropertySlot(ExecState* exec, const Identifier&amp; identifier, PropertySlot&amp; slot)
+{
+    // This is not a general purpose implementation of getOwnPropertySlot.
+    // It should only be called by JSValue::get.
+    // It calls getPropertySlot, not getOwnPropertySlot.
+    JSObject* object = toObject(exec);
+    if (UNLIKELY(exec-&gt;hadException())) {
+        slot.setUndefined();
+        return true;
+    }
+    slot.setBase(object);
+    if (!object-&gt;getPropertySlot(exec, identifier, slot))
+        slot.setUndefined();
+    return true;
+}
+
+bool JSCell::getOwnPropertySlot(ExecState* exec, unsigned identifier, PropertySlot&amp; slot)
+{
+    // This is not a general purpose implementation of getOwnPropertySlot.
+    // It should only be called by JSValue::get.
+    // It calls getPropertySlot, not getOwnPropertySlot.
+    JSObject* object = toObject(exec);
+    if (UNLIKELY(exec-&gt;hadException())) {
+        slot.setUndefined();
+        return true;
+    }
+    slot.setBase(object);
+    if (!object-&gt;getPropertySlot(exec, identifier, slot))
+        slot.setUndefined();
+    return true;
+}
+
+void JSCell::put(ExecState* exec, const Identifier&amp; identifier, JSValue* value)
+{
+    JSObject* object = toObject(exec);
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    object-&gt;put(exec, identifier, value);
+}
+
+void JSCell::put(ExecState* exec, unsigned identifier, JSValue* value)
+{
+    JSObject* object = toObject(exec);
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    object-&gt;put(exec, identifier, value);
+}

In the cases above, you should just ASSERT(!exec-&gt;hadException()), for a small
extra speedup. toObject can only throw for undefined and null, and since we&apos;re
a JSCell, we&apos;re not undefined or null.

Really, it&apos;s not right for ToNumber, ToBoolean, ToString, and ToObject to be
virtual functions. It gives the impression that subclasses can arbitrarily
override them, but they can&apos;t / don&apos;t / shouldn&apos;t.

Man, this &quot;JSCell::getOwnPropertySlot always returns true&quot; stuff is pretty subtle.
But I can&apos;t say no to the numbers!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82209</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-03 09:33:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; You ended up leaving out delete.

Will fix. I had another version of this patch that did the delete thing.

&gt; deleteProperty? o&apos;rly?

Ditto.

&gt; +        * kjs/lexer.cpp:
&gt; 
&gt; Separate patch for this stuff, please.

Will do.

&gt; +        (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets
&gt; the slot.
&gt; +        This function has to always return true, because the caller can&apos;t walk
&gt; the prototype
&gt; +        chain. Because of that, we do a getPropertySlot, not
&gt; getOwnPropertySlot, which works
&gt; +        for the caller. This is private, only called by
&gt; getOwnPropertySlotInternal.
&gt; 
&gt; I think you meant something other than &quot;getOwnPropertySlotInternal.&quot;

I had another version of this patch where I made these virtual functions private and called only by a function named getOwnPropertySlotInternal. I&apos;ll try to redo that later and see if I can preserve the speedup.

&gt;  static AddNode* makeAddNode(ExpressionNode* left, ExpressionNode* right)
&gt;  {
&gt; -    JSType t1 = left-&gt;expectedReturnType();
&gt; -    JSType t2 = right-&gt;expectedReturnType();
&gt; -
&gt; -    if (t1 == NumberType &amp;&amp; t2 == NumberType)
&gt; -        return new AddNumbersNode(left, right);
&gt; -    if (t1 == StringType &amp;&amp; t2 == StringType)
&gt; -        return new AddStringsNode(left, right);
&gt; -    if (t1 == StringType)
&gt; -        return new AddStringLeftNode(left, right);
&gt; -    if (t2 == StringType)
&gt; -        return new AddStringRightNode(left, right);
&gt;      return new AddNode(left, right);
&gt;  }
&gt; 
&gt;  static LessNode* makeLessNode(ExpressionNode* left, ExpressionNode* right)
&gt;  {
&gt; -    JSType t1 = left-&gt;expectedReturnType();
&gt; -    JSType t2 = right-&gt;expectedReturnType();
&gt; -    
&gt; -    if (t1 == StringType &amp;&amp; t2 == StringType)
&gt; -        return new LessStringsNode(left, right);
&gt; -
&gt; -    // There are certainly more efficient ways to do this type check if
&gt; necessary
&gt; -    if (t1 == NumberType || t1 == BooleanType || t1 == UndefinedType || t1 ==
&gt; NullType ||
&gt; -        t2 == NumberType || t2 == BooleanType || t2 == UndefinedType || t2 ==
&gt; NullType)
&gt; -        return new LessNumbersNode(left, right);
&gt; -
&gt; -    // Neither is certain to be a number, nor were both certain to be strings,
&gt; so we use the default (slow) implementation.
&gt;      return new LessNode(left, right);
&gt;  }
&gt; 
&gt; Is this change related?

Yes, it&apos;s part of removing the &quot;old interpreter state&quot; code.

&gt; In the cases above, you should just ASSERT(!exec-&gt;hadException())

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82353</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-05 09:33:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/34355</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21365</attachid>
            <date>2008-05-27 12:23:27 -0700</date>
            <delta_ts>2008-05-27 12:24:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>GoodSpeedupPatch.txt</filename>
            <type>text/plain</type>
            <size>409099</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTUzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg1IEBACisyMDA4LTA1LTI3ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTI2OQorICAgICAgICAgIHNwZWVkIHVwIFN1blNwaWRlciBieSBlbGltaW5hdGluZyB0aGUg
dG9PYmplY3QgY2FsbCBmb3IgbW9zdCBnZXQvcHV0L2RlbGV0ZQorCisgICAgICAgIE1ha2VzIHN0
YW5kYWxvbmUgU3VuU3BpZGVyIDEuMDI1eCBhcyBmYXN0IGFzIGJlZm9yZS4KKworICAgICAgICBU
aGUgZ2V0T3duUHJvcGVydHlTbG90IHZpcnR1YWwgZnVuY3Rpb24gbm93IHRha2VzIGNhcmUgb2Yg
dGhlIHRvT2JqZWN0IGNhbGwKKyAgICAgICAgZm9yIGdldC4gU2ltaWxhcmx5LCB0aGUgcHV0IGFu
ZCBkZWxldGVQcm9wZXJ0eSBmdW5jdGlvbnMgZG8gdGhlIHNhbWUgZm9yIHRob3NlCisgICAgICAg
IG9wZXJhdGlvbnMuIFRvIGRvIHRoaXMsIHRoZSB2aXJ0dWFsIGZ1bmN0aW9ucyB3ZXJlIG1vdmVk
IGZyb20gdGhlIEpTT2JqZWN0IGNsYXNzCisgICAgICAgIHRvIHRoZSBKU0NlbGwgY2xhc3MuIEFs
c28sIHNpbmNlIHRoZSBjYWxsZXIgbm8gbG9uZ2VyIGtub3dzIHRoZSBpZGVudGl0eSBvZiB0aGUK
KyAgICAgICAgIm9yaWdpbmFsIG9iamVjdCIsIHdoaWNoIGlzIHVzZWQgYnkgSmF2YVNjcmlwdC1m
dW5jdGlvbiBiYXNlZCBnZXR0ZXJzLCBjaGFuZ2VkCisgICAgICAgIHRoZSBQcm9wZXJ0eVNsb3Qg
Y2xhc3Mgc28gdGhlIG9yaWdpbmFsIG9iamVjdCBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgc2xv
dAorICAgICAgICB3aGVuIGdldE93blByb3BlcnR5U2xvdCBpcyBjYWxsZWQsIGlmIHRoZSBjYWxs
ZXIgaW50ZW5kcyB0byBjYWxsIGdldFZhbHVlLgorCisgICAgICAgIFRoaXMgYWZmZWN0ZWQgdGhl
IG9sZCBpbnRlcnByZXRlciBjb2RlIGVub3VnaCB0aGF0IHRoZSBlYXNpZXN0IHRoaW5nIGZvciBt
ZQorICAgICAgICB3YXMgdG8ganVzdCBkZWxldGUgaXQuIFdoaWxlIEkgYW0gbm90IGNlcnRhaW4g
dGhlIG15c3RlcmlvdXMgc2xvd2Rvd24gaXMgbm90CisgICAgICAgIHN0aWxsIG9jY3VycmluZywg
dGhlIG5ldCBjaGFuZ2UgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IHNwZWVkdXAuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IFVwZGF0ZWQuCisKKyAgICAgICAgKiBWTS9NYWNo
aW5lLmNwcDogTW92ZWQgdGhlIFVOTElLRUxZIG1hY3JvIGludG8gQWx3YXlzSW5saW5lLmguCisg
ICAgICAgIChLSlM6OnJlc29sdmUpOiBTZXQgdXAgdGhlIG9yaWdpbmFsT2JqZWN0IGluIHRoZSBQ
cm9wZXJ0eVNsb3QgYmVmb3JlCisgICAgICAgIGNhbGxpbmcgZ2V0UHJvcGVydHlTbG90LiBBbHNv
IHJlbW92ZWQgdGhlIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50IGZyb20KKyAgICAgICAgZ2V0VmFs
dWUuCisgICAgICAgIChLSlM6OnJlc29sdmVfc2tpcCk6IERpdHRvLgorICAgICAgICAoS0pTOjpy
ZXNvbHZlQmFzZUFuZFByb3BlcnR5KTogRGl0dG8uCisgICAgICAgIChLSlM6OnJlc29sdmVCYXNl
QW5kRnVuYyk6IERpdHRvLgorICAgICAgICAoS0pTOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6
IFJlbW92ZWQgdGhlIHRvT2JqZWN0IGNhbGxzIGZyb20gdGhlIGdldCBhbmQKKyAgICAgICAgcHV0
IGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZSwgaW5zdGVhZCBjYWxsaW5nIGRpcmVjdGx5IHdpdGgg
SlNWYWx1ZSBhbmQgbGV0dGluZworICAgICAgICB0aGUgSlNWYWx1ZSBhbmQgSlNDZWxsIGNhbGxz
IGhhbmRsZSB0b09iamVjdC4gU2FtZSBmb3IgdG9UaGlzT2JqZWN0LgorCisgICAgICAgICoga2pz
L0V4ZWNTdGF0ZS5oOiBSZW1vdmVkIE9sZEludGVycHJldGVyRXhlY1N0YXRlLgorCisgICAgICAg
ICogQVBJL0pTQmFzZS5jcHA6IFVwZGF0ZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiBranMvTG9j
YWxTdG9yYWdlRW50cnkuaDogUmVtb3ZlZCBjb250ZW50cy4gTGF0ZXIgd2UgY2FuIHJlbW92ZSB0
aGUgZmlsZSB0b28uCisKKyAgICAgICAgKiBranMvYXJyYXlfaW5zdGFuY2UuY3BwOgorICAgICAg
ICAoS0pTOjpBcnJheUluc3RhbmNlOjpsZW5ndGhHZXR0ZXIpOiBSZW1vdmVkIG9yaWdpbmFsT2Jq
ZWN0IGFyZ3VtZXQuCisgICAgICAgIChLSlM6OkFycmF5SW5zdGFuY2U6OmlubGluZUdldE93blBy
b3BlcnR5U2xvdCk6IERvbid0IHBhc3MgYSBiYXNlIHZhbHVlIHRvCisgICAgICAgIHNldFZhbHVl
U2xvdC4gQWxzbyB1c2UgVU5MSUtFTFkgYXJvdW5kIHRoZSAiZ2V0dGluZyBlbGVtZW50cyBwYXN0
IHRoZSBlbmQgb2YKKyAgICAgICAgdGhlIGFycmF5IiBjb2RlIHBhdGg7IGxlc3MgY29tbW9uIHRo
YW4gc3VjY2Vzc2Z1bGx5IGdldHRpbmcgYW4gZWxlbWVudC4KKworICAgICAgICAqIGtqcy9hcnJh
eV9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpnZXRQcm9wZXJ0eSk6IEluaXRpYWxpemUgdGhl
IFByb3BlcnR5U2xvdCB3aXRoIHRoZSBvcmlnaW5hbCBvYmplY3QuCisgICAgICAgIERvbid0IHBh
c3MgdGhlIG9yaWdpbmFsIG9iamVjdCB0byB0aGUgZ2V0IGZ1bmN0aW9uLgorICAgICAgICAoS0pT
OjphcnJheVByb3RvRnVuY0ZpbHRlcik6IERpdHRvLgorICAgICAgICAoS0pTOjphcnJheVByb3Rv
RnVuY01hcCk6IERpdHRvLgorICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY0V2ZXJ5KTogRGl0
dG8uCisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6IERpdHRvLgorICAgICAg
ICAoS0pTOjphcnJheVByb3RvRnVuY1NvbWUpOiBEaXR0by4KKworICAgICAgICAqIGtqcy9mdW5j
dGlvbl9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpGdW5jdGlvbk9iamVjdEltcDo6Y29uc3Ry
dWN0KTogUmVtb3ZlZCBhbiBvYnNvbGV0ZSBjb21tZW50LgorCisgICAgICAgICoga2pzL2dyYW1t
YXIueTogRWxpbWluYXRlZCBzdXBwb3J0IGZvciBzb21lIG9mIHRoZSBub2RlIHR5cGVzIHRoYXQg
d2VyZQorICAgICAgICB1c2VkIHRvIG9wdGltaXplIGV4ZWN1dGluZyBmcm9tIHRoZSBzeW50YXgg
dHJlZS4KKworICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OlN0cmlu
Z0ltcDo6dG9UaGlzT2JqZWN0KTogQWRkZWQuIFNhbWUgYXMgdG9PYmplY3QuCisgICAgICAgIChL
SlM6Ok51bWJlckltcDo6dG9UaGlzT2JqZWN0KTogRGl0dG8uCisgICAgICAgIChLSlM6OkdldHRl
clNldHRlckltcDo6Z2V0T3duUHJvcGVydHlTbG90KTogQWRkZWQuIE5vdCByZWFjaGVkLgorICAg
ICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnB1dCk6IERpdHRvLgorICAgICAgICAoS0pTOjpH
ZXR0ZXJTZXR0ZXJJbXA6OnRvVGhpc09iamVjdCk6IERpdHRvLgorCisgICAgICAgICoga2pzL2lu
dGVybmFsLmg6IEFkZGVkIHRvVGhpc09iamVjdCB0byBOdW1iZXJJbXAgZm9yIHNwZWVkLgorCisg
ICAgICAgICoga2pzL2xleGVyLmNwcDoKKyAgICAgICAgKEtKUzo6TGV4ZXI6OnNoaWZ0KTogQ2hh
bmdlZCBzaGlmdCB0byBqdXN0IGRvIGEgc2luZ2xlIGNoYXJhY3RlciwgdG8gdW5yb2xsCisgICAg
ICAgIHRoZSBsb29wIGFuZCBlc3BlY2lhbGx5IHRvIG1ha2UgdGhlIG9uZSBjaGFyYWN0ZXIgY2Fz
ZSBmYXN0ZXIuCisgICAgICAgIChLSlM6OkxleGVyOjpzZXRDb2RlKTogQ2FsbCBzaGlmdCBtdWx0
aXBsZSB0aW1lcyBpbnN0ZWFkIG9mIHBhc3NpbmcgYSBudW1iZXIuCisgICAgICAgIChLSlM6Okxl
eGVyOjpsZXgpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6TGV4ZXI6Om1hdGNoUHVuY3R1YXRvcik6
IERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWVkZWQgZWxzZXMgYWZ0ZXIgcmV0dXJucy4KKyAgICAg
ICAgKEtKUzo6TGV4ZXI6OnNjYW5SZWdFeHApOiBEaXR0by4KKyAgICAgICAgKiBranMvbGV4ZXIu
aDogUmVtb3ZlZCB0aGUgY291bnQgYXJndW1lbnQgZnJvbSBzaGlmdC4KKworICAgICAgICAqIGtq
cy9tYXRoX29iamVjdC5jcHA6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNQb3cpOiBDYWxs
IGpzTmFOIGluc3RlYWQgb2YganNOdW1iZXIoTmFOKS4KKworICAgICAgICAqIGtqcy9ub2Rlcy5j
cHA6IFJlbW92ZWQgc29tZSBvZiB0aGUgdGhpbmdzIG5lZWRlZCBvbmx5IGZvciB0aGUgcHJlLVNx
dWlycmVsRmlzaAorICAgICAgICBleGVjdXRpb24gbW9kZWwuCisgICAgICAgIChLSlM6OkZvck5v
ZGU6OmVtaXRDb2RlKTogSGFuZGxlIGNhc2VzIHdoZXJlIHNvbWUgZXhwcmVzc2lvbnMgYXJlIG1p
c3NpbmcgYnkKKyAgICAgICAgbm90IGVtaXR0aW5nIGFueSBjb2RlIGF0IGFsbC4gVGhlIG9sZCB3
YXkgd2FzIHRvIGVtaXQgY29kZSBmb3IgInRydWUiLCBidXQKKyAgICAgICAgdGhpcyBpcyBhbiB1
bm5lY2Vzc2FyeSByZW1uYW50IG9mIHRoZSBvbGQgd2F5IG9mIGRvaW5nIHRoaW5ncy4KKworICAg
ICAgICAqIGtqcy9ub2Rlcy5oOiBSZW1vdmVkIHNvbWUgb2YgdGhlIHRoaW5ncyBuZWVkZWQgb25s
eSBmb3IgdGhlIHByZS1TcXVpcnJlbEZpc2gKKyAgICAgICAgZXhlY3V0aW9uIG1vZGVsLgorCisg
ICAgICAgICoga2pzL29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpmaWxsR2V0
dGVyUHJvcGVydHlTbG90KTogQ2hhbmdlZCB0byBvbmx5IHBhc3MgaW4gdGhlIGdldHRlcgorICAg
ICAgICBmdW5jdGlvbi4gVGhlIG9sZCBjb2RlIHBhc3NlZCBpbiBhIGJhc2UsIGJ1dCBpdCB3YXMg
bmV2ZXIgdXNlZCB3aGVuCisgICAgICAgIGFjdHVhbGx5IGdldHRpbmcgdGhlIHByb3BlcnR5OyB0
aGUgdG9UaGlzT2JqZWN0IGNhbGwgd2FzIHBvaW50bGVzcy4gQWxzbworICAgICAgICBjaGFuZ2Vk
IHRvIG5vdCBwYXNzIGEgYmFzZSBmb3Igc2V0VW5kZWZpbmVkLgorCisgICAgICAgICoga2pzL29i
amVjdC5oOiBBZGRlZCB0aGUgbmV3IEpTQ2VsbCBvcGVyYXRpb25zIHRvIEdldHRlclNldHRlcklt
cC4KKyAgICAgICAgTmV2ZXIgY2FsbGVkLgorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0KTog
SW5pdGlhbGl6ZSB0aGUgb2JqZWN0IGluIHRoZSBQcm9wZXJ0eVNsb3QgYW5kIGRvbid0CisgICAg
ICAgIHBhc3MgaXQgaW4gZ2V0VmFsdWUuCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RGb3JXcml0ZSk6IFJlbW92ZWQgdGhlIGJhc2UgYXJndW1lbnQKKyAgICAgICAg
aW4gY2FsbHMgdG8gc2V0VmFsdWVTbG90LgorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KTogRGl0dG8uCisgICAgICAgIChLSlM6OkpTVmFsdWU6OmdldCk6IEFkZGVk
LiBIZXJlIGJlY2F1c2UgaXQgY2FsbHMgdGhyb3VnaCB0byBKU09iamVjdC4KKyAgICAgICAgQSB2
ZXJzaW9uIG9mIEpTT2JqZWN0OjpnZXQgdGhhdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIHR5cGVz
IG9mIEpTVmFsdWUKKyAgICAgICAgYnkgY3JlYXRpbmcgdGhlIGFwcHJvcHJpYXRlIHdyYXBwZXIu
IFNhdmVzIHRoZSB2aXJ0dWFsIGNhbGwgdG8gdG9PYmplY3QuCisgICAgICAgIChLSlM6OkpTVmFs
dWU6OnB1dCk6IERpdHRvLgorICAgICAgICAoS0pTOjpKU1ZhbHVlOjpkZWxldGVQcm9wZXJ0eSk6
IERpdHRvLgorCisgICAgICAgICoga2pzL3Byb3BlcnR5X3Nsb3QuY3BwOgorICAgICAgICAoS0pT
OjpQcm9wZXJ0eVNsb3Q6OnVuZGVmaW5lZEdldHRlcik6IFJlbW92ZWQgdGhlIG9yaWdpbmFsT2Jq
ZWN0IGFyZ3VtZW50LgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnVuZ2V0dGFibGVHZXR0
ZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcik6
IERpdHRvLiBVc2UgdGhlIHZhbHVlIGluIHRoZSBiYXNlCisgICAgICAgIGFzIHRoZSAidGhpcyIg
b2JqZWN0LCB3aGljaCB3aWxsIGJlIHNldCB0byB0aGUgb3JpZ2luYWwgb2JqZWN0IGJ5IHRoZSBu
ZXcKKyAgICAgICAgUHJvcGVydHlTbG90IGluaXRpYWxpemF0aW9uIGNvZGUuIEFsc28gY2FsbCB0
b1RoaXNPYmplY3QuIFRoZSBvbGQgY29kZSBkaWQKKyAgICAgICAgbm90IGRvIHRoaXMsIGJ1dCBu
ZWVkZWQgdG8gc28gd2UgY2FuIHByb3Blcmx5IGhhbmRsZSB0aGUgYWN0aXZhdGlvbiBvYmplY3QK
KyAgICAgICAgbGlrZSB0aGUgb3RoZXIgc2ltaWxhciBjb2RlIHBhdGhzLgorCisgICAgICAgICog
a2pzL3Byb3BlcnR5X3Nsb3QuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0
eVNsb3QpOiBBZGRlZCBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBiYXNlCisgICAgICAgIG9i
amVjdC4gSW4gZGVidWcgYnVpbGRzLCBzZXQgdGhlIGJhc2UgdG8gMCBpZiB5b3UgZG9uJ3QgcGFz
cyBvbmUuCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6Z2V0VmFsdWUpOiBEb24ndCB0YWtl
IG9yIHBhc3MgdGhlIG9yaWdpbmFsT2JqZWN0LgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6
OnNldFZhbHVlU2xvdCk6IERvbid0IHRha2UgYSBiYXNlIG9iamVjdCwgYW5kIGNsZWFyIHRoZQor
ICAgICAgICBiYXNlIG9iamVjdCBpbiBkZWJ1ZyBidWlsZHMuCisgICAgICAgIChLSlM6OlByb3Bl
cnR5U2xvdDo6c2V0R2V0dGVyU2xvdCk6IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNs
b3Q6OnNldFVuZGVmaW5lZCk6IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnNl
dFVuZ2V0dGFibGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpzbG90QmFz
ZSk6IEFzc2VydCB0aGF0IGEgYmFzZSBvYmplY3QgaXMgcHJlc2VudC4KKyAgICAgICAgVGhpcyB3
aWxsIGZpcmUgaWYgc29tZW9uZSBhY3R1YWxseSBjYWxscyB0aGUgZ2V0IGZ1bmN0aW9uIHdpdGhv
dXQgaGF2aW5nCisgICAgICAgIHBhc3NlZCBpbiBhIGJhc2Ugb2JqZWN0IGFuZCB0aGUgZ2V0dGVy
IG5lZWRzIGl0LgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnNldEJhc2UpOiBBZGRlZC4g
VXNlZCBieSB0aGUgY29kZSB0aGF0IGltcGxlbWVudHMKKyAgICAgICAgdG9PYmplY3Qgc28gaXQg
Y2FuIHN1cHBseSB0aGUgb3JpZ2luYWwgb2JqZWN0IGFmdGVyIHRoZSBmYWN0LgorICAgICAgICAo
S0pTOjpQcm9wZXJ0eVNsb3Q6OmNsZWFyQmFzZSk6IEFkZGVkLiBDbGVhcnMgdGhlIGJhc2UsIGJ1
dCBpcyBkZWJ1Zy1vbmx5CisgICAgICAgIGNvZGUgYmVjYXVzZSBpdCdzIGFuIGVycm9yIHRvIGZl
dGNoIHRoZSBiYXNlIGlmIHlvdSBkb24ndCBoYXZlIGEgZ3VhcmFudGVlCisgICAgICAgIGl0IHdh
cyBzZXQuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tP
YmplY3Q6OmNhY2hlZFZhbHVlR2V0dGVyKToKKyAgICAgICAgKEtKUzo6SlNDYWxsYmFja09iamVj
dDo6c3RhdGljVmFsdWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU0NhbGxiYWNrT2JqZWN0Ojpz
dGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tPYmplY3Q6OmNh
bGxiYWNrR2V0dGVyKToKKyAgICAgICAgKiBranMvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAg
KEtKUzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoS0pTOjpK
U0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICoga2pzL0pTQWN0aXZhdGlv
bi5oOgorICAgICAgICAqIGtqcy9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChLSlM6OkpT
VmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKiBranMvYXJyYXlfaW5z
dGFuY2UuaDoKKyAgICAgICAgKiBranMvZnVuY3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpGdW5j
dGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6OmNh
bGxlckdldHRlcik6CisgICAgICAgIChLSlM6OkZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIpOgor
ICAgICAgICAoS0pTOjpBcmd1bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKToKKyAgICAgICAgKiBr
anMvZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvbG9va3VwLmg6CisgICAgICAgIChLSlM6OnN0
YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKEtKUzo6c3RhdGljVmFsdWVHZXR0ZXIpOgor
ICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6U3RyaW5nSW5z
dGFuY2U6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChLSlM6OlN0cmluZ0luc3RhbmNlOjppbmRl
eEdldHRlcik6CisgICAgICAgIChLSlM6OnN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3BlcnR5R2V0
dGVyKToKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5oOgorICAgICAgICBSZW1vdmVkIG9y
aWdpbmFsT2JqZWN0IGFyZ3VtZW50cyBmcm9tIGdldHRlcnMuIERvbid0IHBhc3MgYmFzZSB2YWx1
ZXMgdG8KKyAgICAgICAgdGhlIHZhcmlvdXMgUHJvcGVydHlTbG90IGZ1bmN0aW9ucyB0aGF0IG5v
IGxvbmdlciB0YWtlIHRoZW0uCisKKyAgICAgICAgKiBranMvdmFsdWUuY3BwOgorICAgICAgICAo
S0pTOjpKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdCk6IEFkZGVkLiBDYWxscyB0b09iamVjdCBh
bmQgdGhlbiBzZXRzIHRoZSBzbG90LgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyB0byBhbHdh
eXMgcmV0dXJuIHRydWUsIGJlY2F1c2UgdGhlIGNhbGxlciBjYW4ndCB3YWxrIHRoZSBwcm90b3R5
cGUKKyAgICAgICAgY2hhaW4uIEJlY2F1c2Ugb2YgdGhhdCwgd2UgZG8gYSBnZXRQcm9wZXJ0eVNs
b3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QsIHdoaWNoIHdvcmtzCisgICAgICAgIGZvciB0aGUg
Y2FsbGVyLiBUaGlzIGlzIHByaXZhdGUsIG9ubHkgY2FsbGVkIGJ5IGdldE93blByb3BlcnR5U2xv
dEludGVybmFsLgorICAgICAgICAoS0pTOjpKU0NlbGw6OnB1dCk6IEFkZGVkLiBDYWxscyB0b09i
amVjdCBhbmQgdGhlbiBwdXQuCisgICAgICAgIChLSlM6OkpTQ2VsbDo6dG9UaGlzT2JqZWN0KTog
QWRkZWQuIENhbGxzIHRvT2JqZWN0LgorCisgICAgICAgICoga2pzL3ZhbHVlLmg6IEFkZGVkIGdl
dCwgcHV0LCBhbmQgdG9UaGlzT2JqZWN0IHRvIGJvdGggSlNWYWx1ZQorICAgICAgICBhbmQgSlND
ZWxsLiBUaGVzZSB0YWtlIGNhcmUgb2YgdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiB3aXRob3V0IGFu
IGFkZGl0aW9uYWwgdmlydHVhbAorICAgICAgICBmdW5jdGlvbiBjYWxsLCBhbmQgc28gbWFrZSB0
aGUgY29tbW9uICJhbHJlYWR5IGFuIG9iamVjdCIgY2FzZSBmYXN0ZXIuCisKKyAgICAgICAgKiB3
dGYvQWx3YXlzSW5saW5lLmg6IE1vdmVkIHRoZSBVTkxJS0VMWSBtYWNybyBoZXJlIGZvciBub3cu
IE1heWJlIHdlIGNhbiBmaW5kIGEKKyAgICAgICAgYmV0dGVyIHBsYWNlIGxhdGVyLCBvciByZW5h
bWUgdGhpcyBoZWFkZXIuCisKIDIwMDgtMDUtMjcgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4ZXMgdG8gY2F0Y2ggdXAgd2l0
aCBTcXVpcnJlbEZpc2gsIGV0Yy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgX19aTjNLSlMxMVByb3BlcnR5TWFwM3B1dEVS
S05TXzEwSWRlbnRpZgogX19aTjNLSlMxMVByb3BlcnR5TWFwNWNsZWFyRXYKIF9fWk4zS0pTMTFQ
cm9wZXJ0eU1hcEQxRXYKIF9fWk4zS0pTMTJEYXRlSW5zdGFuY2U0aW5mb0UKLV9fWk4zS0pTMTJQ
cm9wZXJ0eVNsb3QxNXVuZGVmaW5lZEdldHRlckVQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0
RVJLTlNfMTBJZGVudGlmaWVyRVJLUzBfCitfX1pOM0tKUzEyUHJvcGVydHlTbG90MTV1bmRlZmlu
ZWRHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUktTMF8KIF9fWk4zS0pT
MTJSZWdpc3RlckZpbGUxNGFkZEdsb2JhbFNsb3RzRW0KIF9fWk4zS0pTMTNBcnJheUluc3RhbmNl
NGluZm9FCiBfX1pOM0tKUzEzQ29kZUdlbmVyYXRvcjIxc2V0RHVtcHNHZW5lcmF0ZWRDb2RlRWIK
QEAgLTE1MSw2ICsxNTEsMTAgQEAgX19aTjNLSlM0TGlzdDE1ZXhwYW5kQW5kQXBwZW5kRVBOU183
SlNWYQogX19aTjNLSlM0TGlzdDdtYXJrU2V0RXYKIF9fWk4zS0pTNkpTQ2VsbDExZ2V0Q2FsbERh
dGFFUk5TXzhDYWxsRGF0YUUKIF9fWk4zS0pTNkpTQ2VsbDE2Z2V0Q29uc3RydWN0RGF0YUVSTlNf
MTNDb25zdHJ1Y3REYXRhRQorX19aTjNLSlM2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQorX19aTjNL
SlM2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3Bl
cnR5U2xvdEUKK19fWk4zS0pTNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRQorX19aTjNLSlM2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVq
UE5TXzdKU1ZhbHVlRQogX19aTjNLSlM2SlNDZWxsOWdldE9iamVjdEV2CiBfX1pOM0tKUzZKU0Nl
bGxud0VtCiBfX1pOM0tKUzZKU0xvY2sxMkRyb3BBbGxMb2Nrc0MxRXYKQEAgLTI2Miw2ICsyNjYs
NyBAQCBfX1pOSzNLSlMxN0RlYnVnZ2VyQ2FsbEZyYW1lOGV2YWx1YXRlRVJLCiBfX1pOSzNLSlMx
OUludGVybmFsRnVuY3Rpb25JbXAyMWltcGxlbWVudHNIYXNJbnN0YW5jZUV2CiBfX1pOSzNLSlM0
TGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszS0pTNE5vZGU4dG9TdHJpbmdFdgorX19aTkszS0pT
NkpTQ2VsbDEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszS0pTNkpTQ2VsbDE3
Z2V0VHJ1bmNhdGVkSW50MzJFUmkKIF9fWk5LM0tKUzZKU0NlbGwxOGdldFRydW5jYXRlZFVJbnQz
MkVSagogX19aTkszS0pTNkpTQ2VsbDlnZXROdW1iZXJFUmQKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsMTAgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoRXhlY1N0YXRlKik7CiAgICAgCi0gICAg
c3RhdGljIEpTVmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1Zh
bHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBz
dGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWxs
YmFja0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogY2FjaGVkVmFsdWVHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIHN0YXRp
Y0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIAogICAgIHZv
aWQqIG1fcHJpdmF0ZURhdGE7CiAgICAgSlNDbGFzc1JlZiBtX2NsYXNzOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAz
NDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46OmluaGVyaXRzKEpTCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSog
SlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U1ZhbHVlKiB2ID0gc2xvdC5zbG90QmFzZSgpOwogICAgIEFTU0VSVCh2KTsKQEAgLTQzNSw3ICs0
MzUsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpjYWNoZWRWCiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3Rh
dGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pbmhlcml0cygmSlNDYWxsYmFja09iamVj
dDo6aW5mbykpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxK
U0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKQEAgLTQ1NiwxNSArNDU2LDE1IEBA
IEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY1YKIH0KIAogdGVtcGxhdGUg
PGNsYXNzIEJhc2U+Ci1KU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5j
dGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0
OjppbmZvKSk7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
Q2FsbGJhY2tPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIAogICAgIC8vIENoZWNrIGZv
ciBjYWNoZWQgb3Igb3ZlcnJpZGUgcHJvcGVydHkuCi0gICAgUHJvcGVydHlTbG90IHNsb3QyOwor
ICAgIFByb3BlcnR5U2xvdCBzbG90Mih0aGlzT2JqKTsKICAgICBpZiAodGhpc09iai0+QmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdDIpKQotICAgICAgICBy
ZXR1cm4gc2xvdDIuZ2V0VmFsdWUoZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgcmV0dXJuIHNsb3QyLmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgICAg
Zm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2JqLT5tX2NsYXNzOyBqc0NsYXNzOyBqc0Ns
YXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3M6
OlN0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNG
dW5jdGlvbnMpIHsKQEAgLTQ4Miw3ICs0ODIsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+OjpzdGF0aWNGCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pbmhlcml0
cygmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3Jl
L1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksNiBAQAogI2luY2x1
ZGUgIm9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJyZWdleHBfb2JqZWN0LmgiCiAKLSNpZiBDT01Q
SUxFUihHQ0MpCi0jZGVmaW5lIFVOTElLRUxZKHgpIFwKLSAgX19idWlsdGluX2V4cGVjdCAoKHgp
LCAwKQotI2Vsc2UKLSNkZWZpbmUgVU5MSUtFTFkoeCkgeAotI2VuZGlmCi0KIG5hbWVzcGFjZSBL
SlMgewogCiAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQpAQCAtMjEwLDEyICsyMDMsMTIgQEAgc3Rh
dGljIGJvb2wgTkVWRVJfSU5MSU5FIHJlc29sdmUoRXhlY1N0YQogICAgIFNjb3BlQ2hhaW5JdGVy
YXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwog
Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKICAgICBkbyB7CiAgICAgICAgIEpTT2JqZWN0KiBv
ID0gKml0ZXI7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBpZiAoby0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBvLCBpZGVudCk7CisgICAgICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKICAgICAgICAgICAg
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQwLDEyICsy
MzMsMTIgQEAgc3RhdGljIGJvb2wgTkVWRVJfSU5MSU5FIHJlc29sdmVfc2tpcChFeAogICAgICAg
ICArK2l0ZXI7CiAgICAgICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAgICAgfQotICAgIFByb3Bl
cnR5U2xvdCBzbG90OwogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyc1twcm9wZXJ0eV07CiAgICAgZG8gewogICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOwor
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5
U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHNsb3QuZ2V0VmFsdWUoZXhlYywgbywgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CiAgICAgICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NSwxMyArMjg4LDEzIEBAIHN0
YXRpYyBib29sIE5FVkVSX0lOTElORSByZXNvbHZlQmFzZUFuZFAKICAgICAKICAgICBBU1NFUlQo
aXRlciAhPSBlbmQpOwogICAgIAotICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgIElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CiAgICAgSlNPYmpl
Y3QqIGJhc2U7CiAgICAgZG8gewogICAgICAgICBiYXNlID0gKml0ZXI7CisgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KGJhc2UpOwogICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBiYXNlLCBpZGVudCk7ICAKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFs
dWUgPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjksMTEgKzMyMiwxMSBAQCBzdGF0
aWMgYm9vbCBORVZFUl9JTkxJTkUgcmVzb2x2ZUJhc2VBbmRGCiAgICAgCiAgICAgQVNTRVJUKGl0
ZXIgIT0gZW5kKTsKICAgICAKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBJZGVudGlmaWVy
JiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgIEpTT2JqZWN0
KiBiYXNlOwogICAgIGRvIHsKICAgICAgICAgYmFzZSA9ICppdGVyOworICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlKTsKICAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVj
LCBpZGVudCwgc2xvdCkpIHsgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVDTUEgMTEuMi4z
IHNheXMgdGhhdCBpZiB3ZSBoaXQgYW4gYWN0aXZhdGlvbiB0aGUgdGhpcyB2YWx1ZSBzaG91bGQg
YmUgbnVsbC4KICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHNlY3Rpb24gMTAuMi4zIHNheXMgdGhh
dCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdmFsdWUgcHJvdmlkZWQKQEAgLTM0Myw3ICszMzYsNyBA
QCBzdGF0aWMgYm9vbCBORVZFUl9JTkxJTkUgcmVzb2x2ZUJhc2VBbmRGCiAgICAgICAgICAgICAv
LyB0aGF0IGluIGhvc3Qgb2JqZWN0cyB5b3UgYWx3YXlzIGdldCBhIHZhbGlkIG9iamVjdCBmb3Ig
dGhpcy4KICAgICAgICAgICAgIC8vIFdlIGFsc28gaGFuZGxlIHdyYXBwZXIgc3Vic3RpdHV0aW9u
IGZvciB0aGUgZ2xvYmFsIG9iamVjdCBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSBiYXNlLT50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIGlkZW50KTsKKyAgICAg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwogICAg
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgICAg
IGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
NjA4LDEwICsxNjAxLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVn
aXN0ZXJCYXNlKTsKICNlbmRpZgotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHJbYmFzZV0u
dS5qc1ZhbHVlLT50b09iamVjdChleGVjKTsKIAogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwotICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBiYXNlT2JqLT5nZXQoZXhlYywgaWRlbnQpOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSByW2Jhc2VdLnUuanNWYWx1ZS0+Z2V0KGV4ZWMsIGlkZW50KTsKICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyT2Zmc2V0ID09IChyIC0gKCpyZWdpc3RlckJhc2UpKSk7CiAgICAgICAgIFZNX0NIRUNL
X0VYQ0VQVElPTigpOwogICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OwpAQCAtMTYz
MywxMSArMTYyNSw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lz
dGVyQmFzZSk7CiAjZW5kaWYKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHJbYmFzZV0u
dS5qc1ZhbHVlLT50b09iamVjdChleGVjKTsKICAgICAgICAgCiAgICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAgIGJhc2VP
YmotPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0udS5qc1ZhbHVlKTsKKyAgICAgICAgcltiYXNl
XS51LmpzVmFsdWUtPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0udS5qc1ZhbHVlKTsKICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0ID09IChyIC0gKCpyZWdpc3RlckJhc2UpKSk7CiAgICAg
ICAgIAogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKQEAgLTE2NzcsMTQgKzE2NjcsMTYg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQg
YmFzZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gcltiYXNlXS51Lmpz
VmFsdWUtPnRvT2JqZWN0KGV4ZWMpOyAvLyBtYXkgdGhyb3cKKyAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gcltiYXNlXS51LmpzVmFsdWU7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlKiBz
dWJzY3JpcHQgPSByW3Byb3BlcnR5XS51LmpzVmFsdWU7CiAgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dDsKICAgICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMy
KGkpKQotICAgICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+Z2V0KGV4ZWMsIGkpOworICAgICAg
ICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywgaSk7CiAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMp
OyAvLyBtYXkgdGhyb3cKKyAgICAgICAgCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5
OwogICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAg
ICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOyAvLyBJZiB0b09iamVjdCB0aHJldywgd2UgbXVzdCBu
b3QgY2FsbCB0b1N0cmluZywgd2hpY2ggbWF5IGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUKQEAgLTE3
MTYsMTQgKzE3MDgsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICBpbnQgcHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCB2YWx1ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU09iamVjdCogYmFzZU9i
aiA9IHJbYmFzZV0udS5qc1ZhbHVlLT50b09iamVjdChleGVjKTsKKyAgICAgICAgSlNWYWx1ZSog
YmFzZVZhbHVlID0gcltiYXNlXS51LmpzVmFsdWU7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVl
KiBzdWJzY3JpcHQgPSByW3Byb3BlcnR5XS51LmpzVmFsdWU7CiAKICAgICAgICAgdWludDMyX3Qg
aTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKGkpKQotICAgICAgICAgICAgYmFz
ZU9iai0+cHV0KGV4ZWMsIGksIHJbdmFsdWVdLnUuanNWYWx1ZSk7CisgICAgICAgICAgICBiYXNl
VmFsdWUtPnB1dChleGVjLCBpLCByW3ZhbHVlXS51LmpzVmFsdWUpOwogICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZVZhbHVlLT50b09iamVjdChleGVj
KTsKKwogICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eTsKICAgICAgICAgICAgIGlmIChz
dWJzY3JpcHQtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsgLy8gSWYgdG9PYmplY3QgdGhyZXcsIHdlIG11c3Qgbm90IGNhbGwgdG9TdHJpbmcsIHdo
aWNoIG1heSBleGVjdXRlIGFyYml0cmFyeSBjb2RlCkBAIC0xOTAyLDcgKzE4OTYsNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIC8vIHRoaXMgaW5z
dHJ1Y3Rpb24gYXMgYSBub3JtYWwgZnVuY3Rpb24gY2FsbCwgc3VwcGx5aW5nIHRoZSBwcm9wZXIg
J3RoaXMnCiAgICAgICAgIC8vIHZhbHVlLgogICAgICAgICB2UEMgLT0gNTsKLSAgICAgICAgclti
YXNlXS51LmpzVmFsdWUgPSBiYXNlVmFsLT50b09iamVjdChleGVjKS0+dG9UaGlzT2JqZWN0KGV4
ZWMpOworICAgICAgICByW2Jhc2VdLnUuanNWYWx1ZSA9IGJhc2VWYWwtPnRvVGhpc09iamVjdChl
eGVjKTsKIAogI2lmIEhBVkUoQ09NUFVURURfR09UTykKICAgICAgICAgLy8gSGFjayBhcm91bmQg
Z2NjIHBlcmZvcm1hbmNlIHF1aXJrIGJ5IHBlcmZvcm1pbmcgYW4gaW5kaXJlY3QgZ290bwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsOCBAQCBuYW1l
c3BhY2UgS0pTICB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ1RhYmxl
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9wZXJUaHJlYWREYXRhLT5zdHJpbmdU
YWJsZTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciBy
ZXF1aXJlZCBmb3IgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUgd2l0aCBnY2MgMy4KLSAgICAgICAg
RXhlY1N0YXRlKCkge307CisgICAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IgcmVxdWlyZWQg
Zm9yIGdjYyAzLgorICAgICAgICBFeGVjU3RhdGUoKSB7IH0KIAogICAgICAgICBFeGVjU3RhdGUo
RXhlY1N0YXRlKiwgTWFjaGluZSosIFJlZ2lzdGVyRmlsZSosIFNjb3BlQ2hhaW5Ob2RlKiwgaW50
IGNhbGxGcmFtZU9mZnNldCk7CiAKQEAgLTEyNiwxMDkgKzEyNiw3IEBAIG5hbWVzcGFjZSBLSlMg
IHsKICAgICAgICAgaW50IG1fY2FsbEZyYW1lT2Zmc2V0OyAvLyBBIG5lZ2F0aXZlIG9mZnNldCBp
bmRpY2F0ZXMgYSBub24tZnVuY3Rpb24gc2NvcGUuCiAgICAgfTsKIAotICAgIC8vIFRoaXMgY29k
ZSBpcyBub3cgZGVmdW5jdDoKLQogICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFs
Q29kZSwgRnVuY3Rpb25Db2RlIH07Ci0gICAgY2xhc3MgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUg
OiBwdWJsaWMgRXhlY1N0YXRlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgcHVzaFN3aXRj
aCgpIHsgbV9zd2l0Y2hEZXB0aCsrOyB9Ci0gICAgICAgIHZvaWQgcG9wU3dpdGNoKCkgeyBtX3N3
aXRjaERlcHRoLS07IH0KLSAgICAgICAgYm9vbCBpblN3aXRjaCgpIGNvbnN0IHsgcmV0dXJuICht
X3N3aXRjaERlcHRoID4gMCk7IH0KLQotICAgICAgICAvLyBUaGVzZSBhcmUgb25seSB2YWxpZCBy
aWdodCBhZnRlciBjYWxsaW5nIGV4ZWN1dGUoKS4KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsZXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wbGV0aW9uVHlwZTsgfQotICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBicmVha09yQ29udGludWVUYXJnZXQoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVHlwZSA9PSBCcmVhayB8fCBtX2NvbXBsZXRp
b25UeXBlID09IENvbnRpbnVlKTsKLSAgICAgICAgICAgIHJldHVybiAqbV9icmVha09yQ29udGlu
dWVUYXJnZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmx5IGZvciB1c2UgaW4gdGhlIGlt
cGxlbWVudGF0aW9uIG9mIGV4ZWN1dGUoKS4KLSAgICAgICAgdm9pZCBzZXRDb21wbGV0aW9uVHlw
ZShDb21wbFR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0g
QnJlYWspOwotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQ29udGludWUpOwotICAgICAgICAg
ICAgbV9jb21wbGV0aW9uVHlwZSA9IHR5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSog
c2V0Tm9ybWFsQ29tcGxldGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaGFk
RXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IE5vcm1hbDsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNldE5vcm1h
bENvbXBsZXRpb24oSlNWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghaGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IE5vcm1h
bDsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICBKU1ZhbHVl
KiBzZXRCcmVha0NvbXBsZXRpb24oY29uc3QgSWRlbnRpZmllciogdGFyZ2V0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIG1fY29t
cGxldGlvblR5cGUgPSBCcmVhazsKLSAgICAgICAgICAgIG1fYnJlYWtPckNvbnRpbnVlVGFyZ2V0
ID0gdGFyZ2V0OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgSlNW
YWx1ZSogc2V0Q29udGludWVDb21wbGV0aW9uKGNvbnN0IElkZW50aWZpZXIqIHRhcmdldCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgICAg
ICBtX2NvbXBsZXRpb25UeXBlID0gQ29udGludWU7Ci0gICAgICAgICAgICBtX2JyZWFrT3JDb250
aW51ZVRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0g
ICAgICAgIEpTVmFsdWUqIHNldFJldHVyblZhbHVlQ29tcGxldGlvbihKU1ZhbHVlKiByZXR1cm5W
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24oKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9u
VHlwZSA9IFJldHVyblZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAg
ICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNldFRocm93Q29tcGxldGlvbihKU1ZhbHVlKiBleGNl
cHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBtX2NvbXBsZXRpb25U
eXBlID0gVGhyb3c7Ci0gICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0g
ICAgICAgIEpTVmFsdWUqIHNldEludGVycnVwdGVkQ29tcGxldGlvbigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0
aW9uVHlwZSA9IEludGVycnVwdGVkOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LSAgICAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSB7IHJldHVybiBtX2NvZGVUeXBlOyB9Ci0gICAg
ICAgIHZvaWQgcHVzaEl0ZXJhdGlvbigpIHsgbV9pdGVyYXRpb25EZXB0aCsrOyB9Ci0gICAgICAg
IHZvaWQgcG9wSXRlcmF0aW9uKCkgeyBtX2l0ZXJhdGlvbkRlcHRoLS07IH0KLSAgICAgICAgYm9v
bCBpbkl0ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChtX2l0ZXJhdGlvbkRlcHRoID4gMCk7IH0K
LSAgICAgICAgTGFiZWxTdGFjayYgc2VlbkxhYmVscygpIHsgcmV0dXJuIG1fbGFiZWxTdGFjazsg
fQotICAgICAgICB2b2lkIHB1c2hTY29wZShKU09iamVjdCogcykgeyBtX3Njb3BlQ2hhaW4ucHVz
aChzKTsgfQotICAgICAgICB2b2lkIHBvcFNjb3BlKCkgeyBtX3Njb3BlQ2hhaW4ucG9wKCk7IH0K
LSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QoKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV92YXJpYWJsZU9iamVjdDsgfQotICAgICAgICB2b2lk
IHNldFZhcmlhYmxlT2JqZWN0KEpTVmFyaWFibGVPYmplY3QqIHYpIHsgbV92YXJpYWJsZU9iamVj
dCA9IHY7IH0KLSAgICAgICAgRXhlY1N0YXRlKiBjYWxsaW5nRXhlY1N0YXRlKCkgeyByZXR1cm4g
bV9jYWxsaW5nRXhlYzsgfQotICAgICAgICBTY29wZU5vZGUqIHNjb3BlTm9kZSgpIHsgcmV0dXJu
IG1fc2NvcGVOb2RlOyB9Ci0gICAgICAgIGNvbnN0IExpc3QqIGFyZ3VtZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fYXJndW1lbnRzOyB9Ci0gICAgICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KLSAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0
b3JhZ2UoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gKihMb2NhbFN0b3JhZ2UqKTA7
IH0KLSAgICAgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2UoTG9jYWxTdG9yYWdlKikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQotICAgICAgICBTY29wZUNoYWluJiBzY29wZUNoYWluKCkgeyByZXR1
cm4gbV9zY29wZUNoYWluOyB9Ci0gICAgICAgIEpTT2JqZWN0KiB0aGlzVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3RoaXNWYWx1ZTsgfQotICAgICAgICAKLSAgICAgICAgQ29tcGxUeXBlIG1fY29t
cGxldGlvblR5cGU7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG1fYnJlYWtPckNvbnRpbnVl
VGFyZ2V0OwotICAgICAgICBpbnQgbV9zd2l0Y2hEZXB0aDsKLSAgICAgICAgQ29kZVR5cGUgbV9j
b2RlVHlwZTsKLSAgICAgICAgaW50IG1faXRlcmF0aW9uRGVwdGg7Ci0gICAgICAgIExhYmVsU3Rh
Y2sgbV9sYWJlbFN0YWNrOwotICAgICAgICBTY29wZUNoYWluTm9kZSBtX2lubGluZVNjb3BlQ2hh
aW5Ob2RlOwotICAgICAgICBTY29wZUNoYWluIG1fc2NvcGVDaGFpbjsKLSAgICAgICAgSlNWYXJp
YWJsZU9iamVjdCogbV92YXJpYWJsZU9iamVjdDsKLSAgICAgICAgU2NvcGVOb2RlKiBtX3Njb3Bl
Tm9kZTsKLSAgICAgICAgY29uc3QgTGlzdCogbV9hcmd1bWVudHM7Ci0gICAgICAgIEZ1bmN0aW9u
SW1wKiBtX2Z1bmN0aW9uOwotICAgICAgICBFeGVjU3RhdGUqIG1fY2FsbGluZ0V4ZWM7Ci0gICAg
ICAgIEpTT2JqZWN0KiBtX3RoaXNWYWx1ZTsKLSAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBLSlMK
IApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDM0MTUxKQor
KysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDcgKzc0LDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChFeAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChKU1ZhbHVlKiogbG9jYXRpb24gPSBnZXRE
aXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWVTbG90
KHRoaXMsIGxvY2F0aW9uKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRpb24pOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQCBib29sIEpT
QWN0aXZhdGlvbjo6aXNEeW5hbWljU2NvcGUoKSBjb25zCiAgICAgcmV0dXJuIGQoKS0+ZnVuY3Rp
b25Cb2R5LT51c2VzRXZhbCgpOwogfQogCi1KU1ZhbHVlKiBKU0FjdGl2YXRpb246OmFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRz
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxK
U0FjdGl2YXRpb24qPihzbG90LnNsb3RCYXNlKCkpOwogICAgIGlmICghdGhpc09iai0+ZCgpLT5h
cmd1bWVudHNPYmplY3QpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lv
biAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBhcmd1bWVudHNPYmplY3Q7CiAgICAgICAgIH07CiAgICAgICAgIAotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigpOwogICAgICAgICBORVZFUl9JTkxJTkUgSlNPYmpl
Y3QqIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqKTsKIApJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgp
KTsKICAgICAgICAgaWYgKCFlbnRyeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWVTbG90KHRoaXMsICZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KCZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
MCw3ICsxMTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUudXN0cmlu
ZygpLnJlcCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsICZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KCZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsK
ICAgICAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L2FycmF5X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYXJy
YXlfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9h
cnJheV9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBKU1Zh
bHVlKiBBcnJheUluc3RhbmNlOjpnZXRJdGVtKHVuc2lnbmVkCiAgICAgcmV0dXJuIHZhbHVlID8g
dmFsdWUgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBBcnJheUluc3RhbmNlOjpsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogQXJyYXlJbnN0YW5jZTo6bGVuZ3RoR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PEFycmF5SW5zdGFuY2UqPihzbG90
LnNsb3RCYXNlKCkpLT5tX2xlbmd0aCk7CiB9CkBAIC0xMzcsNyArMTM3LDcgQEAgQUxXQVlTX0lO
TElORSBib29sIEFycmF5SW5zdGFuY2U6OmlubGluZQogewogICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKIAotICAgIGlmIChpID49IG1fbGVuZ3RoKSB7CisgICAgaWYgKFVO
TElLRUxZKGkgPj0gbV9sZW5ndGgpKSB7CiAgICAgICAgIGlmIChpID4gbWF4QXJyYXlJbmRleCkK
ICAgICAgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShpKSwgc2xvdCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NiwxNCArMTQ2LDE0
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBBcnJheUluc3RhbmNlOjppbmxpbmUKICAgICBpZiAoaSA8
IG1fdmVjdG9yTGVuZ3RoKSB7CiAgICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVlU2xvdCk7CisgICAgICAgICAgICBzbG90LnNldFZh
bHVlU2xvdCgmdmFsdWVTbG90KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIGlmIChpID49IHNwYXJzZUFycmF5Q3V0b2ZmKSB7CiAg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
KTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJml0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWVTbG90KCZpdC0+c2Vjb25kKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Fy
cmF5X2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2lu
c3RhbmNlLmgJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2lu
c3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdm9pZCBzZXRMYXp5Q3JlYXRpb25EYXRhKHZvaWQqKTsKIAogICBwcml2YXRlOgotICAg
IHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUq
IGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHZvaWQgc2V0TGVu
Z3RoKHVuc2lnbmVkKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCShyZXZp
c2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlTbG90KAogLy8gSGVscGVyIGZ1bmN0aW9uCiBzdGF0aWMgSlNWYWx1ZSogZ2V0UHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqLCB1bnNpZ25lZCBpbmRleCkKIHsK
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmopOwogICAg
IGlmICghb2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBvYmosIGluZGV4KTsKKyAg
ICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CiB9CiAKIEpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYpCkBAIC01MDAsMTIgKzUwMCwxMiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0Zp
bHRlcihFeGVjU3RhdGUqCiAgICAgdW5zaWduZWQgZmlsdGVySW5kZXggPSAwOwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iaik7CiAKICAgICAgICAgaWYg
KCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywgc2xvdCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCB0aGlz
T2JqLCBrKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgayk7CiAK
ICAgICAgICAgTGlzdCBlYWNoQXJndW1lbnRzOwogCkBAIC01MzYsMTEgKzUzNiwxMSBAQCBKU1Zh
bHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4CiAgICAgSlNPYmplY3QqIHJlc3Vs
dEFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIG1hcEFyZ3MpKTsKIAogICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
OyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXNPYmopOwogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChl
eGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpTVmFsdWUq
IHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHRoaXNPYmosIGspOworICAgICAgICBKU1ZhbHVlKiB2
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBrKTsKIAogICAgICAgICBMaXN0IGVhY2hBcmd1bWVudHM7
CiAKQEAgLTU3MywxNCArNTczLDE0IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhl
Y1N0YXRlKiAKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhp
c09iaik7CiAKICAgICAgICAgaWYgKCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywg
c2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMaXN0IGVhY2hBcmd1bWVu
dHM7CiAKLSAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1ZShleGVjLCB0
aGlzT2JqLCBrKSk7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUo
ZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CiAg
ICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCkBAIC02MDYsMTIgKzYwNiwx
MiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlCiAKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5n
dGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmopOwogICAgICAgICBpZiAo
IXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIExpc3QgZWFjaEFyZ3VtZW50czsKLSAgICAgICAgZWFjaEFyZ3Vt
ZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1ZShleGVjLCB0aGlzT2JqLCBrKSk7CisgICAgICAgIGVh
Y2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhlYywgaykpOwogICAgICAgICBlYWNo
QXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBw
ZW5kKHRoaXNPYmopOwogCkBAIC02MzMsMTIgKzYzMywxMiBAQCBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY1NvbWUoRXhlY1N0YXRlKiBlCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwog
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpOyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KHRoaXNPYmopOwogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xv
dChleGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExpc3Qg
ZWFjaEFyZ3VtZW50czsKLSAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1
ZShleGVjLCB0aGlzT2JqLCBrKSk7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3Qu
Z2V0VmFsdWUoZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJl
cihrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMjEgKzk5LDIxIEBAIEpTVmFs
dWUqIEZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGUKICAgICB9CiB9CiAKLUpTVmFsdWUq
IEZ1bmN0aW9uSW1wOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBG
dW5jdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBGdW5jdGlvbkltcCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBB
U1NFUlQoZXhlYy0+bWFjaGluZSgpKTsKICAgICByZXR1cm4gZXhlYy0+bWFjaGluZSgpLT5yZXRy
aWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKIH0KIAotSlNWYWx1ZSogRnVuY3Rpb25JbXA6
OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEZ1bmN0aW9uSW1wOjpjYWxs
ZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIEZ1bmN0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25JbXAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEFTU0VSVChleGVjLT5tYWNoaW5l
KCkpOwogICAgIHJldHVybiBleGVjLT5tYWNoaW5lKCktPnJldHJpZXZlQ2FsbGVyKGV4ZWMsIHRo
aXNPYmopOwogfQogCi1KU1ZhbHVlKiBGdW5jdGlvbkltcDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUqIEZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBGdW5jdGlvbklt
cCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+Ym9keS0+cGFyYW1ldGVycygpLnNpemUoKSk7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBcmd1bWVudHM6Om1hcmsoKSAKICAgICBfYWN0aXZh
dGlvbk9iamVjdC0+bWFyaygpOwogfQogCi1KU1ZhbHVlKiBBcmd1bWVudHM6Om1hcHBlZEluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEFyZ3VtZW50czo6
bWFwcGVkSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgQXJndW1lbnRzKiB0aGlz
T2JqID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJu
IHRoaXNPYmotPl9hY3RpdmF0aW9uT2JqZWN0LT5nZXQoZXhlYywgdGhpc09iai0+aW5kZXhUb05h
bWVNYXBbcHJvcGVydHlOYW1lXSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkocmV2aXNpb24g
MzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtODYsOSArODYsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0ZToKICAgICBTY29wZUNo
YWluIF9zY29wZTsKIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIEpTVmFsdWUqIGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwogICB9OwogCiAgIGNsYXNzIEluZGV4VG9OYW1lTWFwIHsKQEAgLTExNSw3ICsxMTUsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUqIG1hcHBlZEluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUqIG1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAg
SlNBY3RpdmF0aW9uKiBfYWN0aXZhdGlvbk9iamVjdDsKICAgICBtdXRhYmxlIEluZGV4VG9OYW1l
TWFwIGluZGV4VG9OYW1lTWFwOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CShyZXZpc2lvbiAzNDE1
MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTEw
OTQsMzQgKzEwOTQsMTEgQEAgU291cmNlRWxlbWVudDoKIAogc3RhdGljIEFkZE5vZGUqIG1ha2VB
ZGROb2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQpCiB7Ci0g
ICAgSlNUeXBlIHQxID0gbGVmdC0+ZXhwZWN0ZWRSZXR1cm5UeXBlKCk7Ci0gICAgSlNUeXBlIHQy
ID0gcmlnaHQtPmV4cGVjdGVkUmV0dXJuVHlwZSgpOwotCi0gICAgaWYgKHQxID09IE51bWJlclR5
cGUgJiYgdDIgPT0gTnVtYmVyVHlwZSkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGROdW1iZXJzTm9k
ZShsZWZ0LCByaWdodCk7Ci0gICAgaWYgKHQxID09IFN0cmluZ1R5cGUgJiYgdDIgPT0gU3RyaW5n
VHlwZSkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRTdHJpbmdzTm9kZShsZWZ0LCByaWdodCk7Ci0g
ICAgaWYgKHQxID09IFN0cmluZ1R5cGUpCi0gICAgICAgIHJldHVybiBuZXcgQWRkU3RyaW5nTGVm
dE5vZGUobGVmdCwgcmlnaHQpOwotICAgIGlmICh0MiA9PSBTdHJpbmdUeXBlKQotICAgICAgICBy
ZXR1cm4gbmV3IEFkZFN0cmluZ1JpZ2h0Tm9kZShsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIG5l
dyBBZGROb2RlKGxlZnQsIHJpZ2h0KTsKIH0KIAogc3RhdGljIExlc3NOb2RlKiBtYWtlTGVzc05v
ZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKIHsKLSAgICBK
U1R5cGUgdDEgPSBsZWZ0LT5leHBlY3RlZFJldHVyblR5cGUoKTsKLSAgICBKU1R5cGUgdDIgPSBy
aWdodC0+ZXhwZWN0ZWRSZXR1cm5UeXBlKCk7Ci0gICAgCi0gICAgaWYgKHQxID09IFN0cmluZ1R5
cGUgJiYgdDIgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgcmV0dXJuIG5ldyBMZXNzU3RyaW5nc05v
ZGUobGVmdCwgcmlnaHQpOwotCi0gICAgLy8gVGhlcmUgYXJlIGNlcnRhaW5seSBtb3JlIGVmZmlj
aWVudCB3YXlzIHRvIGRvIHRoaXMgdHlwZSBjaGVjayBpZiBuZWNlc3NhcnkKLSAgICBpZiAodDEg
PT0gTnVtYmVyVHlwZSB8fCB0MSA9PSBCb29sZWFuVHlwZSB8fCB0MSA9PSBVbmRlZmluZWRUeXBl
IHx8IHQxID09IE51bGxUeXBlIHx8Ci0gICAgICAgIHQyID09IE51bWJlclR5cGUgfHwgdDIgPT0g
Qm9vbGVhblR5cGUgfHwgdDIgPT0gVW5kZWZpbmVkVHlwZSB8fCB0MiA9PSBOdWxsVHlwZSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBMZXNzTnVtYmVyc05vZGUobGVmdCwgcmlnaHQpOwotCi0gICAgLy8g
TmVpdGhlciBpcyBjZXJ0YWluIHRvIGJlIGEgbnVtYmVyLCBub3Igd2VyZSBib3RoIGNlcnRhaW4g
dG8gYmUgc3RyaW5ncywgc28gd2UgdXNlIHRoZSBkZWZhdWx0IChzbG93KSBpbXBsZW1lbnRhdGlv
bi4KICAgICByZXR1cm4gbmV3IExlc3NOb2RlKGxlZnQsIHJpZ2h0KTsKIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJuYWwuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9pbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDExIEBAIEpTT2JqZWN0
KiBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gbmV3IFN0cmluZ0lu
c3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCksIGNv
bnN0X2Nhc3Q8U3RyaW5nSW1wKj4odGhpcykpOwogfQogCitKU09iamVjdCogU3RyaW5nSW1wOjp0
b1RoaXNPYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBuZXcgU3Ry
aW5nSW5zdGFuY2UoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUo
KSwgY29uc3RfY2FzdDxTdHJpbmdJbXAqPih0aGlzKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEpTVHlwZSBOdW1iZXJJbXA6OnR5cGUoKSBjb25zdApAQCAtMTI2LDYgKzEzMSwx
MyBAQCBKU09iamVjdCAqTnVtYmVySW1wOjp0b09iamVjdChFeGVjU3RhdGUgCiAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU09iamVjdCAqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
ckNvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKIH0KIAorSlNPYmplY3QqIE51
bWJlckltcDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBMaXN0
IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoY29uc3RfY2FzdDxOdW1iZXJJbXAqPih0aGlzKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5udW1iZXJDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgYXJncykpOworfQorCiBi
b29sIE51bWJlckltcDo6Z2V0VUludDMyKHVpbnQzMl90JiB1aW50MzIpIGNvbnN0CiB7CiAgICAg
dWludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbCk7CkBAIC0xOTcsNiArMjA5LDM0IEBA
IEpTT2JqZWN0ICpHZXR0ZXJTZXR0ZXJJbXA6OnRvT2JqZWN0KEV4ZWMKICAgICByZXR1cm4ganNO
dWxsKCktPnRvT2JqZWN0KGV4ZWMpOwogfQogCitib29sIEdldHRlclNldHRlckltcDo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBHZXR0ZXJTZXR0ZXJJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNp
Z25lZCwgUHJvcGVydHlTbG90JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR2V0dGVyU2V0dGVySW1wOjpwdXQoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEdldHRlclNldHRlckltcDo6cHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBK
U1ZhbHVlKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSlNPYmplY3QqIEdl
dHRlclNldHRlckltcDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBMYWJlbFN0YWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIGJvb2wgTGFiZWxTdGFjazo6cHVzaChjb25zdCBJZGVudGlmaWVyICZpZCkKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcm5hbC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3Q7CiAgICAgdmlydHVhbCBKU09iamVjdCAqdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25z
dDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAg
CisgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0Owor
CiAgICAgVVN0cmluZyB2YWw7CiAgIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9sZXhl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmNwcAkocmV2aXNp
b24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNiArMTAxLDI0IEBAIExleGVyOjp+TGV4ZXIoKQogICAgIGRlbGV0ZVtdIG1haW5U
YWJsZS50YWJsZTsKIH0KIAoraW5saW5lIHZvaWQgTGV4ZXI6OnNoaWZ0KCkKK3sKKyAgICAvLyBF
Q01BLTI2MiBjYWxscyBmb3Igc3RyaXBwaW5nIENmIGNoYXJhY3RlcnMgaGVyZSwgYnV0IHdlIG9u
bHkgZG8gdGhpcyBmb3IgQk9NLAorICAgIC8vIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5MzE+LgorCisgICAgY3VycmVudCA9IG5leHQxOworICAgIG5leHQx
ID0gbmV4dDI7CisgICAgbmV4dDIgPSBuZXh0MzsKKyAgICBkbyB7CisgICAgICAgIGlmIChwb3Mg
Pj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICAgIG5leHQzID0gLTE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBuZXh0MyA9IGNvZGVbcG9z
KytdOworICAgIH0gd2hpbGUgKG5leHQzID09IDB4RkVGRik7Cit9CisKIHZvaWQgTGV4ZXI6OnNl
dENvZGUoaW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlKQogewogICAgIHl5bGluZW5vID0gMSArIHN0YXJ0aW5nTGluZU51bWJlcjsKQEAgLTEy
MCwyNyArMTM4LDEwIEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoaW50IHN0YXJ0aW5nTGluZU51bWIK
ICAgICBhdExpbmVTdGFydCA9IHRydWU7CiAKICAgICAvLyByZWFkIGZpcnN0IGNoYXJhY3RlcnMK
LSAgICBzaGlmdCg0KTsKLX0KLQotdm9pZCBMZXhlcjo6c2hpZnQodW5zaWduZWQgcCkKLXsKLSAg
ICAvLyBFQ01BLTI2MiBjYWxscyBmb3Igc3RyaXBwaW5nIENmIGNoYXJhY3RlcnMgaGVyZSwgYnV0
IHdlIG9ubHkgZG8gdGhpcyBmb3IgQk9NLAotICAgIC8vIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzE+LgotCi0gICAgd2hpbGUgKHAtLSkgewotICAgICAg
ICBjdXJyZW50ID0gbmV4dDE7Ci0gICAgICAgIG5leHQxID0gbmV4dDI7Ci0gICAgICAgIG5leHQy
ID0gbmV4dDM7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChwb3MgPj0gbGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgbmV4dDMgPSAtMTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5leHQzID0g
Y29kZVtwb3MrK107Ci0gICAgICAgIH0gd2hpbGUgKG5leHQzID09IDB4RkVGRik7Ci0gICAgfQor
ICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiB9
CiAKIC8vIGNhbGxlZCBvbiBlYWNoIG5ldyBsaW5lCkBAIC0xODcsMTcgKzE4OCwxNyBAQCBpbnQg
TGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgewogICAgICAgICBza2lwTEYgPSBm
YWxzZTsKICAgICAgICAgc2tpcENSID0gZmFsc2U7Ci0gICAgICAgIHNoaWZ0KDEpOworICAgICAg
ICBzaGlmdCgpOwogICAgIH0KICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBTdGFydDoK
ICAgICAgIGlmIChpc1doaXRlU3BhY2UoKSkgewogICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gJy8nICYmIG5leHQxID09ICcvJykgewotICAgICAgICBz
aGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgICAgc3RhdGUgPSBJblNpbmdsZUxpbmVD
b21tZW50OwogICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09ICcvJyAmJiBuZXh0MSA9PSAnKicp
IHsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgIHN0YXRlID0g
SW5NdWx0aUxpbmVDb21tZW50OwogICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09IC0xKSB7CiAg
ICAgICAgIGlmICghdGVybWluYXRvciAmJiAhZGVsaW1pdGVkKSB7CkBAIC0yMzQsMjUgKzIzNSwy
NyBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgICAgIC8vIDwhLS0g
bWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgY29tbWVudCAoZm9yIHd3dyB1c2FnZSkKICAg
ICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnPCcgJiYgbmV4dDEgPT0gJyEnICYmCiAgICAgICAg
ICAgICAgICAgIG5leHQyID09ICctJyAmJiBuZXh0MyA9PSAnLScpIHsKLSAgICAgICAgc2hpZnQo
Myk7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNoaWZ0KCk7
CiAgICAgICAgIHN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKICAgICAgICAgLy8gc2FtZSBm
b3IgLS0+CiAgICAgICB9IGVsc2UgaWYgKGF0TGluZVN0YXJ0ICYmIGN1cnJlbnQgPT0gJy0nICYm
IG5leHQxID09ICctJyAmJiAgbmV4dDIgPT0gJz4nKSB7Ci0gICAgICAgIHNoaWZ0KDIpOworICAg
ICAgICBzaGlmdCgpOworICAgICAgICBzaGlmdCgpOwogICAgICAgICBzdGF0ZSA9IEluU2luZ2xl
TGluZUNvbW1lbnQ7CiAgICAgICB9IGVsc2UgewogICAgICAgICB0b2tlbiA9IG1hdGNoUHVuY3R1
YXRvcihsdmFscC0+aW50VmFsdWUsIGN1cnJlbnQsIG5leHQxLCBuZXh0MiwgbmV4dDMpOwogICAg
ICAgICBpZiAodG9rZW4gIT0gLTEpIHsKICAgICAgICAgICBzZXREb25lKE90aGVyKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyAgICAgIGNlcnIgPDwgImVuY291bnRlcmVkIHVua25v
d24gY2hhcmFjdGVyIiA8PCBlbmRsOwogICAgICAgICAgIHNldERvbmUoQmFkKTsKICAgICAgICAg
fQogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblN0cmluZzoKICAgICAgIGlmIChj
dXJyZW50ID09IHN0cmluZ1R5cGUpIHsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0
KCk7CiAgICAgICAgIHNldERvbmUoU3RyaW5nKTsKICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVy
bWluYXRvcigpIHx8IGN1cnJlbnQgPT0gLTEpIHsKICAgICAgICAgc2V0RG9uZShCYWQpOwpAQCAt
MjY1LDE0ICsyNjgsMTQgQEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAg
IC8vIEVzY2FwZSBTZXF1ZW5jZXMgaW5zaWRlIG9mIHN0cmluZ3MKICAgICBjYXNlIEluRXNjYXBl
U2VxdWVuY2U6CiAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGN1cnJlbnQpKSB7Ci0gICAgICAgIGlm
IChjdXJyZW50ID49ICcwJyAmJiBjdXJyZW50IDw9ICczJyAmJgotICAgICAgICAgICAgaXNPY3Rh
bERpZ2l0KG5leHQxKSAmJiBpc09jdGFsRGlnaXQobmV4dDIpKSB7CisgICAgICAgIGlmIChjdXJy
ZW50ID49ICcwJyAmJiBjdXJyZW50IDw9ICczJyAmJiBpc09jdGFsRGlnaXQobmV4dDEpICYmIGlz
T2N0YWxEaWdpdChuZXh0MikpIHsKICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwoY3Vy
cmVudCwgbmV4dDEsIG5leHQyKSk7Ci0gICAgICAgICAgc2hpZnQoMik7CisgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICBzaGlmdCgpOwogICAgICAgICAgIHN0YXRlID0gSW5TdHJpbmc7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNPY3RhbERpZ2l0KGN1cnJlbnQpICYmIGlzT2N0YWxEaWdpdChu
ZXh0MSkpIHsKICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwoJzAnLCBjdXJyZW50LCBu
ZXh0MSkpOwotICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgIHNoaWZ0KCk7CiAgICAgICAg
ICAgc3RhdGUgPSBJblN0cmluZzsKICAgICAgICAgfSBlbHNlIGlmIChpc09jdGFsRGlnaXQoY3Vy
cmVudCkpIHsKICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwoJzAnLCAnMCcsIGN1cnJl
bnQpKTsKQEAgLTI5NiwxMCArMjk5LDEwIEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lk
KiBwMikKICAgICAgIGlmIChpc0hleERpZ2l0KGN1cnJlbnQpICYmIGlzSGV4RGlnaXQobmV4dDEp
KSB7CiAgICAgICAgIHN0YXRlID0gSW5TdHJpbmc7CiAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRI
ZXgoY3VycmVudCwgbmV4dDEpKTsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0KCk7
CiAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gc3RyaW5nVHlwZSkgewogICAgICAgICByZWNv
cmQxNigneCcpOwotICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgICAg
c2V0RG9uZShTdHJpbmcpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgcmVjb3JkMTYoJ3gnKTsK
QEAgLTMxMCwxMSArMzEzLDEzIEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lkKiBwMikK
ICAgICBjYXNlIEluVW5pY29kZUVzY2FwZToKICAgICAgIGlmIChpc0hleERpZ2l0KGN1cnJlbnQp
ICYmIGlzSGV4RGlnaXQobmV4dDEpICYmIGlzSGV4RGlnaXQobmV4dDIpICYmIGlzSGV4RGlnaXQo
bmV4dDMpKSB7CiAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRVbmljb2RlKGN1cnJlbnQsIG5leHQx
LCBuZXh0MiwgbmV4dDMpKTsKLSAgICAgICAgc2hpZnQoMyk7CisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgIHN0YXRlID0gSW5TdHJp
bmc7CiAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gc3RyaW5nVHlwZSkgewogICAgICAgICBy
ZWNvcmQxNigndScpOwotICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAg
ICAgc2V0RG9uZShTdHJpbmcpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0RG9uZShCYWQp
OwpAQCAtMzQwLDcgKzM0NSw3IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lkKiBwMikK
ICAgICAgICAgbmV4dExpbmUoKTsKICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnKicgJiYg
bmV4dDEgPT0gJy8nKSB7CiAgICAgICAgIHN0YXRlID0gU3RhcnQ7Ci0gICAgICAgIHNoaWZ0KDEp
OworICAgICAgICBzaGlmdCgpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbklk
ZW50aWZpZXJPcktleXdvcmQ6CkBAIC00NDMsNyArNDQ4LDkgQEAgaW50IExleGVyOjpsZXgodm9p
ZCogcDEsIHZvaWQqIHAyKQogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIHRva2VuID0g
Y29udmVydFVuaWNvZGUoY3VycmVudCwgbmV4dDEsIG5leHQyLCBuZXh0Myk7Ci0gICAgICBzaGlm
dCgzKTsKKyAgICAgIHNoaWZ0KCk7CisgICAgICBzaGlmdCgpOworICAgICAgc2hpZnQoKTsKICAg
ICAgIGlmICghaXNJZGVudFN0YXJ0KHRva2VuKSkgewogICAgICAgICBzZXREb25lKEJhZCk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDU3LDcgKzQ2NCw5IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAx
LCB2b2lkKiBwMikKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICB0b2tlbiA9IGNvbnZl
cnRVbmljb2RlKGN1cnJlbnQsIG5leHQxLCBuZXh0MiwgbmV4dDMpOwotICAgICAgc2hpZnQoMyk7
CisgICAgICBzaGlmdCgpOworICAgICAgc2hpZnQoKTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICBp
ZiAoIWlzSWRlbnRQYXJ0KHRva2VuKSkgewogICAgICAgICBzZXREb25lKEJhZCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtNDcxLDcgKzQ4MCw3IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lk
KiBwMikKIAogICAgIC8vIG1vdmUgb24gdG8gdGhlIG5leHQgY2hhcmFjdGVyCiAgICAgaWYgKCFk
b25lKQotICAgICAgc2hpZnQoMSk7CisgICAgICBzaGlmdCgpOwogICAgIGlmIChzdGF0ZSAhPSBT
dGFydCAmJiBzdGF0ZSAhPSBJblNpbmdsZUxpbmVDb21tZW50KQogICAgICAgYXRMaW5lU3RhcnQg
PSBmYWxzZTsKICAgfQpAQCAtNjQ4LDgyICs2NTcsMTM2IEBAIGJvb2wgTGV4ZXI6OmlzT2N0YWxE
aWdpdChpbnQgYykKIGludCBMZXhlcjo6bWF0Y2hQdW5jdHVhdG9yKGludCYgY2hhclBvcywgaW50
IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQogewogICBpZiAoYzEgPT0gJz4nICYmIGMyID09
ICc+JyAmJiBjMyA9PSAnPicgJiYgYzQgPT0gJz0nKSB7Ci0gICAgc2hpZnQoNCk7CisgICAgc2hp
ZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1
cm4gVVJTSElGVEVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc9JyAmJiBjMiA9PSAnPScgJiYg
YzMgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMyk7CisgIH0KKyAgaWYgKGMxID09ICc9JyAmJiBjMiA9
PSAnPScgJiYgYzMgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNo
aWZ0KCk7CiAgICAgcmV0dXJuIFNUUkVROwotICB9IGVsc2UgaWYgKGMxID09ICchJyAmJiBjMiA9
PSAnPScgJiYgYzMgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMyk7CisgIH0KKyAgaWYgKGMxID09ICch
JyAmJiBjMiA9PSAnPScgJiYgYzMgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIFNUUk5FUTsKLSAgIH0gZWxzZSBpZiAoYzEgPT0g
Jz4nICYmIGMyID09ICc+JyAmJiBjMyA9PSAnPicpIHsKLSAgICBzaGlmdCgzKTsKKyAgIH0KKyAg
IGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz4nICYmIGMzID09ICc+JykgeworICAgIHNoaWZ0KCk7
CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBVUlNISUZUOwotICB9IGVs
c2UgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAnPCcgJiYgYzMgPT0gJz0nKSB7Ci0gICAgc2hpZnQo
Myk7CisgIH0KKyAgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAnPCcgJiYgYzMgPT0gJz0nKSB7Cisg
ICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIExTSElG
VEVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicgJiYgYzMgPT0gJz0n
KSB7Ci0gICAgc2hpZnQoMyk7CisgIH0KKyAgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicgJiYg
YzMgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAg
ICAgcmV0dXJuIFJTSElGVEVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAn
PScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc9Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTEU7Ci0gIH0gZWxzZSBp
ZiAoYzEgPT0gJz4nICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChj
MSA9PSAnPicgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAg
IHJldHVybiBHRTsKLSAgfSBlbHNlIGlmIChjMSA9PSAnIScgJiYgYzIgPT0gJz0nKSB7Ci0gICAg
c2hpZnQoMik7CisgIH0KKyAgaWYgKGMxID09ICchJyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlm
dCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIE5FOwotICB9IGVsc2UgaWYgKGMxID09ICcr
JyAmJiBjMiA9PSAnKycpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJysnICYm
IGMyID09ICcrJykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICBpZiAodGVybWlu
YXRvcikKICAgICAgIHJldHVybiBBVVRPUExVU1BMVVM7CiAgICAgZWxzZQogICAgICAgcmV0dXJu
IFBMVVNQTFVTOwotICB9IGVsc2UgaWYgKGMxID09ICctJyAmJiBjMiA9PSAnLScpIHsKLSAgICBz
aGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJy0nICYmIGMyID09ICctJykgeworICAgIHNoaWZ0
KCk7CisgICAgc2hpZnQoKTsKICAgICBpZiAodGVybWluYXRvcikKICAgICAgIHJldHVybiBBVVRP
TUlOVVNNSU5VUzsKICAgICBlbHNlCiAgICAgICByZXR1cm4gTUlOVVNNSU5VUzsKLSAgfSBlbHNl
IGlmIChjMSA9PSAnPScgJiYgYzIgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAgaWYg
KGMxID09ICc9JyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAg
ICAgcmV0dXJuIEVRRVE7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJysnICYmIGMyID09ICc9Jykgewot
ICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnKycgJiYgYzIgPT0gJz0nKSB7CisgICAg
c2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBQTFVTRVFVQUw7Ci0gIH0gZWxzZSBp
ZiAoYzEgPT0gJy0nICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChj
MSA9PSAnLScgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAg
IHJldHVybiBNSU5VU0VRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICcqJyAmJiBjMiA9PSAnPScp
IHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJyonICYmIGMyID09ICc9Jykgewor
ICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTVVMVEVRVUFMOwotICB9IGVs
c2UgaWYgKGMxID09ICcvJyAmJiBjMiA9PSAnPScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBp
ZiAoYzEgPT0gJy8nICYmIGMyID09ICc9JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsK
ICAgICByZXR1cm4gRElWRVFVQUw7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJyYnICYmIGMyID09ICc9
JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnJicgJiYgYzIgPT0gJz0nKSB7
CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBBTkRFUVVBTDsKLSAgfSBl
bHNlIGlmIChjMSA9PSAnXicgJiYgYzIgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAg
aWYgKGMxID09ICdeJyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7
CiAgICAgcmV0dXJuIFhPUkVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICclJyAmJiBjMiA9PSAn
PScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJyUnICYmIGMyID09ICc9Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTU9ERVFVQUw7Ci0gIH0g
ZWxzZSBpZiAoYzEgPT0gJ3wnICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9Cisg
IGlmIChjMSA9PSAnfCcgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OwogICAgIHJldHVybiBPUkVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAn
PCcpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc8Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTFNISUZUOwotICB9IGVs
c2UgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBp
ZiAoYzEgPT0gJz4nICYmIGMyID09ICc+JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsK
ICAgICByZXR1cm4gUlNISUZUOwotICB9IGVsc2UgaWYgKGMxID09ICcmJyAmJiBjMiA9PSAnJicp
IHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJyYnICYmIGMyID09ICcmJykgewor
ICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gQU5EOwotICB9IGVsc2UgaWYg
KGMxID09ICd8JyAmJiBjMiA9PSAnfCcpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEg
PT0gJ3wnICYmIGMyID09ICd8JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICBy
ZXR1cm4gT1I7CiAgIH0KIApAQCAtNzUwLDE1ICs4MTMsMTUgQEAgaW50IExleGVyOjptYXRjaFB1
bmN0dWF0b3IoaW50JiBjaGFyUG9zLAogICAgIGNhc2UgJ1snOgogICAgIGNhc2UgJ10nOgogICAg
IGNhc2UgJzsnOgotICAgICAgc2hpZnQoMSk7CisgICAgICBzaGlmdCgpOwogICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oYzEpOwogICAgIGNhc2UgJ3snOgogICAgICAgY2hhclBvcyA9IHBv
cyAtIDQ7Ci0gICAgICBzaGlmdCgxKTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICByZXR1cm4gT1BF
TkJSQUNFOwogICAgIGNhc2UgJ30nOgogICAgICAgY2hhclBvcyA9IHBvcyAtIDQ7Ci0gICAgICBz
aGlmdCgxKTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICByZXR1cm4gQ0xPU0VCUkFDRTsKICAgICBk
ZWZhdWx0OgogICAgICAgcmV0dXJuIC0xOwpAQCAtODQ1LDcgKzkwOCw3IEBAIGJvb2wgTGV4ZXI6
OnNjYW5SZWdFeHAoKQogICB3aGlsZSAoMSkgewogICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKCkg
fHwgY3VycmVudCA9PSAtMSkKICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlIGlmIChjdXJy
ZW50ICE9ICcvJyB8fCBsYXN0V2FzRXNjYXBlID09IHRydWUgfHwgaW5CcmFja2V0cyA9PSB0cnVl
KQorICAgIGlmIChjdXJyZW50ICE9ICcvJyB8fCBsYXN0V2FzRXNjYXBlID09IHRydWUgfHwgaW5C
cmFja2V0cyA9PSB0cnVlKQogICAgIHsKICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiAnWycgYW5k
ICddJwogICAgICAgICBpZiAoIWxhc3RXYXNFc2NhcGUpIHsKQEAgLTg1NSwyMCArOTE4LDE5IEBA
IGJvb2wgTGV4ZXI6OnNjYW5SZWdFeHAoKQogICAgICAgICAgICAgaW5CcmFja2V0cyA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIHJlY29yZDE2KGN1cnJlbnQpOwotICAgICAgICBsYXN0V2Fz
RXNjYXBlID0KLSAgICAgICAgICAgICFsYXN0V2FzRXNjYXBlICYmIChjdXJyZW50ID09ICdcXCcp
OworICAgICAgICBsYXN0V2FzRXNjYXBlID0gIWxhc3RXYXNFc2NhcGUgJiYgKGN1cnJlbnQgPT0g
J1xcJyk7CiAgICAgfSBlbHNlIHsgLy8gZW5kIG9mIHJlZ2V4cAogICAgICAgICBtX3BhdHRlcm4g
PSBVU3RyaW5nKG1fYnVmZmVyMTYpOwogICAgICAgICBtX2J1ZmZlcjE2LmNsZWFyKCk7Ci0gICAg
ICAgIHNoaWZ0KDEpOworICAgICAgICBzaGlmdCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgc2hpZnQoMSk7CisgICAgc2hpZnQoKTsKICAgfQogCiAgIHdoaWxlIChpc0lkZW50UGFydChj
dXJyZW50KSkgewogICAgIHJlY29yZDE2KGN1cnJlbnQpOwotICAgIHNoaWZ0KDEpOworICAgIHNo
aWZ0KCk7CiAgIH0KICAgbV9mbGFncyA9IFVTdHJpbmcobV9idWZmZXIxNik7CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9sZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9sZXhlci5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
U3RhdGUgc3RhdGU7CiAgICAgdm9pZCBzZXREb25lKFN0YXRlKTsKICAgICB1bnNpZ25lZCBpbnQg
cG9zOwotICAgIHZvaWQgc2hpZnQodW5zaWduZWQgaW50IHApOworICAgIHZvaWQgc2hpZnQoKTsK
ICAgICB2b2lkIG5leHRMaW5lKCk7CiAgICAgaW50IGxvb2t1cEtleXdvcmQoY29uc3QgY2hhciAq
KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvbG9va3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAqIEBpbnRlcm5hbAogICAgKiBIZWxwZXIgZm9yIGdldFN0YXRpY0Z1bmN0
aW9uU2xvdCBhbmQgZ2V0U3RhdGljUHJvcGVydHlTbG90CiAgICAqLwotICBpbmxpbmUgSlNWYWx1
ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorICBp
bmxpbmUgSlNWYWx1ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAg
ewogICAgICAgLy8gTG9vayBmb3IgY2FjaGVkIHZhbHVlIGluIGR5bmFtaWMgbWFwIG9mIHByb3Bl
cnRpZXMgKGluIEpTT2JqZWN0KQogICAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBzbG90LnNsb3RC
YXNlKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqIEhlbHBlciBm
b3IgZ2V0U3RhdGljVmFsdWVTbG90IGFuZCBnZXRTdGF0aWNQcm9wZXJ0eVNsb3QKICAgICovCiAg
IHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgotICBpbmxpbmUgSlNWYWx1ZSogc3RhdGljVmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCisgIGlubGluZSBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiAgIHsKICAgICAgIFRoaXNJbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxUaGlzSW1w
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBzbG90
LnN0YXRpY0VudHJ5KCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5jcHAJKHJldmlz
aW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAwLDkgKzIwMCw5IEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNQb3coRXhl
Y1N0YXRlKiBleGUKICAgICBkb3VibGUgYXJnMiA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwog
CiAgICAgaWYgKGlzbmFuKGFyZzIpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoTmFOKTsKKyAg
ICAgICAgcmV0dXJuIGpzTmFOKCk7CiAgICAgaWYgKGlzaW5mKGFyZzIpICYmIGZhYnMoYXJnKSA9
PSAxKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoTmFOKTsKKyAgICAgICAgcmV0dXJuIGpzTmFO
KCk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHBvdyhhcmcsIGFyZzIpKTsKIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE5ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBLSlMg
ewogCi1jbGFzcyBGdW5jdGlvbkJvZHlOb2RlV2l0aERlYnVnZ2VySG9va3MgOiBwdWJsaWMgRnVu
Y3Rpb25Cb2R5Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgRnVuY3Rpb25Cb2R5Tm9kZVdpdGhEZWJ1Z2dl
ckhvb2tzKFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1
c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBK
U1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LX07Ci0KLSNpZiBDT01QSUxFUihHQ0MpCi0jZGVmaW5lIFVOTElLRUxZKHgpIFwKLSAgX19idWls
dGluX2V4cGVjdCAoKHgpLCAwKQotI2Vsc2UKLSNkZWZpbmUgVU5MSUtFTFkoeCkgeAotI2VuZGlm
Ci0gICAgCiAjZGVmaW5lIEtKU19DSEVDS0VYQ0VQVElPTiBcCiBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKSBcCiAgICAgcmV0dXJuIHJldGhyb3dFeGNlcHRpb24oZXhlYyk7CkBA
IC04NiwyNiArNzMsNiBAQCBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7IFwK
ICAgICByZXR1cm47IFwKIH0KIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBjYW5Ta2lwTG9va3VwKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICAvLyBTdGF0aWMgbG9va3VwIGluIEV2YWxDb2RlIGlz
IGltcG9zc2libGUgYmVjYXVzZSB2YXJpYWJsZXMgYXJlbid0IERvbnREZWxldGUuCi0gICAgLy8g
U3RhdGljIGxvb2t1cCBpbiBHbG9iYWxDb2RlIG1heSBiZSBwb3NzaWJsZSwgYnV0IHdlIGhhdmVu
J3QgaW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgaXQgeWV0LgotICAgIGlmIChleGVjLT5jb2RlVHlw
ZSgpICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU3Rh
dGljIGxvb2t1cCBpcyBpbXBvc3NpYmxlIHdoZW4gc29tZXRoaW5nIGR5bmFtaWMgaGFzIGJlZW4g
YWRkZWQgdG8gdGhlIGZyb250IG9mIHRoZSBzY29wZSBjaGFpbi4KLSAgICBpZiAoZXhlYy0+dmFy
aWFibGVPYmplY3QoKSAhPSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIFN0YXRpYyBsb29rdXAgaXMgaW1wb3NzaWJsZSBpZiB0aGUgc3lt
Ym9sIGlzbid0IHN0YXRpY2FsbHkgZGVjbGFyZWQuCi0gICAgaWYgKCFleGVjLT52YXJpYWJsZU9i
amVjdCgpLT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKGlkZW50LnVzdHJpbmcoKS5yZXAoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0NvbnN0YW50KGNvbnN0IExvY2FsU3RvcmFnZSYgbG9jYWxTdG9y
YWdlLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgbG9jYWxTdG9yYWdlLnNp
emUoKSk7CkBAIC0yMzUsMzQgKzIwMiw2IEBAIE5vZGU6Ok5vZGUoSlNUeXBlIGV4cGVjdGVkUmV0
dXJuKQogICAgIG1fbGluZSA9IGxleGVyKCkubGluZU5vKCk7CiB9CiAKLWRvdWJsZSBFeHByZXNz
aW9uTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2YWx1ZS0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJv
b2wgRXhwcmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2YWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpOwotfQotCi1pbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdmFsdWUt
PnRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZh
bHVlID0gZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAg
cmV0dXJuIHZhbHVlLT50b1VJbnQzMihleGVjKTsKLX0KLQogc3RhdGljIHZvaWQgc3Vic3RpdHV0
ZShVU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmluZykgS0pTX0ZBU1RfQ0FM
TDsKIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyYgc3RyaW5nLCBjb25zdCBVU3RyaW5n
JiBzdWJzdHJpbmcpCiB7CkBAIC0yODgsMTA1ICsyMjcsNiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0
IFVTdHJpbmcgY3VycmVudFNvdXJjCiAgICAgcmV0dXJuIFVTdHJpbmcoKTsKIH0KIAotSlNWYWx1
ZSogTm9kZTo6c2V0RXJyb3JDb21wbGV0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnKQotewotICAgIHJldHVybiBleGVjLT5zZXRU
aHJvd0NvbXBsZXRpb24oRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtc2csIGxpbmVObygpLCBjdXJy
ZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpKTsKLX0KLQotSlNWYWx1
ZSogTm9kZTo6c2V0RXJyb3JDb21wbGV0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
LXsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7Ci0gICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBp
ZGVudC51c3RyaW5nKCkpOwotICAgIHJldHVybiBleGVjLT5zZXRUaHJvd0NvbXBsZXRpb24oRXJy
b3I6OmNyZWF0ZShleGVjLCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4
ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4ZWMpKSk7Ci19Ci0KLUpTVmFsdWUqIE5vZGU6OnRocm93
RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBj
aGFyKiBtc2cpCi17Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtc2csIGxp
bmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwot
fQotCi1KU1ZhbHVlKiBOb2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBjb25zdCBjaGFyKiBzdHJpbmcpCi17
Ci0gICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwotICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgc3Ry
aW5nKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVO
bygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQot
Ci1KU1ZhbHVlKiBOb2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2LCBOb2RlKiBleHByKQot
ewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIHYt
PnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGV4cHItPnRvU3RyaW5n
KCkpOwotICAgIHJldHVybiBLSlM6OnRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSwgbGluZU5v
KCksIGN1cnJlbnRTb3VyY2VJZChleGVjKSwgY3VycmVudFNvdXJjZVVSTChleGVjKSk7Ci19Ci0K
LUpTVmFsdWUqIE5vZGU6OnRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMs
IEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQot
ewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxh
YmVsLnVzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNz
YWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4
ZWMpKTsKLX0KLQotSlNWYWx1ZSogTm9kZTo6dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdiwgTm9k
ZSogZTEsIE5vZGUqIGUyKQotewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJz
dGl0dXRlKG1lc3NhZ2UsIHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3Nh
Z2UsIGUxLT50b1N0cmluZygpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGUyLT50b1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVO
bygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQot
Ci1KU1ZhbHVlKiBOb2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2LCBOb2RlKiBleHByLCBj
b25zdCBJZGVudGlmaWVyJiBsYWJlbCkKLXsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7Ci0g
ICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7Ci0gICAgc3Vic3RpdHV0
ZShtZXNzYWdlLCBleHByLT50b1N0cmluZygpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxh
YmVsLnVzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNz
YWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4
ZWMpKTsKLX0KLQotSlNWYWx1ZSogTm9kZTo6dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdiwgY29u
c3QgSWRlbnRpZmllciYgbGFiZWwpCi17Ci0gICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwotICAg
IHN1YnN0aXR1dGUobWVzc2FnZSwgdi0+dG9TdHJpbmcoZXhlYykpOwotICAgIHN1YnN0aXR1dGUo
bWVzc2FnZSwgbGFiZWwudXN0cmluZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4
ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRT
b3VyY2VVUkwoZXhlYykpOwotfQotCi1KU1ZhbHVlKiBOb2RlOjp0aHJvd1VuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQotewotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAi
Q2FuJ3QgZmluZCB2YXJpYWJsZTogJXMiLCBpZGVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6aGFuZGxl
RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGhhbmRsZUV4
Y2VwdGlvbihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7Ci19Ci0KLXZvaWQgTm9kZTo6aGFuZGxl
RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBleGNlcHRp
b25WYWx1ZSkKLXsKLSAgICBpZiAoZXhjZXB0aW9uVmFsdWUtPmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgImxpbmUi
KSAmJiAhZXhjZXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCAic291cmNlVVJMIikpIHsKLSAgICAg
ICAgICAgIGV4Y2VwdGlvbi0+cHV0KGV4ZWMsICJsaW5lIiwganNOdW1iZXIobV9saW5lKSk7Ci0g
ICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVjLCAic291cmNlVVJMIiwganNTdHJpbmcoY3Vy
cmVudFNvdXJjZVVSTChleGVjKSkpOwotICAgICAgICB9Ci0gICAgfQotI2lmIDAKLSAgICBEZWJ1
Z2dlciogZGJnID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAg
IGlmIChkYmcgJiYgIWRiZy0+aGFzSGFuZGxlZEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1
ZSkpCi0gICAgICAgIGRiZy0+ZXhjZXB0aW9uKGV4ZWMsIGN1cnJlbnRTb3VyY2VJZChleGVjKSwg
bV9saW5lLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKLX0KLQotTkVWRVJfSU5MSU5FIEpTVmFs
dWUqIE5vZGU6OnJldGhyb3dFeGNlcHRpb24oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKLSAgICByZXR1cm4gZXhlYy0+c2V0VGhyb3dDb21wbGV0aW9uKGV4Y2VwdGlvbik7Ci19Ci0K
IFJlZ2lzdGVySUQqIE5vZGU6OmVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZykKIHsKICAgICBSZWdpc3RlcklEKiBleGNl
cHRpb24gPSBnZW5lcmF0b3IuZW1pdE5ld0Vycm9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
ZSwganNTdHJpbmcobXNnKSk7CkBAIC00MzUsMjEgKzI3NSwxMSBAQCBCcmVha3BvaW50Q2hlY2tT
dGF0ZW1lbnQ6OkJyZWFrcG9pbnRDaGVjCiAgICAgQVNTRVJUKG1fc3RhdGVtZW50KTsKIH0KIAot
SlNWYWx1ZSogQnJlYWtwb2ludENoZWNrU3RhdGVtZW50OjpleGVjdXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX3N0YXRlbWVudC0+ZXhlY3V0ZShleGVj
KTsKLX0KLQogdm9pZCBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQ6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgc3RyZWFtKSBjb25zdAogewogICAgIG1fc3RhdGVtZW50LT5zdHJlYW1UbyhzdHJlYW0p
OwogfQogCi12b2lkIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX3N0YXRlbWVudC5nZXQoKSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBOdWxsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFJlZ2lzdGVySUQqIE51bGxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1NywxMSArMjg3LDYgQEAgUmVnaXN0ZXJJRCogTnVsbE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwganNOdWxsKCkpOwogfQogCi1KU1ZhbHVlKiBO
dWxsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqICkKLXsKLSAgICByZXR1
cm4ganNOdWxsKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGYWxz
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBG
YWxzZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQpAQCAtNDY5LDExICsyOTQsNiBAQCBSZWdpc3RlcklEKiBGYWxzZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEZhbHNlTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oZmFs
c2UpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJ1ZU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBUcnVlTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00
ODEsMTEgKzMwMSw2IEBAIFJlZ2lzdGVySUQqIFRydWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXIK
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHRydWUpOwogfQogCi1KU1ZhbHVlKiBUcnVlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7Ci19Ci0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIE51bWJlck5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDkzLDUzICsz
MDgsNiBAQCBSZWdpc3RlcklEKiBOdW1iZXJOb2RlOjplbWl0Q29kZShDb2RlR2VuCiAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBt
X2RvdWJsZSk7CiB9CiAKLUpTVmFsdWUqIE51bWJlck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikKLXsKLSAgICAvLyBOdW1iZXIgbm9kZXMgYXJlIG9ubHkgY3JlYXRlZCB3
aGVuIHRoZSBudW1iZXIgY2FuJ3QgZml0IGluIGEgSlNJbW1lZGlhdGUsIHNvIG5vIG5lZWQgdG8g
Y2hlY2sgYWdhaW4uCi0gICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChtX2RvdWJsZSk7Ci19Ci0KLWRv
dWJsZSBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikKLXsKLSAgICByZXR1cm4gbV9kb3VibGU7Ci19Ci0KLWJvb2wgTnVtYmVyTm9kZTo6ZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBtX2Rv
dWJsZSA8IDAuMCB8fCBtX2RvdWJsZSA+IDAuMDsgLy8gZmFsc2UgZm9yIE5hTiBhcyB3ZWxsIGFz
IDAKLX0KLQotaW50MzJfdCBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKG1fZG91YmxlKTsK
LX0KLQotdWludDMyX3QgTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKG1fZG91YmxlKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltbWVkaWF0ZU51bWJlck5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSogSW1tZWRp
YXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAg
IHJldHVybiBtX3ZhbHVlOwotfQotCi1pbnQzMl90IEltbWVkaWF0ZU51bWJlck5vZGU6OmV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopCi17Ci0gICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihtX3ZhbHVlKTsKLX0KLQotdWludDMyX3QgSW1tZWRp
YXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
Ci17Ci0gICAgdWludDMyX3QgaTsKLSAgICBpZiAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJ
bnQzMihtX3ZhbHVlLCBpKSkKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgYm9vbCBvazsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZShtX2RvdWJsZSwgb2spOwotfQotCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBTdHJpbmdOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTU0OCwyMSArMzE2
LDYgQEAgUmVnaXN0ZXJJRCogU3RyaW5nTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwganNP
d25lZFN0cmluZyhtX3ZhbHVlKSk7CiB9CiAKLUpTVmFsdWUqIFN0cmluZ05vZGU6OmV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyht
X3ZhbHVlKTsKLX0KLQotZG91YmxlIFN0cmluZ05vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBtX3ZhbHVlLnRvRG91YmxlKCk7Ci19
Ci0KLWJvb2wgU3RyaW5nTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKQotewotICAgIHJldHVybiAhbV92YWx1ZS5pc0VtcHR5KCk7Ci19Ci0KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTcyLDEyICszMjUsNiBA
QCBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Q29kZShDb2RlR2VuCiAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIG1f
cmVnRXhwLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogUmVnRXhwTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpc05vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBUaGlz
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CkBAIC01ODUsMTIgKzMzMiw2IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXIKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0
LCBnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOwogfQogCi0vLyBFQ01BIDExLjEuMQotSlNWYWx1
ZSogVGhpc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBleGVjLT50aGlzVmFsdWUoKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNjAxLDMzNTcgKzM0Miw2MjQgQEAgUmVnaXN0
ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZQogICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CiB9
CiAKLS8vIEVDTUEgMTEuMS4yICYgMTAuMS40Ci1KU1ZhbHVlKiBSZXNvbHZlTm9kZTo6aW5saW5l
RXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gQ2hlY2sg
Zm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAgQVNTRVJUKCFjYW5Ta2lw
TG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0g
ZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4u
YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAg
ICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAg
ICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgZG8g
ewotICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKQot
ICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgbywgbV9pZGVudCk7CiAKLSAg
ICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKK1JlZ2lzdGVySUQqIEFy
cmF5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5ld0FycmF5ID0gZ2VuZXJhdG9yLmVtaXRO
ZXdBcnJheShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCkpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAKLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMs
IG1faWRlbnQpOwotfQorICAgIFJlZ2lzdGVySUQqIHZhbHVlOworICAgIGZvciAoRWxlbWVudE5v
ZGUqIG4gPSBtX2VsZW1lbnQuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQuZ2V0KCkpIHsKKyAgICAg
ICAgdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobi0+bV9ub2RlLmdldCgpKTsKKyAgICAgICAg
bGVuZ3RoICs9IG4tPm1fZWxpc2lvbjsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUluZGV4
KG5ld0FycmF5LmdldCgpLCBsZW5ndGgrKywgdmFsdWUpOworICAgIH0KIAotSlNWYWx1ZSogUmVz
b2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KKyAgICB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKG1fZWxpc2lvbiArIGxl
bmd0aCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChuZXdBcnJheS5nZXQoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIHZhbHVlKTsKIAotZG91YmxlIFJlc29sdmVOb2Rl
OjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbmV3QXJyYXkuZ2V0KCkpOwogfQog
Ci1ib29sIFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhl
Yyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT2JqZWN0TGl0ZXJhbE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbnQzMl90IFJlc29sdmVOb2RlOjpl
dmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklE
KiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMp
OwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b0ludDMyKGV4
ZWMpOworICAgIGlmIChtX2xpc3QpCisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX2xpc3QuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0TmV3T2JqZWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOwogfQogCi11aW50
MzJfdCBSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwot
fQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5TGlzdE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHNpemVfdCBnZXRTeW1ib2xUYWJs
ZUVudHJ5KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBzaXplX3QmIHN0YWNrRGVwdGgp
IAorUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFi
bGUuZ2V0KGlkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5kZXgoKTsKLSAgICBpZiAoaW5kZXgg
IT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIHN0YWNrRGVwdGggPSAwOwotICAg
ICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmog
PSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgCi0gICAgaWYgKGlkZW50ID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKLSAgICAgICAgc3RhY2tEZXB0aCA9
IDA7Ci0gICAgICAgIHJldHVybiBtaXNzaW5nU3ltYm9sTWFya2VyKCk7Ci0gICAgfQorICAgIGdl
bmVyYXRvci5lbWl0TmV3T2JqZWN0KG5ld09iai5nZXQoKSk7CiAgICAgCi0gICAgY29uc3QgU2Nv
cGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBj
aGFpbi5lbmQoKTsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyLCArK2RlcHRoKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSAq
aXRlcjsKLSAgICAgICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVPYmplY3QoKSkgCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlh
YmxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7
Ci0gICAgICAgIGluZGV4ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdl
dChpZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgICAgIGlmIChpbmRleCAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAgICAgICAgICAgIHN0YWNrRGVwdGggPSBkZXB0
aDsKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICBmb3IgKFByb3BlcnR5TGlzdE5vZGUq
IHAgPSB0aGlzOyBwOyBwID0gcC0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIFJlZ2lzdGVySUQq
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKHAtPm1fbm9kZS0+bV9hc3NpZ24uZ2V0KCkpOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChwLT5tX25vZGUtPm1fdHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50OiB7CisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKG5ld09iai5nZXQoKSwgcC0+bV9ub2RlLT5uYW1lKCksIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
UHJvcGVydHlOb2RlOjpHZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
dEdldHRlcihuZXdPYmouZ2V0KCksIHAtPm1fbm9kZS0+bmFtZSgpLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5
Tm9kZTo6U2V0dGVyOiB7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTZXR0ZXIo
bmV3T2JqLmdldCgpLCBwLT5tX25vZGUtPm5hbWUoKSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVu
dFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29wZSgpKQotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIHN0YWNrRGVwdGggPSBkZXB0aDsKLSAgICByZXR1cm4gbWlzc2luZ1N5bWJvbE1h
cmtlcigpOworICAgIAorICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIG5ld09iai5nZXQoKSk7CiB9CiAKLXZvaWQgUmVzb2x2ZU5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikKLXsK
LSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGludCBpbmRleCA9IGdldFN5bWJvbFRhYmxlRW50
cnkoZXhlYywgbV9pZGVudCwgc3ltYm9sVGFibGUsIGRlcHRoKTsKLSAgICBpZiAoaW5kZXggIT0g
bWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIGlmICghZGVwdGgpCi0gICAgICAgICAg
ICBuZXcgKHRoaXMpIExvY2FsVmFyQWNjZXNzTm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5ldyAodGhpcykgU2NvcGVkVmFyQWNjZXNzTm9kZShpbmRleCwgZGVwdGgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
ICAgIGlmICghZGVwdGgpCi0gICAgICAgIHJldHVybjsKK1JlZ2lzdGVySUQqIEJyYWNrZXRBY2Nl
c3Nvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fYmFzZS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwogCi0gICAgbmV3ICh0aGlzKSBOb25Mb2NhbFZhckFj
Y2Vzc05vZGUoZGVwdGgpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKIH0KIAot
SlNWYWx1ZSogTG9jYWxWYXJBY2Nlc3NOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9
PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBleGVjLT5sb2NhbFN0b3Jh
Z2UoKVttX2luZGV4XS52YWx1ZTsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNW
YWx1ZSogTG9jYWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKK1JlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlKGV4ZWMpOworICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwogfQogCi1kb3VibGUgTG9j
YWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9OdW1iZXIoZXhl
Yyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1ib29sIExvY2FsVmFyQWNjZXNzTm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdp
c3RlcklEKiBBcmd1bWVudExpc3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYykt
PnRvQm9vbGVhbihleGVjKTsKKyAgICBBU1NFUlQobV9leHByKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKIH0KIAotaW50MzJfdCBMb2NhbFZhckFj
Y2Vzc05vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7Ci19Cisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTmV3RXhwck5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi11aW50MzJfdCBMb2NhbFZhckFjY2Vzc05vZGU6OmV2
YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklE
KiBOZXdFeHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b1VJbnQzMihl
eGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIG1fYXJncy5nZXQoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSogZ2V0Tm9uTG9jYWxTeW1ib2woT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMsIHNpemVfdCwgc2l6ZV90IHNjb3BlRGVwdGgpCitSZWdpc3RlcklEKiBFdmFs
RnVuY3Rpb25DYWxsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29w
ZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NvcGVEZXB0aDsgKytpdGVyLCArK2kpCi0gICAg
ICAgIEFTU0VSVChpdGVyICE9IGNoYWluLmVuZCgpKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgSlNP
YmplY3QqIHNjb3BlID0gKml0ZXI7Ci0jZW5kaWYKLSAgICBBU1NFUlQoc2NvcGUtPmlzVmFyaWFi
bGVPYmplY3QoKSk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCk7CisgICAgUmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShiYXNlLmdldCgpLCBmdW5jLCBDb21tb25J
ZGVudGlmaWVyczo6c2hhcmVkKCktPmV2YWwpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmMs
IGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIFNjb3BlZFZhckFjY2Vz
c05vZGU6OmlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gZ2V0Tm9uTG9jYWxTeW1i
b2woZXhlYywgbV9pbmRleCwgbV9zY29wZURlcHRoKTsKKyAgICBSZWdpc3RlcklEKiByMCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAsIDAsIG1fYXJncy5nZXQo
KSk7CiB9CiAKLUpTVmFsdWUqIFNjb3BlZFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KKyAgICBpZiAoUmVnaXN0ZXJJ
RCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCBsb2NhbCwgMCwgbV9hcmdzLmdldCgpKTsKIAotZG91YmxlIFNjb3BlZFZhckFjY2Vzc05vZGU6
OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b051bWJlcihleGVjKTsKKyAgICBpbnQgaW5k
ZXggPSAwOworICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaWYgKGdlbmVyYXRvci5maW5kU2Nv
cGVkUHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5lbWl0
R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZGVwdGgsIGluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCBmdW5jLCAwLCBtX2FyZ3MuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lz
dGVySUQqIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlRnVuY3Rpb24oYmFzZS5nZXQoKSwgZnVuYywgbV9pZGVudCk7CisgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2Uu
Z2V0KCkpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOwogfQogCi1ib29sIFNjb3Bl
ZFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQorUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgUmVnaXN0
ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwor
ICAgIFJlZ2lzdGVySUQqIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQo
KSksIGZ1bmN0aW9uLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOwogfQogCi1pbnQzMl90IFNj
b3BlZFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKK1JlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
YmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQq
IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jdGlvbiwgYmFz
ZS5nZXQoKSwgbV9hcmdzLmdldCgpKTsKIH0KIAotdWludDMyX3QgU2NvcGVkVmFyQWNjZXNzTm9k
ZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvVUludDMyKGV4ZWMpOwotfQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTVmFsdWUqIE5vbkxvY2FsVmFyQWNjZXNzTm9k
ZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3Rl
cklEKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0aW1pemF0
aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBtX2lkZW50
KSk7Ci0gICAgCi0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWlu
KCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2NvcGVEZXB0aDsgKytpLCArK2l0ZXIpCi0gICAgICAgIEFTU0VSVChpdGVyICE9
IGVuZCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2Nv
cGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotICAgIAotICAgIFByb3BlcnR5U2xv
dCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCi0g
ICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBvLCBtX2lkZW50KTsKKyAgICAv
LyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVudCBl
eHByZXNzaW9ucyBoZXJlLCAKKyAgICAvLyBhbmQgZW1pdCBhIFByZUluYyBpbnN0ZWFkIG9mIGEg
UG9zdEluYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKKyAgICAvLyBjb2RlIHdvdWxk
IHdvcmssIHRvby4KKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0
ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25z
dGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNOdW1i
ZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICAKLSAg
ICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLSAgICAKLSAgICByZXR1
cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotfQotCi1KU1Zh
bHVlKiBOb25Mb2NhbFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KLQotZG91
YmxlIE5vbkxvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRv
TnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIE5vbkxvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVU
b0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlu
bGluZUV2YWx1YXRlKGV4ZWMpLT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgTm9uTG9j
YWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b0ludDMyKGV4ZWMp
OwotfQotCi11aW50MzJfdCBOb25Mb2NhbFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9VSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlKGV4ZWMpLT50b1VJbnQzMihleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVsZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotdm9pZCBFbGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbmV4dCkKLSAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZChtX25leHQuZ2V0KCkpOwotICAgIEFTU0VSVChtX25vZGUpOwotICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9ub2RlLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xLjQKLUpTVmFsdWUqIEVs
ZW1lbnROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU09iamVjdCogYXJyYXkgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29u
c3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBpbnQg
bGVuZ3RoID0gMDsKLSAgICBmb3IgKEVsZW1lbnROb2RlKiBuID0gdGhpczsgbjsgbiA9IG4tPm1f
bmV4dC5nZXQoKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBuLT5tX25vZGUtPmV2YWx1YXRl
KGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgICAgICBsZW5ndGgg
Kz0gbi0+bV9lbGlzaW9uOwotICAgICAgICBhcnJheS0+cHV0KGV4ZWMsIGxlbmd0aCsrLCB2YWwp
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBBcnJheU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLQotUmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3QXJy
YXkgPSBnZW5lcmF0b3IuZW1pdE5ld0FycmF5KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLQotICAgIFJlZ2lzdGVySUQqIHZhbHVlOwot
ICAgIGZvciAoRWxlbWVudE5vZGUqIG4gPSBtX2VsZW1lbnQuZ2V0KCk7IG47IG4gPSBuLT5tX25l
eHQuZ2V0KCkpIHsKLSAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobi0+bV9ub2Rl
LmdldCgpKTsKLSAgICAgICAgbGVuZ3RoICs9IG4tPm1fZWxpc2lvbjsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUluZGV4KG5ld0FycmF5LmdldCgpLCBsZW5ndGgrKywgdmFsdWUpOworICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsKTsKICAgICB9CiAKLSAgICB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0TG9h
ZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKG1fZWxpc2lvbiArIGxlbmd0aCkp
OwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChuZXdBcnJheS5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIHZhbHVlKTsKLQotICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG5ld0FycmF5LmdldCgpKTsKLX0KLQotdm9pZCBB
cnJheU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9k
ZVN0YWNrKQotewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9lbGVtZW50LmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xLjQKLUpTVmFsdWUqIEFycmF5Tm9k
ZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNPYmpl
Y3QqIGFycmF5OwotICAgIGludCBsZW5ndGg7Ci0KLSAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAg
ICAgIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihtX2VsZW1lbnQtPmV2YWx1YXRlKGV4
ZWMpKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICAgICAgbGVuZ3RoID0g
bV9vcHRpb25hbCA/IGFycmF5LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCktPnRvSW50MzIoZXhlYykgOiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIG5l
d0FyciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5j
b25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgICAgICBhcnJheSA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4obmV3QXJyKTsKLSAgICAgICAgbGVuZ3RoID0gMDsKKyAgICBpbnQg
aW5kZXggPSAwOworICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaWYgKGdlbmVyYXRvci5maW5k
U2NvcGVkUHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwg
aW5kZXgpOworICAgICAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9z
dEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHV0U2NvcGVkVmFyKGRlcHRoLCBpbmRleCwgdmFsdWUuZ2V0KCkp
OworICAgICAgICByZXR1cm4gb2xkVmFsdWU7CiAgICAgfQogCi0gICAgaWYgKG1fb3B0aW9uYWwp
Ci0gICAgICAgIGFycmF5LT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIobV9lbGlzaW9uICsgbGVuZ3RoKSk7Ci0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3RMaXRlcmFsTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIE9iamVjdExpdGVyYWxOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsK
LSAgICBpZiAobV9saXN0KQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9saXN0LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5l
d09iamVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKLX0KLQotdm9pZCBPYmpl
Y3RMaXRlcmFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbGlzdCkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2xpc3QuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjEuNQotSlNWYWx1ZSogT2JqZWN0TGl0
ZXJhbE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChtX2xpc3QpCi0gICAgICAgIHJldHVybiBtX2xpc3QtPmV2YWx1YXRlKGV4ZWMpOwotCi0g
ICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0Q29uc3RydWN0b3Io
KS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKKyAgICBSZWdpc3RlcklEKiBvbGRW
YWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCB2YWx1ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCks
IG1faWRlbnQsIHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gb2xkVmFsdWU7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJ
RCogUG9zdERlY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqID0gZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIAotICAgIGdlbmVyYXRvci5lbWl0TmV3
T2JqZWN0KG5ld09iai5nZXQoKSk7Ci0gICAgCi0gICAgZm9yIChQcm9wZXJ0eUxpc3ROb2RlKiBw
ID0gdGhpczsgcDsgcCA9IHAtPm1fbmV4dC5nZXQoKSkgewotICAgICAgICBSZWdpc3RlcklEKiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fYXNzaWduLmdldCgpKTsKKyAg
ICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVu
dCBleHByZXNzaW9ucyBoZXJlLCAKKyAgICAvLyBhbmQgZW1pdCBhIFByZURlYyBpbnN0ZWFkIG9m
IGEgUG9zdERlYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKKyAgICAvLyBjb2RlIHdv
dWxkIHdvcmssIHRvby4KKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVn
aXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxD
b25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNO
dW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICAK
LSAgICAgICAgc3dpdGNoIChwLT5tX25vZGUtPm1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSBQ
cm9wZXJ0eU5vZGU6OkNvbnN0YW50OiB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
dXRCeUlkKG5ld09iai5nZXQoKSwgcC0+bV9ub2RlLT5uYW1lKCksIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHJvcGVydHlO
b2RlOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlcihu
ZXdPYmouZ2V0KCksIHAtPm1fbm9kZS0+bmFtZSgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0
dGVyOiB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTZXR0ZXIobmV3T2JqLmdl
dCgpLCBwLT5tX25vZGUtPm5hbWUoKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgbmV3T2JqLmdldCgpKTsKLX0KLQotdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAo
bV9uZXh0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX25vZGUuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjEuNQotSlNWYWx1
ZSogUHJvcGVydHlMaXN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgSlNPYmplY3QqIG9iaiA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsK
IAotICAgIGZvciAoUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7IHA7IHAgPSBwLT5tX25leHQu
Z2V0KCkpIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IHAtPm1fbm9kZS0+bV9hc3NpZ24tPmV2YWx1
YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgICAgIHN3
aXRjaCAocC0+bV9ub2RlLT5tX3R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvcGVydHlOb2Rl
OjpHZXR0ZXI6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHYtPmlzT2JqZWN0KCkpOwotICAgICAg
ICAgICAgICAgIG9iai0+ZGVmaW5lR2V0dGVyKGV4ZWMsIHAtPm1fbm9kZS0+bmFtZSgpLCBzdGF0
aWNfY2FzdDxKU09iamVjdCogPih2KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0dGVyOgotICAgICAgICAgICAgICAgIEFTU0VSVCh2
LT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBvYmotPmRlZmluZVNldHRlcihleGVjLCBw
LT5tX25vZGUtPm5hbWUoKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqID4odikpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50Ogot
ICAgICAgICAgICAgICAgIG9iai0+cHV0KGV4ZWMsIHAtPm1fbm9kZS0+bmFtZSgpLCB2KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGludCBpbmRleCA9IDA7CisgICAg
c2l6ZV90IGRlcHRoID0gMDsKKyAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eSht
X2lkZW50LCBpbmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkg
eworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldFNj
b3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBpbmRleCk7CisgICAgICAg
IFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIHJldHVy
biBvbGRWYWx1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gb2JqOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXZvaWQgUHJvcGVydHlOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3Jh
Z2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYXNz
aWduLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xLjUKLUpTVmFsdWUqIFByb3BlcnR5Tm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgcmV0dXJuIGpzTnVsbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFs
dWUuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUu
Z2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4QnJhY2tl
dE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZWdpc3RlcklEKiBC
cmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKK1JlZ2lzdGVySUQqIFBvc3RJbmNCcmFja2V0Tm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAg
ICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7Ci19Ci0KLXZvaWQgQnJh
Y2tldEFjY2Vzc29yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3N1YnNjcmlwdC5nZXQo
KSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDEx
LjIuMWEKLUpTVmFsdWUqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmlubGluZUV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9iYXNlLT5l
dmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUq
IHYyID0gbV9zdWJzY3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0gICAgSlNPYmplY3QqIG8gPSB2MS0+dG9PYmplY3QoZXhlYyk7Ci0gICAgdWludDMy
X3QgaTsKLSAgICBpZiAodjItPmdldFVJbnQzMihpKSkKLSAgICAgICAgcmV0dXJuIG8tPmdldChl
eGVjLCBpKTsKLSAgICByZXR1cm4gby0+Z2V0KGV4ZWMsIElkZW50aWZpZXIodjItPnRvU3RyaW5n
KGV4ZWMpKSk7Ci19Ci0KLUpTVmFsdWUqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0
ZShleGVjKTsKLX0KLQotZG91YmxlIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlu
bGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJl
dHVybiB2LT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBCcmFja2V0QWNjZXNzb3JOb2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
Qk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgQnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0K
LQotdWludDMyX3QgQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRv
VUludDMyKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdl
bmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1
ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0
eS5nZXQoKSwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvdEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJ
RCogUG9zdERlY0JyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLCBtX2lkZW50KTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1
YnNjcmlwdC5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHByb3Bl
cnR5LmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9z
dERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUu
Z2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotdm9pZCBEb3RBY2Nlc3Nvck5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQot
ewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4RG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLS8vIEVDTUEgMTEuMi4xYgotSlNWYWx1ZSogRG90QWNjZXNzb3JOb2Rl
OjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIFBvc3RJbmNEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2ID0gbV9iYXNlLT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiB2LT50b09iamVjdChl
eGVjKS0+Z2V0KGV4ZWMsIG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
YmFzZS5nZXQoKSwgbV9pZGVudCk7CisgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0
b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1
ZS5nZXQoKSk7CisgICAgcmV0dXJuIG9sZFZhbHVlOwogfQogCi1KU1ZhbHVlKiBEb3RBY2Nlc3Nv
ck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJ
RCogUG9zdERlY0RvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkp
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZ2lz
dGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQo
YmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsK
IH0KIAotZG91YmxlIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVt
YmVyKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhF
cnJvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBEb3RB
Y2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQorUmVnaXN0ZXJJRCogUG9zdGZpeEVycm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2
LT50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwg
UmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/ICJQb3N0Zml4ICsrIG9w
ZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6ICJQb3N0
Zml4IC0tIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2Uu
Iik7CiB9CiAKLWludDMyX3QgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50
b0ludDMyKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0
ZVJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXVpbnQz
Ml90IERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2
ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0g
ICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIGlmIChnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCBmYWxzZSk7CiAKLVJlZ2lzdGVySUQqIEFyZ3VtZW50TGlzdE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIEFTU0VSVChtX2V4
cHIpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIuZ2V0KCkpOwor
ICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UpLCBiYXNl
LCBtX2lkZW50KTsKIH0KIAotdm9pZCBBcmd1bWVudExpc3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAobV9uZXh0
KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgQVNTRVJUKG1f
ZXhwcik7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vIEVDTUEgMTEuMi40Ci12b2lkIEFyZ3VtZW50TGlz
dE5vZGU6OmV2YWx1YXRlTGlzdChPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgTGlzdCYg
bGlzdCkKK1JlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBmb3IgKEFyZ3VtZW50TGlz
dE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgIEpTVmFs
dWUqIHYgPSBuLT5tX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WT0lECi0gICAgICAgIGxpc3QuYXBwZW5kKHYpOwotICAgIH0KKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBBcmd1bWVudHNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZvaWQgQXJndW1lbnRzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbGlzdE5vZGUpCi0g
ICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9saXN0Tm9kZS5nZXQoKSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOZXdFeHByTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIE5ld0V4cHJOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgcjAuZ2V0KCksIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV3RXhwck5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAg
IGlmIChtX2FyZ3MpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4yCi0K
LUpTVmFsdWUqIE5ld0V4cHJOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgTGlzdCBhcmdMaXN0OwotICAgIGlm
IChtX2FyZ3MpIHsKLSAgICAgICAgbV9hcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7
Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgfQotCi0gICAgaWYgKCF2LT5p
c09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJW
YWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5v
dCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIG1fZXhwci5nZXQoKSk7Ci0KLSAgICBDb25zdHJ1Y3RE
YXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgaWYgKHYtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0
RGF0YSkgPT0gQ29uc3RydWN0VHlwZU5vbmUpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90
IGEgY29uc3RydWN0b3IuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIG1fZXhwci5nZXQo
KSk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+Y29uc3RydWN0KGV4
ZWMsIGFyZ0xpc3QpOwotfQotCi1KU1ZhbHVlKiBOZXdFeHByTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4
ZWMpOwotfQotCi1kb3VibGUgTmV3RXhwck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051
bWJlcihleGVjKTsKLX0KLQotYm9vbCBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4g
di0+dG9Cb29sZWFuKGV4ZWMpOwotfQotCi1pbnQzMl90IE5ld0V4cHJOb2RlOjpldmFsdWF0ZVRv
SW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9
IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAg
IHJldHVybiB2LT50b0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBOZXdFeHByTm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi10ZW1wbGF0ZSA8RXhwcmVz
c2lvbk5vZGU6OkNhbGxlclR5cGUgY2FsbGVyVHlwZSwgYm9vbCBzY29wZURlcHRoSXNaZXJvPiAK
LWlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUFuZENhbGwoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNO
b2RlKiBhcmdzLCBzaXplX3Qgc2NvcGVEZXB0aCkKLXsKLSAgICBjb25zdCBTY29wZUNoYWluJiBj
aGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9
IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgp
OwotCi0gICAgaWYgKCFzY29wZURlcHRoSXNaZXJvKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2NvcGVEZXB0aDsgKytpdGVyLCArK2kpCi0gICAgICAgICAgICBBU1NFUlQoaXRl
ciAhPSBjaGFpbi5lbmQoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIHdlIG11c3QgYWx3YXlzIGhh
dmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7
Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7
Ci0gICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xv
dChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGJhc2UsIGlkZW50KTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICAgICAgICAgIGlmICghdi0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9m
IGV4cHJlc3Npb24gJXMpIGlzIG5vdCBvYmplY3QuIiwgdiwgaWRlbnQpOwotCi0gICAgICAgICAg
ICBKU09iamVjdCogZnVuYyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7Ci0KLSAgICAgICAg
ICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHByZXNz
aW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBpZGVudCk7Ci0KLSAgICAgICAgICAg
IExpc3QgYXJnTGlzdDsKLSAgICAgICAgICAgIGFyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBhcmdM
aXN0KTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICAgICAgICAg
IGlmIChjYWxsZXJUeXBlID09IEV2YWxPcGVyYXRvcikgewotICAgICAgICAgICAgICAgIGlmIChi
YXNlID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSAmJiBmdW5jID09IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IGJhc2UtPnRvVGhpc09iamVjdChleGVj
KTsKLSAgICAgICAgICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3Qp
OwotICAgICAgICB9Ci0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
Ci0KLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsK
LX0KLQotUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIFJlZ2lzdGVy
SUQqIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRS
ZXNvbHZlV2l0aEJhc2UoYmFzZS5nZXQoKSwgZnVuYywgQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJl
ZCgpLT5ldmFsKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2Fy
Z3MuZ2V0KCkpOwotfQotCi12b2lkIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fYXJncy5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEV2YWxGdW5jdGlvbkNhbGxO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gcmVzb2x2ZUFuZENhbGw8RXZhbE9wZXJhdG9yLCB0cnVlPihleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuZXZhbCwgbV9hcmdzLmdldCgpKTsKLX0KLQotUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKLXsKLSAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgcjAsIDAsIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgRnVuY3Rp
b25DYWxsVmFsdWVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYXJncy5nZXQoKSk7Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjIuMwot
SlNWYWx1ZSogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgaWYgKCF2LT5pc09iamVjdCgp
KSB7Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVz
IChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2LCBtX2V4cHIuZ2V0
KCkpOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBmdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
Pih2KTsKLQotICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBtX2V4cHIuZ2V0KCkpOwotICAg
IH0KLQotICAgIExpc3QgYXJnTGlzdDsKLSAgICBtX2FyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBh
cmdMaXN0KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIHRo
aXNPYmogPSBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKLSAgICByZXR1cm4gZnVuYy0+Y2FsbChl
eGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKLX0KLQotUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLCAwLCBtX2FyZ3MuZ2V0KCkpOwotCi0g
ICAgaW50IGluZGV4ID0gMDsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGlmIChnZW5lcmF0
b3IuZmluZFNjb3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0g
bWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGZ1bmMgPSBnZW5l
cmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBp
bmRleCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgZnVuYywgMCwgbV9hcmdzLmdldCgpKTsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsK
LSAgICBSZWdpc3RlcklEKiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIGdl
bmVyYXRvci5lbWl0UmVzb2x2ZUZ1bmN0aW9uKGJhc2UuZ2V0KCksIGZ1bmMsIG1faWRlbnQpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBiYXNlLmdldCgpKSwgZnVuYywgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpKTsKLX0KLQot
dm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fYXJncy5nZXQoKSk7Ci0KLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAg
IGludCBpbmRleCA9IGdldFN5bWJvbFRhYmxlRW50cnkoZXhlYywgbV9pZGVudCwgc3ltYm9sVGFi
bGUsIGRlcHRoKTsKLSAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0g
ICAgICAgIGlmICghZGVwdGgpCi0gICAgICAgICAgICBuZXcgKHRoaXMpIExvY2FsVmFyRnVuY3Rp
b25DYWxsTm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykg
U2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZShpbmRleCwgZGVwdGgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIGlmICghZGVwdGgpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBuZXcgKHRoaXMpIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZShkZXB0aCk7Ci19Ci0KLS8v
IEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6aW5saW5lRXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gQ2hlY2sgZm9y
IG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAgQVNTRVJUKCFjYW5Ta2lwTG9v
a3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIHJldHVybiByZXNvbHZlQW5kQ2FsbDxGdW5jdGlv
bkNhbGwsIHRydWU+KGV4ZWMsIG1faWRlbnQsIG1fYXJncy5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUq
IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci19Ci0KLWRvdWJs
ZSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVtYmVy
KGV4ZWMpOwotfQotCi1ib29sIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvQm9v
bGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0g
aW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAg
IHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQz
Ml90IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9VSW50
MzIoZXhlYyk7Ci19Ci0KLUpTVmFsdWUqIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6aW5saW5l
RXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4
ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLQotICAg
IEpTVmFsdWUqIHYgPSBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLQotICAg
IGlmICghdi0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3Qgb2JqZWN0
LiIsIHYsIG1faWRlbnQpOwotCi0gICAgSlNPYmplY3QqIGZ1bmMgPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHYpOwotICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhw
cmVzc2lvbiAlcykgZG9lcyBub3QgYWxsb3cgY2FsbHMuIiwgdiwgbV9pZGVudCk7Ci0KLSAgICBM
aXN0IGFyZ0xpc3Q7Ci0gICAgbV9hcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+Z2xvYmFsVGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhpc09i
aiwgYXJnTGlzdCk7Ci19Ci0KLUpTVmFsdWUqIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOwotfQotCi1kb3VibGUgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpl
dmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKLSAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgTG9jYWxWYXJG
dW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7
Ci19Ci0KLWludDMyX3QgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVy
biB2LT50b0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5v
ZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsKLX0KLQotSlNWYWx1ZSog
U2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0g
ZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlKiB2ID0gZ2V0Tm9u
TG9jYWxTeW1ib2woZXhlYywgbV9pbmRleCwgbV9zY29wZURlcHRoKTsKLSAgICAKLSAgICBpZiAo
IXYtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
ciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2
LCBtX2lkZW50KTsKLSAgICAKLSAgICBKU09iamVjdCogZnVuYyA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odik7Ci0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBtX2lkZW50KTsKLSAgICAKLSAg
ICBMaXN0IGFyZ0xpc3Q7Ci0gICAgbV9hcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhp
c09iaiwgYXJnTGlzdCk7Ci19Ci0KLUpTVmFsdWUqIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KLQotZG91YmxlIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5v
ZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBTY29w
ZWRWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4o
ZXhlYyk7Ci19Ci0KLWludDMyX3QgU2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGVU
b0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYg
PSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgU2NvcGVkVmFyRnVuY3Rp
b25DYWxsTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi1K
U1ZhbHVlKiBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmlubGluZUV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0
aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBt
X2lkZW50KSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc29sdmVBbmRDYWxsPEZ1bmN0aW9uQ2FsbCwg
ZmFsc2U+KGV4ZWMsIG1faWRlbnQsIG1fYXJncy5nZXQoKSwgbV9zY29wZURlcHRoKTsKLX0KLQot
SlNWYWx1ZSogTm9uTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7
Ci19Ci0KLWRvdWJsZSBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlu
bGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJl
dHVybiB2LT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBOb25Mb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0KLQotaW50
MzJfdCBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRv
SW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6
ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi1SZWdpc3RlcklEKiBG
dW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCog
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwgZnVuY3Rpb24sIGJh
c2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNr
KQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5n
ZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNW
YWx1ZSogYmFzZVZhbCA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdFZhbCA9IG1fc3Vic2NyaXB0LT5l
dmFsdWF0ZShleGVjKTsKLQotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZVZhbC0+dG9PYmpl
Y3QoZXhlYyk7Ci0gICAgdWludDMyX3QgaTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLQotICAg
IEpTVmFsdWUqIGZ1bmNWYWw7Ci0gICAgaWYgKHN1YnNjcmlwdFZhbC0+Z2V0VUludDMyKGkpKSB7
Ci0gICAgICAgIGlmIChiYXNlT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaSwgc2xvdCkpCi0g
ICAgICAgICAgICBmdW5jVmFsID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlT2JqLCBpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZnVuY1ZhbCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudChzdWJzY3JpcHRWYWwtPnRvU3RyaW5nKGV4
ZWMpKTsKLSAgICAgICAgaWYgKGJhc2VPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwg
c2xvdCkpCi0gICAgICAgICAgICBmdW5jVmFsID0gYmFzZU9iai0+Z2V0KGV4ZWMsIGlkZW50KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnVuY1ZhbCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotCi0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIGlmICghZnVuY1ZhbC0+aXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFs
dWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzWyVzXSkgaXMgbm90IG9iamVjdC4iLCBmdW5j
VmFsLCBtX2Jhc2UuZ2V0KCksIG1fc3Vic2NyaXB0LmdldCgpKTsKLQotICAgIEpTT2JqZWN0KiBm
dW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKTsKLQotICAgIGlmICghZnVuYy0+
aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlc1slc10pIGRvZXMgbm90IGFs
bG93IGNhbGxzLiIsIGZ1bmNWYWwsIG1fYmFzZS5nZXQoKSwgbV9zdWJzY3JpcHQuZ2V0KCkpOwot
Ci0gICAgTGlzdCBhcmdMaXN0OwotICAgIG1fYXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xp
c3QpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09iamVjdCogdGhpc09i
aiA9IGJhc2VPYmo7Ci0gICAgQVNTRVJUKHRoaXNPYmopOwotICAgIEFTU0VSVCh0aGlzT2JqLT5p
c09iamVjdCgpKTsKLSAgICBBU1NFUlQoIXRoaXNPYmotPmlzQWN0aXZhdGlvbk9iamVjdCgpKTsK
LQotICAgIC8vIE5vIG5lZWQgdG8gY2FsbCB0b1RoaXNPYmplY3QoKSBvbiB0aGUgdGhpc09iaiBh
cyBpdCBpcyBrbm93biBub3QgdG8gYmUgdGhlIEdsb2JhbE9iamVjdCBvciBBY3RpdmF0aW9uT2Jq
ZWN0Ci0gICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBkb3RFeHByTm90QW5PYmplY3RTdHJpbmcoKSBLSlNfRkFTVF9D
QUxMOwotc3RhdGljIGNvbnN0IGNoYXIqIGRvdEV4cHJOb3RBbk9iamVjdFN0cmluZygpCi17Ci0g
ICAgcmV0dXJuICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMuJXMpIGlzIG5vdCBv
YmplY3QuIjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGRvdEV4cHJEb2VzTm90QWxsb3dDYWxs
c1N0cmluZygpIEtKU19GQVNUX0NBTEw7Ci1zdGF0aWMgY29uc3QgY2hhciogZG90RXhwckRvZXNO
b3RBbGxvd0NhbGxzU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gIk9iamVjdCAlcyAocmVzdWx0IG9m
IGV4cHJlc3Npb24gJXMuJXMpIGRvZXMgbm90IGFsbG93IGNhbGxzLiI7Ci19Ci0KLVJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogZnVuY3Rpb24g
PSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdl
dCgpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0aW9uLCBiYXNlLmdldCgpLCBt
X2FyZ3MuZ2V0KCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ2FsbERvdE5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYs
IGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVT
dGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5n
ZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2Rl
OjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiBiYXNlVmFsID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFsLT50b09iamVj
dChleGVjKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiBmdW5jVmFsID0g
YmFzZU9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5nZXRW
YWx1ZShleGVjLCBiYXNlT2JqLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIGlmICghZnVuY1ZhbC0+aXNPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCBkb3RFeHByTm90QW5PYmplY3RT
dHJpbmcoKSwgZnVuY1ZhbCwgbV9iYXNlLmdldCgpLCBtX2lkZW50KTsKLQotICAgIEpTT2JqZWN0
KiBmdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKTsKLQotICAgIGlmICghZnVu
Yy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCBkb3RFeHByRG9lc05vdEFsbG93Q2FsbHNTdHJpbmcoKSwgZnVuY1ZhbCwgbV9iYXNl
LmdldCgpLCBtX2lkZW50KTsKLQotICAgIExpc3QgYXJnTGlzdDsKLSAgICBtX2FyZ3MtPmV2YWx1
YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0g
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBiYXNlT2JqOwotICAgIEFTU0VSVCh0aGlzT2JqKTsKLSAg
ICBBU1NFUlQodGhpc09iai0+aXNPYmplY3QoKSk7Ci0gICAgQVNTRVJUKCF0aGlzT2JqLT5pc0Fj
dGl2YXRpb25PYmplY3QoKSk7Ci0KLSAgICAvLyBObyBuZWVkIHRvIGNhbGwgdG9UaGlzT2JqZWN0
KCkgb24gdGhlIHRoaXNPYmogYXMgaXQgaXMga25vd24gbm90IHRvIGJlIHRoZSBHbG9iYWxPYmpl
Y3Qgb3IgQWN0aXZhdGlvbk9iamVjdAotICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNP
YmosIGFyZ0xpc3QpOwotfQotCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZh
bHVhdGUoZXhlYyk7Ci19Ci0KLWRvdWJsZSBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYg
PSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgRnVuY3Rpb25DYWxsRG90Tm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTkJPT0xFQU4KLSAgICByZXR1cm4gdi0+dG9Cb29sZWFuKGV4ZWMpOwotfQotCi1pbnQzMl90
IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7
Ci19Ci0KLXVpbnQzMl90IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2
LT50b1VJbnQzMihleGVjKTsKLX0KLQotLy8gRUNNQSAxMS4zCi0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4UmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIC8vIEZJ
WE1FOiBJIHRoaW5rIHdlIGNhbiBkZXRlY3QgdGhlIGFic2Vuc2Ugb2YgZGVwZW5kZW50IGV4cHJl
c3Npb25zIGhlcmUsIAotICAgIC8vIGFuZCBlbWl0IGEgUHJlSW5jIGluc3RlYWQgb2YgYSBQb3N0
SW5jLiBBIHBvc3QtcGFzcyB0byBlbGltaW5hdGUgZGVhZAotICAgIC8vIGNvZGUgd291bGQgd29y
aywgdG9vLgotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50
KG1faWRlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VG9KU051bWJlcihn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIGxvY2FsKTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHNpemVfdCBk
ZXB0aCA9IDA7Ci0gICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVudCwg
aW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwgaW5kZXgpOwotICAgICAgICBSZWdpc3Rl
cklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0U2Nv
cGVkVmFyKGRlcHRoLCBpbmRleCwgdmFsdWUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gb2xkVmFs
dWU7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwg
bV9pZGVudCk7Ci0gICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3RJ
bmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOwotICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG9sZFZhbHVlOwotfQotCi0vLyBJbmNyZW1lbnQKLXZvaWQgUG9zdEluY1Jlc29s
dmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2Fs
U3RvcmFnZSwgTm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQo
bV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3Jh
Z2UsIGluZGV4KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykgUG9zdEluY0NvbnN0Tm9kZShpbmRl
eCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykgUG9zdEluY0xvY2FsVmFy
Tm9kZShpbmRleCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZv
ciBtaXNzZWQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExv
b2t1cChleGVjLCBtX2lkZW50KSk7Ci0KLSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4
ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJl
Z2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0gICAg
Ly8gd2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAg
QVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsK
LSAgICAgICAgaWYgKCgqaXRlciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90
KSkgewotICAgICAgICAgICAgLy8gSWYgbV9pZGVudCBpcyAnYXJndW1lbnRzJywgdGhlIGJhc2Ut
PmdldFByb3BlcnR5U2xvdCgpIG1heSBjYXVzZSAKLSAgICAgICAgICAgIC8vIGJhc2UgKHdoaWNo
IG11c3QgYmUgYW4gQWN0aXZhdGlvbkltcCBpbiBzdWNoIHRoaXMgY2FzZSkgdG8gYmUgdG9ybgot
ICAgICAgICAgICAgLy8gb2ZmIGZyb20gdGhlIGFjdGl2YXRpb24gc3RhY2ssIGluIHdoaWNoIGNh
c2Ugd2UgbmVlZCB0byBnZXQgaXQgYWdhaW4KLSAgICAgICAgICAgIC8vIGZyb20gdGhlIFNjb3Bl
Q2hhaW5JdGVyYXRvci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNPYmplY3QqIGJhc2Ug
PSAqaXRlcjsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJh
c2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgYmFzZS0+cHV0KGV4
ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwotICAgICAgICAg
ICAgcmV0dXJuIHY7Ci0gICAgICAgIH0KLQotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAo
aXRlciAhPSBlbmQpOwotCi0gICAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBtX2lkZW50KTsKLX0KLQotdm9pZCBQb3N0SW5jUmVzb2x2ZU5vZGU6Om9wdGltaXplRm9y
VW5uZWNlc3NhcnlSZXN1bHQoKQotewotICAgIG5ldyAodGhpcykgUHJlSW5jUmVzb2x2ZU5vZGUo
UGxhY2VtZW50TmV3QWRvcHQpOwotfQotCi1KU1ZhbHVlKiBQb3N0SW5jTG9jYWxWYXJOb2RlOjpl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhl
Yy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotCi0gICAg
SlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7Ci0g
ICAgSlNWYWx1ZSogdiA9ICgqc2xvdCktPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgKnNsb3QgPSBq
c051bWJlcih2LT50b051bWJlcihleGVjKSArIDEpOwotICAgIHJldHVybiB2OwotfQotCi12b2lk
IFBvc3RJbmNMb2NhbFZhck5vZGU6Om9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKQotewot
ICAgIG5ldyAodGhpcykgUHJlSW5jTG9jYWxWYXJOb2RlKG1faW5kZXgpOwotfQotCi0vLyBEZWNy
ZW1lbnQKLVJlZ2lzdGVySUQqIFBvc3REZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgLy8gRklYTUU6IEkgdGhp
bmsgd2UgY2FuIGRldGVjdCB0aGUgYWJzZW5zZSBvZiBkZXBlbmRlbnQgZXhwcmVzc2lvbnMgaGVy
ZSwgCi0gICAgLy8gYW5kIGVtaXQgYSBQcmVEZWMgaW5zdGVhZCBvZiBhIFBvc3REZWMuIEEgcG9z
dC1wYXNzIHRvIGVsaW1pbmF0ZSBkZWFkCi0gICAgLy8gY29kZSB3b3VsZCB3b3JrLCB0b28uCi0g
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9p
ZGVudCkpIHsKLSAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkp
Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUb0pTTnVtYmVyKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9j
YWwpOwotICAgIH0KLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsK
LSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVw
dGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIG9sZFZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHZhbHVlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVw
dGgsIGluZGV4LCB2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBvbGRWYWx1ZTsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVX
aXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsK
LSAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4g
b2xkVmFsdWU7Ci19Ci0KLXZvaWQgUG9zdERlY1Jlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwgTm9kZVN0YWNrJikKLXsK
LSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkp
LmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewot
ICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4KSkKLSAgICAgICAgICAg
IG5ldyAodGhpcykgUG9zdERlY0NvbnN0Tm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG5ldyAodGhpcykgUG9zdERlY0xvY2FsVmFyTm9kZShpbmRleCk7Ci0gICAgfQotfQot
Ci1KU1ZhbHVlKiBQb3N0RGVjUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0aW1pemF0aW9uIG9w
cG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBtX2lkZW50KSk7Ci0K
LSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBT
Y29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0
ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0gICAgLy8gd2UgbXVzdCBhbHdheXMgaGF2ZSBz
b21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQot
ICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmdl
dFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAgLy8gU2Vl
IHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQotICAgICAg
ICAgICAgSlNPYmplY3QqIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBz
bG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4
ZWMpIC0gMSkpOwotICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgIH0KLQotICAgICAgICAr
K2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwotCi0gICAgcmV0dXJuIHRocm93VW5k
ZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBtX2lkZW50KTsKLX0KLQotdm9pZCBQb3N0RGVjUmVz
b2x2ZU5vZGU6Om9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKQotewotICAgIG5ldyAodGhp
cykgUHJlRGVjUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpOwotfQotCi1KU1ZhbHVlKiBQ
b3N0RGVjTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNo
YWluKCkudG9wKCkpOwotCi0gICAgSlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdl
KClbbV9pbmRleF0udmFsdWU7Ci0gICAgSlNWYWx1ZSogdiA9ICgqc2xvdCktPnRvSlNOdW1iZXIo
ZXhlYyk7Ci0gICAgKnNsb3QgPSBqc051bWJlcih2LT50b051bWJlcihleGVjKSAtIDEpOwotICAg
IHJldHVybiB2OwotfQotCi1kb3VibGUgUG9zdERlY0xvY2FsVmFyTm9kZTo6aW5saW5lRXZhbHVh
dGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQo
ZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotCi0g
ICAgSlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7
Ci0gICAgZG91YmxlIG4gPSAoKnNsb3QpLT50b051bWJlcihleGVjKTsKLSAgICAqc2xvdCA9IGpz
TnVtYmVyKG4gLSAxKTsKLSAgICByZXR1cm4gbjsKLX0KLQotZG91YmxlIFBvc3REZWNMb2NhbFZh
ck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgUG9z
dERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
ZXhlYyk7Ci0gICAgcmV0dXJuICByZXN1bHQgPiAwLjAgfHwgMC4wID4gcmVzdWx0OyAvLyBOYU4g
cHJvZHVjZXMgZmFsc2UgYXMgd2VsbAotfQotCi1pbnQzMl90IFBvc3REZWNMb2NhbFZhck5vZGU6
OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0K
LQotdWludDMyX3QgUG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIo
aW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLXZvaWQgUG9zdERlY0xvY2FsVmFy
Tm9kZTo6b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpCi17Ci0gICAgbmV3ICh0aGlzKSBQ
cmVEZWNMb2NhbFZhck5vZGUobV9pbmRleCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBQb3N0Zml4QnJhY2tldE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi12b2lkIFBvc3RmaXhCcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkp
OwotfQotCi1SZWdpc3RlcklEKiBQb3N0SW5jQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0Lmdl
dCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkp
OwotICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG9sZFZhbHVlOwotfQotCi1KU1ZhbHVlKiBQb3N0SW5jQnJhY2tldE5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJh
c2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKLSAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBtX3N1YnNjcmlwdC0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiBiYXNlID0g
YmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIHVpbnQzMl90IHByb3BlcnR5SW5kZXg7
Ci0gICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKHByb3BlcnR5SW5kZXgpKSB7Ci0gICAgICAg
IFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBi
YXNlLCBwcm9wZXJ0eUluZGV4KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCi0KLSAgICAgICAgSlNWYWx1ZSogdjIgPSB2LT50b0pTTnVtYmVyKGV4ZWMp
OwotICAgICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwganNOdW1iZXIodjItPnRv
TnVtYmVyKGV4ZWMpICsgMSkpOwotCi0gICAgICAgIHJldHVybiB2MjsKLSAgICB9Ci0KLSAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShzdWJzY3JpcHQtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHBy
b3BlcnR5TmFtZSkgOiBqc1VuZGVmaW5lZCgpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICBKU1ZhbHVlKiB2MiA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgYmFzZS0+cHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwganNOdW1iZXIodjItPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwot
ICAgIHJldHVybiB2MjsKLX0KLQotUmVnaXN0ZXJJRCogUG9zdERlY0JyYWNrZXROb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkp
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJh
dG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHBy
b3BlcnR5LmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0
UG9zdERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFs
dWUuZ2V0KCkpOwotICAgIHJldHVybiBvbGRWYWx1ZTsKLX0KLQotSlNWYWx1ZSogUG9zdERlY0Jy
YWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gbV9zdWJzY3JpcHQt
PmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09i
amVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBw
cm9wZXJ0eUluZGV4OwotICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4
KSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IGJh
c2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3QuZ2V0
VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgICAgIEpTVmFsdWUqIHYyID0gdi0+dG9K
U051bWJlcihleGVjKTsKLSAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIHByb3BlcnR5SW5kZXgsIGpz
TnVtYmVyKHYyLT50b051bWJlcihleGVjKSAtIDEpKTsKLSAgICAgICAgcmV0dXJuIHYyOwotICAg
IH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhl
YykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhl
YywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gdi0+dG9KU051bWJlcihleGVjKTsKLSAg
ICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBqc051bWJlcih2Mi0+dG9OdW1iZXIoZXhl
YykgLSAxKSk7Ci0gICAgcmV0dXJuIHYyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUG9zdGZpeERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi12b2lkIFBvc3RmaXhEb3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2Um
LCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5n
ZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFBvc3RJbmNEb3ROb2RlOjplbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAgIFJlZ2lzdGVySUQqIG9sZFZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHZhbHVlLmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgdmFsdWUuZ2V0KCkpOwotICAgIHJldHVybiBvbGRWYWx1ZTsKLX0KLQotSlNWYWx1
ZSogUG9zdEluY0RvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1
ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVl
KiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5n
ZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gdi0+dG9KU051bWJlcihleGVj
KTsKLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1iZXIodjItPnRvTnVtYmVyKGV4
ZWMpICsgMSkpOwotICAgIHJldHVybiB2MjsKLX0KLQotUmVnaXN0ZXJJRCogUG9zdERlY0RvdE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQot
ewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZS5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0g
ICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIG9s
ZFZhbHVlOwotfQotCi1KU1ZhbHVlKiBQb3N0RGVjRG90Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9iYXNl
LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTT2Jq
ZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIFByb3BlcnR5U2xv
dCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9p
ZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRl
ZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogdjIg
PSB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBqc051
bWJlcih2Mi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7Ci0gICAgcmV0dXJuIHYyOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9zdGZpeEVycm9yTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBQb3N0Zml4RXJyb3JOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQotewotICAg
IHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFJlZmVyZW5jZUVycm9yLCBtX29wZXJh
dG9yID09IE9wUGx1c1BsdXMgPyAiUG9zdGZpeCArKyBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVl
IHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIgOiAiUG9zdGZpeCAtLSBvcGVyYXRvciBhcHBsaWVk
IHRvIHZhbHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwotfQotCi1KU1ZhbHVlKiBQb3N0
Zml4RXJyb3JOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiUG9zdGZpeCAlcyBvcGVyYXRv
ciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIsCi0gICAgICAgICAg
ICAgICBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiKysiIDogIi0tIik7Ci0gICAgaGFuZGxl
RXhjZXB0aW9uKGV4ZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewot
ICAgIGlmIChnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKLSAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBm
YWxzZSk7Ci0KLSAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFz
ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIG1faWRlbnQpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBi
YXNlKSwgYmFzZSwgbV9pZGVudCk7Ci19Ci0KLXZvaWQgRGVsZXRlUmVzb2x2ZU5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpCi17Ci0g
ICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUuZ2V0KG1faWRlbnQudXN0cmluZygpLnJlcCgpKS5n
ZXRJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCi0gICAg
ICAgIG5ldyAodGhpcykgTG9jYWxWYXJEZWxldGVOb2RlKCk7Ci19Ci0KLS8vIEVDTUEgMTEuNC4x
Ci0KLUpTVmFsdWUqIERlbGV0ZVJlc29sdmVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBDaGVjayBmb3IgbWlzc2VkIG9wdGltaXphdGlvbiBv
cHBvcnR1bml0eS4KLSAgICBBU1NFUlQoIWNhblNraXBMb29rdXAoZXhlYywgbV9pZGVudCkpOwot
Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUg
c29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0K
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0g
ICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZS0+
ZGVsZXRlUHJvcGVydHkoZXhlYywgbV9pZGVudCkpOwotCi0gICAgICAgICsraXRlcjsKLSAgICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwotfQot
Ci1KU1ZhbHVlKiBMb2NhbFZhckRlbGV0ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXROb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgp
KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJz
Y3JpcHQuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7Ci19Ci0KLXZv
aWQgRGVsZXRlQnJhY2tldE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9zdWJzY3JpcHQu
Z2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotSlNWYWx1
ZSogRGVsZXRlQnJhY2tldE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBt
X3N1YnNjcmlwdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
LQotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAg
IHVpbnQzMl90IHByb3BlcnR5SW5kZXg7Ci0gICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKHBy
b3BlcnR5SW5kZXgpKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGJhc2UtPmRlbGV0ZVByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5SW5kZXgpKTsKLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
KHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZS0+
ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZ2lzdGVySUQq
IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMCwg
bV9pZGVudCk7Ci19Ci0KLXZvaWQgRGVsZXRlRG90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2Jhc2UuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBEZWxldGVEb3ROb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUg
PSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVl
LT50b09iamVjdChleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgcmV0
dXJuIGpzQm9vbGVhbihiYXNlLT5kZWxldGVQcm9wZXJ0eShleGVjLCBtX2lkZW50KSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogRGVsZXRlVmFsdWVO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
LXsKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLQotICAgIC8vIGRlbGV0
ZSBvbiBhIG5vbi1sb2NhdGlvbiBleHByZXNzaW9uIGlnbm9yZXMgdGhlIHZhbHVlIGFuZCByZXR1
cm5zIHRydWUKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHRydWUpOwotfQotCi12b2lkIERlbGV0ZVZhbHVlTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBEZWxldGVWYWx1
ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIG1f
ZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAg
IC8vIGRlbGV0ZSBvbiBhIG5vbi1sb2NhdGlvbiBleHByZXNzaW9uIGlnbm9yZXMgdGhlIHZhbHVl
IGFuZCByZXR1cm5zIHRydWUKLSAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVm9pZE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHIw
LmdldCgpKSwganNVbmRlZmluZWQoKSk7Ci19Ci0KLXZvaWQgVm9pZE5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYs
IGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVT
dGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS40LjIKLUpTVmFsdWUq
IFZvaWROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0K
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotLy8gRUNNQSAxMS40LjMKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFR5cGVPZlZhbHVlTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZSogdHlwZVN0
cmluZ0ZvclZhbHVlKEpTVmFsdWUqIHYpIEtKU19GQVNUX0NBTEw7Ci1zdGF0aWMgSlNWYWx1ZSog
dHlwZVN0cmluZ0ZvclZhbHVlKEpTVmFsdWUqIHYpCi17Ci0gICAgc3dpdGNoICh2LT50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBVbmRlZmluZWRUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKCJ1bmRlZmluZWQiKTsKLSAgICAgICAgY2FzZSBOdWxsVHlwZToKLSAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZygib2JqZWN0Iik7Ci0gICAgICAgIGNhc2UgQm9vbGVhblR5cGU6Ci0gICAg
ICAgICAgICByZXR1cm4ganNTdHJpbmcoImJvb2xlYW4iKTsKLSAgICAgICAgY2FzZSBOdW1iZXJU
eXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJudW1iZXIiKTsKLSAgICAgICAgY2Fz
ZSBTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJzdHJpbmciKTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh2LT5pc09iamVjdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gUmV0dXJuICJ1bmRlZmluZWQiIGZvciBvYmplY3RzIHRoYXQgc2hvdWxkIGJl
IHRyZWF0ZWQKLSAgICAgICAgICAgICAgICAvLyBhcyBudWxsIHdoZW4gZG9pbmcgY29tcGFyaXNv
bnMuCi0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPm1hc3F1
ZXJhZGVBc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
InVuZGVmaW5lZCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odiktPmltcGxlbWVudHNDYWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBq
c1N0cmluZygiZnVuY3Rpb24iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCJvYmplY3QiKTsKLSAgICB9Ci19Ci0KLXZvaWQgVHlwZU9mUmVzb2x2ZU5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYp
Ci17Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUuZ2V0KG1faWRlbnQudXN0cmluZygpLnJl
cCgpKS5nZXRJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkp
Ci0gICAgICAgIG5ldyAodGhpcykgTG9jYWxWYXJUeXBlT2ZOb2RlKGluZGV4KTsKLX0KLQotSlNW
YWx1ZSogTG9jYWxWYXJUeXBlT2ZOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5z
Y29wZUNoYWluKCkudG9wKCkpOwotCi0gICAgcmV0dXJuIHR5cGVTdHJpbmdGb3JWYWx1ZShleGVj
LT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFR5cGVP
ZlJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKLXsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0
ZXJGb3JMb2NhbChtX2lkZW50KSkKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9m
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKLQotICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzY3JhdGNoID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZShnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChzY3JhdGNoLmdldCgpLCBzY3JhdGNoLmdldCgpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzY3JhdGNo
LmdldCgpKSwgc2NyYXRjaC5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFR5cGVPZlJlc29sdmVOb2Rl
OjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBjb25zdCBT
Y29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRl
cmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9
IGNoYWluLmVuZCgpOwotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4g
dGhlIHNjb3BlIGNoYWluCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgIEpTT2JqZWN0KiBiYXNlOwotICAgIGRvIHsKLSAgICAgICAgYmFzZSA9
ICppdGVyOwotICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBi
YXNlLCBtX2lkZW50KTsKLSAgICAgICAgICAgIHJldHVybiB0eXBlU3RyaW5nRm9yVmFsdWUodik7
Ci0gICAgICAgIH0KLQotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQp
OwotCi0gICAgcmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgc3JjLmdldCgpKTsKLX0KLQotSlNWYWx1ZSogVHlwZU9mVmFsdWVOb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9l
eHByLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAg
cmV0dXJuIHR5cGVTdHJpbmdGb3JWYWx1ZSh2KTsKLX0KLQotLy8gRUNNQSAxMS40LjQgYW5kIDEx
LjQuNQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4UmVzb2x2ZU5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBQcmVJ
bmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCi17Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lz
dGVyRm9yTG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29u
c3RhbnQobV9pZGVudCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCAxLjApOwot
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBsb2NhbCwgcjAu
Z2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBnZW5lcmF0b3IuZW1pdFByZUlu
Yyhsb2NhbCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIGxvY2FsKTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHNpemVf
dCBkZXB0aCA9IDA7Ci0gICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVu
dCwgaW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3Bl
ZFZhcihnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGRlcHRoLCBpbmRleCk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJlSW5jKHByb3BEc3QuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFNjb3BlZFZhcihkZXB0aCwgaW5kZXgsIHByb3BEc3QuZ2V0KCkpOwotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0
LmdldCgpKTs7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IHByb3BEc3QuZ2V0KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJlSW5jKHByb3BE
c3QuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCBwcm9wRHN0LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKLX0KLQotdm9pZCBQcmVJbmNSZXNvbHZlTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3Jh
Z2UsIE5vZGVTdGFjayYpCi17Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUuZ2V0KG1faWRl
bnQudXN0cmluZygpLnJlcCgpKS5nZXRJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpIHsKLSAgICAgICAgaWYgKGlzQ29uc3RhbnQobG9jYWxTdG9yYWdlLCBp
bmRleCkpCi0gICAgICAgICAgICBuZXcgKHRoaXMpIFByZUluY0NvbnN0Tm9kZShpbmRleCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykgUHJlSW5jTG9jYWxWYXJOb2RlKGlu
ZGV4KTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIFByZUluY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlh
YmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICBKU1ZhbHVlKiog
c2xvdCA9ICZleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLQotICAgIGRvdWJs
ZSBuID0gKCpzbG90KS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1ZSogbjIgPSBqc051bWJl
cihuICsgMSk7Ci0gICAgKnNsb3QgPSBuMjsKLSAgICByZXR1cm4gbjI7Ci19Ci0KLUpTVmFsdWUq
IFByZUluY1Jlc29sdmVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsK
LSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0gICAgLy8gd2UgbXVzdCBhbHdheXMg
aGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5k
KTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgaWYgKCgqaXRl
ciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAg
Ly8gU2VlIHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQot
ICAgICAgICAgICAgSlNPYmplY3QqIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwotCi0gICAgICAgICAgICBk
b3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgSlNWYWx1ZSogbjIgPSBq
c051bWJlcihuICsgMSk7Ci0gICAgICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgbjIp
OwotCi0gICAgICAgICAgICByZXR1cm4gbjI7Ci0gICAgICAgIH0KLQotICAgICAgICArK2l0ZXI7
Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwotCi0gICAgcmV0dXJuIHRocm93VW5kZWZpbmVk
VmFyaWFibGVFcnJvcihleGVjLCBtX2lkZW50KTsKLX0KLQotUmVnaXN0ZXJJRCogUHJlRGVjUmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50
KG1faWRlbnQpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0
b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgLTEuMCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKGxv
Y2FsKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgbG9jYWwpOwotICAgIH0KLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRl
cHRoID0gMDsKLSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBp
bmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFy
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgZGVwdGgsIGluZGV4KTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcmVEZWMocHJvcERzdC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0UHV0U2NvcGVkVmFyKGRlcHRoLCBpbmRleCwgcHJvcERzdC5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0
KCkpOzsKLSAgICB9Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJv
cERzdC5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQcmVEZWMocHJvcERzdC5n
ZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHBy
b3BEc3QuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwotfQotCi12b2lkIFByZURlY1Jlc29sdmVOb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwg
Tm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51
c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSkgewotICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4
KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykgUHJlRGVjQ29uc3ROb2RlKGluZGV4KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbmV3ICh0aGlzKSBQcmVEZWNMb2NhbFZhck5vZGUoaW5kZXgp
OwotICAgIH0KLX0KLQotSlNWYWx1ZSogUHJlRGVjTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVP
YmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIEpTVmFsdWUqKiBzbG90
ID0gJmV4ZWMtPmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVlOwotCi0gICAgZG91YmxlIG4g
PSAoKnNsb3QpLT50b051bWJlcihleGVjKTsKLSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4g
LSAxKTsKLSAgICAqc2xvdCA9IG4yOwotICAgIHJldHVybiBuMjsKLX0KLQotSlNWYWx1ZSogUHJl
RGVjUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAg
IFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWlu
SXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZl
IHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwot
Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgZG8gewotICAgICAgICBpZiAoKCppdGVyKS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICAvLyBT
ZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jlc29sdmVOb2RlOjpldmFsdWF0ZSgpLgotCi0gICAg
ICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwotICAgICAgICAgICAgSlNWYWx1ZSogdiA9
IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7Ci0KLSAgICAgICAgICAgIGRvdWJs
ZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVt
YmVyKG4gLSAxKTsKLSAgICAgICAgICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBuMik7Ci0K
LSAgICAgICAgICAgIHJldHVybiBuMjsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRlcjsKLSAg
ICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJlSW5jQ29uc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotSlNWYWx1ZSogUHJlSW5jQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBl
eGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLT5sb2Nh
bFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykgKyAxKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZURlY0NvbnN0Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFsdWUqIFByZURlY0NvbnN0Tm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMt
PnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICByZXR1
cm4ganNOdW1iZXIoZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWUtPnRvTnVtYmVy
KGV4ZWMpIC0gMSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0
SW5jQ29uc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1
ZSogUG9zdEluY0NvbnN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVD
aGFpbigpLnRvcCgpKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYy0+bG9jYWxTdG9yYWdlKClb
bV9pbmRleF0udmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFBvc3REZWNDb25zdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1KU1ZhbHVlKiBQb3N0RGVjQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmpl
Y3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBqc051bWJlcihl
eGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4QnJhY2tldE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFByZWZpeEJyYWNrZXROb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3Qg
U3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykK
LXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFByZUluY0JyYWNrZXRO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
LXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BE
c3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogdmFs
dWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHBy
b3BlcnR5LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZUluYyh2YWx1ZSk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BE
c3QuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBQcmVJbmNCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0g
bV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAg
IEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUt
PnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsKLSAgICBpZiAo
c3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3Bl
cnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLQotICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsg
MSk7Ci0gICAgICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eUluZGV4LCBuMik7Ci0KLSAgICAg
ICAgcmV0dXJuIG4yOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNj
cmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFs
dWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSA/
IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIG4yID0ganNOdW1i
ZXIodi0+dG9OdW1iZXIoZXhlYykgKyAxKTsKLSAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlO
YW1lLCBuMik7Ci0KLSAgICByZXR1cm4gbjI7Ci19Ci0KLVJlZ2lzdGVySUQqIFByZURlY0JyYWNr
ZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKLXsKLSAgICAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVnaXN0
ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJhc2Uu
Z2V0KCksIHByb3BlcnR5LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZURlYyh2YWx1ZSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
dmFsdWUpOwotICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHByb3BEc3QuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBQcmVEZWNCcmFja2V0Tm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBi
YXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsK
LSAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAgICAgICAg
UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJh
c2UsIHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKLSAgICAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKHYtPnRvTnVtYmVy
KGV4ZWMpIC0gMSk7Ci0gICAgICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eUluZGV4LCBuMik7
Ci0KLSAgICAgICAgcmV0dXJuIG4yOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90Owot
ICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIG4y
ID0ganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKTsKLSAgICBiYXNlLT5wdXQoZXhlYywg
cHJvcGVydHlOYW1lLCBuMik7Ci0KLSAgICByZXR1cm4gbjI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVmaXhEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBQcmVmaXhEb3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fYmFzZS5nZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFByZUluY0RvdE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJv
cERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQcmVJ
bmModmFsdWUpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgcHJvcERzdC5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFByZUluY0RvdE5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VW
YWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lk
ZW50KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAg
IGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1ZSogbjIgPSBqc051bWJl
cihuICsgMSk7Ci0gICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIG4yKTsKLQotICAgIHJldHVy
biBuMjsKLX0KLQotUmVnaXN0ZXJJRCogUHJlRGVjRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAg
ICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm9wRHN0LmdldCgp
LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZURlYyh2YWx1ZSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlKTsK
LSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9w
RHN0LmdldCgpKTsKLX0KLQotSlNWYWx1ZSogUHJlRGVjRG90Tm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9i
YXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpT
T2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
bV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNV
bmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgZG91YmxlIG4g
PSB2LT50b051bWJlcihleGVjKTsKLSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gLSAxKTsK
LSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgbjIpOwotCi0gICAgcmV0dXJuIG4yOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4RXJyb3JOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIFByZWZpeEVycm9y
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKLXsK
LSAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VFcnJvciwgbV9v
cGVyYXRvciA9PSBPcFBsdXNQbHVzID8gIlByZWZpeCArKyBvcGVyYXRvciBhcHBsaWVkIHRvIHZh
bHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIgOiAiUHJlZml4IC0tIG9wZXJhdG9yIGFwcGxp
ZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIik7Ci19Ci0KLUpTVmFsdWUqIFBy
ZWZpeEVycm9yTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIlByZWZpeCAlcyBvcGVyYXRv
ciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIsCi0gICAgICAgICAg
ICAgICBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiKysiIDogIi0tIik7Ci0gICAgaGFuZGxl
RXhjZXB0aW9uKGV4ZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVW5hcnlQbHVzTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBVbmFyeVBsdXNOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWdpc3Rl
cklEKiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRUb0pTTnVtYmVyKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHNyYyk7Ci19Ci0KLXZvaWQgVW5hcnlQbHVzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjQuNgotSlNWYWx1ZSogVW5hcnlQbHVzTm9k
ZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1
ZSogdiA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICByZXR1cm4gdi0+dG9KU051bWJlcihleGVjKTsKLX0KLQotYm9vbCBVbmFyeVBsdXNO
b2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gbV9leHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotZG91Ymxl
IFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLX0K
LQotaW50MzJfdCBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4
ZWMpOwotfQotCi11aW50MzJfdCBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRl
VG9JbnQzMihleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5l
Z2F0ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJ
RCogTmVnYXRlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCi17Ci0gICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
ZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmVnYXRlKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7Ci19Ci0KLXZvaWQgTmVnYXRlTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjQuNwotSlNW
YWx1ZSogTmVnYXRlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgLy8gTm8gbmVlZCB0byBjaGVjayBleGNlcHRpb24sIGNhbGxlciB3aWxsIGRvIHNv
IHJpZ2h0IGFmdGVyIGV2YWx1YXRlKCkKLSAgICByZXR1cm4ganNOdW1iZXIoLW1fZXhwci0+ZXZh
bHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBOZWdhdGVOb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgZXhjZXB0aW9uLCBjYWxsZXIgd2lsbCBkbyBzbyByaWdodCBhZnRlciBldmFsdWF0
ZVRvTnVtYmVyKCkKLSAgICByZXR1cm4gLW1fZXhwci0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpdHdpc2VOb3ROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogQml0d2lzZU5vdE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQot
ewotICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdE5vdChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBzcmMpOwotfQotCi12b2lkIEJpdHdpc2VOb3ROb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuNC44Ci1pbnQzMl90IEJp
dHdpc2VOb3ROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIH5tX2V4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
LX0KLQotSlNWYWx1ZSogQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50
MzIoZXhlYykpOwotfQotCi1kb3VibGUgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlVG9JbnQzMihleGVjKTsKLX0KLQotYm9vbCBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVUb0Jv
b2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQotaW50MzJfdCBCaXR3aXNlTm90Tm9kZTo6ZXZh
bHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IEJpdHdpc2VOb3RO
b2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIExvZ2ljYWxOb3ROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWdpc3RlcklE
KiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXROb3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKLX0K
LQotdm9pZCBMb2dpY2FsTm90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0
KCkpOwotfQotCi0vLyBFQ01BIDExLjQuOQotSlNWYWx1ZSogTG9naWNhbE5vdE5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xl
YW4oIW1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQotCi1ib29sIExvZ2ljYWxO
b3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gIW1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNdWx0aXBsaWNhdGl2ZSBOb2RlcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBNdWx0Tm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5n
ZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0y
LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRNdWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19Ci0KLXZvaWQg
TXVsdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9k
ZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS41LjEKLWRvdWJs
ZSBNdWx0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBkb3VibGUgbjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIGRvdWJsZSBuMiA9IG1fdGVy
bTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0dXJuIG4xICogbjI7Ci19Ci0KLUpT
VmFsdWUqIE11bHROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19
Ci0KLWRvdWJsZSBNdWx0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsK
LX0KLQotYm9vbCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGlubGluZUV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7Ci0gICAgcmV0dXJuICByZXN1bHQgPiAwLjAgfHwgMC4wID4gcmVzdWx0OyAvLyBO
YU4gcHJvZHVjZXMgZmFsc2UgYXMgd2VsbAotfQotCi1pbnQzMl90IE11bHROb2RlOjpldmFsdWF0
ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLXVpbnQz
Ml90IE11bHROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVt
YmVyKGV4ZWMpKTsKLX0KLQotUmVnaXN0ZXJJRCogRGl2Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGRpdmlkZW5kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOwotICAgIFJl
Z2lzdGVySUQqIGRpdmlzb3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGl2KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZGl2aWRlbmQuZ2V0KCkpLCBkaXZpZGVuZC5nZXQoKSwgZGl2aXNvcik7Ci19Ci0KLXZvaWQg
RGl2Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjUuMgotZG91Ymxl
IERpdk5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgZG91YmxlIG4xID0gbV90ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSBtX3Rlcm0y
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiBuMSAvIG4yOwotfQotCi1KU1Zh
bHVlKiBEaXZOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0K
LWRvdWJsZSBEaXZOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQot
Ci1pbnQzMl90IERpdk5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKLX0KLQotdWludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9V
SW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIE1v
ZE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBkaXZpZGVuZCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBkaXZpc29yID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE1vZChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGRpdmlkZW5kLmdldCgpKSwgZGl2aWRlbmQuZ2V0
KCksIGRpdmlzb3IpOwotfQotCi12b2lkIE1vZE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV90ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKLX0K
LQotLy8gRUNNQSAxMS41LjMKLWRvdWJsZSBNb2ROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGRvdWJsZSBuMSA9IG1fdGVy
bTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVS
Ci0gICAgZG91YmxlIG4yID0gbV90ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICBy
ZXR1cm4gZm1vZChuMSwgbjIpOwotfQotCi1KU1ZhbHVlKiBNb2ROb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBNb2ROb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIE1vZE5vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGRvdWJsZSByZXN1
bHQgPSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiAgcmVzdWx0ID4g
MC4wIHx8IDAuMCA+IHJlc3VsdDsgLy8gTmFOIHByb2R1Y2VzIGZhbHNlIGFzIHdlbGwKLX0KLQot
aW50MzJfdCBNb2ROb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051
bWJlcihleGVjKSk7Ci19Ci0KLXVpbnQzMl90IE1vZE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvVUlu
dDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpdmUgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGRvdWJsZSB0aHJvd091dE9mTWVtb3J5RXJyb3JUb051
bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU09iamVjdCogZXJy
b3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk91dCBvZiBtZW1vcnkiKTsK
LSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwotICAgIHJldHVybiAwLjA7Ci19Ci0KLS8v
IEVDTUEgMTEuNgotc3RhdGljIEpTVmFsdWUqIGFkZFNsb3dDYXNlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCi17Ci0gICAgLy8gZXhjZXB0
aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKLSAgICBKU1ZhbHVl
KiBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjLCBVbnNwZWNpZmllZFR5cGUpOwotICAgIEpTVmFs
dWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3BlY2lmaWVkVHlwZSk7Ci0KLSAgICBp
ZiAocDEtPmlzU3RyaW5nKCkgfHwgcDItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgVVN0cmluZyB2
YWx1ZSA9IHAxLT50b1N0cmluZyhleGVjKSArIHAyLT50b1N0cmluZyhleGVjKTsKLSAgICAgICAg
aWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4ganNOdW1iZXIocDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRvTnVtYmVyKGV4ZWMp
KTsKLX0KLQotc3RhdGljIGRvdWJsZSBhZGRTbG93Q2FzZVRvTnVtYmVyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCi17Ci0gICAgLy8gZXhj
ZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKLSAgICBKU1Zh
bHVlKiBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjLCBVbnNwZWNpZmllZFR5cGUpOwotICAgIEpT
VmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3BlY2lmaWVkVHlwZSk7Ci0KLSAg
ICBpZiAocDEtPmlzU3RyaW5nKCkgfHwgcDItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgVVN0cmlu
ZyB2YWx1ZSA9IHAxLT50b1N0cmluZyhleGVjKSArIHAyLT50b1N0cmluZyhleGVjKTsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvclRvTnVtYmVyKGV4ZWMpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9Eb3VibGUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRvTnVtYmVyKGV4
ZWMpOwotfQotCi0vLyBGYXN0LXBhdGggY2hvaWNlcyBoZXJlIGFyZSBiYXNlZCBvbiBmcmVxdWVu
Y3kgZGF0YSBmcm9tIFN1blNwaWRlcjoKLS8vICAgIDx0aW1lcz4gQWRkIGNhc2U6IDx0MT4gPHQy
PgotLy8gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgICA1NjI3MTYwIEFkZCBj
YXNlOiAxIDEKLS8vICAgIDI0NzQyNyAgQWRkIGNhc2U6IDUgNQotLy8gICAgMjA5MDEgICBBZGQg
Y2FzZTogNSA2Ci0vLyAgICAxMzk3OCAgIEFkZCBjYXNlOiA1IDEKLS8vICAgIDQwMDAgICAgQWRk
IGNhc2U6IDEgNQotLy8gICAgMSAgICAgICBBZGQgY2FzZTogMyA1Ci0KLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSogYWRkKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwg
SlNWYWx1ZSogdjIpCi17Ci0gICAgSlNUeXBlIHQxID0gdjEtPnR5cGUoKTsKLSAgICBKU1R5cGUg
dDIgPSB2Mi0+dHlwZSgpOwotICAgIGNvbnN0IHVuc2lnbmVkIGJvdGhUeXBlcyA9ICh0MSA8PCAz
KSB8IHQyOwotCi0gICAgaWYgKGJvdGhUeXBlcyA9PSAoKE51bWJlclR5cGUgPDwgMykgfCBOdW1i
ZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b051bWJlcihleGVjKSArIHYy
LT50b051bWJlcihleGVjKSk7Ci0gICAgaWYgKGJvdGhUeXBlcyA9PSAoKFN0cmluZ1R5cGUgPDwg
MykgfCBTdHJpbmdUeXBlKSkgewotICAgICAgICBVU3RyaW5nIHZhbHVlID0gc3RhdGljX2Nhc3Q8
U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52
YWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4ganNTdHJpbmcodmFs
dWUpOwotICAgIH0KLQotICAgIC8vIEFsbCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9u
Ci0gICAgcmV0dXJuIGFkZFNsb3dDYXNlKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZG91YmxlIGFkZFRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB2MSwgSlNWYWx1ZSogdjIpCi17Ci0gICAgSlNUeXBlIHQxID0gdjEtPnR5cGUoKTsKLSAg
ICBKU1R5cGUgdDIgPSB2Mi0+dHlwZSgpOwotICAgIGNvbnN0IHVuc2lnbmVkIGJvdGhUeXBlcyA9
ICh0MSA8PCAzKSB8IHQyOwotCi0gICAgaWYgKGJvdGhUeXBlcyA9PSAoKE51bWJlclR5cGUgPDwg
MykgfCBOdW1iZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIHYxLT50b051bWJlcihleGVjKSArIHYy
LT50b051bWJlcihleGVjKTsKLSAgICBpZiAoYm90aFR5cGVzID09ICgoU3RyaW5nVHlwZSA8PCAz
KSB8IFN0cmluZ1R5cGUpKSB7Ci0gICAgICAgIFVTdHJpbmcgdmFsdWUgPSBzdGF0aWNfY2FzdDxT
dHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZh
bHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3JUb051bWJlcihleGVjKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvRG91YmxlKCk7Ci0gICAgfQotCi0gICAgLy8gQWxsIG90aGVyIGNhc2VzIGFyZSBwcmV0dHkg
dW5jb21tb24KLSAgICByZXR1cm4gYWRkU2xvd0Nhc2VUb051bWJlcihleGVjLCB2MSwgdjIpOwot
fQotCi1SZWdpc3RlcklEKiBBZGROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdEFkZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMx
LmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBBZGROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7Ci19
Ci0KLS8vIEVDTUEgMTEuNi4xCi1KU1ZhbHVlKiBBZGROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fdGVybTEtPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU1ZhbHVlKiB2
MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICByZXR1cm4gYWRkKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLWRvdWJsZSBBZGROb2RlOjpp
bmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHYxID0gbV90ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0KLSAgICBKU1ZhbHVlKiB2MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4
ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotCi0gICAgcmV0dXJuIGFkZFRvTnVt
YmVyKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLWRvdWJsZSBBZGROb2RlOjpldmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1pbnQzMl90IEFkZE5vZGU6OmV2YWx1YXRlVG9JbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotdWludDMyX3QgQWRk
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KSk7Ci19Ci0KLWRvdWJsZSBBZGROdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBkb3VibGUgbjEgPSBtX3Rlcm0x
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIGRvdWJsZSBuMiA9IG1fdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0
dXJuIG4xICsgbjI7Ci19Ci0KLUpTVmFsdWUqIEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBBZGROdW1iZXJzTm9kZTo6ZXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsKLX0KLQotaW50MzJfdCBBZGROdW1iZXJz
Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykp
OwotfQotCi11aW50MzJfdCBBZGROdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIo
aW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLUpTVmFsdWUqIEFkZFN0cmluZ3NO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlKiB2MSA9IG1fdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICBKU1ZhbHVlKiB2MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIp
LT52YWx1ZSgpKTsKLX0KLQotSlNWYWx1ZSogQWRkU3RyaW5nTGVmdE5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV90ZXJt
MS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpT
VmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3Bl
Y2lmaWVkVHlwZSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+
KHYxKS0+dmFsdWUoKSArIHAyLT50b1N0cmluZyhleGVjKSk7Ci19Ci0KLUpTVmFsdWUqIEFkZFN0
cmluZ1JpZ2h0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgSlNWYWx1ZSogdjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogdjIgPSBtX3Rlcm0yLT5ldmFsdWF0ZShl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogcDEgPSB2
MS0+dG9QcmltaXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKLSAgICByZXR1cm4ganNTdHJp
bmcocDEtPnRvU3RyaW5nKGV4ZWMpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52YWx1
ZSgpKTsKLX0KLQotUmVnaXN0ZXJJRCogU3ViTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNy
YzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCog
c3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRTdWIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgp
KSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19Ci0KLXZvaWQgU3ViTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNr
LmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0
KCkpOwotfQotCi0vLyBFQ01BIDExLjYuMgotZG91YmxlIFN1Yk5vZGU6OmlubGluZUV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIG4x
ID0gbV90ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSBtX3Rlcm0yLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OwotICAgIHJldHVybiBuMSAtIG4yOwotfQotCi1KU1ZhbHVlKiBTdWJOb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5s
aW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBTdWJOb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1pbnQzMl90IFN1Yk5vZGU6OmV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotdWlu
dDMyX3QgU3ViTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051
bWJlcihleGVjKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTaGlm
dCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJ
RCogTGVmdFNoaWZ0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzaGlmdCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZWZ0
U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWwuZ2V0KCkpLCB2YWwuZ2V0
KCksIHNoaWZ0KTsKLX0KLQotdm9pZCBMZWZ0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7
Ci19Ci0KLS8vIEVDTUEgMTEuNy4xCi1pbnQzMl90IExlZnRTaGlmdE5vZGU6OmlubGluZUV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpbnQgaTEg
PSBtX3Rlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgdW5zaWduZWQgaW50IGkyID0gbV90ZXJtMi0+ZXZhbHVhdGVUb1VJbnQzMihl
eGVjKSAmIDB4MWY7Ci0gICAgcmV0dXJuIChpMSA8PCBpMik7Ci19Ci0KLUpTVmFsdWUqIExlZnRT
aGlmdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOwotfQotCi1kb3Vi
bGUgTGVmdFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQot
Ci1pbnQzMl90IExlZnRTaGlmdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMp
OwotfQotCi11aW50MzJfdCBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50
MzIoZXhlYyk7Ci19Ci0KLVJlZ2lzdGVySUQqIFJpZ2h0U2hpZnROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOwotICAgIFJl
Z2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdFJpZ2h0U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCB2YWwuZ2V0KCkpLCB2YWwuZ2V0KCksIHNoaWZ0KTsKLX0KLQotdm9pZCBSaWdodFNo
aWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjcuMgotaW50MzJf
dCBSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIGludCBpMSA9IG1fdGVybTEtPmV2YWx1YXRlVG9JbnQzMihl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICB1bnNpZ25lZCBpbnQgaTIg
PSBtX3Rlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKLSAgICByZXR1cm4gKGkx
ID4+IGkyKTsKLX0KLQotSlNWYWx1ZSogUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFs
dWF0ZVRvSW50MzIoZXhlYykpOwotfQotCi1kb3VibGUgUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlu
bGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQotaW50MzJfdCBSaWdodFNoaWZ0Tm9kZTo6
ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IFJpZ2h0U2hp
ZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLVJlZ2lzdGVy
SUQqIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWwgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc2hpZnQg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0VW5zaWduZWRSaWdodFNoaWZ0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
dmFsLmdldCgpKSwgdmFsLmdldCgpLCBzaGlmdCk7Ci19Ci0KLXZvaWQgVW5zaWduZWRSaWdodFNo
aWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjcuMwotdWludDMy
X3QgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICB1bnNpZ25lZCBpbnQgaTEgPSBtX3Rlcm0x
LT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIHVuc2lnbmVkIGludCBpMiA9IG1fdGVybTItPmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAw
eDFmOwotICAgIHJldHVybiAoaTEgPj4gaTIpOwotfQotCi1KU1ZhbHVlKiBVbnNpZ25lZFJpZ2h0
U2hpZnROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKSk7Ci19Ci0KLWRv
dWJsZSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvVUludDMy
KGV4ZWMpOwotfQotCi1pbnQzMl90IFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlVG9J
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb1VJbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgVW5zaWduZWRSaWdodFNoaWZ0
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlbGF0aW9uYWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbGVzc1RoYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKLXsKLSAgICBk
b3VibGUgbjE7Ci0gICAgZG91YmxlIG4yOwotICAgIEpTVmFsdWUqIHAxOwotICAgIEpTVmFsdWUq
IHAyOwotICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhl
YywgbjEsIHAxKTsKLSAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0aXZlTnVt
YmVyKGV4ZWMsIG4yLCBwMik7Ci0KLSAgICBpZiAod2FzTm90U3RyaW5nMSB8IHdhc05vdFN0cmlu
ZzIpCi0gICAgICAgIHJldHVybiBuMSA8IG4yOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0lt
cCo+KHAyKS0+dmFsdWUoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGxlc3NUaGFuRXEoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKLXsK
LSAgICBkb3VibGUgbjE7Ci0gICAgZG91YmxlIG4yOwotICAgIEpTVmFsdWUqIHAxOwotICAgIEpT
VmFsdWUqIHAyOwotICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1i
ZXIoZXhlYywgbjEsIHAxKTsKLSAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0
aXZlTnVtYmVyKGV4ZWMsIG4yLCBwMik7Ci0KLSAgICBpZiAod2FzTm90U3RyaW5nMSB8IHdhc05v
dFN0cmluZzIpCi0gICAgICAgIHJldHVybiBuMSA8PSBuMjsKLQotICAgIHJldHVybiAhKHN0YXRp
Y19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAyKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PGNvbnN0
IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIExlc3NOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdl
dCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIu
Z2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExlc3MoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19Ci0KLXZvaWQg
TGVzc05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9k
ZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS44LjEKLWJvb2wg
TGVzc05vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVy
biBsZXNzVGhhbihleGVjLCB2MSwgdjIpOwotfQotCi1KU1ZhbHVlKiBMZXNzTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpzQm9vbGVh
bihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7Ci19Ci0KLWJvb2wgTGVzc05vZGU6OmV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotYm9vbCBMZXNzTnVtYmVy
c05vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGRvdWJsZSBuMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBkb3VibGUgbjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiBuMSA8IG4yOwotfQotCi1KU1ZhbHVl
KiBMZXNzTnVtYmVyc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykp
OwotfQotCi1ib29sIExlc3NOdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOwotfQotCi1ib29sIExlc3NTdHJpbmdzTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jv
b2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEg
PSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
ICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0cmluZ0ltcCo+KHYxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PFN0cmluZ0lt
cCo+KHYyKS0+dmFsdWUoKTsKLX0KLQotSlNWYWx1ZSogTGVzc1N0cmluZ3NOb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNCb29sZWFu
KGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKLX0KLQotYm9vbCBMZXNzU3RyaW5nc05v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotUmVnaXN0ZXJJ
RCogR3JlYXRlck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TGVzcyhn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBz
cmMyKTsKLX0KLQotdm9pZCBHcmVhdGVyTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4
cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0v
LyBFQ01BIDExLjguMgotYm9vbCBHcmVhdGVyTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4
cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAg
SlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGxlc3NUaGFuKGV4ZWMsIHYyLCB2MSk7Ci19Ci0KLUpT
VmFsdWUqIEdyZWF0ZXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
KTsKLX0KLQotYm9vbCBHcmVhdGVyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpOwotfQotCi1SZWdpc3RlcklEKiBMZXNzRXFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3Rl
cklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExlc3NFcShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNy
YzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBMZXNzRXFOb2RlOjpvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9leHByMS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuOC4zCi1ib29sIExlc3NFcU5vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiBsZXNzVGhhbkVx
KGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLUpTVmFsdWUqIExlc3NFcU5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5l
RXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQotCi1ib29sIExlc3NFcU5vZGU6OmV2YWx1YXRl
VG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotUmVnaXN0ZXJJRCogR3JlYXRlckVx
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Ci17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByMi5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIxLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzRXEoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19
Ci0KLXZvaWQgR3JlYXRlckVxTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdl
dCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0vLyBFQ01B
IDExLjguNAotYm9vbCBHcmVhdGVyRXFOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEt
PmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1Zh
bHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TkJPT0xFQU4KLSAgICByZXR1cm4gbGVzc1RoYW5FcShleGVjLCB2MiwgdjEpOwotfQotCi1KU1Zh
bHVlKiBHcmVhdGVyRXFOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
KTsKLX0KLQotYm9vbCBHcmVhdGVyRXFOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci19Ci0KLVJlZ2lzdGVySUQqIEluc3RhbmNlT2ZOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAg
UmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJbnN0YW5jZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgYmFzZSk7Ci19CisvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEluc3RhbmNlT2ZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKK1JlZ2lzdGVySUQqIERlbGV0
ZURvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0
YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0
ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAsIG1faWRlbnQpOwogfQog
Ci0vLyBFQ01BIDExLjguNgotSlNWYWx1ZSogSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVl
KiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZB
TFVFCi0KLSAgICBpZiAoIXYyLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlz
IG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggaW5zdGFuY2VvZiBvcGVyYXRvci4i
LCB2MiwgbV9leHByMi5nZXQoKSk7Ci0KLSAgICBKU09iamVjdCogbzIgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYyKTsKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVW
YWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgc3BlYywgb25seSBzb21lIHR5cGVzIG9mIG9iamVjdHMgImltcGxlbWVu
dCIgdGhlIFtbSGFzSW5zdGFuY2VdXSBwcm9wZXJ0eS4KLSAgICAvLyBCdXQgd2UgYXJlIHN1cHBv
c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVyZSB0aGUgb2JqZWN0IGRvZXMgbm90ICJoYXZl
IiB0aGUgW1tIYXNJbnN0YW5jZV1dCi0gICAgLy8gcHJvcGVydHkuIEl0IHNlZW1zIHRoYXQgYWxs
IG9iamVjdHMgaGF2ZSB0aGUgcHJvcGVydHksIGJ1dCBub3QgYWxsIGltcGxlbWVudCBpdCwgc28g
aW4gdGhpcwotICAgIC8vIGNhc2Ugd2UgcmV0dXJuIGZhbHNlIChjb25zaXN0ZW50IHdpdGggTW96
aWxsYSkuCi0gICAgaWYgKCFvMi0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkpCi0gICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oZmFsc2UpOworUmVnaXN0ZXJJRCogRGVsZXRlVmFsdWVOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKIAotICAgIHJldHVybiBqc0Jvb2xlYW4o
bzItPmhhc0luc3RhbmNlKGV4ZWMsIHYxKSk7CisgICAgLy8gZGVsZXRlIG9uIGEgbm9uLWxvY2F0
aW9uIGV4cHJlc3Npb24gaWdub3JlcyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZQorICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
dHJ1ZSk7CiB9CiAKLWJvb2wgSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFs
dWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
Qk9PTEVBTgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZvaWROb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGlmICghdjItPmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVz
dWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdp
dGggJ2luc3RhbmNlb2YnIG9wZXJhdG9yLiIsIHYyLCBtX2V4cHIyLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KK1JlZ2lzdGVySUQqIFZvaWROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjAu
Z2V0KCkpLCBqc1VuZGVmaW5lZCgpKTsKK30KIAotICAgIEpTT2JqZWN0KiBvMiA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4odjIpOworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5
cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBvbmx5IHNvbWUgdHlwZXMgb2Ygb2JqZWN0cyAiaW1w
bGVtZW50IiB0aGUgW1tIYXNJbnN0YW5jZV1dIHByb3BlcnR5LgotICAgIC8vIEJ1dCB3ZSBhcmUg
c3VwcG9zZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHdoZXJlIHRoZSBvYmplY3QgZG9lcyBub3Qg
ImhhdmUiIHRoZSBbW0hhc0luc3RhbmNlXV0KLSAgICAvLyBwcm9wZXJ0eS4gSXQgc2VlbXMgdGhh
dCBhbGwgb2JqZWN0cyBoYXZlIHRoZSBwcm9wZXJ0eSwgYnV0IG5vdCBhbGwgaW1wbGVtZW50IGl0
LCBzbyBpbiB0aGlzCi0gICAgLy8gY2FzZSB3ZSByZXR1cm4gZmFsc2UgKGNvbnNpc3RlbnQgd2l0
aCBNb3ppbGxhKS4KLSAgICBpZiAoIW8yLT5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworUmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChS
ZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRlbnQpKQor
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwpOwogCi0gICAgcmV0dXJuIG8yLT5oYXNJbnN0YW5jZShleGVjLCB2
MSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjcmF0Y2ggPSBnZW5lcmF0b3IuZW1pdFJlc29s
dmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKHNjcmF0Y2guZ2V0KCksIHNjcmF0Y2guZ2V0KCksIG1faWRlbnQp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFR5cGVPZihnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIHNjcmF0Y2guZ2V0KCkpLCBzY3JhdGNoLmdldCgpKTsKIH0KIAotUmVnaXN0ZXJJ
RCogSW5Ob2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJbihnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHByb3BlcnR5LmdldCgpKSwgcHJvcGVydHkuZ2V0
KCksIGJhc2UpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZh
bHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEluTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2sp
CitSZWdpc3RlcklEKiBUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHBy
Mi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHNyYy5nZXQoKSk7CiB9CiAKLS8vIEVDTUEgMTEuOC43Ci1KU1ZhbHVlKiBJbk5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogUHJlSW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIEpTVmFs
dWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKLSAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJh
dG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5p
c0xvY2FsQ29uc3RhbnQobV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByMCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCAxLjApOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBs
b2NhbCwgcjAuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFByZUluYyhsb2NhbCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChkc3QsIGxvY2FsKTsKKyAgICB9CiAKLSAgICBpZiAoIXYyLT5pc09iamVj
dCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAl
cyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1
c2VkIHdpdGggJ2luJyBvcGVyYXRvci4iLCB2MiwgbV9leHByMi5nZXQoKSk7CisgICAgaW50IGlu
ZGV4ID0gMDsKKyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGlmIChnZW5lcmF0b3IuZmluZFNj
b3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5
bWJvbE1hcmtlcigpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBk
ZXB0aCwgaW5kZXgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByZUluYyhwcm9wRHN0LmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCBwcm9w
RHN0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7OworICAgIH0KIAotICAgIHJldHVybiBqc0Jvb2xl
YW4oc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2MiktPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZp
ZXIodjEtPnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0
ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBwcm9wRHN0LmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5lcmF0b3IuZW1pdFByZUlu
Yyhwcm9wRHN0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgcHJvcERzdC5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CiAKLWJvb2wgSW5Ob2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIFByZURlY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4K
KyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbCht
X2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50
KSkgeworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRM
b2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIC0xLjApOworICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBsb2NhbCwgcjAuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZW1pdFByZURlYyhsb2NhbCk7Cisg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxv
Y2FsKTsKKyAgICB9CiAKLSAgICBpZiAoIXYyLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVz
KSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwg
djIsIG1fZXhwcjIuZ2V0KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IGluZGV4
ID0gMDsKKyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3Bl
ZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJv
bE1hcmtlcigpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJh
dG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBkZXB0
aCwgaW5kZXgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByZURlYyhwcm9wRHN0LmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCBwcm9wRHN0
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7OwogICAgIH0KIAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHYyKS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcih2MS0+dG9TdHJp
bmcoZXhlYykpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50
ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERz
dC5nZXQoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVEZWMocHJvcERzdC5nZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHByb3BE
c3QuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRXF1YWxpdHkgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLVJlZ2lzdGVySUQqIEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBz
cmMxLmdldCgpLCBzcmMyKTsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
cmVmaXhCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZv
aWQgRXF1YWxOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
IG5vZGVTdGFjaykKK1JlZ2lzdGVySUQqIFByZUluY0JyYWNrZXROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQo
KSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
RHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChwcm9wRHN0LmdldCgpLCBiYXNlLmdldCgpLCBw
cm9wZXJ0eS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVJbmModmFsdWUpOworICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHZhbHVlKTsK
KyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9w
RHN0LmdldCgpKTsKIH0KIAotLy8gRUNNQSAxMS45LjEKLWJvb2wgRXF1YWxOb2RlOjppbmxpbmVF
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIFByZURlY0JyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4K
LQotICAgIHJldHVybiBlcXVhbChleGVjLCB2MSwgdjIpOworICAgIAorICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
LmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0QnlWYWwocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFs
KGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CiAKLUpT
VmFsdWUqIEVxdWFsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7
Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4RG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgRXF1YWxOb2RlOjpldmFsdWF0
ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIFBy
ZUluY0RvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0
KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIGdlbmVyYXRvci5l
bWl0UHJlSW5jKHZhbHVlKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgdmFsdWUpOworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25J
Zk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQogCi1SZWdpc3RlcklEKiBOb3RFcXVhbE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQor
UmVnaXN0ZXJJRCogUHJlRGVjRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXROb3RFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkp
LCBzcmMxLmdldCgpLCBzcmMyKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
RHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIG1f
aWRlbnQpOworICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUpOworICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQog
Ci12b2lkIE5vdEVxdWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgp
KTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQorLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeEVycm9yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi0vLyBFQ01BIDExLjkuMgotYm9vbCBOb3RFcXVhbE5vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVn
aXN0ZXJJRCogUHJlZml4RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqKQogewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0g
bV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgot
Ci0gICAgcmV0dXJuICFlcXVhbChleGVjLHYxLCB2Mik7CisgICAgcmV0dXJuIGVtaXRUaHJvd0Vy
cm9yKGdlbmVyYXRvciwgUmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/
ICJQcmVmaXggKysgb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVy
ZW5jZS4iIDogIlByZWZpeCAtLSBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90
IGEgcmVmZXJlbmNlLiIpOwogfQogCi1KU1ZhbHVlKiBOb3RFcXVhbE5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFVuYXJ5UGx1c05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotYm9vbCBOb3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogVW5hcnlQbHVzTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNO
dW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKIH0KIAotUmVnaXN0
ZXJJRCogU3RyaWN0RXF1YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dFN0cmljdEVxdWFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSks
IHNyYzEuZ2V0KCksIHNyYzIpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE5lZ2F0ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBT
dHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQorUmVnaXN0ZXJJRCogTmVnYXRlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwor
ICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5lZ2F0ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCBzcmMpOwogfQogCi0vLyBFQ01BIDExLjkuNAotYm9vbCBTdHJpY3RFcXVhbE5vZGU6
OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotCi0gICAgcmV0dXJuIHN0cmlj
dEVxdWFsKHYxLCB2Mik7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQml0
d2lzZU5vdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU1ZhbHVlKiBT
dHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQor
UmVnaXN0ZXJJRCogQml0d2lzZU5vdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZh
bHVhdGVUb0Jvb2xlYW4oZXhlYykpOworICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdE5vdChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMpOwogfQogCi1ib29sIFN0cmljdEVx
dWFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxOb3ROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotUmVnaXN0ZXJJRCogTm90U3RyaWN0RXF1YWxOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK1JlZ2lzdGVy
SUQqIExvZ2ljYWxOb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5v
dFN0cmljdEVxdWFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSks
IHNyYzEuZ2V0KCksIHNyYzIpOworICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vdChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMpOwogfQogCi12b2lkIE5vdFN0cmljdEVxdWFs
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIE11bHRpcGxpY2F0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLS8vIEVDTUEgMTEuOS41Ci1ib29sIE5vdFN0cmljdEVxdWFsTm9kZTo6aW5saW5l
RXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3Rl
cklEKiBNdWx0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIy
LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0KLSAgICBy
ZXR1cm4gIXN0cmljdEVxdWFsKHYxLCB2Mik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3Jj
MiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRNdWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwg
c3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLUpTVmFsdWUqIE5vdFN0cmljdEVxdWFsTm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBEaXZOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZGl2aWRlbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJt
MS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogZGl2aXNvciA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREaXYoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBkaXZpZGVuZC5nZXQoKSksIGRpdmlkZW5kLmdldCgpLCBkaXZp
c29yKTsKIH0KIAotYm9vbCBOb3RTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogTW9kTm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBkaXZpZGVuZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdp
c3RlcklEKiBkaXZpc29yID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdE1vZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGRpdmlkZW5kLmdldCgpKSwgZGl2aWRlbmQuZ2V0KCksIGRpdmlzb3IpOwogfQogCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQml0IE9wZXJhdGlvbiBOb2RlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIEJpdEFuZE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkp
OwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQo
KSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qml0QW5kKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgQml0QW5kTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCitSZWdpc3RlcklEKiBBZGRO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5h
cHBlbmQobV9leHByMS5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRBZGQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5n
ZXQoKSwgc3JjMik7CiB9CiAKLS8vIEVDTUEgMTEuMTAKLUpTVmFsdWUqIEJpdEFuZE5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogU3ViTm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIHJldHVybiBqc051bWJlckZy
b21BbmQoZXhlYywgdjEsIHYyKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dFN1YihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdl
dCgpLCBzcmMyKTsKIH0KIAotaW50MzJfdCBCaXRBbmROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaW50MzJfdCBpMSA9IG1f
ZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1C
RVIKLSAgICBpbnQzMl90IGkyID0gbV9leHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAg
IHJldHVybiAoaTEgJiBpMik7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
U2hpZnQgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWRvdWJs
ZSBCaXRBbmROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQorUmVnaXN0ZXJJRCogTGVmdFNoaWZ0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fdGVybTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExlZnRT
aGlmdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbC5nZXQoKSksIHZhbC5nZXQo
KSwgc2hpZnQpOwogfQogCi1ib29sIEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogUmlnaHRTaGlmdE5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHZhbCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdpc3Rl
cklEKiBzaGlmdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRSaWdodFNoaWZ0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgdmFsLmdldCgpKSwgdmFsLmdldCgpLCBzaGlmdCk7CiB9CiAKLWludDMyX3QgQml0QW5kTm9k
ZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0
ZXJJRCogVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9J
bnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fdGVybTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFVuc2lnbmVk
UmlnaHRTaGlmdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbC5nZXQoKSksIHZh
bC5nZXQoKSwgc2hpZnQpOwogfQogCi11aW50MzJfdCBCaXRBbmROb2RlOjpldmFsdWF0ZVRvVUlu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUmVsYXRpb25hbCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJl
Z2lzdGVySUQqIEJpdFhPck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJRCogTGVzc05vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwogICAgIFJlZ2lz
dGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0Qml0WE9yKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
c3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwotfQotCi12b2lkIEJpdFhPck5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewot
ICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwog
fQogCi1pbnQzMl90IEJpdFhPck5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIEdyZWF0ZXJOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpbnQgaTEg
PSBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgaW50IGkyID0gbV9leHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAg
IHJldHVybiAoaTEgXiBpMik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRM
ZXNzKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0
KCksIHNyYzIpOwogfQogCi1KU1ZhbHVlKiBCaXRYT3JOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIExlc3NFcU5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBq
c051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lz
dGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TGVzc0VxKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
c3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwogfQogCi1kb3VibGUgQml0WE9yTm9kZTo6
ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIEdyZWF0ZXJFcU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
Mi5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzRXEoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAK
LWJvb2wgQml0WE9yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCitSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRJbnN0YW5jZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkp
LCB2YWx1ZS5nZXQoKSwgYmFzZSk7CiB9CiAKLWludDMyX3QgQml0WE9yTm9kZTo6ZXZhbHVhdGVU
b0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogSW5Ob2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAg
ICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEluKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgcHJvcGVydHkuZ2V0KCkpLCBwcm9wZXJ0eS5nZXQoKSwgYmFzZSk7CiB9CiAKLXVpbnQzMl90
IEJpdFhPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcXVhbGl0eSBOb2RlcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUmVnaXN0ZXJJRCogQml0T3JOb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK1JlZ2lzdGVySUQq
IEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByMS5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaXRPcihnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMy
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotdm9pZCBCaXRP
ck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0
YWNrKQorUmVnaXN0ZXJJRCogTm90RXF1YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhw
cjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7
CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgp
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb3RFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotaW50MzJf
dCBCaXRPck5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKK1JlZ2lzdGVySUQqIFN0cmljdEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaW50IGkxID0gbV9leHBy
MS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIGludCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICByZXR1cm4g
KGkxIHwgaTIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0U3RyaWN0RXF1
YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQo
KSwgc3JjMik7CiB9CiAKLUpTVmFsdWUqIEJpdE9yTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBOb3RTdHJpY3RFcXVhbE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJl
dHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOworICAg
IFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm90U3RyaWN0RXF1YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLWRvdWJs
ZSBCaXRPck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaXQgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBCaXRPck5vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogQml0QW5k
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAg
ICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdEFuZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotaW50MzJfdCBCaXRP
ck5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1Jl
Z2lzdGVySUQqIEJpdFhPck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhl
Yyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaXRYT3IoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9
CiAKLXVpbnQzMl90IEJpdE9yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIEJpdE9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEJpdE9yKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEu
Z2V0KCksIHNyYzIpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmlu
YXJ5IExvZ2ljYWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzk2OSwz
MyArOTc3LDYgQEAgUmVnaXN0ZXJJRCogTG9naWNhbEFuZE5vZGU6OmVtaXRDb2RlKENvZAogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRlbXAuZ2V0
KCkpOwogfQogCi12b2lkIExvZ2ljYWxBbmROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0
b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1f
ZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7Ci19Ci0K
LS8vIEVDTUEgMTEuMTEKLUpTVmFsdWUqIExvZ2ljYWxBbmROb2RlOjpldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgYm9vbCBiMSA9
IHYxLT50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBp
ZiAoIWIxKQotICAgICAgICByZXR1cm4gdjE7Ci0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiB2
MjsKLX0KLQotYm9vbCBMb2dpY2FsQW5kTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9vbCBiID0gbV9leHByMS0+ZXZhbHVhdGVU
b0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVy
biBiICYmIG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQotCiBSZWdpc3RlcklE
KiBMb2dpY2FsT3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci50
ZW1wRGVzdGluYXRpb24oZHN0KTsKQEAgLTQwMDksMjggKzk5MCw2IEBAIFJlZ2lzdGVySUQqIExv
Z2ljYWxPck5vZGU6OmVtaXRDb2RlKENvZGUKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rl
c3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wLmdldCgpKTsKIH0KIAotdm9pZCBMb2dpY2FsT3JO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9leHByMS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIExvZ2ljYWxPck5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYx
ID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
LSAgICBpZiAodjEtPnRvQm9vbGVhbihleGVjKSkKLSAgICAgICAgcmV0dXJuIHYxOwotICAgIHJl
dHVybiBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLX0KLQotYm9vbCBMb2dpY2FsT3JOb2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBi
b29sIGIgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgfHwgbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25kaXRp
b25hbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIENv
bmRpdGlvbmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCkBAIC00MDUzLDExNSArMTAxMiw2IEBAIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFs
Tm9kZTo6ZW1pdENvZGUoQ28KICAgICByZXR1cm4gbmV3RHN0LmdldCgpOwogfQogCi12b2lkIENv
bmRpdGlvbmFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9sb2dpY2FsLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xMgotSlNWYWx1ZSogQ29uZGl0aW9u
YWxOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBi
b29sIGIgPSBtX2xvZ2ljYWwtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKSA6
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotfQotCi1ib29sIENvbmRpdGlvbmFsTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9v
bCBiID0gbV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVh
bihleGVjKSA6IG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQotCi1kb3VibGUg
Q29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIx
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpIDogbV9leHByMi0+ZXZhbHVhdGVUb051bWJlcihleGVj
KTsKLX0KLQotaW50MzJfdCBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBib29sIGIgPSBtX2xvZ2ljYWwtPmV2YWx1
YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJl
dHVybiBiID8gbV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpIDogbV9leHByMi0+ZXZhbHVh
dGVUb0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRl
VG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9vbCBiID0g
bV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICByZXR1cm4gYiA/IG1fZXhwcjEtPmV2YWx1YXRlVG9VSW50MzIoZXhlYykg
OiBtX2V4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpOwotfQotCi0vLyBFQ01BIDExLjEzCi0K
LXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1l
bnQoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGN1cnJlbnQsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgT3BlcmF0b3Igb3BlcikgS0pTX0ZBU1RfQ0FMTDsKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGN1cnJlbnQsIEV4cHJlc3Npb25Ob2Rl
KiByaWdodCwgT3BlcmF0b3Igb3BlcikKLXsKLSAgICBKU1ZhbHVlKiB2OwotICAgIGludCBpMTsK
LSAgICBpbnQgaTI7Ci0gICAgdW5zaWduZWQgaW50IHVpOwotICAgIHN3aXRjaCAob3Blcikgewot
ICAgICAgICBjYXNlIE9wTXVsdEVxOgotICAgICAgICAgICAgdiA9IGpzTnVtYmVyKGN1cnJlbnQt
PnRvTnVtYmVyKGV4ZWMpICogcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BEaXZFcToKLSAgICAgICAgICAgIHYgPSBqc051
bWJlcihjdXJyZW50LT50b051bWJlcihleGVjKSAvIHJpZ2h0LT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wUGx1c0VxOgotICAgICAg
ICAgICAgdiA9IGFkZChleGVjLCBjdXJyZW50LCByaWdodC0+ZXZhbHVhdGUoZXhlYykpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BNaW51c0VxOgotICAgICAgICAgICAgdiA9
IGpzTnVtYmVyKGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpIC0gcmlnaHQtPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYykpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BMU2hpZnQ6Ci0g
ICAgICAgICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICBpMiA9
IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNOdW1iZXIo
aTEgPDwgaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BSU2hpZnQ6Ci0g
ICAgICAgICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICBpMiA9
IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNOdW1iZXIo
aTEgPj4gaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BVUlNoaWZ0Ogot
ICAgICAgICAgICAgdWkgPSBjdXJyZW50LT50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGky
ID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJl
cih1aSA+PiBpMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcEFuZEVxOgot
ICAgICAgICAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgaTIg
PSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgdiA9IGpzTnVtYmVy
KGkxICYgaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BYT3JFcToKLSAg
ICAgICAgICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIGkyID0g
cmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihp
MSBeIGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wT3JFcToKLSAgICAg
ICAgICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIGkyID0gcmln
aHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihpMSB8
IGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wTW9kRXE6IHsKLSAgICAg
ICAgICAgIGRvdWJsZSBkMSA9IGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAg
ZG91YmxlIGQyID0gcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICB2
ID0ganNOdW1iZXIoZm1vZChkMSwgZDIpKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHYgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIHJldHVybiB2OwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVhZE1vZGlmeVJlc29sdmVOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEZJWE1FOiBzaG91bGQg
dGhpcyBiZSBtb3ZlZCB0byBiZSBhIG1ldGhvZCBvbiBDb2RlR2VuZXJhdG9yPwpAQCAtNDIzNiwx
OCArMTA4Niw2IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEMKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7
Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBpZiAo
aXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykg
UmVhZE1vZGlmeUNvbnN0Tm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5l
dyAodGhpcykgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZShpbmRleCk7Ci0gICAgfQotfQotCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduUmVzb2x2ZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpA
QCAtNDI3MywxNDYgKzExMTEsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1p
dENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lk
ZW50LCB2YWx1ZSk7CiB9CiAKLXZvaWQgQXNzaWduUmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlLCBOb2RlU3RhY2smIG5v
ZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fcmlnaHQuZ2V0KCkpOwotICAgIGlu
dCBpbmRleCA9IHN5bWJvbFRhYmxlLmdldChtX2lkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5k
ZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAg
IGlmIChpc0NvbnN0YW50KGxvY2FsU3RvcmFnZSwgaW5kZXgpKQotICAgICAgICAgICAgbmV3ICh0
aGlzKSBBc3NpZ25Db25zdE5vZGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhp
cykgQXNzaWduTG9jYWxWYXJOb2RlKGluZGV4KTsKLSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5TG9jYWxWYXJOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFsdWUqIFJlYWRNb2RpZnlMb2NhbFZhck5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChl
eGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAg
ICBBU1NFUlQobV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICBKU1ZhbHVlKiB2ID0gdmFsdWVG
b3JSZWFkTW9kaWZ5QXNzaWdubWVudChleGVjLCBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4
XS52YWx1ZSwgbV9yaWdodC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0KLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICAgIAotICAgIC8vIFdlIGNhbid0IHN0b3JlIGEgcG9pbnRlciBpbnRvIGxv
Y2FsU3RvcmFnZSgpIGFuZCB1c2UgaXQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24KLSAgICAvLyBi
b2R5LCBiZWNhdXNlIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoKSBtaWdodCBjYXVzZSBh
biBBY3RpdmF0aW9uSW1wIHRlYXItb2ZmLAotICAgIC8vIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBs
b2NhbFN0b3JhZ2UoKS4KLSAgICAKLSAgICBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52
YWx1ZSA9IHY7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBBc3NpZ25Mb2NhbFZhck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotSlNWYWx1ZSogQXNzaWduTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3Qo
KSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIEpTVmFsdWUqIHYgPSBtX3JpZ2h0
LT5ldmFsdWF0ZShleGVjKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBl
eGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZSA9IHY7Ci0KLSAgICByZXR1cm4gdjsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWRNb2RpZnlDb25zdE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSogUmVhZE1v
ZGlmeUNvbnN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigp
LnRvcCgpKTsKLSAgICBKU1ZhbHVlKiBsZWZ0ID0gZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRl
eF0udmFsdWU7Ci0gICAgQVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gdmFsdWVGb3JSZWFkTW9kaWZ5QXNzaWdubWVudChleGVjLCBsZWZ0LCBtX3Jp
Z2h0LmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBB
c3NpZ25Db25zdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNW
YWx1ZSogQXNzaWduQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci19Ci0KLUpTVmFs
dWUqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNo
YWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAg
IFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgIC8vIFdlIG11c3Qg
YWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVy
ICE9IGVuZCk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsK
LSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAgLy8gU2VlIHRo
ZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQotICAgICAgICAg
ICAgYmFzZSA9ICppdGVyOwotICAgICAgICAgICAgZ290byBmb3VuZDsKLSAgICAgICAgfQotCi0g
ICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICBBU1NFUlQo
bV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJs
ZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotCi1mb3VuZDoKLSAgICBKU1ZhbHVlKiB2OwotCi0gICAg
QVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7Ci0gICAgSlNWYWx1ZSogdjEgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0gICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoZXhlYywgdjEsIG1fcmlnaHQu
Z2V0KCksIG1fb3BlcmF0b3IpOwotCi0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICAK
LSAgICAvLyBTaW5jZSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KCkgbWlnaHQgY2F1c2Ug
YW4gQWN0aXZhdGlvbkltcCB0ZWFyLW9mZiwKLSAgICAvLyB3ZSBuZWVkIHRvIGdldCB0aGUgYmFz
ZSBmcm9tIHRoZSBTY29wZUNoYWluSXRlcmF0b3IgYWdhaW4uCi0gICAgCi0gICAgKCppdGVyKS0+
cHV0KGV4ZWMsIG1faWRlbnQsIHYpOwotICAgIHJldHVybiB2OwotfQotCi1KU1ZhbHVlKiBBc3Np
Z25SZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgIC8vIHdlIG11c3QgYWx3YXlzIGhhdmUg
c29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0K
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0g
ICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGlu
IFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQotICAgICAgICAgICAgYmFzZSA9ICpp
dGVyOwotICAgICAgICAgICAgZ290byBmb3VuZDsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRl
cjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLWZvdW5kOgotICAgIEpTVmFsdWUqIHYg
PSBtX3JpZ2h0LT5ldmFsdWF0ZShleGVjKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgdik7Ci0gICAgcmV0dXJuIHY7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5RG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkBAIC00NDIzLDI1ICsxMTIyLDcgQEAgUmVn
aXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdENvZGUoQ29kZQogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiB9CiAKLXZvaWQgQXNz
aWduRG90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBu
b2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEFzc2lnbkRvdE5v
ZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFs
dWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhl
Yyk7Ci0KLSAgICBKU1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci0KLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIHYp
OwotICAgIHJldHVybiB2OwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJl
YWRNb2RpZnlEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJl
Z2lzdGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKQEAgLTQ0NTIsMzIgKzExMzMsNiBAQCBSZWdpc3Rl
cklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1cGRhdGVkVmFsdWUpOwogfQogCi12b2lk
IFJlYWRNb2RpZnlEb3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fcmlnaHQuZ2V0KCkp
OwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotSlNWYWx1ZSogUmVh
ZE1vZGlmeURvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+
dG9PYmplY3QoZXhlYyk7Ci0KLSAgICBKU1ZhbHVlKiB2OwotCi0gICAgQVNTRVJUKG1fb3BlcmF0
b3IgIT0gT3BFcXVhbCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdjEg
PSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZh
bHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotICAgIHYgPSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMs
IHYxLCBtX3JpZ2h0LmdldCgpLCBtX29wZXJhdG9yKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgdik7Ci0gICAgcmV0dXJuIHY7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25FcnJvck5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQXNzaWdu
RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
KQpAQCAtNDQ4NSwxMyArMTE0MCw2IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkVycm9yTm9kZTo6ZW1p
dENvZGUoQ28KICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VF
cnJvciwgIkxlZnQgc2lkZSBvZiBhc3NpZ25tZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKIH0K
IAotSlNWYWx1ZSogQXNzaWduRXJyb3JOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiTGVm
dCBzaWRlIG9mIGFzc2lnbm1lbnQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwotICAgIGhhbmRsZUV4
Y2VwdGlvbihleGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEFzc2lnbkJyYWNrZXROb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1
MDQsMzkgKzExNTIsNiBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdENvZGUo
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVz
dWx0KTsKIH0KIAotdm9pZCBBc3NpZ25CcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX3JpZ2h0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgp
KTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEFz
c2lnbkJyYWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gbV9zdWJz
Y3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAg
ICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICB1aW50
MzJfdCBwcm9wZXJ0eUluZGV4OwotICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0
eUluZGV4KSkgewotICAgICAgICBKU1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7
Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICAgICAgYmFzZS0+cHV0KGV4
ZWMsIHByb3BlcnR5SW5kZXgsIHYpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShzdWJzY3JpcHQtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBK
U1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLQotICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHYpOwotICAgIHJl
dHVybiB2OwotfQotCiBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1f
YmFzZS5nZXQoKSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdu
bWVudHMpOwpAQCAtNDU1MSw1MiArMTE2Niw2IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZTo6ZW1pdEMKICAgICByZXR1cm4gdXBkYXRlZFZhbHVlOwogfQogCi12b2lkIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsK
LSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFJlYWRNb2RpZnlCcmFja2V0Tm9k
ZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1
ZSogYmFzZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJh
c2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJ
bmRleDsKLSAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSogdjsKLSAgICAgICAgQVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7
Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBKU1ZhbHVlKiB2MSA9IGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3QuZ2V0VmFs
dWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgICAgICB2ID0gdmFsdWVGb3JSZWFkTW9kaWZ5QXNz
aWdubWVudChleGVjLCB2MSwgbV9yaWdodC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0KLSAgICAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVy
dHlJbmRleCwgdik7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIElkZW50aWZpZXIg
cHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIEpTVmFsdWUqIHY7
Ci0KLSAgICBBU1NFUlQobV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgICBKU1ZhbHVlKiB2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eU5hbWUp
IDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHYgPSB2
YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMsIHYxLCBtX3JpZ2h0LmdldCgpLCBtX29w
ZXJhdG9yKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBiYXNlLT5wdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2KTsKLSAgICByZXR1cm4gdjsKLX0KLQogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbW1hTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29tbWFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ2MDUsMjAgKzExNzQsNiBAQCBS
ZWdpc3RlcklEKiBDb21tYU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwcjIuZ2V0KCkpOwogfQogCi12b2lkIENvbW1hTm9kZTo6
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjE0Ci1KU1ZhbHVlKiBDb21tYU5v
ZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIG1fZXhw
cjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgcmV0
dXJuIG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQ29uc3REZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIENvbnN0RGVjbE5vZGU6OkNvbnN0RGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0KQpAQCAtNDYyNyw2NyArMTE4Miw2IEBAIENvbnN0RGVj
bE5vZGU6OkNvbnN0RGVjbE5vZGUoY29uc3QgSWRlbnQKIHsKIH0KIAotdm9pZCBDb25zdERlY2xO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBpZiAobV9uZXh0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5n
ZXQoKSk7Ci0gICAgaWYgKG1faW5pdCkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2luaXQu
Z2V0KCkpOwotfQotCi12b2lkIENvbnN0RGVjbE5vZGU6OmhhbmRsZVNsb3dDYXNlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29wZUNoYWluJiBjaGFpbiwgSlNWYWx1ZSog
dmFsKQotewotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAg
ICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICAvLyBXZSBtdXN0
IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRl
ciAhPSBlbmQpOwotCi0gICAgSlNPYmplY3QqIGJhc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGJh
c2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmlzVmFyaWFibGVPYmplY3QoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQp
OwotCi0gICAgQVNTRVJUKGJhc2UgJiYgYmFzZS0+aXNWYXJpYWJsZU9iamVjdCgpKTsKLQotICAg
IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihiYXNlKS0+cHV0V2l0aEF0dHJpYnV0ZXMo
ZXhlYywgbV9pZGVudCwgdmFsLCBSZWFkT25seSk7Ci19Ci0KLS8vIEVDTUEgMTIuMgotaW5saW5l
IHZvaWQgQ29uc3REZWNsTm9kZTo6ZXZhbHVhdGVTaW5nbGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCktPmhhc093blBy
b3BlcnR5KGV4ZWMsIG1faWRlbnQpIHx8IGV4ZWMtPmNvZGVUeXBlKCkgPT0gRXZhbENvZGUpOyAv
LyBHdWFyYW50ZWVkIGJ5IHByb2Nlc3NEZWNsYXJhdGlvbnMuCi0gICAgY29uc3QgU2NvcGVDaGFp
biYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogdmFy
aWFibGVPYmplY3QgPSBleGVjLT52YXJpYWJsZU9iamVjdCgpOwotCi0gICAgYm9vbCBpbkdsb2Jh
bFNjb3BlID0gKytjaGFpbi5iZWdpbigpID09IGNoYWluLmVuZCgpOwotCi0gICAgaWYgKG1faW5p
dCkgewotICAgICAgICBpZiAoaW5HbG9iYWxTY29wZSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
dmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMgPSBSZWFkT25seTsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb2RlVHlwZSgpICE9IEV2
YWxDb2RlKQotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsKLSAgICAg
ICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBtX2lkZW50LCB2
YWwsIGF0dHJpYnV0ZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSog
dmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZPSUQKLQotICAgICAgICAgICAgLy8gaWYgdGhlIHZhcmlhYmxlIG9iamVjdCBpcyB0aGUg
dG9wIG9mIHRoZSBzY29wZSBjaGFpbiwgdGhlbiB0aGF0IG11c3QKLSAgICAgICAgICAgIC8vIGJl
IHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgZGVjbGFyZWQsIHByb2Nlc3NWYXJEZWNscyB3b3VsZCBo
YXZlIHB1dAotICAgICAgICAgICAgLy8gaXQgdGhlcmUuIERvbid0IHNlYXJjaCB0aGUgc2NvcGUg
Y2hhaW4sIHRvIG9wdGltaXplIHRoaXMgdmVyeSBjb21tb24gY2FzZS4KLSAgICAgICAgICAgIGlm
IChjaGFpbi50b3AoKSAhPSB2YXJpYWJsZU9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
aGFuZGxlU2xvd0Nhc2UoZXhlYywgY2hhaW4sIHZhbCk7Ci0KLSAgICAgICAgICAgIHZhcmlhYmxl
T2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBtX2lkZW50LCB2YWwsIFJlYWRPbmx5KTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQogUmVnaXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6ZW1pdENv
ZGVTaW5nbGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQogewogICAgIGlmIChSZWdpc3RlcklE
KiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsQ29uc3RJbml0KG1faWRlbnQpKQpA
QCAtNDcwOSw0MiArMTIwMywxMyBAQCBSZWdpc3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0Q29k
ZShDb2RlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogQ29uc3REZWNsTm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgZXZhbHVhdGVT
aW5nbGUoZXhlYyk7Ci0KLSAgICBpZiAoQ29uc3REZWNsTm9kZSogbiA9IG1fbmV4dC5nZXQoKSkg
ewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBuLT5ldmFsdWF0ZVNpbmdsZShleGVjKTsKLSAg
ICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgICAgICAgICBuID0gbi0+bV9u
ZXh0LmdldCgpOwotICAgICAgICB9IHdoaWxlIChuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdFN0
YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDb25zdFN0
YXRlbWVudE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIEFTU0VSVChtX25leHQpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9uZXh0LmdldCgpKTsKLX0KLQogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdE5vZGUobV9uZXh0LmdldCgpKTsKIH0KIAotLy8gRUNNQSAxMi4yCi1K
U1ZhbHVlKiBDb25zdFN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgbV9uZXh0LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT04KLQotICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBo
YW5kbGluZyBWZWN0b3JzIG9mIFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBzdGF0aWMgaW5saW5lIFJlZ2lzdGVySUQqIHN0YXRlbWVudExpc3RFbWl0Q29k
ZShTdGF0ZW1lbnRWZWN0b3ImIHN0YXRlbWVudHMsIENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0ID0gMCkKQEAgLTQ3ODksMjAgKzEyNTQsNiBAQCBzdGF0aWMgaW5saW5l
IE5vZGUqIHN0YXRlbWVudExpc3RJbml0aWFsCiAgICAgcmV0dXJuICgqYmVnaW4pLmdldCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExpc3RFeGVjdXRlKFN0YXRlbWVu
dFZlY3RvciYgc3RhdGVtZW50cywgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdmFsdWUgPSAwOwotICAgIHNpemVfdCBzaXplID0gc3RhdGVtZW50cy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gc2l6ZTsgKytpKSB7Ci0gICAgICAgIEpT
VmFsdWUqIHN0YXRlbWVudFZhbHVlID0gc3RhdGVtZW50c1tpXS0+ZXhlY3V0ZShleGVjKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudFZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBzdGF0ZW1lbnRW
YWx1ZTsKLSAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFs
Q29tcGxldGlvbih2YWx1ZSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBCbG9ja05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEJsb2Nr
Tm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbikKQEAgLTQ4MTYsMTcgKzEy
NjcsNiBAQCBSZWdpc3RlcklEKiBCbG9ja05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0
dXJuIHN0YXRlbWVudExpc3RFbWl0Q29kZShtX2NoaWxkcmVuLCBnZW5lcmF0b3IsIGRzdCk7CiB9
CiAKLXZvaWQgQmxvY2tOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8obV9jaGlsZHJl
biwgbm9kZVN0YWNrKTsKLX0KLQotLy8gRUNNQSAxMi4xCi1KU1ZhbHVlKiBCbG9ja05vZGU6OmV4
ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIHN0YXRl
bWVudExpc3RFeGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRW1wdHlTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBSZWdpc3RlcklEKiBFbXB0eVN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00ODM0LDMzICsxMjc0LDEyIEBAIFJlZ2lz
dGVySUQqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUKICAgICByZXR1cm4gZHN0OwogfQog
Ci0vLyBFQ01BIDEyLjMKLUpTVmFsdWUqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFs
Q29tcGxldGlvbigpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXhw
clN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklE
KiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgQVNTRVJUKG1fZXhwcik7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwci5nZXQoKSk7Ci19Ci0KLXZvaWQgRXhwclN0YXRlbWVu
dE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0
YWNrKQotewotICAgIEFTU0VSVChtX2V4cHIpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHBy
LmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi40Ci1KU1ZhbHVlKiBFeHByU3RhdGVtZW50Tm9kZTo6
ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2
YWx1ZSA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0K
LSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2YWx1ZSk7CisgICAgQVNTRVJU
KG1fZXhwcik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwci5nZXQo
KSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWYXJTdGF0ZW1lbnRO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4NzEsMjAgKzEyOTAsNiBAQCBS
ZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwogfQogCi12b2lkIFZhclN0YXRlbWVudE5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQot
ewotICAgIEFTU0VSVChtX2V4cHIpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgp
KTsKLX0KLQotSlNWYWx1ZSogVmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTgotCi0gICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24o
KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElmTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogSWZOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ5
MDEsMjMgKzEzMDYsNiBAQCBSZWdpc3RlcklEKiBJZk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSWZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1faWZCbG9jay5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2NvbmRpdGlvbi5nZXQo
KSk7Ci19Ci0KLS8vIEVDTUEgMTIuNQotSlNWYWx1ZSogSWZOb2RlOjpleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fY29uZGl0aW9uLT5ldmFs
dWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGlmIChi
KQotICAgICAgICByZXR1cm4gbV9pZkJsb2NrLT5leGVjdXRlKGV4ZWMpOwotICAgIHJldHVybiBl
eGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0KIFJlZ2lzdGVySUQqIElmRWxzZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIFJlZlB0cjxMYWJlbElEPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CkBA
IC00OTM4LDIzICsxMzI2LDYgQEAgUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIElmRWxzZU5vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9lbHNlQmxvY2suZ2V0KCkp
OwotICAgIElmTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhleGVjLCBzeW1ib2xUYWJsZSwg
bG9jYWxTdG9yYWdlLCBub2RlU3RhY2spOwotfQotCi0vLyBFQ01BIDEyLjUKLUpTVmFsdWUqIElm
RWxzZU5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
Ym9vbCBiID0gbV9jb25kaXRpb24tPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTgotCi0gICAgaWYgKGIpCi0gICAgICAgIHJldHVybiBtX2lmQmxvY2stPmV4
ZWN1dGUoZXhlYyk7Ci0gICAgcmV0dXJuIG1fZWxzZUJsb2NrLT5leGVjdXRlKGV4ZWMpOwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9XaGlsZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00OTc2
LDQ2ICsxMzQ3LDYgQEAgUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVHZQog
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKLXZvaWQgRG9XaGlsZU5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5v
ZGVTdGFjay5hcHBlbmQobV9zdGF0ZW1lbnQuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9leHByLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi42LjEKLUpTVmFsdWUqIERvV2hpbGVOb2Rl
OjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUq
IHZhbHVlID0gMDsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRp
b24oKTsKLSAgICAgICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhl
Y3V0ZShleGVjKTsKLSAgICAgICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7Ci0KLSAgICAgICAgaWYg
KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGltZWRPdXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBleGVjLT5zZXRJbnRlcnJ1cHRlZENvbXBsZXRpb24oKTsKLQotICAgICAgICBpZiAoc3Rh
dGVtZW50VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAg
ICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAg
aWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNv
bnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBn
b3RvIGNvbnRpbnVlRG9XaGlsZUxvb3A7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlv
blR5cGUoKSA9PSBCcmVhayAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNv
bnRpbnVlVGFyZ2V0KCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0
dXJuIHN0YXRlbWVudFZhbHVlOwotICAgICAgICB9Ci0KLSAgICBjb250aW51ZURvV2hpbGVMb29w
OgotICAgICAgICBib29sIGIgPSBtX2V4cHItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAg
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgICAgICAgaWYgKCFiKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24odmFsdWUp
OwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2hpbGVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBXaGlsZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAt
NTA0MSw1MCArMTM3MiwxMiBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgV2hpbGVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5n
ZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTIuNi4yCi1KU1ZhbHVlKiBXaGlsZU5vZGU6OmV4ZWN1dGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSAw
OwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgYm9vbCBiID0gbV9leHByLT5ldmFsdWF0ZVRv
Qm9vbGVhbihleGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgICAgIGlmICgh
YikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRpb24oKTsK
LSAgICAgICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShl
eGVjKTsKLSAgICAgICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGltZWRPdXQoKSkKLSAgICAgICAgICAgIHJldHVybiBl
eGVjLT5zZXRJbnRlcnJ1cHRlZENvbXBsZXRpb24oKTsKLQotICAgICAgICBpZiAoc3RhdGVtZW50
VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAgICAgIGlm
IChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAgaWYgKGV4
ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5z
KGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIG1f
bGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VmFsdWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2
YWx1ZSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEZvck5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICBpZiAobV9leHBy
MSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwogICAgIAogICAg
IFJlZlB0cjxMYWJlbElEPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBS
ZWZQdHI8TGFiZWxJRD4gYmVmb3JlQ29uZGl0aW9uID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CkBA
IC01MDk2LDYzICsxMzg5LDIxIEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmEKICAgICBnZW5lcmF0b3IucHVzaEp1bXBDb250ZXh0KCZtX2xhYmVsU3RhY2ssIGNvbnRp
bnVlVGFyZ2V0LmdldCgpLCBicmVha1RhcmdldC5nZXQoKSwgdHJ1ZSk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50Lmdl
dCgpKTsKICAgICBnZW5lcmF0b3IucG9wSnVtcENvbnRleHQoKTsKLSAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGNvbnRpbnVlVGFyZ2V0LmdldCgpKTsgIAotICAgIGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIzLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNvbnRpbnVlVGFyZ2V0Lmdl
dCgpKTsKKyAgICBpZiAobV9leHByMykKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhw
cjMuZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVDb25kaXRpb24uZ2V0
KCkpOwotICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5n
ZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQo
KSk7CisgICAgaWYgKG1fZXhwcjIpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKHRvcE9mTG9vcC5nZXQoKSk7CisgICAgfQogICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoYnJlYWtUYXJnZXQuZ2V0KCkpOwogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9
CiAKLXZvaWQgRm9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3N0YXRlbWVudC5nZXQo
KSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIzLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQo
KSk7Ci19Ci0KLS8vIEVDTUEgMTIuNi4zCi1KU1ZhbHVlKiBGb3JOb2RlOjpleGVjdXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gMDsKLQot
ICAgIG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0g
ICAgd2hpbGUgKDEpIHsKLSAgICAgICAgYm9vbCBiID0gbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICBpZiAoIWIpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAg
ICAgIEpTVmFsdWUqIHN0YXRlbWVudFZhbHVlID0gbV9zdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7
Ci0gICAgICAgIGV4ZWMtPnBvcEl0ZXJhdGlvbigpOwotICAgICAgICBpZiAoc3RhdGVtZW50VmFs
dWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAgICAgIGlmIChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRpbWVkT3V0KCkpCi0gICAgICAgICAgICByZXR1
cm4gZXhlYy0+c2V0SW50ZXJydXB0ZWRDb21wbGV0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGV4ZWMt
PmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29t
cGxldGlvblR5cGUoKSA9PSBDb250aW51ZSAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+
YnJlYWtPckNvbnRpbnVlVGFyZ2V0KCkpKQotICAgICAgICAgICAgICAgIGdvdG8gY29udGludWVG
b3JMb29wOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsg
JiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnRWYWx1
ZTsKLSAgICAgICAgfQotCi0gICAgY29udGludWVGb3JMb29wOgotICAgICAgICBtX2V4cHIzLT5l
dmFsdWF0ZShleGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgfQotCi0gICAg
cmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24odmFsdWUpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBGb3JJbk5vZGU6OkZvckluTm9kZShFeHByZXNzaW9uTm9kZSogbCwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKQEAgLTUxNzYs
MTUgKzE0MjcsNiBAQCBGb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyJiBpCiAg
ICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCiB9CiAKLXZvaWQgRm9ySW5Ob2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsK
LSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwci5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2xleHByLmdldCgp
KTsKLSAgICBpZiAobV9pbml0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1faW5pdC5nZXQo
KSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGxvb3BT
dGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtNTIzNCwxMDMgKzE0NzYsNiBAQCBSZWdp
c3RlcklEKiBGb3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotLy8gRUNNQSAxMi42LjQKLUpTVmFsdWUqIEZvckluTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7Ci0KLSAgICBp
ZiAobV9pbml0KSB7Ci0gICAgICAgIG1faW5pdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgICAgIEtK
U19DSEVDS0VYQ0VQVElPTgotICAgIH0KLQotICAgIEpTVmFsdWUqIGUgPSBtX2V4cHItPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0gICAgLy8gRm9yIE51bGwgYW5k
IFVuZGVmaW5lZCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgbm90IHRvIGdvIHRocm91Z2gKLSAgICAv
LyB0aGUgbG9vcCBhdCBhbGwsIGJlY2F1c2UgdG9PYmplY3Qgd2lsbCB0aHJvdyBhbiBleGNlcHRp
b24uCi0gICAgaWYgKGUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBleGVj
LT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci0KLSAgICBKU09iamVjdCogdiA9IGUtPnRvT2JqZWN0
KGV4ZWMpOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXM7Ci0gICAgdi0+Z2V0
UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKLQotICAgIFByb3BlcnR5TmFtZUFy
cmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0eU5hbWVzLmVuZCgpOwotICAgIGZvciAo
UHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydHlOYW1lcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSA9
ICppdDsKLSAgICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1lKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEpTVmFsdWUqIHN0ciA9IGpzT3duZWRTdHJpbmcobmFt
ZS51c3RyaW5nKCkpOwotCi0gICAgICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBjb25z
dCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICAgICAgICAgIFNjb3Bl
Q2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgICAgICAgICAgLy8gd2UgbXVz
dCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgICAgICAgICBB
U1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBvOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IG8gPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgICAgICAgICBvLT5wdXQoZXhlYywgaWRlbnQs
IHN0cik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
Ci0KLSAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKLSAgICAgICAgICAgICAgICBvLT5wdXQo
ZXhlYywgaWRlbnQsIHN0cik7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9sZXhwci0+aXNEb3RBY2Nl
c3Nvck5vZGUoKSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0
aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KG1f
bGV4cHIuZ2V0KCkpLT5iYXNlKCktPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICAgICAgS0pTX0NI
RUNLRVhDRVBUSU9OCi0gICAgICAgICAgICBKU09iamVjdCogbyA9IHYtPnRvT2JqZWN0KGV4ZWMp
OwotCi0gICAgICAgICAgICBvLT5wdXQoZXhlYywgaWRlbnQsIHN0cik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9sZXhwci0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkp
OwotICAgICAgICAgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5v
ZGUqPihtX2xleHByLmdldCgpKS0+YmFzZSgpLT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAg
IEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICAgICAgSlNWYWx1ZSogdjIgPSBzdGF0aWNfY2Fz
dDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwci5nZXQoKSktPnN1YnNjcmlwdCgpLT5ldmFs
dWF0ZShleGVjKTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICAgICAg
SlNPYmplY3QqIG8gPSB2LT50b09iamVjdChleGVjKTsKLQotICAgICAgICAgICAgdWludDMyX3Qg
aTsKLSAgICAgICAgICAgIGlmICh2Mi0+Z2V0VUludDMyKGkpKQotICAgICAgICAgICAgICAgIG8t
PnB1dChleGVjLCBpLCBzdHIpOwotICAgICAgICAgICAgby0+cHV0KGV4ZWMsIElkZW50aWZpZXIo
djItPnRvU3RyaW5nKGV4ZWMpKSwgc3RyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtKU19DSEVD
S0VYQ0VQVElPTgotCi0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRpb24oKTsKLSAgICAgICAgSlNW
YWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKLSAgICAg
ICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnRWYWx1ZSkKLSAg
ICAgICAgICAgIHZhbHVlID0gc3RhdGVtZW50VmFsdWU7Ci0gICAgICAgIAotICAgICAgICBpZiAo
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50aW1lZE91dCgpKQotICAgICAgICAgICAgcmV0
dXJuIGV4ZWMtPnNldEludGVycnVwdGVkQ29tcGxldGlvbigpOwotCi0gICAgICAgIGlmIChleGVj
LT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmNv
bXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMt
PmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIG1fbGFiZWxT
dGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VmFsdWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2YWx1ZSk7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb250aW51ZU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTIuNwpAQCAtNTM1Niwx
NSArMTUwMSw2IEBAIFJlZ2lzdGVySUQqIENvbnRpbnVlTm9kZTo6ZW1pdENvZGUoQ29kZUcKICAg
ICByZXR1cm4gZHN0OwogfQogCi1KU1ZhbHVlKiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKG1faWRlbnQuaXNFbXB0eSgpICYm
ICFleGVjLT5pbkl0ZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9u
KGV4ZWMsIFN5bnRheEVycm9yLCAiSW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIik7Ci0gICAg
aWYgKCFtX2lkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+c2VlbkxhYmVscygpLmNvbnRhaW5zKG1f
aWRlbnQpKQotICAgICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVy
cm9yLCAiTGFiZWwgJXMgbm90IGZvdW5kLiIsIG1faWRlbnQpOwotICAgIHJldHVybiBleGVjLT5z
ZXRDb250aW51ZUNvbXBsZXRpb24oJm1faWRlbnQpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQnJlYWtOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAvLyBFQ01BIDEyLjgKQEAgLTUzODksMTUgKzE1MjUsNiBAQCBSZWdpc3RlcklEKiBC
cmVha05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotSlNWYWx1
ZSogQnJlYWtOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIGlmIChtX2lkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+aW5JdGVyYXRpb24oKSAmJiAhZXhl
Yy0+aW5Td2l0Y2goKSkKLSAgICAgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBT
eW50YXhFcnJvciwgIkludmFsaWQgYnJlYWsgc3RhdGVtZW50LiIpOwotICAgIGlmICghbV9pZGVu
dC5pc0VtcHR5KCkgJiYgIWV4ZWMtPnNlZW5MYWJlbHMoKS5jb250YWlucyhtX2lkZW50KSkKLSAg
ICAgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVs
ICVzIG5vdCBmb3VuZC4iKTsKLSAgICByZXR1cm4gZXhlYy0+c2V0QnJlYWtDb21wbGV0aW9uKCZt
X2lkZW50KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybk5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogUmV0
dXJuTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCkBAIC01NDE1LDI4ICsxNTQyLDYgQEAgUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJldHVybihyMCk7CiB9CiAKLXZv
aWQgUmV0dXJuTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIG5vZGVTdGFjay5hcHBl
bmQobV92YWx1ZS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTIuOQotSlNWYWx1ZSogUmV0dXJuTm9k
ZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBDb2RlVHlw
ZSBjb2RlVHlwZSA9IGV4ZWMtPmNvZGVUeXBlKCk7Ci0gICAgaWYgKGNvZGVUeXBlICE9IEZ1bmN0
aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhF
cnJvciwgIkludmFsaWQgcmV0dXJuIHN0YXRlbWVudC4iKTsKLQotICAgIGlmICghbV92YWx1ZSkK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnNldFJldHVyblZhbHVlQ29tcGxldGlvbihqc1VuZGVmaW5l
ZCgpKTsKLQotICAgIEpTVmFsdWUqIHYgPSBtX3ZhbHVlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIHJldHVybiBleGVjLT5zZXRSZXR1cm5WYWx1ZUNvbXBs
ZXRpb24odik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXaXRoTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFdp
dGhOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKQEAgLTU0NDgsNTIgKzE1NTMsNiBAQCBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXaXRoTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAg
Ly8gQ2FuJ3Qgb3B0aW1pemUgd2l0aGluIHN0YXRlbWVudCBiZWNhdXNlICJ3aXRoIiBpbnRyb2R1
Y2VzIGEgZHluYW1pYyBzY29wZS4KLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7
Ci19Ci0KLS8vIEVDTUEgMTIuMTAKLUpTVmFsdWUqIFdpdGhOb2RlOjpleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENhc2VDbGF1c2VO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDYXNlQ2xhdXNlTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2sp
Ci17Ci0gICAgaWYgKG1fZXhwcikKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0
KCkpOwotICAgIHN0YXRlbWVudExpc3RQdXNoRklGTyhtX2NoaWxkcmVuLCBub2RlU3RhY2spOwot
fQotCi0vLyBFQ01BIDEyLjExCi1KU1ZhbHVlKiBDYXNlQ2xhdXNlTm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IG1fZXhwci0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIHJldHVy
biB2OwotfQotCi0vLyBFQ01BIDEyLjExCi1KU1ZhbHVlKiBDYXNlQ2xhdXNlTm9kZTo6ZXhlY3V0
ZVN0YXRlbWVudHMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJu
IHN0YXRlbWVudExpc3RFeGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhdXNlTGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi12b2lkIENsYXVzZUxpc3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAobV9uZXh0KQot
ICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX2NsYXVzZS5nZXQoKSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBDYXNlQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJl
Z2lzdGVySUQqIENhc2VCbG9ja05vZGU6OmVtaXRDb2RlRm9yQmxvY2soQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBzd2l0Y2hFeHByZXNzaW9uLCBSZWdpc3RlcklEKiBkc3Qp
CkBAIC01NTQ0LDc0ICsxNjAzLDYgQEAgUmVnaXN0ZXJJRCogQ2FzZUJsb2NrTm9kZTo6ZW1pdENv
ZGVGb3JCbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2FzZUJsb2NrTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0g
ICAgaWYgKG1fbGlzdDIpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9saXN0Mi5nZXQoKSk7
Ci0gICAgaWYgKG1fZGVmYXVsdENsYXVzZSkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2Rl
ZmF1bHRDbGF1c2UuZ2V0KCkpOwotICAgIGlmIChtX2xpc3QxKQotICAgICAgICBub2RlU3RhY2su
YXBwZW5kKG1fbGlzdDEuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDEyLjExCi1KU1ZhbHVlKiBDYXNl
QmxvY2tOb2RlOjpleGVjdXRlQmxvY2soT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIGlucHV0KQotewotICAgIENsYXVzZUxpc3ROb2RlKiBhID0gbV9saXN0MS5nZXQoKTsK
LSAgICB3aGlsZSAoYSkgewotICAgICAgICBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlID0gYS0+Z2V0
Q2xhdXNlKCk7Ci0gICAgICAgIGEgPSBhLT5nZXROZXh0KCk7Ci0gICAgICAgIEpTVmFsdWUqIHYg
PSBjbGF1c2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAg
ICAgICAgaWYgKHN0cmljdEVxdWFsKGlucHV0LCB2KSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
cmVzID0gY2xhdXNlLT5leGVjdXRlU3RhdGVtZW50cyhleGVjKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzOwotICAgICAgICAgICAgZm9yICg7IGE7IGEgPSBhLT5nZXROZXh0KCkpIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlKiByZXMgPSBhLT5nZXRDbGF1c2UoKS0+ZXhlY3V0ZVN0YXRlbWVudHMo
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9y
bWFsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDbGF1c2VMaXN0Tm9kZSog
YiA9IG1fbGlzdDIuZ2V0KCk7Ci0gICAgd2hpbGUgKGIpIHsKLSAgICAgICAgQ2FzZUNsYXVzZU5v
ZGUqIGNsYXVzZSA9IGItPmdldENsYXVzZSgpOwotICAgICAgICBiID0gYi0+Z2V0TmV4dCgpOwot
ICAgICAgICBKU1ZhbHVlKiB2ID0gY2xhdXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OCi0gICAgICAgIGlmIChzdHJpY3RFcXVhbChpbnB1dCwgdikpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHJlcyA9IGNsYXVzZS0+ZXhlY3V0ZVN0YXRlbWVudHMoZXhlYyk7
Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIGdvdG8gc3RlcDE4OwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gZGVmYXVsdCBjbGF1c2UKLSAgICBpZiAobV9kZWZhdWx0Q2xh
dXNlKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlcyA9IG1fZGVmYXVsdENsYXVzZS0+ZXhlY3V0ZVN0
YXRlbWVudHMoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5v
cm1hbCkKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIGIgPSBtX2xpc3QyLmdl
dCgpOwotc3RlcDE4OgotICAgIHdoaWxlIChiKSB7Ci0gICAgICAgIENhc2VDbGF1c2VOb2RlKiBj
bGF1c2UgPSBiLT5nZXRDbGF1c2UoKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzID0gY2xhdXNlLT5l
eGVjdXRlU3RhdGVtZW50cyhleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBl
KCkgIT0gTm9ybWFsKQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgYiA9IGItPmdl
dE5leHQoKTsKLSAgICB9Ci0KLSAgICAvLyBiYWlsIG91dCBvbiBlcnJvcgotICAgIEtKU19DSEVD
S0VYQ0VQVElPTgotCi0gICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24oKTsKLX0K
LQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN3aXRjaE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC01NjI4
LDI4ICsxNjE5LDggQEAgUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgog
ICAgIHJldHVybiByMTsKIH0KIAotdm9pZCBTd2l0Y2hOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fYmxvY2suZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsK
LX0KLQotLy8gRUNNQSAxMi4xMQotSlNWYWx1ZSogU3dpdGNoTm9kZTo6ZXhlY3V0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGV4ZWMtPnB1c2hTd2l0
Y2goKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX2Jsb2NrLT5leGVjdXRlQmxvY2soZXhlYywg
dik7Ci0gICAgZXhlYy0+cG9wU3dpdGNoKCk7Ci0KLSAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5
cGUoKSA9PSBCcmVhayAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNvbnRp
bnVlVGFyZ2V0KCkpKQotICAgICAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShOb3JtYWwpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBMYWJlbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFJlZ2lz
dGVySUQqIExhYmVsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKGdlbmVyYXRvci5qdW1wQ29udGV4dEZvckJyZWFrKG1f
bGFiZWwpKQpAQCAtNTY2OCwyNCArMTYzOSw2IEBAIFJlZ2lzdGVySUQqIExhYmVsTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmUKICAgICByZXR1cm4gcjA7CiB9CiAKLXZvaWQgTGFiZWxOb2RlOjpvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi4x
MgotSlNWYWx1ZSogTGFiZWxOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmICghZXhlYy0+c2VlbkxhYmVscygpLnB1c2gobV9sYWJlbCkpCi0gICAg
ICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJEdXBsaWNh
dGVkIGxhYmVsICVzIGZvdW5kLiIsIG1fbGFiZWwpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1f
c3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwotICAgIGV4ZWMtPnNlZW5MYWJlbHMoKS5wb3AoKTsK
LQotICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIGV4ZWMtPmJyZWFr
T3JDb250aW51ZVRhcmdldCgpID09IG1fbGFiZWwpCi0gICAgICAgIGV4ZWMtPnNldENvbXBsZXRp
b25UeXBlKE5vcm1hbCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFRocm93Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogVGhyb3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTU2OTQsMjEgKzE2NDcsNiBAQCBSZWdp
c3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotdm9pZCBUaHJvd05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsK
LX0KLQotLy8gRUNNQSAxMi4xMwotSlNWYWx1ZSogVGhyb3dOb2RlOjpleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBtX2V4cHItPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0gICAgaGFuZGxlRXhjZXB0aW9u
KGV4ZWMsIHYpOwotICAgIHJldHVybiBleGVjLT5zZXRUaHJvd0NvbXBsZXRpb24odik7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcnlOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFRyeU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTc2MiwyMSAr
MTcwMCw2IEBAIFJlZ2lzdGVySUQqIFRyeU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmEKIH0KIAog
Ci12b2lkIFRyeU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQotewotICAgIC8vIENhbid0IG9wdGltaXplIHdpdGhpbiBjYXRjaEJsb2Nr
IGJlY2F1c2UgImNhdGNoIiBpbnRyb2R1Y2VzIGEgZHluYW1pYyBzY29wZS4KLSAgICBpZiAobV9m
aW5hbGx5QmxvY2spCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9maW5hbGx5QmxvY2suZ2V0
KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90cnlCbG9jay5nZXQoKSk7Ci19Ci0KLS8vIEVD
TUEgMTIuMTQKLUpTVmFsdWUqIFRyeU5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25Cb2R5Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTY29wZU5vZGU6OlNjb3BlTm9kZShTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSkKQEAgLTU5MTgsMTU3ICsxODQx
LDYgQEAgdm9pZCBQcm9ncmFtTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaQogICAgIG1fY2hp
bGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7CiB9CiAKLXZvaWQgUHJvZ3JhbU5vZGU6OmluaXRpYWxp
emVTeW1ib2xUYWJsZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBJ
ZiBhIHByZXZpb3VzIHNjcmlwdCBkZWZpbmVkIGEgc3ltYm9sIHdpdGggdGhlIHNhbWUgbmFtZSBh
cyBvbmUgb2Ygb3VyCi0gICAgLy8gc3ltYm9scywgdG8gYXZvaWQgYnJlYWtpbmcgcHJldmlvdXNs
eSBvcHRpbWl6ZWQgbm9kZXMsIHdlIG5lZWQgdG8gcmV1c2UKLSAgICAvLyB0aGUgc3ltYm9sJ3Mg
ZXhpc3Rpbmcgc3RvcmFnZSBpbmRleC4gU28sIHdlIGNhbid0IGJlIGFzIGVmZmljaWVudCBhcwot
ICAgIC8vIEZ1bmN0aW9uQm9keU5vZGU6OmluaXRpYWxpemVTeW1ib2xUYWJsZSwgd2hpY2gga25v
d3MgdGhhdCBubyBiaW5kaW5ncwotICAgIC8vIGhhdmUgeWV0IGJlZW4gbWFkZS4KLQotICAgIEpT
VmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKTsK
LSAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSB2YXJpYWJsZU9iamVjdC0+c3ltYm9sVGFi
bGUoKTsKLQotICAgIHNpemVfdCBsb2NhbFN0b3JhZ2VJbmRleCA9IHN5bWJvbFRhYmxlLnNpemUo
KTsKLSAgICBzaXplX3Qgc2l6ZTsKLQotICAgIC8vIE9yZGVyIG11c3QgbWF0Y2ggdGhlIG9yZGVy
IGluIHByb2Nlc3NEZWNsYXJhdGlvbnMuCi0KLSAgICBzaXplID0gbV9mdW5jdGlvblN0YWNrLnNp
emUoKTsKLSAgICBtX2Z1bmN0aW9uSW5kZXhlcy5yZXNpemUoc2l6ZSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgVVN0cmluZzo6UmVwKiByZXAgPSBt
X2Z1bmN0aW9uU3RhY2tbaV0tPm1faWRlbnQudXN0cmluZygpLnJlcCgpOwotICAgICAgICBwYWly
PFN5bWJvbFRhYmxlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gc3ltYm9sVGFibGUuYWRkKHJl
cCwgbG9jYWxTdG9yYWdlSW5kZXgpOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhlc1tpXSA9IHJl
c3VsdC5maXJzdC0+c2Vjb25kLmdldEluZGV4KCk7Ci0gICAgICAgIGlmIChyZXN1bHQuc2Vjb25k
KQotICAgICAgICAgICAgKytsb2NhbFN0b3JhZ2VJbmRleDsKLSAgICB9Ci0KLSAgICBzaXplID0g
bV92YXJTdGFjay5zaXplKCk7Ci0gICAgbV92YXJJbmRleGVzLnJlc2l6ZShzaXplKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0uZmlyc3Q7Ci0gICAgICAgIGlmICh2YXJpYWJsZU9i
amVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7Ci0gICAgICAgICAgICBtX3ZhckluZGV4
ZXNbaV0gPSBtaXNzaW5nU3ltYm9sTWFya2VyKCk7IC8vIFNpZ25hbCBub3QgdG8gaW5pdGlhbGl6
ZSB0aGlzIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IGlkZW50LnVzdHJpbmcoKS5yZXAoKTsKLSAgICAg
ICAgcGFpcjxTeW1ib2xUYWJsZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IHN5bWJvbFRhYmxl
LmFkZChyZXAsIGxvY2FsU3RvcmFnZUluZGV4KTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7Ci0gICAgICAgICAgICBtX3ZhckluZGV4ZXNbaV0gPSBtaXNzaW5nU3ltYm9sTWFya2VyKCk7
IC8vIFNpZ25hbCBub3QgdG8gaW5pdGlhbGl6ZSB0aGlzIGRlY2xhcmF0aW9uLgotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3ZhckluZGV4ZXNbaV0gPSByZXN1
bHQuZmlyc3QtPnNlY29uZC5nZXRJbmRleCgpOwotICAgICAgICArK2xvY2FsU3RvcmFnZUluZGV4
OwotICAgIH0KLX0KLQotdm9pZCBTY29wZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgTm9kZVN0YWNrIG5vZGVTdGFjazsK
LSAgICBOb2RlKiBub2RlID0gc3RhdGVtZW50TGlzdEluaXRpYWxpemVWYXJpYWJsZUFjY2Vzc1N0
YWNrKG1fY2hpbGRyZW4sIG5vZGVTdGFjayk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBleGVjLT52YXJpYWJs
ZU9iamVjdCgpLT5zeW1ib2xUYWJsZSgpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IGNvbnN0IExvY2FsU3RvcmFnZSBsb2NhbFN0b3JhZ2U7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgbm9kZS0+b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhleGVjLCBzeW1ib2xUYWJsZSwgbG9j
YWxTdG9yYWdlLCBub2RlU3RhY2spOwotCi0gICAgICAgIHNpemVfdCBzaXplID0gbm9kZVN0YWNr
LnNpemUoKTsKLSAgICAgICAgaWYgKCFzaXplKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IC0tc2l6ZTsKLSAgICAgICAgbm9kZSA9IG5vZGVTdGFja1tzaXplXTsKLSAgICAgICAgbm9kZVN0
YWNrLnNocmluayhzaXplKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdjY0lzQ3JhenkoKSBL
SlNfRkFTVF9DQUxMOwotc3RhdGljIHZvaWQgZ2NjSXNDcmF6eSgpCi17Ci19Ci0KLXZvaWQgUHJv
Z3JhbU5vZGU6OnByb2Nlc3NEZWNsYXJhdGlvbnMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgLy8gSWYgeW91IHJlbW92ZSB0aGlzIGNhbGwsIHNvbWUgU3VuU3BpZGVyIHRl
c3RzLCBpbmNsdWRpbmcKLSAgICAvLyBiaXRvcHMtbnNpZXZlLWJpdHMuanMsIHdpbGwgcmVncmVz
cyBzdWJzdGFudGlhbGx5IG9uIE1hYywgZHVlIHRvIGEgfjQwJQotICAgIC8vIGluY3JlYXNlIGlu
IEwyIGNhY2hlIG1pc3Nlcy4gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS81NjU3NDM5PiBXVEY/Ci0g
ICAgZ2NjSXNDcmF6eSgpOwotCi0gICAgaW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGV4ZWMpOwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgTG9jYWxTdG9yYWdlIGxvY2FsU3RvcmFnZTsK
LQotICAgIC8vIFdlIGNhbid0IGp1c3QgcmVzaXplIGxvY2FsU3RvcmFnZSBoZXJlIGJlY2F1c2Ug
dGhhdCB3b3VsZCB0ZW1wb3JhcmlseQotICAgIC8vIGxlYXZlIHVuaW5pdGlhbGl6ZWQgZW50cmll
cywgd2hpY2ggd291bGQgY3Jhc2ggR0MgZHVyaW5nIHRoZSBtYXJrIHBoYXNlLgotICAgIGxvY2Fs
U3RvcmFnZS5yZXNlcnZlQ2FwYWNpdHkobG9jYWxTdG9yYWdlLnNpemUoKSArIG1fdmFyU3RhY2su
c2l6ZSgpICsgbV9mdW5jdGlvblN0YWNrLnNpemUoKSk7Ci0KLSAgICBpbnQgbWluQXR0cmlidXRl
cyA9IERvbnREZWxldGU7Ci0KLSAgICAvLyBJbiBvcmRlciBmb3Igb3VyIGxvY2FsU3RvcmFnZSBp
bmRleGVzIHRvIGJlIGNvcnJlY3QsIHdlIG11c3QgbWF0Y2ggdGhlCi0gICAgLy8gb3JkZXIgb2Yg
YWRkaXRpb24gaW4gaW5pdGlhbGl6ZVN5bWJvbFRhYmxlKCkuCi0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IG1fZnVuY3Rpb25TdGFjay5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRnVuY0RlY2xOb2RlKiBub2RlID0gbV9mdW5jdGlvblN0YWNrW2ldOwotICAgICAgICBM
b2NhbFN0b3JhZ2VFbnRyeSBlbnRyeSA9IExvY2FsU3RvcmFnZUVudHJ5KG5vZGUtPm1ha2VGdW5j
dGlvbihleGVjLCBleGVjLT5zY29wZUNoYWluKCkubm9kZSgpKSwgbWluQXR0cmlidXRlcyk7Ci0g
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fZnVuY3Rpb25JbmRleGVzW2ldOwotCi0gICAgICAgIGlm
IChpbmRleCA9PSBsb2NhbFN0b3JhZ2Uuc2l6ZSgpKQotICAgICAgICAgICAgbG9jYWxTdG9yYWdl
LnVuY2hlY2tlZEFwcGVuZChlbnRyeSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKGluZGV4IDwgbG9jYWxTdG9yYWdlLnNpemUoKSk7Ci0gICAgICAgICAgICBsb2NhbFN0b3Jh
Z2VbaW5kZXhdID0gZW50cnk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IG1fdmFyU3RhY2suc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IGludCBpbmRleCA9IG1fdmFySW5kZXhlc1tpXTsKLSAgICAgICAgaWYgKGluZGV4ID09IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBh
dHRyaWJ1dGVzID0gbWluQXR0cmlidXRlczsKLSAgICAgICAgaWYgKG1fdmFyU3RhY2tbaV0uc2Vj
b25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpCi0gICAgICAgICAgICBhdHRyaWJ1
dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICBMb2NhbFN0b3JhZ2VFbnRyeSBlbnRyeSA9IExvY2Fs
U3RvcmFnZUVudHJ5KGpzVW5kZWZpbmVkKCksIGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID09IGxvY2FsU3RvcmFnZS5zaXplKCkpOwot
ICAgICAgICBsb2NhbFN0b3JhZ2UudW5jaGVja2VkQXBwZW5kKGVudHJ5KTsKLSAgICB9Ci0KLSAg
ICBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKGV4ZWMpOwotfQotCi12b2lkIEV2YWxOb2RlOjpwcm9j
ZXNzRGVjbGFyYXRpb25zKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8v
IFdlIGNvdWxkIG9wdGltaXplIGFjY2VzcyB0byBwcmUtZXhpc3Rpbmcgc3ltYm9scyBoZXJlLCBi
dXQgU3VuU3BpZGVyCi0gICAgLy8gcmVwb3J0cyB0aGF0IHRvIGJlIGEgbmV0IGxvc3MuCi0KLSAg
ICBzaXplX3QgaTsKLSAgICBzaXplX3Qgc2l6ZTsKLQotICAgIEpTVmFyaWFibGVPYmplY3QqIHZh
cmlhYmxlT2JqZWN0ID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKTsKLQotICAgIGZvciAoaSA9IDAs
IHNpemUgPSBtX3ZhclN0YWNrLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBJZGVu
dGlmaWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0uZmlyc3Q7Ci0gICAgICAgIGlmICh2YXJpYWJs
ZU9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGludCBhdHRyaWJ1dGVzID0gMDsKLSAgICAgICAgaWYgKG1fdmFyU3RhY2tbaV0u
c2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpCi0gICAgICAgICAgICBhdHRy
aWJ1dGVzID0gUmVhZE9ubHk7Ci0gICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXRXaXRoQXR0cmli
dXRlcyhleGVjLCBpZGVudCwganNVbmRlZmluZWQoKSwgYXR0cmlidXRlcyk7Ci0gICAgfQotCi0g
ICAgZm9yIChpID0gMCwgc2l6ZSA9IG1fZnVuY3Rpb25TdGFjay5zaXplKCk7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgRnVuY0RlY2xOb2RlKiBmdW5jRGVjbCA9IG1fZnVuY3Rpb25TdGFja1tp
XTsKLSAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIGZ1bmNE
ZWNsLT5tX2lkZW50LCBmdW5jRGVjbC0+bWFrZUZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hh
aW4oKS5ub2RlKCkpLCAwKTsKLSAgICB9Ci19Ci0KIFVTdHJpbmcgRnVuY3Rpb25Cb2R5Tm9kZTo6
cGFyYW1TdHJpbmcoKSBjb25zdAogewogICAgIFVTdHJpbmcgcygiIik7CkBAIC02MDgyLDMyICsx
ODU0LDYgQEAgVVN0cmluZyBGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbVN0cmluZygpIAogICAgIHJl
dHVybiBzOwogfQogCi1KU1ZhbHVlKiBQcm9ncmFtTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBwcm9jZXNzRGVjbGFyYXRpb25zKGV4ZWMpOwotICAg
IHJldHVybiBTY29wZU5vZGU6OmV4ZWN1dGUoZXhlYyk7Ci19Ci0KLUpTVmFsdWUqIEV2YWxOb2Rl
OjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHByb2Nlc3NE
ZWNsYXJhdGlvbnMoZXhlYyk7Ci0gICAgcmV0dXJuIFNjb3BlTm9kZTo6ZXhlY3V0ZShleGVjKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQm9keU5vZGVX
aXRoRGVidWdnZXJIb29rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRnVu
Y3Rpb25Cb2R5Tm9kZVdpdGhEZWJ1Z2dlckhvb2tzOjpGdW5jdGlvbkJvZHlOb2RlV2l0aERlYnVn
Z2VySG9va3MoU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2sqIHZhclN0YWNrLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSkKLSAgICA6IEZ1bmN0aW9uQm9k
eU5vZGUoY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1
cmUpCi17Ci19Ci0KLUpTVmFsdWUqIEZ1bmN0aW9uQm9keU5vZGVXaXRoRGVidWdnZXJIb29rczo6
ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBGdW5jdGlvbkJvZHlOb2RlOjpleGVjdXRlKGV4ZWMpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmNEZWNsTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBGdW5jRGVjbE5vZGU6
OmFkZFBhcmFtcygpCkBAIC02MTMyLDExICsxODc4LDYgQEAgUmVnaXN0ZXJJRCogRnVuY0RlY2xO
b2RlOjplbWl0Q29kZShDb2RlRwogICAgIHJldHVybiBkc3Q7CiB9CiAKLUpTVmFsdWUqIEZ1bmNE
ZWNsTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbigpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY0V4cHJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBSZWdpc3RlcklEKiBGdW5jRXhwck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNjE3NSwzMiArMTkxNiw0IEBAIHZv
aWQgRnVuY0V4cHJOb2RlOjphZGRQYXJhbXMoKQogICAgICAgICBtX2JvZHktPnBhcmFtZXRlcnMo
KS5hcHBlbmQocC0+aWRlbnQoKSk7CiB9CiAKLUpTVmFsdWUqIEZ1bmNFeHByTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0KLSAgICBib29sIG5hbWVkID0gIW1faWRlbnQuaXNOdWxsKCk7Ci0gICAgSlNPYmpl
Y3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSAwOwotCi0gICAgaWYgKG5hbWVkKSB7Ci0gICAgICAg
IC8vIG5hbWVkIEZ1bmN0aW9uRXhwcmVzc2lvbnMgY2FuIHJlY3Vyc2l2ZWx5IGNhbGwgdGhlbXNl
bHZlcywKLSAgICAgICAgLy8gYnV0IHRoZXkgd29uJ3QgcmVnaXN0ZXIgd2l0aCB0aGUgY3VycmVu
dCBzY29wZSBjaGFpbiBhbmQgc2hvdWxkCi0gICAgICAgIC8vIGJlIGNvbnRhaW5lZCBhcyBzaW5n
bGUgcHJvcGVydHkgaW4gYW4gYW5vbnltb3VzIG9iamVjdC4KLSAgICAgICAgZnVuY3Rpb25TY29w
ZU9iamVjdCA9IG5ldyBKU09iamVjdDsKLSAgICAgICAgZXhlYy0+cHVzaFNjb3BlKGZ1bmN0aW9u
U2NvcGVPYmplY3QpOwotICAgIH0KLQotICAgIEZ1bmN0aW9uSW1wKiBmdW5jID0gbmV3IEZ1bmN0
aW9uSW1wKGV4ZWMsIG1faWRlbnQsIG1fYm9keS5nZXQoKSwgZXhlYy0+c2NvcGVDaGFpbigpLm5v
ZGUoKSk7Ci0gICAgSlNPYmplY3QqIHByb3RvID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkp
OwotICAgIHByb3RvLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBmdW5jLCBEb250RW51bSk7Ci0gICAgZnVuYy0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvLCBEb250RGVsZXRlKTsKLQotICAgIGlmIChuYW1lZCkgewot
ICAgICAgICBmdW5jdGlvblNjb3BlT2JqZWN0LT5wdXREaXJlY3QobV9pZGVudCwgZnVuYywgUmVh
ZE9ubHkgfCAoZXhlYy0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSA/IDAgOiBEb250RGVsZXRlKSk7
Ci0gICAgICAgIGV4ZWMtPnBvcFNjb3BlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZ1bmM7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDM0MTUx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Mywz
NiArMTgzLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5z
SWZMZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIAotICAgICAgICAv
LyBVc2VkIGZvciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgbm9kZSB0
cmVlLiBEb2VzIG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMIHsgfQotCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBOb2RlKEpTVHlwZSkg
S0pTX0ZBU1RfQ0FMTDsgLy8gdXNlZCBieSBFeHByZXNzaW9uTm9kZQogCi0gICAgICAgIC8vIGZv
ciB1c2UgaW4gZXhlY3V0ZSgpCi0gICAgICAgIEpTVmFsdWUqIHNldEVycm9yQ29tcGxldGlvbihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciogbXNnKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICBKU1ZhbHVlKiBzZXRFcnJvckNvbXBsZXRpb24oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRp
ZmllciYpIEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgLy8gZm9yIHVzZSBpbiBldmFsdWF0ZSgp
Ci0gICAgICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBF
cnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZykgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgSlNWYWx1
ZSogdGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3Qg
Y2hhciogbXNnLCBjb25zdCBjaGFyKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgSlNWYWx1ZSog
dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hh
ciogbXNnLCBKU1ZhbHVlKiwgTm9kZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIEpTVmFsdWUq
IHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNo
YXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIEpTVmFs
dWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0
IGNoYXIqIG1zZywgSlNWYWx1ZSosIGNvbnN0IElkZW50aWZpZXImKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICBKU1ZhbHVlKiB0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgRXJy
b3JUeXBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqLCBOb2RlKiwgTm9kZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSosIE5vZGUqLCBjb25zdCBJ
ZGVudGlmaWVyJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1z
Zyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBF
cnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpOwogCi0gICAgICAg
IEpTVmFsdWUqIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIHZvaWQg
aGFuZGxlRXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdm9pZCBoYW5kbGVFeGNlcHRpb24oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBK
U1ZhbHVlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgICAgICAvLyBmb3IgdXNlIGluIGV4ZWN1dGUo
KQotICAgICAgICBKU1ZhbHVlKiByZXRocm93RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBpbnQgbV9saW5lIDogMjg7CiAgICAgICAg
IHVuc2lnbmVkIG1fZXhwZWN0ZWRSZXR1cm5UeXBlIDogMzsgLy8gSlNUeXBlCiAgICAgfTsKQEAg
LTIzOSwxOSArMjE1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgSlNUeXBlIGV4cGVj
dGVkUmV0dXJuVHlwZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNUeXBlPihtX2V4cGVjdGVkUmV0dXJuVHlwZSk7IH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTCA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVh
dGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29s
ZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgICAgICAv
LyBVc2VkIHRvIG9wdGltaXplIHRob3NlIG5vZGVzIHRoYXQgZG8gZXh0cmEgd29yayB3aGVuIHJl
dHVybmluZyBhIHJlc3VsdCwgZXZlbiBpZiB0aGUgcmVzdWx0IGhhcyBubyBzZW1hbnRpYyByZWxl
dmFuY2UKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQo
KSB7IH0KLQogICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGluIHB1YmxpYyBpbiBvcmRlciB0
byBjb21waWxlIHVzaW5nIEdDQyAzLnggCiAgICAgICAgIHR5cGVkZWYgZW51bSB7IEV2YWxPcGVy
YXRvciwgRnVuY3Rpb25DYWxsIH0gQ2FsbGVyVHlwZTsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHRlbXBsYXRlIDxDYWxsZXJUeXBlLCBib29sPiBpbmxpbmUgSlNWYWx1ZSogcmVzb2x2ZUFuZENh
bGwoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRz
Tm9kZSosIHNpemVfdCA9IDApOwogICAgIH07CiAKICAgICBjbGFzcyBTdGF0ZW1lbnROb2RlIDog
cHVibGljIE5vZGUgewpAQCAtMjYxLDggKzIyNiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICBpbnQgZmlyc3RMaW5lKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBsaW5lTm8oKTsg
fQogICAgICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1f
bGFzdExpbmU7IH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUgKmV4ZWMpIEtKU19GQVNUX0NBTEwgPSAwOwotCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwdXNoTGFiZWwoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwg
eyBtX2xhYmVsU3RhY2sucHVzaChpZGVudCk7IH0KICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4
cHJlc3Npb247IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdGF0ZW1lbnQoKSBjb25z
dCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yODMsNyArMjQ2LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogICAgIH07CkBAIC0yOTcsOCArMjU5LDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgICAgfTsKQEAgLTMxMiw4ICsyNzIsNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UHJpbWFyeTsgfQogICAgIH07CkBAIC0zMzksMTEgKzI5Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBzaWduYml0KG1f
ZG91YmxlKSA/IFByZWNVbmFyeSA6IFByZWNQcmltYXJ5OyB9CiAKQEAgLTM2NCwxMCArMzE3LDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICBBU1NFUlQodiA9PSBKU0ltbWVkaWF0ZTo6
ZnJvbShkKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0KICAgICAgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlKGRvdWJsZSBkKSBLSlNfRkFTVF9DQUxMIHsgbV9kb3VibGUgPSBkOyBtX3Zh
bHVlID0gSlNJbW1lZGlhdGU6OmZyb20oZCk7IEFTU0VSVChtX3ZhbHVlKTsgfQogCiAgICAgcHJp
dmF0ZToKQEAgLTM4NCw5ICszMzMsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCkBA
IC00MDMsNyArMzQ5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwogCi0gICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KIApAQCAtNDE5LDcg
KzM2NCw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
IAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KICAgICB9OwpAQCAt
NDM5LDEzICszODMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2
YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0
ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY1ByaW1hcnk7IH0KIApAQCAtNDU0LDczICszOTIsMTEgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIG1faWRlbnQ7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
OwogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIGludCBtX2luZGV4OyAvLyBV
c2VkIGJ5IExvY2FsVmFyQWNjZXNzTm9kZSBhbmQgU2NvcGVkVmFyQWNjZXNzTm9kZS4KICAgICAg
ICAgc2l6ZV90IG1fc2NvcGVEZXB0aDsgLy8gVXNlZCBieSBTY29wZWRWYXJBY2Nlc3NOb2RlCiAg
ICAgfTsKIAotICAgIGNsYXNzIExvY2FsVmFyQWNjZXNzTm9kZSA6IHB1YmxpYyBSZXNvbHZlTm9k
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBPdmVyd3JpdGVzIGEgUmVzb2x2ZU5vZGUgaW4g
cGxhY2UuCi0gICAgICAgIExvY2FsVmFyQWNjZXNzTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAot
ICAgICAgICAgICAgOiBSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAg
ICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKTsKLSAgICB9OwotICAgIAotICAgIGNsYXNzIFNjb3BlZFZhckFjY2Vzc05vZGUg
OiBwdWJsaWMgUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gT3ZlcndyaXRl
cyBhIFJlc29sdmVOb2RlIGluIHBsYWNlLgotICAgICAgICBTY29wZWRWYXJBY2Nlc3NOb2RlKGlu
dCBpLCBzaXplX3Qgc2NvcGVEZXB0aCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IFJlc29sdmVO
b2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAg
ICAgICAgICBtX3Njb3BlRGVwdGggPSBzY29wZURlcHRoOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQz
Ml90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIGlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLSAg
ICAKLSAgICBjbGFzcyBOb25Mb2NhbFZhckFjY2Vzc05vZGUgOiBwdWJsaWMgUmVzb2x2ZU5vZGUg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gT3ZlcndyaXRlcyBhIFJlc29sdmVOb2RlIGluIHBs
YWNlLgotICAgICAgICBOb25Mb2NhbFZhckFjY2Vzc05vZGUoc2l6ZV90IHNjb3BlRGVwdGgpIEtK
U19GQVNUX0NBTEwKLSAgICAgICAgOiBSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNjb3BlRGVwdGggIT0gMCk7Ci0gICAgICAgICAg
ICBtX3Njb3BlRGVwdGggPSBzY29wZURlcHRoOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2
YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlu
bGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLQogICAgIGNs
YXNzIEVsZW1lbnROb2RlIDogcHVibGljIE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRWxl
bWVudE5vZGUoaW50IGVsaXNpb24sIEV4cHJlc3Npb25Ob2RlKiBub2RlKSBLSlNfRkFTVF9DQUxM
CkBAIC01MzgsMTIgKzQxNCw5IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
IAogICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogCi0gICAgICAgIEpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcnJheU5vZGU7CiAgICAgICAgIExpc3RSZWZQ
dHI8RWxlbWVudE5vZGU+IG1fbmV4dDsKQEAgLTU3NSw4ICs0NDgsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCkBAIC01OTcs
MTEgKzQ2OCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNF
eHByZXNzaW9uOyB9CiAKLSAgICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKICAgICBwcml2YXRlOgpAQCAtNjI1LDExICs0
OTQsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3Rv
cmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCi0gICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgUGFzc1JlZlB0
cjxQcm9wZXJ0eUxpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
bV9uZXh0LnJlbGVhc2UoKTsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTY1MCw4ICs1MTcsNiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UHJpbWFyeTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQYXJlbnNJZkxlZnRtb3N0KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjcwLDEyICs1MzUsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
dWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KIApAQCAtNjg1LDggKzU0NCw2IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KCkgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiBtX3N1YnNjcmlwdC5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgIH07CkBAIC03
MDAsMTIgKzU1Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY01lbWJlcjsgfQogCkBAIC03MTUsOCArNTY2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIG1faWRlbnQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBt
X2lkZW50OwogICAgIH07CkBAIC03MzUsMTEgKzU4NCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAK
LSAgICAgICAgdm9pZCBldmFsdWF0ZUxpc3QoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBMaXN0
JikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgUGFzc1JlZlB0cjxBcmd1bWVudExpc3ROb2RlPiBy
ZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQog
CiAgICAgICAgIExpc3RSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gbV9uZXh0OwpAQCAtNzU3LDEy
ICs2MDQsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhw
cmVzc2lvbjsgfQogCi0gICAgICAgIHZvaWQgZXZhbHVhdGVMaXN0KE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjLCBMaXN0JiBsaXN0KSBLSlNfRkFTVF9DQUxMIHsgaWYgKG1fbGlzdE5vZGUp
IG1fbGlzdE5vZGUtPmV2YWx1YXRlTGlzdChleGVjLCBsaXN0KTsgfQotCiAgICAgICAgIFJlZlB0
cjxBcmd1bWVudExpc3ROb2RlPiBtX2xpc3ROb2RlOwogICAgIH07CiAKQEAgLTc4MSwxOCArNjI1
LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0xlZnRIYW5kU2lkZTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVF
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9leHByOwogICAgICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gbV9hcmdz
OwogICAgIH07CkBAIC04MDUsOCArNjQxLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIApAQCAtODIzLDggKzY1Nyw2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNDYWxsOyB9CiAKQEAgLTg1MCw4MSArNjgyLDE2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJf
dCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
OwotCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50
c05vZGU+IG1fYXJnczsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxW
YXJGdW5jdGlvbkNhbGxOb2RlLgogICAgICAgICBzaXplX3QgbV9zY29wZURlcHRoOyAvLyBVc2Vk
IGJ5IFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGUgYW5kIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxs
Tm9kZQogICAgIH07CiAgICAgCi0gICAgY2xhc3MgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlIDog
cHVibGljIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExv
Y2FsVmFyRnVuY3Rpb25DYWxsTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAg
OiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAg
ICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVU
b051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICAKLSAg
ICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLSAgICAKLSAgICBjbGFzcyBTY29w
ZWRWYXJGdW5jdGlvbkNhbGxOb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGUoaW50IGksIHNp
emVfdCBkZXB0aCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwot
ICAgICAgICAgICAgbV9zY29wZURlcHRoID0gZGVwdGg7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMy
X3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLSAgICB9OwotICAg
IAotICAgIGNsYXNzIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZSA6IHB1YmxpYyBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBOb25Mb2NhbFZhckZ1bmN0
aW9uQ2FsbE5vZGUoc2l6ZV90IGRlcHRoKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEZ1
bmN0aW9uQ2FsbFJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX3Njb3BlRGVwdGggPSBkZXB0aDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBp
bmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotICAgIH07Ci0KICAgICBj
bGFzcyBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSogYXJncykg
S0pTX0ZBU1RfQ0FMTApAQCAtOTM1LDggKzcwMiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAKQEAgLTk1NiwxOCAr
NzIxLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9O
dW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Nh
bGw7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5s
aW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAg
ICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gbV9hcmdzOwpAQCAtMTAwNSwzNiArNzYyLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y1Bvc3RmaXg7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlS
ZXN1bHQoKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUG9zdEluY0xvY2FsVmFyTm9kZSA6IHB1Ymxp
YyBQb3N0SW5jUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdEluY0xvY2Fs
VmFyTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBQb3N0SW5jUmVzb2x2
ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChp
ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpOwotICAgIH07Ci0KLSAgICBjbGFzcyBQb3N0SW5jQ29u
c3ROb2RlIDogcHVibGljIFBvc3RJbmNSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBQb3N0SW5jQ29uc3ROb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFBv
c3RJbmNSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5k
ZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNs
YXNzIFBvc3REZWNSZXNvbHZlTm9kZSA6IHB1YmxpYyBQcmVQb3N0UmVzb2x2ZU5vZGUgewpAQCAt
MTA1MSw0MyArNzgwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0
b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1Bvc3RmaXg7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5u
ZWNlc3NhcnlSZXN1bHQoKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUG9zdERlY0xvY2FsVmFyTm9k
ZSA6IHB1YmxpYyBQb3N0RGVjUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUG9z
dERlY0xvY2FsVmFyTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBQb3N0
RGVjUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChpICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4
ID0gaTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZUZv
clVubmVjZXNzYXJ5UmVzdWx0KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
Kik7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBvc3REZWNDb25zdE5vZGUgOiBwdWJsaWMgUG9zdERl
Y1Jlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBvc3REZWNDb25zdE5vZGUoaW50
IGkpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUG9zdERlY1Jlc29sdmVOb2RlKFBsYWNl
bWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9OwogCiAgICAgY2xhc3MgUG9zdGZpeEJyYWNrZXROb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTEwOTgsNyArNzkyLDYgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNQb3N0Zml4OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMTE1LDcgKzgwOCw2IEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTEyOCw3ICs4MjAsNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIH07CiAKQEAgLTExNDAsNyArODMxLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0
Zml4OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMTU3LDcgKzg0Nyw2IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTE3MCw3ICs4NTksNiBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIH07CiAKQEAgLTExODMsNyArODcxLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjUG9zdGZpeDsgfQogCkBAIC0xMjA3LDggKzg5NCw2IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBAIC0xMjE2
LDE2ICs5MDEsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50
OwogICAgIH07CiAKLSAgICBjbGFzcyBMb2NhbFZhckRlbGV0ZU5vZGUgOiBwdWJsaWMgRGVsZXRl
UmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWxWYXJEZWxldGVOb2RlKCkg
S0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBEZWxldGVSZXNvbHZlTm9kZShQbGFjZW1lbnRO
ZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
fTsKLQogICAgIGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlbGV0ZUJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KSBLSlNfRkFTVF9DQUxMCkBAIC0xMjM2
LDggKzkxMSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNVbmFyeTsgfQogCkBAIC0xMjU2LDggKzkyOSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBAIC0xMjc1LDggKzk0Niw2
IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFy
eTsgfQogCkBAIC0xMjkzLDggKzk2Miw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBAIC0xMzE5LDggKzk4Niw2IEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBA
IC0xMzMxLDE5ICs5OTYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc2l6ZV90IG1faW5k
ZXg7IC8vIFVzZWQgYnkgTG9jYWxUeXBlT2ZOb2RlLgogICAgIH07CiAKLSAgICBjbGFzcyBMb2Nh
bFZhclR5cGVPZk5vZGUgOiBwdWJsaWMgVHlwZU9mUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgTG9jYWxWYXJUeXBlT2ZOb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IFR5cGVPZlJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2V4cGVjdGVkUmV0dXJuVHlwZSA9IFN0cmluZ1R5cGU7Ci0gICAgICAgICAg
ICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRl
eCA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCiAgICAgY2xh
c3MgVHlwZU9mVmFsdWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFR5cGVPZlZhbHVlTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcikgS0pTX0ZBU1Rf
Q0FMTApAQCAtMTM1NCw4ICsxMDA2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAKQEAgLTEzNzcsMzYgKzEwMjcsMTAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAg
ICAgfTsKIAotICAgIGNsYXNzIFByZUluY0xvY2FsVmFyTm9kZSA6IHB1YmxpYyBQcmVJbmNSZXNv
bHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBQcmVJbmNMb2NhbFZhck5vZGUoaW50IGkp
IEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUHJlSW5jUmVzb2x2ZU5vZGUoUGxhY2VtZW50
TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBQcmVJbmNDb25zdE5vZGUgOiBwdWJs
aWMgUHJlSW5jUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUHJlSW5jQ29uc3RO
b2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFByZUluY1Jlc29sdmVOb2Rl
KFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCiAgICAgY2xhc3MgUHJlRGVjUmVzb2x2
ZU5vZGUgOiBwdWJsaWMgUHJlUG9zdFJlc29sdmVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFByZURlY1Jlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxM
CkBAIC0xNDIxLDM2ICsxMDQ1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
S0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICAgIH07CiAKLSAgICBjbGFzcyBQcmVEZWNMb2Nh
bFZhck5vZGUgOiBwdWJsaWMgUHJlRGVjUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgUHJlRGVjTG9jYWxWYXJOb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6
IFByZURlY1Jlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9p
bmRleCA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCi0gICAg
Y2xhc3MgUHJlRGVjQ29uc3ROb2RlIDogcHVibGljIFByZURlY1Jlc29sdmVOb2RlIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIFByZURlY0NvbnN0Tm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAg
ICAgICAgICAgOiBQcmVEZWNSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAg
ICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
fTsKLQogICAgIGNsYXNzIFByZWZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFByZWZpeEJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KSBLSlNfRkFTVF9DQUxMCkBAIC0xNDU5
LDcgKzEwNTcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0x
NDc2LDcgKzEwNzMsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNU
X0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAKQEAgLTE0ODks
NyArMTA4NSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTUwMSw3ICsx
MDk2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xNTE4
LDcgKzExMTIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NB
TEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAKQEAgLTE1MzEsNyAr
MTEyNCw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
IAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTU0NCw3ICsxMTM2
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KIApAQCAtMTU2
MiwxMiArMTE1Myw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1VuYXJ5OyB9CiAKQEAgLTE1ODQsOSArMTE2OSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjVW5hcnk7IH0KIApAQCAtMTYwMywxOCArMTE4NSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9J
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9l
eHByOwogICAgIH07CiAKQEAgLTE2MjcsOSArMTIwMSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRv
Qm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNVbmFyeTsgfQogCkBAIC0xNjQ3LDE4ICsxMjE4LDEwIEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX3Rlcm0xOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAg
ICAgfTsKQEAgLTE2NzMsMTcgKzEyMzYsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlw
bGljaXRhdmU7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgZG91Ymxl
IGlubGluZUV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7CiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV90ZXJtMjsKICAgICB9OwpAQCAtMTY5OCwxOCArMTI1NCwxMCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90
IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNpdGF2ZTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX3Rlcm0yOwogICAgIH07CkBAIC0xNzIzLDExICsxMjcxLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRl
VG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjQWRkaXRpdmU7IH0KIApAQCAtMTc0MSw1NSArMTI4NCw2IEBAIG5hbWVzcGFjZSBLSlMg
ewogCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxX
QVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopOwotICAgIH07Ci0KLSAgICBjbGFzcyBBZGROdW1iZXJzTm9kZSA6IHB1YmxpYyBB
ZGROb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFkZE51bWJlcnNOb2RlKEV4cHJlc3Npb25O
b2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IEFkZE5vZGUodGVybTEsIHRlcm0yLCBOdW1iZXJUeXBlKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVh
dGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9V
SW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsKLQotICAg
IGNsYXNzIEFkZFN0cmluZ0xlZnROb2RlIDogcHVibGljIEFkZE5vZGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgQWRkU3RyaW5nTGVmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNz
aW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogQWRkTm9kZSh0ZXJt
MSwgdGVybTIsIFN0cmluZ1R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBBZGRTdHJpbmdSaWdodE5vZGUgOiBwdWJsaWMg
QWRkTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBBZGRTdHJpbmdSaWdodE5vZGUoRXhwcmVz
c2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAg
ICAgICAgICAgIDogQWRkTm9kZSh0ZXJtMSwgdGVybTIsIFN0cmluZ1R5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBBZGRT
dHJpbmdzTm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFkZFN0
cmluZ3NOb2RlKEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBL
SlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEFkZE5vZGUodGVybTEsIHRlcm0yLCBTdHJpbmdU
eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9Owog
CiAgICAgY2xhc3MgU3ViTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0xODAyLDE3
ICsxMjk2LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVh
dGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX3Rlcm0xOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAg
ICAgfTsKQEAgLTE4MjcsMTcgKzEzMTQsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV90ZXJtMjsKICAgICB9OwpAQCAtMTg1MiwxNyArMTMzMiwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBl
dmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNTaGlmdDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBp
bnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwot
CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwogICAgIH07CkBAIC0xODc3LDE2ICsxMzUwLDEwIEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1
aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxX
QVlTX0lOTElORSB1aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKik7CiAKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fdGVybTE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMjsKICAg
ICB9OwpAQCAtMTkwMSw0OCArMTM2OCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVs
YXRpb25hbDsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKICAgICAg
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07CiAKLSAgICBjbGFzcyBM
ZXNzTnVtYmVyc05vZGUgOiBwdWJsaWMgTGVzc05vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAg
TGVzc051bWJlcnNOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IExlc3NOb2RlKGV4cHIxLCBleHByMikK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLSAgICB9Owot
Ci0gICAgY2xhc3MgTGVzc1N0cmluZ3NOb2RlIDogcHVibGljIExlc3NOb2RlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIExlc3NTdHJpbmdzTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBMZXNzTm9kZShl
eHByMSwgZXhwcjIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lO
TElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
Kik7Ci0gICAgfTsKLQogICAgIGNsYXNzIEdyZWF0ZXJOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEdyZWF0ZXJOb2RlKEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCkBAIC0xOTUyLDE1ICsx
Mzg1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsK
ICAgICB9OwpAQCAtMTk3NCwxNSArMTQwMiwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xl
YW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UmVsYXRpb25hbDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29s
IGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAg
ICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgICAgfTsKQEAgLTE5OTYsMTUgKzE0MTksMTAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHBy
MTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07CkBAIC0y
MDE5LDkgKzE0MzcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQog
CkBAIC0yMDQwLDkgKzE0NTUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtK
U19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExv
Y2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQogCkBA
IC0yMDYxLDE1ICsxNDczLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwg
Y29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1
YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjI7CiAgICAgfTsKQEAgLTIwODQsMTUgKzE0OTEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1
YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjEwNywxNSArMTUwOSwx
MCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjRXF1YWxpdHk7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07
CkBAIC0yMTMwLDE1ICsxNTI3LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0
eTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fZXhwcjI7CiAgICAgfTsKQEAgLTIxNTMsMTggKzE1NDUsMTAgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUg
ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0
ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZUFuZDsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwog
ICAgIH07CkBAIC0yMTc5LDE4ICsxNTYzLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VPcjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
QUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsK
ICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07CkBAIC0yMjA1
LDE4ICsxNTgxLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0JpdHdpc2VYb3I7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsK
LQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjIzNCwxNSArMTYwMiwxMCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYs
IE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNhbEFuZDsgfQogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgICAgfTsK
QEAgLTIyNTcsMTUgKzE2MjAsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0xvZ2ljYWxP
cjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fZXhwcjI7CiAgICAgfTsKQEAgLTIyODMsMTIgKzE2NDEsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZh
bHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRl
VG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDb25kaXRpb25hbDsgfQogCkBAIC0yMzE4
LDggKzE2NzAsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NB
TEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjQXNzaWdubWVudDsgfQogCkBAIC0yMzMxLDMwICsxNjgxLDYgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIGJvb2wgbV9yaWdodEhhc0Fzc2lnbm1lbnRzIDogMTsKICAgICB9OwogCi0g
ICAgY2xhc3MgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZSA6IHB1YmxpYyBSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZShpbnQg
aSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoUGxh
Y2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBSZWFkTW9kaWZ5Q29uc3RO
b2RlIDogcHVibGljIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBSZWFkTW9kaWZ5Q29uc3ROb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6
IFJlYWRNb2RpZnlSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAg
IG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsKLQog
ICAgIGNsYXNzIEFzc2lnblJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykgS0pT
X0ZBU1RfQ0FMTApAQCAtMjM3Myw4ICsxNjk5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogCkBAIC0yMzg1
LDI4ICsxNzA5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGJvb2wgbV9yaWdodEhhc0Fz
c2lnbm1lbnRzOwogICAgIH07CiAKLSAgICBjbGFzcyBBc3NpZ25Mb2NhbFZhck5vZGUgOiBwdWJs
aWMgQXNzaWduUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduTG9jYWxW
YXJOb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEFzc2lnblJlc29sdmVO
b2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCi0gICAgY2xhc3MgQXNzaWduQ29u
c3ROb2RlIDogcHVibGljIEFzc2lnblJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IEFzc2lnbkNvbnN0Tm9kZSgpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogQXNzaWduUmVz
b2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgIH07Ci0KICAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tldE5vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVhZE1vZGlm
eUJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2Ny
aXB0LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0
SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykgS0pTX0ZBU1RfQ0FMTApA
QCAtMjQyMSw4ICsxNzIzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KIApAQCAtMjQ0OCw4ICsxNzQ4LDYgQEAgbmFtZXNw
YWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0K
IApAQCAtMjQ3Miw4ICsxNzcwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KIApAQCAtMjQ5Nyw4ICsxNzkz
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fz
c2lnbm1lbnQ7IH0KIApAQCAtMjUyMCw3ICsxODE0LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogCkBAIC0yNTM2LDEyICsxODI5LDkgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgICAgICA6IG1fZXhwcjEoZXhwcjEpCiAgICAgICAgICAgICAsIG1f
ZXhwcjIoZXhwcjIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhwcjEtPm9wdGltaXplRm9y
VW5uZWNlc3NhcnlSZXN1bHQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjRXhwcmVzc2lvbjsgfQogCkBAIC0yNTYzLDkgKzE4NTMsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnN0RGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbikgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdm9pZCBldmFsdWF0
ZVNpbmdsZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgICAgICBQYXNzUmVm
UHRyPENvbnN0RGVjbE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBt
X25leHQucmVsZWFzZSgpOyB9CkBAIC0yNTc2LDggKzE4NjMsNiBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZVNpbmdsZShDb2RlR2VuZXJhdG9yJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGhhbmRsZVNsb3dDYXNlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU2NvcGVDaGFpbiYsIEpTVmFsdWUqKSBLSlNfRkFTVF9DQUxMIE5F
VkVSX0lOTElORTsKICAgICB9OwogCiAgICAgY2xhc3MgQ29uc3RTdGF0ZW1lbnROb2RlIDogcHVi
bGljIFN0YXRlbWVudE5vZGUgewpAQCAtMjU4NywxMSArMTg3MiwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9D
QUxMOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPENvbnN0RGVjbE5vZGU+IG1fbmV4
dDsKICAgICB9OwpAQCAtMjYxNiw4ICsxOTAwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IEJsb2NrTm9kZShTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4pIEtKU19GQVNUX0NBTEw7CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yNjMyLDcgKzE5MTQs
NiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3Rh
dGVtZW50KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKQEAg
LTI2NDUsOCArMTkyNiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAtMjY2Miw4ICsxOTQxLDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAg
cHJpdmF0ZToKQEAgLTI2NzksOCArMTk1Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yNjk3LDgg
KzE5NzIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogCiAgICAgcHJpdmF0ZToKQEAgLTI3MTQsOCArMTk4Nyw2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRl
OgpAQCAtMjczMiw4ICsyMDAzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6CkBAIC0yNzQ0LDkgKzIwMTMsOSBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBGb3JOb2RlIDogcHVibGljIFN0YXRlbWVudE5v
ZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRm9yTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEs
IEV4cHJlc3Npb25Ob2RlKiBleHByMiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIzLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIGJvb2wgZXhwcjFXYXNWYXJEZWNsKSBLSlNfRkFTVF9DQUxMCi0gICAg
ICAgICAgICA6IG1fZXhwcjEoZXhwcjEgPyBleHByMSA6IG5ldyBQbGFjZWhvbGRlclRydWVOb2Rl
KQotICAgICAgICAgICAgLCBtX2V4cHIyKGV4cHIyID8gZXhwcjIgOiBuZXcgUGxhY2Vob2xkZXJU
cnVlTm9kZSkKLSAgICAgICAgICAgICwgbV9leHByMyhleHByMyA/IGV4cHIzIDogbmV3IFBsYWNl
aG9sZGVyVHJ1ZU5vZGUpCisgICAgICAgICAgICA6IG1fZXhwcjEoZXhwcjEpCisgICAgICAgICAg
ICAsIG1fZXhwcjIoZXhwcjIpCisgICAgICAgICAgICAsIG1fZXhwcjMoZXhwcjMpCiAgICAgICAg
ICAgICAsIG1fc3RhdGVtZW50KHN0YXRlbWVudCkKICAgICAgICAgICAgICwgbV9leHByMVdhc1Zh
ckRlY2woZXhwcjEgJiYgZXhwcjFXYXNWYXJEZWNsKQogICAgICAgICB7CkBAIC0yNzU0LDE0ICsy
MDIzLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICBBU1NFUlQobV9leHByMik7CiAg
ICAgICAgICAgICBBU1NFUlQobV9leHByMyk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGVtZW50
KTsKLQotICAgICAgICAgICAgbV9leHByMS0+b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgp
OwotICAgICAgICAgICAgbV9leHByMy0+b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAt
Mjc3OCw4ICsyMDQyLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIEZvckluTm9kZShjb25z
dCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVu
dE5vZGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
eGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAKICAgICBwcml2YXRlOgpAQCAtMjgwMyw3ICsyMDY1LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAtMjgyMiw3ICsyMDgzLDYgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAt
MjgzNyw4ICsyMDk3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBib29sIGlzUmV0dXJuTm9kZSgpIGNvbnN0
IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0yODU1LDggKzIxMTMsNiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAg
ICAgcHJpdmF0ZToKQEAgLTI4NzMsOCArMjEyOSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNo
TGFiZWwoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwgeyBtX3N0YXRlbWVu
dC0+cHVzaExhYmVsKGlkZW50KTsgfQogCkBAIC0yODkxLDggKzIxNDUsNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAgcHJpdmF0
ZToKQEAgLTI5MDksOCArMjE2MSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogZHN0ID0gMCkgS0pTX0ZBU1RfQ0FMTDsKQEAgLTI5NjAsOCArMjIxMCw2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBib29sIG5lZWRzQ2xvc3VyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNDbG9zdXJlOyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0KICAgICAgICAgVmFyU3RhY2sgbV92YXJTdGFjazsKICAgICAgICAgRnVuY3Rpb25T
dGFjayBtX2Z1bmN0aW9uU3RhY2s7CiAKQEAgLTI5NzcsOCArMjIyNSw2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBzdGF0aWMgUHJvZ3JhbU5vZGUqIGNyZWF0ZShTb3VyY2VFbGVtZW50cyos
IFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9z
dXJlKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIH5Qcm9ncmFtTm9kZSgpOwogICAg
ICAgICAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrJiBjb2Rl
KFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBib29sIGNhbkNyZWF0ZUdsb2JhbHMpIEtKU19G
QVNUX0NBTEwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NvZGUpCkBAIC0yOTkyLDkg
KzIyMzgsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgdm9pZCBnZW5lcmF0ZUNvZGUoU2Nv
cGVDaGFpbk5vZGUqLCBib29sKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNU
X0NBTEw7CiAKLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3ltYm9sVGFibGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
cHJvY2Vzc0RlY2xhcmF0aW9ucyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0KICAgICAgICAgVmVjdG9yPHNpemVfdD4gbV92YXJJbmRleGVzOyAvLyBTdG9yYWdlIGlu
ZGV4ZXMgYmVsb25naW5nIHRvIHRoZSBub2RlcyBpbiBtX3ZhclN0YWNrLiAoUmVjb3JkZWQgdG8g
YXZvaWQgZG91YmxlIGxvb2t1cC4pCiAgICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fZnVuY3Rpb25J
bmRleGVzOyAvLyBTdG9yYWdlIGluZGV4ZXMgYmVsb25naW5nIHRvIHRoZSBub2RlcyBpbiBtX2Z1
bmN0aW9uU3RhY2suIChSZWNvcmRlZCB0byBhdm9pZCBkb3VibGUgbG9va3VwLikKIApAQCAtMzAw
Niw4ICsyMjQ5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHN0YXRpYyBFdmFsTm9kZSog
Y3JlYXRlKFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1
c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1
YWwgfkV2YWxOb2RlKCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCiAgICAgICAgIEV2
YWxDb2RlQmxvY2smIGNvZGUoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pIEtKU19GQVNUX0NB
TEwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NvZGUpCkBAIC0zMDE4LDcgKzIyNTks
NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBwcml2YXRlOgogICAgICAgICBFdmFsTm9kZShTb3Vy
Y2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGJvb2wgdXNlc0V2YWwsIGJv
b2wgbmVlZHNDbG9zdXJlKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBwcm9jZXNzRGVjbGFyYXRpb25zKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdm9pZCBnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKQEAgLTMwODEsNyArMjMy
MSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgRnVuY3Rpb25JbXAqIG1ha2VGdW5jdGlvbihFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9k
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVy
OyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBuZWVkc1BhcmVuc0lmTGVmdG1vc3QoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkBAIC0zMTExLDcgKzIzNTAsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
eGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIEZ1bmN0aW9uSW1wKiBtYWtlRnVuY3Rpb24oRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqKSBLSlNfRkFTVF9DQUxMOwogCkBAIC0zMTQwLDEzICsyMzc4LDkgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgICAgICAgICAgY2hpbGRyZW4tPnJlbGVhc2VDb250ZW50c0ludG9WZWN0
b3IobV9jaGlsZHJlbik7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAKLSAgICAgICAg
SlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICBKU1ZhbHVlKiBleGVjdXRlU3RhdGVtZW50cyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0KICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBj
b25zdCB7IHJldHVybiBtX2V4cHIuZ2V0KCk7IH0KICAgICAgICAgU3RhdGVtZW50VmVjdG9yJiBj
aGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KIApAQCAtMzE2OCw3ICsyNDAyLDYgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICBjbGF1c2VMaXN0LT5tX25leHQgPSB0aGlzOwog
ICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIENhc2VDbGF1c2VO
b2RlKiBnZXRDbGF1c2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1fY2xhdXNlLmdl
dCgpOyB9CiAgICAgICAgIENsYXVzZUxpc3ROb2RlKiBnZXROZXh0KCkgY29uc3QgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0zMTkyLDggKzI0MjUs
NiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q29kZUZvckJs
b2NrKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBpbnB1dCwgUmVnaXN0ZXJJRCogZHN0ID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgSlNW
YWx1ZSogZXhlY3V0ZUJsb2NrKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgSlNWYWx1ZSAqaW5w
dXQpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhw
cmVzc2lvbjsgfQogCkBAIC0zMjEzLDggKzI0NDQsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKQEAgLTMyMjYsOSArMjQ1NSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHB1YmxpYzoKICAgICAgICAgQnJlYWtwb2ludENoZWNr
U3RhdGVtZW50KFBhc3NSZWZQdHI8U3RhdGVtZW50Tm9kZT4pIEtKU19GQVNUX0NBTEw7CiAKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fc3RhdGVtZW50OwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL29iamVjdC5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NCw5ICs1ODQsOSBAQCB2b2lkIEpT
T2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByCiAgICAgR2V0dGVyU2V0dGVySW1wICpn
cyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAqPigqbG9jYXRpb24pOwogICAgIEpTT2Jq
ZWN0ICpnZXR0ZXJGdW5jID0gZ3MtPmdldEdldHRlcigpOwogICAgIGlmIChnZXR0ZXJGdW5jKQot
ICAgICAgICBzbG90LnNldEdldHRlclNsb3QodGhpcy0+dG9UaGlzT2JqZWN0KDApLCBnZXR0ZXJG
dW5jKTsKKyAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmMpOwogICAgIGVsc2UK
LSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJvciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5o
CShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2b2lkIHNl
dFNldHRlcihKU09iamVjdCAqcykgeyBzZXR0ZXIgPSBzOyB9CiAgICAgICAKICAgcHJpdmF0ZToK
KyAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGlu
Y2x1ZGVkLgorICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYp
OworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0
b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CisKICAgICBKU09iamVjdCAqZ2V0dGVyOwog
ICAgIEpTT2JqZWN0ICpzZXR0ZXI7ICAKICAgfTsKQEAgLTUyNywxOSArNTM0LDE5IEBAIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzT2JqZWN0KGNvbnN0IENsYXMKIAogaW5saW5lIEpTVmFsdWUgKkpT
T2JqZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0CiB7Ci0gIFByb3BlcnR5U2xvdCBzbG90OworICBQcm9wZXJ0eVNsb3Qgc2xvdChj
b25zdF9jYXN0PEpTT2JqZWN0ICo+KHRoaXMpKTsKIAogICBpZiAoY29uc3RfY2FzdDxKU09iamVj
dCAqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0g
ICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgY29uc3RfY2FzdDxKU09iamVjdCAqPih0aGlz
KSwgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpOwogICAgIAogICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogaW5saW5lIEpTVmFs
dWUgKkpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
IGNvbnN0CiB7Ci0gIFByb3BlcnR5U2xvdCBzbG90OworICBQcm9wZXJ0eVNsb3Qgc2xvdChjb25z
dF9jYXN0PEpTT2JqZWN0ICo+KHRoaXMpKTsKICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QgKj4o
dGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgIHJl
dHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGNvbnN0X2Nhc3Q8SlNPYmplY3QgKj4odGhpcyksIHBy
b3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICAKICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC01ODksMTMgKzU5NiwxMyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlCiAgICAgICAgICAgICBz
bG90SXNXcml0ZWFibGUgPSBmYWxzZTsKICAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3Qoc2xvdCwgbG9jYXRpb24pOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWVTbG90KHRoaXMsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90
KGxvY2F0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8gbm9uLXN0
YW5kYXJkIE5ldHNjYXBlIGV4dGVuc2lvbgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgewotICAgICAgICBzbG90LnNldFZhbHVl
U2xvdCh0aGlzLCAmX3Byb3RvKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QoJl9wcm90byk7
CiAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTYxMiwxMyArNjE5LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
Z2V0T3duUHJvcGUKICAgICAgICAgaWYgKF9wcm9wLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSAmJiBsb2NhdGlvblswXS0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpCiAgICAgICAgICAg
ICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgbG9jYXRpb24pOworICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRpb24pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICAvLyBub24tc3RhbmRhcmQgTmV0c2NhcGUgZXh0ZW5zaW9uCiAgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7Ci0g
ICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsICZfcHJvdG8pOworICAgICAgICBzbG90LnNl
dFZhbHVlU2xvdCgmX3Byb3RvKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02
NDAsNiArNjQ3LDc1IEBAIGlubGluZSBKU1ZhbHVlKiBKU09iamVjdDo6dG9QcmltaXRpdmUoRXgK
ICAgICByZXR1cm4gZGVmYXVsdFZhbHVlKGV4ZWMsIHByZWZlcnJlZFR5cGUpOwogfQogCitpbmxp
bmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6
aXNJbW1lZGlhdGUodGhpcykpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0ltbWVk
aWF0ZTo6dG9PYmplY3QodGhpcywgZXhlYyk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9i
amVjdCk7CisgICAgICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAg
ICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAgICBK
U0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihjb25zdF9jYXN0PEpTVmFsdWUqPih0
aGlzKSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoY2VsbCk7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgaWYgKGNlbGwtPmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgQVNTRVJUKGNlbGwtPmlzT2JqZWN0KCkpOworICAgICAgICBKU1ZhbHVl
KiBwcm90byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCktPnByb3RvdHlwZSgpOworICAg
ICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIGNlbGwgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihwcm90byk7CisgICAg
fQorfQorCitpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0
ZTo6aXNJbW1lZGlhdGUodGhpcykpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0lt
bWVkaWF0ZTo6dG9PYmplY3QodGhpcywgZXhlYyk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCk7CisgICAgICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
ICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAg
ICBKU0NlbGwqIGNlbGwgPSBjb25zdF9jYXN0PEpTQ2VsbCo+KGFzQ2VsbCgpKTsKKyAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChjZWxsKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoY2Vs
bC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAg
ICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBB
U1NFUlQoY2VsbC0+aXNPYmplY3QoKSk7CisgICAgICAgIEpTVmFsdWUqIHByb3RvID0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJvdG90eXBlKCk7CisgICAgICAgIGlmICghcHJvdG8t
PmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
Y2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHByb3RvKTsKKyAgICB9Cit9CisKK2lubGluZSB2
b2lkIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRl
Ojppc0ltbWVkaWF0ZSh0aGlzKSkpIHsKKyAgICAgICAgSlNJbW1lZGlhdGU6OnRvT2JqZWN0KHRo
aXMsIGV4ZWMpLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYXNDZWxsKCktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
K30KKworaW5saW5lIHZvaWQgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHRoaXMpKSkgeworICAgICAgICBKU0ltbWVkaWF0ZTo6dG9PYmpl
Y3QodGhpcywgZXhlYyktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBhc0NlbGwoKS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUpOworfQorCitpbmxpbmUgSlNPYmplY3QqIFByb3BlcnR5U2xvdDo6c2xvdEJhc2UoKSBjb25z
dAoreworICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKKyAgICBBU1NFUlQobV9zbG90QmFzZS0+aXNP
YmplY3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4obV9zbG90QmFzZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZiAvLyBLSlNfT0JKRUNUX0gKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NiBAQAogLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQogLyoKLSAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotICogIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMjcgKzI5LDI3
IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi1KU1ZhbHVlICpQcm9wZXJ0eVNsb3Q6OnVuZGVmaW5l
ZEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKQorSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmRlZmluZWRHZXR0ZXIoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIFByb3BlcnR5U2xvdDo6dW5nZXR0
YWJsZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmdldHRhYmxlR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlICpQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZSogUHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgQ2FsbERhdGEgZGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNsb3QubV9k
YXRhLmdldHRlckZ1bmMtPmdldENhbGxEYXRhKGRhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZU5hdGl2ZSkKLSAgICAgICAgcmV0dXJuIHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNh
bGwoZXhlYywgb3JpZ2luYWxPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICAgICAgcmV0
dXJuIHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNhbGwoZXhlYywgc2xvdC5zbG90QmFzZSgpLCBl
eGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlSlMpOwog
ICAgIFJlZ2lzdGVyRmlsZVN0YWNrKiBzdGFjayA9ICZleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCk7CiAgICAgc3RhY2stPnB1c2hGdW5jdGlvblJlZ2lzdGVy
RmlsZSgpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNh
bGwoZXhlYywgb3JpZ2luYWxPYmplY3QsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBKU1ZhbHVl
KiByZXN1bHQgPSBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxsKGV4ZWMsIHNsb3Quc2xvdEJh
c2UoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAgIHN0YWNrLT5wb3BGdW5jdGlvblJlZ2lzdGVy
RmlsZSgpOwogICAgIHJldHVybiByZXN1bHQ7ICAgIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3Byb3BlcnR5X3Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfc2xvdC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9w
ZXJ0eV9zbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvLyAtKi0gYy1iYXNp
Yy1vZmZzZXQ6IDQgLSotCiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0zOCwyNCArMzgsNDIgQEAgc3RydWN0IEhhc2hFbnRyeTsKIAogY2xhc3MgUHJvcGVydHlT
bG90IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTVmFsdWUqICgqR2V0VmFsdWVGdW5jKShFeGVj
U3RhdGUqLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB0eXBlZGVmIEpTVmFsdWUqICgqR2V0VmFsdWVOdW1lcmlj
RnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRl
eCwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgUHJvcGVydHlTbG90KCkKKyAgICB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICBtX2dldFZhbHVlID0gMDsKKyAgICAgICAgY2xlYXJCYXNlKCk7
CisjZW5kaWYKKyAgICB9CiAKLSAgICBKU1ZhbHVlKiBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdAorICAgIFByb3BlcnR5U2xvdChKU0NlbGwqIGJhc2UpCisgICAgICAgIDogbV9zbG90
QmFzZShiYXNlKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fZ2V0VmFsdWUgPSAw
OworI2VuZGlmCisgICAgfQorCisgICAgdHlwZWRlZiBKU1ZhbHVlKiAoKkdldFZhbHVlRnVuYyko
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAg
IHR5cGVkZWYgSlNWYWx1ZSogKCpHZXRWYWx1ZU51bWVyaWNGdW5jKShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBpbmRleCwgY29uc3QgUHJvcGVydHlTbG90Jik7CisKKyAgICBKU1ZhbHVlKiBnZXRWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QK
ICAgICB7IAorICAgICAgICBBU1NFUlQobV9nZXRWYWx1ZSk7CiAgICAgICAgIGlmIChtX2dldFZh
bHVlID09IEtKU19WQUxVRV9TTE9UX01BUktFUikKICAgICAgICAgICAgIHJldHVybiAqbV9kYXRh
LnZhbHVlU2xvdDsKICAgICAgICAgQVNTRVJUKG1fZ2V0VmFsdWUgIT0gS0pTX05VTUVSSUNfUFJP
UEVSVFlfTkFNRV9TTE9UX01BUktFUik7Ci0gICAgICAgIHJldHVybiBtX2dldFZhbHVlKGV4ZWMs
IG9yaWdpbmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsICp0aGlzKTsgCisgICAgICAgIHJldHVybiBt
X2dldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSwgKnRoaXMpOyAKICAgICB9CiAKLSAgICBKU1Zh
bHVlKiBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
dW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogICAgIHsgCisgICAgICAg
IEFTU0VSVChtX2dldFZhbHVlKTsKICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gS0pTX1ZBTFVF
X1NMT1RfTUFSS0VSKQogICAgICAgICAgICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwogICAg
ICAgICBpZiAobV9nZXRWYWx1ZSA9PSBLSlNfTlVNRVJJQ19QUk9QRVJUWV9OQU1FX1NMT1RfTUFS
S0VSKQotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5udW1lcmljRnVuYyhleGVjLCBvcmlnaW5h
bE9iamVjdCwgcHJvcGVydHlOYW1lLCAqdGhpcyk7Ci0gICAgICAgIHJldHVybiBtX2dldFZhbHVl
KGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0
aGlzKTsgCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLm51bWVyaWNGdW5jKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgKnRoaXMpOworICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBJZGVudGlm
aWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0aGlzKTsgCiAgICAgfQogCiAgICAgdm9pZCBwdXRW
YWx1ZShKU1ZhbHVlKiB2YWx1ZSkKQEAgLTY0LDc2ICs4Miw5MSBAQCBwdWJsaWM6CiAgICAgICAg
ICptX2RhdGEudmFsdWVTbG90ID0gdmFsdWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0VmFs
dWVTbG90KEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSoqIHZhbHVlU2xvdCkgCisgICAgdm9p
ZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZSoqIHZhbHVlU2xvdCkgCiAgICAgeworICAgICAgICBBU1NF
UlQodmFsdWVTbG90KTsKICAgICAgICAgbV9nZXRWYWx1ZSA9IEtKU19WQUxVRV9TTE9UX01BUktF
UjsKLSAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBjbGVhckJhc2UoKTsK
ICAgICAgICAgbV9kYXRhLnZhbHVlU2xvdCA9IHZhbHVlU2xvdDsKICAgICB9CiAKLSAgICB2b2lk
IHNldFN0YXRpY0VudHJ5KEpTT2JqZWN0KiBzbG90QmFzZSwgY29uc3QgSGFzaEVudHJ5KiBzdGF0
aWNFbnRyeSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgIHZvaWQgc2V0U3RhdGljRW50cnko
SlNDZWxsKiBzbG90QmFzZSwgY29uc3QgSGFzaEVudHJ5KiBzdGF0aWNFbnRyeSwgR2V0VmFsdWVG
dW5jIGdldFZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRpY0VudHJ5KTsKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKICAgICAgICAg
bV9nZXRWYWx1ZSA9IGdldFZhbHVlOwogICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CiAg
ICAgICAgIG1fZGF0YS5zdGF0aWNFbnRyeSA9IHN0YXRpY0VudHJ5OwogICAgIH0KIAotICAgIHZv
aWQgc2V0Q3VzdG9tKEpTT2JqZWN0KiBzbG90QmFzZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQor
ICAgIHZvaWQgc2V0Q3VzdG9tKEpTQ2VsbCogc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1
ZSkKICAgICB7CisgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAgIEFTU0VSVChnZXRW
YWx1ZSk7CiAgICAgICAgIG1fZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKICAgICAgICAgbV9zbG90QmFz
ZSA9IHNsb3RCYXNlOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q3VzdG9tSW5kZXgoSlNPYmplY3Qq
IHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgIHZv
aWQgc2V0Q3VzdG9tSW5kZXgoSlNDZWxsKiBzbG90QmFzZSwgdW5zaWduZWQgaW5kZXgsIEdldFZh
bHVlRnVuYyBnZXRWYWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAg
ICAgIEFTU0VSVChnZXRWYWx1ZSk7CiAgICAgICAgIG1fZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKICAg
ICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwogICAgICAgICBtX2RhdGEuaW5kZXggPSBpbmRl
eDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRDdXN0b21OdW1lcmljKEpTT2JqZWN0KiBzbG90
QmFzZSwgR2V0VmFsdWVOdW1lcmljRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldEN1c3RvbU51
bWVyaWMoSlNDZWxsKiBzbG90QmFzZSwgR2V0VmFsdWVOdW1lcmljRnVuYyBnZXRWYWx1ZSkKICAg
ICB7CisgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7
CiAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKICAgICAgICAgbV9nZXRWYWx1ZSA9IEtK
U19OVU1FUklDX1BST1BFUlRZX05BTUVfU0xPVF9NQVJLRVI7CiAgICAgICAgIG1fZGF0YS5udW1l
cmljRnVuYyA9IGdldFZhbHVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEdldHRlclNsb3Qo
SlNPYmplY3QqIHNsb3RCYXNlLCBKU09iamVjdCogZ2V0dGVyRnVuYykKKyAgICB2b2lkIHNldEdl
dHRlclNsb3QoSlNPYmplY3QqIGdldHRlckZ1bmMpCiAgICAgeworICAgICAgICBBU1NFUlQobV9z
bG90QmFzZSk7CisgICAgICAgIEFTU0VSVChnZXR0ZXJGdW5jKTsKICAgICAgICAgbV9nZXRWYWx1
ZSA9IGZ1bmN0aW9uR2V0dGVyOwotICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CiAgICAg
ICAgIG1fZGF0YS5nZXR0ZXJGdW5jID0gZ2V0dGVyRnVuYzsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBzZXRVbmRlZmluZWQoSlNPYmplY3QgKnNsb3RCYXNlKQorICAgIHZvaWQgc2V0VW5kZWZpbmVk
KCkKICAgICB7Ci0gICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKKyAgICAgICAgY2xlYXJC
YXNlKCk7CiAgICAgICAgIG1fZ2V0VmFsdWUgPSB1bmRlZmluZWRHZXR0ZXI7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRVbmdldHRhYmxlKEpTT2JqZWN0KiBzbG90QmFzZSkgLy8gVXNlZCB0byBzaWdu
YWwgdGhhdCB5b3UgaGF2ZSBhIHByb3BlcnR5LCBidXQgdHJ5aW5nIHRvIGdldCBpdCBhdCB0aGlz
IHRpbWUgaXMgYW4gZXJyb3IuCisgICAgSlNPYmplY3QqIHNsb3RCYXNlKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHNldEJhc2UoSlNDZWxsKiBiYXNlKQogICAgIHsKLSAgICAgICAgbV9zbG90QmFzZSA9
IHNsb3RCYXNlOwotICAgICAgICBtX2dldFZhbHVlID0gdW5nZXR0YWJsZUdldHRlcjsKKyAgICAg
ICAgQVNTRVJUKG1fc2xvdEJhc2UpOworICAgICAgICBBU1NFUlQoYmFzZSk7CisgICAgICAgIG1f
c2xvdEJhc2UgPSBiYXNlOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiBzbG90QmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2xvdEJhc2U7IH0KKyAgICB2b2lkIGNsZWFyQmFzZSgpCisgICAgeworI2lm
bmRlZiBOREVCVUcKKyAgICAgICAgbV9zbG90QmFzZSA9IDA7CisjZW5kaWYKKyAgICB9CiAKICAg
ICBjb25zdCBIYXNoRW50cnkqIHN0YXRpY0VudHJ5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnN0
YXRpY0VudHJ5OyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
aW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSogdW5kZWZpbmVkR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiB1bmdldHRhYmxlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSogdW5kZWZpbmVkR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogdW5nZXR0YWJsZUdldHRlcihFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIEpTVmFsdWUqIGZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAKICAgICBHZXRWYWx1ZUZ1bmMgbV9nZXRWYWx1
ZTsKIAotICAgIEpTT2JqZWN0KiBtX3Nsb3RCYXNlOworICAgIEpTQ2VsbCogbV9zbG90QmFzZTsK
ICAgICB1bmlvbiB7CiAgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXJGdW5jOwogICAgICAgICBKU1Zh
bHVlKiogdmFsdWVTbG90OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAko
cmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDE3ICs1OCwxNyBAQCBTdHJpbmdJbnN0YW5jZTo6U3RyaW5n
SW5zdGFuY2UoSlNPYmplY3QgCiAgIHNldEludGVybmFsVmFsdWUoanNTdHJpbmcoc3RyaW5nKSk7
CiB9CiAKLUpTVmFsdWUgKlN0cmluZ0luc3RhbmNlOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KQor
SlNWYWx1ZSAqU3RyaW5nSW5zdGFuY2U6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KQogewogICAgIHJldHVybiBqc051
bWJlcihzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVy
bmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCkpOwogfQogCi1KU1ZhbHVlKiBTdHJpbmdJbnN0YW5j
ZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogU3RyaW5nSW5zdGFuY2U6OmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNl
Kj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnN1YnN0cihzbG90
LmluZGV4KCksIDEpKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIHN0cmluZ0luc3RhbmNlTnVtZXJp
Y1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5kZXgsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3N0YXRpYyBKU1ZhbHVlKiBzdHJpbmdJbnN0YW5jZU51
bWVyaWNQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJp
bmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5z
dWJzdHIoaW5kZXgsIDEpKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAko
cmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBwcml2YXRl
OgogICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
LCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVj
dCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgfTsKIAog
ICAvLyBXZWJDb3JlIHVzZXMgdGhpcyB0byBtYWtlIHN0eWxlLmZpbHRlciB1bmRldGVjdGFibGUK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL3ZhbHVlLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvdmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDU5IEBAIENvbnN0
cnVjdFR5cGUgSlNDZWxsOjpnZXRDb25zdHJ1Y3REYXRhKEMKICAgICByZXR1cm4gQ29uc3RydWN0
VHlwZU5vbmU7CiB9CiAKK2Jvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgLy8gVGhpcyBpcyBub3QgYSBnZW5lcmFsIHB1cnBvc2UgaW1wbGVtZW50YXRpb24g
b2YgZ2V0T3duUHJvcGVydHlTbG90LgorICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBi
eSBKU1ZhbHVlOjpnZXQuCisgICAgLy8gSXQgY2FsbHMgZ2V0UHJvcGVydHlTbG90LCBub3QgZ2V0
T3duUHJvcGVydHlTbG90LgorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b09iamVjdChleGVjKTsK
KyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHNsb3Qu
c2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBzbG90LnNl
dEJhc2Uob2JqZWN0KTsKKyAgICBpZiAoIW9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIC8v
IFRoaXMgaXMgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIGltcGxlbWVudGF0aW9uIG9mIGdldE93blBy
b3BlcnR5U2xvdC4KKyAgICAvLyBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgSlNWYWx1ZTo6
Z2V0LgorICAgIC8vIEl0IGNhbGxzIGdldFByb3BlcnR5U2xvdCwgbm90IGdldE93blByb3BlcnR5
U2xvdC4KKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9PYmplY3QoZXhlYyk7CisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkgeworICAgICAgICBzbG90LnNldFVuZGVmaW5l
ZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgc2xvdC5zZXRCYXNlKG9iamVj
dCk7CisgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBz
bG90KSkKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBKU0NlbGw6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50aWZpZXIsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b09i
amVjdChleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
ICAgICByZXR1cm47CisgICAgb2JqZWN0LT5wdXQoZXhlYywgaWRlbnRpZmllciwgdmFsdWUpOwor
fQorCit2b2lkIEpTQ2VsbDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmll
ciwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvT2JqZWN0KGV4
ZWMpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBvYmplY3QtPnB1dChleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSk7Cit9CisKK0pT
T2JqZWN0KiBKU0NlbGw6OnRvVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRvT2JqZWN0KGV4ZWMpOworfQorCiBKU0NlbGwqIGpzU3RyaW5nKGNvbnN0IGNo
YXIqIHMpCiB7CiAgICAgcmV0dXJuIG5ldyBTdHJpbmdJbXAocyA/IHMgOiAiIik7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvdmFsdWUuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsMTAgQEAKIG5hbWVzcGFjZSBLSlMgewogCiBj
bGFzcyBFeGVjU3RhdGU7CitjbGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFz
cyBKU0NlbGw7CitjbGFzcyBQcm9wZXJ0eVNsb3Q7CiAKIHN0cnVjdCBDbGFzc0luZm87CiBzdHJ1
Y3QgSW5zdHJ1Y3Rpb247CkBAIC05Nyw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgdG9O
dW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBKU1ZhbHVlKiB0b0pTTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0OyAvLyBGYXN0IHBhdGggZm9yIHdoZW4geW91IGV4cGVjdCB0aGF0IHRo
ZSB2YWx1ZSBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyLgogICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhl
Y1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBKU09iamVjdCAqdG9PYmplY3QoRXhlY1N0YXRlICpl
eGVjKSBjb25zdDsKKyAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25z
dDsKIAogICAgIC8vIEludGVnZXIgY29udmVyc2lvbnMuCiAgICAgZG91YmxlIHRvSW50ZWdlcihF
eGVjU3RhdGUqKSBjb25zdDsKQEAgLTEyMSwxNyArMTIzLDIyIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgaW50MzJfdCB0b0ludDMyU2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7CiAgICAgc3RhdGlj
IHVpbnQzMl90IHRvVUludDMyU2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7CiAKKyAgICAvLyBP
YmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgor
ICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpIGNvbnN0OworICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUpIGNvbnN0OworICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIEpTT2JqZWN0KiB0b1RoaXNPYmplY3Qo
RXhlY1N0YXRlKikgY29uc3Q7CisKIHByaXZhdGU6CisgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBib29sIGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGludDMyX3QgdG9JbnQzMlNsb3dDYXNlKEV4ZWNT
dGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKICAgICB1aW50MzJfdCB0b1VJbnQzMlNsb3dDYXNlKEV4
ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKIAogICAgIC8vIEltcGxlbWVudGF0aW9uIGRldGFp
bHMuCiAgICAgSlNDZWxsICphc0NlbGwoKTsKICAgICBjb25zdCBKU0NlbGwgKmFzQ2VsbCgpIGNv
bnN0OwotCi0gICAgLy8gR2l2ZSBhIGNvbXBpbGUgdGltZSBlcnJvciBpZiB3ZSB0cnkgdG8gY29w
eSBvbmUgb2YgdGhlc2UuCi0gICAgSlNWYWx1ZShjb25zdCBKU1ZhbHVlJik7Ci0gICAgSlNWYWx1
ZSYgb3BlcmF0b3I9KGNvbnN0IEpTVmFsdWUmKTsKIH07CiAKIGNsYXNzIEpTQ2VsbCA6IHB1Ymxp
YyBKU1ZhbHVlIHsKQEAgLTE4MCw2ICsxODcsMTUgQEAgcHVibGljOgogICAgIHZvaWQgKm9wZXJh
dG9yIG5ldyhzaXplX3QpOwogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAgICAgYm9vbCBtYXJr
ZWQoKSBjb25zdDsKKworICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVj
dCBvcGVyYXRpb24gaW5jbHVkZWQuCisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAg
IHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKKworICAg
IC8vIEJhc2UgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3Igbm9uLW9iamVjdCBjbGFzc2VzIGltcGxl
bWVudHMgZ2V0UHJvcGVydHlTbG90LgorICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiB9OwogCiBjbGFzcyBOdW1iZXJJ
bXAgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTE5Niw3ICsyMTIsOCBAQCBwdWJsaWM6CiAgIHZpcnR1
YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3Q7CiAgIHZpcnR1YWwgVVN0
cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OwogICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OwotICAKKyAgICB2aXJ0dWFsIEpTT2Jq
ZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CisKICAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCBzaXplKQogICB7CiAjaWZkZWYgSkFWQVNDUklQVENPUkVfQlVJTERJTkdfQUxM
X0lOX09ORV9GSUxFCkBAIC01ODMsNiArNjAwLDEzIEBAIGlubGluZSB1aW50MzJfdCBKU1ZhbHVl
Ojp0b1VJbnQzMihFeGVjU3QKICAgICByZXR1cm4gdG9VSW50MzJTbG93Q2FzZShleGVjLCBvayk7
CiB9CiAKK2lubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK3sKKyAgICBpZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KHRoaXMpKSkKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjp0b09iamVjdCh0aGlzLCBleGVj
KTsKKyAgICByZXR1cm4gYXNDZWxsKCktPnRvVGhpc09iamVjdChleGVjKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UKIAogI2VuZGlmIC8vIEtKU19WQUxVRV9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS93
dGYvQWx3YXlzSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5
c0lubGluZS5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJ
bmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM3LDMgKzM3LDExIEBACiAjZGVmaW5lIE5FVkVS
X0lOTElORQogI2VuZGlmCiAjZW5kaWYKKworI2lmbmRlZiBVTkxJS0VMWQorI2lmIENPTVBJTEVS
KEdDQykKKyNkZWZpbmUgVU5MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCgoeCksIDApCisjZWxz
ZQorI2RlZmluZSBVTkxJS0VMWSh4KSAoeCkKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBKYXZhU2Ny
aXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDA4LTA1LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICAtIHVwZGF0ZSBmb3IgSmF2YVNjcmlwdENvcmUgY2hhbmdlcyBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjY5CisgICAgICAg
ICAgc3BlZWQgdXAgU3VuU3BpZGVyIGJ5IGVsaW1pbmF0aW5nIHRoZSB0b09iamVjdCBjYWxsIGZv
ciBtb3N0IGdldC9wdXQvZGVsZXRlCisKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmNwcDoKKyAg
ICAgICAgKFVzZXJPYmplY3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIpOiBSZW1vdmVkIG9yaWdpbmFs
T2JqZWN0IGFyZ3VtZW50LgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDogRGl0dG8uCisKIDIw
MDgtMDUtMTAgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAkocmV2aXNp
b24gMzQxNTEpCisrKyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgVXNlck9iamVjdEltcDo6Z2V0UHJvcGVydHlO
YW1lcyhFeGUKICAgICBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5h
bWVzKTsKIH0KIAotSlNWYWx1ZSAqVXNlck9iamVjdEltcDo6dXNlck9iamVjdEdldHRlcihFeGVj
U3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBVc2VyT2JqZWN0SW1wOjp1c2VyT2JqZWN0
R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFVzZXJPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0
aWNfY2FzdDxVc2VyT2JqZWN0SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgLy8gZ2V0T3du
UHJvcGVydHlTbG90IHNob3VsZCBoYXZlIGd1YXJkZWQgYWdhaW5zdCBhIG51bGwgZkpTVXNlck9i
amVjdC4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2
YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCiAgICAgSlNVc2VyT2JqZWN0
ICpHZXRKU1VzZXJPYmplY3QoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1
ZSAqdXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlKiB1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBKU1Vz
ZXJPYmplY3QqIGZKU1VzZXJPYmplY3Q7CiB9OwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAorMjAwOC0wNS0yNyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkyNjkKKyAgICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIgYnkgZWxpbWluYXRp
bmcgdGhlIHRvT2JqZWN0IGNhbGwgZm9yIG1vc3QgZ2V0L3B1dC9kZWxldGUKKworICAgICAgICBF
bGltaW5hdGUgdGhlIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50IGZyb20gcHJvcGVydHkgZ2V0dGVy
IGZ1bmN0aW9uczsgaXQncyBubyBsb25nZXIKKyAgICAgICAgYXZhaWxhYmxlIGFuZCB3YXMgdXNl
ZCBvbmx5IGZvciBKYXZhU2NyaXB0IGZ1bmN0aW9uLWJhc2VkIGdldHRlcnMgYW5kIHNldHRlcnMu
CisKKyAgICAgICAgVXBkYXRlZCBjYWxsZXJzIG9mIFByb3BlcnR5U2xvdDo6c2V0VW5kZWZpbmVk
LiBJdCBubyBsb25nZXIgdGFrZXMgYSBiYXNlIGFyZ3VtZW50LgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZhbHVlR2V0dGVyKTogUmVtb3ZlZCB0
aGUgb3JpZ2luYWxPYmplY3QKKyAgICAgICAgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3duUHJvcGVydHlTbG90KTogQ2hhbmdlZCB0
byBpbml0aWFsaXplIHRoZQorICAgICAgICBQcm9wZXJ0eVNsb3Qgd2l0aCB0aGUgb3JpZ2luYWwg
b2JqZWN0IC0tIHRoaXMgaXMgYSBuZXcgcmVxdWlyZW1lbnQuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52
YXNQaXhlbEFycmF5OjppbmRleEdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y2hpbGRG
cmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmN1c3RvbUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxB
cHBsZXRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246
Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TEZyYW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNI
VE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPYmpl
Y3RFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpjdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05h
bWVkTm9kZU1hcDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOYW1lZE5v
ZGVzQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0
aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0Nv
bGxlY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQ
bHVnaW5BcnJheTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW46Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
U3RvcmFnZTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hlZXRMaXN0OjpuYW1l
R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6b2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMva2pzX2JpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMva2pz
X2h0bWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToK
KyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChPYmpjRmFs
bGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIpOgor
ICAgICAgICAoUnVudGltZUFycmF5OjppbmRleEdldHRlcik6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAg
ICAgICAoUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVu
dGltZV9tZXRob2QuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAg
ICAgICAoUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplY3RHZXR0ZXIpOgorICAgICAgICAo
UnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIpOgorICAgICAgICAoUnVudGltZU9iamVjdElt
cDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKyAg
ICAgICAgUmVtb3ZlZCBvcmlnaW5hbE9iamVjdCBhcmd1bWVudHMgZnJvbSBnZXR0ZXIgZm5jdGlv
bnMgYW5kIGJhc2UgYXJndW1lbnRzIGZyb20KKyAgICAgICAgY2FsbHMgdG8gc2V0VW5kZWZpbmVk
LgorCiAyMDA4LTA1LTI3ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29t
PgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeC4gQWNjaWRlbnRseSBsZWZ0IGEgY291cGxlIGZpeGVz
IG91dCBvZiB0aGUgcHJldmlvdXMgY29tbWl0LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMyw4ICsxMjMsNyBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6Y2FuR2V0SXRlbXNGCiAKIC8vIEZJWE1FOiBZb3UgY2FuIGdldCB0aGVzZSBwcm9wZXJ0
aWVzLCBhbmQgc2V0IHRoZW0gKHNlZSBjdXN0b21QdXQgYmVsb3cpLAogLy8gYnV0IHlvdSBzaG91
bGQgYWxzbyBiZSBhYmxlIHRvIGVudW1lcmF0ZSB0aGVtLgotSlNWYWx1ZSogSlNDU1NTdHlsZURl
Y2xhcmF0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFs
T2JqZWN0LAotICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDU1NTdHlsZURlY2xhcmF0aW9uKiB0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8SlNDU1NTdHlsZURlY2xhcmF0aW9uKj4oc2xvdC5zbG90QmFzZSgpKTsK
IApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UGl4ZWxBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU0Nh
bnZhc1BpeGVsQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWUqIEpTQ2FudmFzUGl4ZWxBcnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBDYW52YXNQaXhlbEFycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQ2FudmFz
UGl4ZWxBcnJheSo+KHNsb3Quc2xvdEJhc2UoKSktPmltcGwoKTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IHNsb3QuaW5kZXgoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsMTcgKzUxMywxNyBAQCBKU1ZhbHVlICpK
U0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVyCiAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dCYXNlOjpjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6Y2hpbGRGcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRp
Y19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHNsb3Quc2xvdEJhc2UoKSktPmltcGwoKS0+ZnJhbWUo
KS0+dHJlZSgpLT5jaGlsZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSktPmRvbVdpbmRvdygp
KTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dCYXNlOjppbmRleEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHNsb3Quc2xv
dEJhc2UoKSktPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChzbG90LmluZGV4KCkpLT5k
b21XaW5kb3coKSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUq
IEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNl
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBEb2N1bWVudCogZG9jID0gdGhpc09iai0+aW1wbCgp
LT5mcmFtZSgpLT5kb2N1bWVudCgpOwpAQCAtNTU5LDcgKzU1OSw3IEBAIGJvb2wgSlNET01XaW5k
b3dCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAgICAgICAgIGlmIChhbGxvd3NBY2Nlc3NG
cm9tKGV4ZWMpKQogICAgICAgICAgICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50
cnksIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldFVu
ZGVmaW5lZCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNsb3Quc2V0U3RhdGljRW50
cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPEpTRE9NV2luZG93QmFzZT4pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MSw3ICs1NzEsNyBAQCBib29sIEpTRE9NV2luZG93QmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgaWYgKHByb3RvLT5pc09iamVjdCgpKSB7CiAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgIGlmICghYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKLSAgICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC01ODgsNyArNTg4LDcgQEAgYm9vbCBKU0RPTVdpbmRv
d0Jhc2U6OmdldE93blByb3BlcnR5U2xvdAogICAgIH0KIAogICAgIGlmICghYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkgewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICAgICAg
c2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDM0MTUxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDkgKzE0MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgS0pTOjpKU1ZhbHVl
KiBnZXRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSosIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBLSlM6OkpTVmFsdWUqIGZ1bmN0aW9uKTsKIAot
ICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBjaGlsZEZyYW1lR2V0dGVyKEtKUzo6RXhlY1N0
YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGluZGV4R2V0dGVy
KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYs
IGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUq
IG5hbWVkSXRlbUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBL
SlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0
aWMgS0pTOjpKU1ZhbHVlKiBjaGlsZEZyYW1lR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29uc3Qg
S0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3Rh
dGljIEtKUzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMg
S0pTOjpKU1ZhbHVlKiBuYW1lZEl0ZW1HZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHZvaWQg
Y2xlYXJIZWxwZXJPYmplY3RQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHZvaWQgY2xlYXJBbGxUaW1l
b3V0cygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAkocmV2
aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTRE9N
V2luZG93OjpjdXN0b21HZQogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIG1l
c3NhZ2UgaGVyZSB0aGF0IGV4cGxhaW5zIHdoeSB0aGUgcHJvcGVydHkgYWNjZXNzL2Z1bmN0aW9u
IGNhbGwgd2FzCiAgICAgICAgIC8vIG5vdCBhbGxvd2VkLiAKLSAgICAgICAgc2xvdC5zZXRVbmRl
ZmluZWQodGhpcyk7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDkgKzU4LDkgQEAgYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjYW5HZXRJdGVtc0Zvcgog
ICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwogfQog
Ci1KU1ZhbHVlKiBKU0hUTUxBcHBsZXRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRNTEFwcGxldEVsZW1l
bnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gcnVudGltZU9i
amVjdEdldHRlcihleGVjLCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAg
ICByZXR1cm4gcnVudGltZU9iamVjdEdldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw3IEBAIGJvb2wgSlNIVE1MQ29sbGVjdGlvbjo6Y2FuR2V0SXRlbXNGb3JO
YW0KICAgICByZXR1cm4gIWdldE5hbWVkSXRlbXMoZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1l
KS0+aXNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MQ29sbGVjdGlvbjo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
KiBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
SlNIVE1MQ29sbGVjdGlvbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTENvbGxlY3Rpb24q
PihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXNP
YmotPmltcGwoKSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIGJvb2wgSlNIVE1MRG9jdW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZSgKICAgICBy
ZXR1cm4gYXRvbWljUHJvcGVydHlOYW1lICYmIChkb2N1bWVudC0+aGFzTmFtZWRJdGVtKGF0b21p
Y1Byb3BlcnR5TmFtZSkgfHwgZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKGF0b21pY1Byb3Bl
cnR5TmFtZSkpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU0hUTUxE
b2N1bWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTSFRNTERvY3Vt
ZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRG9jdW1lbnQqPihzbG90LnNsb3RCYXNl
KCkpOwogICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnQqPih0aGlzT2JqLT5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxF
bWJlZEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9y
TgogICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwog
fQogCi1KU1ZhbHVlKiBKU0hUTUxFbWJlZEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNIVE1MRW1iZWRFbGVt
ZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIHJ1bnRpbWVP
YmplY3RHZXR0ZXIoZXhlYywgb3JpZ2luYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgYm9vbCBKU0hUTUxGb3JtRWxlbWVudDo6Y2FuR2V0SXRlbXNG
b3JOYQogICAgIHJldHVybiBuYW1lZEl0ZW1zLnNpemUoKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1M
Rm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSogSlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQq
PihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oc2xvdC5zbG90QmFzZSgpKS0+aW1wbCgpKTsK
ICAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0
RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIGJvb2wgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpjYW5HZXRJdGVtc0YKICAgICBy
ZXR1cm4gZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpOwogfQogCi1KU1ZhbHVl
KiBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNIVE1MRnJhbWVTZXRFbGVtZW50Ojpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRWxlbWVudCogdGhpc09i
aiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPih0aGlzT2JqLT5p
bXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4
LDkgQEAgYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpjYW5HZXRJdGVtc0ZvcgogICAgIHJldHVy
biBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwogfQogCi1KU1ZhbHVl
KiBKU0hUTUxPYmplY3RFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gcnVudGltZU9iamVjdEdldHRl
cihleGVjLCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4g
cnVudGltZU9iamVjdEdldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0
b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBib29sIEpTSGlzdG9y
eTo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90CiAgICAgfQogCiAgICAgcHJpbnRFcnJvck1lc3Nh
Z2VGb3JGcmFtZShpbXBsKCktPmZyYW1lKCksIG1lc3NhZ2UpOwotICAgIHNsb3Quc2V0VW5kZWZp
bmVkKHRoaXMpOworICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tR2V0
T3duUHJvcGVydHlTbG8KIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSkgewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICAg
ICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC02OCw3ICs2OCw3IEBAIGJvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG8K
ICAgICAvLyBzdWNoIGNhc2VzIHdoZW4gbm9ybWFsbHkgdGhlIHN0cmluZyBmb3JtIG9mIExvY2F0
aW9uIHdvdWxkIGJlIHRoZSBVUkwuCiAKICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKGZy
YW1lLCBtZXNzYWdlKTsKLSAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICBzbG90LnNl
dFVuZGVmaW5lZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQCBib29sIEpTTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNG
b3JOYW1lCiAgICAgcmV0dXJuIG1pbWVUeXBlQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9w
ZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNNaW1l
VHlwZUFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNNaW1lVHlw
ZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFycmF5Kj4oc2xvdC5zbG90
QmFzZSgpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0
ZXIocHJvcGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rl
TWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWRO
b2RlTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBib29sIEpTTmFtZWROb2RlTWFwOjpjYW5HZXRJdGVtc0Zvck5hbWUoCiAgICAgcmV0dXJuIGlt
cGwtPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU05hbWVkTm9k
ZU1hcDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlKiBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTTmFtZWROb2RlTWFwKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5v
ZGVNYXAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmot
PmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAzNDE1MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEzICs0NiwxMyBAQCBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpKU05h
bWVkTm9kZXNDb2xsCiB7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBKU05hbWVkTm9kZXNDb2xsZWN0aW9uKiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8SlNOYW1lZE5vZGVzQ29sbGVjdGlvbio+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJu
IGpzTnVtYmVyKHRoaXNPYmotPm1fbm9kZXMuc2l6ZSgpKTsKIH0KIAotSlNWYWx1ZSogSlNOYW1l
ZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05hbWVkTm9kZXNDb2xsZWN0aW9uICp0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5vZGVzQ29sbGVjdGlvbio+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9ub2Rlc1tzbG90LmluZGV4
KCldLmdldCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29s
bGVjdGlvbi5oCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1l
ZE5vZGVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIHNfaW5m
bzsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGxlbmd0aEdl
dHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZp
ZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgS0pTOjpKU1Zh
bHVlKiBpbmRleEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBL
SlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0
aWMgS0pTOjpKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMg
S0pTOjpKU1ZhbHVlKiBpbmRleEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRl
bnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG1fbm9kZXM7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBA
IGJvb2wgSlNOb2RlTGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEtKUzoKICAgICByZXR1cm4gaW1w
bC0+aXRlbVdpdGhOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUtKUzo6SlNWYWx1ZSogSlNOb2Rl
TGlzdDo6bmFtZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU09iamVjdCogb3Jp
Z2luYWxPYmplY3QsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBL
SlM6OlByb3BlcnR5U2xvdCYgc2xvdCkKK0tKUzo6SlNWYWx1ZSogSlNOb2RlTGlzdDo6bmFtZUdl
dHRlcihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTTm9kZUxpc3Qq
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05vZGVMaXN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAg
ICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPml0ZW1XaXRoTmFtZShwcm9wZXJ0
eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9t
LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJy
YXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGJvb2wgSlNQbHVn
aW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEUKICAgICByZXR1cm4gcGx1Z2luQXJyYXktPmNh
bkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU1BsdWdpbkFy
cmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUqIEpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBKU1BsdWdpbkFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW5BcnJh
eSo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1w
bCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BsdWdpbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BsdWdpbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1BsdWdpbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgYm9v
bCBKU1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdAogICAgIHJldHVybiBwbHVnaW4t
PmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU1BsdWdp
bjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlKiBKU1BsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTUGx1Z2luKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW4qPihzbG90LnNsb3RCYXNl
KCkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihw
cm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBKU1F1YXJhbnRpbmUK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqPihvYmpl
Y3QpOwogfQogCi1KU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FjaGVkVmFs
dWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
OmNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNWYWx1ZSogdiA9IHNsb3Quc2xvdEJhc2UoKTsK
ICAgICBBU1NFUlQodik7CkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyOjptYXJrKCkKIGJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIWFsbG93c0dldFByb3BlcnR5
KCkpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAgICAgIHNsb3Quc2V0
VW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFByb3BlcnR5
U2xvdCB1bndyYXBwZWRTbG90OworICAgIFByb3BlcnR5U2xvdCB1bndyYXBwZWRTbG90KG1fdW53
cmFwcGVkT2JqZWN0KTsKICAgICBib29sIHJlc3VsdCA9IG1fdW53cmFwcGVkT2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eVNsb3QodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIsIHVud3JhcHBl
ZFNsb3QpOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgSlNWYWx1ZSogdW53cmFwcGVkVmFs
dWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBtX3Vud3Jh
cHBlZE9iamVjdCwgaWRlbnRpZmllcik7CisgICAgICAgIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVl
ID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmll
cik7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4od3JhcE91
dGdvaW5nVmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFZhbHVlKSksIGNhY2hl
ZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKQEAgLTEyMiwxNCArMTIyLDE0IEBAIGJvb2wgSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXI6OmdldE93blAKIGJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXI6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIWFsbG93c0dldFByb3BlcnR5
KCkpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAgICAgIHNsb3Quc2V0
VW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFByb3BlcnR5
U2xvdCB1bndyYXBwZWRTbG90OworICAgIFByb3BlcnR5U2xvdCB1bndyYXBwZWRTbG90KG1fdW53
cmFwcGVkT2JqZWN0KTsKICAgICBib29sIHJlc3VsdCA9IG1fdW53cmFwcGVkT2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eVNsb3QodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIsIHVud3JhcHBl
ZFNsb3QpOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgSlNWYWx1ZSogdW53cmFwcGVkVmFs
dWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBtX3Vud3Jh
cHBlZE9iamVjdCwgaWRlbnRpZmllcik7CisgICAgICAgIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVl
ID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmll
cik7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4od3JhcE91
dGdvaW5nVmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFZhbHVlKSksIGNhY2hl
ZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBL
SlM6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1ZhbHVlKEtKUzo6RXhlY1N0YXRlKiB1bndyYXBwZWRF
eGVjLCBLSlM6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBjYWNoZWRWYWx1ZUdldHRlcihLSlM6
OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25z
dCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBjYWNo
ZWRWYWx1ZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNv
bnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgdm9pZCB0cmFuc2ZlckV4Y2VwdGlv
blRvRXhlY1N0YXRlKEtKUzo6RXhlY1N0YXRlKikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIGJvb2wgSlNTdG9yYWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1MKICAgICByZXR1
cm4gaW1wbC0+Y29udGFpbnMocHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNTdG9yYWdl
OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWUqIEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTU3RvcmFnZSogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3RvcmFnZSo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKHRoaXNPYmotPmltcGwoKS0+Z2V0SXRl
bShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxl
U2hlZXRMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
MyBAQAotCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCkBAIC0zMiwxNCArMzEsMTYgQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0Lmgi
CiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKIAordXNpbmcgbmFtZXNwYWNlIEtKUzsKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTU3R5bGVTaGVldExpc3Q6OmNhbkdldEl0ZW1z
Rm9yTmFtZShLSlM6OkV4ZWNTdGF0ZSosIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitib29sIEpTU3R5bGVTaGVldExp
c3Q6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVldExpc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4g
c3R5bGVTaGVldExpc3QtPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwogfQogCi1LSlM6OkpT
VmFsdWUqIEpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqIGV4ZWMs
IEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgS0pTOjpQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU1N0eWxlU2hlZXRMaXN0Ojpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTdHlsZVNoZWV0TGlzdCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEpTU3R5bGVTaGVldExpc3QqPihzbG90LnNsb3RCYXNlKCkpOwog
ICAgIEhUTUxTdHlsZUVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzT2JqLT5pbXBsKCktPmdldE5hbWVk
SXRlbShwcm9wZXJ0eU5hbWUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAJ
KHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNCwxMyArMzM0LDEzIEBAIHZvaWQgcHJpbnRFcnJvck1lc3Nh
Z2VGb3JGcmFtZShGcmFtZSogZnIKICAgICAgICAgd2luZG93LT5wcmludEVycm9yTWVzc2FnZSht
ZXNzYWdlKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNGdW5j
dGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50
cnkgPSBzbG90LnN0YXRpY0VudHJ5KCk7CiAgICAgcmV0dXJuIG5ldyBQcm90b3R5cGVGdW5jdGlv
bihleGVjLCBlbnRyeS0+bGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvblZhbHVl
KTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKQorSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHBy
b3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOwogfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfYmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2JpbmRpbmcuaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19iaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw4ICsxNDIsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoS0pTOjpFeGVjU3Rh
dGUqLCBGcmFtZSopOwogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEtKUzo6RXhlY1N0
YXRlKiwgRnJhbWUqLCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgIHZvaWQgcHJpbnRFcnJvck1lc3Nh
Z2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgS0pTOjpKU1Zh
bHVlKiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6
OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEtK
Uzo6UHJvcGVydHlTbG90Jik7Ci0gICAgS0pTOjpKU1ZhbHVlKiBvYmplY3RUb1N0cmluZ0Z1bmN0
aW9uR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgIEtK
Uzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVy
dHlTbG90Jik7CisgICAgS0pTOjpKU1ZhbHVlKiBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVy
KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE0ICs1OCwxNCBA
QCBzdGF0aWMgSlNPYmplY3QqIGdldFJ1bnRpbWVPYmplY3QoRXhlY1N0CiAgICAgcmV0dXJuIDA7
CiB9CiAKLUpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxKU0hUTUxFbGVtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKICAgICBy
ZXR1cm4gZ2V0UnVudGltZU9iamVjdChleGVjLCBlbGVtZW50KTsKIH0KIAotSlNWYWx1ZSogcnVu
dGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxK
U0hUTUxFbGVtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19odG1sLmgJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfaHRtbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAvLyBSdW50aW1lIG9iamVjdCBzdXBwb3J0IGNvZGUgZm9yIEpTSFRNTEFw
cGxldEVsZW1lbnQsIEpTSFRNTEVtYmVkRWxlbWVudCBhbmQgSlNIVE1MT2JqZWN0RWxlbWVudC4K
ICAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSB0byBhIG1vcmUgYXBwcm9wcmlhdGUgcGxhY2UuCiAK
LSAgICBLSlM6OkpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBL
SlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICBLSlM6OkpTVmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihL
SlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBj
b25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgIEtKUzo6SlNWYWx1ZSogcnVudGltZU9iamVj
dEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtK
Uzo6UHJvcGVydHlTbG90Jik7CisgICAgS0pTOjpKU1ZhbHVlKiBydW50aW1lT2JqZWN0UHJvcGVy
dHlHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBL
SlM6OlByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blBy
b3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6
UHJvcGVydHlTbG90JiwgSlNIVE1MRWxlbWVudCosIEhUTUxFbGVtZW50Kik7CiAgICAgYm9vbCBy
dW50aW1lT2JqZWN0Q3VzdG9tUHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiwgS0pTOjpKU1ZhbHVlKiwgSFRNTEVsZW1lbnQqKTsKICAgICBib29sIHJ1bnRpbWVPYmpl
Y3RJbXBsZW1lbnRzQ2FsbChIVE1MRWxlbWVudCopOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTU3
Myw3ICs1NzMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgSW5kZXggZ2V0dGVyCiAg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhHZXR0ZXIi
fSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBLSlM6OkpTVmFs
dWUqIGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtK
Uzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBpbmRleEdldHRl
cihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKICAgICB9CiAKICAgICAjIEluZGV4IHNldHRlcgpAQCAtNTg0LDcg
KzU4NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJIYXNOYW1lR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgewogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShLSlM6OkV4ZWNTdGF0ZSosICRpbXBs
Q2xhc3NOYW1lKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJik7XG4iKTsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBuYW1lR2V0dGVyKEtKUzo6
RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0
IEtKUzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBuYW1lR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29u
c3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAg
IH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKQEAgLTEzMDcsNyArMTMw
Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0pIHsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbkpTVmFsdWUqICR7Y2xhc3NOYW1lfTo6aW5kZXhHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG5KU1ZhbHVlKiAke2NsYXNzTmFtZX06OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHNsb3Quc2xvdEJhc2UoKSk7XG4iKTsKICAgICAg
ICAgaWYgKEluZGV4R2V0dGVyUmV0dXJuc1N0cmluZ3MoJGltcGxDbGFzc05hbWUpKSB7CkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBA
IFJ1bnRpbWVBcnJheTo6UnVudGltZUFycmF5KEV4ZWNTdGF0ZSAqZXgKIHsKIH0KIAotSlNWYWx1
ZSAqUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUnVudGlt
ZUFycmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkgKnRoaXNPYmogPSBzdGF0
aWNfY2FzdDxSdW50aW1lQXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4ganNO
dW1iZXIodGhpc09iai0+Z2V0TGVuZ3RoKCkpOwogfQogCi1KU1ZhbHVlICpSdW50aW1lQXJyYXk6
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUnVudGltZUFycmF5OjppbmRl
eEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
UnVudGltZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRoaXNPYmotPmdl
dENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBzbG90LmluZGV4KCkpOwpJbmRleDogV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBK
U1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
SlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwogCiAgICAgT3duUHRyPEJpbmRpbmdzOjpBcnJheT4gX2FycmF5Owog
fTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysg
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIFJ1bnRpbWVNZXRob2Q6OlJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlICoKIHsKIH0K
IAotSlNWYWx1ZSAqUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWUgKlJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVNZXRob2QgKnRo
aXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKIAogICAgIE93blB0cjxCaW5kaW5nczo6TWV0aG9kTGlzdD4gX21ldGhv
ZExpc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMzQx
NTEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSdW50aW1lT2JqZWN0SW1wOjppbnZhbGlkYXRlKCkKICAg
ICBpbnN0YW5jZSA9IDA7CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNr
T2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIFJ1bnRp
bWVPYmplY3RJbXA6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgUnVudGltZU9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJ
bXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBSZWZQdHI8QmluZGluZ3M6Okluc3RhbmNlPiBp
bnN0YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtNzEsNyArNzEsNyBAQCBKU1ZhbHVlICpS
dW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsgICAgCiAgICAgUnVudGltZU9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRp
Y19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBSZWZQdHI8
QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtOTAs
NyArOTAsNyBAQCBKU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRlcihFCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIFJ1bnRpbWVPYmplY3RJ
bXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVPYmplY3RJ
bXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wICo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFuY2UgPSB0aGlzT2Jq
LT5pbnN0YW5jZTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24gMzQxNTEp
CisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw5ICs2Miw5IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgUnVudGltZU9iamVjdEltcCgp
OyAvLyBwcmV2ZW50IGRlZmF1bHQgY29uc3RydWN0aW9uCiAgICAgCi0gICAgc3RhdGljIEpTVmFs
dWUgKmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmZp
ZWxkR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKm1ldGhvZEdldHRlcihFeGVj
U3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpT
VmFsdWUqIGZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbWV0aG9kR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIFJlZlB0
cjxCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNlOwogfTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgT2JqY0Zh
bGxiYWNrT2JqZWN0SW1wOjpPYmpjRmFsbGJhY2tPYmplYwogYm9vbCBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIGtlZXAgdGhlIHByb3RvdHlwZSBmcm9tIGdl
dHRpbmcgY2FsbGVkIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UKLSAgICBzbG90LnNl
dFVuZGVmaW5lZCh0aGlzKTsKKyAgICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgIHJldHVybiB0
cnVlOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21366</attachid>
            <date>2008-05-27 12:27:38 -0700</date>
            <delta_ts>2008-06-02 21:30:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>GoodSpeedupPatch.txt</filename>
            <type>text/plain</type>
            <size>408957</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTUzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg1IEBACisyMDA4LTA1LTI3ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTI2OQorICAgICAgICAgIHNwZWVkIHVwIFN1blNwaWRlciBieSBlbGltaW5hdGluZyB0aGUg
dG9PYmplY3QgY2FsbCBmb3IgbW9zdCBnZXQvcHV0L2RlbGV0ZQorCisgICAgICAgIE1ha2VzIHN0
YW5kYWxvbmUgU3VuU3BpZGVyIDEuMDI1eCBhcyBmYXN0IGFzIGJlZm9yZS4KKworICAgICAgICBU
aGUgZ2V0T3duUHJvcGVydHlTbG90IHZpcnR1YWwgZnVuY3Rpb24gbm93IHRha2VzIGNhcmUgb2Yg
dGhlIHRvT2JqZWN0IGNhbGwKKyAgICAgICAgZm9yIGdldC4gU2ltaWxhcmx5LCB0aGUgcHV0IGFu
ZCBkZWxldGVQcm9wZXJ0eSBmdW5jdGlvbnMgZG8gdGhlIHNhbWUgZm9yIHRob3NlCisgICAgICAg
IG9wZXJhdGlvbnMuIFRvIGRvIHRoaXMsIHRoZSB2aXJ0dWFsIGZ1bmN0aW9ucyB3ZXJlIG1vdmVk
IGZyb20gdGhlIEpTT2JqZWN0IGNsYXNzCisgICAgICAgIHRvIHRoZSBKU0NlbGwgY2xhc3MuIEFs
c28sIHNpbmNlIHRoZSBjYWxsZXIgbm8gbG9uZ2VyIGtub3dzIHRoZSBpZGVudGl0eSBvZiB0aGUK
KyAgICAgICAgIm9yaWdpbmFsIG9iamVjdCIsIHdoaWNoIGlzIHVzZWQgYnkgSmF2YVNjcmlwdC1m
dW5jdGlvbiBiYXNlZCBnZXR0ZXJzLCBjaGFuZ2VkCisgICAgICAgIHRoZSBQcm9wZXJ0eVNsb3Qg
Y2xhc3Mgc28gdGhlIG9yaWdpbmFsIG9iamVjdCBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgc2xv
dAorICAgICAgICB3aGVuIGdldE93blByb3BlcnR5U2xvdCBpcyBjYWxsZWQsIGlmIHRoZSBjYWxs
ZXIgaW50ZW5kcyB0byBjYWxsIGdldFZhbHVlLgorCisgICAgICAgIFRoaXMgYWZmZWN0ZWQgdGhl
IG9sZCBpbnRlcnByZXRlciBjb2RlIGVub3VnaCB0aGF0IHRoZSBlYXNpZXN0IHRoaW5nIGZvciBt
ZQorICAgICAgICB3YXMgdG8ganVzdCBkZWxldGUgaXQuIFdoaWxlIEkgYW0gbm90IGNlcnRhaW4g
dGhlIG15c3RlcmlvdXMgc2xvd2Rvd24gaXMgbm90CisgICAgICAgIHN0aWxsIG9jY3VycmluZywg
dGhlIG5ldCBjaGFuZ2UgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IHNwZWVkdXAuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IFVwZGF0ZWQuCisKKyAgICAgICAgKiBWTS9NYWNo
aW5lLmNwcDogTW92ZWQgdGhlIFVOTElLRUxZIG1hY3JvIGludG8gQWx3YXlzSW5saW5lLmguCisg
ICAgICAgIChLSlM6OnJlc29sdmUpOiBTZXQgdXAgdGhlIG9yaWdpbmFsT2JqZWN0IGluIHRoZSBQ
cm9wZXJ0eVNsb3QgYmVmb3JlCisgICAgICAgIGNhbGxpbmcgZ2V0UHJvcGVydHlTbG90LiBBbHNv
IHJlbW92ZWQgdGhlIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50IGZyb20KKyAgICAgICAgZ2V0VmFs
dWUuCisgICAgICAgIChLSlM6OnJlc29sdmVfc2tpcCk6IERpdHRvLgorICAgICAgICAoS0pTOjpy
ZXNvbHZlQmFzZUFuZFByb3BlcnR5KTogRGl0dG8uCisgICAgICAgIChLSlM6OnJlc29sdmVCYXNl
QW5kRnVuYyk6IERpdHRvLgorICAgICAgICAoS0pTOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6
IFJlbW92ZWQgdGhlIHRvT2JqZWN0IGNhbGxzIGZyb20gdGhlIGdldCBhbmQKKyAgICAgICAgcHV0
IGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZSwgaW5zdGVhZCBjYWxsaW5nIGRpcmVjdGx5IHdpdGgg
SlNWYWx1ZSBhbmQgbGV0dGluZworICAgICAgICB0aGUgSlNWYWx1ZSBhbmQgSlNDZWxsIGNhbGxz
IGhhbmRsZSB0b09iamVjdC4gU2FtZSBmb3IgdG9UaGlzT2JqZWN0LgorCisgICAgICAgICoga2pz
L0V4ZWNTdGF0ZS5oOiBSZW1vdmVkIE9sZEludGVycHJldGVyRXhlY1N0YXRlLgorCisgICAgICAg
ICogQVBJL0pTQmFzZS5jcHA6IFVwZGF0ZWQgaW5jbHVkZXMuCisKKyAgICAgICAgKiBranMvTG9j
YWxTdG9yYWdlRW50cnkuaDogUmVtb3ZlZCBjb250ZW50cy4gTGF0ZXIgd2UgY2FuIHJlbW92ZSB0
aGUgZmlsZSB0b28uCisKKyAgICAgICAgKiBranMvYXJyYXlfaW5zdGFuY2UuY3BwOgorICAgICAg
ICAoS0pTOjpBcnJheUluc3RhbmNlOjpsZW5ndGhHZXR0ZXIpOiBSZW1vdmVkIG9yaWdpbmFsT2Jq
ZWN0IGFyZ3VtZXQuCisgICAgICAgIChLSlM6OkFycmF5SW5zdGFuY2U6OmlubGluZUdldE93blBy
b3BlcnR5U2xvdCk6IERvbid0IHBhc3MgYSBiYXNlIHZhbHVlIHRvCisgICAgICAgIHNldFZhbHVl
U2xvdC4gQWxzbyB1c2UgVU5MSUtFTFkgYXJvdW5kIHRoZSAiZ2V0dGluZyBlbGVtZW50cyBwYXN0
IHRoZSBlbmQgb2YKKyAgICAgICAgdGhlIGFycmF5IiBjb2RlIHBhdGg7IGxlc3MgY29tbW9uIHRo
YW4gc3VjY2Vzc2Z1bGx5IGdldHRpbmcgYW4gZWxlbWVudC4KKworICAgICAgICAqIGtqcy9hcnJh
eV9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpnZXRQcm9wZXJ0eSk6IEluaXRpYWxpemUgdGhl
IFByb3BlcnR5U2xvdCB3aXRoIHRoZSBvcmlnaW5hbCBvYmplY3QuCisgICAgICAgIERvbid0IHBh
c3MgdGhlIG9yaWdpbmFsIG9iamVjdCB0byB0aGUgZ2V0IGZ1bmN0aW9uLgorICAgICAgICAoS0pT
OjphcnJheVByb3RvRnVuY0ZpbHRlcik6IERpdHRvLgorICAgICAgICAoS0pTOjphcnJheVByb3Rv
RnVuY01hcCk6IERpdHRvLgorICAgICAgICAoS0pTOjphcnJheVByb3RvRnVuY0V2ZXJ5KTogRGl0
dG8uCisgICAgICAgIChLSlM6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6IERpdHRvLgorICAgICAg
ICAoS0pTOjphcnJheVByb3RvRnVuY1NvbWUpOiBEaXR0by4KKworICAgICAgICAqIGtqcy9mdW5j
dGlvbl9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpGdW5jdGlvbk9iamVjdEltcDo6Y29uc3Ry
dWN0KTogUmVtb3ZlZCBhbiBvYnNvbGV0ZSBjb21tZW50LgorCisgICAgICAgICoga2pzL2dyYW1t
YXIueTogRWxpbWluYXRlZCBzdXBwb3J0IGZvciBzb21lIG9mIHRoZSBub2RlIHR5cGVzIHRoYXQg
d2VyZQorICAgICAgICB1c2VkIHRvIG9wdGltaXplIGV4ZWN1dGluZyBmcm9tIHRoZSBzeW50YXgg
dHJlZS4KKworICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OlN0cmlu
Z0ltcDo6dG9UaGlzT2JqZWN0KTogQWRkZWQuIFNhbWUgYXMgdG9PYmplY3QuCisgICAgICAgIChL
SlM6Ok51bWJlckltcDo6dG9UaGlzT2JqZWN0KTogRGl0dG8uCisgICAgICAgIChLSlM6OkdldHRl
clNldHRlckltcDo6Z2V0T3duUHJvcGVydHlTbG90KTogQWRkZWQuIE5vdCByZWFjaGVkLgorICAg
ICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnB1dCk6IERpdHRvLgorICAgICAgICAoS0pTOjpH
ZXR0ZXJTZXR0ZXJJbXA6OnRvVGhpc09iamVjdCk6IERpdHRvLgorCisgICAgICAgICoga2pzL2lu
dGVybmFsLmg6IEFkZGVkIHRvVGhpc09iamVjdCB0byBOdW1iZXJJbXAgZm9yIHNwZWVkLgorCisg
ICAgICAgICoga2pzL2xleGVyLmNwcDoKKyAgICAgICAgKEtKUzo6TGV4ZXI6OnNoaWZ0KTogQ2hh
bmdlZCBzaGlmdCB0byBqdXN0IGRvIGEgc2luZ2xlIGNoYXJhY3RlciwgdG8gdW5yb2xsCisgICAg
ICAgIHRoZSBsb29wIGFuZCBlc3BlY2lhbGx5IHRvIG1ha2UgdGhlIG9uZSBjaGFyYWN0ZXIgY2Fz
ZSBmYXN0ZXIuCisgICAgICAgIChLSlM6OkxleGVyOjpzZXRDb2RlKTogQ2FsbCBzaGlmdCBtdWx0
aXBsZSB0aW1lcyBpbnN0ZWFkIG9mIHBhc3NpbmcgYSBudW1iZXIuCisgICAgICAgIChLSlM6Okxl
eGVyOjpsZXgpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6TGV4ZXI6Om1hdGNoUHVuY3R1YXRvcik6
IERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWVkZWQgZWxzZXMgYWZ0ZXIgcmV0dXJucy4KKyAgICAg
ICAgKEtKUzo6TGV4ZXI6OnNjYW5SZWdFeHApOiBEaXR0by4KKyAgICAgICAgKiBranMvbGV4ZXIu
aDogUmVtb3ZlZCB0aGUgY291bnQgYXJndW1lbnQgZnJvbSBzaGlmdC4KKworICAgICAgICAqIGtq
cy9tYXRoX29iamVjdC5jcHA6CisgICAgICAgIChLSlM6Om1hdGhQcm90b0Z1bmNQb3cpOiBDYWxs
IGpzTmFOIGluc3RlYWQgb2YganNOdW1iZXIoTmFOKS4KKworICAgICAgICAqIGtqcy9ub2Rlcy5j
cHA6IFJlbW92ZWQgc29tZSBvZiB0aGUgdGhpbmdzIG5lZWRlZCBvbmx5IGZvciB0aGUgcHJlLVNx
dWlycmVsRmlzaAorICAgICAgICBleGVjdXRpb24gbW9kZWwuCisgICAgICAgIChLSlM6OkZvck5v
ZGU6OmVtaXRDb2RlKTogSGFuZGxlIGNhc2VzIHdoZXJlIHNvbWUgZXhwcmVzc2lvbnMgYXJlIG1p
c3NpbmcgYnkKKyAgICAgICAgbm90IGVtaXR0aW5nIGFueSBjb2RlIGF0IGFsbC4gVGhlIG9sZCB3
YXkgd2FzIHRvIGVtaXQgY29kZSBmb3IgInRydWUiLCBidXQKKyAgICAgICAgdGhpcyBpcyBhbiB1
bm5lY2Vzc2FyeSByZW1uYW50IG9mIHRoZSBvbGQgd2F5IG9mIGRvaW5nIHRoaW5ncy4KKworICAg
ICAgICAqIGtqcy9ub2Rlcy5oOiBSZW1vdmVkIHNvbWUgb2YgdGhlIHRoaW5ncyBuZWVkZWQgb25s
eSBmb3IgdGhlIHByZS1TcXVpcnJlbEZpc2gKKyAgICAgICAgZXhlY3V0aW9uIG1vZGVsLgorCisg
ICAgICAgICoga2pzL29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpmaWxsR2V0
dGVyUHJvcGVydHlTbG90KTogQ2hhbmdlZCB0byBvbmx5IHBhc3MgaW4gdGhlIGdldHRlcgorICAg
ICAgICBmdW5jdGlvbi4gVGhlIG9sZCBjb2RlIHBhc3NlZCBpbiBhIGJhc2UsIGJ1dCBpdCB3YXMg
bmV2ZXIgdXNlZCB3aGVuCisgICAgICAgIGFjdHVhbGx5IGdldHRpbmcgdGhlIHByb3BlcnR5OyB0
aGUgdG9UaGlzT2JqZWN0IGNhbGwgd2FzIHBvaW50bGVzcy4gQWxzbworICAgICAgICBjaGFuZ2Vk
IHRvIG5vdCBwYXNzIGEgYmFzZSBmb3Igc2V0VW5kZWZpbmVkLgorCisgICAgICAgICoga2pzL29i
amVjdC5oOiBBZGRlZCB0aGUgbmV3IEpTQ2VsbCBvcGVyYXRpb25zIHRvIEdldHRlclNldHRlcklt
cC4KKyAgICAgICAgTmV2ZXIgY2FsbGVkLgorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0KTog
SW5pdGlhbGl6ZSB0aGUgb2JqZWN0IGluIHRoZSBQcm9wZXJ0eVNsb3QgYW5kIGRvbid0CisgICAg
ICAgIHBhc3MgaXQgaW4gZ2V0VmFsdWUuCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RGb3JXcml0ZSk6IFJlbW92ZWQgdGhlIGJhc2UgYXJndW1lbnQKKyAgICAgICAg
aW4gY2FsbHMgdG8gc2V0VmFsdWVTbG90LgorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KTogRGl0dG8uCisgICAgICAgIChLSlM6OkpTVmFsdWU6OmdldCk6IEFkZGVk
LiBIZXJlIGJlY2F1c2UgaXQgY2FsbHMgdGhyb3VnaCB0byBKU09iamVjdC4KKyAgICAgICAgQSB2
ZXJzaW9uIG9mIEpTT2JqZWN0OjpnZXQgdGhhdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIHR5cGVz
IG9mIEpTVmFsdWUKKyAgICAgICAgYnkgY3JlYXRpbmcgdGhlIGFwcHJvcHJpYXRlIHdyYXBwZXIu
IFNhdmVzIHRoZSB2aXJ0dWFsIGNhbGwgdG8gdG9PYmplY3QuCisgICAgICAgIChLSlM6OkpTVmFs
dWU6OnB1dCk6IERpdHRvLgorICAgICAgICAoS0pTOjpKU1ZhbHVlOjpkZWxldGVQcm9wZXJ0eSk6
IERpdHRvLgorCisgICAgICAgICoga2pzL3Byb3BlcnR5X3Nsb3QuY3BwOgorICAgICAgICAoS0pT
OjpQcm9wZXJ0eVNsb3Q6OnVuZGVmaW5lZEdldHRlcik6IFJlbW92ZWQgdGhlIG9yaWdpbmFsT2Jq
ZWN0IGFyZ3VtZW50LgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnVuZ2V0dGFibGVHZXR0
ZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcik6
IERpdHRvLiBVc2UgdGhlIHZhbHVlIGluIHRoZSBiYXNlCisgICAgICAgIGFzIHRoZSAidGhpcyIg
b2JqZWN0LCB3aGljaCB3aWxsIGJlIHNldCB0byB0aGUgb3JpZ2luYWwgb2JqZWN0IGJ5IHRoZSBu
ZXcKKyAgICAgICAgUHJvcGVydHlTbG90IGluaXRpYWxpemF0aW9uIGNvZGUuIEFsc28gY2FsbCB0
b1RoaXNPYmplY3QuIFRoZSBvbGQgY29kZSBkaWQKKyAgICAgICAgbm90IGRvIHRoaXMsIGJ1dCBu
ZWVkZWQgdG8gc28gd2UgY2FuIHByb3Blcmx5IGhhbmRsZSB0aGUgYWN0aXZhdGlvbiBvYmplY3QK
KyAgICAgICAgbGlrZSB0aGUgb3RoZXIgc2ltaWxhciBjb2RlIHBhdGhzLgorCisgICAgICAgICog
a2pzL3Byb3BlcnR5X3Nsb3QuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0
eVNsb3QpOiBBZGRlZCBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBiYXNlCisgICAgICAgIG9i
amVjdC4gSW4gZGVidWcgYnVpbGRzLCBzZXQgdGhlIGJhc2UgdG8gMCBpZiB5b3UgZG9uJ3QgcGFz
cyBvbmUuCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6Z2V0VmFsdWUpOiBEb24ndCB0YWtl
IG9yIHBhc3MgdGhlIG9yaWdpbmFsT2JqZWN0LgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6
OnNldFZhbHVlU2xvdCk6IERvbid0IHRha2UgYSBiYXNlIG9iamVjdCwgYW5kIGNsZWFyIHRoZQor
ICAgICAgICBiYXNlIG9iamVjdCBpbiBkZWJ1ZyBidWlsZHMuCisgICAgICAgIChLSlM6OlByb3Bl
cnR5U2xvdDo6c2V0R2V0dGVyU2xvdCk6IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNs
b3Q6OnNldFVuZGVmaW5lZCk6IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnNl
dFVuZ2V0dGFibGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpzbG90QmFz
ZSk6IEFzc2VydCB0aGF0IGEgYmFzZSBvYmplY3QgaXMgcHJlc2VudC4KKyAgICAgICAgVGhpcyB3
aWxsIGZpcmUgaWYgc29tZW9uZSBhY3R1YWxseSBjYWxscyB0aGUgZ2V0IGZ1bmN0aW9uIHdpdGhv
dXQgaGF2aW5nCisgICAgICAgIHBhc3NlZCBpbiBhIGJhc2Ugb2JqZWN0IGFuZCB0aGUgZ2V0dGVy
IG5lZWRzIGl0LgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnNldEJhc2UpOiBBZGRlZC4g
VXNlZCBieSB0aGUgY29kZSB0aGF0IGltcGxlbWVudHMKKyAgICAgICAgdG9PYmplY3Qgc28gaXQg
Y2FuIHN1cHBseSB0aGUgb3JpZ2luYWwgb2JqZWN0IGFmdGVyIHRoZSBmYWN0LgorICAgICAgICAo
S0pTOjpQcm9wZXJ0eVNsb3Q6OmNsZWFyQmFzZSk6IEFkZGVkLiBDbGVhcnMgdGhlIGJhc2UsIGJ1
dCBpcyBkZWJ1Zy1vbmx5CisgICAgICAgIGNvZGUgYmVjYXVzZSBpdCdzIGFuIGVycm9yIHRvIGZl
dGNoIHRoZSBiYXNlIGlmIHlvdSBkb24ndCBoYXZlIGEgZ3VhcmFudGVlCisgICAgICAgIGl0IHdh
cyBzZXQuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tP
YmplY3Q6OmNhY2hlZFZhbHVlR2V0dGVyKToKKyAgICAgICAgKEtKUzo6SlNDYWxsYmFja09iamVj
dDo6c3RhdGljVmFsdWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU0NhbGxiYWNrT2JqZWN0Ojpz
dGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tPYmplY3Q6OmNh
bGxiYWNrR2V0dGVyKToKKyAgICAgICAgKiBranMvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAg
KEtKUzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoS0pTOjpK
U0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICoga2pzL0pTQWN0aXZhdGlv
bi5oOgorICAgICAgICAqIGtqcy9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChLSlM6OkpT
VmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKiBranMvYXJyYXlfaW5z
dGFuY2UuaDoKKyAgICAgICAgKiBranMvZnVuY3Rpb24uY3BwOgorICAgICAgICAoS0pTOjpGdW5j
dGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6OmNh
bGxlckdldHRlcik6CisgICAgICAgIChLSlM6OkZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIpOgor
ICAgICAgICAoS0pTOjpBcmd1bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKToKKyAgICAgICAgKiBr
anMvZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvbG9va3VwLmg6CisgICAgICAgIChLSlM6OnN0
YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKEtKUzo6c3RhdGljVmFsdWVHZXR0ZXIpOgor
ICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6U3RyaW5nSW5z
dGFuY2U6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChLSlM6OlN0cmluZ0luc3RhbmNlOjppbmRl
eEdldHRlcik6CisgICAgICAgIChLSlM6OnN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3BlcnR5R2V0
dGVyKToKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5oOgorICAgICAgICBSZW1vdmVkIG9y
aWdpbmFsT2JqZWN0IGFyZ3VtZW50cyBmcm9tIGdldHRlcnMuIERvbid0IHBhc3MgYmFzZSB2YWx1
ZXMgdG8KKyAgICAgICAgdGhlIHZhcmlvdXMgUHJvcGVydHlTbG90IGZ1bmN0aW9ucyB0aGF0IG5v
IGxvbmdlciB0YWtlIHRoZW0uCisKKyAgICAgICAgKiBranMvdmFsdWUuY3BwOgorICAgICAgICAo
S0pTOjpKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdCk6IEFkZGVkLiBDYWxscyB0b09iamVjdCBh
bmQgdGhlbiBzZXRzIHRoZSBzbG90LgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyB0byBhbHdh
eXMgcmV0dXJuIHRydWUsIGJlY2F1c2UgdGhlIGNhbGxlciBjYW4ndCB3YWxrIHRoZSBwcm90b3R5
cGUKKyAgICAgICAgY2hhaW4uIEJlY2F1c2Ugb2YgdGhhdCwgd2UgZG8gYSBnZXRQcm9wZXJ0eVNs
b3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QsIHdoaWNoIHdvcmtzCisgICAgICAgIGZvciB0aGUg
Y2FsbGVyLiBUaGlzIGlzIHByaXZhdGUsIG9ubHkgY2FsbGVkIGJ5IGdldE93blByb3BlcnR5U2xv
dEludGVybmFsLgorICAgICAgICAoS0pTOjpKU0NlbGw6OnB1dCk6IEFkZGVkLiBDYWxscyB0b09i
amVjdCBhbmQgdGhlbiBwdXQuCisgICAgICAgIChLSlM6OkpTQ2VsbDo6dG9UaGlzT2JqZWN0KTog
QWRkZWQuIENhbGxzIHRvT2JqZWN0LgorCisgICAgICAgICoga2pzL3ZhbHVlLmg6IEFkZGVkIGdl
dCwgcHV0LCBhbmQgdG9UaGlzT2JqZWN0IHRvIGJvdGggSlNWYWx1ZQorICAgICAgICBhbmQgSlND
ZWxsLiBUaGVzZSB0YWtlIGNhcmUgb2YgdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiB3aXRob3V0IGFu
IGFkZGl0aW9uYWwgdmlydHVhbAorICAgICAgICBmdW5jdGlvbiBjYWxsLCBhbmQgc28gbWFrZSB0
aGUgY29tbW9uICJhbHJlYWR5IGFuIG9iamVjdCIgY2FzZSBmYXN0ZXIuCisKKyAgICAgICAgKiB3
dGYvQWx3YXlzSW5saW5lLmg6IE1vdmVkIHRoZSBVTkxJS0VMWSBtYWNybyBoZXJlIGZvciBub3cu
IE1heWJlIHdlIGNhbiBmaW5kIGEKKyAgICAgICAgYmV0dGVyIHBsYWNlIGxhdGVyLCBvciByZW5h
bWUgdGhpcyBoZWFkZXIuCisKIDIwMDgtMDUtMjcgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4ZXMgdG8gY2F0Y2ggdXAgd2l0
aCBTcXVpcnJlbEZpc2gsIGV0Yy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgX19aTjNLSlMxMVByb3BlcnR5TWFwM3B1dEVS
S05TXzEwSWRlbnRpZgogX19aTjNLSlMxMVByb3BlcnR5TWFwNWNsZWFyRXYKIF9fWk4zS0pTMTFQ
cm9wZXJ0eU1hcEQxRXYKIF9fWk4zS0pTMTJEYXRlSW5zdGFuY2U0aW5mb0UKLV9fWk4zS0pTMTJQ
cm9wZXJ0eVNsb3QxNXVuZGVmaW5lZEdldHRlckVQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0
RVJLTlNfMTBJZGVudGlmaWVyRVJLUzBfCitfX1pOM0tKUzEyUHJvcGVydHlTbG90MTV1bmRlZmlu
ZWRHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUktTMF8KIF9fWk4zS0pT
MTJSZWdpc3RlckZpbGUxNGFkZEdsb2JhbFNsb3RzRW0KIF9fWk4zS0pTMTNBcnJheUluc3RhbmNl
NGluZm9FCiBfX1pOM0tKUzEzQ29kZUdlbmVyYXRvcjIxc2V0RHVtcHNHZW5lcmF0ZWRDb2RlRWIK
QEAgLTE1MSw2ICsxNTEsMTAgQEAgX19aTjNLSlM0TGlzdDE1ZXhwYW5kQW5kQXBwZW5kRVBOU183
SlNWYQogX19aTjNLSlM0TGlzdDdtYXJrU2V0RXYKIF9fWk4zS0pTNkpTQ2VsbDExZ2V0Q2FsbERh
dGFFUk5TXzhDYWxsRGF0YUUKIF9fWk4zS0pTNkpTQ2VsbDE2Z2V0Q29uc3RydWN0RGF0YUVSTlNf
MTNDb25zdHJ1Y3REYXRhRQorX19aTjNLSlM2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQorX19aTjNL
SlM2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3Bl
cnR5U2xvdEUKK19fWk4zS0pTNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRQorX19aTjNLSlM2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVq
UE5TXzdKU1ZhbHVlRQogX19aTjNLSlM2SlNDZWxsOWdldE9iamVjdEV2CiBfX1pOM0tKUzZKU0Nl
bGxud0VtCiBfX1pOM0tKUzZKU0xvY2sxMkRyb3BBbGxMb2Nrc0MxRXYKQEAgLTI2Miw2ICsyNjYs
NyBAQCBfX1pOSzNLSlMxN0RlYnVnZ2VyQ2FsbEZyYW1lOGV2YWx1YXRlRVJLCiBfX1pOSzNLSlMx
OUludGVybmFsRnVuY3Rpb25JbXAyMWltcGxlbWVudHNIYXNJbnN0YW5jZUV2CiBfX1pOSzNLSlM0
TGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszS0pTNE5vZGU4dG9TdHJpbmdFdgorX19aTkszS0pT
NkpTQ2VsbDEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszS0pTNkpTQ2VsbDE3
Z2V0VHJ1bmNhdGVkSW50MzJFUmkKIF9fWk5LM0tKUzZKU0NlbGwxOGdldFRydW5jYXRlZFVJbnQz
MkVSagogX19aTkszS0pTNkpTQ2VsbDlnZXROdW1iZXJFUmQKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsMTAgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoRXhlY1N0YXRlKik7CiAgICAgCi0gICAg
c3RhdGljIEpTVmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1Zh
bHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBz
dGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWxs
YmFja0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogY2FjaGVkVmFsdWVHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIHN0YXRp
Y0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIAogICAgIHZv
aWQqIG1fcHJpdmF0ZURhdGE7CiAgICAgSlNDbGFzc1JlZiBtX2NsYXNzOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAz
NDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46OmluaGVyaXRzKEpTCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSog
SlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U1ZhbHVlKiB2ID0gc2xvdC5zbG90QmFzZSgpOwogICAgIEFTU0VSVCh2KTsKQEAgLTQzNSw3ICs0
MzUsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpjYWNoZWRWCiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3Rh
dGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pbmhlcml0cygmSlNDYWxsYmFja09iamVj
dDo6aW5mbykpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxK
U0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKQEAgLTQ1NiwxNSArNDU2LDE1IEBA
IEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY1YKIH0KIAogdGVtcGxhdGUg
PGNsYXNzIEJhc2U+Ci1KU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5j
dGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0
OjppbmZvKSk7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
Q2FsbGJhY2tPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIAogICAgIC8vIENoZWNrIGZv
ciBjYWNoZWQgb3Igb3ZlcnJpZGUgcHJvcGVydHkuCi0gICAgUHJvcGVydHlTbG90IHNsb3QyOwor
ICAgIFByb3BlcnR5U2xvdCBzbG90Mih0aGlzT2JqKTsKICAgICBpZiAodGhpc09iai0+QmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdDIpKQotICAgICAgICBy
ZXR1cm4gc2xvdDIuZ2V0VmFsdWUoZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgcmV0dXJuIHNsb3QyLmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgICAg
Zm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2JqLT5tX2NsYXNzOyBqc0NsYXNzOyBqc0Ns
YXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3M6
OlN0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlvbnMgPSBqc0NsYXNzLT5zdGF0aWNG
dW5jdGlvbnMpIHsKQEAgLTQ4Miw3ICs0ODIsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+OjpzdGF0aWNGCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pbmhlcml0
cygmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3Jl
L1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMyArNDksNiBAQAogI2luY2x1
ZGUgIm9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJyZWdleHBfb2JqZWN0LmgiCiAKLSNpZiBDT01Q
SUxFUihHQ0MpCi0jZGVmaW5lIFVOTElLRUxZKHgpIFwKLSAgX19idWlsdGluX2V4cGVjdCAoKHgp
LCAwKQotI2Vsc2UKLSNkZWZpbmUgVU5MSUtFTFkoeCkgeAotI2VuZGlmCi0KIG5hbWVzcGFjZSBL
SlMgewogCiAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQpAQCAtMjEwLDEyICsyMDMsMTIgQEAgc3Rh
dGljIGJvb2wgTkVWRVJfSU5MSU5FIHJlc29sdmUoRXhlY1N0YQogICAgIFNjb3BlQ2hhaW5JdGVy
YXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwog
Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKICAgICBkbyB7CiAgICAgICAgIEpTT2JqZWN0KiBv
ID0gKml0ZXI7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBpZiAoby0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBvLCBpZGVudCk7CisgICAgICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKICAgICAgICAgICAg
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQwLDEyICsy
MzMsMTIgQEAgc3RhdGljIGJvb2wgTkVWRVJfSU5MSU5FIHJlc29sdmVfc2tpcChFeAogICAgICAg
ICArK2l0ZXI7CiAgICAgICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAgICAgfQotICAgIFByb3Bl
cnR5U2xvdCBzbG90OwogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyc1twcm9wZXJ0eV07CiAgICAgZG8gewogICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOwor
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5
U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHNsb3QuZ2V0VmFsdWUoZXhlYywgbywgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CiAgICAgICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NSwxMyArMjg4LDEzIEBAIHN0
YXRpYyBib29sIE5FVkVSX0lOTElORSByZXNvbHZlQmFzZUFuZFAKICAgICAKICAgICBBU1NFUlQo
aXRlciAhPSBlbmQpOwogICAgIAotICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgIElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07CiAgICAgSlNPYmpl
Y3QqIGJhc2U7CiAgICAgZG8gewogICAgICAgICBiYXNlID0gKml0ZXI7CisgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KGJhc2UpOwogICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBiYXNlLCBpZGVudCk7ICAKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFs
dWUgPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjksMTEgKzMyMiwxMSBAQCBzdGF0
aWMgYm9vbCBORVZFUl9JTkxJTkUgcmVzb2x2ZUJhc2VBbmRGCiAgICAgCiAgICAgQVNTRVJUKGl0
ZXIgIT0gZW5kKTsKICAgICAKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBJZGVudGlmaWVy
JiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgIEpTT2JqZWN0
KiBiYXNlOwogICAgIGRvIHsKICAgICAgICAgYmFzZSA9ICppdGVyOworICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlKTsKICAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVj
LCBpZGVudCwgc2xvdCkpIHsgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEVDTUEgMTEuMi4z
IHNheXMgdGhhdCBpZiB3ZSBoaXQgYW4gYWN0aXZhdGlvbiB0aGUgdGhpcyB2YWx1ZSBzaG91bGQg
YmUgbnVsbC4KICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHNlY3Rpb24gMTAuMi4zIHNheXMgdGhh
dCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdmFsdWUgcHJvdmlkZWQKQEAgLTM0Myw3ICszMzYsNyBA
QCBzdGF0aWMgYm9vbCBORVZFUl9JTkxJTkUgcmVzb2x2ZUJhc2VBbmRGCiAgICAgICAgICAgICAv
LyB0aGF0IGluIGhvc3Qgb2JqZWN0cyB5b3UgYWx3YXlzIGdldCBhIHZhbGlkIG9iamVjdCBmb3Ig
dGhpcy4KICAgICAgICAgICAgIC8vIFdlIGFsc28gaGFuZGxlIHdyYXBwZXIgc3Vic3RpdHV0aW9u
IGZvciB0aGUgZ2xvYmFsIG9iamVjdCBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSBiYXNlLT50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIGlkZW50KTsKKyAgICAg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOwogICAg
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgICAg
IGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
NjA4LDEwICsxNjAxLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVn
aXN0ZXJCYXNlKTsKICNlbmRpZgotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHJbYmFzZV0u
dS5qc1ZhbHVlLT50b09iamVjdChleGVjKTsKIAogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwotICAgICAgICBKU1ZhbHVlICpyZXN1
bHQgPSBiYXNlT2JqLT5nZXQoZXhlYywgaWRlbnQpOworICAgICAgICBKU1ZhbHVlICpyZXN1bHQg
PSByW2Jhc2VdLnUuanNWYWx1ZS0+Z2V0KGV4ZWMsIGlkZW50KTsKICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyT2Zmc2V0ID09IChyIC0gKCpyZWdpc3RlckJhc2UpKSk7CiAgICAgICAgIFZNX0NIRUNL
X0VYQ0VQVElPTigpOwogICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OwpAQCAtMTYz
MywxMSArMTYyNSw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lz
dGVyQmFzZSk7CiAjZW5kaWYKLQotICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IHJbYmFzZV0u
dS5qc1ZhbHVlLT50b09iamVjdChleGVjKTsKICAgICAgICAgCiAgICAgICAgIElkZW50aWZpZXIm
IGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1twcm9wZXJ0eV07Ci0gICAgICAgIGJhc2VP
YmotPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0udS5qc1ZhbHVlKTsKKyAgICAgICAgcltiYXNl
XS51LmpzVmFsdWUtPnB1dChleGVjLCBpZGVudCwgclt2YWx1ZV0udS5qc1ZhbHVlKTsKICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0ID09IChyIC0gKCpyZWdpc3RlckJhc2UpKSk7CiAgICAg
ICAgIAogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKQEAgLTE2NzcsMTQgKzE2NjcsMTYg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQg
YmFzZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gcltiYXNlXS51Lmpz
VmFsdWUtPnRvT2JqZWN0KGV4ZWMpOyAvLyBtYXkgdGhyb3cKKyAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gcltiYXNlXS51LmpzVmFsdWU7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlKiBz
dWJzY3JpcHQgPSByW3Byb3BlcnR5XS51LmpzVmFsdWU7CiAgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dDsKICAgICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMy
KGkpKQotICAgICAgICAgICAgcmVzdWx0ID0gYmFzZU9iai0+Z2V0KGV4ZWMsIGkpOworICAgICAg
ICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoZXhlYywgaSk7CiAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMp
OyAvLyBtYXkgdGhyb3cKKyAgICAgICAgCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5
OwogICAgICAgICAgICAgaWYgKHN1YnNjcmlwdC0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAg
ICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOyAvLyBJZiB0b09iamVjdCB0aHJldywgd2UgbXVzdCBu
b3QgY2FsbCB0b1N0cmluZywgd2hpY2ggbWF5IGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUKQEAgLTE3
MTYsMTQgKzE3MDgsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICBpbnQgcHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCB2YWx1ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU09iamVjdCogYmFzZU9i
aiA9IHJbYmFzZV0udS5qc1ZhbHVlLT50b09iamVjdChleGVjKTsKKyAgICAgICAgSlNWYWx1ZSog
YmFzZVZhbHVlID0gcltiYXNlXS51LmpzVmFsdWU7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVl
KiBzdWJzY3JpcHQgPSByW3Byb3BlcnR5XS51LmpzVmFsdWU7CiAKICAgICAgICAgdWludDMyX3Qg
aTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKGkpKQotICAgICAgICAgICAgYmFz
ZU9iai0+cHV0KGV4ZWMsIGksIHJbdmFsdWVdLnUuanNWYWx1ZSk7CisgICAgICAgICAgICBiYXNl
VmFsdWUtPnB1dChleGVjLCBpLCByW3ZhbHVlXS51LmpzVmFsdWUpOwogICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZVZhbHVlLT50b09iamVjdChleGVj
KTsKKwogICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eTsKICAgICAgICAgICAgIGlmIChz
dWJzY3JpcHQtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsgLy8gSWYgdG9PYmplY3QgdGhyZXcsIHdlIG11c3Qgbm90IGNhbGwgdG9TdHJpbmcsIHdo
aWNoIG1heSBleGVjdXRlIGFyYml0cmFyeSBjb2RlCkBAIC0xOTAyLDcgKzE4OTYsNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIC8vIHRoaXMgaW5z
dHJ1Y3Rpb24gYXMgYSBub3JtYWwgZnVuY3Rpb24gY2FsbCwgc3VwcGx5aW5nIHRoZSBwcm9wZXIg
J3RoaXMnCiAgICAgICAgIC8vIHZhbHVlLgogICAgICAgICB2UEMgLT0gNTsKLSAgICAgICAgclti
YXNlXS51LmpzVmFsdWUgPSBiYXNlVmFsLT50b09iamVjdChleGVjKS0+dG9UaGlzT2JqZWN0KGV4
ZWMpOworICAgICAgICByW2Jhc2VdLnUuanNWYWx1ZSA9IGJhc2VWYWwtPnRvVGhpc09iamVjdChl
eGVjKTsKIAogI2lmIEhBVkUoQ09NUFVURURfR09UTykKICAgICAgICAgLy8gSGFjayBhcm91bmQg
Z2NjIHBlcmZvcm1hbmNlIHF1aXJrIGJ5IHBlcmZvcm1pbmcgYW4gaW5kaXJlY3QgZ290bwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsOCBAQCBuYW1l
c3BhY2UgS0pTICB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIHN0cmluZ1RhYmxl
KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gZXhlYy0+bV9wZXJUaHJlYWREYXRhLT5zdHJpbmdU
YWJsZTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciBy
ZXF1aXJlZCBmb3IgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUgd2l0aCBnY2MgMy4KLSAgICAgICAg
RXhlY1N0YXRlKCkge307CisgICAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IgcmVxdWlyZWQg
Zm9yIGdjYyAzLgorICAgICAgICBFeGVjU3RhdGUoKSB7IH0KIAogICAgICAgICBFeGVjU3RhdGUo
RXhlY1N0YXRlKiwgTWFjaGluZSosIFJlZ2lzdGVyRmlsZSosIFNjb3BlQ2hhaW5Ob2RlKiwgaW50
IGNhbGxGcmFtZU9mZnNldCk7CiAKQEAgLTEyNiwxMDkgKzEyNiw3IEBAIG5hbWVzcGFjZSBLSlMg
IHsKICAgICAgICAgaW50IG1fY2FsbEZyYW1lT2Zmc2V0OyAvLyBBIG5lZ2F0aXZlIG9mZnNldCBp
bmRpY2F0ZXMgYSBub24tZnVuY3Rpb24gc2NvcGUuCiAgICAgfTsKIAotICAgIC8vIFRoaXMgY29k
ZSBpcyBub3cgZGVmdW5jdDoKLQogICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFs
Q29kZSwgRnVuY3Rpb25Db2RlIH07Ci0gICAgY2xhc3MgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUg
OiBwdWJsaWMgRXhlY1N0YXRlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgcHVzaFN3aXRj
aCgpIHsgbV9zd2l0Y2hEZXB0aCsrOyB9Ci0gICAgICAgIHZvaWQgcG9wU3dpdGNoKCkgeyBtX3N3
aXRjaERlcHRoLS07IH0KLSAgICAgICAgYm9vbCBpblN3aXRjaCgpIGNvbnN0IHsgcmV0dXJuICht
X3N3aXRjaERlcHRoID4gMCk7IH0KLQotICAgICAgICAvLyBUaGVzZSBhcmUgb25seSB2YWxpZCBy
aWdodCBhZnRlciBjYWxsaW5nIGV4ZWN1dGUoKS4KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsZXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wbGV0aW9uVHlwZTsgfQotICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBicmVha09yQ29udGludWVUYXJnZXQoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVHlwZSA9PSBCcmVhayB8fCBtX2NvbXBsZXRp
b25UeXBlID09IENvbnRpbnVlKTsKLSAgICAgICAgICAgIHJldHVybiAqbV9icmVha09yQ29udGlu
dWVUYXJnZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmx5IGZvciB1c2UgaW4gdGhlIGlt
cGxlbWVudGF0aW9uIG9mIGV4ZWN1dGUoKS4KLSAgICAgICAgdm9pZCBzZXRDb21wbGV0aW9uVHlw
ZShDb21wbFR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0g
QnJlYWspOwotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQ29udGludWUpOwotICAgICAgICAg
ICAgbV9jb21wbGV0aW9uVHlwZSA9IHR5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSog
c2V0Tm9ybWFsQ29tcGxldGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaGFk
RXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IE5vcm1hbDsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNldE5vcm1h
bENvbXBsZXRpb24oSlNWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghaGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IE5vcm1h
bDsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICBKU1ZhbHVl
KiBzZXRCcmVha0NvbXBsZXRpb24oY29uc3QgSWRlbnRpZmllciogdGFyZ2V0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIG1fY29t
cGxldGlvblR5cGUgPSBCcmVhazsKLSAgICAgICAgICAgIG1fYnJlYWtPckNvbnRpbnVlVGFyZ2V0
ID0gdGFyZ2V0OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgSlNW
YWx1ZSogc2V0Q29udGludWVDb21wbGV0aW9uKGNvbnN0IElkZW50aWZpZXIqIHRhcmdldCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgICAg
ICBtX2NvbXBsZXRpb25UeXBlID0gQ29udGludWU7Ci0gICAgICAgICAgICBtX2JyZWFrT3JDb250
aW51ZVRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0g
ICAgICAgIEpTVmFsdWUqIHNldFJldHVyblZhbHVlQ29tcGxldGlvbihKU1ZhbHVlKiByZXR1cm5W
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24oKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9u
VHlwZSA9IFJldHVyblZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAg
ICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNldFRocm93Q29tcGxldGlvbihKU1ZhbHVlKiBleGNl
cHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBtX2NvbXBsZXRpb25U
eXBlID0gVGhyb3c7Ci0gICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0g
ICAgICAgIEpTVmFsdWUqIHNldEludGVycnVwdGVkQ29tcGxldGlvbigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0
aW9uVHlwZSA9IEludGVycnVwdGVkOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LSAgICAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSB7IHJldHVybiBtX2NvZGVUeXBlOyB9Ci0gICAg
ICAgIHZvaWQgcHVzaEl0ZXJhdGlvbigpIHsgbV9pdGVyYXRpb25EZXB0aCsrOyB9Ci0gICAgICAg
IHZvaWQgcG9wSXRlcmF0aW9uKCkgeyBtX2l0ZXJhdGlvbkRlcHRoLS07IH0KLSAgICAgICAgYm9v
bCBpbkl0ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChtX2l0ZXJhdGlvbkRlcHRoID4gMCk7IH0K
LSAgICAgICAgTGFiZWxTdGFjayYgc2VlbkxhYmVscygpIHsgcmV0dXJuIG1fbGFiZWxTdGFjazsg
fQotICAgICAgICB2b2lkIHB1c2hTY29wZShKU09iamVjdCogcykgeyBtX3Njb3BlQ2hhaW4ucHVz
aChzKTsgfQotICAgICAgICB2b2lkIHBvcFNjb3BlKCkgeyBtX3Njb3BlQ2hhaW4ucG9wKCk7IH0K
LSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QoKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV92YXJpYWJsZU9iamVjdDsgfQotICAgICAgICB2b2lk
IHNldFZhcmlhYmxlT2JqZWN0KEpTVmFyaWFibGVPYmplY3QqIHYpIHsgbV92YXJpYWJsZU9iamVj
dCA9IHY7IH0KLSAgICAgICAgRXhlY1N0YXRlKiBjYWxsaW5nRXhlY1N0YXRlKCkgeyByZXR1cm4g
bV9jYWxsaW5nRXhlYzsgfQotICAgICAgICBTY29wZU5vZGUqIHNjb3BlTm9kZSgpIHsgcmV0dXJu
IG1fc2NvcGVOb2RlOyB9Ci0gICAgICAgIGNvbnN0IExpc3QqIGFyZ3VtZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fYXJndW1lbnRzOyB9Ci0gICAgICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KLSAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0
b3JhZ2UoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gKihMb2NhbFN0b3JhZ2UqKTA7
IH0KLSAgICAgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2UoTG9jYWxTdG9yYWdlKikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQotICAgICAgICBTY29wZUNoYWluJiBzY29wZUNoYWluKCkgeyByZXR1
cm4gbV9zY29wZUNoYWluOyB9Ci0gICAgICAgIEpTT2JqZWN0KiB0aGlzVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3RoaXNWYWx1ZTsgfQotICAgICAgICAKLSAgICAgICAgQ29tcGxUeXBlIG1fY29t
cGxldGlvblR5cGU7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG1fYnJlYWtPckNvbnRpbnVl
VGFyZ2V0OwotICAgICAgICBpbnQgbV9zd2l0Y2hEZXB0aDsKLSAgICAgICAgQ29kZVR5cGUgbV9j
b2RlVHlwZTsKLSAgICAgICAgaW50IG1faXRlcmF0aW9uRGVwdGg7Ci0gICAgICAgIExhYmVsU3Rh
Y2sgbV9sYWJlbFN0YWNrOwotICAgICAgICBTY29wZUNoYWluTm9kZSBtX2lubGluZVNjb3BlQ2hh
aW5Ob2RlOwotICAgICAgICBTY29wZUNoYWluIG1fc2NvcGVDaGFpbjsKLSAgICAgICAgSlNWYXJp
YWJsZU9iamVjdCogbV92YXJpYWJsZU9iamVjdDsKLSAgICAgICAgU2NvcGVOb2RlKiBtX3Njb3Bl
Tm9kZTsKLSAgICAgICAgY29uc3QgTGlzdCogbV9hcmd1bWVudHM7Ci0gICAgICAgIEZ1bmN0aW9u
SW1wKiBtX2Z1bmN0aW9uOwotICAgICAgICBFeGVjU3RhdGUqIG1fY2FsbGluZ0V4ZWM7Ci0gICAg
ICAgIEpTT2JqZWN0KiBtX3RoaXNWYWx1ZTsKLSAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBLSlMK
IApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDM0MTUxKQor
KysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDcgKzc0LDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChFeAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChKU1ZhbHVlKiogbG9jYXRpb24gPSBnZXRE
aXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWVTbG90
KHRoaXMsIGxvY2F0aW9uKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRpb24pOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQCBib29sIEpT
QWN0aXZhdGlvbjo6aXNEeW5hbWljU2NvcGUoKSBjb25zCiAgICAgcmV0dXJuIGQoKS0+ZnVuY3Rp
b25Cb2R5LT51c2VzRXZhbCgpOwogfQogCi1KU1ZhbHVlKiBKU0FjdGl2YXRpb246OmFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRz
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxK
U0FjdGl2YXRpb24qPihzbG90LnNsb3RCYXNlKCkpOwogICAgIGlmICghdGhpc09iai0+ZCgpLT5h
cmd1bWVudHNPYmplY3QpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lv
biAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBhcmd1bWVudHNPYmplY3Q7CiAgICAgICAgIH07CiAgICAgICAgIAotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigpOwogICAgICAgICBORVZFUl9JTkxJTkUgSlNPYmpl
Y3QqIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqKTsKIApJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgp
KTsKICAgICAgICAgaWYgKCFlbnRyeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWVTbG90KHRoaXMsICZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KCZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEx
MCw3ICsxMTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUudXN0cmlu
ZygpLnJlcCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsICZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KCZ2YWx1ZUF0KGVudHJ5LmdldEluZGV4KCkpKTsK
ICAgICAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L2FycmF5X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYXJy
YXlfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9h
cnJheV9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBKU1Zh
bHVlKiBBcnJheUluc3RhbmNlOjpnZXRJdGVtKHVuc2lnbmVkCiAgICAgcmV0dXJuIHZhbHVlID8g
dmFsdWUgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBBcnJheUluc3RhbmNlOjpsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogQXJyYXlJbnN0YW5jZTo6bGVuZ3RoR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PEFycmF5SW5zdGFuY2UqPihzbG90
LnNsb3RCYXNlKCkpLT5tX2xlbmd0aCk7CiB9CkBAIC0xMzcsNyArMTM3LDcgQEAgQUxXQVlTX0lO
TElORSBib29sIEFycmF5SW5zdGFuY2U6OmlubGluZQogewogICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKIAotICAgIGlmIChpID49IG1fbGVuZ3RoKSB7CisgICAgaWYgKFVO
TElLRUxZKGkgPj0gbV9sZW5ndGgpKSB7CiAgICAgICAgIGlmIChpID4gbWF4QXJyYXlJbmRleCkK
ICAgICAgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShpKSwgc2xvdCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NiwxNCArMTQ2LDE0
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBBcnJheUluc3RhbmNlOjppbmxpbmUKICAgICBpZiAoaSA8
IG1fdmVjdG9yTGVuZ3RoKSB7CiAgICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVlU2xvdCk7CisgICAgICAgICAgICBzbG90LnNldFZh
bHVlU2xvdCgmdmFsdWVTbG90KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZVZhbHVlTWFwKSB7CiAgICAgICAgIGlmIChpID49IHNwYXJzZUFycmF5Q3V0b2ZmKSB7CiAg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
KTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJml0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWVTbG90KCZpdC0+c2Vjb25kKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Fy
cmF5X2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2lu
c3RhbmNlLmgJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2lu
c3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgdm9pZCBzZXRMYXp5Q3JlYXRpb25EYXRhKHZvaWQqKTsKIAogICBwcml2YXRlOgotICAg
IHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUq
IGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHZvaWQgc2V0TGVu
Z3RoKHVuc2lnbmVkKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCShyZXZp
c2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlTbG90KAogLy8gSGVscGVyIGZ1bmN0aW9uCiBzdGF0aWMgSlNWYWx1ZSogZ2V0UHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqLCB1bnNpZ25lZCBpbmRleCkKIHsK
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmopOwogICAg
IGlmICghb2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBvYmosIGluZGV4KTsKKyAg
ICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CiB9CiAKIEpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYpCkBAIC01MDAsMTIgKzUwMCwxMiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0Zp
bHRlcihFeGVjU3RhdGUqCiAgICAgdW5zaWduZWQgZmlsdGVySW5kZXggPSAwOwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iaik7CiAKICAgICAgICAgaWYg
KCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywgc2xvdCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCB0aGlz
T2JqLCBrKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgayk7CiAK
ICAgICAgICAgTGlzdCBlYWNoQXJndW1lbnRzOwogCkBAIC01MzYsMTEgKzUzNiwxMSBAQCBKU1Zh
bHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4CiAgICAgSlNPYmplY3QqIHJlc3Vs
dEFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIG1hcEFyZ3MpKTsKIAogICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
OyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXNPYmopOwogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChl
eGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpTVmFsdWUq
IHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHRoaXNPYmosIGspOworICAgICAgICBKU1ZhbHVlKiB2
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBrKTsKIAogICAgICAgICBMaXN0IGVhY2hBcmd1bWVudHM7
CiAKQEAgLTU3MywxNCArNTczLDE0IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhl
Y1N0YXRlKiAKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhp
c09iaik7CiAKICAgICAgICAgaWYgKCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywg
c2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMaXN0IGVhY2hBcmd1bWVu
dHM7CiAKLSAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1ZShleGVjLCB0
aGlzT2JqLCBrKSk7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUo
ZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CiAg
ICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCkBAIC02MDYsMTIgKzYwNiwx
MiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlCiAKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5n
dGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmopOwogICAgICAgICBpZiAo
IXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIExpc3QgZWFjaEFyZ3VtZW50czsKLSAgICAgICAgZWFjaEFyZ3Vt
ZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1ZShleGVjLCB0aGlzT2JqLCBrKSk7CisgICAgICAgIGVh
Y2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhlYywgaykpOwogICAgICAgICBlYWNo
QXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBw
ZW5kKHRoaXNPYmopOwogCkBAIC02MzMsMTIgKzYzMywxMiBAQCBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY1NvbWUoRXhlY1N0YXRlKiBlCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwog
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpOyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KHRoaXNPYmopOwogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xv
dChleGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExpc3Qg
ZWFjaEFyZ3VtZW50czsKLSAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1
ZShleGVjLCB0aGlzT2JqLCBrKSk7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3Qu
Z2V0VmFsdWUoZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJl
cihrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMjEgKzk5LDIxIEBAIEpTVmFs
dWUqIEZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGUKICAgICB9CiB9CiAKLUpTVmFsdWUq
IEZ1bmN0aW9uSW1wOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBG
dW5jdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBGdW5jdGlvbkltcCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBB
U1NFUlQoZXhlYy0+bWFjaGluZSgpKTsKICAgICByZXR1cm4gZXhlYy0+bWFjaGluZSgpLT5yZXRy
aWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKIH0KIAotSlNWYWx1ZSogRnVuY3Rpb25JbXA6
OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEZ1bmN0aW9uSW1wOjpjYWxs
ZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIEZ1bmN0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25JbXAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEFTU0VSVChleGVjLT5tYWNoaW5l
KCkpOwogICAgIHJldHVybiBleGVjLT5tYWNoaW5lKCktPnJldHJpZXZlQ2FsbGVyKGV4ZWMsIHRo
aXNPYmopOwogfQogCi1KU1ZhbHVlKiBGdW5jdGlvbkltcDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUqIEZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBGdW5jdGlvbklt
cCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+Ym9keS0+cGFyYW1ldGVycygpLnNpemUoKSk7
CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBBcmd1bWVudHM6Om1hcmsoKSAKICAgICBfYWN0aXZh
dGlvbk9iamVjdC0+bWFyaygpOwogfQogCi1KU1ZhbHVlKiBBcmd1bWVudHM6Om1hcHBlZEluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEFyZ3VtZW50czo6
bWFwcGVkSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgQXJndW1lbnRzKiB0aGlz
T2JqID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJu
IHRoaXNPYmotPl9hY3RpdmF0aW9uT2JqZWN0LT5nZXQoZXhlYywgdGhpc09iai0+aW5kZXhUb05h
bWVNYXBbcHJvcGVydHlOYW1lXSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkocmV2aXNpb24g
MzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtODYsOSArODYsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJpdmF0ZToKICAgICBTY29wZUNo
YWluIF9zY29wZTsKIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIEpTVmFsdWUqIGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwogICB9OwogCiAgIGNsYXNzIEluZGV4VG9OYW1lTWFwIHsKQEAgLTExNSw3ICsxMTUsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUqIG1hcHBlZEluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUqIG1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAg
SlNBY3RpdmF0aW9uKiBfYWN0aXZhdGlvbk9iamVjdDsKICAgICBtdXRhYmxlIEluZGV4VG9OYW1l
TWFwIGluZGV4VG9OYW1lTWFwOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CShyZXZpc2lvbiAzNDE1
MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTEw
OTQsMzQgKzEwOTQsMTEgQEAgU291cmNlRWxlbWVudDoKIAogc3RhdGljIEFkZE5vZGUqIG1ha2VB
ZGROb2RlKEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQpCiB7Ci0g
ICAgSlNUeXBlIHQxID0gbGVmdC0+ZXhwZWN0ZWRSZXR1cm5UeXBlKCk7Ci0gICAgSlNUeXBlIHQy
ID0gcmlnaHQtPmV4cGVjdGVkUmV0dXJuVHlwZSgpOwotCi0gICAgaWYgKHQxID09IE51bWJlclR5
cGUgJiYgdDIgPT0gTnVtYmVyVHlwZSkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGROdW1iZXJzTm9k
ZShsZWZ0LCByaWdodCk7Ci0gICAgaWYgKHQxID09IFN0cmluZ1R5cGUgJiYgdDIgPT0gU3RyaW5n
VHlwZSkKLSAgICAgICAgcmV0dXJuIG5ldyBBZGRTdHJpbmdzTm9kZShsZWZ0LCByaWdodCk7Ci0g
ICAgaWYgKHQxID09IFN0cmluZ1R5cGUpCi0gICAgICAgIHJldHVybiBuZXcgQWRkU3RyaW5nTGVm
dE5vZGUobGVmdCwgcmlnaHQpOwotICAgIGlmICh0MiA9PSBTdHJpbmdUeXBlKQotICAgICAgICBy
ZXR1cm4gbmV3IEFkZFN0cmluZ1JpZ2h0Tm9kZShsZWZ0LCByaWdodCk7CiAgICAgcmV0dXJuIG5l
dyBBZGROb2RlKGxlZnQsIHJpZ2h0KTsKIH0KIAogc3RhdGljIExlc3NOb2RlKiBtYWtlTGVzc05v
ZGUoRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKIHsKLSAgICBK
U1R5cGUgdDEgPSBsZWZ0LT5leHBlY3RlZFJldHVyblR5cGUoKTsKLSAgICBKU1R5cGUgdDIgPSBy
aWdodC0+ZXhwZWN0ZWRSZXR1cm5UeXBlKCk7Ci0gICAgCi0gICAgaWYgKHQxID09IFN0cmluZ1R5
cGUgJiYgdDIgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgcmV0dXJuIG5ldyBMZXNzU3RyaW5nc05v
ZGUobGVmdCwgcmlnaHQpOwotCi0gICAgLy8gVGhlcmUgYXJlIGNlcnRhaW5seSBtb3JlIGVmZmlj
aWVudCB3YXlzIHRvIGRvIHRoaXMgdHlwZSBjaGVjayBpZiBuZWNlc3NhcnkKLSAgICBpZiAodDEg
PT0gTnVtYmVyVHlwZSB8fCB0MSA9PSBCb29sZWFuVHlwZSB8fCB0MSA9PSBVbmRlZmluZWRUeXBl
IHx8IHQxID09IE51bGxUeXBlIHx8Ci0gICAgICAgIHQyID09IE51bWJlclR5cGUgfHwgdDIgPT0g
Qm9vbGVhblR5cGUgfHwgdDIgPT0gVW5kZWZpbmVkVHlwZSB8fCB0MiA9PSBOdWxsVHlwZSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBMZXNzTnVtYmVyc05vZGUobGVmdCwgcmlnaHQpOwotCi0gICAgLy8g
TmVpdGhlciBpcyBjZXJ0YWluIHRvIGJlIGEgbnVtYmVyLCBub3Igd2VyZSBib3RoIGNlcnRhaW4g
dG8gYmUgc3RyaW5ncywgc28gd2UgdXNlIHRoZSBkZWZhdWx0IChzbG93KSBpbXBsZW1lbnRhdGlv
bi4KICAgICByZXR1cm4gbmV3IExlc3NOb2RlKGxlZnQsIHJpZ2h0KTsKIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJuYWwuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9pbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDExIEBAIEpTT2JqZWN0
KiBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gbmV3IFN0cmluZ0lu
c3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCksIGNv
bnN0X2Nhc3Q8U3RyaW5nSW1wKj4odGhpcykpOwogfQogCitKU09iamVjdCogU3RyaW5nSW1wOjp0
b1RoaXNPYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBuZXcgU3Ry
aW5nSW5zdGFuY2UoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUo
KSwgY29uc3RfY2FzdDxTdHJpbmdJbXAqPih0aGlzKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEpTVHlwZSBOdW1iZXJJbXA6OnR5cGUoKSBjb25zdApAQCAtMTI2LDYgKzEzMSwx
MyBAQCBKU09iamVjdCAqTnVtYmVySW1wOjp0b09iamVjdChFeGVjU3RhdGUgCiAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU09iamVjdCAqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
ckNvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKIH0KIAorSlNPYmplY3QqIE51
bWJlckltcDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBMaXN0
IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoY29uc3RfY2FzdDxOdW1iZXJJbXAqPih0aGlzKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5udW1iZXJDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgYXJncykpOworfQorCiBi
b29sIE51bWJlckltcDo6Z2V0VUludDMyKHVpbnQzMl90JiB1aW50MzIpIGNvbnN0CiB7CiAgICAg
dWludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbCk7CkBAIC0xOTcsNiArMjA5LDM0IEBA
IEpTT2JqZWN0ICpHZXR0ZXJTZXR0ZXJJbXA6OnRvT2JqZWN0KEV4ZWMKICAgICByZXR1cm4ganNO
dWxsKCktPnRvT2JqZWN0KGV4ZWMpOwogfQogCitib29sIEdldHRlclNldHRlckltcDo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBHZXR0ZXJTZXR0ZXJJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNp
Z25lZCwgUHJvcGVydHlTbG90JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR2V0dGVyU2V0dGVySW1wOjpwdXQoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEdldHRlclNldHRlckltcDo6cHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBK
U1ZhbHVlKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSlNPYmplY3QqIEdl
dHRlclNldHRlckltcDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBMYWJlbFN0YWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIGJvb2wgTGFiZWxTdGFjazo6cHVzaChjb25zdCBJZGVudGlmaWVyICZpZCkKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcm5hbC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3Q7CiAgICAgdmlydHVhbCBKU09iamVjdCAqdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25z
dDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAg
CisgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0Owor
CiAgICAgVVN0cmluZyB2YWw7CiAgIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9sZXhl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmNwcAkocmV2aXNp
b24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNiArMTAxLDI0IEBAIExleGVyOjp+TGV4ZXIoKQogICAgIGRlbGV0ZVtdIG1haW5U
YWJsZS50YWJsZTsKIH0KIAoraW5saW5lIHZvaWQgTGV4ZXI6OnNoaWZ0KCkKK3sKKyAgICAvLyBF
Q01BLTI2MiBjYWxscyBmb3Igc3RyaXBwaW5nIENmIGNoYXJhY3RlcnMgaGVyZSwgYnV0IHdlIG9u
bHkgZG8gdGhpcyBmb3IgQk9NLAorICAgIC8vIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5MzE+LgorCisgICAgY3VycmVudCA9IG5leHQxOworICAgIG5leHQx
ID0gbmV4dDI7CisgICAgbmV4dDIgPSBuZXh0MzsKKyAgICBkbyB7CisgICAgICAgIGlmIChwb3Mg
Pj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICAgIG5leHQzID0gLTE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBuZXh0MyA9IGNvZGVbcG9z
KytdOworICAgIH0gd2hpbGUgKG5leHQzID09IDB4RkVGRik7Cit9CisKIHZvaWQgTGV4ZXI6OnNl
dENvZGUoaW50IHN0YXJ0aW5nTGluZU51bWJlciwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlKQogewogICAgIHl5bGluZW5vID0gMSArIHN0YXJ0aW5nTGluZU51bWJlcjsKQEAgLTEy
MCwyNyArMTM4LDEwIEBAIHZvaWQgTGV4ZXI6OnNldENvZGUoaW50IHN0YXJ0aW5nTGluZU51bWIK
ICAgICBhdExpbmVTdGFydCA9IHRydWU7CiAKICAgICAvLyByZWFkIGZpcnN0IGNoYXJhY3RlcnMK
LSAgICBzaGlmdCg0KTsKLX0KLQotdm9pZCBMZXhlcjo6c2hpZnQodW5zaWduZWQgcCkKLXsKLSAg
ICAvLyBFQ01BLTI2MiBjYWxscyBmb3Igc3RyaXBwaW5nIENmIGNoYXJhY3RlcnMgaGVyZSwgYnV0
IHdlIG9ubHkgZG8gdGhpcyBmb3IgQk9NLAotICAgIC8vIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzE+LgotCi0gICAgd2hpbGUgKHAtLSkgewotICAgICAg
ICBjdXJyZW50ID0gbmV4dDE7Ci0gICAgICAgIG5leHQxID0gbmV4dDI7Ci0gICAgICAgIG5leHQy
ID0gbmV4dDM7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChwb3MgPj0gbGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgbmV4dDMgPSAtMTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5leHQzID0g
Y29kZVtwb3MrK107Ci0gICAgICAgIH0gd2hpbGUgKG5leHQzID09IDB4RkVGRik7Ci0gICAgfQor
ICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiB9
CiAKIC8vIGNhbGxlZCBvbiBlYWNoIG5ldyBsaW5lCkBAIC0xODcsMTcgKzE4OCwxNyBAQCBpbnQg
TGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgewogICAgICAgICBza2lwTEYgPSBm
YWxzZTsKICAgICAgICAgc2tpcENSID0gZmFsc2U7Ci0gICAgICAgIHNoaWZ0KDEpOworICAgICAg
ICBzaGlmdCgpOwogICAgIH0KICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBTdGFydDoK
ICAgICAgIGlmIChpc1doaXRlU3BhY2UoKSkgewogICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gJy8nICYmIG5leHQxID09ICcvJykgewotICAgICAgICBz
aGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgICAgc3RhdGUgPSBJblNpbmdsZUxpbmVD
b21tZW50OwogICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09ICcvJyAmJiBuZXh0MSA9PSAnKicp
IHsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgIHN0YXRlID0g
SW5NdWx0aUxpbmVDb21tZW50OwogICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09IC0xKSB7CiAg
ICAgICAgIGlmICghdGVybWluYXRvciAmJiAhZGVsaW1pdGVkKSB7CkBAIC0yMzQsMjUgKzIzNSwy
NyBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgICAgIC8vIDwhLS0g
bWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgY29tbWVudCAoZm9yIHd3dyB1c2FnZSkKICAg
ICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnPCcgJiYgbmV4dDEgPT0gJyEnICYmCiAgICAgICAg
ICAgICAgICAgIG5leHQyID09ICctJyAmJiBuZXh0MyA9PSAnLScpIHsKLSAgICAgICAgc2hpZnQo
Myk7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNoaWZ0KCk7
CiAgICAgICAgIHN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKICAgICAgICAgLy8gc2FtZSBm
b3IgLS0+CiAgICAgICB9IGVsc2UgaWYgKGF0TGluZVN0YXJ0ICYmIGN1cnJlbnQgPT0gJy0nICYm
IG5leHQxID09ICctJyAmJiAgbmV4dDIgPT0gJz4nKSB7Ci0gICAgICAgIHNoaWZ0KDIpOworICAg
ICAgICBzaGlmdCgpOworICAgICAgICBzaGlmdCgpOwogICAgICAgICBzdGF0ZSA9IEluU2luZ2xl
TGluZUNvbW1lbnQ7CiAgICAgICB9IGVsc2UgewogICAgICAgICB0b2tlbiA9IG1hdGNoUHVuY3R1
YXRvcihsdmFscC0+aW50VmFsdWUsIGN1cnJlbnQsIG5leHQxLCBuZXh0MiwgbmV4dDMpOwogICAg
ICAgICBpZiAodG9rZW4gIT0gLTEpIHsKICAgICAgICAgICBzZXREb25lKE90aGVyKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyAgICAgIGNlcnIgPDwgImVuY291bnRlcmVkIHVua25v
d24gY2hhcmFjdGVyIiA8PCBlbmRsOwogICAgICAgICAgIHNldERvbmUoQmFkKTsKICAgICAgICAg
fQogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblN0cmluZzoKICAgICAgIGlmIChj
dXJyZW50ID09IHN0cmluZ1R5cGUpIHsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0
KCk7CiAgICAgICAgIHNldERvbmUoU3RyaW5nKTsKICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVy
bWluYXRvcigpIHx8IGN1cnJlbnQgPT0gLTEpIHsKICAgICAgICAgc2V0RG9uZShCYWQpOwpAQCAt
MjY1LDE0ICsyNjgsMTQgQEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAg
IC8vIEVzY2FwZSBTZXF1ZW5jZXMgaW5zaWRlIG9mIHN0cmluZ3MKICAgICBjYXNlIEluRXNjYXBl
U2VxdWVuY2U6CiAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGN1cnJlbnQpKSB7Ci0gICAgICAgIGlm
IChjdXJyZW50ID49ICcwJyAmJiBjdXJyZW50IDw9ICczJyAmJgotICAgICAgICAgICAgaXNPY3Rh
bERpZ2l0KG5leHQxKSAmJiBpc09jdGFsRGlnaXQobmV4dDIpKSB7CisgICAgICAgIGlmIChjdXJy
ZW50ID49ICcwJyAmJiBjdXJyZW50IDw9ICczJyAmJiBpc09jdGFsRGlnaXQobmV4dDEpICYmIGlz
T2N0YWxEaWdpdChuZXh0MikpIHsKICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwoY3Vy
cmVudCwgbmV4dDEsIG5leHQyKSk7Ci0gICAgICAgICAgc2hpZnQoMik7CisgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICBzaGlmdCgpOwogICAgICAgICAgIHN0YXRlID0gSW5TdHJpbmc7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNPY3RhbERpZ2l0KGN1cnJlbnQpICYmIGlzT2N0YWxEaWdpdChu
ZXh0MSkpIHsKICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwoJzAnLCBjdXJyZW50LCBu
ZXh0MSkpOwotICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgIHNoaWZ0KCk7CiAgICAgICAg
ICAgc3RhdGUgPSBJblN0cmluZzsKICAgICAgICAgfSBlbHNlIGlmIChpc09jdGFsRGlnaXQoY3Vy
cmVudCkpIHsKICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwoJzAnLCAnMCcsIGN1cnJl
bnQpKTsKQEAgLTI5NiwxMCArMjk5LDEwIEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lk
KiBwMikKICAgICAgIGlmIChpc0hleERpZ2l0KGN1cnJlbnQpICYmIGlzSGV4RGlnaXQobmV4dDEp
KSB7CiAgICAgICAgIHN0YXRlID0gSW5TdHJpbmc7CiAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRI
ZXgoY3VycmVudCwgbmV4dDEpKTsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0KCk7
CiAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gc3RyaW5nVHlwZSkgewogICAgICAgICByZWNv
cmQxNigneCcpOwotICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgICAg
c2V0RG9uZShTdHJpbmcpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgcmVjb3JkMTYoJ3gnKTsK
QEAgLTMxMCwxMSArMzEzLDEzIEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lkKiBwMikK
ICAgICBjYXNlIEluVW5pY29kZUVzY2FwZToKICAgICAgIGlmIChpc0hleERpZ2l0KGN1cnJlbnQp
ICYmIGlzSGV4RGlnaXQobmV4dDEpICYmIGlzSGV4RGlnaXQobmV4dDIpICYmIGlzSGV4RGlnaXQo
bmV4dDMpKSB7CiAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRVbmljb2RlKGN1cnJlbnQsIG5leHQx
LCBuZXh0MiwgbmV4dDMpKTsKLSAgICAgICAgc2hpZnQoMyk7CisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNoaWZ0KCk7CiAgICAgICAgIHN0YXRlID0gSW5TdHJp
bmc7CiAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gc3RyaW5nVHlwZSkgewogICAgICAgICBy
ZWNvcmQxNigndScpOwotICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAg
ICAgc2V0RG9uZShTdHJpbmcpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0RG9uZShCYWQp
OwpAQCAtMzQwLDcgKzM0NSw3IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lkKiBwMikK
ICAgICAgICAgbmV4dExpbmUoKTsKICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnKicgJiYg
bmV4dDEgPT0gJy8nKSB7CiAgICAgICAgIHN0YXRlID0gU3RhcnQ7Ci0gICAgICAgIHNoaWZ0KDEp
OworICAgICAgICBzaGlmdCgpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbklk
ZW50aWZpZXJPcktleXdvcmQ6CkBAIC00NDMsNyArNDQ4LDkgQEAgaW50IExleGVyOjpsZXgodm9p
ZCogcDEsIHZvaWQqIHAyKQogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIHRva2VuID0g
Y29udmVydFVuaWNvZGUoY3VycmVudCwgbmV4dDEsIG5leHQyLCBuZXh0Myk7Ci0gICAgICBzaGlm
dCgzKTsKKyAgICAgIHNoaWZ0KCk7CisgICAgICBzaGlmdCgpOworICAgICAgc2hpZnQoKTsKICAg
ICAgIGlmICghaXNJZGVudFN0YXJ0KHRva2VuKSkgewogICAgICAgICBzZXREb25lKEJhZCk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDU3LDcgKzQ2NCw5IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAx
LCB2b2lkKiBwMikKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICB0b2tlbiA9IGNvbnZl
cnRVbmljb2RlKGN1cnJlbnQsIG5leHQxLCBuZXh0MiwgbmV4dDMpOwotICAgICAgc2hpZnQoMyk7
CisgICAgICBzaGlmdCgpOworICAgICAgc2hpZnQoKTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICBp
ZiAoIWlzSWRlbnRQYXJ0KHRva2VuKSkgewogICAgICAgICBzZXREb25lKEJhZCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtNDcxLDcgKzQ4MCw3IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lk
KiBwMikKIAogICAgIC8vIG1vdmUgb24gdG8gdGhlIG5leHQgY2hhcmFjdGVyCiAgICAgaWYgKCFk
b25lKQotICAgICAgc2hpZnQoMSk7CisgICAgICBzaGlmdCgpOwogICAgIGlmIChzdGF0ZSAhPSBT
dGFydCAmJiBzdGF0ZSAhPSBJblNpbmdsZUxpbmVDb21tZW50KQogICAgICAgYXRMaW5lU3RhcnQg
PSBmYWxzZTsKICAgfQpAQCAtNjQ4LDgyICs2NTcsMTM2IEBAIGJvb2wgTGV4ZXI6OmlzT2N0YWxE
aWdpdChpbnQgYykKIGludCBMZXhlcjo6bWF0Y2hQdW5jdHVhdG9yKGludCYgY2hhclBvcywgaW50
IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0KQogewogICBpZiAoYzEgPT0gJz4nICYmIGMyID09
ICc+JyAmJiBjMyA9PSAnPicgJiYgYzQgPT0gJz0nKSB7Ci0gICAgc2hpZnQoNCk7CisgICAgc2hp
ZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1
cm4gVVJTSElGVEVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc9JyAmJiBjMiA9PSAnPScgJiYg
YzMgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMyk7CisgIH0KKyAgaWYgKGMxID09ICc9JyAmJiBjMiA9
PSAnPScgJiYgYzMgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNo
aWZ0KCk7CiAgICAgcmV0dXJuIFNUUkVROwotICB9IGVsc2UgaWYgKGMxID09ICchJyAmJiBjMiA9
PSAnPScgJiYgYzMgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMyk7CisgIH0KKyAgaWYgKGMxID09ICch
JyAmJiBjMiA9PSAnPScgJiYgYzMgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIFNUUk5FUTsKLSAgIH0gZWxzZSBpZiAoYzEgPT0g
Jz4nICYmIGMyID09ICc+JyAmJiBjMyA9PSAnPicpIHsKLSAgICBzaGlmdCgzKTsKKyAgIH0KKyAg
IGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz4nICYmIGMzID09ICc+JykgeworICAgIHNoaWZ0KCk7
CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBVUlNISUZUOwotICB9IGVs
c2UgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAnPCcgJiYgYzMgPT0gJz0nKSB7Ci0gICAgc2hpZnQo
Myk7CisgIH0KKyAgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAnPCcgJiYgYzMgPT0gJz0nKSB7Cisg
ICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIExTSElG
VEVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicgJiYgYzMgPT0gJz0n
KSB7Ci0gICAgc2hpZnQoMyk7CisgIH0KKyAgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicgJiYg
YzMgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAg
ICAgcmV0dXJuIFJTSElGVEVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAn
PScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc9Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTEU7Ci0gIH0gZWxzZSBp
ZiAoYzEgPT0gJz4nICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChj
MSA9PSAnPicgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAg
IHJldHVybiBHRTsKLSAgfSBlbHNlIGlmIChjMSA9PSAnIScgJiYgYzIgPT0gJz0nKSB7Ci0gICAg
c2hpZnQoMik7CisgIH0KKyAgaWYgKGMxID09ICchJyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlm
dCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIE5FOwotICB9IGVsc2UgaWYgKGMxID09ICcr
JyAmJiBjMiA9PSAnKycpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJysnICYm
IGMyID09ICcrJykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICBpZiAodGVybWlu
YXRvcikKICAgICAgIHJldHVybiBBVVRPUExVU1BMVVM7CiAgICAgZWxzZQogICAgICAgcmV0dXJu
IFBMVVNQTFVTOwotICB9IGVsc2UgaWYgKGMxID09ICctJyAmJiBjMiA9PSAnLScpIHsKLSAgICBz
aGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJy0nICYmIGMyID09ICctJykgeworICAgIHNoaWZ0
KCk7CisgICAgc2hpZnQoKTsKICAgICBpZiAodGVybWluYXRvcikKICAgICAgIHJldHVybiBBVVRP
TUlOVVNNSU5VUzsKICAgICBlbHNlCiAgICAgICByZXR1cm4gTUlOVVNNSU5VUzsKLSAgfSBlbHNl
IGlmIChjMSA9PSAnPScgJiYgYzIgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAgaWYg
KGMxID09ICc9JyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAg
ICAgcmV0dXJuIEVRRVE7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJysnICYmIGMyID09ICc9Jykgewot
ICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnKycgJiYgYzIgPT0gJz0nKSB7CisgICAg
c2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBQTFVTRVFVQUw7Ci0gIH0gZWxzZSBp
ZiAoYzEgPT0gJy0nICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChj
MSA9PSAnLScgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAg
IHJldHVybiBNSU5VU0VRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICcqJyAmJiBjMiA9PSAnPScp
IHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJyonICYmIGMyID09ICc9Jykgewor
ICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTVVMVEVRVUFMOwotICB9IGVs
c2UgaWYgKGMxID09ICcvJyAmJiBjMiA9PSAnPScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBp
ZiAoYzEgPT0gJy8nICYmIGMyID09ICc9JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsK
ICAgICByZXR1cm4gRElWRVFVQUw7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJyYnICYmIGMyID09ICc9
JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnJicgJiYgYzIgPT0gJz0nKSB7
CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBBTkRFUVVBTDsKLSAgfSBl
bHNlIGlmIChjMSA9PSAnXicgJiYgYzIgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAg
aWYgKGMxID09ICdeJyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7
CiAgICAgcmV0dXJuIFhPUkVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICclJyAmJiBjMiA9PSAn
PScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJyUnICYmIGMyID09ICc9Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTU9ERVFVQUw7Ci0gIH0g
ZWxzZSBpZiAoYzEgPT0gJ3wnICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9Cisg
IGlmIChjMSA9PSAnfCcgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OwogICAgIHJldHVybiBPUkVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAn
PCcpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc8Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTFNISUZUOwotICB9IGVs
c2UgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBp
ZiAoYzEgPT0gJz4nICYmIGMyID09ICc+JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsK
ICAgICByZXR1cm4gUlNISUZUOwotICB9IGVsc2UgaWYgKGMxID09ICcmJyAmJiBjMiA9PSAnJicp
IHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJyYnICYmIGMyID09ICcmJykgewor
ICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gQU5EOwotICB9IGVsc2UgaWYg
KGMxID09ICd8JyAmJiBjMiA9PSAnfCcpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEg
PT0gJ3wnICYmIGMyID09ICd8JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICBy
ZXR1cm4gT1I7CiAgIH0KIApAQCAtNzUwLDE1ICs4MTMsMTUgQEAgaW50IExleGVyOjptYXRjaFB1
bmN0dWF0b3IoaW50JiBjaGFyUG9zLAogICAgIGNhc2UgJ1snOgogICAgIGNhc2UgJ10nOgogICAg
IGNhc2UgJzsnOgotICAgICAgc2hpZnQoMSk7CisgICAgICBzaGlmdCgpOwogICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oYzEpOwogICAgIGNhc2UgJ3snOgogICAgICAgY2hhclBvcyA9IHBv
cyAtIDQ7Ci0gICAgICBzaGlmdCgxKTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICByZXR1cm4gT1BF
TkJSQUNFOwogICAgIGNhc2UgJ30nOgogICAgICAgY2hhclBvcyA9IHBvcyAtIDQ7Ci0gICAgICBz
aGlmdCgxKTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICByZXR1cm4gQ0xPU0VCUkFDRTsKICAgICBk
ZWZhdWx0OgogICAgICAgcmV0dXJuIC0xOwpAQCAtODQ1LDcgKzkwOCw3IEBAIGJvb2wgTGV4ZXI6
OnNjYW5SZWdFeHAoKQogICB3aGlsZSAoMSkgewogICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKCkg
fHwgY3VycmVudCA9PSAtMSkKICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbHNlIGlmIChjdXJy
ZW50ICE9ICcvJyB8fCBsYXN0V2FzRXNjYXBlID09IHRydWUgfHwgaW5CcmFja2V0cyA9PSB0cnVl
KQorICAgIGlmIChjdXJyZW50ICE9ICcvJyB8fCBsYXN0V2FzRXNjYXBlID09IHRydWUgfHwgaW5C
cmFja2V0cyA9PSB0cnVlKQogICAgIHsKICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiAnWycgYW5k
ICddJwogICAgICAgICBpZiAoIWxhc3RXYXNFc2NhcGUpIHsKQEAgLTg1NSwyMCArOTE4LDE5IEBA
IGJvb2wgTGV4ZXI6OnNjYW5SZWdFeHAoKQogICAgICAgICAgICAgaW5CcmFja2V0cyA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIHJlY29yZDE2KGN1cnJlbnQpOwotICAgICAgICBsYXN0V2Fz
RXNjYXBlID0KLSAgICAgICAgICAgICFsYXN0V2FzRXNjYXBlICYmIChjdXJyZW50ID09ICdcXCcp
OworICAgICAgICBsYXN0V2FzRXNjYXBlID0gIWxhc3RXYXNFc2NhcGUgJiYgKGN1cnJlbnQgPT0g
J1xcJyk7CiAgICAgfSBlbHNlIHsgLy8gZW5kIG9mIHJlZ2V4cAogICAgICAgICBtX3BhdHRlcm4g
PSBVU3RyaW5nKG1fYnVmZmVyMTYpOwogICAgICAgICBtX2J1ZmZlcjE2LmNsZWFyKCk7Ci0gICAg
ICAgIHNoaWZ0KDEpOworICAgICAgICBzaGlmdCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgc2hpZnQoMSk7CisgICAgc2hpZnQoKTsKICAgfQogCiAgIHdoaWxlIChpc0lkZW50UGFydChj
dXJyZW50KSkgewogICAgIHJlY29yZDE2KGN1cnJlbnQpOwotICAgIHNoaWZ0KDEpOworICAgIHNo
aWZ0KCk7CiAgIH0KICAgbV9mbGFncyA9IFVTdHJpbmcobV9idWZmZXIxNik7CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9sZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9sZXhlci5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
U3RhdGUgc3RhdGU7CiAgICAgdm9pZCBzZXREb25lKFN0YXRlKTsKICAgICB1bnNpZ25lZCBpbnQg
cG9zOwotICAgIHZvaWQgc2hpZnQodW5zaWduZWQgaW50IHApOworICAgIHZvaWQgc2hpZnQoKTsK
ICAgICB2b2lkIG5leHRMaW5lKCk7CiAgICAgaW50IGxvb2t1cEtleXdvcmQoY29uc3QgY2hhciAq
KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvbG9va3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAqIEBpbnRlcm5hbAogICAgKiBIZWxwZXIgZm9yIGdldFN0YXRpY0Z1bmN0
aW9uU2xvdCBhbmQgZ2V0U3RhdGljUHJvcGVydHlTbG90CiAgICAqLwotICBpbmxpbmUgSlNWYWx1
ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorICBp
bmxpbmUgSlNWYWx1ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAg
ewogICAgICAgLy8gTG9vayBmb3IgY2FjaGVkIHZhbHVlIGluIGR5bmFtaWMgbWFwIG9mIHByb3Bl
cnRpZXMgKGluIEpTT2JqZWN0KQogICAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBzbG90LnNsb3RC
YXNlKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqIEhlbHBlciBm
b3IgZ2V0U3RhdGljVmFsdWVTbG90IGFuZCBnZXRTdGF0aWNQcm9wZXJ0eVNsb3QKICAgICovCiAg
IHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgotICBpbmxpbmUgSlNWYWx1ZSogc3RhdGljVmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCisgIGlubGluZSBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiAgIHsKICAgICAgIFRoaXNJbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxUaGlzSW1w
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBzbG90
LnN0YXRpY0VudHJ5KCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5jcHAJKHJldmlz
aW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAwLDkgKzIwMCw5IEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNQb3coRXhl
Y1N0YXRlKiBleGUKICAgICBkb3VibGUgYXJnMiA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwog
CiAgICAgaWYgKGlzbmFuKGFyZzIpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoTmFOKTsKKyAg
ICAgICAgcmV0dXJuIGpzTmFOKCk7CiAgICAgaWYgKGlzaW5mKGFyZzIpICYmIGZhYnMoYXJnKSA9
PSAxKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoTmFOKTsKKyAgICAgICAgcmV0dXJuIGpzTmFO
KCk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHBvdyhhcmcsIGFyZzIpKTsKIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE5ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBLSlMg
ewogCi1jbGFzcyBGdW5jdGlvbkJvZHlOb2RlV2l0aERlYnVnZ2VySG9va3MgOiBwdWJsaWMgRnVu
Y3Rpb25Cb2R5Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgRnVuY3Rpb25Cb2R5Tm9kZVdpdGhEZWJ1Z2dl
ckhvb2tzKFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1
c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBK
U1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LX07Ci0KLSNpZiBDT01QSUxFUihHQ0MpCi0jZGVmaW5lIFVOTElLRUxZKHgpIFwKLSAgX19idWls
dGluX2V4cGVjdCAoKHgpLCAwKQotI2Vsc2UKLSNkZWZpbmUgVU5MSUtFTFkoeCkgeAotI2VuZGlm
Ci0gICAgCiAjZGVmaW5lIEtKU19DSEVDS0VYQ0VQVElPTiBcCiBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKSBcCiAgICAgcmV0dXJuIHJldGhyb3dFeGNlcHRpb24oZXhlYyk7CkBA
IC04NiwyNiArNzMsNiBAQCBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7IFwK
ICAgICByZXR1cm47IFwKIH0KIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBjYW5Ta2lwTG9va3VwKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICAvLyBTdGF0aWMgbG9va3VwIGluIEV2YWxDb2RlIGlz
IGltcG9zc2libGUgYmVjYXVzZSB2YXJpYWJsZXMgYXJlbid0IERvbnREZWxldGUuCi0gICAgLy8g
U3RhdGljIGxvb2t1cCBpbiBHbG9iYWxDb2RlIG1heSBiZSBwb3NzaWJsZSwgYnV0IHdlIGhhdmVu
J3QgaW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgaXQgeWV0LgotICAgIGlmIChleGVjLT5jb2RlVHlw
ZSgpICE9IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU3Rh
dGljIGxvb2t1cCBpcyBpbXBvc3NpYmxlIHdoZW4gc29tZXRoaW5nIGR5bmFtaWMgaGFzIGJlZW4g
YWRkZWQgdG8gdGhlIGZyb250IG9mIHRoZSBzY29wZSBjaGFpbi4KLSAgICBpZiAoZXhlYy0+dmFy
aWFibGVPYmplY3QoKSAhPSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIFN0YXRpYyBsb29rdXAgaXMgaW1wb3NzaWJsZSBpZiB0aGUgc3lt
Ym9sIGlzbid0IHN0YXRpY2FsbHkgZGVjbGFyZWQuCi0gICAgaWYgKCFleGVjLT52YXJpYWJsZU9i
amVjdCgpLT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKGlkZW50LnVzdHJpbmcoKS5yZXAoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0NvbnN0YW50KGNvbnN0IExvY2FsU3RvcmFnZSYgbG9jYWxTdG9y
YWdlLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgbG9jYWxTdG9yYWdlLnNp
emUoKSk7CkBAIC0yMzUsMzQgKzIwMiw2IEBAIE5vZGU6Ok5vZGUoSlNUeXBlIGV4cGVjdGVkUmV0
dXJuKQogICAgIG1fbGluZSA9IGxleGVyKCkubGluZU5vKCk7CiB9CiAKLWRvdWJsZSBFeHByZXNz
aW9uTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2YWx1ZS0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJv
b2wgRXhwcmVzc2lvbk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2YWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpOwotfQotCi1pbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdmFsdWUt
PnRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZh
bHVlID0gZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAg
cmV0dXJuIHZhbHVlLT50b1VJbnQzMihleGVjKTsKLX0KLQogc3RhdGljIHZvaWQgc3Vic3RpdHV0
ZShVU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmluZykgS0pTX0ZBU1RfQ0FM
TDsKIHN0YXRpYyB2b2lkIHN1YnN0aXR1dGUoVVN0cmluZyYgc3RyaW5nLCBjb25zdCBVU3RyaW5n
JiBzdWJzdHJpbmcpCiB7CkBAIC0yODgsMTA1ICsyMjcsNiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0
IFVTdHJpbmcgY3VycmVudFNvdXJjCiAgICAgcmV0dXJuIFVTdHJpbmcoKTsKIH0KIAotSlNWYWx1
ZSogTm9kZTo6c2V0RXJyb3JDb21wbGV0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnKQotewotICAgIHJldHVybiBleGVjLT5zZXRU
aHJvd0NvbXBsZXRpb24oRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtc2csIGxpbmVObygpLCBjdXJy
ZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpKTsKLX0KLQotSlNWYWx1
ZSogTm9kZTo6c2V0RXJyb3JDb21wbGV0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
LXsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7Ci0gICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBp
ZGVudC51c3RyaW5nKCkpOwotICAgIHJldHVybiBleGVjLT5zZXRUaHJvd0NvbXBsZXRpb24oRXJy
b3I6OmNyZWF0ZShleGVjLCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4
ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4ZWMpKSk7Ci19Ci0KLUpTVmFsdWUqIE5vZGU6OnRocm93
RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBj
aGFyKiBtc2cpCi17Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtc2csIGxp
bmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwot
fQotCi1KU1ZhbHVlKiBOb2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBjb25zdCBjaGFyKiBzdHJpbmcpCi17
Ci0gICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwotICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgc3Ry
aW5nKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVO
bygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQot
Ci1KU1ZhbHVlKiBOb2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2LCBOb2RlKiBleHByKQot
ewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIHYt
PnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGV4cHItPnRvU3RyaW5n
KCkpOwotICAgIHJldHVybiBLSlM6OnRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSwgbGluZU5v
KCksIGN1cnJlbnRTb3VyY2VJZChleGVjKSwgY3VycmVudFNvdXJjZVVSTChleGVjKSk7Ci19Ci0K
LUpTVmFsdWUqIE5vZGU6OnRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMs
IEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQot
ewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxh
YmVsLnVzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNz
YWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4
ZWMpKTsKLX0KLQotSlNWYWx1ZSogTm9kZTo6dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdiwgTm9k
ZSogZTEsIE5vZGUqIGUyKQotewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJz
dGl0dXRlKG1lc3NhZ2UsIHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3Nh
Z2UsIGUxLT50b1N0cmluZygpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGUyLT50b1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVO
bygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQot
Ci1KU1ZhbHVlKiBOb2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2LCBOb2RlKiBleHByLCBj
b25zdCBJZGVudGlmaWVyJiBsYWJlbCkKLXsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7Ci0g
ICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7Ci0gICAgc3Vic3RpdHV0
ZShtZXNzYWdlLCBleHByLT50b1N0cmluZygpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxh
YmVsLnVzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNz
YWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4
ZWMpKTsKLX0KLQotSlNWYWx1ZSogTm9kZTo6dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdiwgY29u
c3QgSWRlbnRpZmllciYgbGFiZWwpCi17Ci0gICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwotICAg
IHN1YnN0aXR1dGUobWVzc2FnZSwgdi0+dG9TdHJpbmcoZXhlYykpOwotICAgIHN1YnN0aXR1dGUo
bWVzc2FnZSwgbGFiZWwudXN0cmluZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4
ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRT
b3VyY2VVUkwoZXhlYykpOwotfQotCi1KU1ZhbHVlKiBOb2RlOjp0aHJvd1VuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQotewotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAi
Q2FuJ3QgZmluZCB2YXJpYWJsZTogJXMiLCBpZGVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6aGFuZGxl
RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGhhbmRsZUV4
Y2VwdGlvbihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7Ci19Ci0KLXZvaWQgTm9kZTo6aGFuZGxl
RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBleGNlcHRp
b25WYWx1ZSkKLXsKLSAgICBpZiAoZXhjZXB0aW9uVmFsdWUtPmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgImxpbmUi
KSAmJiAhZXhjZXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCAic291cmNlVVJMIikpIHsKLSAgICAg
ICAgICAgIGV4Y2VwdGlvbi0+cHV0KGV4ZWMsICJsaW5lIiwganNOdW1iZXIobV9saW5lKSk7Ci0g
ICAgICAgICAgICBleGNlcHRpb24tPnB1dChleGVjLCAic291cmNlVVJMIiwganNTdHJpbmcoY3Vy
cmVudFNvdXJjZVVSTChleGVjKSkpOwotICAgICAgICB9Ci0gICAgfQotI2lmIDAKLSAgICBEZWJ1
Z2dlciogZGJnID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAg
IGlmIChkYmcgJiYgIWRiZy0+aGFzSGFuZGxlZEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1
ZSkpCi0gICAgICAgIGRiZy0+ZXhjZXB0aW9uKGV4ZWMsIGN1cnJlbnRTb3VyY2VJZChleGVjKSwg
bV9saW5lLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKLX0KLQotTkVWRVJfSU5MSU5FIEpTVmFs
dWUqIE5vZGU6OnJldGhyb3dFeGNlcHRpb24oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKLSAgICByZXR1cm4gZXhlYy0+c2V0VGhyb3dDb21wbGV0aW9uKGV4Y2VwdGlvbik7Ci19Ci0K
IFJlZ2lzdGVySUQqIE5vZGU6OmVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZykKIHsKICAgICBSZWdpc3RlcklEKiBleGNl
cHRpb24gPSBnZW5lcmF0b3IuZW1pdE5ld0Vycm9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
ZSwganNTdHJpbmcobXNnKSk7CkBAIC00MzUsMjEgKzI3NSwxMSBAQCBCcmVha3BvaW50Q2hlY2tT
dGF0ZW1lbnQ6OkJyZWFrcG9pbnRDaGVjCiAgICAgQVNTRVJUKG1fc3RhdGVtZW50KTsKIH0KIAot
SlNWYWx1ZSogQnJlYWtwb2ludENoZWNrU3RhdGVtZW50OjpleGVjdXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX3N0YXRlbWVudC0+ZXhlY3V0ZShleGVj
KTsKLX0KLQogdm9pZCBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQ6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgc3RyZWFtKSBjb25zdAogewogICAgIG1fc3RhdGVtZW50LT5zdHJlYW1UbyhzdHJlYW0p
OwogfQogCi12b2lkIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX3N0YXRlbWVudC5nZXQoKSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBOdWxsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFJlZ2lzdGVySUQqIE51bGxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1NywxMSArMjg3LDYgQEAgUmVnaXN0ZXJJRCogTnVsbE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwganNOdWxsKCkpOwogfQogCi1KU1ZhbHVlKiBO
dWxsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqICkKLXsKLSAgICByZXR1
cm4ganNOdWxsKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGYWxz
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBG
YWxzZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQpAQCAtNDY5LDExICsyOTQsNiBAQCBSZWdpc3RlcklEKiBGYWxzZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEZhbHNlTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oZmFs
c2UpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJ1ZU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBUcnVlTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00
ODEsMTEgKzMwMSw2IEBAIFJlZ2lzdGVySUQqIFRydWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXIK
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHRydWUpOwogfQogCi1KU1ZhbHVlKiBUcnVlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7Ci19Ci0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIE51bWJlck5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDkzLDUzICsz
MDgsNiBAQCBSZWdpc3RlcklEKiBOdW1iZXJOb2RlOjplbWl0Q29kZShDb2RlR2VuCiAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBt
X2RvdWJsZSk7CiB9CiAKLUpTVmFsdWUqIE51bWJlck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikKLXsKLSAgICAvLyBOdW1iZXIgbm9kZXMgYXJlIG9ubHkgY3JlYXRlZCB3
aGVuIHRoZSBudW1iZXIgY2FuJ3QgZml0IGluIGEgSlNJbW1lZGlhdGUsIHNvIG5vIG5lZWQgdG8g
Y2hlY2sgYWdhaW4uCi0gICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChtX2RvdWJsZSk7Ci19Ci0KLWRv
dWJsZSBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikKLXsKLSAgICByZXR1cm4gbV9kb3VibGU7Ci19Ci0KLWJvb2wgTnVtYmVyTm9kZTo6ZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBtX2Rv
dWJsZSA8IDAuMCB8fCBtX2RvdWJsZSA+IDAuMDsgLy8gZmFsc2UgZm9yIE5hTiBhcyB3ZWxsIGFz
IDAKLX0KLQotaW50MzJfdCBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKG1fZG91YmxlKTsK
LX0KLQotdWludDMyX3QgTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvVUludDMyKG1fZG91YmxlKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltbWVkaWF0ZU51bWJlck5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSogSW1tZWRp
YXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAg
IHJldHVybiBtX3ZhbHVlOwotfQotCi1pbnQzMl90IEltbWVkaWF0ZU51bWJlck5vZGU6OmV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopCi17Ci0gICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihtX3ZhbHVlKTsKLX0KLQotdWludDMyX3QgSW1tZWRp
YXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
Ci17Ci0gICAgdWludDMyX3QgaTsKLSAgICBpZiAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJ
bnQzMihtX3ZhbHVlLCBpKSkKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgYm9vbCBvazsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZShtX2RvdWJsZSwgb2spOwotfQotCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBTdHJpbmdOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTU0OCwyMSArMzE2
LDYgQEAgUmVnaXN0ZXJJRCogU3RyaW5nTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwganNP
d25lZFN0cmluZyhtX3ZhbHVlKSk7CiB9CiAKLUpTVmFsdWUqIFN0cmluZ05vZGU6OmV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyht
X3ZhbHVlKTsKLX0KLQotZG91YmxlIFN0cmluZ05vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBtX3ZhbHVlLnRvRG91YmxlKCk7Ci19
Ci0KLWJvb2wgU3RyaW5nTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKQotewotICAgIHJldHVybiAhbV92YWx1ZS5pc0VtcHR5KCk7Ci19Ci0KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTcyLDEyICszMjUsNiBA
QCBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Q29kZShDb2RlR2VuCiAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIG1f
cmVnRXhwLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogUmVnRXhwTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpc05vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBUaGlz
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CkBAIC01ODUsMTIgKzMzMiw2IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXIKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0
LCBnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOwogfQogCi0vLyBFQ01BIDExLjEuMQotSlNWYWx1
ZSogVGhpc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBleGVjLT50aGlzVmFsdWUoKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNjAxLDMzNTcgKzM0Miw2MjQgQEAgUmVnaXN0
ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZQogICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CiB9
CiAKLS8vIEVDTUEgMTEuMS4yICYgMTAuMS40Ci1KU1ZhbHVlKiBSZXNvbHZlTm9kZTo6aW5saW5l
RXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gQ2hlY2sg
Zm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAgQVNTRVJUKCFjYW5Ta2lw
TG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0g
ZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4u
YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAg
ICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAg
ICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgZG8g
ewotICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKQot
ICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgbywgbV9pZGVudCk7CiAKLSAg
ICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKK1JlZ2lzdGVySUQqIEFy
cmF5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5ld0FycmF5ID0gZ2VuZXJhdG9yLmVtaXRO
ZXdBcnJheShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCkpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAKLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMs
IG1faWRlbnQpOwotfQorICAgIFJlZ2lzdGVySUQqIHZhbHVlOworICAgIGZvciAoRWxlbWVudE5v
ZGUqIG4gPSBtX2VsZW1lbnQuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQuZ2V0KCkpIHsKKyAgICAg
ICAgdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobi0+bV9ub2RlLmdldCgpKTsKKyAgICAgICAg
bGVuZ3RoICs9IG4tPm1fZWxpc2lvbjsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUluZGV4
KG5ld0FycmF5LmdldCgpLCBsZW5ndGgrKywgdmFsdWUpOworICAgIH0KIAotSlNWYWx1ZSogUmVz
b2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KKyAgICB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKG1fZWxpc2lvbiArIGxl
bmd0aCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChuZXdBcnJheS5nZXQoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIHZhbHVlKTsKIAotZG91YmxlIFJlc29sdmVOb2Rl
OjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbmV3QXJyYXkuZ2V0KCkpOwogfQog
Ci1ib29sIFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhl
Yyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT2JqZWN0TGl0ZXJhbE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbnQzMl90IFJlc29sdmVOb2RlOjpl
dmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklE
KiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMp
OwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b0ludDMyKGV4
ZWMpOworICAgIGlmIChtX2xpc3QpCisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX2xpc3QuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0TmV3T2JqZWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOwogfQogCi11aW50
MzJfdCBSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwot
fQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5TGlzdE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHNpemVfdCBnZXRTeW1ib2xUYWJs
ZUVudHJ5KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBzaXplX3QmIHN0YWNrRGVwdGgp
IAorUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFi
bGUuZ2V0KGlkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5kZXgoKTsKLSAgICBpZiAoaW5kZXgg
IT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIHN0YWNrRGVwdGggPSAwOwotICAg
ICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmog
PSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgCi0gICAgaWYgKGlkZW50ID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKLSAgICAgICAgc3RhY2tEZXB0aCA9
IDA7Ci0gICAgICAgIHJldHVybiBtaXNzaW5nU3ltYm9sTWFya2VyKCk7Ci0gICAgfQorICAgIGdl
bmVyYXRvci5lbWl0TmV3T2JqZWN0KG5ld09iai5nZXQoKSk7CiAgICAgCi0gICAgY29uc3QgU2Nv
cGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBj
aGFpbi5lbmQoKTsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyLCArK2RlcHRoKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSAq
aXRlcjsKLSAgICAgICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVPYmplY3QoKSkgCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlh
YmxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7
Ci0gICAgICAgIGluZGV4ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdl
dChpZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgICAgIGlmIChpbmRleCAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAgICAgICAgICAgIHN0YWNrRGVwdGggPSBkZXB0
aDsKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICBmb3IgKFByb3BlcnR5TGlzdE5vZGUq
IHAgPSB0aGlzOyBwOyBwID0gcC0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIFJlZ2lzdGVySUQq
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKHAtPm1fbm9kZS0+bV9hc3NpZ24uZ2V0KCkpOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChwLT5tX25vZGUtPm1fdHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50OiB7CisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKG5ld09iai5nZXQoKSwgcC0+bV9ub2RlLT5uYW1lKCksIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
UHJvcGVydHlOb2RlOjpHZXR0ZXI6IHsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
dEdldHRlcihuZXdPYmouZ2V0KCksIHAtPm1fbm9kZS0+bmFtZSgpLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFByb3BlcnR5
Tm9kZTo6U2V0dGVyOiB7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTZXR0ZXIo
bmV3T2JqLmdldCgpLCBwLT5tX25vZGUtPm5hbWUoKSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVu
dFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29wZSgpKQotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIHN0YWNrRGVwdGggPSBkZXB0aDsKLSAgICByZXR1cm4gbWlzc2luZ1N5bWJvbE1h
cmtlcigpOworICAgIAorICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIG5ld09iai5nZXQoKSk7CiB9CiAKLXZvaWQgUmVzb2x2ZU5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikKLXsK
LSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGludCBpbmRleCA9IGdldFN5bWJvbFRhYmxlRW50
cnkoZXhlYywgbV9pZGVudCwgc3ltYm9sVGFibGUsIGRlcHRoKTsKLSAgICBpZiAoaW5kZXggIT0g
bWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIGlmICghZGVwdGgpCi0gICAgICAgICAg
ICBuZXcgKHRoaXMpIExvY2FsVmFyQWNjZXNzTm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5ldyAodGhpcykgU2NvcGVkVmFyQWNjZXNzTm9kZShpbmRleCwgZGVwdGgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
ICAgIGlmICghZGVwdGgpCi0gICAgICAgIHJldHVybjsKK1JlZ2lzdGVySUQqIEJyYWNrZXRBY2Nl
c3Nvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fYmFzZS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwogCi0gICAgbmV3ICh0aGlzKSBOb25Mb2NhbFZhckFj
Y2Vzc05vZGUoZGVwdGgpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKIH0KIAot
SlNWYWx1ZSogTG9jYWxWYXJBY2Nlc3NOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9
PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBleGVjLT5sb2NhbFN0b3Jh
Z2UoKVttX2luZGV4XS52YWx1ZTsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNW
YWx1ZSogTG9jYWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKK1JlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlKGV4ZWMpOworICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwogfQogCi1kb3VibGUgTG9j
YWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9OdW1iZXIoZXhl
Yyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1ib29sIExvY2FsVmFyQWNjZXNzTm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdp
c3RlcklEKiBBcmd1bWVudExpc3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYykt
PnRvQm9vbGVhbihleGVjKTsKKyAgICBBU1NFUlQobV9leHByKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKIH0KIAotaW50MzJfdCBMb2NhbFZhckFj
Y2Vzc05vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvSW50MzIoZXhlYyk7Ci19Cisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTmV3RXhwck5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi11aW50MzJfdCBMb2NhbFZhckFjY2Vzc05vZGU6OmV2
YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklE
KiBOZXdFeHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b1VJbnQzMihl
eGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIG1fYXJncy5nZXQoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSogZ2V0Tm9uTG9jYWxTeW1ib2woT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMsIHNpemVfdCwgc2l6ZV90IHNjb3BlRGVwdGgpCitSZWdpc3RlcklEKiBFdmFs
RnVuY3Rpb25DYWxsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29w
ZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NvcGVEZXB0aDsgKytpdGVyLCArK2kpCi0gICAg
ICAgIEFTU0VSVChpdGVyICE9IGNoYWluLmVuZCgpKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgSlNP
YmplY3QqIHNjb3BlID0gKml0ZXI7Ci0jZW5kaWYKLSAgICBBU1NFUlQoc2NvcGUtPmlzVmFyaWFi
bGVPYmplY3QoKSk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCk7CisgICAgUmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShiYXNlLmdldCgpLCBmdW5jLCBDb21tb25J
ZGVudGlmaWVyczo6c2hhcmVkKCktPmV2YWwpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmMs
IGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIFNjb3BlZFZhckFjY2Vz
c05vZGU6OmlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gZ2V0Tm9uTG9jYWxTeW1i
b2woZXhlYywgbV9pbmRleCwgbV9zY29wZURlcHRoKTsKKyAgICBSZWdpc3RlcklEKiByMCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAsIDAsIG1fYXJncy5nZXQo
KSk7CiB9CiAKLUpTVmFsdWUqIFNjb3BlZFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KKyAgICBpZiAoUmVnaXN0ZXJJ
RCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCBsb2NhbCwgMCwgbV9hcmdzLmdldCgpKTsKIAotZG91YmxlIFNjb3BlZFZhckFjY2Vzc05vZGU6
OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b051bWJlcihleGVjKTsKKyAgICBpbnQgaW5k
ZXggPSAwOworICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaWYgKGdlbmVyYXRvci5maW5kU2Nv
cGVkUHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5lbWl0
R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZGVwdGgsIGluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCBmdW5jLCAwLCBtX2FyZ3MuZ2V0KCkpOworICAgIH0KKworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lz
dGVySUQqIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlRnVuY3Rpb24oYmFzZS5nZXQoKSwgZnVuYywgbV9pZGVudCk7CisgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2Uu
Z2V0KCkpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOwogfQogCi1ib29sIFNjb3Bl
ZFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQorUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgUmVnaXN0
ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwor
ICAgIFJlZ2lzdGVySUQqIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQo
KSksIGZ1bmN0aW9uLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOwogfQogCi1pbnQzMl90IFNj
b3BlZFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKK1JlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
YmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQq
IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jdGlvbiwgYmFz
ZS5nZXQoKSwgbV9hcmdzLmdldCgpKTsKIH0KIAotdWludDMyX3QgU2NvcGVkVmFyQWNjZXNzTm9k
ZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvVUludDMyKGV4ZWMpOwotfQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTVmFsdWUqIE5vbkxvY2FsVmFyQWNjZXNzTm9k
ZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3Rl
cklEKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0aW1pemF0
aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBtX2lkZW50
KSk7Ci0gICAgCi0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWlu
KCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2NvcGVEZXB0aDsgKytpLCArK2l0ZXIpCi0gICAgICAgIEFTU0VSVChpdGVyICE9
IGVuZCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2Nv
cGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotICAgIAotICAgIFByb3BlcnR5U2xv
dCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCi0g
ICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBvLCBtX2lkZW50KTsKKyAgICAv
LyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVudCBl
eHByZXNzaW9ucyBoZXJlLCAKKyAgICAvLyBhbmQgZW1pdCBhIFByZUluYyBpbnN0ZWFkIG9mIGEg
UG9zdEluYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKKyAgICAvLyBjb2RlIHdvdWxk
IHdvcmssIHRvby4KKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0
ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25z
dGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNOdW1i
ZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICAKLSAg
ICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLSAgICAKLSAgICByZXR1
cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotfQotCi1KU1Zh
bHVlKiBOb25Mb2NhbFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KLQotZG91
YmxlIE5vbkxvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRv
TnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIE5vbkxvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVU
b0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlu
bGluZUV2YWx1YXRlKGV4ZWMpLT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgTm9uTG9j
YWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b0ludDMyKGV4ZWMp
OwotfQotCi11aW50MzJfdCBOb25Mb2NhbFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9VSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlKGV4ZWMpLT50b1VJbnQzMihleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVsZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotdm9pZCBFbGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbmV4dCkKLSAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZChtX25leHQuZ2V0KCkpOwotICAgIEFTU0VSVChtX25vZGUpOwotICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9ub2RlLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xLjQKLUpTVmFsdWUqIEVs
ZW1lbnROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU09iamVjdCogYXJyYXkgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29u
c3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBpbnQg
bGVuZ3RoID0gMDsKLSAgICBmb3IgKEVsZW1lbnROb2RlKiBuID0gdGhpczsgbjsgbiA9IG4tPm1f
bmV4dC5nZXQoKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBuLT5tX25vZGUtPmV2YWx1YXRl
KGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgICAgICBsZW5ndGgg
Kz0gbi0+bV9lbGlzaW9uOwotICAgICAgICBhcnJheS0+cHV0KGV4ZWMsIGxlbmd0aCsrLCB2YWwp
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBBcnJheU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLQotUmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3QXJy
YXkgPSBnZW5lcmF0b3IuZW1pdE5ld0FycmF5KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLQotICAgIFJlZ2lzdGVySUQqIHZhbHVlOwot
ICAgIGZvciAoRWxlbWVudE5vZGUqIG4gPSBtX2VsZW1lbnQuZ2V0KCk7IG47IG4gPSBuLT5tX25l
eHQuZ2V0KCkpIHsKLSAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobi0+bV9ub2Rl
LmdldCgpKTsKLSAgICAgICAgbGVuZ3RoICs9IG4tPm1fZWxpc2lvbjsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUluZGV4KG5ld0FycmF5LmdldCgpLCBsZW5ndGgrKywgdmFsdWUpOworICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsKTsKICAgICB9CiAKLSAgICB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0TG9h
ZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKG1fZWxpc2lvbiArIGxlbmd0aCkp
OwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChuZXdBcnJheS5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIHZhbHVlKTsKLQotICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG5ld0FycmF5LmdldCgpKTsKLX0KLQotdm9pZCBB
cnJheU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9k
ZVN0YWNrKQotewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9lbGVtZW50LmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xLjQKLUpTVmFsdWUqIEFycmF5Tm9k
ZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNPYmpl
Y3QqIGFycmF5OwotICAgIGludCBsZW5ndGg7Ci0KLSAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAg
ICAgIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihtX2VsZW1lbnQtPmV2YWx1YXRlKGV4
ZWMpKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICAgICAgbGVuZ3RoID0g
bV9vcHRpb25hbCA/IGFycmF5LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCktPnRvSW50MzIoZXhlYykgOiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIG5l
d0FyciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlDb25zdHJ1Y3RvcigpLT5j
b25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgICAgICBhcnJheSA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4obmV3QXJyKTsKLSAgICAgICAgbGVuZ3RoID0gMDsKKyAgICBpbnQg
aW5kZXggPSAwOworICAgIHNpemVfdCBkZXB0aCA9IDA7CisgICAgaWYgKGdlbmVyYXRvci5maW5k
U2NvcGVkUHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwg
aW5kZXgpOworICAgICAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9z
dEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHV0U2NvcGVkVmFyKGRlcHRoLCBpbmRleCwgdmFsdWUuZ2V0KCkp
OworICAgICAgICByZXR1cm4gb2xkVmFsdWU7CiAgICAgfQogCi0gICAgaWYgKG1fb3B0aW9uYWwp
Ci0gICAgICAgIGFycmF5LT5wdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIobV9lbGlzaW9uICsgbGVuZ3RoKSk7Ci0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3RMaXRlcmFsTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIE9iamVjdExpdGVyYWxOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsK
LSAgICBpZiAobV9saXN0KQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9saXN0LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5l
d09iamVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKLX0KLQotdm9pZCBPYmpl
Y3RMaXRlcmFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbGlzdCkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2xpc3QuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjEuNQotSlNWYWx1ZSogT2JqZWN0TGl0
ZXJhbE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChtX2xpc3QpCi0gICAgICAgIHJldHVybiBtX2xpc3QtPmV2YWx1YXRlKGV4ZWMpOwotCi0g
ICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0Q29uc3RydWN0b3Io
KS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKKyAgICBSZWdpc3RlcklEKiBvbGRW
YWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCB2YWx1ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCks
IG1faWRlbnQsIHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gb2xkVmFsdWU7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJ
RCogUG9zdERlY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqID0gZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIAotICAgIGdlbmVyYXRvci5lbWl0TmV3
T2JqZWN0KG5ld09iai5nZXQoKSk7Ci0gICAgCi0gICAgZm9yIChQcm9wZXJ0eUxpc3ROb2RlKiBw
ID0gdGhpczsgcDsgcCA9IHAtPm1fbmV4dC5nZXQoKSkgewotICAgICAgICBSZWdpc3RlcklEKiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fYXNzaWduLmdldCgpKTsKKyAg
ICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVu
dCBleHByZXNzaW9ucyBoZXJlLCAKKyAgICAvLyBhbmQgZW1pdCBhIFByZURlYyBpbnN0ZWFkIG9m
IGEgUG9zdERlYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKKyAgICAvLyBjb2RlIHdv
dWxkIHdvcmssIHRvby4KKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVn
aXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxD
b25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNO
dW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgICAgICAK
LSAgICAgICAgc3dpdGNoIChwLT5tX25vZGUtPm1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSBQ
cm9wZXJ0eU5vZGU6OkNvbnN0YW50OiB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
dXRCeUlkKG5ld09iai5nZXQoKSwgcC0+bV9ub2RlLT5uYW1lKCksIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHJvcGVydHlO
b2RlOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlcihu
ZXdPYmouZ2V0KCksIHAtPm1fbm9kZS0+bmFtZSgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0
dGVyOiB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTZXR0ZXIobmV3T2JqLmdl
dCgpLCBwLT5tX25vZGUtPm5hbWUoKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgbmV3T2JqLmdldCgpKTsKLX0KLQotdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAo
bV9uZXh0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX25vZGUuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjEuNQotSlNWYWx1
ZSogUHJvcGVydHlMaXN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgSlNPYmplY3QqIG9iaiA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5TGlzdCgpKTsK
IAotICAgIGZvciAoUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7IHA7IHAgPSBwLT5tX25leHQu
Z2V0KCkpIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IHAtPm1fbm9kZS0+bV9hc3NpZ24tPmV2YWx1
YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgICAgIHN3
aXRjaCAocC0+bV9ub2RlLT5tX3R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvcGVydHlOb2Rl
OjpHZXR0ZXI6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHYtPmlzT2JqZWN0KCkpOwotICAgICAg
ICAgICAgICAgIG9iai0+ZGVmaW5lR2V0dGVyKGV4ZWMsIHAtPm1fbm9kZS0+bmFtZSgpLCBzdGF0
aWNfY2FzdDxKU09iamVjdCogPih2KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0dGVyOgotICAgICAgICAgICAgICAgIEFTU0VSVCh2
LT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBvYmotPmRlZmluZVNldHRlcihleGVjLCBw
LT5tX25vZGUtPm5hbWUoKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqID4odikpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50Ogot
ICAgICAgICAgICAgICAgIG9iai0+cHV0KGV4ZWMsIHAtPm1fbm9kZS0+bmFtZSgpLCB2KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGludCBpbmRleCA9IDA7CisgICAg
c2l6ZV90IGRlcHRoID0gMDsKKyAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eSht
X2lkZW50LCBpbmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkg
eworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldFNj
b3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBpbmRleCk7CisgICAgICAg
IFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIHJldHVy
biBvbGRWYWx1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gb2JqOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXZvaWQgUHJvcGVydHlOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3Jh
Z2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYXNz
aWduLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xLjUKLUpTVmFsdWUqIFByb3BlcnR5Tm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgcmV0dXJuIGpzTnVsbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFs
dWUuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUu
Z2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4QnJhY2tl
dE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZWdpc3RlcklEKiBC
cmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKK1JlZ2lzdGVySUQqIFBvc3RJbmNCcmFja2V0Tm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAg
ICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7Ci19Ci0KLXZvaWQgQnJh
Y2tldEFjY2Vzc29yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3N1YnNjcmlwdC5nZXQo
KSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDEx
LjIuMWEKLUpTVmFsdWUqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmlubGluZUV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9iYXNlLT5l
dmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUq
IHYyID0gbV9zdWJzY3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0gICAgSlNPYmplY3QqIG8gPSB2MS0+dG9PYmplY3QoZXhlYyk7Ci0gICAgdWludDMy
X3QgaTsKLSAgICBpZiAodjItPmdldFVJbnQzMihpKSkKLSAgICAgICAgcmV0dXJuIG8tPmdldChl
eGVjLCBpKTsKLSAgICByZXR1cm4gby0+Z2V0KGV4ZWMsIElkZW50aWZpZXIodjItPnRvU3RyaW5n
KGV4ZWMpKSk7Ci19Ci0KLUpTVmFsdWUqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0
ZShleGVjKTsKLX0KLQotZG91YmxlIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlu
bGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJl
dHVybiB2LT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBCcmFja2V0QWNjZXNzb3JOb2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
Qk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgQnJh
Y2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0K
LQotdWludDMyX3QgQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRv
VUludDMyKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdl
bmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1
ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0
eS5nZXQoKSwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvdEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJ
RCogUG9zdERlY0JyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLCBtX2lkZW50KTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1
YnNjcmlwdC5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHByb3Bl
cnR5LmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9z
dERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUu
Z2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotdm9pZCBEb3RBY2Nlc3Nvck5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQot
ewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4RG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLS8vIEVDTUEgMTEuMi4xYgotSlNWYWx1ZSogRG90QWNjZXNzb3JOb2Rl
OjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIFBvc3RJbmNEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2ID0gbV9iYXNlLT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiB2LT50b09iamVjdChl
eGVjKS0+Z2V0KGV4ZWMsIG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
YmFzZS5nZXQoKSwgbV9pZGVudCk7CisgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0
b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1
ZS5nZXQoKSk7CisgICAgcmV0dXJuIG9sZFZhbHVlOwogfQogCi1KU1ZhbHVlKiBEb3RBY2Nlc3Nv
ck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJ
RCogUG9zdERlY0RvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkp
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZ2lz
dGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQo
YmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsK
IH0KIAotZG91YmxlIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVt
YmVyKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhF
cnJvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBEb3RB
Y2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQorUmVnaXN0ZXJJRCogUG9zdGZpeEVycm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2
LT50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwg
UmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/ICJQb3N0Zml4ICsrIG9w
ZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6ICJQb3N0
Zml4IC0tIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2Uu
Iik7CiB9CiAKLWludDMyX3QgRG90QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50
b0ludDMyKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0
ZVJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXVpbnQz
Ml90IERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2
ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0g
ICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQXJndW1lbnRMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIGlmIChnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCBmYWxzZSk7CiAKLVJlZ2lzdGVySUQqIEFyZ3VtZW50TGlzdE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIEFTU0VSVChtX2V4
cHIpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIuZ2V0KCkpOwor
ICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UpLCBiYXNl
LCBtX2lkZW50KTsKIH0KIAotdm9pZCBBcmd1bWVudExpc3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAobV9uZXh0
KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgQVNTRVJUKG1f
ZXhwcik7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vIEVDTUEgMTEuMi40Ci12b2lkIEFyZ3VtZW50TGlz
dE5vZGU6OmV2YWx1YXRlTGlzdChPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgTGlzdCYg
bGlzdCkKK1JlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBmb3IgKEFyZ3VtZW50TGlz
dE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgIEpTVmFs
dWUqIHYgPSBuLT5tX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WT0lECi0gICAgICAgIGxpc3QuYXBwZW5kKHYpOwotICAgIH0KKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBBcmd1bWVudHNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZvaWQgQXJndW1lbnRzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbGlzdE5vZGUpCi0g
ICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9saXN0Tm9kZS5nZXQoKSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOZXdFeHByTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIE5ld0V4cHJOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgcjAuZ2V0KCksIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgTmV3RXhwck5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAg
IGlmIChtX2FyZ3MpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4yCi0K
LUpTVmFsdWUqIE5ld0V4cHJOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgTGlzdCBhcmdMaXN0OwotICAgIGlm
IChtX2FyZ3MpIHsKLSAgICAgICAgbV9hcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7
Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgfQotCi0gICAgaWYgKCF2LT5p
c09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJW
YWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5v
dCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIG1fZXhwci5nZXQoKSk7Ci0KLSAgICBDb25zdHJ1Y3RE
YXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgaWYgKHYtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0
RGF0YSkgPT0gQ29uc3RydWN0VHlwZU5vbmUpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90
IGEgY29uc3RydWN0b3IuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIG1fZXhwci5nZXQo
KSk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+Y29uc3RydWN0KGV4
ZWMsIGFyZ0xpc3QpOwotfQotCi1KU1ZhbHVlKiBOZXdFeHByTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4
ZWMpOwotfQotCi1kb3VibGUgTmV3RXhwck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051
bWJlcihleGVjKTsKLX0KLQotYm9vbCBOZXdFeHByTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4g
di0+dG9Cb29sZWFuKGV4ZWMpOwotfQotCi1pbnQzMl90IE5ld0V4cHJOb2RlOjpldmFsdWF0ZVRv
SW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9
IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAg
IHJldHVybiB2LT50b0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBOZXdFeHByTm9kZTo6ZXZh
bHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi10ZW1wbGF0ZSA8RXhwcmVz
c2lvbk5vZGU6OkNhbGxlclR5cGUgY2FsbGVyVHlwZSwgYm9vbCBzY29wZURlcHRoSXNaZXJvPiAK
LWlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUFuZENhbGwoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBcmd1bWVudHNO
b2RlKiBhcmdzLCBzaXplX3Qgc2NvcGVEZXB0aCkKLXsKLSAgICBjb25zdCBTY29wZUNoYWluJiBj
aGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9
IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgp
OwotCi0gICAgaWYgKCFzY29wZURlcHRoSXNaZXJvKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2NvcGVEZXB0aDsgKytpdGVyLCArK2kpCi0gICAgICAgICAgICBBU1NFUlQoaXRl
ciAhPSBjaGFpbi5lbmQoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIHdlIG11c3QgYWx3YXlzIGhh
dmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7
Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7
Ci0gICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xv
dChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGJhc2UsIGlkZW50KTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICAgICAgICAgIGlmICghdi0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9m
IGV4cHJlc3Npb24gJXMpIGlzIG5vdCBvYmplY3QuIiwgdiwgaWRlbnQpOwotCi0gICAgICAgICAg
ICBKU09iamVjdCogZnVuYyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7Ci0KLSAgICAgICAg
ICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHByZXNz
aW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBpZGVudCk7Ci0KLSAgICAgICAgICAg
IExpc3QgYXJnTGlzdDsKLSAgICAgICAgICAgIGFyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBhcmdM
aXN0KTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICAgICAgICAg
IGlmIChjYWxsZXJUeXBlID09IEV2YWxPcGVyYXRvcikgewotICAgICAgICAgICAgICAgIGlmIChi
YXNlID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSAmJiBmdW5jID09IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IGJhc2UtPnRvVGhpc09iamVjdChleGVj
KTsKLSAgICAgICAgICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3Qp
OwotICAgICAgICB9Ci0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
Ci0KLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsK
LX0KLQotUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIFJlZ2lzdGVy
SUQqIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRS
ZXNvbHZlV2l0aEJhc2UoYmFzZS5nZXQoKSwgZnVuYywgQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJl
ZCgpLT5ldmFsKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2Fy
Z3MuZ2V0KCkpOwotfQotCi12b2lkIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fYXJncy5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEV2YWxGdW5jdGlvbkNhbGxO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gcmVzb2x2ZUFuZENhbGw8RXZhbE9wZXJhdG9yLCB0cnVlPihleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuZXZhbCwgbV9hcmdzLmdldCgpKTsKLX0KLQotUmVnaXN0ZXJJRCogRnVuY3Rpb25D
YWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKLXsKLSAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgcjAsIDAsIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgRnVuY3Rp
b25DYWxsVmFsdWVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYXJncy5nZXQoKSk7Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjIuMwot
SlNWYWx1ZSogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgaWYgKCF2LT5pc09iamVjdCgp
KSB7Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVz
IChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2LCBtX2V4cHIuZ2V0
KCkpOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBmdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
Pih2KTsKLQotICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBtX2V4cHIuZ2V0KCkpOwotICAg
IH0KLQotICAgIExpc3QgYXJnTGlzdDsKLSAgICBtX2FyZ3MtPmV2YWx1YXRlTGlzdChleGVjLCBh
cmdMaXN0KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIHRo
aXNPYmogPSBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKLSAgICByZXR1cm4gZnVuYy0+Y2FsbChl
eGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKLX0KLQotUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLCAwLCBtX2FyZ3MuZ2V0KCkpOwotCi0g
ICAgaW50IGluZGV4ID0gMDsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGlmIChnZW5lcmF0
b3IuZmluZFNjb3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0g
bWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGZ1bmMgPSBnZW5l
cmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBp
bmRleCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgZnVuYywgMCwgbV9hcmdzLmdldCgpKTsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsK
LSAgICBSZWdpc3RlcklEKiBmdW5jID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIGdl
bmVyYXRvci5lbWl0UmVzb2x2ZUZ1bmN0aW9uKGJhc2UuZ2V0KCksIGZ1bmMsIG1faWRlbnQpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBiYXNlLmdldCgpKSwgZnVuYywgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpKTsKLX0KLQot
dm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fYXJncy5nZXQoKSk7Ci0KLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAg
IGludCBpbmRleCA9IGdldFN5bWJvbFRhYmxlRW50cnkoZXhlYywgbV9pZGVudCwgc3ltYm9sVGFi
bGUsIGRlcHRoKTsKLSAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0g
ICAgICAgIGlmICghZGVwdGgpCi0gICAgICAgICAgICBuZXcgKHRoaXMpIExvY2FsVmFyRnVuY3Rp
b25DYWxsTm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykg
U2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZShpbmRleCwgZGVwdGgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIGlmICghZGVwdGgpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBuZXcgKHRoaXMpIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZShkZXB0aCk7Ci19Ci0KLS8v
IEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6aW5saW5lRXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gQ2hlY2sgZm9y
IG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAgQVNTRVJUKCFjYW5Ta2lwTG9v
a3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIHJldHVybiByZXNvbHZlQW5kQ2FsbDxGdW5jdGlv
bkNhbGwsIHRydWU+KGV4ZWMsIG1faWRlbnQsIG1fYXJncy5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUq
IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci19Ci0KLWRvdWJs
ZSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVtYmVy
KGV4ZWMpOwotfQotCi1ib29sIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvQm9v
bGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0g
aW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAg
IHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQz
Ml90IEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9VSW50
MzIoZXhlYyk7Ci19Ci0KLUpTVmFsdWUqIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6aW5saW5l
RXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4
ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLQotICAg
IEpTVmFsdWUqIHYgPSBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLQotICAg
IGlmICghdi0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3Qgb2JqZWN0
LiIsIHYsIG1faWRlbnQpOwotCi0gICAgSlNPYmplY3QqIGZ1bmMgPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHYpOwotICAgIGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhw
cmVzc2lvbiAlcykgZG9lcyBub3QgYWxsb3cgY2FsbHMuIiwgdiwgbV9pZGVudCk7Ci0KLSAgICBM
aXN0IGFyZ0xpc3Q7Ci0gICAgbV9hcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+Z2xvYmFsVGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhpc09i
aiwgYXJnTGlzdCk7Ci19Ci0KLUpTVmFsdWUqIExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOwotfQotCi1kb3VibGUgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpl
dmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpT
VmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKLSAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgTG9jYWxWYXJG
dW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7
Ci19Ci0KLWludDMyX3QgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVy
biB2LT50b0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5v
ZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsKLX0KLQotSlNWYWx1ZSog
U2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0g
ZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlKiB2ID0gZ2V0Tm9u
TG9jYWxTeW1ib2woZXhlYywgbV9pbmRleCwgbV9zY29wZURlcHRoKTsKLSAgICAKLSAgICBpZiAo
IXYtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
ciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2
LCBtX2lkZW50KTsKLSAgICAKLSAgICBKU09iamVjdCogZnVuYyA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odik7Ci0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2LCBtX2lkZW50KTsKLSAgICAKLSAg
ICBMaXN0IGFyZ0xpc3Q7Ci0gICAgbV9hcmdzLT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCk7Ci0gICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhp
c09iaiwgYXJnTGlzdCk7Ci19Ci0KLUpTVmFsdWUqIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KLQotZG91YmxlIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5v
ZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBTY29w
ZWRWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4o
ZXhlYyk7Ci19Ci0KLWludDMyX3QgU2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGVU
b0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYg
PSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgU2NvcGVkVmFyRnVuY3Rp
b25DYWxsTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi1K
U1ZhbHVlKiBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmlubGluZUV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0
aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBt
X2lkZW50KSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc29sdmVBbmRDYWxsPEZ1bmN0aW9uQ2FsbCwg
ZmFsc2U+KGV4ZWMsIG1faWRlbnQsIG1fYXJncy5nZXQoKSwgbV9zY29wZURlcHRoKTsKLX0KLQot
SlNWYWx1ZSogTm9uTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7
Ci19Ci0KLWRvdWJsZSBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlu
bGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJl
dHVybiB2LT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBOb25Mb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0KLQotaW50
MzJfdCBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVh
dGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRv
SW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6
ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi1SZWdpc3RlcklEKiBG
dW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCog
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwgZnVuY3Rpb24sIGJh
c2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNr
KQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5n
ZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNW
YWx1ZSogYmFzZVZhbCA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdFZhbCA9IG1fc3Vic2NyaXB0LT5l
dmFsdWF0ZShleGVjKTsKLQotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZVZhbC0+dG9PYmpl
Y3QoZXhlYyk7Ci0gICAgdWludDMyX3QgaTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLQotICAg
IEpTVmFsdWUqIGZ1bmNWYWw7Ci0gICAgaWYgKHN1YnNjcmlwdFZhbC0+Z2V0VUludDMyKGkpKSB7
Ci0gICAgICAgIGlmIChiYXNlT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaSwgc2xvdCkpCi0g
ICAgICAgICAgICBmdW5jVmFsID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlT2JqLCBpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZnVuY1ZhbCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudChzdWJzY3JpcHRWYWwtPnRvU3RyaW5nKGV4
ZWMpKTsKLSAgICAgICAgaWYgKGJhc2VPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwg
c2xvdCkpCi0gICAgICAgICAgICBmdW5jVmFsID0gYmFzZU9iai0+Z2V0KGV4ZWMsIGlkZW50KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnVuY1ZhbCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotCi0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIGlmICghZnVuY1ZhbC0+aXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFs
dWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzWyVzXSkgaXMgbm90IG9iamVjdC4iLCBmdW5j
VmFsLCBtX2Jhc2UuZ2V0KCksIG1fc3Vic2NyaXB0LmdldCgpKTsKLQotICAgIEpTT2JqZWN0KiBm
dW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKTsKLQotICAgIGlmICghZnVuYy0+
aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yLCAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlc1slc10pIGRvZXMgbm90IGFs
bG93IGNhbGxzLiIsIGZ1bmNWYWwsIG1fYmFzZS5nZXQoKSwgbV9zdWJzY3JpcHQuZ2V0KCkpOwot
Ci0gICAgTGlzdCBhcmdMaXN0OwotICAgIG1fYXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xp
c3QpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09iamVjdCogdGhpc09i
aiA9IGJhc2VPYmo7Ci0gICAgQVNTRVJUKHRoaXNPYmopOwotICAgIEFTU0VSVCh0aGlzT2JqLT5p
c09iamVjdCgpKTsKLSAgICBBU1NFUlQoIXRoaXNPYmotPmlzQWN0aXZhdGlvbk9iamVjdCgpKTsK
LQotICAgIC8vIE5vIG5lZWQgdG8gY2FsbCB0b1RoaXNPYmplY3QoKSBvbiB0aGUgdGhpc09iaiBh
cyBpdCBpcyBrbm93biBub3QgdG8gYmUgdGhlIEdsb2JhbE9iamVjdCBvciBBY3RpdmF0aW9uT2Jq
ZWN0Ci0gICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBkb3RFeHByTm90QW5PYmplY3RTdHJpbmcoKSBLSlNfRkFTVF9D
QUxMOwotc3RhdGljIGNvbnN0IGNoYXIqIGRvdEV4cHJOb3RBbk9iamVjdFN0cmluZygpCi17Ci0g
ICAgcmV0dXJuICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMuJXMpIGlzIG5vdCBv
YmplY3QuIjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGRvdEV4cHJEb2VzTm90QWxsb3dDYWxs
c1N0cmluZygpIEtKU19GQVNUX0NBTEw7Ci1zdGF0aWMgY29uc3QgY2hhciogZG90RXhwckRvZXNO
b3RBbGxvd0NhbGxzU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gIk9iamVjdCAlcyAocmVzdWx0IG9m
IGV4cHJlc3Npb24gJXMuJXMpIGRvZXMgbm90IGFsbG93IGNhbGxzLiI7Ci19Ci0KLVJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogZnVuY3Rpb24g
PSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdl
dCgpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0aW9uLCBiYXNlLmdldCgpLCBt
X2FyZ3MuZ2V0KCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ2FsbERvdE5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYs
IGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVT
dGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5n
ZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2Rl
OjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiBiYXNlVmFsID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFsLT50b09iamVj
dChleGVjKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiBmdW5jVmFsID0g
YmFzZU9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5nZXRW
YWx1ZShleGVjLCBiYXNlT2JqLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIGlmICghZnVuY1ZhbC0+aXNPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCBkb3RFeHByTm90QW5PYmplY3RT
dHJpbmcoKSwgZnVuY1ZhbCwgbV9iYXNlLmdldCgpLCBtX2lkZW50KTsKLQotICAgIEpTT2JqZWN0
KiBmdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKTsKLQotICAgIGlmICghZnVu
Yy0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCBkb3RFeHByRG9lc05vdEFsbG93Q2FsbHNTdHJpbmcoKSwgZnVuY1ZhbCwgbV9iYXNl
LmdldCgpLCBtX2lkZW50KTsKLQotICAgIExpc3QgYXJnTGlzdDsKLSAgICBtX2FyZ3MtPmV2YWx1
YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0g
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBiYXNlT2JqOwotICAgIEFTU0VSVCh0aGlzT2JqKTsKLSAg
ICBBU1NFUlQodGhpc09iai0+aXNPYmplY3QoKSk7Ci0gICAgQVNTRVJUKCF0aGlzT2JqLT5pc0Fj
dGl2YXRpb25PYmplY3QoKSk7Ci0KLSAgICAvLyBObyBuZWVkIHRvIGNhbGwgdG9UaGlzT2JqZWN0
KCkgb24gdGhlIHRoaXNPYmogYXMgaXQgaXMga25vd24gbm90IHRvIGJlIHRoZSBHbG9iYWxPYmpl
Y3Qgb3IgQWN0aXZhdGlvbk9iamVjdAotICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNP
YmosIGFyZ0xpc3QpOwotfQotCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZh
bHVhdGUoZXhlYyk7Ci19Ci0KLWRvdWJsZSBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYg
PSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgRnVuY3Rpb25DYWxsRG90Tm9k
ZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTkJPT0xFQU4KLSAgICByZXR1cm4gdi0+dG9Cb29sZWFuKGV4ZWMpOwotfQotCi1pbnQzMl90
IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7
Ci19Ci0KLXVpbnQzMl90IEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2
LT50b1VJbnQzMihleGVjKTsKLX0KLQotLy8gRUNNQSAxMS4zCi0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4UmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIC8vIEZJ
WE1FOiBJIHRoaW5rIHdlIGNhbiBkZXRlY3QgdGhlIGFic2Vuc2Ugb2YgZGVwZW5kZW50IGV4cHJl
c3Npb25zIGhlcmUsIAotICAgIC8vIGFuZCBlbWl0IGEgUHJlSW5jIGluc3RlYWQgb2YgYSBQb3N0
SW5jLiBBIHBvc3QtcGFzcyB0byBlbGltaW5hdGUgZGVhZAotICAgIC8vIGNvZGUgd291bGQgd29y
aywgdG9vLgotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50
KG1faWRlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VG9KU051bWJlcihn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIGxvY2FsKTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHNpemVfdCBk
ZXB0aCA9IDA7Ci0gICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVudCwg
aW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwgaW5kZXgpOwotICAgICAgICBSZWdpc3Rl
cklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0U2Nv
cGVkVmFyKGRlcHRoLCBpbmRleCwgdmFsdWUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gb2xkVmFs
dWU7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwg
bV9pZGVudCk7Ci0gICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3RJ
bmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOwotICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG9sZFZhbHVlOwotfQotCi0vLyBJbmNyZW1lbnQKLXZvaWQgUG9zdEluY1Jlc29s
dmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2Fs
U3RvcmFnZSwgTm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQo
bV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3Jh
Z2UsIGluZGV4KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykgUG9zdEluY0NvbnN0Tm9kZShpbmRl
eCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykgUG9zdEluY0xvY2FsVmFy
Tm9kZShpbmRleCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZv
ciBtaXNzZWQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExv
b2t1cChleGVjLCBtX2lkZW50KSk7Ci0KLSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4
ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJl
Z2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0gICAg
Ly8gd2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAg
QVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsK
LSAgICAgICAgaWYgKCgqaXRlciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90
KSkgewotICAgICAgICAgICAgLy8gSWYgbV9pZGVudCBpcyAnYXJndW1lbnRzJywgdGhlIGJhc2Ut
PmdldFByb3BlcnR5U2xvdCgpIG1heSBjYXVzZSAKLSAgICAgICAgICAgIC8vIGJhc2UgKHdoaWNo
IG11c3QgYmUgYW4gQWN0aXZhdGlvbkltcCBpbiBzdWNoIHRoaXMgY2FzZSkgdG8gYmUgdG9ybgot
ICAgICAgICAgICAgLy8gb2ZmIGZyb20gdGhlIGFjdGl2YXRpb24gc3RhY2ssIGluIHdoaWNoIGNh
c2Ugd2UgbmVlZCB0byBnZXQgaXQgYWdhaW4KLSAgICAgICAgICAgIC8vIGZyb20gdGhlIFNjb3Bl
Q2hhaW5JdGVyYXRvci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNPYmplY3QqIGJhc2Ug
PSAqaXRlcjsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJh
c2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgYmFzZS0+cHV0KGV4
ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwotICAgICAgICAg
ICAgcmV0dXJuIHY7Ci0gICAgICAgIH0KLQotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAo
aXRlciAhPSBlbmQpOwotCi0gICAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBtX2lkZW50KTsKLX0KLQotdm9pZCBQb3N0SW5jUmVzb2x2ZU5vZGU6Om9wdGltaXplRm9y
VW5uZWNlc3NhcnlSZXN1bHQoKQotewotICAgIG5ldyAodGhpcykgUHJlSW5jUmVzb2x2ZU5vZGUo
UGxhY2VtZW50TmV3QWRvcHQpOwotfQotCi1KU1ZhbHVlKiBQb3N0SW5jTG9jYWxWYXJOb2RlOjpl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhl
Yy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotCi0gICAg
SlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7Ci0g
ICAgSlNWYWx1ZSogdiA9ICgqc2xvdCktPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgKnNsb3QgPSBq
c051bWJlcih2LT50b051bWJlcihleGVjKSArIDEpOwotICAgIHJldHVybiB2OwotfQotCi12b2lk
IFBvc3RJbmNMb2NhbFZhck5vZGU6Om9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKQotewot
ICAgIG5ldyAodGhpcykgUHJlSW5jTG9jYWxWYXJOb2RlKG1faW5kZXgpOwotfQotCi0vLyBEZWNy
ZW1lbnQKLVJlZ2lzdGVySUQqIFBvc3REZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgLy8gRklYTUU6IEkgdGhp
bmsgd2UgY2FuIGRldGVjdCB0aGUgYWJzZW5zZSBvZiBkZXBlbmRlbnQgZXhwcmVzc2lvbnMgaGVy
ZSwgCi0gICAgLy8gYW5kIGVtaXQgYSBQcmVEZWMgaW5zdGVhZCBvZiBhIFBvc3REZWMuIEEgcG9z
dC1wYXNzIHRvIGVsaW1pbmF0ZSBkZWFkCi0gICAgLy8gY29kZSB3b3VsZCB3b3JrLCB0b28uCi0g
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9p
ZGVudCkpIHsKLSAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkp
Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUb0pTTnVtYmVyKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9j
YWwpOwotICAgIH0KLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsK
LSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVw
dGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIG9sZFZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHZhbHVlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVw
dGgsIGluZGV4LCB2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBvbGRWYWx1ZTsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVX
aXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsK
LSAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4g
b2xkVmFsdWU7Ci19Ci0KLXZvaWQgUG9zdERlY1Jlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwgTm9kZVN0YWNrJikKLXsK
LSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkp
LmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewot
ICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4KSkKLSAgICAgICAgICAg
IG5ldyAodGhpcykgUG9zdERlY0NvbnN0Tm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG5ldyAodGhpcykgUG9zdERlY0xvY2FsVmFyTm9kZShpbmRleCk7Ci0gICAgfQotfQot
Ci1KU1ZhbHVlKiBQb3N0RGVjUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQgb3B0aW1pemF0aW9uIG9w
cG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVjLCBtX2lkZW50KSk7Ci0K
LSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBT
Y29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0
ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0gICAgLy8gd2UgbXVzdCBhbHdheXMgaGF2ZSBz
b21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQot
ICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmdl
dFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAgLy8gU2Vl
IHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQotICAgICAg
ICAgICAgSlNPYmplY3QqIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBz
bG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4
ZWMpIC0gMSkpOwotICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgIH0KLQotICAgICAgICAr
K2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwotCi0gICAgcmV0dXJuIHRocm93VW5k
ZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBtX2lkZW50KTsKLX0KLQotdm9pZCBQb3N0RGVjUmVz
b2x2ZU5vZGU6Om9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKQotewotICAgIG5ldyAodGhp
cykgUHJlRGVjUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpOwotfQotCi1KU1ZhbHVlKiBQ
b3N0RGVjTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNo
YWluKCkudG9wKCkpOwotCi0gICAgSlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdl
KClbbV9pbmRleF0udmFsdWU7Ci0gICAgSlNWYWx1ZSogdiA9ICgqc2xvdCktPnRvSlNOdW1iZXIo
ZXhlYyk7Ci0gICAgKnNsb3QgPSBqc051bWJlcih2LT50b051bWJlcihleGVjKSAtIDEpOwotICAg
IHJldHVybiB2OwotfQotCi1kb3VibGUgUG9zdERlY0xvY2FsVmFyTm9kZTo6aW5saW5lRXZhbHVh
dGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQo
ZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotCi0g
ICAgSlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7
Ci0gICAgZG91YmxlIG4gPSAoKnNsb3QpLT50b051bWJlcihleGVjKTsKLSAgICAqc2xvdCA9IGpz
TnVtYmVyKG4gLSAxKTsKLSAgICByZXR1cm4gbjsKLX0KLQotZG91YmxlIFBvc3REZWNMb2NhbFZh
ck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgUG9z
dERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
ZXhlYyk7Ci0gICAgcmV0dXJuICByZXN1bHQgPiAwLjAgfHwgMC4wID4gcmVzdWx0OyAvLyBOYU4g
cHJvZHVjZXMgZmFsc2UgYXMgd2VsbAotfQotCi1pbnQzMl90IFBvc3REZWNMb2NhbFZhck5vZGU6
OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0K
LQotdWludDMyX3QgUG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIo
aW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLXZvaWQgUG9zdERlY0xvY2FsVmFy
Tm9kZTo6b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpCi17Ci0gICAgbmV3ICh0aGlzKSBQ
cmVEZWNMb2NhbFZhck5vZGUobV9pbmRleCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBQb3N0Zml4QnJhY2tldE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi12b2lkIFBvc3RmaXhCcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jhc2UuZ2V0KCkp
OwotfQotCi1SZWdpc3RlcklEKiBQb3N0SW5jQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0Lmdl
dCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkp
OwotICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKLSAgICBnZW5lcmF0b3Iu
ZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG9sZFZhbHVlOwotfQotCi1KU1ZhbHVlKiBQb3N0SW5jQnJhY2tldE5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJh
c2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKLSAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBtX3N1YnNjcmlwdC0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiBiYXNlID0g
YmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIHVpbnQzMl90IHByb3BlcnR5SW5kZXg7
Ci0gICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKHByb3BlcnR5SW5kZXgpKSB7Ci0gICAgICAg
IFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBi
YXNlLCBwcm9wZXJ0eUluZGV4KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCi0KLSAgICAgICAgSlNWYWx1ZSogdjIgPSB2LT50b0pTTnVtYmVyKGV4ZWMp
OwotICAgICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwganNOdW1iZXIodjItPnRv
TnVtYmVyKGV4ZWMpICsgMSkpOwotCi0gICAgICAgIHJldHVybiB2MjsKLSAgICB9Ci0KLSAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShzdWJzY3JpcHQtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHBy
b3BlcnR5TmFtZSkgOiBqc1VuZGVmaW5lZCgpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICBKU1ZhbHVlKiB2MiA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgYmFzZS0+cHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwganNOdW1iZXIodjItPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwot
ICAgIHJldHVybiB2MjsKLX0KLQotUmVnaXN0ZXJJRCogUG9zdERlY0JyYWNrZXROb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkp
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJh
dG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHBy
b3BlcnR5LmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0
UG9zdERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFs
dWUuZ2V0KCkpOwotICAgIHJldHVybiBvbGRWYWx1ZTsKLX0KLQotSlNWYWx1ZSogUG9zdERlY0Jy
YWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gbV9zdWJzY3JpcHQt
PmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09i
amVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBw
cm9wZXJ0eUluZGV4OwotICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4
KSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IGJh
c2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3QuZ2V0
VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgICAgIEpTVmFsdWUqIHYyID0gdi0+dG9K
U051bWJlcihleGVjKTsKLSAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIHByb3BlcnR5SW5kZXgsIGpz
TnVtYmVyKHYyLT50b051bWJlcihleGVjKSAtIDEpKTsKLSAgICAgICAgcmV0dXJuIHYyOwotICAg
IH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhl
YykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhl
YywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gdi0+dG9KU051bWJlcihleGVjKTsKLSAg
ICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBqc051bWJlcih2Mi0+dG9OdW1iZXIoZXhl
YykgLSAxKSk7Ci0gICAgcmV0dXJuIHYyOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUG9zdGZpeERvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi12b2lkIFBvc3RmaXhEb3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2Um
LCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5n
ZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFBvc3RJbmNEb3ROb2RlOjplbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAgIFJlZ2lzdGVySUQqIG9sZFZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHZhbHVlLmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgdmFsdWUuZ2V0KCkpOwotICAgIHJldHVybiBvbGRWYWx1ZTsKLX0KLQotSlNWYWx1
ZSogUG9zdEluY0RvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1
ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVl
KiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5n
ZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gdi0+dG9KU051bWJlcihleGVj
KTsKLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1iZXIodjItPnRvTnVtYmVyKGV4
ZWMpICsgMSkpOwotICAgIHJldHVybiB2MjsKLX0KLQotUmVnaXN0ZXJJRCogUG9zdERlY0RvdE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQot
ewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZS5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0g
ICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIG9s
ZFZhbHVlOwotfQotCi1KU1ZhbHVlKiBQb3N0RGVjRG90Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9iYXNl
LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTT2Jq
ZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIFByb3BlcnR5U2xv
dCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9p
ZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRl
ZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogdjIg
PSB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBqc051
bWJlcih2Mi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7Ci0gICAgcmV0dXJuIHYyOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9zdGZpeEVycm9yTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBQb3N0Zml4RXJyb3JOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQotewotICAg
IHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFJlZmVyZW5jZUVycm9yLCBtX29wZXJh
dG9yID09IE9wUGx1c1BsdXMgPyAiUG9zdGZpeCArKyBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVl
IHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIgOiAiUG9zdGZpeCAtLSBvcGVyYXRvciBhcHBsaWVk
IHRvIHZhbHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwotfQotCi1KU1ZhbHVlKiBQb3N0
Zml4RXJyb3JOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiUG9zdGZpeCAlcyBvcGVyYXRv
ciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIsCi0gICAgICAgICAg
ICAgICBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiKysiIDogIi0tIik7Ci0gICAgaGFuZGxl
RXhjZXB0aW9uKGV4ZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewot
ICAgIGlmIChnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKLSAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBm
YWxzZSk7Ci0KLSAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFz
ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIG1faWRlbnQpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBi
YXNlKSwgYmFzZSwgbV9pZGVudCk7Ci19Ci0KLXZvaWQgRGVsZXRlUmVzb2x2ZU5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpCi17Ci0g
ICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUuZ2V0KG1faWRlbnQudXN0cmluZygpLnJlcCgpKS5n
ZXRJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCi0gICAg
ICAgIG5ldyAodGhpcykgTG9jYWxWYXJEZWxldGVOb2RlKCk7Ci19Ci0KLS8vIEVDTUEgMTEuNC4x
Ci0KLUpTVmFsdWUqIERlbGV0ZVJlc29sdmVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBDaGVjayBmb3IgbWlzc2VkIG9wdGltaXphdGlvbiBv
cHBvcnR1bml0eS4KLSAgICBBU1NFUlQoIWNhblNraXBMb29rdXAoZXhlYywgbV9pZGVudCkpOwot
Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUg
c29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0K
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0g
ICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZS0+
ZGVsZXRlUHJvcGVydHkoZXhlYywgbV9pZGVudCkpOwotCi0gICAgICAgICsraXRlcjsKLSAgICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwotfQot
Ci1KU1ZhbHVlKiBMb2NhbFZhckRlbGV0ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXROb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgp
KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJz
Y3JpcHQuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7Ci19Ci0KLXZv
aWQgRGVsZXRlQnJhY2tldE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9zdWJzY3JpcHQu
Z2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotSlNWYWx1
ZSogRGVsZXRlQnJhY2tldE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBt
X3N1YnNjcmlwdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
LQotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAg
IHVpbnQzMl90IHByb3BlcnR5SW5kZXg7Ci0gICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKHBy
b3BlcnR5SW5kZXgpKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGJhc2UtPmRlbGV0ZVByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5SW5kZXgpKTsKLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
KHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZS0+
ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZ2lzdGVySUQq
IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMCwg
bV9pZGVudCk7Ci19Ci0KLXZvaWQgRGVsZXRlRG90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2Jhc2UuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBEZWxldGVEb3ROb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUg
PSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVl
LT50b09iamVjdChleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgcmV0
dXJuIGpzQm9vbGVhbihiYXNlLT5kZWxldGVQcm9wZXJ0eShleGVjLCBtX2lkZW50KSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogRGVsZXRlVmFsdWVO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
LXsKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLQotICAgIC8vIGRlbGV0
ZSBvbiBhIG5vbi1sb2NhdGlvbiBleHByZXNzaW9uIGlnbm9yZXMgdGhlIHZhbHVlIGFuZCByZXR1
cm5zIHRydWUKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHRydWUpOwotfQotCi12b2lkIERlbGV0ZVZhbHVlTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBEZWxldGVWYWx1
ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIG1f
ZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAg
IC8vIGRlbGV0ZSBvbiBhIG5vbi1sb2NhdGlvbiBleHByZXNzaW9uIGlnbm9yZXMgdGhlIHZhbHVl
IGFuZCByZXR1cm5zIHRydWUKLSAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVm9pZE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHIw
LmdldCgpKSwganNVbmRlZmluZWQoKSk7Ci19Ci0KLXZvaWQgVm9pZE5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYs
IGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVT
dGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS40LjIKLUpTVmFsdWUq
IFZvaWROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0K
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotLy8gRUNNQSAxMS40LjMKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFR5cGVPZlZhbHVlTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZSogdHlwZVN0
cmluZ0ZvclZhbHVlKEpTVmFsdWUqIHYpIEtKU19GQVNUX0NBTEw7Ci1zdGF0aWMgSlNWYWx1ZSog
dHlwZVN0cmluZ0ZvclZhbHVlKEpTVmFsdWUqIHYpCi17Ci0gICAgc3dpdGNoICh2LT50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBVbmRlZmluZWRUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKCJ1bmRlZmluZWQiKTsKLSAgICAgICAgY2FzZSBOdWxsVHlwZToKLSAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZygib2JqZWN0Iik7Ci0gICAgICAgIGNhc2UgQm9vbGVhblR5cGU6Ci0gICAg
ICAgICAgICByZXR1cm4ganNTdHJpbmcoImJvb2xlYW4iKTsKLSAgICAgICAgY2FzZSBOdW1iZXJU
eXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJudW1iZXIiKTsKLSAgICAgICAgY2Fz
ZSBTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJzdHJpbmciKTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh2LT5pc09iamVjdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gUmV0dXJuICJ1bmRlZmluZWQiIGZvciBvYmplY3RzIHRoYXQgc2hvdWxkIGJl
IHRyZWF0ZWQKLSAgICAgICAgICAgICAgICAvLyBhcyBudWxsIHdoZW4gZG9pbmcgY29tcGFyaXNv
bnMuCi0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPm1hc3F1
ZXJhZGVBc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
InVuZGVmaW5lZCIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odiktPmltcGxlbWVudHNDYWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBq
c1N0cmluZygiZnVuY3Rpb24iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCJvYmplY3QiKTsKLSAgICB9Ci19Ci0KLXZvaWQgVHlwZU9mUmVzb2x2ZU5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYp
Ci17Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUuZ2V0KG1faWRlbnQudXN0cmluZygpLnJl
cCgpKS5nZXRJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkp
Ci0gICAgICAgIG5ldyAodGhpcykgTG9jYWxWYXJUeXBlT2ZOb2RlKGluZGV4KTsKLX0KLQotSlNW
YWx1ZSogTG9jYWxWYXJUeXBlT2ZOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5z
Y29wZUNoYWluKCkudG9wKCkpOwotCi0gICAgcmV0dXJuIHR5cGVTdHJpbmdGb3JWYWx1ZShleGVj
LT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFR5cGVP
ZlJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKLXsKLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0
ZXJGb3JMb2NhbChtX2lkZW50KSkKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9m
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKLQotICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzY3JhdGNoID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZShnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChzY3JhdGNoLmdldCgpLCBzY3JhdGNoLmdldCgpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzY3JhdGNo
LmdldCgpKSwgc2NyYXRjaC5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFR5cGVPZlJlc29sdmVOb2Rl
OjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBjb25zdCBT
Y29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRl
cmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9
IGNoYWluLmVuZCgpOwotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4g
dGhlIHNjb3BlIGNoYWluCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgIEpTT2JqZWN0KiBiYXNlOwotICAgIGRvIHsKLSAgICAgICAgYmFzZSA9
ICppdGVyOwotICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBi
YXNlLCBtX2lkZW50KTsKLSAgICAgICAgICAgIHJldHVybiB0eXBlU3RyaW5nRm9yVmFsdWUodik7
Ci0gICAgICAgIH0KLQotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQp
OwotCi0gICAgcmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgc3JjLmdldCgpKTsKLX0KLQotSlNWYWx1ZSogVHlwZU9mVmFsdWVOb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9l
eHByLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAg
cmV0dXJuIHR5cGVTdHJpbmdGb3JWYWx1ZSh2KTsKLX0KLQotLy8gRUNNQSAxMS40LjQgYW5kIDEx
LjQuNQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4UmVzb2x2ZU5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBQcmVJ
bmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCi17Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lz
dGVyRm9yTG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29u
c3RhbnQobV9pZGVudCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCAxLjApOwot
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBsb2NhbCwgcjAu
Z2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBnZW5lcmF0b3IuZW1pdFByZUlu
Yyhsb2NhbCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIGxvY2FsKTsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHNpemVf
dCBkZXB0aCA9IDA7Ci0gICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVu
dCwgaW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3Bl
ZFZhcihnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGRlcHRoLCBpbmRleCk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0UHJlSW5jKHByb3BEc3QuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFNjb3BlZFZhcihkZXB0aCwgaW5kZXgsIHByb3BEc3QuZ2V0KCkpOwotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0
LmdldCgpKTs7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IHByb3BEc3QuZ2V0KCksIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0UHJlSW5jKHByb3BE
c3QuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCBwcm9wRHN0LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKLX0KLQotdm9pZCBQcmVJbmNSZXNvbHZlTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3Jh
Z2UsIE5vZGVTdGFjayYpCi17Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUuZ2V0KG1faWRl
bnQudXN0cmluZygpLnJlcCgpKS5nZXRJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpIHsKLSAgICAgICAgaWYgKGlzQ29uc3RhbnQobG9jYWxTdG9yYWdlLCBp
bmRleCkpCi0gICAgICAgICAgICBuZXcgKHRoaXMpIFByZUluY0NvbnN0Tm9kZShpbmRleCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykgUHJlSW5jTG9jYWxWYXJOb2RlKGlu
ZGV4KTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIFByZUluY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlh
YmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICBKU1ZhbHVlKiog
c2xvdCA9ICZleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLQotICAgIGRvdWJs
ZSBuID0gKCpzbG90KS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1ZSogbjIgPSBqc051bWJl
cihuICsgMSk7Ci0gICAgKnNsb3QgPSBuMjsKLSAgICByZXR1cm4gbjI7Ci19Ci0KLUpTVmFsdWUq
IFByZUluY1Jlc29sdmVOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsK
LSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWluLmJlZ2luKCk7Ci0gICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0gICAgLy8gd2UgbXVzdCBhbHdheXMg
aGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5k
KTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgaWYgKCgqaXRl
ciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAg
Ly8gU2VlIHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQot
ICAgICAgICAgICAgSlNPYmplY3QqIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwotCi0gICAgICAgICAgICBk
b3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgSlNWYWx1ZSogbjIgPSBq
c051bWJlcihuICsgMSk7Ci0gICAgICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgbjIp
OwotCi0gICAgICAgICAgICByZXR1cm4gbjI7Ci0gICAgICAgIH0KLQotICAgICAgICArK2l0ZXI7
Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwotCi0gICAgcmV0dXJuIHRocm93VW5kZWZpbmVk
VmFyaWFibGVFcnJvcihleGVjLCBtX2lkZW50KTsKLX0KLQotUmVnaXN0ZXJJRCogUHJlRGVjUmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKSB7Ci0gICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50
KG1faWRlbnQpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0
b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgLTEuMCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKGxv
Y2FsKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgbG9jYWwpOwotICAgIH0KLQotICAgIGludCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRl
cHRoID0gMDsKLSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBp
bmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFy
KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgZGVwdGgsIGluZGV4KTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcmVEZWMocHJvcERzdC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0UHV0U2NvcGVkVmFyKGRlcHRoLCBpbmRleCwgcHJvcERzdC5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0
KCkpOzsKLSAgICB9Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJv
cERzdC5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQcmVEZWMocHJvcERzdC5n
ZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHBy
b3BEc3QuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwotfQotCi12b2lkIFByZURlY1Jlc29sdmVOb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwg
Tm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51
c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSkgewotICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4
KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykgUHJlRGVjQ29uc3ROb2RlKGluZGV4KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbmV3ICh0aGlzKSBQcmVEZWNMb2NhbFZhck5vZGUoaW5kZXgp
OwotICAgIH0KLX0KLQotSlNWYWx1ZSogUHJlRGVjTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVP
YmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIEpTVmFsdWUqKiBzbG90
ID0gJmV4ZWMtPmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVlOwotCi0gICAgZG91YmxlIG4g
PSAoKnNsb3QpLT50b051bWJlcihleGVjKTsKLSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4g
LSAxKTsKLSAgICAqc2xvdCA9IG4yOwotICAgIHJldHVybiBuMjsKLX0KLQotSlNWYWx1ZSogUHJl
RGVjUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAg
IFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWlu
SXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZl
IHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwot
Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgZG8gewotICAgICAgICBpZiAoKCppdGVyKS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICAvLyBT
ZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jlc29sdmVOb2RlOjpldmFsdWF0ZSgpLgotCi0gICAg
ICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwotICAgICAgICAgICAgSlNWYWx1ZSogdiA9
IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7Ci0KLSAgICAgICAgICAgIGRvdWJs
ZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVt
YmVyKG4gLSAxKTsKLSAgICAgICAgICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBuMik7Ci0K
LSAgICAgICAgICAgIHJldHVybiBuMjsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRlcjsKLSAg
ICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJlSW5jQ29uc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotSlNWYWx1ZSogUHJlSW5jQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBl
eGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLT5sb2Nh
bFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykgKyAxKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZURlY0NvbnN0Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFsdWUqIFByZURlY0NvbnN0Tm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMt
PnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICByZXR1
cm4ganNOdW1iZXIoZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWUtPnRvTnVtYmVy
KGV4ZWMpIC0gMSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0
SW5jQ29uc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1
ZSogUG9zdEluY0NvbnN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVD
aGFpbigpLnRvcCgpKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYy0+bG9jYWxTdG9yYWdlKClb
bV9pbmRleF0udmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFBvc3REZWNDb25zdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1KU1ZhbHVlKiBQb3N0RGVjQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmpl
Y3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBqc051bWJlcihl
eGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4QnJhY2tldE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFByZWZpeEJyYWNrZXROb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3Qg
U3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykK
LXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFByZUluY0JyYWNrZXRO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
LXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jh
c2UuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BE
c3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogdmFs
dWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHBy
b3BlcnR5LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZUluYyh2YWx1ZSk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BE
c3QuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBQcmVJbmNCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0g
bV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAg
IEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUt
PnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsKLSAgICBpZiAo
c3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3Bl
cnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLQotICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsg
MSk7Ci0gICAgICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eUluZGV4LCBuMik7Ci0KLSAgICAg
ICAgcmV0dXJuIG4yOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNj
cmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFs
dWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSA/
IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIG4yID0ganNOdW1i
ZXIodi0+dG9OdW1iZXIoZXhlYykgKyAxKTsKLSAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlO
YW1lLCBuMik7Ci0KLSAgICByZXR1cm4gbjI7Ci19Ci0KLVJlZ2lzdGVySUQqIFByZURlY0JyYWNr
ZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKLXsKLSAgICAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgUmVnaXN0
ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHByb3BEc3QuZ2V0KCksIGJhc2Uu
Z2V0KCksIHByb3BlcnR5LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZURlYyh2YWx1ZSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
dmFsdWUpOwotICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHByb3BEc3QuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBQcmVEZWNCcmFja2V0Tm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBi
YXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsK
LSAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAgICAgICAg
UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJh
c2UsIHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKLSAgICAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKHYtPnRvTnVtYmVy
KGV4ZWMpIC0gMSk7Ci0gICAgICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eUluZGV4LCBuMik7
Ci0KLSAgICAgICAgcmV0dXJuIG4yOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90Owot
ICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIG4y
ID0ganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKTsKLSAgICBiYXNlLT5wdXQoZXhlYywg
cHJvcGVydHlOYW1lLCBuMik7Ci0KLSAgICByZXR1cm4gbjI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVmaXhEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBQcmVmaXhEb3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fYmFzZS5nZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFByZUluY0RvdE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJv
cERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQcmVJ
bmModmFsdWUpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgcHJvcERzdC5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFByZUluY0RvdE5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VW
YWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lk
ZW50KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAg
IGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgSlNWYWx1ZSogbjIgPSBqc051bWJl
cihuICsgMSk7Ci0gICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIG4yKTsKLQotICAgIHJldHVy
biBuMjsKLX0KLQotUmVnaXN0ZXJJRCogUHJlRGVjRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAg
ICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm9wRHN0LmdldCgp
LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZURlYyh2YWx1ZSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlKTsK
LSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9w
RHN0LmdldCgpKTsKLX0KLQotSlNWYWx1ZSogUHJlRGVjRG90Tm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9i
YXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpT
T2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIFByb3BlcnR5
U2xvdCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
bV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNV
bmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgZG91YmxlIG4g
PSB2LT50b051bWJlcihleGVjKTsKLSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gLSAxKTsK
LSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgbjIpOwotCi0gICAgcmV0dXJuIG4yOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4RXJyb3JOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIFByZWZpeEVycm9y
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKLXsK
LSAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VFcnJvciwgbV9v
cGVyYXRvciA9PSBPcFBsdXNQbHVzID8gIlByZWZpeCArKyBvcGVyYXRvciBhcHBsaWVkIHRvIHZh
bHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIgOiAiUHJlZml4IC0tIG9wZXJhdG9yIGFwcGxp
ZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIik7Ci19Ci0KLUpTVmFsdWUqIFBy
ZWZpeEVycm9yTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIlByZWZpeCAlcyBvcGVyYXRv
ciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlLiIsCi0gICAgICAgICAg
ICAgICBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiKysiIDogIi0tIik7Ci0gICAgaGFuZGxl
RXhjZXB0aW9uKGV4ZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVW5hcnlQbHVzTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBVbmFyeVBsdXNOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWdpc3Rl
cklEKiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRUb0pTTnVtYmVyKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHNyYyk7Ci19Ci0KLXZvaWQgVW5hcnlQbHVzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjQuNgotSlNWYWx1ZSogVW5hcnlQbHVzTm9k
ZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1
ZSogdiA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICByZXR1cm4gdi0+dG9KU051bWJlcihleGVjKTsKLX0KLQotYm9vbCBVbmFyeVBsdXNO
b2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gbV9leHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotZG91Ymxl
IFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLX0K
LQotaW50MzJfdCBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4
ZWMpOwotfQotCi11aW50MzJfdCBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRl
VG9JbnQzMihleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5l
Z2F0ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJ
RCogTmVnYXRlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCi17Ci0gICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
ZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmVnYXRlKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7Ci19Ci0KLXZvaWQgTmVnYXRlTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjQuNwotSlNW
YWx1ZSogTmVnYXRlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgLy8gTm8gbmVlZCB0byBjaGVjayBleGNlcHRpb24sIGNhbGxlciB3aWxsIGRvIHNv
IHJpZ2h0IGFmdGVyIGV2YWx1YXRlKCkKLSAgICByZXR1cm4ganNOdW1iZXIoLW1fZXhwci0+ZXZh
bHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBOZWdhdGVOb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgZXhjZXB0aW9uLCBjYWxsZXIgd2lsbCBkbyBzbyByaWdodCBhZnRlciBldmFsdWF0
ZVRvTnVtYmVyKCkKLSAgICByZXR1cm4gLW1fZXhwci0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpdHdpc2VOb3ROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogQml0d2lzZU5vdE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQot
ewotICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdE5vdChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBzcmMpOwotfQotCi12b2lkIEJpdHdpc2VOb3ROb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuNC44Ci1pbnQzMl90IEJp
dHdpc2VOb3ROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIH5tX2V4cHItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
LX0KLQotSlNWYWx1ZSogQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50
MzIoZXhlYykpOwotfQotCi1kb3VibGUgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1
YXRlVG9JbnQzMihleGVjKTsKLX0KLQotYm9vbCBCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGVUb0Jv
b2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQotaW50MzJfdCBCaXR3aXNlTm90Tm9kZTo6ZXZh
bHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVy
biBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IEJpdHdpc2VOb3RO
b2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIExvZ2ljYWxOb3ROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWdpc3RlcklE
KiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXROb3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKLX0K
LQotdm9pZCBMb2dpY2FsTm90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0
KCkpOwotfQotCi0vLyBFQ01BIDExLjQuOQotSlNWYWx1ZSogTG9naWNhbE5vdE5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xl
YW4oIW1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQotCi1ib29sIExvZ2ljYWxO
b3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gIW1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNdWx0aXBsaWNhdGl2ZSBOb2RlcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBNdWx0Tm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0g
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5n
ZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0y
LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRNdWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19Ci0KLXZvaWQg
TXVsdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9k
ZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS41LjEKLWRvdWJs
ZSBNdWx0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBkb3VibGUgbjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIGRvdWJsZSBuMiA9IG1fdGVy
bTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0dXJuIG4xICogbjI7Ci19Ci0KLUpT
VmFsdWUqIE11bHROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19
Ci0KLWRvdWJsZSBNdWx0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsK
LX0KLQotYm9vbCBNdWx0Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGlubGluZUV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7Ci0gICAgcmV0dXJuICByZXN1bHQgPiAwLjAgfHwgMC4wID4gcmVzdWx0OyAvLyBO
YU4gcHJvZHVjZXMgZmFsc2UgYXMgd2VsbAotfQotCi1pbnQzMl90IE11bHROb2RlOjpldmFsdWF0
ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLXVpbnQz
Ml90IE11bHROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVt
YmVyKGV4ZWMpKTsKLX0KLQotUmVnaXN0ZXJJRCogRGl2Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGRpdmlkZW5kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOwotICAgIFJl
Z2lzdGVySUQqIGRpdmlzb3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGl2KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZGl2aWRlbmQuZ2V0KCkpLCBkaXZpZGVuZC5nZXQoKSwgZGl2aXNvcik7Ci19Ci0KLXZvaWQg
RGl2Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjUuMgotZG91Ymxl
IERpdk5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgZG91YmxlIG4xID0gbV90ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSBtX3Rlcm0y
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiBuMSAvIG4yOwotfQotCi1KU1Zh
bHVlKiBEaXZOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0K
LWRvdWJsZSBEaXZOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQot
Ci1pbnQzMl90IERpdk5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKLX0KLQotdWludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9V
SW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIE1v
ZE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBkaXZpZGVuZCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBkaXZpc29yID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE1vZChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGRpdmlkZW5kLmdldCgpKSwgZGl2aWRlbmQuZ2V0
KCksIGRpdmlzb3IpOwotfQotCi12b2lkIE1vZE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV90ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKLX0K
LQotLy8gRUNNQSAxMS41LjMKLWRvdWJsZSBNb2ROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGRvdWJsZSBuMSA9IG1fdGVy
bTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVS
Ci0gICAgZG91YmxlIG4yID0gbV90ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICBy
ZXR1cm4gZm1vZChuMSwgbjIpOwotfQotCi1KU1ZhbHVlKiBNb2ROb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBNb2ROb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIE1vZE5vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGRvdWJsZSByZXN1
bHQgPSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiAgcmVzdWx0ID4g
MC4wIHx8IDAuMCA+IHJlc3VsdDsgLy8gTmFOIHByb2R1Y2VzIGZhbHNlIGFzIHdlbGwKLX0KLQot
aW50MzJfdCBNb2ROb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5saW5lRXZhbHVhdGVUb051
bWJlcihleGVjKSk7Ci19Ci0KLXVpbnQzMl90IE1vZE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvVUlu
dDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpdmUgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIGRvdWJsZSB0aHJvd091dE9mTWVtb3J5RXJyb3JUb051
bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU09iamVjdCogZXJy
b3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk91dCBvZiBtZW1vcnkiKTsK
LSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwotICAgIHJldHVybiAwLjA7Ci19Ci0KLS8v
IEVDTUEgMTEuNgotc3RhdGljIEpTVmFsdWUqIGFkZFNsb3dDYXNlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCi17Ci0gICAgLy8gZXhjZXB0
aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKLSAgICBKU1ZhbHVl
KiBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjLCBVbnNwZWNpZmllZFR5cGUpOwotICAgIEpTVmFs
dWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3BlY2lmaWVkVHlwZSk7Ci0KLSAgICBp
ZiAocDEtPmlzU3RyaW5nKCkgfHwgcDItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgVVN0cmluZyB2
YWx1ZSA9IHAxLT50b1N0cmluZyhleGVjKSArIHAyLT50b1N0cmluZyhleGVjKTsKLSAgICAgICAg
aWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4ganNOdW1iZXIocDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRvTnVtYmVyKGV4ZWMp
KTsKLX0KLQotc3RhdGljIGRvdWJsZSBhZGRTbG93Q2FzZVRvTnVtYmVyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCi17Ci0gICAgLy8gZXhj
ZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKLSAgICBKU1Zh
bHVlKiBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjLCBVbnNwZWNpZmllZFR5cGUpOwotICAgIEpT
VmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3BlY2lmaWVkVHlwZSk7Ci0KLSAg
ICBpZiAocDEtPmlzU3RyaW5nKCkgfHwgcDItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgVVN0cmlu
ZyB2YWx1ZSA9IHAxLT50b1N0cmluZyhleGVjKSArIHAyLT50b1N0cmluZyhleGVjKTsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvclRvTnVtYmVyKGV4ZWMpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9Eb3VibGUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcDEtPnRvTnVtYmVyKGV4ZWMpICsgcDItPnRvTnVtYmVyKGV4
ZWMpOwotfQotCi0vLyBGYXN0LXBhdGggY2hvaWNlcyBoZXJlIGFyZSBiYXNlZCBvbiBmcmVxdWVu
Y3kgZGF0YSBmcm9tIFN1blNwaWRlcjoKLS8vICAgIDx0aW1lcz4gQWRkIGNhc2U6IDx0MT4gPHQy
PgotLy8gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgICA1NjI3MTYwIEFkZCBj
YXNlOiAxIDEKLS8vICAgIDI0NzQyNyAgQWRkIGNhc2U6IDUgNQotLy8gICAgMjA5MDEgICBBZGQg
Y2FzZTogNSA2Ci0vLyAgICAxMzk3OCAgIEFkZCBjYXNlOiA1IDEKLS8vICAgIDQwMDAgICAgQWRk
IGNhc2U6IDEgNQotLy8gICAgMSAgICAgICBBZGQgY2FzZTogMyA1Ci0KLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSogYWRkKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwg
SlNWYWx1ZSogdjIpCi17Ci0gICAgSlNUeXBlIHQxID0gdjEtPnR5cGUoKTsKLSAgICBKU1R5cGUg
dDIgPSB2Mi0+dHlwZSgpOwotICAgIGNvbnN0IHVuc2lnbmVkIGJvdGhUeXBlcyA9ICh0MSA8PCAz
KSB8IHQyOwotCi0gICAgaWYgKGJvdGhUeXBlcyA9PSAoKE51bWJlclR5cGUgPDwgMykgfCBOdW1i
ZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b051bWJlcihleGVjKSArIHYy
LT50b051bWJlcihleGVjKSk7Ci0gICAgaWYgKGJvdGhUeXBlcyA9PSAoKFN0cmluZ1R5cGUgPDwg
MykgfCBTdHJpbmdUeXBlKSkgewotICAgICAgICBVU3RyaW5nIHZhbHVlID0gc3RhdGljX2Nhc3Q8
U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52
YWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4ganNTdHJpbmcodmFs
dWUpOwotICAgIH0KLQotICAgIC8vIEFsbCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9u
Ci0gICAgcmV0dXJuIGFkZFNsb3dDYXNlKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZG91YmxlIGFkZFRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiB2MSwgSlNWYWx1ZSogdjIpCi17Ci0gICAgSlNUeXBlIHQxID0gdjEtPnR5cGUoKTsKLSAg
ICBKU1R5cGUgdDIgPSB2Mi0+dHlwZSgpOwotICAgIGNvbnN0IHVuc2lnbmVkIGJvdGhUeXBlcyA9
ICh0MSA8PCAzKSB8IHQyOwotCi0gICAgaWYgKGJvdGhUeXBlcyA9PSAoKE51bWJlclR5cGUgPDwg
MykgfCBOdW1iZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIHYxLT50b051bWJlcihleGVjKSArIHYy
LT50b051bWJlcihleGVjKTsKLSAgICBpZiAoYm90aFR5cGVzID09ICgoU3RyaW5nVHlwZSA8PCAz
KSB8IFN0cmluZ1R5cGUpKSB7Ci0gICAgICAgIFVTdHJpbmcgdmFsdWUgPSBzdGF0aWNfY2FzdDxT
dHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZh
bHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3JUb051bWJlcihleGVjKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvRG91YmxlKCk7Ci0gICAgfQotCi0gICAgLy8gQWxsIG90aGVyIGNhc2VzIGFyZSBwcmV0dHkg
dW5jb21tb24KLSAgICByZXR1cm4gYWRkU2xvd0Nhc2VUb051bWJlcihleGVjLCB2MSwgdjIpOwot
fQotCi1SZWdpc3RlcklEKiBBZGROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdEFkZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMx
LmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBBZGROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7Ci19
Ci0KLS8vIEVDTUEgMTEuNi4xCi1KU1ZhbHVlKiBBZGROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fdGVybTEtPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU1ZhbHVlKiB2
MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICByZXR1cm4gYWRkKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLWRvdWJsZSBBZGROb2RlOjpp
bmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHYxID0gbV90ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0KLSAgICBKU1ZhbHVlKiB2MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4
ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotCi0gICAgcmV0dXJuIGFkZFRvTnVt
YmVyKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLWRvdWJsZSBBZGROb2RlOjpldmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1pbnQzMl90IEFkZE5vZGU6OmV2YWx1YXRlVG9JbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotdWludDMyX3QgQWRk
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KSk7Ci19Ci0KLWRvdWJsZSBBZGROdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBkb3VibGUgbjEgPSBtX3Rlcm0x
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIGRvdWJsZSBuMiA9IG1fdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0
dXJuIG4xICsgbjI7Ci19Ci0KLUpTVmFsdWUqIEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5l
RXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBBZGROdW1iZXJzTm9kZTo6ZXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsKLX0KLQotaW50MzJfdCBBZGROdW1iZXJz
Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykp
OwotfQotCi11aW50MzJfdCBBZGROdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIo
aW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLUpTVmFsdWUqIEFkZFN0cmluZ3NO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlKiB2MSA9IG1fdGVybTEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICBKU1ZhbHVlKiB2MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIp
LT52YWx1ZSgpKTsKLX0KLQotSlNWYWx1ZSogQWRkU3RyaW5nTGVmdE5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV90ZXJt
MS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpT
VmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMsIFVuc3Bl
Y2lmaWVkVHlwZSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+
KHYxKS0+dmFsdWUoKSArIHAyLT50b1N0cmluZyhleGVjKSk7Ci19Ci0KLUpTVmFsdWUqIEFkZFN0
cmluZ1JpZ2h0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgSlNWYWx1ZSogdjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogdjIgPSBtX3Rlcm0yLT5ldmFsdWF0ZShl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogcDEgPSB2
MS0+dG9QcmltaXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKLSAgICByZXR1cm4ganNTdHJp
bmcocDEtPnRvU3RyaW5nKGV4ZWMpICsgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52YWx1
ZSgpKTsKLX0KLQotUmVnaXN0ZXJJRCogU3ViTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNy
YzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCog
c3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRTdWIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgp
KSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19Ci0KLXZvaWQgU3ViTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNr
LmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0
KCkpOwotfQotCi0vLyBFQ01BIDExLjYuMgotZG91YmxlIFN1Yk5vZGU6OmlubGluZUV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIG4x
ID0gbV90ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSBtX3Rlcm0yLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OwotICAgIHJldHVybiBuMSAtIG4yOwotfQotCi1KU1ZhbHVlKiBTdWJOb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoaW5s
aW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLWRvdWJsZSBTdWJOb2RlOjpldmFsdWF0
ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1pbnQzMl90IFN1Yk5vZGU6OmV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotdWlu
dDMyX3QgU3ViTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051
bWJlcihleGVjKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTaGlm
dCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJ
RCogTGVmdFNoaWZ0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzaGlmdCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZWZ0
U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWwuZ2V0KCkpLCB2YWwuZ2V0
KCksIHNoaWZ0KTsKLX0KLQotdm9pZCBMZWZ0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7
Ci19Ci0KLS8vIEVDTUEgMTEuNy4xCi1pbnQzMl90IExlZnRTaGlmdE5vZGU6OmlubGluZUV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpbnQgaTEg
PSBtX3Rlcm0xLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgdW5zaWduZWQgaW50IGkyID0gbV90ZXJtMi0+ZXZhbHVhdGVUb1VJbnQzMihl
eGVjKSAmIDB4MWY7Ci0gICAgcmV0dXJuIChpMSA8PCBpMik7Ci19Ci0KLUpTVmFsdWUqIExlZnRT
aGlmdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOwotfQotCi1kb3Vi
bGUgTGVmdFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQot
Ci1pbnQzMl90IExlZnRTaGlmdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMp
OwotfQotCi11aW50MzJfdCBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50
MzIoZXhlYyk7Ci19Ci0KLVJlZ2lzdGVySUQqIFJpZ2h0U2hpZnROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOwotICAgIFJl
Z2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdFJpZ2h0U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCB2YWwuZ2V0KCkpLCB2YWwuZ2V0KCksIHNoaWZ0KTsKLX0KLQotdm9pZCBSaWdodFNo
aWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjcuMgotaW50MzJf
dCBSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIGludCBpMSA9IG1fdGVybTEtPmV2YWx1YXRlVG9JbnQzMihl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICB1bnNpZ25lZCBpbnQgaTIg
PSBtX3Rlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKLSAgICByZXR1cm4gKGkx
ID4+IGkyKTsKLX0KLQotSlNWYWx1ZSogUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFs
dWF0ZVRvSW50MzIoZXhlYykpOwotfQotCi1kb3VibGUgUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlu
bGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQotaW50MzJfdCBSaWdodFNoaWZ0Tm9kZTo6
ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IFJpZ2h0U2hp
ZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLVJlZ2lzdGVy
SUQqIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWwgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc2hpZnQg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0VW5zaWduZWRSaWdodFNoaWZ0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
dmFsLmdldCgpKSwgdmFsLmdldCgpLCBzaGlmdCk7Ci19Ci0KLXZvaWQgVW5zaWduZWRSaWdodFNo
aWZ0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjcuMwotdWludDMy
X3QgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb1VJbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICB1bnNpZ25lZCBpbnQgaTEgPSBtX3Rlcm0x
LT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIHVuc2lnbmVkIGludCBpMiA9IG1fdGVybTItPmV2YWx1YXRlVG9VSW50MzIoZXhlYykgJiAw
eDFmOwotICAgIHJldHVybiAoaTEgPj4gaTIpOwotfQotCi1KU1ZhbHVlKiBVbnNpZ25lZFJpZ2h0
U2hpZnROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKSk7Ci19Ci0KLWRv
dWJsZSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvVUludDMy
KGV4ZWMpOwotfQotCi1pbnQzMl90IFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlVG9J
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5l
RXZhbHVhdGVUb1VJbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgVW5zaWduZWRSaWdodFNoaWZ0
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb1VJbnQzMihleGVjKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlbGF0aW9uYWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbGVzc1RoYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKLXsKLSAgICBk
b3VibGUgbjE7Ci0gICAgZG91YmxlIG4yOwotICAgIEpTVmFsdWUqIHAxOwotICAgIEpTVmFsdWUq
IHAyOwotICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhl
YywgbjEsIHAxKTsKLSAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0aXZlTnVt
YmVyKGV4ZWMsIG4yLCBwMik7Ci0KLSAgICBpZiAod2FzTm90U3RyaW5nMSB8IHdhc05vdFN0cmlu
ZzIpCi0gICAgICAgIHJldHVybiBuMSA8IG4yOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0lt
cCo+KHAyKS0+dmFsdWUoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGxlc3NUaGFuRXEoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKLXsK
LSAgICBkb3VibGUgbjE7Ci0gICAgZG91YmxlIG4yOwotICAgIEpTVmFsdWUqIHAxOwotICAgIEpT
VmFsdWUqIHAyOwotICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1i
ZXIoZXhlYywgbjEsIHAxKTsKLSAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0
aXZlTnVtYmVyKGV4ZWMsIG4yLCBwMik7Ci0KLSAgICBpZiAod2FzTm90U3RyaW5nMSB8IHdhc05v
dFN0cmluZzIpCi0gICAgICAgIHJldHVybiBuMSA8PSBuMjsKLQotICAgIHJldHVybiAhKHN0YXRp
Y19jYXN0PGNvbnN0IFN0cmluZ0ltcCo+KHAyKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PGNvbnN0
IFN0cmluZ0ltcCo+KHAxKS0+dmFsdWUoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIExlc3NOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdl
dCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIu
Z2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExlc3MoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19Ci0KLXZvaWQg
TGVzc05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9k
ZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS44LjEKLWJvb2wg
TGVzc05vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVy
biBsZXNzVGhhbihleGVjLCB2MSwgdjIpOwotfQotCi1KU1ZhbHVlKiBMZXNzTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpzQm9vbGVh
bihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7Ci19Ci0KLWJvb2wgTGVzc05vZGU6OmV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotYm9vbCBMZXNzTnVtYmVy
c05vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGRvdWJsZSBuMSA9IG1fZXhwcjEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBkb3VibGUgbjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiBuMSA8IG4yOwotfQotCi1KU1ZhbHVl
KiBMZXNzTnVtYmVyc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykp
OwotfQotCi1ib29sIExlc3NOdW1iZXJzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOwotfQotCi1ib29sIExlc3NTdHJpbmdzTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jv
b2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEg
PSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
ICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0cmluZ0ltcCo+KHYxKS0+dmFsdWUoKSA8IHN0YXRpY19jYXN0PFN0cmluZ0lt
cCo+KHYyKS0+dmFsdWUoKTsKLX0KLQotSlNWYWx1ZSogTGVzc1N0cmluZ3NOb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNCb29sZWFu
KGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKLX0KLQotYm9vbCBMZXNzU3RyaW5nc05v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotUmVnaXN0ZXJJ
RCogR3JlYXRlck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TGVzcyhn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBz
cmMyKTsKLX0KLQotdm9pZCBHcmVhdGVyTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4
cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0v
LyBFQ01BIDExLjguMgotYm9vbCBHcmVhdGVyTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4
cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAg
SlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGxlc3NUaGFuKGV4ZWMsIHYyLCB2MSk7Ci19Ci0KLUpT
VmFsdWUqIEdyZWF0ZXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
KTsKLX0KLQotYm9vbCBHcmVhdGVyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpOwotfQotCi1SZWdpc3RlcklEKiBMZXNzRXFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3Rl
cklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdExlc3NFcShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNy
YzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBMZXNzRXFOb2RlOjpvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9leHByMS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuOC4zCi1ib29sIExlc3NFcU5vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiBsZXNzVGhhbkVx
KGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLUpTVmFsdWUqIExlc3NFcU5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5l
RXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQotCi1ib29sIExlc3NFcU5vZGU6OmV2YWx1YXRl
VG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotUmVnaXN0ZXJJRCogR3JlYXRlckVx
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Ci17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByMi5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIxLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzRXEoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7Ci19
Ci0KLXZvaWQgR3JlYXRlckVxTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdl
dCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0vLyBFQ01B
IDExLjguNAotYm9vbCBHcmVhdGVyRXFOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEt
PmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1Zh
bHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TkJPT0xFQU4KLSAgICByZXR1cm4gbGVzc1RoYW5FcShleGVjLCB2MiwgdjEpOwotfQotCi1KU1Zh
bHVlKiBHcmVhdGVyRXFOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
KTsKLX0KLQotYm9vbCBHcmVhdGVyRXFOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci19Ci0KLVJlZ2lzdGVySUQqIEluc3RhbmNlT2ZOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAg
UmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJbnN0YW5jZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgYmFzZSk7Ci19CisvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEluc3RhbmNlT2ZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKK1JlZ2lzdGVySUQqIERlbGV0
ZURvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0
YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0
ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAsIG1faWRlbnQpOwogfQog
Ci0vLyBFQ01BIDExLjguNgotSlNWYWx1ZSogSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVl
KiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZB
TFVFCi0KLSAgICBpZiAoIXYyLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlz
IG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggaW5zdGFuY2VvZiBvcGVyYXRvci4i
LCB2MiwgbV9leHByMi5nZXQoKSk7Ci0KLSAgICBKU09iamVjdCogbzIgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYyKTsKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVW
YWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgc3BlYywgb25seSBzb21lIHR5cGVzIG9mIG9iamVjdHMgImltcGxlbWVu
dCIgdGhlIFtbSGFzSW5zdGFuY2VdXSBwcm9wZXJ0eS4KLSAgICAvLyBCdXQgd2UgYXJlIHN1cHBv
c2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVyZSB0aGUgb2JqZWN0IGRvZXMgbm90ICJoYXZl
IiB0aGUgW1tIYXNJbnN0YW5jZV1dCi0gICAgLy8gcHJvcGVydHkuIEl0IHNlZW1zIHRoYXQgYWxs
IG9iamVjdHMgaGF2ZSB0aGUgcHJvcGVydHksIGJ1dCBub3QgYWxsIGltcGxlbWVudCBpdCwgc28g
aW4gdGhpcwotICAgIC8vIGNhc2Ugd2UgcmV0dXJuIGZhbHNlIChjb25zaXN0ZW50IHdpdGggTW96
aWxsYSkuCi0gICAgaWYgKCFvMi0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkpCi0gICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oZmFsc2UpOworUmVnaXN0ZXJJRCogRGVsZXRlVmFsdWVOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKIAotICAgIHJldHVybiBqc0Jvb2xlYW4o
bzItPmhhc0luc3RhbmNlKGV4ZWMsIHYxKSk7CisgICAgLy8gZGVsZXRlIG9uIGEgbm9uLWxvY2F0
aW9uIGV4cHJlc3Npb24gaWdub3JlcyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZQorICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
dHJ1ZSk7CiB9CiAKLWJvb2wgSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFs
dWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
Qk9PTEVBTgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZvaWROb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGlmICghdjItPmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVz
dWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdp
dGggJ2luc3RhbmNlb2YnIG9wZXJhdG9yLiIsIHYyLCBtX2V4cHIyLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KK1JlZ2lzdGVySUQqIFZvaWROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjAu
Z2V0KCkpLCBqc1VuZGVmaW5lZCgpKTsKK30KIAotICAgIEpTT2JqZWN0KiBvMiA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4odjIpOworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5
cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBvbmx5IHNvbWUgdHlwZXMgb2Ygb2JqZWN0cyAiaW1w
bGVtZW50IiB0aGUgW1tIYXNJbnN0YW5jZV1dIHByb3BlcnR5LgotICAgIC8vIEJ1dCB3ZSBhcmUg
c3VwcG9zZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHdoZXJlIHRoZSBvYmplY3QgZG9lcyBub3Qg
ImhhdmUiIHRoZSBbW0hhc0luc3RhbmNlXV0KLSAgICAvLyBwcm9wZXJ0eS4gSXQgc2VlbXMgdGhh
dCBhbGwgb2JqZWN0cyBoYXZlIHRoZSBwcm9wZXJ0eSwgYnV0IG5vdCBhbGwgaW1wbGVtZW50IGl0
LCBzbyBpbiB0aGlzCi0gICAgLy8gY2FzZSB3ZSByZXR1cm4gZmFsc2UgKGNvbnNpc3RlbnQgd2l0
aCBNb3ppbGxhKS4KLSAgICBpZiAoIW8yLT5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworUmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChS
ZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRlbnQpKQor
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwpOwogCi0gICAgcmV0dXJuIG8yLT5oYXNJbnN0YW5jZShleGVjLCB2
MSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjcmF0Y2ggPSBnZW5lcmF0b3IuZW1pdFJlc29s
dmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKHNjcmF0Y2guZ2V0KCksIHNjcmF0Y2guZ2V0KCksIG1faWRlbnQp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFR5cGVPZihnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIHNjcmF0Y2guZ2V0KCkpLCBzY3JhdGNoLmdldCgpKTsKIH0KIAotUmVnaXN0ZXJJ
RCogSW5Ob2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJbihnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHByb3BlcnR5LmdldCgpKSwgcHJvcGVydHkuZ2V0
KCksIGJhc2UpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZh
bHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEluTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2sp
CitSZWdpc3RlcklEKiBUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHBy
Mi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHNyYy5nZXQoKSk7CiB9CiAKLS8vIEVDTUEgMTEuOC43Ci1KU1ZhbHVlKiBJbk5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogUHJlSW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIEpTVmFs
dWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKLSAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJh
dG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5p
c0xvY2FsQ29uc3RhbnQobV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByMCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCAxLjApOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBs
b2NhbCwgcjAuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFByZUluYyhsb2NhbCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChkc3QsIGxvY2FsKTsKKyAgICB9CiAKLSAgICBpZiAoIXYyLT5pc09iamVj
dCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAl
cyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1
c2VkIHdpdGggJ2luJyBvcGVyYXRvci4iLCB2MiwgbV9leHByMi5nZXQoKSk7CisgICAgaW50IGlu
ZGV4ID0gMDsKKyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGlmIChnZW5lcmF0b3IuZmluZFNj
b3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5
bWJvbE1hcmtlcigpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBk
ZXB0aCwgaW5kZXgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByZUluYyhwcm9wRHN0LmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCBwcm9w
RHN0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7OworICAgIH0KIAotICAgIHJldHVybiBqc0Jvb2xl
YW4oc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2MiktPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZp
ZXIodjEtPnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0
ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBwcm9wRHN0LmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5lcmF0b3IuZW1pdFByZUlu
Yyhwcm9wRHN0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgcHJvcERzdC5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CiAKLWJvb2wgSW5Ob2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIFByZURlY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4K
KyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbCht
X2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50
KSkgeworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRM
b2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIC0xLjApOworICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBsb2NhbCwgcjAuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZW1pdFByZURlYyhsb2NhbCk7Cisg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxv
Y2FsKTsKKyAgICB9CiAKLSAgICBpZiAoIXYyLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVz
KSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwg
djIsIG1fZXhwcjIuZ2V0KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IGluZGV4
ID0gMDsKKyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3Bl
ZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJv
bE1hcmtlcigpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJh
dG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBkZXB0
aCwgaW5kZXgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByZURlYyhwcm9wRHN0LmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCBwcm9wRHN0
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7OwogICAgIH0KIAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHYyKS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcih2MS0+dG9TdHJp
bmcoZXhlYykpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50
ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERz
dC5nZXQoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVEZWMocHJvcERzdC5nZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHByb3BE
c3QuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRl
ZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRXF1YWxpdHkgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLVJlZ2lzdGVySUQqIEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBz
cmMxLmdldCgpLCBzcmMyKTsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
cmVmaXhCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZv
aWQgRXF1YWxOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
IG5vZGVTdGFjaykKK1JlZ2lzdGVySUQqIFByZUluY0JyYWNrZXROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQo
KSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
RHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChwcm9wRHN0LmdldCgpLCBiYXNlLmdldCgpLCBw
cm9wZXJ0eS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVJbmModmFsdWUpOworICAgIGdl
bmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHZhbHVlKTsK
KyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9w
RHN0LmdldCgpKTsKIH0KIAotLy8gRUNNQSAxMS45LjEKLWJvb2wgRXF1YWxOb2RlOjppbmxpbmVF
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIFByZURlY0JyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4K
LQotICAgIHJldHVybiBlcXVhbChleGVjLCB2MSwgdjIpOworICAgIAorICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
LmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0QnlWYWwocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFs
KGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CiAKLUpT
VmFsdWUqIEVxdWFsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7
Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4RG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgRXF1YWxOb2RlOjpldmFsdWF0
ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIFBy
ZUluY0RvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0
KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eUlkKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIGdlbmVyYXRvci5l
bWl0UHJlSW5jKHZhbHVlKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgdmFsdWUpOworICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25J
Zk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQogCi1SZWdpc3RlcklEKiBOb3RFcXVhbE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQor
UmVnaXN0ZXJJRCogUHJlRGVjRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc3JjMiA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXROb3RFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkp
LCBzcmMxLmdldCgpLCBzcmMyKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
RHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIG1f
aWRlbnQpOworICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUpOworICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQog
Ci12b2lkIE5vdEVxdWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgp
KTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQorLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeEVycm9yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi0vLyBFQ01BIDExLjkuMgotYm9vbCBOb3RFcXVhbE5vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVn
aXN0ZXJJRCogUHJlZml4RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqKQogewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0g
bV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgot
Ci0gICAgcmV0dXJuICFlcXVhbChleGVjLHYxLCB2Mik7CisgICAgcmV0dXJuIGVtaXRUaHJvd0Vy
cm9yKGdlbmVyYXRvciwgUmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/
ICJQcmVmaXggKysgb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVy
ZW5jZS4iIDogIlByZWZpeCAtLSBvcGVyYXRvciBhcHBsaWVkIHRvIHZhbHVlIHRoYXQgaXMgbm90
IGEgcmVmZXJlbmNlLiIpOwogfQogCi1KU1ZhbHVlKiBOb3RFcXVhbE5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFVuYXJ5UGx1c05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotYm9vbCBOb3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogVW5hcnlQbHVzTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGlu
ZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNO
dW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKIH0KIAotUmVnaXN0
ZXJJRCogU3RyaWN0RXF1YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dFN0cmljdEVxdWFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSks
IHNyYzEuZ2V0KCksIHNyYzIpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE5lZ2F0ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBT
dHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQorUmVnaXN0ZXJJRCogTmVnYXRlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwor
ICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5lZ2F0ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCBzcmMpOwogfQogCi0vLyBFQ01BIDExLjkuNAotYm9vbCBTdHJpY3RFcXVhbE5vZGU6
OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotCi0gICAgcmV0dXJuIHN0cmlj
dEVxdWFsKHYxLCB2Mik7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQml0
d2lzZU5vdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU1ZhbHVlKiBT
dHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQor
UmVnaXN0ZXJJRCogQml0d2lzZU5vdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZh
bHVhdGVUb0Jvb2xlYW4oZXhlYykpOworICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdE5vdChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMpOwogfQogCi1ib29sIFN0cmljdEVx
dWFsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxOb3ROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotUmVnaXN0ZXJJRCogTm90U3RyaWN0RXF1YWxOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK1JlZ2lzdGVy
SUQqIExvZ2ljYWxOb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5v
dFN0cmljdEVxdWFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSks
IHNyYzEuZ2V0KCksIHNyYzIpOworICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vdChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMpOwogfQogCi12b2lkIE5vdFN0cmljdEVxdWFs
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIE11bHRpcGxpY2F0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLS8vIEVDTUEgMTEuOS41Ci1ib29sIE5vdFN0cmljdEVxdWFsTm9kZTo6aW5saW5l
RXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3Rl
cklEKiBNdWx0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIy
LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0KLSAgICBy
ZXR1cm4gIXN0cmljdEVxdWFsKHYxLCB2Mik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3Jj
MiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRNdWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwg
c3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLUpTVmFsdWUqIE5vdFN0cmljdEVxdWFsTm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBEaXZOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZGl2aWRlbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJt
MS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogZGl2aXNvciA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREaXYoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBkaXZpZGVuZC5nZXQoKSksIGRpdmlkZW5kLmdldCgpLCBkaXZp
c29yKTsKIH0KIAotYm9vbCBOb3RTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogTW9kTm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBkaXZpZGVuZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdp
c3RlcklEKiBkaXZpc29yID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdE1vZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGRpdmlkZW5kLmdldCgpKSwgZGl2aWRlbmQuZ2V0KCksIGRpdmlzb3IpOwogfQogCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQml0IE9wZXJhdGlvbiBOb2RlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIEJpdEFuZE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkp
OwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQo
KSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qml0QW5kKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgQml0QW5kTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCitSZWdpc3RlcklEKiBBZGRO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5h
cHBlbmQobV9leHByMS5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRBZGQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5n
ZXQoKSwgc3JjMik7CiB9CiAKLS8vIEVDTUEgMTEuMTAKLUpTVmFsdWUqIEJpdEFuZE5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogU3ViTm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIHJldHVybiBqc051bWJlckZy
b21BbmQoZXhlYywgdjEsIHYyKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dFN1YihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdl
dCgpLCBzcmMyKTsKIH0KIAotaW50MzJfdCBCaXRBbmROb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaW50MzJfdCBpMSA9IG1f
ZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1C
RVIKLSAgICBpbnQzMl90IGkyID0gbV9leHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAg
IHJldHVybiAoaTEgJiBpMik7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
U2hpZnQgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWRvdWJs
ZSBCaXRBbmROb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQorUmVnaXN0ZXJJRCogTGVmdFNoaWZ0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fdGVybTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExlZnRT
aGlmdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbC5nZXQoKSksIHZhbC5nZXQo
KSwgc2hpZnQpOwogfQogCi1ib29sIEJpdEFuZE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogUmlnaHRTaGlmdE5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAg
IHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHZhbCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdpc3Rl
cklEKiBzaGlmdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRSaWdodFNoaWZ0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgdmFsLmdldCgpKSwgdmFsLmdldCgpLCBzaGlmdCk7CiB9CiAKLWludDMyX3QgQml0QW5kTm9k
ZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0
ZXJJRCogVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9J
bnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fdGVybTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fdGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFVuc2lnbmVk
UmlnaHRTaGlmdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbC5nZXQoKSksIHZh
bC5nZXQoKSwgc2hpZnQpOwogfQogCi11aW50MzJfdCBCaXRBbmROb2RlOjpldmFsdWF0ZVRvVUlu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUmVsYXRpb25hbCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJl
Z2lzdGVySUQqIEJpdFhPck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJRCogTGVzc05vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwogICAgIFJlZ2lz
dGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0Qml0WE9yKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
c3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwotfQotCi12b2lkIEJpdFhPck5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewot
ICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwog
fQogCi1pbnQzMl90IEJpdFhPck5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIEdyZWF0ZXJOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpbnQgaTEg
PSBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgaW50IGkyID0gbV9leHByMi0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAg
IHJldHVybiAoaTEgXiBpMik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRM
ZXNzKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0
KCksIHNyYzIpOwogfQogCi1KU1ZhbHVlKiBCaXRYT3JOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIExlc3NFcU5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBq
c051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lz
dGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TGVzc0VxKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
c3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwogfQogCi1kb3VibGUgQml0WE9yTm9kZTo6
ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVy
SUQqIEdyZWF0ZXJFcU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
Mi5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzRXEoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAK
LWJvb2wgQml0WE9yTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCitSZWdpc3RlcklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRJbnN0YW5jZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkp
LCB2YWx1ZS5nZXQoKSwgYmFzZSk7CiB9CiAKLWludDMyX3QgQml0WE9yTm9kZTo6ZXZhbHVhdGVU
b0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogSW5Ob2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAg
ICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEluKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgcHJvcGVydHkuZ2V0KCkpLCBwcm9wZXJ0eS5nZXQoKSwgYmFzZSk7CiB9CiAKLXVpbnQzMl90
IEJpdFhPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcXVhbGl0eSBOb2RlcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUmVnaXN0ZXJJRCogQml0T3JOb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK1JlZ2lzdGVySUQq
IEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByMS5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaXRPcihnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMy
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotdm9pZCBCaXRP
ck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0
YWNrKQorUmVnaXN0ZXJJRCogTm90RXF1YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhw
cjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7
CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgp
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb3RFcXVhbChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotaW50MzJf
dCBCaXRPck5vZGU6OmlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKK1JlZ2lzdGVySUQqIFN0cmljdEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaW50IGkxID0gbV9leHBy
MS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIGludCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICByZXR1cm4g
KGkxIHwgaTIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0U3RyaWN0RXF1
YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQo
KSwgc3JjMik7CiB9CiAKLUpTVmFsdWUqIEJpdE9yTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBOb3RTdHJpY3RFcXVhbE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJl
dHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYykpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOworICAg
IFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm90U3RyaWN0RXF1YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLWRvdWJs
ZSBCaXRPck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaXQgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBCaXRPck5vZGU6OmV2YWx1YXRlVG9C
b29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogQml0QW5k
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAg
ICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdEFuZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotaW50MzJfdCBCaXRP
ck5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1Jl
Z2lzdGVySUQqIEJpdFhPck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhl
Yyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaXRYT3IoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9
CiAKLXVpbnQzMl90IEJpdE9yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIEJpdE9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEJpdE9yKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEu
Z2V0KCksIHNyYzIpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmlu
YXJ5IExvZ2ljYWwgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzk2OSwz
MyArOTc3LDYgQEAgUmVnaXN0ZXJJRCogTG9naWNhbEFuZE5vZGU6OmVtaXRDb2RlKENvZAogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRlbXAuZ2V0
KCkpOwogfQogCi12b2lkIExvZ2ljYWxBbmROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0
b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1f
ZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7Ci19Ci0K
LS8vIEVDTUEgMTEuMTEKLUpTVmFsdWUqIExvZ2ljYWxBbmROb2RlOjpldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgYm9vbCBiMSA9
IHYxLT50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBp
ZiAoIWIxKQotICAgICAgICByZXR1cm4gdjE7Ci0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5l
dmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiB2
MjsKLX0KLQotYm9vbCBMb2dpY2FsQW5kTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9vbCBiID0gbV9leHByMS0+ZXZhbHVhdGVU
b0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVy
biBiICYmIG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQotCiBSZWdpc3RlcklE
KiBMb2dpY2FsT3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci50
ZW1wRGVzdGluYXRpb24oZHN0KTsKQEAgLTQwMDksMjggKzk5MCw2IEBAIFJlZ2lzdGVySUQqIExv
Z2ljYWxPck5vZGU6OmVtaXRDb2RlKENvZGUKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rl
c3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wLmdldCgpKTsKIH0KIAotdm9pZCBMb2dpY2FsT3JO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9leHByMS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIExvZ2ljYWxPck5vZGU6OmV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYx
ID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
LSAgICBpZiAodjEtPnRvQm9vbGVhbihleGVjKSkKLSAgICAgICAgcmV0dXJuIHYxOwotICAgIHJl
dHVybiBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLX0KLQotYm9vbCBMb2dpY2FsT3JOb2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBi
b29sIGIgPSBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgfHwgbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25kaXRp
b25hbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIENv
bmRpdGlvbmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCkBAIC00MDUzLDExNSArMTAxMiw2IEBAIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFs
Tm9kZTo6ZW1pdENvZGUoQ28KICAgICByZXR1cm4gbmV3RHN0LmdldCgpOwogfQogCi12b2lkIENv
bmRpdGlvbmFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9sb2dpY2FsLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4xMgotSlNWYWx1ZSogQ29uZGl0aW9u
YWxOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBi
b29sIGIgPSBtX2xvZ2ljYWwtPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIxLT5ldmFsdWF0ZShleGVjKSA6
IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotfQotCi1ib29sIENvbmRpdGlvbmFsTm9kZTo6ZXZh
bHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9v
bCBiID0gbV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIxLT5ldmFsdWF0ZVRvQm9vbGVh
bihleGVjKSA6IG1fZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotfQotCi1kb3VibGUg
Q29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIx
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpIDogbV9leHByMi0+ZXZhbHVhdGVUb051bWJlcihleGVj
KTsKLX0KLQotaW50MzJfdCBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBib29sIGIgPSBtX2xvZ2ljYWwtPmV2YWx1
YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJl
dHVybiBiID8gbV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpIDogbV9leHByMi0+ZXZhbHVh
dGVUb0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRl
VG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9vbCBiID0g
bV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICByZXR1cm4gYiA/IG1fZXhwcjEtPmV2YWx1YXRlVG9VSW50MzIoZXhlYykg
OiBtX2V4cHIyLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpOwotfQotCi0vLyBFQ01BIDExLjEzCi0K
LXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1l
bnQoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGN1cnJlbnQsIEV4cHJl
c3Npb25Ob2RlKiByaWdodCwgT3BlcmF0b3Igb3BlcikgS0pTX0ZBU1RfQ0FMTDsKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGN1cnJlbnQsIEV4cHJlc3Npb25Ob2Rl
KiByaWdodCwgT3BlcmF0b3Igb3BlcikKLXsKLSAgICBKU1ZhbHVlKiB2OwotICAgIGludCBpMTsK
LSAgICBpbnQgaTI7Ci0gICAgdW5zaWduZWQgaW50IHVpOwotICAgIHN3aXRjaCAob3Blcikgewot
ICAgICAgICBjYXNlIE9wTXVsdEVxOgotICAgICAgICAgICAgdiA9IGpzTnVtYmVyKGN1cnJlbnQt
PnRvTnVtYmVyKGV4ZWMpICogcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BEaXZFcToKLSAgICAgICAgICAgIHYgPSBqc051
bWJlcihjdXJyZW50LT50b051bWJlcihleGVjKSAvIHJpZ2h0LT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wUGx1c0VxOgotICAgICAg
ICAgICAgdiA9IGFkZChleGVjLCBjdXJyZW50LCByaWdodC0+ZXZhbHVhdGUoZXhlYykpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BNaW51c0VxOgotICAgICAgICAgICAgdiA9
IGpzTnVtYmVyKGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpIC0gcmlnaHQtPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYykpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BMU2hpZnQ6Ci0g
ICAgICAgICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICBpMiA9
IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNOdW1iZXIo
aTEgPDwgaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BSU2hpZnQ6Ci0g
ICAgICAgICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICBpMiA9
IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNOdW1iZXIo
aTEgPj4gaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BVUlNoaWZ0Ogot
ICAgICAgICAgICAgdWkgPSBjdXJyZW50LT50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGky
ID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJl
cih1aSA+PiBpMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcEFuZEVxOgot
ICAgICAgICAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgaTIg
PSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgdiA9IGpzTnVtYmVy
KGkxICYgaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BYT3JFcToKLSAg
ICAgICAgICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIGkyID0g
cmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihp
MSBeIGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wT3JFcToKLSAgICAg
ICAgICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIGkyID0gcmln
aHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihpMSB8
IGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wTW9kRXE6IHsKLSAgICAg
ICAgICAgIGRvdWJsZSBkMSA9IGN1cnJlbnQtPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAg
ZG91YmxlIGQyID0gcmlnaHQtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICB2
ID0ganNOdW1iZXIoZm1vZChkMSwgZDIpKTsKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHYgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIHJldHVybiB2OwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVhZE1vZGlmeVJlc29sdmVOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEZJWE1FOiBzaG91bGQg
dGhpcyBiZSBtb3ZlZCB0byBiZSBhIG1ldGhvZCBvbiBDb2RlR2VuZXJhdG9yPwpAQCAtNDIzNiwx
OCArMTA4Niw2IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEMKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7
Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBpZiAo
aXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykg
UmVhZE1vZGlmeUNvbnN0Tm9kZShpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5l
dyAodGhpcykgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZShpbmRleCk7Ci0gICAgfQotfQotCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduUmVzb2x2ZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpA
QCAtNDI3MywxNDYgKzExMTEsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1p
dENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lk
ZW50LCB2YWx1ZSk7CiB9CiAKLXZvaWQgQXNzaWduUmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlLCBOb2RlU3RhY2smIG5v
ZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fcmlnaHQuZ2V0KCkpOwotICAgIGlu
dCBpbmRleCA9IHN5bWJvbFRhYmxlLmdldChtX2lkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5k
ZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAg
IGlmIChpc0NvbnN0YW50KGxvY2FsU3RvcmFnZSwgaW5kZXgpKQotICAgICAgICAgICAgbmV3ICh0
aGlzKSBBc3NpZ25Db25zdE5vZGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhp
cykgQXNzaWduTG9jYWxWYXJOb2RlKGluZGV4KTsKLSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5TG9jYWxWYXJOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFsdWUqIFJlYWRNb2RpZnlMb2NhbFZhck5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChl
eGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAg
ICBBU1NFUlQobV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICBKU1ZhbHVlKiB2ID0gdmFsdWVG
b3JSZWFkTW9kaWZ5QXNzaWdubWVudChleGVjLCBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4
XS52YWx1ZSwgbV9yaWdodC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0KLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICAgIAotICAgIC8vIFdlIGNhbid0IHN0b3JlIGEgcG9pbnRlciBpbnRvIGxv
Y2FsU3RvcmFnZSgpIGFuZCB1c2UgaXQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24KLSAgICAvLyBi
b2R5LCBiZWNhdXNlIHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoKSBtaWdodCBjYXVzZSBh
biBBY3RpdmF0aW9uSW1wIHRlYXItb2ZmLAotICAgIC8vIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBs
b2NhbFN0b3JhZ2UoKS4KLSAgICAKLSAgICBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52
YWx1ZSA9IHY7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBBc3NpZ25Mb2NhbFZhck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotSlNWYWx1ZSogQXNzaWduTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3Qo
KSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIEpTVmFsdWUqIHYgPSBtX3JpZ2h0
LT5ldmFsdWF0ZShleGVjKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBl
eGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZSA9IHY7Ci0KLSAgICByZXR1cm4gdjsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWRNb2RpZnlDb25zdE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSogUmVhZE1v
ZGlmeUNvbnN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigp
LnRvcCgpKTsKLSAgICBKU1ZhbHVlKiBsZWZ0ID0gZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRl
eF0udmFsdWU7Ci0gICAgQVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gdmFsdWVGb3JSZWFkTW9kaWZ5QXNzaWdubWVudChleGVjLCBsZWZ0LCBtX3Jp
Z2h0LmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBB
c3NpZ25Db25zdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNW
YWx1ZSogQXNzaWduQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci19Ci0KLUpTVmFs
dWUqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNo
YWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAg
IFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgIC8vIFdlIG11c3Qg
YWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVy
ICE9IGVuZCk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsK
LSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAgLy8gU2VlIHRo
ZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQotICAgICAgICAg
ICAgYmFzZSA9ICppdGVyOwotICAgICAgICAgICAgZ290byBmb3VuZDsKLSAgICAgICAgfQotCi0g
ICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICBBU1NFUlQo
bV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJs
ZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotCi1mb3VuZDoKLSAgICBKU1ZhbHVlKiB2OwotCi0gICAg
QVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7Ci0gICAgSlNWYWx1ZSogdjEgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0gICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1lbnQoZXhlYywgdjEsIG1fcmlnaHQu
Z2V0KCksIG1fb3BlcmF0b3IpOwotCi0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICAK
LSAgICAvLyBTaW5jZSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KCkgbWlnaHQgY2F1c2Ug
YW4gQWN0aXZhdGlvbkltcCB0ZWFyLW9mZiwKLSAgICAvLyB3ZSBuZWVkIHRvIGdldCB0aGUgYmFz
ZSBmcm9tIHRoZSBTY29wZUNoYWluSXRlcmF0b3IgYWdhaW4uCi0gICAgCi0gICAgKCppdGVyKS0+
cHV0KGV4ZWMsIG1faWRlbnQsIHYpOwotICAgIHJldHVybiB2OwotfQotCi1KU1ZhbHVlKiBBc3Np
Z25SZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgIC8vIHdlIG11c3QgYWx3YXlzIGhhdmUg
c29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0K
LSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0g
ICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGlu
IFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KLQotICAgICAgICAgICAgYmFzZSA9ICpp
dGVyOwotICAgICAgICAgICAgZ290byBmb3VuZDsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRl
cjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLWZvdW5kOgotICAgIEpTVmFsdWUqIHYg
PSBtX3JpZ2h0LT5ldmFsdWF0ZShleGVjKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgdik7Ci0gICAgcmV0dXJuIHY7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5RG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkBAIC00NDIzLDI1ICsxMTIyLDcgQEAgUmVn
aXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdENvZGUoQ29kZQogICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiB9CiAKLXZvaWQgQXNz
aWduRG90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBu
b2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEFzc2lnbkRvdE5v
ZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFs
dWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhl
Yyk7Ci0KLSAgICBKU1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci0KLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIHYp
OwotICAgIHJldHVybiB2OwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJl
YWRNb2RpZnlEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJl
Z2lzdGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKQEAgLTQ0NTIsMzIgKzExMzMsNiBAQCBSZWdpc3Rl
cklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1cGRhdGVkVmFsdWUpOwogfQogCi12b2lk
IFJlYWRNb2RpZnlEb3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fcmlnaHQuZ2V0KCkp
OwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotSlNWYWx1ZSogUmVh
ZE1vZGlmeURvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+
dG9PYmplY3QoZXhlYyk7Ci0KLSAgICBKU1ZhbHVlKiB2OwotCi0gICAgQVNTRVJUKG1fb3BlcmF0
b3IgIT0gT3BFcXVhbCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdjEg
PSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZh
bHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotICAgIHYgPSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMs
IHYxLCBtX3JpZ2h0LmdldCgpLCBtX29wZXJhdG9yKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwgdik7Ci0gICAgcmV0dXJuIHY7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25FcnJvck5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQXNzaWdu
RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
KQpAQCAtNDQ4NSwxMyArMTE0MCw2IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkVycm9yTm9kZTo6ZW1p
dENvZGUoQ28KICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VF
cnJvciwgIkxlZnQgc2lkZSBvZiBhc3NpZ25tZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKIH0K
IAotSlNWYWx1ZSogQXNzaWduRXJyb3JOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiTGVm
dCBzaWRlIG9mIGFzc2lnbm1lbnQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwotICAgIGhhbmRsZUV4
Y2VwdGlvbihleGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEFzc2lnbkJyYWNrZXROb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1
MDQsMzkgKzExNTIsNiBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdENvZGUo
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVz
dWx0KTsKIH0KIAotdm9pZCBBc3NpZ25CcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX3JpZ2h0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgp
KTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEFz
c2lnbkJyYWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gbV9zdWJz
Y3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAg
ICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICB1aW50
MzJfdCBwcm9wZXJ0eUluZGV4OwotICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0
eUluZGV4KSkgewotICAgICAgICBKU1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7
Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICAgICAgYmFzZS0+cHV0KGV4
ZWMsIHByb3BlcnR5SW5kZXgsIHYpOwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZShzdWJzY3JpcHQtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBK
U1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLQotICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHYpOwotICAgIHJl
dHVybiB2OwotfQotCiBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1f
YmFzZS5nZXQoKSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdu
bWVudHMpOwpAQCAtNDU1MSw1MiArMTE2Niw2IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFj
a2V0Tm9kZTo6ZW1pdEMKICAgICByZXR1cm4gdXBkYXRlZFZhbHVlOwogfQogCi12b2lkIFJlYWRN
b2RpZnlCcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsK
LSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFJlYWRNb2RpZnlCcmFja2V0Tm9k
ZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1
ZSogYmFzZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJh
c2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJ
bmRleDsKLSAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSogdjsKLSAgICAgICAgQVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7
Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBKU1ZhbHVlKiB2MSA9IGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3QuZ2V0VmFs
dWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgICAgICB2ID0gdmFsdWVGb3JSZWFkTW9kaWZ5QXNz
aWdubWVudChleGVjLCB2MSwgbV9yaWdodC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0KLSAgICAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVy
dHlJbmRleCwgdik7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLQotICAgIElkZW50aWZpZXIg
cHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIEpTVmFsdWUqIHY7
Ci0KLSAgICBBU1NFUlQobV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgICBKU1ZhbHVlKiB2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eU5hbWUp
IDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHYgPSB2
YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMsIHYxLCBtX3JpZ2h0LmdldCgpLCBtX29w
ZXJhdG9yKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBiYXNlLT5wdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2KTsKLSAgICByZXR1cm4gdjsKLX0KLQogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbW1hTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29tbWFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ2MDUsMjAgKzExNzQsNiBAQCBS
ZWdpc3RlcklEKiBDb21tYU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwcjIuZ2V0KCkpOwogfQogCi12b2lkIENvbW1hTm9kZTo6
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjE0Ci1KU1ZhbHVlKiBDb21tYU5v
ZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIG1fZXhw
cjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgcmV0
dXJuIG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQ29uc3REZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIENvbnN0RGVjbE5vZGU6OkNvbnN0RGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0KQpAQCAtNDYyNyw2NyArMTE4Miw2IEBAIENvbnN0RGVj
bE5vZGU6OkNvbnN0RGVjbE5vZGUoY29uc3QgSWRlbnQKIHsKIH0KIAotdm9pZCBDb25zdERlY2xO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBpZiAobV9uZXh0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5n
ZXQoKSk7Ci0gICAgaWYgKG1faW5pdCkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2luaXQu
Z2V0KCkpOwotfQotCi12b2lkIENvbnN0RGVjbE5vZGU6OmhhbmRsZVNsb3dDYXNlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29wZUNoYWluJiBjaGFpbiwgSlNWYWx1ZSog
dmFsKQotewotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAg
ICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICAvLyBXZSBtdXN0
IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRl
ciAhPSBlbmQpOwotCi0gICAgSlNPYmplY3QqIGJhc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGJh
c2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2UtPmlzVmFyaWFibGVPYmplY3QoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQp
OwotCi0gICAgQVNTRVJUKGJhc2UgJiYgYmFzZS0+aXNWYXJpYWJsZU9iamVjdCgpKTsKLQotICAg
IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihiYXNlKS0+cHV0V2l0aEF0dHJpYnV0ZXMo
ZXhlYywgbV9pZGVudCwgdmFsLCBSZWFkT25seSk7Ci19Ci0KLS8vIEVDTUEgMTIuMgotaW5saW5l
IHZvaWQgQ29uc3REZWNsTm9kZTo6ZXZhbHVhdGVTaW5nbGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCktPmhhc093blBy
b3BlcnR5KGV4ZWMsIG1faWRlbnQpIHx8IGV4ZWMtPmNvZGVUeXBlKCkgPT0gRXZhbENvZGUpOyAv
LyBHdWFyYW50ZWVkIGJ5IHByb2Nlc3NEZWNsYXJhdGlvbnMuCi0gICAgY29uc3QgU2NvcGVDaGFp
biYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogdmFy
aWFibGVPYmplY3QgPSBleGVjLT52YXJpYWJsZU9iamVjdCgpOwotCi0gICAgYm9vbCBpbkdsb2Jh
bFNjb3BlID0gKytjaGFpbi5iZWdpbigpID09IGNoYWluLmVuZCgpOwotCi0gICAgaWYgKG1faW5p
dCkgewotICAgICAgICBpZiAoaW5HbG9iYWxTY29wZSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
dmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXMgPSBSZWFkT25seTsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb2RlVHlwZSgpICE9IEV2
YWxDb2RlKQotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsKLSAgICAg
ICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBtX2lkZW50LCB2
YWwsIGF0dHJpYnV0ZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSog
dmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZPSUQKLQotICAgICAgICAgICAgLy8gaWYgdGhlIHZhcmlhYmxlIG9iamVjdCBpcyB0aGUg
dG9wIG9mIHRoZSBzY29wZSBjaGFpbiwgdGhlbiB0aGF0IG11c3QKLSAgICAgICAgICAgIC8vIGJl
IHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgZGVjbGFyZWQsIHByb2Nlc3NWYXJEZWNscyB3b3VsZCBo
YXZlIHB1dAotICAgICAgICAgICAgLy8gaXQgdGhlcmUuIERvbid0IHNlYXJjaCB0aGUgc2NvcGUg
Y2hhaW4sIHRvIG9wdGltaXplIHRoaXMgdmVyeSBjb21tb24gY2FzZS4KLSAgICAgICAgICAgIGlm
IChjaGFpbi50b3AoKSAhPSB2YXJpYWJsZU9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
aGFuZGxlU2xvd0Nhc2UoZXhlYywgY2hhaW4sIHZhbCk7Ci0KLSAgICAgICAgICAgIHZhcmlhYmxl
T2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBtX2lkZW50LCB2YWwsIFJlYWRPbmx5KTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQogUmVnaXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6ZW1pdENv
ZGVTaW5nbGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQogewogICAgIGlmIChSZWdpc3RlcklE
KiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsQ29uc3RJbml0KG1faWRlbnQpKQpA
QCAtNDcwOSw0MiArMTIwMywxMyBAQCBSZWdpc3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0Q29k
ZShDb2RlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogQ29uc3REZWNsTm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgZXZhbHVhdGVT
aW5nbGUoZXhlYyk7Ci0KLSAgICBpZiAoQ29uc3REZWNsTm9kZSogbiA9IG1fbmV4dC5nZXQoKSkg
ewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBuLT5ldmFsdWF0ZVNpbmdsZShleGVjKTsKLSAg
ICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgICAgICAgICBuID0gbi0+bV9u
ZXh0LmdldCgpOwotICAgICAgICB9IHdoaWxlIChuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdFN0
YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDb25zdFN0
YXRlbWVudE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIEFTU0VSVChtX25leHQpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9uZXh0LmdldCgpKTsKLX0KLQogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdE5vZGUobV9uZXh0LmdldCgpKTsKIH0KIAotLy8gRUNNQSAxMi4yCi1K
U1ZhbHVlKiBDb25zdFN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgbV9uZXh0LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT04KLQotICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBo
YW5kbGluZyBWZWN0b3JzIG9mIFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBzdGF0aWMgaW5saW5lIFJlZ2lzdGVySUQqIHN0YXRlbWVudExpc3RFbWl0Q29k
ZShTdGF0ZW1lbnRWZWN0b3ImIHN0YXRlbWVudHMsIENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0ID0gMCkKQEAgLTQ3ODksMjAgKzEyNTQsNiBAQCBzdGF0aWMgaW5saW5l
IE5vZGUqIHN0YXRlbWVudExpc3RJbml0aWFsCiAgICAgcmV0dXJuICgqYmVnaW4pLmdldCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExpc3RFeGVjdXRlKFN0YXRlbWVu
dFZlY3RvciYgc3RhdGVtZW50cywgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNWYWx1ZSogdmFsdWUgPSAwOwotICAgIHNpemVfdCBzaXplID0gc3RhdGVtZW50cy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gc2l6ZTsgKytpKSB7Ci0gICAgICAgIEpT
VmFsdWUqIHN0YXRlbWVudFZhbHVlID0gc3RhdGVtZW50c1tpXS0+ZXhlY3V0ZShleGVjKTsKLSAg
ICAgICAgaWYgKHN0YXRlbWVudFZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBzdGF0ZW1lbnRW
YWx1ZTsKLSAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFs
Q29tcGxldGlvbih2YWx1ZSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBCbG9ja05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEJsb2Nr
Tm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbikKQEAgLTQ4MTYsMTcgKzEy
NjcsNiBAQCBSZWdpc3RlcklEKiBCbG9ja05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0
dXJuIHN0YXRlbWVudExpc3RFbWl0Q29kZShtX2NoaWxkcmVuLCBnZW5lcmF0b3IsIGRzdCk7CiB9
CiAKLXZvaWQgQmxvY2tOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8obV9jaGlsZHJl
biwgbm9kZVN0YWNrKTsKLX0KLQotLy8gRUNNQSAxMi4xCi1KU1ZhbHVlKiBCbG9ja05vZGU6OmV4
ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIHN0YXRl
bWVudExpc3RFeGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRW1wdHlTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBSZWdpc3RlcklEKiBFbXB0eVN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00ODM0LDMzICsxMjc0LDEyIEBAIFJlZ2lz
dGVySUQqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUKICAgICByZXR1cm4gZHN0OwogfQog
Ci0vLyBFQ01BIDEyLjMKLUpTVmFsdWUqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFs
Q29tcGxldGlvbigpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXhw
clN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklE
KiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgQVNTRVJUKG1fZXhwcik7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwci5nZXQoKSk7Ci19Ci0KLXZvaWQgRXhwclN0YXRlbWVu
dE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0
YWNrKQotewotICAgIEFTU0VSVChtX2V4cHIpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHBy
LmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi40Ci1KU1ZhbHVlKiBFeHByU3RhdGVtZW50Tm9kZTo6
ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2
YWx1ZSA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0K
LSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2YWx1ZSk7CisgICAgQVNTRVJU
KG1fZXhwcik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwci5nZXQo
KSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWYXJTdGF0ZW1lbnRO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4NzEsMjAgKzEyOTAsNiBAQCBS
ZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwogfQogCi12b2lkIFZhclN0YXRlbWVudE5vZGU6
Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQot
ewotICAgIEFTU0VSVChtX2V4cHIpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgp
KTsKLX0KLQotSlNWYWx1ZSogVmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTgotCi0gICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24o
KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElmTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogSWZOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ5
MDEsMjMgKzEzMDYsNiBAQCBSZWdpc3RlcklEKiBJZk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSWZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1faWZCbG9jay5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2NvbmRpdGlvbi5nZXQo
KSk7Ci19Ci0KLS8vIEVDTUEgMTIuNQotSlNWYWx1ZSogSWZOb2RlOjpleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fY29uZGl0aW9uLT5ldmFs
dWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGlmIChi
KQotICAgICAgICByZXR1cm4gbV9pZkJsb2NrLT5leGVjdXRlKGV4ZWMpOwotICAgIHJldHVybiBl
eGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0KIFJlZ2lzdGVySUQqIElmRWxzZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIFJlZlB0cjxMYWJlbElEPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CkBA
IC00OTM4LDIzICsxMzI2LDYgQEAgUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIElmRWxzZU5vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9lbHNlQmxvY2suZ2V0KCkp
OwotICAgIElmTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhleGVjLCBzeW1ib2xUYWJsZSwg
bG9jYWxTdG9yYWdlLCBub2RlU3RhY2spOwotfQotCi0vLyBFQ01BIDEyLjUKLUpTVmFsdWUqIElm
RWxzZU5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
Ym9vbCBiID0gbV9jb25kaXRpb24tPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTgotCi0gICAgaWYgKGIpCi0gICAgICAgIHJldHVybiBtX2lmQmxvY2stPmV4
ZWN1dGUoZXhlYyk7Ci0gICAgcmV0dXJuIG1fZWxzZUJsb2NrLT5leGVjdXRlKGV4ZWMpOwotfQot
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRG9XaGlsZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00OTc2
LDQ2ICsxMzQ3LDYgQEAgUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVHZQog
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKLXZvaWQgRG9XaGlsZU5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5v
ZGVTdGFjay5hcHBlbmQobV9zdGF0ZW1lbnQuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9leHByLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi42LjEKLUpTVmFsdWUqIERvV2hpbGVOb2Rl
OjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUq
IHZhbHVlID0gMDsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRp
b24oKTsKLSAgICAgICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhl
Y3V0ZShleGVjKTsKLSAgICAgICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7Ci0KLSAgICAgICAgaWYg
KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGltZWRPdXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBleGVjLT5zZXRJbnRlcnJ1cHRlZENvbXBsZXRpb24oKTsKLQotICAgICAgICBpZiAoc3Rh
dGVtZW50VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAg
ICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAg
aWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNv
bnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBn
b3RvIGNvbnRpbnVlRG9XaGlsZUxvb3A7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlv
blR5cGUoKSA9PSBCcmVhayAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNv
bnRpbnVlVGFyZ2V0KCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0
dXJuIHN0YXRlbWVudFZhbHVlOwotICAgICAgICB9Ci0KLSAgICBjb250aW51ZURvV2hpbGVMb29w
OgotICAgICAgICBib29sIGIgPSBtX2V4cHItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAg
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgICAgICAgaWYgKCFiKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24odmFsdWUp
OwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2hpbGVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBXaGlsZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAt
NTA0MSw1MCArMTM3MiwxMiBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgV2hpbGVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5n
ZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTIuNi4yCi1KU1ZhbHVlKiBXaGlsZU5vZGU6OmV4ZWN1dGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSAw
OwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgYm9vbCBiID0gbV9leHByLT5ldmFsdWF0ZVRv
Qm9vbGVhbihleGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgICAgIGlmICgh
YikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRpb24oKTsK
LSAgICAgICAgSlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShl
eGVjKTsKLSAgICAgICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGltZWRPdXQoKSkKLSAgICAgICAgICAgIHJldHVybiBl
eGVjLT5zZXRJbnRlcnJ1cHRlZENvbXBsZXRpb24oKTsKLQotICAgICAgICBpZiAoc3RhdGVtZW50
VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAgICAgIGlm
IChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAgaWYgKGV4
ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5z
KGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIG1f
bGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VmFsdWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2
YWx1ZSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEZvck5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICBpZiAobV9leHBy
MSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwogICAgIAogICAg
IFJlZlB0cjxMYWJlbElEPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBS
ZWZQdHI8TGFiZWxJRD4gYmVmb3JlQ29uZGl0aW9uID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CkBA
IC01MDk2LDYzICsxMzg5LDIxIEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmEKICAgICBnZW5lcmF0b3IucHVzaEp1bXBDb250ZXh0KCZtX2xhYmVsU3RhY2ssIGNvbnRp
bnVlVGFyZ2V0LmdldCgpLCBicmVha1RhcmdldC5nZXQoKSwgdHJ1ZSk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50Lmdl
dCgpKTsKICAgICBnZW5lcmF0b3IucG9wSnVtcENvbnRleHQoKTsKLSAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGNvbnRpbnVlVGFyZ2V0LmdldCgpKTsgIAotICAgIGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIzLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNvbnRpbnVlVGFyZ2V0Lmdl
dCgpKTsKKyAgICBpZiAobV9leHByMykKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhw
cjMuZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVDb25kaXRpb24uZ2V0
KCkpOwotICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5n
ZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQo
KSk7CisgICAgaWYgKG1fZXhwcjIpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKHRvcE9mTG9vcC5nZXQoKSk7CisgICAgfQogICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoYnJlYWtUYXJnZXQuZ2V0KCkpOwogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9
CiAKLXZvaWQgRm9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3N0YXRlbWVudC5nZXQo
KSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIzLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQo
KSk7Ci19Ci0KLS8vIEVDTUEgMTIuNi4zCi1KU1ZhbHVlKiBGb3JOb2RlOjpleGVjdXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gMDsKLQot
ICAgIG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0g
ICAgd2hpbGUgKDEpIHsKLSAgICAgICAgYm9vbCBiID0gbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICBpZiAoIWIpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAg
ICAgIEpTVmFsdWUqIHN0YXRlbWVudFZhbHVlID0gbV9zdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7
Ci0gICAgICAgIGV4ZWMtPnBvcEl0ZXJhdGlvbigpOwotICAgICAgICBpZiAoc3RhdGVtZW50VmFs
dWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAgICAgIGlmIChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRpbWVkT3V0KCkpCi0gICAgICAgICAgICByZXR1
cm4gZXhlYy0+c2V0SW50ZXJydXB0ZWRDb21wbGV0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGV4ZWMt
PmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29t
cGxldGlvblR5cGUoKSA9PSBDb250aW51ZSAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+
YnJlYWtPckNvbnRpbnVlVGFyZ2V0KCkpKQotICAgICAgICAgICAgICAgIGdvdG8gY29udGludWVG
b3JMb29wOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsg
JiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnRWYWx1
ZTsKLSAgICAgICAgfQotCi0gICAgY29udGludWVGb3JMb29wOgotICAgICAgICBtX2V4cHIzLT5l
dmFsdWF0ZShleGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgfQotCi0gICAg
cmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24odmFsdWUpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBGb3JJbk5vZGU6OkZvckluTm9kZShFeHByZXNzaW9uTm9kZSogbCwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKQEAgLTUxNzYs
MTUgKzE0MjcsNiBAQCBGb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyJiBpCiAg
ICAgLy8gZm9yKCB2YXIgZm9vID0gYmFyIGluIGJheiApCiB9CiAKLXZvaWQgRm9ySW5Ob2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsK
LSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fZXhwci5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2xleHByLmdldCgp
KTsKLSAgICBpZiAobV9pbml0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1faW5pdC5nZXQo
KSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGxvb3BT
dGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtNTIzNCwxMDMgKzE0NzYsNiBAQCBSZWdp
c3RlcklEKiBGb3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotLy8gRUNNQSAxMi42LjQKLUpTVmFsdWUqIEZvckluTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7Ci0KLSAgICBp
ZiAobV9pbml0KSB7Ci0gICAgICAgIG1faW5pdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgICAgIEtK
U19DSEVDS0VYQ0VQVElPTgotICAgIH0KLQotICAgIEpTVmFsdWUqIGUgPSBtX2V4cHItPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0gICAgLy8gRm9yIE51bGwgYW5k
IFVuZGVmaW5lZCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgbm90IHRvIGdvIHRocm91Z2gKLSAgICAv
LyB0aGUgbG9vcCBhdCBhbGwsIGJlY2F1c2UgdG9PYmplY3Qgd2lsbCB0aHJvdyBhbiBleGNlcHRp
b24uCi0gICAgaWYgKGUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBleGVj
LT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci0KLSAgICBKU09iamVjdCogdiA9IGUtPnRvT2JqZWN0
KGV4ZWMpOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXM7Ci0gICAgdi0+Z2V0
UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKLQotICAgIFByb3BlcnR5TmFtZUFy
cmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0eU5hbWVzLmVuZCgpOwotICAgIGZvciAo
UHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydHlOYW1lcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSA9
ICppdDsKLSAgICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1lKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEpTVmFsdWUqIHN0ciA9IGpzT3duZWRTdHJpbmcobmFt
ZS51c3RyaW5nKCkpOwotCi0gICAgICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBjb25z
dCBTY29wZUNoYWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICAgICAgICAgIFNjb3Bl
Q2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgICAgICAgICAgLy8gd2UgbXVz
dCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgICAgICAgICBB
U1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBvOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IG8gPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgICAgICAgICBvLT5wdXQoZXhlYywgaWRlbnQs
IHN0cik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
Ci0KLSAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCkKLSAgICAgICAgICAgICAgICBvLT5wdXQo
ZXhlYywgaWRlbnQsIHN0cik7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9sZXhwci0+aXNEb3RBY2Nl
c3Nvck5vZGUoKSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0
aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KG1f
bGV4cHIuZ2V0KCkpLT5iYXNlKCktPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICAgICAgS0pTX0NI
RUNLRVhDRVBUSU9OCi0gICAgICAgICAgICBKU09iamVjdCogbyA9IHYtPnRvT2JqZWN0KGV4ZWMp
OwotCi0gICAgICAgICAgICBvLT5wdXQoZXhlYywgaWRlbnQsIHN0cik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9sZXhwci0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkp
OwotICAgICAgICAgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5v
ZGUqPihtX2xleHByLmdldCgpKS0+YmFzZSgpLT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAg
IEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICAgICAgSlNWYWx1ZSogdjIgPSBzdGF0aWNfY2Fz
dDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwci5nZXQoKSktPnN1YnNjcmlwdCgpLT5ldmFs
dWF0ZShleGVjKTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICAgICAg
SlNPYmplY3QqIG8gPSB2LT50b09iamVjdChleGVjKTsKLQotICAgICAgICAgICAgdWludDMyX3Qg
aTsKLSAgICAgICAgICAgIGlmICh2Mi0+Z2V0VUludDMyKGkpKQotICAgICAgICAgICAgICAgIG8t
PnB1dChleGVjLCBpLCBzdHIpOwotICAgICAgICAgICAgby0+cHV0KGV4ZWMsIElkZW50aWZpZXIo
djItPnRvU3RyaW5nKGV4ZWMpKSwgc3RyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtKU19DSEVD
S0VYQ0VQVElPTgotCi0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRpb24oKTsKLSAgICAgICAgSlNW
YWx1ZSogc3RhdGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKLSAgICAg
ICAgZXhlYy0+cG9wSXRlcmF0aW9uKCk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnRWYWx1ZSkKLSAg
ICAgICAgICAgIHZhbHVlID0gc3RhdGVtZW50VmFsdWU7Ci0gICAgICAgIAotICAgICAgICBpZiAo
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50aW1lZE91dCgpKQotICAgICAgICAgICAgcmV0
dXJuIGV4ZWMtPnNldEludGVycnVwdGVkQ29tcGxldGlvbigpOwotCi0gICAgICAgIGlmIChleGVj
LT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmNv
bXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMt
PmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIG1fbGFiZWxT
dGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VmFsdWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2YWx1ZSk7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb250aW51ZU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTIuNwpAQCAtNTM1Niwx
NSArMTUwMSw2IEBAIFJlZ2lzdGVySUQqIENvbnRpbnVlTm9kZTo6ZW1pdENvZGUoQ29kZUcKICAg
ICByZXR1cm4gZHN0OwogfQogCi1KU1ZhbHVlKiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKG1faWRlbnQuaXNFbXB0eSgpICYm
ICFleGVjLT5pbkl0ZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9u
KGV4ZWMsIFN5bnRheEVycm9yLCAiSW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIik7Ci0gICAg
aWYgKCFtX2lkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+c2VlbkxhYmVscygpLmNvbnRhaW5zKG1f
aWRlbnQpKQotICAgICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVy
cm9yLCAiTGFiZWwgJXMgbm90IGZvdW5kLiIsIG1faWRlbnQpOwotICAgIHJldHVybiBleGVjLT5z
ZXRDb250aW51ZUNvbXBsZXRpb24oJm1faWRlbnQpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQnJlYWtOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAvLyBFQ01BIDEyLjgKQEAgLTUzODksMTUgKzE1MjUsNiBAQCBSZWdpc3RlcklEKiBC
cmVha05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotSlNWYWx1
ZSogQnJlYWtOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIGlmIChtX2lkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+aW5JdGVyYXRpb24oKSAmJiAhZXhl
Yy0+aW5Td2l0Y2goKSkKLSAgICAgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBT
eW50YXhFcnJvciwgIkludmFsaWQgYnJlYWsgc3RhdGVtZW50LiIpOwotICAgIGlmICghbV9pZGVu
dC5pc0VtcHR5KCkgJiYgIWV4ZWMtPnNlZW5MYWJlbHMoKS5jb250YWlucyhtX2lkZW50KSkKLSAg
ICAgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVs
ICVzIG5vdCBmb3VuZC4iKTsKLSAgICByZXR1cm4gZXhlYy0+c2V0QnJlYWtDb21wbGV0aW9uKCZt
X2lkZW50KTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybk5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogUmV0
dXJuTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCkBAIC01NDE1LDI4ICsxNTQyLDYgQEAgUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJldHVybihyMCk7CiB9CiAKLXZv
aWQgUmV0dXJuTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIG5vZGVTdGFjay5hcHBl
bmQobV92YWx1ZS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTIuOQotSlNWYWx1ZSogUmV0dXJuTm9k
ZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBDb2RlVHlw
ZSBjb2RlVHlwZSA9IGV4ZWMtPmNvZGVUeXBlKCk7Ci0gICAgaWYgKGNvZGVUeXBlICE9IEZ1bmN0
aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhF
cnJvciwgIkludmFsaWQgcmV0dXJuIHN0YXRlbWVudC4iKTsKLQotICAgIGlmICghbV92YWx1ZSkK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnNldFJldHVyblZhbHVlQ29tcGxldGlvbihqc1VuZGVmaW5l
ZCgpKTsKLQotICAgIEpTVmFsdWUqIHYgPSBtX3ZhbHVlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIHJldHVybiBleGVjLT5zZXRSZXR1cm5WYWx1ZUNvbXBs
ZXRpb24odik7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXaXRoTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFdp
dGhOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKQEAgLTU0NDgsNTIgKzE1NTMsNiBAQCBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXaXRoTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAg
Ly8gQ2FuJ3Qgb3B0aW1pemUgd2l0aGluIHN0YXRlbWVudCBiZWNhdXNlICJ3aXRoIiBpbnRyb2R1
Y2VzIGEgZHluYW1pYyBzY29wZS4KLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7
Ci19Ci0KLS8vIEVDTUEgMTIuMTAKLUpTVmFsdWUqIFdpdGhOb2RlOjpleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENhc2VDbGF1c2VO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDYXNlQ2xhdXNlTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2sp
Ci17Ci0gICAgaWYgKG1fZXhwcikKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0
KCkpOwotICAgIHN0YXRlbWVudExpc3RQdXNoRklGTyhtX2NoaWxkcmVuLCBub2RlU3RhY2spOwot
fQotCi0vLyBFQ01BIDEyLjExCi1KU1ZhbHVlKiBDYXNlQ2xhdXNlTm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IG1fZXhwci0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIHJldHVy
biB2OwotfQotCi0vLyBFQ01BIDEyLjExCi1KU1ZhbHVlKiBDYXNlQ2xhdXNlTm9kZTo6ZXhlY3V0
ZVN0YXRlbWVudHMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJu
IHN0YXRlbWVudExpc3RFeGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhdXNlTGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi12b2lkIENsYXVzZUxpc3ROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAobV9uZXh0KQot
ICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX2NsYXVzZS5nZXQoKSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBDYXNlQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJl
Z2lzdGVySUQqIENhc2VCbG9ja05vZGU6OmVtaXRDb2RlRm9yQmxvY2soQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBzd2l0Y2hFeHByZXNzaW9uLCBSZWdpc3RlcklEKiBkc3Qp
CkBAIC01NTQ0LDc0ICsxNjAzLDYgQEAgUmVnaXN0ZXJJRCogQ2FzZUJsb2NrTm9kZTo6ZW1pdENv
ZGVGb3JCbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2FzZUJsb2NrTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0g
ICAgaWYgKG1fbGlzdDIpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9saXN0Mi5nZXQoKSk7
Ci0gICAgaWYgKG1fZGVmYXVsdENsYXVzZSkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2Rl
ZmF1bHRDbGF1c2UuZ2V0KCkpOwotICAgIGlmIChtX2xpc3QxKQotICAgICAgICBub2RlU3RhY2su
YXBwZW5kKG1fbGlzdDEuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDEyLjExCi1KU1ZhbHVlKiBDYXNl
QmxvY2tOb2RlOjpleGVjdXRlQmxvY2soT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIGlucHV0KQotewotICAgIENsYXVzZUxpc3ROb2RlKiBhID0gbV9saXN0MS5nZXQoKTsK
LSAgICB3aGlsZSAoYSkgewotICAgICAgICBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlID0gYS0+Z2V0
Q2xhdXNlKCk7Ci0gICAgICAgIGEgPSBhLT5nZXROZXh0KCk7Ci0gICAgICAgIEpTVmFsdWUqIHYg
PSBjbGF1c2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAg
ICAgICAgaWYgKHN0cmljdEVxdWFsKGlucHV0LCB2KSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
cmVzID0gY2xhdXNlLT5leGVjdXRlU3RhdGVtZW50cyhleGVjKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzOwotICAgICAgICAgICAgZm9yICg7IGE7IGEgPSBhLT5nZXROZXh0KCkpIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlKiByZXMgPSBhLT5nZXRDbGF1c2UoKS0+ZXhlY3V0ZVN0YXRlbWVudHMo
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9y
bWFsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDbGF1c2VMaXN0Tm9kZSog
YiA9IG1fbGlzdDIuZ2V0KCk7Ci0gICAgd2hpbGUgKGIpIHsKLSAgICAgICAgQ2FzZUNsYXVzZU5v
ZGUqIGNsYXVzZSA9IGItPmdldENsYXVzZSgpOwotICAgICAgICBiID0gYi0+Z2V0TmV4dCgpOwot
ICAgICAgICBKU1ZhbHVlKiB2ID0gY2xhdXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OCi0gICAgICAgIGlmIChzdHJpY3RFcXVhbChpbnB1dCwgdikpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHJlcyA9IGNsYXVzZS0+ZXhlY3V0ZVN0YXRlbWVudHMoZXhlYyk7
Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIGdvdG8gc3RlcDE4OwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gZGVmYXVsdCBjbGF1c2UKLSAgICBpZiAobV9kZWZhdWx0Q2xh
dXNlKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlcyA9IG1fZGVmYXVsdENsYXVzZS0+ZXhlY3V0ZVN0
YXRlbWVudHMoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5v
cm1hbCkKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIGIgPSBtX2xpc3QyLmdl
dCgpOwotc3RlcDE4OgotICAgIHdoaWxlIChiKSB7Ci0gICAgICAgIENhc2VDbGF1c2VOb2RlKiBj
bGF1c2UgPSBiLT5nZXRDbGF1c2UoKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzID0gY2xhdXNlLT5l
eGVjdXRlU3RhdGVtZW50cyhleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBl
KCkgIT0gTm9ybWFsKQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgYiA9IGItPmdl
dE5leHQoKTsKLSAgICB9Ci0KLSAgICAvLyBiYWlsIG91dCBvbiBlcnJvcgotICAgIEtKU19DSEVD
S0VYQ0VQVElPTgotCi0gICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24oKTsKLX0K
LQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN3aXRjaE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC01NjI4
LDI4ICsxNjE5LDggQEAgUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgog
ICAgIHJldHVybiByMTsKIH0KIAotdm9pZCBTd2l0Y2hOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fYmxvY2suZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsK
LX0KLQotLy8gRUNNQSAxMi4xMQotSlNWYWx1ZSogU3dpdGNoTm9kZTo6ZXhlY3V0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGV4ZWMtPnB1c2hTd2l0
Y2goKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX2Jsb2NrLT5leGVjdXRlQmxvY2soZXhlYywg
dik7Ci0gICAgZXhlYy0+cG9wU3dpdGNoKCk7Ci0KLSAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5
cGUoKSA9PSBCcmVhayAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNvbnRp
bnVlVGFyZ2V0KCkpKQotICAgICAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShOb3JtYWwpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBMYWJlbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFJlZ2lz
dGVySUQqIExhYmVsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKGdlbmVyYXRvci5qdW1wQ29udGV4dEZvckJyZWFrKG1f
bGFiZWwpKQpAQCAtNTY2OCwyNCArMTYzOSw2IEBAIFJlZ2lzdGVySUQqIExhYmVsTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmUKICAgICByZXR1cm4gcjA7CiB9CiAKLXZvaWQgTGFiZWxOb2RlOjpvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi4x
MgotSlNWYWx1ZSogTGFiZWxOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmICghZXhlYy0+c2VlbkxhYmVscygpLnB1c2gobV9sYWJlbCkpCi0gICAg
ICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJEdXBsaWNh
dGVkIGxhYmVsICVzIGZvdW5kLiIsIG1fbGFiZWwpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1f
c3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwotICAgIGV4ZWMtPnNlZW5MYWJlbHMoKS5wb3AoKTsK
LQotICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIGV4ZWMtPmJyZWFr
T3JDb250aW51ZVRhcmdldCgpID09IG1fbGFiZWwpCi0gICAgICAgIGV4ZWMtPnNldENvbXBsZXRp
b25UeXBlKE5vcm1hbCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFRocm93Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogVGhyb3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTU2OTQsMjEgKzE2NDcsNiBAQCBSZWdp
c3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotdm9pZCBUaHJvd05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsK
LX0KLQotLy8gRUNNQSAxMi4xMwotSlNWYWx1ZSogVGhyb3dOb2RlOjpleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBtX2V4cHItPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0gICAgaGFuZGxlRXhjZXB0aW9u
KGV4ZWMsIHYpOwotICAgIHJldHVybiBleGVjLT5zZXRUaHJvd0NvbXBsZXRpb24odik7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcnlOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFRyeU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTc2MiwyMSAr
MTcwMCw2IEBAIFJlZ2lzdGVySUQqIFRyeU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmEKIH0KIAog
Ci12b2lkIFRyeU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQotewotICAgIC8vIENhbid0IG9wdGltaXplIHdpdGhpbiBjYXRjaEJsb2Nr
IGJlY2F1c2UgImNhdGNoIiBpbnRyb2R1Y2VzIGEgZHluYW1pYyBzY29wZS4KLSAgICBpZiAobV9m
aW5hbGx5QmxvY2spCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9maW5hbGx5QmxvY2suZ2V0
KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90cnlCbG9jay5nZXQoKSk7Ci19Ci0KLS8vIEVD
TUEgMTIuMTQKLUpTVmFsdWUqIFRyeU5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25Cb2R5Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTY29wZU5vZGU6OlNjb3BlTm9kZShTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSkKQEAgLTU5MTgsMTU3ICsxODQx
LDYgQEAgdm9pZCBQcm9ncmFtTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaQogICAgIG1fY2hp
bGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7CiB9CiAKLXZvaWQgUHJvZ3JhbU5vZGU6OmluaXRpYWxp
emVTeW1ib2xUYWJsZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBJ
ZiBhIHByZXZpb3VzIHNjcmlwdCBkZWZpbmVkIGEgc3ltYm9sIHdpdGggdGhlIHNhbWUgbmFtZSBh
cyBvbmUgb2Ygb3VyCi0gICAgLy8gc3ltYm9scywgdG8gYXZvaWQgYnJlYWtpbmcgcHJldmlvdXNs
eSBvcHRpbWl6ZWQgbm9kZXMsIHdlIG5lZWQgdG8gcmV1c2UKLSAgICAvLyB0aGUgc3ltYm9sJ3Mg
ZXhpc3Rpbmcgc3RvcmFnZSBpbmRleC4gU28sIHdlIGNhbid0IGJlIGFzIGVmZmljaWVudCBhcwot
ICAgIC8vIEZ1bmN0aW9uQm9keU5vZGU6OmluaXRpYWxpemVTeW1ib2xUYWJsZSwgd2hpY2gga25v
d3MgdGhhdCBubyBiaW5kaW5ncwotICAgIC8vIGhhdmUgeWV0IGJlZW4gbWFkZS4KLQotICAgIEpT
VmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0ID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKTsK
LSAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSB2YXJpYWJsZU9iamVjdC0+c3ltYm9sVGFi
bGUoKTsKLQotICAgIHNpemVfdCBsb2NhbFN0b3JhZ2VJbmRleCA9IHN5bWJvbFRhYmxlLnNpemUo
KTsKLSAgICBzaXplX3Qgc2l6ZTsKLQotICAgIC8vIE9yZGVyIG11c3QgbWF0Y2ggdGhlIG9yZGVy
IGluIHByb2Nlc3NEZWNsYXJhdGlvbnMuCi0KLSAgICBzaXplID0gbV9mdW5jdGlvblN0YWNrLnNp
emUoKTsKLSAgICBtX2Z1bmN0aW9uSW5kZXhlcy5yZXNpemUoc2l6ZSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgVVN0cmluZzo6UmVwKiByZXAgPSBt
X2Z1bmN0aW9uU3RhY2tbaV0tPm1faWRlbnQudXN0cmluZygpLnJlcCgpOwotICAgICAgICBwYWly
PFN5bWJvbFRhYmxlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gc3ltYm9sVGFibGUuYWRkKHJl
cCwgbG9jYWxTdG9yYWdlSW5kZXgpOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhlc1tpXSA9IHJl
c3VsdC5maXJzdC0+c2Vjb25kLmdldEluZGV4KCk7Ci0gICAgICAgIGlmIChyZXN1bHQuc2Vjb25k
KQotICAgICAgICAgICAgKytsb2NhbFN0b3JhZ2VJbmRleDsKLSAgICB9Ci0KLSAgICBzaXplID0g
bV92YXJTdGFjay5zaXplKCk7Ci0gICAgbV92YXJJbmRleGVzLnJlc2l6ZShzaXplKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0uZmlyc3Q7Ci0gICAgICAgIGlmICh2YXJpYWJsZU9i
amVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7Ci0gICAgICAgICAgICBtX3ZhckluZGV4
ZXNbaV0gPSBtaXNzaW5nU3ltYm9sTWFya2VyKCk7IC8vIFNpZ25hbCBub3QgdG8gaW5pdGlhbGl6
ZSB0aGlzIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IGlkZW50LnVzdHJpbmcoKS5yZXAoKTsKLSAgICAg
ICAgcGFpcjxTeW1ib2xUYWJsZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IHN5bWJvbFRhYmxl
LmFkZChyZXAsIGxvY2FsU3RvcmFnZUluZGV4KTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7Ci0gICAgICAgICAgICBtX3ZhckluZGV4ZXNbaV0gPSBtaXNzaW5nU3ltYm9sTWFya2VyKCk7
IC8vIFNpZ25hbCBub3QgdG8gaW5pdGlhbGl6ZSB0aGlzIGRlY2xhcmF0aW9uLgotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3ZhckluZGV4ZXNbaV0gPSByZXN1
bHQuZmlyc3QtPnNlY29uZC5nZXRJbmRleCgpOwotICAgICAgICArK2xvY2FsU3RvcmFnZUluZGV4
OwotICAgIH0KLX0KLQotdm9pZCBTY29wZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgTm9kZVN0YWNrIG5vZGVTdGFjazsK
LSAgICBOb2RlKiBub2RlID0gc3RhdGVtZW50TGlzdEluaXRpYWxpemVWYXJpYWJsZUFjY2Vzc1N0
YWNrKG1fY2hpbGRyZW4sIG5vZGVTdGFjayk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBleGVjLT52YXJpYWJs
ZU9iamVjdCgpLT5zeW1ib2xUYWJsZSgpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IGNvbnN0IExvY2FsU3RvcmFnZSBsb2NhbFN0b3JhZ2U7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgbm9kZS0+b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhleGVjLCBzeW1ib2xUYWJsZSwgbG9j
YWxTdG9yYWdlLCBub2RlU3RhY2spOwotCi0gICAgICAgIHNpemVfdCBzaXplID0gbm9kZVN0YWNr
LnNpemUoKTsKLSAgICAgICAgaWYgKCFzaXplKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IC0tc2l6ZTsKLSAgICAgICAgbm9kZSA9IG5vZGVTdGFja1tzaXplXTsKLSAgICAgICAgbm9kZVN0
YWNrLnNocmluayhzaXplKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdjY0lzQ3JhenkoKSBL
SlNfRkFTVF9DQUxMOwotc3RhdGljIHZvaWQgZ2NjSXNDcmF6eSgpCi17Ci19Ci0KLXZvaWQgUHJv
Z3JhbU5vZGU6OnByb2Nlc3NEZWNsYXJhdGlvbnMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgLy8gSWYgeW91IHJlbW92ZSB0aGlzIGNhbGwsIHNvbWUgU3VuU3BpZGVyIHRl
c3RzLCBpbmNsdWRpbmcKLSAgICAvLyBiaXRvcHMtbnNpZXZlLWJpdHMuanMsIHdpbGwgcmVncmVz
cyBzdWJzdGFudGlhbGx5IG9uIE1hYywgZHVlIHRvIGEgfjQwJQotICAgIC8vIGluY3JlYXNlIGlu
IEwyIGNhY2hlIG1pc3Nlcy4gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS81NjU3NDM5PiBXVEY/Ci0g
ICAgZ2NjSXNDcmF6eSgpOwotCi0gICAgaW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGV4ZWMpOwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgTG9jYWxTdG9yYWdlIGxvY2FsU3RvcmFnZTsK
LQotICAgIC8vIFdlIGNhbid0IGp1c3QgcmVzaXplIGxvY2FsU3RvcmFnZSBoZXJlIGJlY2F1c2Ug
dGhhdCB3b3VsZCB0ZW1wb3JhcmlseQotICAgIC8vIGxlYXZlIHVuaW5pdGlhbGl6ZWQgZW50cmll
cywgd2hpY2ggd291bGQgY3Jhc2ggR0MgZHVyaW5nIHRoZSBtYXJrIHBoYXNlLgotICAgIGxvY2Fs
U3RvcmFnZS5yZXNlcnZlQ2FwYWNpdHkobG9jYWxTdG9yYWdlLnNpemUoKSArIG1fdmFyU3RhY2su
c2l6ZSgpICsgbV9mdW5jdGlvblN0YWNrLnNpemUoKSk7Ci0KLSAgICBpbnQgbWluQXR0cmlidXRl
cyA9IERvbnREZWxldGU7Ci0KLSAgICAvLyBJbiBvcmRlciBmb3Igb3VyIGxvY2FsU3RvcmFnZSBp
bmRleGVzIHRvIGJlIGNvcnJlY3QsIHdlIG11c3QgbWF0Y2ggdGhlCi0gICAgLy8gb3JkZXIgb2Yg
YWRkaXRpb24gaW4gaW5pdGlhbGl6ZVN5bWJvbFRhYmxlKCkuCi0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IG1fZnVuY3Rpb25TdGFjay5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRnVuY0RlY2xOb2RlKiBub2RlID0gbV9mdW5jdGlvblN0YWNrW2ldOwotICAgICAgICBM
b2NhbFN0b3JhZ2VFbnRyeSBlbnRyeSA9IExvY2FsU3RvcmFnZUVudHJ5KG5vZGUtPm1ha2VGdW5j
dGlvbihleGVjLCBleGVjLT5zY29wZUNoYWluKCkubm9kZSgpKSwgbWluQXR0cmlidXRlcyk7Ci0g
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fZnVuY3Rpb25JbmRleGVzW2ldOwotCi0gICAgICAgIGlm
IChpbmRleCA9PSBsb2NhbFN0b3JhZ2Uuc2l6ZSgpKQotICAgICAgICAgICAgbG9jYWxTdG9yYWdl
LnVuY2hlY2tlZEFwcGVuZChlbnRyeSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKGluZGV4IDwgbG9jYWxTdG9yYWdlLnNpemUoKSk7Ci0gICAgICAgICAgICBsb2NhbFN0b3Jh
Z2VbaW5kZXhdID0gZW50cnk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IG1fdmFyU3RhY2suc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IGludCBpbmRleCA9IG1fdmFySW5kZXhlc1tpXTsKLSAgICAgICAgaWYgKGluZGV4ID09IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBh
dHRyaWJ1dGVzID0gbWluQXR0cmlidXRlczsKLSAgICAgICAgaWYgKG1fdmFyU3RhY2tbaV0uc2Vj
b25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpCi0gICAgICAgICAgICBhdHRyaWJ1
dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICBMb2NhbFN0b3JhZ2VFbnRyeSBlbnRyeSA9IExvY2Fs
U3RvcmFnZUVudHJ5KGpzVW5kZWZpbmVkKCksIGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID09IGxvY2FsU3RvcmFnZS5zaXplKCkpOwot
ICAgICAgICBsb2NhbFN0b3JhZ2UudW5jaGVja2VkQXBwZW5kKGVudHJ5KTsKLSAgICB9Ci0KLSAg
ICBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKGV4ZWMpOwotfQotCi12b2lkIEV2YWxOb2RlOjpwcm9j
ZXNzRGVjbGFyYXRpb25zKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8v
IFdlIGNvdWxkIG9wdGltaXplIGFjY2VzcyB0byBwcmUtZXhpc3Rpbmcgc3ltYm9scyBoZXJlLCBi
dXQgU3VuU3BpZGVyCi0gICAgLy8gcmVwb3J0cyB0aGF0IHRvIGJlIGEgbmV0IGxvc3MuCi0KLSAg
ICBzaXplX3QgaTsKLSAgICBzaXplX3Qgc2l6ZTsKLQotICAgIEpTVmFyaWFibGVPYmplY3QqIHZh
cmlhYmxlT2JqZWN0ID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKTsKLQotICAgIGZvciAoaSA9IDAs
IHNpemUgPSBtX3ZhclN0YWNrLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBJZGVu
dGlmaWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0uZmlyc3Q7Ci0gICAgICAgIGlmICh2YXJpYWJs
ZU9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGludCBhdHRyaWJ1dGVzID0gMDsKLSAgICAgICAgaWYgKG1fdmFyU3RhY2tbaV0u
c2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpCi0gICAgICAgICAgICBhdHRy
aWJ1dGVzID0gUmVhZE9ubHk7Ci0gICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXRXaXRoQXR0cmli
dXRlcyhleGVjLCBpZGVudCwganNVbmRlZmluZWQoKSwgYXR0cmlidXRlcyk7Ci0gICAgfQotCi0g
ICAgZm9yIChpID0gMCwgc2l6ZSA9IG1fZnVuY3Rpb25TdGFjay5zaXplKCk7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgRnVuY0RlY2xOb2RlKiBmdW5jRGVjbCA9IG1fZnVuY3Rpb25TdGFja1tp
XTsKLSAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIGZ1bmNE
ZWNsLT5tX2lkZW50LCBmdW5jRGVjbC0+bWFrZUZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hh
aW4oKS5ub2RlKCkpLCAwKTsKLSAgICB9Ci19Ci0KIFVTdHJpbmcgRnVuY3Rpb25Cb2R5Tm9kZTo6
cGFyYW1TdHJpbmcoKSBjb25zdAogewogICAgIFVTdHJpbmcgcygiIik7CkBAIC02MDgyLDMyICsx
ODU0LDYgQEAgVVN0cmluZyBGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbVN0cmluZygpIAogICAgIHJl
dHVybiBzOwogfQogCi1KU1ZhbHVlKiBQcm9ncmFtTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBwcm9jZXNzRGVjbGFyYXRpb25zKGV4ZWMpOwotICAg
IHJldHVybiBTY29wZU5vZGU6OmV4ZWN1dGUoZXhlYyk7Ci19Ci0KLUpTVmFsdWUqIEV2YWxOb2Rl
OjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHByb2Nlc3NE
ZWNsYXJhdGlvbnMoZXhlYyk7Ci0gICAgcmV0dXJuIFNjb3BlTm9kZTo6ZXhlY3V0ZShleGVjKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQm9keU5vZGVX
aXRoRGVidWdnZXJIb29rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRnVu
Y3Rpb25Cb2R5Tm9kZVdpdGhEZWJ1Z2dlckhvb2tzOjpGdW5jdGlvbkJvZHlOb2RlV2l0aERlYnVn
Z2VySG9va3MoU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2sqIHZhclN0YWNrLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayogZnVuY1N0
YWNrLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSkKLSAgICA6IEZ1bmN0aW9uQm9k
eU5vZGUoY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHVzZXNFdmFsLCBuZWVkc0Nsb3N1
cmUpCi17Ci19Ci0KLUpTVmFsdWUqIEZ1bmN0aW9uQm9keU5vZGVXaXRoRGVidWdnZXJIb29rczo6
ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBGdW5jdGlvbkJvZHlOb2RlOjpleGVjdXRlKGV4ZWMpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmNEZWNsTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBGdW5jRGVjbE5vZGU6
OmFkZFBhcmFtcygpCkBAIC02MTMyLDExICsxODc4LDYgQEAgUmVnaXN0ZXJJRCogRnVuY0RlY2xO
b2RlOjplbWl0Q29kZShDb2RlRwogICAgIHJldHVybiBkc3Q7CiB9CiAKLUpTVmFsdWUqIEZ1bmNE
ZWNsTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbigpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY0V4cHJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBSZWdpc3RlcklEKiBGdW5jRXhwck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNjE3NSwzMiArMTkxNiw0IEBAIHZv
aWQgRnVuY0V4cHJOb2RlOjphZGRQYXJhbXMoKQogICAgICAgICBtX2JvZHktPnBhcmFtZXRlcnMo
KS5hcHBlbmQocC0+aWRlbnQoKSk7CiB9CiAKLUpTVmFsdWUqIEZ1bmNFeHByTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0KLSAgICBib29sIG5hbWVkID0gIW1faWRlbnQuaXNOdWxsKCk7Ci0gICAgSlNPYmpl
Y3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSAwOwotCi0gICAgaWYgKG5hbWVkKSB7Ci0gICAgICAg
IC8vIG5hbWVkIEZ1bmN0aW9uRXhwcmVzc2lvbnMgY2FuIHJlY3Vyc2l2ZWx5IGNhbGwgdGhlbXNl
bHZlcywKLSAgICAgICAgLy8gYnV0IHRoZXkgd29uJ3QgcmVnaXN0ZXIgd2l0aCB0aGUgY3VycmVu
dCBzY29wZSBjaGFpbiBhbmQgc2hvdWxkCi0gICAgICAgIC8vIGJlIGNvbnRhaW5lZCBhcyBzaW5n
bGUgcHJvcGVydHkgaW4gYW4gYW5vbnltb3VzIG9iamVjdC4KLSAgICAgICAgZnVuY3Rpb25TY29w
ZU9iamVjdCA9IG5ldyBKU09iamVjdDsKLSAgICAgICAgZXhlYy0+cHVzaFNjb3BlKGZ1bmN0aW9u
U2NvcGVPYmplY3QpOwotICAgIH0KLQotICAgIEZ1bmN0aW9uSW1wKiBmdW5jID0gbmV3IEZ1bmN0
aW9uSW1wKGV4ZWMsIG1faWRlbnQsIG1fYm9keS5nZXQoKSwgZXhlYy0+c2NvcGVDaGFpbigpLm5v
ZGUoKSk7Ci0gICAgSlNPYmplY3QqIHByb3RvID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkp
OwotICAgIHByb3RvLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBmdW5jLCBEb250RW51bSk7Ci0gICAgZnVuYy0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvLCBEb250RGVsZXRlKTsKLQotICAgIGlmIChuYW1lZCkgewot
ICAgICAgICBmdW5jdGlvblNjb3BlT2JqZWN0LT5wdXREaXJlY3QobV9pZGVudCwgZnVuYywgUmVh
ZE9ubHkgfCAoZXhlYy0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSA/IDAgOiBEb250RGVsZXRlKSk7
Ci0gICAgICAgIGV4ZWMtPnBvcFNjb3BlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZ1bmM7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDM0MTUx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Mywz
NiArMTgzLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5z
SWZMZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIAotICAgICAgICAv
LyBVc2VkIGZvciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgbm9kZSB0
cmVlLiBEb2VzIG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMIHsgfQotCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBOb2RlKEpTVHlwZSkg
S0pTX0ZBU1RfQ0FMTDsgLy8gdXNlZCBieSBFeHByZXNzaW9uTm9kZQogCi0gICAgICAgIC8vIGZv
ciB1c2UgaW4gZXhlY3V0ZSgpCi0gICAgICAgIEpTVmFsdWUqIHNldEVycm9yQ29tcGxldGlvbihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciogbXNnKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICBKU1ZhbHVlKiBzZXRFcnJvckNvbXBsZXRpb24oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRp
ZmllciYpIEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgLy8gZm9yIHVzZSBpbiBldmFsdWF0ZSgp
Ci0gICAgICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBF
cnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZykgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgSlNWYWx1
ZSogdGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3Qg
Y2hhciogbXNnLCBjb25zdCBjaGFyKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgSlNWYWx1ZSog
dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hh
ciogbXNnLCBKU1ZhbHVlKiwgTm9kZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIEpTVmFsdWUq
IHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNo
YXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIEpTVmFs
dWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0
IGNoYXIqIG1zZywgSlNWYWx1ZSosIGNvbnN0IElkZW50aWZpZXImKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICBKU1ZhbHVlKiB0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgRXJy
b3JUeXBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqLCBOb2RlKiwgTm9kZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSosIE5vZGUqLCBjb25zdCBJ
ZGVudGlmaWVyJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1z
Zyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBF
cnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpOwogCi0gICAgICAg
IEpTVmFsdWUqIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIHZvaWQg
aGFuZGxlRXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdm9pZCBoYW5kbGVFeGNlcHRpb24oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBK
U1ZhbHVlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgICAgICAvLyBmb3IgdXNlIGluIGV4ZWN1dGUo
KQotICAgICAgICBKU1ZhbHVlKiByZXRocm93RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBpbnQgbV9saW5lIDogMjg7CiAgICAgICAg
IHVuc2lnbmVkIG1fZXhwZWN0ZWRSZXR1cm5UeXBlIDogMzsgLy8gSlNUeXBlCiAgICAgfTsKQEAg
LTIzOSwxOSArMjE1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgSlNUeXBlIGV4cGVj
dGVkUmV0dXJuVHlwZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNUeXBlPihtX2V4cGVjdGVkUmV0dXJuVHlwZSk7IH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTCA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVh
dGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29s
ZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgICAgICAv
LyBVc2VkIHRvIG9wdGltaXplIHRob3NlIG5vZGVzIHRoYXQgZG8gZXh0cmEgd29yayB3aGVuIHJl
dHVybmluZyBhIHJlc3VsdCwgZXZlbiBpZiB0aGUgcmVzdWx0IGhhcyBubyBzZW1hbnRpYyByZWxl
dmFuY2UKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQo
KSB7IH0KLQogICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGluIHB1YmxpYyBpbiBvcmRlciB0
byBjb21waWxlIHVzaW5nIEdDQyAzLnggCiAgICAgICAgIHR5cGVkZWYgZW51bSB7IEV2YWxPcGVy
YXRvciwgRnVuY3Rpb25DYWxsIH0gQ2FsbGVyVHlwZTsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHRlbXBsYXRlIDxDYWxsZXJUeXBlLCBib29sPiBpbmxpbmUgSlNWYWx1ZSogcmVzb2x2ZUFuZENh
bGwoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRz
Tm9kZSosIHNpemVfdCA9IDApOwogICAgIH07CiAKICAgICBjbGFzcyBTdGF0ZW1lbnROb2RlIDog
cHVibGljIE5vZGUgewpAQCAtMjYxLDggKzIyNiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICBpbnQgZmlyc3RMaW5lKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBsaW5lTm8oKTsg
fQogICAgICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1f
bGFzdExpbmU7IH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUgKmV4ZWMpIEtKU19GQVNUX0NBTEwgPSAwOwotCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwdXNoTGFiZWwoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwg
eyBtX2xhYmVsU3RhY2sucHVzaChpZGVudCk7IH0KICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4
cHJlc3Npb247IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdGF0ZW1lbnQoKSBjb25z
dCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yODMsNyArMjQ2LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogICAgIH07CkBAIC0yOTcsOCArMjU5LDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgICAgfTsKQEAgLTMxMiw4ICsyNzIsNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UHJpbWFyeTsgfQogICAgIH07CkBAIC0zMzksMTEgKzI5Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBzaWduYml0KG1f
ZG91YmxlKSA/IFByZWNVbmFyeSA6IFByZWNQcmltYXJ5OyB9CiAKQEAgLTM2NCwxMCArMzE3LDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICBBU1NFUlQodiA9PSBKU0ltbWVkaWF0ZTo6
ZnJvbShkKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0KICAgICAgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlKGRvdWJsZSBkKSBLSlNfRkFTVF9DQUxMIHsgbV9kb3VibGUgPSBkOyBtX3Zh
bHVlID0gSlNJbW1lZGlhdGU6OmZyb20oZCk7IEFTU0VSVChtX3ZhbHVlKTsgfQogCiAgICAgcHJp
dmF0ZToKQEAgLTM4NCw5ICszMzMsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCkBA
IC00MDMsNyArMzQ5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwogCi0gICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KIApAQCAtNDE5LDcg
KzM2NCw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
IAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KICAgICB9OwpAQCAt
NDM5LDEzICszODMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2
YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0
ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY1ByaW1hcnk7IH0KIApAQCAtNDU0LDczICszOTIsMTEgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIG1faWRlbnQ7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
OwogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIGludCBtX2luZGV4OyAvLyBV
c2VkIGJ5IExvY2FsVmFyQWNjZXNzTm9kZSBhbmQgU2NvcGVkVmFyQWNjZXNzTm9kZS4KICAgICAg
ICAgc2l6ZV90IG1fc2NvcGVEZXB0aDsgLy8gVXNlZCBieSBTY29wZWRWYXJBY2Nlc3NOb2RlCiAg
ICAgfTsKIAotICAgIGNsYXNzIExvY2FsVmFyQWNjZXNzTm9kZSA6IHB1YmxpYyBSZXNvbHZlTm9k
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBPdmVyd3JpdGVzIGEgUmVzb2x2ZU5vZGUgaW4g
cGxhY2UuCi0gICAgICAgIExvY2FsVmFyQWNjZXNzTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAot
ICAgICAgICAgICAgOiBSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAg
ICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKTsKLSAgICB9OwotICAgIAotICAgIGNsYXNzIFNjb3BlZFZhckFjY2Vzc05vZGUg
OiBwdWJsaWMgUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gT3ZlcndyaXRl
cyBhIFJlc29sdmVOb2RlIGluIHBsYWNlLgotICAgICAgICBTY29wZWRWYXJBY2Nlc3NOb2RlKGlu
dCBpLCBzaXplX3Qgc2NvcGVEZXB0aCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICA6IFJlc29sdmVO
b2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAg
ICAgICAgICBtX3Njb3BlRGVwdGggPSBzY29wZURlcHRoOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQz
Ml90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIGlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLSAg
ICAKLSAgICBjbGFzcyBOb25Mb2NhbFZhckFjY2Vzc05vZGUgOiBwdWJsaWMgUmVzb2x2ZU5vZGUg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gT3ZlcndyaXRlcyBhIFJlc29sdmVOb2RlIGluIHBs
YWNlLgotICAgICAgICBOb25Mb2NhbFZhckFjY2Vzc05vZGUoc2l6ZV90IHNjb3BlRGVwdGgpIEtK
U19GQVNUX0NBTEwKLSAgICAgICAgOiBSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNjb3BlRGVwdGggIT0gMCk7Ci0gICAgICAgICAg
ICBtX3Njb3BlRGVwdGggPSBzY29wZURlcHRoOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2
YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlu
bGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLQogICAgIGNs
YXNzIEVsZW1lbnROb2RlIDogcHVibGljIE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRWxl
bWVudE5vZGUoaW50IGVsaXNpb24sIEV4cHJlc3Npb25Ob2RlKiBub2RlKSBLSlNfRkFTVF9DQUxM
CkBAIC01MzgsMTIgKzQxNCw5IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
IAogICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogCi0gICAgICAgIEpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcnJheU5vZGU7CiAgICAgICAgIExpc3RSZWZQ
dHI8RWxlbWVudE5vZGU+IG1fbmV4dDsKQEAgLTU3NSw4ICs0NDgsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCkBAIC01OTcs
MTEgKzQ2OCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNF
eHByZXNzaW9uOyB9CiAKLSAgICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKICAgICBwcml2YXRlOgpAQCAtNjI1LDExICs0
OTQsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3Rv
cmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCi0gICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgUGFzc1JlZlB0
cjxQcm9wZXJ0eUxpc3ROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4g
bV9uZXh0LnJlbGVhc2UoKTsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTY1MCw4ICs1MTcsNiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UHJpbWFyeTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQYXJlbnNJZkxlZnRtb3N0KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjcwLDEyICs1MzUsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
dWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KIApAQCAtNjg1LDggKzU0NCw2IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KCkgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiBtX3N1YnNjcmlwdC5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgIH07CkBAIC03
MDAsMTIgKzU1Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY01lbWJlcjsgfQogCkBAIC03MTUsOCArNTY2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIG1faWRlbnQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBt
X2lkZW50OwogICAgIH07CkBAIC03MzUsMTEgKzU4NCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAK
LSAgICAgICAgdm9pZCBldmFsdWF0ZUxpc3QoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBMaXN0
JikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgUGFzc1JlZlB0cjxBcmd1bWVudExpc3ROb2RlPiBy
ZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQog
CiAgICAgICAgIExpc3RSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gbV9uZXh0OwpAQCAtNzU3LDEy
ICs2MDQsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhw
cmVzc2lvbjsgfQogCi0gICAgICAgIHZvaWQgZXZhbHVhdGVMaXN0KE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjLCBMaXN0JiBsaXN0KSBLSlNfRkFTVF9DQUxMIHsgaWYgKG1fbGlzdE5vZGUp
IG1fbGlzdE5vZGUtPmV2YWx1YXRlTGlzdChleGVjLCBsaXN0KTsgfQotCiAgICAgICAgIFJlZlB0
cjxBcmd1bWVudExpc3ROb2RlPiBtX2xpc3ROb2RlOwogICAgIH07CiAKQEAgLTc4MSwxOCArNjI1
LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0xlZnRIYW5kU2lkZTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVF
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9leHByOwogICAgICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gbV9hcmdz
OwogICAgIH07CkBAIC04MDUsOCArNjQxLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIApAQCAtODIzLDggKzY1Nyw2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNDYWxsOyB9CiAKQEAgLTg1MCw4MSArNjgyLDE2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJf
dCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
OwotCiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50
c05vZGU+IG1fYXJnczsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxW
YXJGdW5jdGlvbkNhbGxOb2RlLgogICAgICAgICBzaXplX3QgbV9zY29wZURlcHRoOyAvLyBVc2Vk
IGJ5IFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGUgYW5kIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxs
Tm9kZQogICAgIH07CiAgICAgCi0gICAgY2xhc3MgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlIDog
cHVibGljIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExv
Y2FsVmFyRnVuY3Rpb25DYWxsTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAg
OiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAg
ICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVU
b051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICAKLSAg
ICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLSAgICAKLSAgICBjbGFzcyBTY29w
ZWRWYXJGdW5jdGlvbkNhbGxOb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGUoaW50IGksIHNp
emVfdCBkZXB0aCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwot
ICAgICAgICAgICAgbV9zY29wZURlcHRoID0gZGVwdGg7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMy
X3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLSAgICB9OwotICAg
IAotICAgIGNsYXNzIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZSA6IHB1YmxpYyBGdW5jdGlv
bkNhbGxSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBOb25Mb2NhbFZhckZ1bmN0
aW9uQ2FsbE5vZGUoc2l6ZV90IGRlcHRoKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEZ1
bmN0aW9uQ2FsbFJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX3Njb3BlRGVwdGggPSBkZXB0aDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBp
bmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotICAgIH07Ci0KICAgICBj
bGFzcyBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9k
ZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSogYXJncykg
S0pTX0ZBU1RfQ0FMTApAQCAtOTM1LDggKzcwMiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAKQEAgLTk1NiwxOCAr
NzIxLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9O
dW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Nh
bGw7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5s
aW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAg
ICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gbV9hcmdzOwpAQCAtMTAwNSwzNiArNzYyLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y1Bvc3RmaXg7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlS
ZXN1bHQoKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUG9zdEluY0xvY2FsVmFyTm9kZSA6IHB1Ymxp
YyBQb3N0SW5jUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdEluY0xvY2Fs
VmFyTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBQb3N0SW5jUmVzb2x2
ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChp
ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpOwotICAgIH07Ci0KLSAgICBjbGFzcyBQb3N0SW5jQ29u
c3ROb2RlIDogcHVibGljIFBvc3RJbmNSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBQb3N0SW5jQ29uc3ROb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFBv
c3RJbmNSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5k
ZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNs
YXNzIFBvc3REZWNSZXNvbHZlTm9kZSA6IHB1YmxpYyBQcmVQb3N0UmVzb2x2ZU5vZGUgewpAQCAt
MTA1MSw0MyArNzgwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0
b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1Bvc3RmaXg7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5u
ZWNlc3NhcnlSZXN1bHQoKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUG9zdERlY0xvY2FsVmFyTm9k
ZSA6IHB1YmxpYyBQb3N0RGVjUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUG9z
dERlY0xvY2FsVmFyTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBQb3N0
RGVjUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChpICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4
ID0gaTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZUZv
clVubmVjZXNzYXJ5UmVzdWx0KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
Kik7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBvc3REZWNDb25zdE5vZGUgOiBwdWJsaWMgUG9zdERl
Y1Jlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBvc3REZWNDb25zdE5vZGUoaW50
IGkpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUG9zdERlY1Jlc29sdmVOb2RlKFBsYWNl
bWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9OwogCiAgICAgY2xhc3MgUG9zdGZpeEJyYWNrZXROb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTEwOTgsNyArNzkyLDYgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNQb3N0Zml4OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMTE1LDcgKzgwOCw2IEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTEyOCw3ICs4MjAsNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogICAgIH07CiAKQEAgLTExNDAsNyArODMxLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0
Zml4OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMTU3LDcgKzg0Nyw2IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTE3MCw3ICs4NTksNiBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIH07CiAKQEAgLTExODMsNyArODcxLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjUG9zdGZpeDsgfQogCkBAIC0xMjA3LDggKzg5NCw2IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBAIC0xMjE2
LDE2ICs5MDEsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50
OwogICAgIH07CiAKLSAgICBjbGFzcyBMb2NhbFZhckRlbGV0ZU5vZGUgOiBwdWJsaWMgRGVsZXRl
UmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWxWYXJEZWxldGVOb2RlKCkg
S0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBEZWxldGVSZXNvbHZlTm9kZShQbGFjZW1lbnRO
ZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
fTsKLQogICAgIGNsYXNzIERlbGV0ZUJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlbGV0ZUJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KSBLSlNfRkFTVF9DQUxMCkBAIC0xMjM2
LDggKzkxMSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNVbmFyeTsgfQogCkBAIC0xMjU2LDggKzkyOSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBAIC0xMjc1LDggKzk0Niw2
IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFy
eTsgfQogCkBAIC0xMjkzLDggKzk2Miw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBAIC0xMzE5LDggKzk4Niw2IEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCkBA
IC0xMzMxLDE5ICs5OTYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc2l6ZV90IG1faW5k
ZXg7IC8vIFVzZWQgYnkgTG9jYWxUeXBlT2ZOb2RlLgogICAgIH07CiAKLSAgICBjbGFzcyBMb2Nh
bFZhclR5cGVPZk5vZGUgOiBwdWJsaWMgVHlwZU9mUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgTG9jYWxWYXJUeXBlT2ZOb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IFR5cGVPZlJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2V4cGVjdGVkUmV0dXJuVHlwZSA9IFN0cmluZ1R5cGU7Ci0gICAgICAgICAg
ICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRl
eCA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCiAgICAgY2xh
c3MgVHlwZU9mVmFsdWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIFR5cGVPZlZhbHVlTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcikgS0pTX0ZBU1Rf
Q0FMTApAQCAtMTM1NCw4ICsxMDA2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAKQEAgLTEzNzcsMzYgKzEwMjcsMTAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAg
ICAgfTsKIAotICAgIGNsYXNzIFByZUluY0xvY2FsVmFyTm9kZSA6IHB1YmxpYyBQcmVJbmNSZXNv
bHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBQcmVJbmNMb2NhbFZhck5vZGUoaW50IGkp
IEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUHJlSW5jUmVzb2x2ZU5vZGUoUGxhY2VtZW50
TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBQcmVJbmNDb25zdE5vZGUgOiBwdWJs
aWMgUHJlSW5jUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUHJlSW5jQ29uc3RO
b2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFByZUluY1Jlc29sdmVOb2Rl
KFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCiAgICAgY2xhc3MgUHJlRGVjUmVzb2x2
ZU5vZGUgOiBwdWJsaWMgUHJlUG9zdFJlc29sdmVOb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFByZURlY1Jlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxM
CkBAIC0xNDIxLDM2ICsxMDQ1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
S0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogICAgIH07CiAKLSAgICBjbGFzcyBQcmVEZWNMb2Nh
bFZhck5vZGUgOiBwdWJsaWMgUHJlRGVjUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgUHJlRGVjTG9jYWxWYXJOb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6
IFByZURlY1Jlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9p
bmRleCA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCi0gICAg
Y2xhc3MgUHJlRGVjQ29uc3ROb2RlIDogcHVibGljIFByZURlY1Jlc29sdmVOb2RlIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIFByZURlY0NvbnN0Tm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAg
ICAgICAgICAgOiBQcmVEZWNSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAg
ICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
fTsKLQogICAgIGNsYXNzIFByZWZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFByZWZpeEJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KSBLSlNfRkFTVF9DQUxMCkBAIC0xNDU5
LDcgKzEwNTcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0x
NDc2LDcgKzEwNzMsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNU
X0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAKQEAgLTE0ODks
NyArMTA4NSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTUwMSw3ICsx
MDk2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xNTE4
LDcgKzExMTIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NB
TEw7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAKQEAgLTE1MzEsNyAr
MTEyNCw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
IAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIApAQCAtMTU0NCw3ICsxMTM2
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KIApAQCAtMTU2
MiwxMiArMTE1Myw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY1VuYXJ5OyB9CiAKQEAgLTE1ODQsOSArMTE2OSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjVW5hcnk7IH0KIApAQCAtMTYwMywxOCArMTE4NSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9J
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9l
eHByOwogICAgIH07CiAKQEAgLTE2MjcsOSArMTIwMSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRv
Qm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNVbmFyeTsgfQogCkBAIC0xNjQ3LDE4ICsxMjE4LDEwIEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX3Rlcm0xOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAg
ICAgfTsKQEAgLTE2NzMsMTcgKzEyMzYsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTXVsdGlw
bGljaXRhdmU7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgZG91Ymxl
IGlubGluZUV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7CiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV90ZXJtMjsKICAgICB9OwpAQCAtMTY5OCwxOCArMTI1NCwxMCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90
IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0aXBsaWNpdGF2ZTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX3Rlcm0yOwogICAgIH07CkBAIC0xNzIzLDExICsxMjcxLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRl
VG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjQWRkaXRpdmU7IH0KIApAQCAtMTc0MSw1NSArMTI4NCw2IEBAIG5hbWVzcGFjZSBLSlMg
ewogCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxX
QVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopOwotICAgIH07Ci0KLSAgICBjbGFzcyBBZGROdW1iZXJzTm9kZSA6IHB1YmxpYyBB
ZGROb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFkZE51bWJlcnNOb2RlKEV4cHJlc3Npb25O
b2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IEFkZE5vZGUodGVybTEsIHRlcm0yLCBOdW1iZXJUeXBlKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVh
dGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9V
SW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBkb3VibGUgaW5saW5lRXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsKLQotICAg
IGNsYXNzIEFkZFN0cmluZ0xlZnROb2RlIDogcHVibGljIEFkZE5vZGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgQWRkU3RyaW5nTGVmdE5vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNz
aW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogQWRkTm9kZSh0ZXJt
MSwgdGVybTIsIFN0cmluZ1R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBBZGRTdHJpbmdSaWdodE5vZGUgOiBwdWJsaWMg
QWRkTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBBZGRTdHJpbmdSaWdodE5vZGUoRXhwcmVz
c2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAg
ICAgICAgICAgIDogQWRkTm9kZSh0ZXJtMSwgdGVybTIsIFN0cmluZ1R5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBBZGRT
dHJpbmdzTm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFkZFN0
cmluZ3NOb2RlKEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBL
SlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEFkZE5vZGUodGVybTEsIHRlcm0yLCBTdHJpbmdU
eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9Owog
CiAgICAgY2xhc3MgU3ViTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0xODAyLDE3
ICsxMjk2LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVh
dGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX3Rlcm0xOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAg
ICAgfTsKQEAgLTE4MjcsMTcgKzEzMTQsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRp
bWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV90ZXJtMjsKICAgICB9OwpAQCAtMTg1MiwxNyArMTMzMiwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBl
dmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVh
dGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNTaGlmdDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBp
bnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwot
CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwogICAgIH07CkBAIC0xODc3LDE2ICsxMzUwLDEwIEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1
aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY1NoaWZ0OyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxX
QVlTX0lOTElORSB1aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKik7CiAKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fdGVybTE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMjsKICAg
ICB9OwpAQCAtMTkwMSw0OCArMTM2OCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVs
YXRpb25hbDsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKICAgICAg
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07CiAKLSAgICBjbGFzcyBM
ZXNzTnVtYmVyc05vZGUgOiBwdWJsaWMgTGVzc05vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAg
TGVzc051bWJlcnNOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IExlc3NOb2RlKGV4cHIxLCBleHByMikK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLSAgICB9Owot
Ci0gICAgY2xhc3MgTGVzc1N0cmluZ3NOb2RlIDogcHVibGljIExlc3NOb2RlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIExlc3NTdHJpbmdzTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBMZXNzTm9kZShl
eHByMSwgZXhwcjIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lO
TElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
Kik7Ci0gICAgfTsKLQogICAgIGNsYXNzIEdyZWF0ZXJOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEdyZWF0ZXJOb2RlKEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCkBAIC0xOTUyLDE1ICsx
Mzg1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsK
ICAgICB9OwpAQCAtMTk3NCwxNSArMTQwMiwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xl
YW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
UmVsYXRpb25hbDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29s
IGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAg
ICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgICAgfTsKQEAgLTE5OTYsMTUgKzE0MTksMTAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHBy
MTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07CkBAIC0y
MDE5LDkgKzE0MzcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQog
CkBAIC0yMDQwLDkgKzE0NTUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtK
U19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExv
Y2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQogCkBA
IC0yMDYxLDE1ICsxNDczLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwg
Y29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1
YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjI7CiAgICAgfTsKQEAgLTIwODQsMTUgKzE0OTEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1
YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjEwNywxNSArMTUwOSwx
MCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjRXF1YWxpdHk7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07
CkBAIC0yMTMwLDE1ICsxNTI3LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0
eTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fZXhwcjI7CiAgICAgfTsKQEAgLTIxNTMsMTggKzE1NDUsMTAgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUg
ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0
ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZUFuZDsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwog
ICAgIH07CkBAIC0yMTc5LDE4ICsxNTYzLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50
MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VPcjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
QUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsK
ICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgIH07CkBAIC0yMjA1
LDE4ICsxNTgxLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0JpdHdpc2VYb3I7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsK
LQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjIzNCwxNSArMTYwMiwxMCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYs
IE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNhbEFuZDsgfQogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgICAgfTsK
QEAgLTIyNTcsMTUgKzE2MjAsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0xvZ2ljYWxP
cjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fZXhwcjI7CiAgICAgfTsKQEAgLTIyODMsMTIgKzE2NDEsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZh
bHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRl
VG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDb25kaXRpb25hbDsgfQogCkBAIC0yMzE4
LDggKzE2NzAsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NB
TEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjQXNzaWdubWVudDsgfQogCkBAIC0yMzMxLDMwICsxNjgxLDYgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIGJvb2wgbV9yaWdodEhhc0Fzc2lnbm1lbnRzIDogMTsKICAgICB9OwogCi0g
ICAgY2xhc3MgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZSA6IHB1YmxpYyBSZWFkTW9kaWZ5UmVzb2x2
ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZShpbnQg
aSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoUGxh
Y2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBSZWFkTW9kaWZ5Q29uc3RO
b2RlIDogcHVibGljIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBSZWFkTW9kaWZ5Q29uc3ROb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6
IFJlYWRNb2RpZnlSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAg
IG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFs
dWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsKLQog
ICAgIGNsYXNzIEFzc2lnblJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIEFzc2lnblJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykgS0pT
X0ZBU1RfQ0FMTApAQCAtMjM3Myw4ICsxNjk5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogCkBAIC0yMzg1
LDI4ICsxNzA5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGJvb2wgbV9yaWdodEhhc0Fz
c2lnbm1lbnRzOwogICAgIH07CiAKLSAgICBjbGFzcyBBc3NpZ25Mb2NhbFZhck5vZGUgOiBwdWJs
aWMgQXNzaWduUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduTG9jYWxW
YXJOb2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEFzc2lnblJlc29sdmVO
b2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCi0gICAgY2xhc3MgQXNzaWduQ29u
c3ROb2RlIDogcHVibGljIEFzc2lnblJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IEFzc2lnbkNvbnN0Tm9kZSgpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogQXNzaWduUmVz
b2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgIH07Ci0KICAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tldE5vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVhZE1vZGlm
eUJyYWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2Ny
aXB0LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0
SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykgS0pTX0ZBU1RfQ0FMTApA
QCAtMjQyMSw4ICsxNzIzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KIApAQCAtMjQ0OCw4ICsxNzQ4LDYgQEAgbmFtZXNw
YWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0K
IApAQCAtMjQ3Miw4ICsxNzcwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KIApAQCAtMjQ5Nyw4ICsxNzkz
LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fz
c2lnbm1lbnQ7IH0KIApAQCAtMjUyMCw3ICsxODE0LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogCkBAIC0yNTM2LDEyICsxODI5LDkgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgICAgICA6IG1fZXhwcjEoZXhwcjEpCiAgICAgICAgICAgICAsIG1f
ZXhwcjIoZXhwcjIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhwcjEtPm9wdGltaXplRm9y
VW5uZWNlc3NhcnlSZXN1bHQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjRXhwcmVzc2lvbjsgfQogCkBAIC0yNTYzLDkgKzE4NTMsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnN0RGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbikgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdm9pZCBldmFsdWF0
ZVNpbmdsZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgICAgICBQYXNzUmVm
UHRyPENvbnN0RGVjbE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBt
X25leHQucmVsZWFzZSgpOyB9CkBAIC0yNTc2LDggKzE4NjMsNiBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZVNpbmdsZShDb2RlR2VuZXJhdG9yJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGhhbmRsZVNsb3dDYXNlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU2NvcGVDaGFpbiYsIEpTVmFsdWUqKSBLSlNfRkFTVF9DQUxMIE5F
VkVSX0lOTElORTsKICAgICB9OwogCiAgICAgY2xhc3MgQ29uc3RTdGF0ZW1lbnROb2RlIDogcHVi
bGljIFN0YXRlbWVudE5vZGUgewpAQCAtMjU4NywxMSArMTg3MiwxMCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9D
QUxMOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPENvbnN0RGVjbE5vZGU+IG1fbmV4
dDsKICAgICB9OwpAQCAtMjYxNiw4ICsxOTAwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IEJsb2NrTm9kZShTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4pIEtKU19GQVNUX0NBTEw7CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yNjMyLDcgKzE5MTQs
NiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3Rh
dGVtZW50KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKQEAg
LTI2NDUsOCArMTkyNiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAtMjY2Miw4ICsxOTQxLDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAg
cHJpdmF0ZToKQEAgLTI2NzksOCArMTk1Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yNjk3LDgg
KzE5NzIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogCiAgICAgcHJpdmF0ZToKQEAgLTI3MTQsOCArMTk4Nyw2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRl
OgpAQCAtMjczMiw4ICsyMDAzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6CkBAIC0yNzQ0LDI0ICsyMDEzLDE2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIEZvck5vZGUgOiBwdWJsaWMgU3RhdGVtZW50
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBGb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBFeHByZXNzaW9uTm9kZSogZXhwcjMsIFN0YXRlbWVu
dE5vZGUqIHN0YXRlbWVudCwgYm9vbCBleHByMVdhc1ZhckRlY2wpIEtKU19GQVNUX0NBTEwKLSAg
ICAgICAgICAgIDogbV9leHByMShleHByMSA/IGV4cHIxIDogbmV3IFBsYWNlaG9sZGVyVHJ1ZU5v
ZGUpCi0gICAgICAgICAgICAsIG1fZXhwcjIoZXhwcjIgPyBleHByMiA6IG5ldyBQbGFjZWhvbGRl
clRydWVOb2RlKQotICAgICAgICAgICAgLCBtX2V4cHIzKGV4cHIzID8gZXhwcjMgOiBuZXcgUGxh
Y2Vob2xkZXJUcnVlTm9kZSkKKyAgICAgICAgICAgIDogbV9leHByMShleHByMSkKKyAgICAgICAg
ICAgICwgbV9leHByMihleHByMikKKyAgICAgICAgICAgICwgbV9leHByMyhleHByMykKICAgICAg
ICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgICAgICAgICAgLCBtX2V4cHIxV2Fz
VmFyRGVjbChleHByMSAmJiBleHByMVdhc1ZhckRlY2wpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX2V4cHIxKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2V4cHIyKTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2V4cHIzKTsKICAgICAgICAgICAgIEFTU0VSVChzdGF0ZW1lbnQpOwotCi0g
ICAgICAgICAgICBtX2V4cHIxLT5vcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7Ci0gICAg
ICAgICAgICBtX2V4cHIzLT5vcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7CiAgICAgICAg
IH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6CkBAIC0yNzc4LDgg
KzIwMzksNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgRm9ySW5Ob2RlKGNvbnN0IElkZW50
aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAg
IHByaXZhdGU6CkBAIC0yODAzLDcgKzIwNjIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6CkBAIC0yODIyLDcgKzIwODAsNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6CkBAIC0yODM3LDgg
KzIwOTQsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXR1cm5Ob2RlKCkgY29uc3QgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTI4NTUsOCArMjExMCw2IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2
YXRlOgpAQCAtMjg3Myw4ICsyMTI2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFi
bGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hMYWJlbChj
b25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FMTCB7IG1fc3RhdGVtZW50LT5wdXNo
TGFiZWwoaWRlbnQpOyB9CiAKQEAgLTI4OTEsOCArMjE0Miw2IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAt
MjkwOSw4ICsyMTU4LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiBkc3QgPSAwKSBLSlNfRkFTVF9DQUxMOwpAQCAtMjk2MCw4ICsyMjA3LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIGJvb2wgbmVlZHNDbG9zdXJlKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc0Nsb3N1cmU7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LQogICAgICAgICBWYXJTdGFjayBtX3ZhclN0YWNrOwogICAgICAgICBGdW5jdGlvblN0YWNrIG1f
ZnVuY3Rpb25TdGFjazsKIApAQCAtMjk3Nyw4ICsyMjIyLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgIHN0YXRpYyBQcm9ncmFtTm9kZSogY3JlYXRlKFNvdXJjZUVsZW1lbnRzKiwgVmFyU3Rh
Y2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpIEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgflByb2dyYW1Ob2RlKCk7CiAgICAgICAgIAot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotCiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2smIGNvZGUoU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4sIGJvb2wgY2FuQ3JlYXRlR2xvYmFscykgS0pTX0ZBU1RfQ0FM
TAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY29kZSkKQEAgLTI5OTIsOSArMjIzNSw2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2b2lkIGdlbmVyYXRlQ29kZShTY29wZUNoYWlu
Tm9kZSosIGJvb2wpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
IAotICAgICAgICB2b2lkIGluaXRpYWxpemVTeW1ib2xUYWJsZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwcm9jZXNz
RGVjbGFyYXRpb25zKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQog
ICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3ZhckluZGV4ZXM7IC8vIFN0b3JhZ2UgaW5kZXhlcyBi
ZWxvbmdpbmcgdG8gdGhlIG5vZGVzIGluIG1fdmFyU3RhY2suIChSZWNvcmRlZCB0byBhdm9pZCBk
b3VibGUgbG9va3VwLikKICAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9mdW5jdGlvbkluZGV4ZXM7
IC8vIFN0b3JhZ2UgaW5kZXhlcyBiZWxvbmdpbmcgdG8gdGhlIG5vZGVzIGluIG1fZnVuY3Rpb25T
dGFjay4gKFJlY29yZGVkIHRvIGF2b2lkIGRvdWJsZSBsb29rdXAuKQogCkBAIC0zMDA2LDggKzIy
NDYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc3RhdGljIEV2YWxOb2RlKiBjcmVhdGUo
U291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBib29sIHVzZXNFdmFs
LCBib29sIG5lZWRzQ2xvc3VyZSkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB+RXZh
bE5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0KICAgICAgICAgRXZhbENvZGVC
bG9jayYgY29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikgS0pTX0ZBU1RfQ0FMTAogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY29kZSkKQEAgLTMwMTgsNyArMjI1Niw2IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIHByaXZhdGU6CiAgICAgICAgIEV2YWxOb2RlKFNvdXJjZUVsZW1l
bnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVk
c0Nsb3N1cmUpIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHBy
b2Nlc3NEZWNsYXJhdGlvbnMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2b2lkIGdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIApAQCAtMzA4MSw3ICsyMzE4LDYgQEAg
bmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICBG
dW5jdGlvbkltcCogbWFrZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0KICAg
ICAgICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5zSWZMZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KQEAgLTMxMTEsNyArMjM0Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
ICAgRnVuY3Rpb25JbXAqIG1ha2VGdW5jdGlvbihFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
IEtKU19GQVNUX0NBTEw7CiAKQEAgLTMxNDAsMTMgKzIzNzUsOSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgICAgICAgICBjaGlsZHJlbi0+cmVsZWFzZUNvbnRlbnRzSW50b1ZlY3RvcihtX2No
aWxkcmVuKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAotICAgICAgICBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIEpTVmFsdWUqIGV4ZWN1dGVTdGF0ZW1lbnRzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcigpIGNvbnN0IHsg
cmV0dXJuIG1fZXhwci5nZXQoKTsgfQogICAgICAgICBTdGF0ZW1lbnRWZWN0b3ImIGNoaWxkcmVu
KCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQogCkBAIC0zMTY4LDcgKzIzOTksNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgICAgIGNsYXVzZUxpc3QtPm1fbmV4dCA9IHRoaXM7CiAgICAgICAg
IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgQ2FzZUNsYXVzZU5vZGUqIGdl
dENsYXVzZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9jbGF1c2UuZ2V0KCk7IH0K
ICAgICAgICAgQ2xhdXNlTGlzdE5vZGUqIGdldE5leHQoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKQEAgLTMxOTIsOCArMjQyMiw2IEBAIG5h
bWVzcGFjZSBLSlMgewogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb2RlRm9yQmxvY2soQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIGlucHV0LCBSZWdpc3RlcklEKiBkc3QgPSAwKSBLSlNf
RkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICBKU1ZhbHVlKiBl
eGVjdXRlQmxvY2soT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBKU1ZhbHVlICppbnB1dCkgS0pT
X0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9u
OyB9CiAKQEAgLTMyMTMsOCArMjQ0MSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgpAQCAtMzIyNiw5ICsyNDUyLDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgcHVibGljOgogICAgICAgICBCcmVha3BvaW50Q2hlY2tTdGF0ZW1l
bnQoUGFzc1JlZlB0cjxTdGF0ZW1lbnROb2RlPikgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg0LDkgKzU4NCw5IEBAIHZvaWQgSlNPYmplY3Q6
OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHIKICAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdzID0gc3Rh
dGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KCpsb2NhdGlvbik7CiAgICAgSlNPYmplY3QgKmdl
dHRlckZ1bmMgPSBncy0+Z2V0R2V0dGVyKCk7CiAgICAgaWYgKGdldHRlckZ1bmMpCi0gICAgICAg
IHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLT50b1RoaXNPYmplY3QoMCksIGdldHRlckZ1bmMpOwor
ICAgICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuYyk7CiAgICAgZWxzZQotICAgICAg
ICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVycm9yIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJKHJldmlz
aW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNiArMTAyLDEzIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgc2V0U2V0dGVy
KEpTT2JqZWN0ICpzKSB7IHNldHRlciA9IHM7IH0KICAgICAgIAogICBwcml2YXRlOgorICAgIC8v
IE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQu
CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90Jik7CisgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09i
amVjdChFeGVjU3RhdGUqKSBjb25zdDsKKwogICAgIEpTT2JqZWN0ICpnZXR0ZXI7CiAgICAgSlNP
YmplY3QgKnNldHRlcjsgIAogICB9OwpAQCAtNTI3LDE5ICs1MzQsMTkgQEAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNPYmplY3QoY29uc3QgQ2xhcwogCiBpbmxpbmUgSlNWYWx1ZSAqSlNPYmplY3Q6
OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKIHsKLSAgUHJvcGVydHlTbG90IHNsb3Q7CisgIFByb3BlcnR5U2xvdCBzbG90KGNvbnN0X2Nh
c3Q8SlNPYmplY3QgKj4odGhpcykpOwogCiAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0ICo+KHRo
aXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICByZXR1
cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBjb25zdF9jYXN0PEpTT2JqZWN0ICo+KHRoaXMpLCBwcm9w
ZXJ0eU5hbWUpOworICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7
CiAgICAgCiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBpbmxpbmUgSlNWYWx1ZSAqSlNP
YmplY3Q6OmdldChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QK
IHsKLSAgUHJvcGVydHlTbG90IHNsb3Q7CisgIFByb3BlcnR5U2xvdCBzbG90KGNvbnN0X2Nhc3Q8
SlNPYmplY3QgKj4odGhpcykpOwogICBpZiAoY29uc3RfY2FzdDxKU09iamVjdCAqPih0aGlzKS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgcmV0dXJuIHNs
b3QuZ2V0VmFsdWUoZXhlYywgY29uc3RfY2FzdDxKU09iamVjdCAqPih0aGlzKSwgcHJvcGVydHlO
YW1lKTsKKyAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAg
IAogICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTU4OSwxMyArNTk2LDEzIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKICAgICAgICAgICAgIHNsb3RJc1dy
aXRlYWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBsb2NhdGlvbik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNs
b3QodGhpcywgbG9jYXRpb24pOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRp
b24pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBub24tc3RhbmRhcmQg
TmV0c2NhcGUgZXh0ZW5zaW9uCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRo
aXMsICZfcHJvdG8pOworICAgICAgICBzbG90LnNldFZhbHVlU2xvdCgmX3Byb3RvKTsKICAgICAg
ICAgc2xvdElzV3JpdGVhYmxlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtNjEyLDEzICs2MTksMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZQogICAgICAgICBpZiAoX3Byb3AuaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxv
Y2F0aW9uWzBdLT50eXBlKCkgPT0gR2V0dGVyU2V0dGVyVHlwZSkKICAgICAgICAgICAgIGZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCBsb2NhdGlvbik7CisgICAgICAgICAgICBzbG90
LnNldFZhbHVlU2xvdChsb2NhdGlvbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIC8vIG5vbi1zdGFuZGFyZCBOZXRzY2FwZSBleHRlbnNpb24KICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pIHsKLSAgICAgICAg
c2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJl9wcm90byk7CisgICAgICAgIHNsb3Quc2V0VmFsdWVT
bG90KCZfcHJvdG8pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY0MCw2ICs2
NDcsNzUgQEAgaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0Ojp0b1ByaW1pdGl2ZShFeAogICAgIHJl
dHVybiBkZWZhdWx0VmFsdWUoZXhlYywgcHJlZmVycmVkVHlwZSk7CiB9CiAKK2lubGluZSBKU1Zh
bHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0ltbWVk
aWF0ZSh0aGlzKSkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTSW1tZWRpYXRlOjp0
b09iamVjdCh0aGlzLCBleGVjKTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsK
KyAgICAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgfQorICAgIEpTQ2VsbCog
Y2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KHRoaXMpKTsK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBpZiAoY2VsbC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CisgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBBU1NFUlQoY2VsbC0+aXNPYmplY3QoKSk7CisgICAgICAgIEpTVmFsdWUqIHByb3Rv
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJvdG90eXBlKCk7CisgICAgICAgIGlm
ICghcHJvdG8tPmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHByb3RvKTsKKyAgICB9Cit9CisK
K2lubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZSh0aGlzKSkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTSW1tZWRpYXRl
Ojp0b09iamVjdCh0aGlzLCBleGVjKTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
KTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJl
dHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgfQorICAgIEpTQ2Vs
bCogY2VsbCA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4oYXNDZWxsKCkpOworICAgIFByb3BlcnR5U2xv
dCBzbG90KGNlbGwpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChjZWxsLT5nZXRP
d25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIHJl
dHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEFTU0VSVChj
ZWxsLT5pc09iamVjdCgpKTsKKyAgICAgICAgSlNWYWx1ZSogcHJvdG8gPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KGNlbGwpLT5wcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKCFwcm90by0+aXNPYmpl
Y3QoKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBjZWxsID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKj4ocHJvdG8pOworICAgIH0KK30KKworaW5saW5lIHZvaWQgSlNW
YWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKHRoaXMpKSkgeworICAgICAgICBKU0ltbWVkaWF0ZTo6dG9PYmplY3QodGhpcywgZXhl
YyktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBhc0NlbGwoKS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCitp
bmxpbmUgdm9pZCBKU1ZhbHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6
aXNJbW1lZGlhdGUodGhpcykpKSB7CisgICAgICAgIEpTSW1tZWRpYXRlOjp0b09iamVjdCh0aGlz
LCBleGVjKS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGFzQ2VsbCgpLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9
CisKK2lubGluZSBKU09iamVjdCogUHJvcGVydHlTbG90OjpzbG90QmFzZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fc2xvdEJhc2UpOworICAgIEFTU0VSVChtX3Nsb3RCYXNlLT5pc09iamVjdCgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihtX3Nsb3RCYXNlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmIC8vIEtKU19PQkpFQ1RfSApJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9wcm9wZXJ0eV9zbG90LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvcHJvcGVydHlfc2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBACiAv
LyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDQgLSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwyNyArMjksMjcgQEAKIAog
bmFtZXNwYWNlIEtKUyB7CiAKLUpTVmFsdWUgKlByb3BlcnR5U2xvdDo6dW5kZWZpbmVkR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpCitKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OnVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmdldHRhYmxlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpCitKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OnVuZ2V0dGFibGVHZXR0ZXIoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFs
dWUgKlByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBDYWxsRGF0YSBkYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2xvdC5tX2RhdGEuZ2V0
dGVyRnVuYy0+Z2V0Q2FsbERhdGEoZGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
TmF0aXZlKQotICAgICAgICByZXR1cm4gc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYy0+Y2FsbChleGVj
LCBvcmlnaW5hbE9iamVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgICAgICByZXR1cm4gc2xv
dC5tX2RhdGEuZ2V0dGVyRnVuYy0+Y2FsbChleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7CiAgICAgUmVn
aXN0ZXJGaWxlU3RhY2sqIHN0YWNrID0gJmV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+cmVn
aXN0ZXJGaWxlU3RhY2soKTsKICAgICBzdGFjay0+cHVzaEZ1bmN0aW9uUmVnaXN0ZXJGaWxlKCk7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYy0+Y2FsbChleGVj
LCBvcmlnaW5hbE9iamVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNhbGwoZXhlYywgc2xvdC5zbG90QmFzZSgpLCBl
eGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgc3RhY2stPnBvcEZ1bmN0aW9uUmVnaXN0ZXJGaWxlKCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsgICAgCiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfc2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9z
bG90LmgJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Ns
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8vIC0qLSBjLWJhc2ljLW9mZnNl
dDogNCAtKi0KIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM4
LDI0ICszOCwzNCBAQCBzdHJ1Y3QgSGFzaEVudHJ5OwogCiBjbGFzcyBQcm9wZXJ0eVNsb3Qgewog
cHVibGljOgotICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwotICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpHZXRWYWx1ZU51bWVyaWNGdW5jKShF
eGVjU3RhdGUqLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBQcm9wZXJ0eVNsb3QoKQorICAgIHsKKyAgICAgICAgY2xl
YXJCYXNlKCk7CisgICAgfQogCi0gICAgSlNWYWx1ZSogZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkgY29uc3QKLSAgICB7IAorICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChKU0NlbGwqIGJhc2Up
CisgICAgICAgIDogbV9zbG90QmFzZShiYXNlKQorICAgIHsKKyAgICB9CisKKyAgICB0eXBlZGVm
IEpTVmFsdWUqICgqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgdHlwZWRlZiBKU1ZhbHVlKiAoKkdldFZhbHVlTnVt
ZXJpY0Z1bmMpKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKKworICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKG1fZ2V0VmFsdWUg
PT0gS0pTX1ZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAgcmV0dXJuICptX2RhdGEudmFs
dWVTbG90OwogICAgICAgICBBU1NFUlQobV9nZXRWYWx1ZSAhPSBLSlNfTlVNRVJJQ19QUk9QRVJU
WV9OQU1FX1NMT1RfTUFSS0VSKTsKLSAgICAgICAgcmV0dXJuIG1fZ2V0VmFsdWUoZXhlYywgb3Jp
Z2luYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgKnRoaXMpOyAKKyAgICAgICAgcmV0dXJuIG1fZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lLCAqdGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSog
Z2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLSAgICB7IAorICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIHsKICAgICAg
ICAgaWYgKG1fZ2V0VmFsdWUgPT0gS0pTX1ZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAg
cmV0dXJuICptX2RhdGEudmFsdWVTbG90OwogICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBLSlNf
TlVNRVJJQ19QUk9QRVJUWV9OQU1FX1NMT1RfTUFSS0VSKQotICAgICAgICAgICAgcmV0dXJuIG1f
ZGF0YS5udW1lcmljRnVuYyhleGVjLCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1lLCAqdGhp
cyk7Ci0gICAgICAgIHJldHVybiBtX2dldFZhbHVlKGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0aGlzKTsgCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLm51bWVyaWNGdW5jKGV4ZWMsIHByb3BlcnR5TmFtZSwgKnRoaXMpOworICAgICAgICBy
ZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0
aGlzKTsKICAgICB9CiAKICAgICB2b2lkIHB1dFZhbHVlKEpTVmFsdWUqIHZhbHVlKQpAQCAtNjQs
NzYgKzc0LDkxIEBAIHB1YmxpYzoKICAgICAgICAgKm1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNPYmplY3QqIHNsb3RCYXNlLCBK
U1ZhbHVlKiogdmFsdWVTbG90KSAKKyAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlKiogdmFs
dWVTbG90KSAKICAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZVNsb3QpOwogICAgICAgICBtX2dl
dFZhbHVlID0gS0pTX1ZBTFVFX1NMT1RfTUFSS0VSOwotICAgICAgICBtX3Nsb3RCYXNlID0gc2xv
dEJhc2U7CisgICAgICAgIGNsZWFyQmFzZSgpOwogICAgICAgICBtX2RhdGEudmFsdWVTbG90ID0g
dmFsdWVTbG90OwogICAgIH0KIAotICAgIHZvaWQgc2V0U3RhdGljRW50cnkoSlNPYmplY3QqIHNs
b3RCYXNlLCBjb25zdCBIYXNoRW50cnkqIHN0YXRpY0VudHJ5LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFs
dWUpCisgICAgdm9pZCBzZXRTdGF0aWNFbnRyeShKU0NlbGwqIHNsb3RCYXNlLCBjb25zdCBIYXNo
RW50cnkqIHN0YXRpY0VudHJ5LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCiAgICAgeworICAgICAg
ICBBU1NFUlQoc2xvdEJhc2UpOworICAgICAgICBBU1NFUlQoc3RhdGljRW50cnkpOwogICAgICAg
ICBBU1NFUlQoZ2V0VmFsdWUpOwogICAgICAgICBtX2dldFZhbHVlID0gZ2V0VmFsdWU7CiAgICAg
ICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKICAgICAgICAgbV9kYXRhLnN0YXRpY0VudHJ5ID0g
c3RhdGljRW50cnk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b20oSlNPYmplY3QqIHNsb3RC
YXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgdm9pZCBzZXRDdXN0b20oSlNDZWxsKiBz
bG90QmFzZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHNs
b3RCYXNlKTsKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKICAgICAgICAgbV9nZXRWYWx1ZSA9
IGdldFZhbHVlOwogICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRDdXN0b21JbmRleChKU09iamVjdCogc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4LCBH
ZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgdm9pZCBzZXRDdXN0b21JbmRleChKU0NlbGwqIHNs
b3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKICAgICAg
ICAgbV9nZXRWYWx1ZSA9IGdldFZhbHVlOwogICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7
CiAgICAgICAgIG1fZGF0YS5pbmRleCA9IGluZGV4OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNl
dEN1c3RvbU51bWVyaWMoSlNPYmplY3QqIHNsb3RCYXNlLCBHZXRWYWx1ZU51bWVyaWNGdW5jIGdl
dFZhbHVlKQorICAgIHZvaWQgc2V0Q3VzdG9tTnVtZXJpYyhKU0NlbGwqIHNsb3RCYXNlLCBHZXRW
YWx1ZU51bWVyaWNGdW5jIGdldFZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHNsb3RCYXNl
KTsKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RC
YXNlOwogICAgICAgICBtX2dldFZhbHVlID0gS0pTX05VTUVSSUNfUFJPUEVSVFlfTkFNRV9TTE9U
X01BUktFUjsKICAgICAgICAgbV9kYXRhLm51bWVyaWNGdW5jID0gZ2V0VmFsdWU7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgc2V0R2V0dGVyU2xvdChKU09iamVjdCogc2xvdEJhc2UsIEpTT2JqZWN0
KiBnZXR0ZXJGdW5jKQorICAgIHZvaWQgc2V0R2V0dGVyU2xvdChKU09iamVjdCogZ2V0dGVyRnVu
YykKICAgICB7CisgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKKyAgICAgICAgQVNTRVJUKGdl
dHRlckZ1bmMpOwogICAgICAgICBtX2dldFZhbHVlID0gZnVuY3Rpb25HZXR0ZXI7Ci0gICAgICAg
IG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKICAgICAgICAgbV9kYXRhLmdldHRlckZ1bmMgPSBnZXR0
ZXJGdW5jOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFVuZGVmaW5lZChKU09iamVjdCAqc2xv
dEJhc2UpCisgICAgdm9pZCBzZXRVbmRlZmluZWQoKQogICAgIHsKLSAgICAgICAgbV9zbG90QmFz
ZSA9IHNsb3RCYXNlOworICAgICAgICBjbGVhckJhc2UoKTsKICAgICAgICAgbV9nZXRWYWx1ZSA9
IHVuZGVmaW5lZEdldHRlcjsKICAgICB9CiAKLSAgICB2b2lkIHNldFVuZ2V0dGFibGUoSlNPYmpl
Y3QqIHNsb3RCYXNlKSAvLyBVc2VkIHRvIHNpZ25hbCB0aGF0IHlvdSBoYXZlIGEgcHJvcGVydHks
IGJ1dCB0cnlpbmcgdG8gZ2V0IGl0IGF0IHRoaXMgdGltZSBpcyBhbiBlcnJvci4KKyAgICBKU09i
amVjdCogc2xvdEJhc2UoKSBjb25zdDsKKworICAgIHZvaWQgc2V0QmFzZShKU0NlbGwqIGJhc2Up
CiAgICAgewotICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7Ci0gICAgICAgIG1fZ2V0VmFs
dWUgPSB1bmdldHRhYmxlR2V0dGVyOworICAgICAgICBBU1NFUlQobV9zbG90QmFzZSk7CisgICAg
ICAgIEFTU0VSVChiYXNlKTsKKyAgICAgICAgbV9zbG90QmFzZSA9IGJhc2U7CiAgICAgfQogCi0g
ICAgSlNPYmplY3QqIHNsb3RCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zbG90QmFzZTsgfQorICAg
IHZvaWQgY2xlYXJCYXNlKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtX3Nsb3RC
YXNlID0gMDsKKyNlbmRpZgorICAgIH0KIAogICAgIGNvbnN0IEhhc2hFbnRyeSogc3RhdGljRW50
cnkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc3RhdGljRW50cnk7IH0KICAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRleDsgfQogCiBwcml2YXRlOgotICAgIHN0
YXRpYyBKU1ZhbHVlKiB1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUq
IHVuZ2V0dGFibGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiB1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBK
U1ZhbHVlKiB1bmdldHRhYmxlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAg
IAogICAgIEdldFZhbHVlRnVuYyBtX2dldFZhbHVlOwogCi0gICAgSlNPYmplY3QqIG1fc2xvdEJh
c2U7CisgICAgSlNDZWxsKiBtX3Nsb3RCYXNlOwogICAgIHVuaW9uIHsKICAgICAgICAgSlNPYmpl
Y3QqIGdldHRlckZ1bmM7CiAgICAgICAgIEpTVmFsdWUqKiB2YWx1ZVNsb3Q7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTcgKzU4
LDE3IEBAIFN0cmluZ0luc3RhbmNlOjpTdHJpbmdJbnN0YW5jZShKU09iamVjdCAKICAgc2V0SW50
ZXJuYWxWYWx1ZShqc1N0cmluZyhzdHJpbmcpKTsKIH0KIAotSlNWYWx1ZSAqU3RyaW5nSW5zdGFu
Y2U6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpCitKU1ZhbHVlICpTdHJpbmdJbnN0YW5jZTo6bGVu
Z3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QgJnNsb3QpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PFN0cmluZ0luc3Rh
bmNlKj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnNpemUoKSk7
CiB9CiAKLUpTVmFsdWUqIFN0cmluZ0luc3RhbmNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlKiBTdHJpbmdJbnN0YW5jZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNTdHJp
bmcoc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2UqPihzbG90LnNsb3RCYXNlKCkpLT5pbnRlcm5h
bFZhbHVlKCktPnZhbHVlKCkuc3Vic3RyKHNsb3QuaW5kZXgoKSwgMSkpOwogfQogCi1zdGF0aWMg
SlNWYWx1ZSogc3RyaW5nSW5zdGFuY2VOdW1lcmljUHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorc3Rh
dGljIEpTVmFsdWUqIHN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0
dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4oc2xvdC5zbG90QmFzZSgp
KS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnN1YnN0cihpbmRleCwgMSkpOwogfQpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHByaXZhdGU6CiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3Rh
dGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIGlu
ZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwogICB9OwogCiAgIC8vIFdlYkNvcmUgdXNlcyB0aGlzIHRvIG1h
a2Ugc3R5bGUuZmlsdGVyIHVuZGV0ZWN0YWJsZQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCShyZXZp
c2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNyw2ICsyMTcsNTkgQEAgQ29uc3RydWN0VHlwZSBKU0NlbGw6OmdldENvbnN0cnVj
dERhdGEoQwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlTm9uZTsKIH0KIAorYm9vbCBKU0NlbGw6
OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50aWZpZXIsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICAvLyBUaGlzIGlzIG5vdCBhIGdl
bmVyYWwgcHVycG9zZSBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAg
Ly8gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEpTVmFsdWU6OmdldC4KKyAgICAvLyBJdCBj
YWxscyBnZXRQcm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRvT2JqZWN0KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpIHsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHNsb3Quc2V0QmFzZShvYmplY3QpOworICAgIGlmICghb2Jq
ZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIHNs
b3Quc2V0VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgLy8gVGhpcyBpcyBub3QgYSBnZW5lcmFsIHB1cnBv
c2UgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlTbG90LgorICAgIC8vIEl0IHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBieSBKU1ZhbHVlOjpnZXQuCisgICAgLy8gSXQgY2FsbHMgZ2V0UHJv
cGVydHlTbG90LCBub3QgZ2V0T3duUHJvcGVydHlTbG90LgorICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSB0b09iamVjdChleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBzbG90LnNldEJhc2Uob2JqZWN0KTsKKyAgICBpZiAoIW9iamVjdC0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBzbG90LnNldFVuZGVm
aW5lZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTQ2VsbDo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSogdmFsdWUpCit7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvT2JqZWN0KGV4ZWMpOworICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybjsKKyAgICBvYmplY3QtPnB1
dChleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNDZWxsOjpwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBK
U09iamVjdCogb2JqZWN0ID0gdG9PYmplY3QoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuOworICAgIG9iamVjdC0+cHV0KGV4ZWMs
IGlkZW50aWZpZXIsIHZhbHVlKTsKK30KKworSlNPYmplY3QqIEpTQ2VsbDo6dG9UaGlzT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gdG9PYmplY3QoZXhlYyk7Cit9
CisKIEpTQ2VsbCoganNTdHJpbmcoY29uc3QgY2hhciogcykKIHsKICAgICByZXR1cm4gbmV3IFN0
cmluZ0ltcChzID8gcyA6ICIiKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCShyZXZpc2lvbiAzNDE1MSkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICsz
MywxMCBAQAogbmFtZXNwYWNlIEtKUyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIElkZW50
aWZpZXI7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTQ2VsbDsKK2NsYXNzIFByb3BlcnR5U2xv
dDsKIAogc3RydWN0IENsYXNzSW5mbzsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTk3LDcgKzk5
LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwogICAgIEpTVmFsdWUqIHRvSlNOdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7IC8vIEZhc3QgcGF0
aCBmb3Igd2hlbiB5b3UgZXhwZWN0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIGltbWVkaWF0ZSBudW1i
ZXIuCiAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotICAgIEpT
T2JqZWN0ICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIEpTT2JqZWN0KiB0
b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogCiAgICAgLy8gSW50ZWdlciBjb252ZXJz
aW9ucy4KICAgICBkb3VibGUgdG9JbnRlZ2VyKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtMTIxLDE3
ICsxMjMsMjIgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQzMl90IHRvSW50MzJTbG93Q2FzZShk
b3VibGUsIGJvb2wmIG9rKTsKICAgICBzdGF0aWMgdWludDMyX3QgdG9VSW50MzJTbG93Q2FzZShk
b3VibGUsIGJvb2wmIG9rKTsKIAorICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0
b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCisgICAgSlNWYWx1ZSogZ2V0KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNWYWx1ZSogZ2V0
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7Cisg
ICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7
CisgICAgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKKwogcHJpdmF0
ZToKKyAgICBib29sIGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
aW50MzJfdCB0b0ludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0OwogICAg
IHVpbnQzMl90IHRvVUludDMyU2xvd0Nhc2UoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0Owog
CiAgICAgLy8gSW1wbGVtZW50YXRpb24gZGV0YWlscy4KICAgICBKU0NlbGwgKmFzQ2VsbCgpOwog
ICAgIGNvbnN0IEpTQ2VsbCAqYXNDZWxsKCkgY29uc3Q7Ci0KLSAgICAvLyBHaXZlIGEgY29tcGls
ZSB0aW1lIGVycm9yIGlmIHdlIHRyeSB0byBjb3B5IG9uZSBvZiB0aGVzZS4KLSAgICBKU1ZhbHVl
KGNvbnN0IEpTVmFsdWUmKTsKLSAgICBKU1ZhbHVlJiBvcGVyYXRvcj0oY29uc3QgSlNWYWx1ZSYp
OwogfTsKIAogY2xhc3MgSlNDZWxsIDogcHVibGljIEpTVmFsdWUgewpAQCAtMTgwLDYgKzE4Nywx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7CiAgICAgdmlydHVh
bCB2b2lkIG1hcmsoKTsKICAgICBib29sIG1hcmtlZCgpIGNvbnN0OworCisgICAgLy8gT2JqZWN0
IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KKyAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2Jq
ZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OworCisgICAgLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiwgYnV0
IGZvciBub24tb2JqZWN0IGNsYXNzZXMgaW1wbGVtZW50cyBnZXRQcm9wZXJ0eVNsb3QuCisgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKIH07CiAKIGNsYXNzIE51bWJlckltcCA6IHB1YmxpYyBKU0NlbGwgewpAQCAtMTk2
LDcgKzIxMiw4IEBAIHB1YmxpYzoKICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKSBjb25zdDsKICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3Q7CiAgIHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3Q7Ci0gIAorICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUq
KSBjb25zdDsKKwogICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpCiAgIHsKICNpZmRl
ZiBKQVZBU0NSSVBUQ09SRV9CVUlMRElOR19BTExfSU5fT05FX0ZJTEUKQEAgLTU4Myw2ICs2MDAs
MTMgQEAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRvVUludDMyKEV4ZWNTdAogICAgIHJldHVy
biB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKIH0KIAoraW5saW5lIEpTT2JqZWN0KiBKU1Zh
bHVlOjp0b1RoaXNPYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIGlmIChVTkxJ
S0VMWShKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykpKQorICAgICAgICByZXR1cm4gSlNJ
bW1lZGlhdGU6OnRvT2JqZWN0KHRoaXMsIGV4ZWMpOworICAgIHJldHVybiBhc0NlbGwoKS0+dG9U
aGlzT2JqZWN0KGV4ZWMpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYgLy8gS0pTX1ZB
TFVFX0gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQWx3YXlzSW5saW5lLmgJKHJldmlzaW9uIDM0MTUxKQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzcsMyArMzcsMTEgQEAKICNkZWZpbmUgTkVWRVJfSU5MSU5FCiAjZW5kaWYKICNlbmRpZgorCisj
aWZuZGVmIFVOTElLRUxZCisjaWYgQ09NUElMRVIoR0NDKQorI2RlZmluZSBVTkxJS0VMWSh4KSBf
X2J1aWx0aW5fZXhwZWN0KCh4KSwgMCkKKyNlbHNlCisjZGVmaW5lIFVOTElLRUxZKHgpICh4KQor
I2VuZGlmCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNj
cmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgt
MDUtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIC0gdXBkYXRl
IGZvciBKYXZhU2NyaXB0Q29yZSBjaGFuZ2VzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkyNjkKKyAgICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIgYnkgZWxp
bWluYXRpbmcgdGhlIHRvT2JqZWN0IGNhbGwgZm9yIG1vc3QgZ2V0L3B1dC9kZWxldGUKKworICAg
ICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVjdEltcDo6dXNlck9i
amVjdEdldHRlcik6IFJlbW92ZWQgb3JpZ2luYWxPYmplY3QgYXJndW1lbnQuCisgICAgICAgICog
VXNlck9iamVjdEltcC5oOiBEaXR0by4KKwogMjAwOC0wNS0xMCAgTWFjaWVqIFN0YWNob3dpYWsg
IDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IEph
dmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRH
bHVlL1VzZXJPYmplY3RJbXAuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRHbHVl
L1VzZXJPYmplY3RJbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9p
ZCBVc2VyT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQogICAgIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwogfQogCi1KU1ZhbHVlICpVc2VyT2Jq
ZWN0SW1wOjp1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWUqIFVzZXJPYmplY3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
VXNlck9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAgKj4oc2xv
dC5zbG90QmFzZSgpKTsKICAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3Qgc2hvdWxkIGhhdmUgZ3Vh
cmRlZCBhZ2FpbnN0IGEgbnVsbCBmSlNVc2VyT2JqZWN0LgpJbmRleDogSmF2YVNjcmlwdEdsdWUv
VXNlck9iamVjdEltcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJ
bXAuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBtYXJrKCk7CiAKICAgICBKU1VzZXJPYmplY3QgKkdldEpTVXNlck9iamVjdCgpIGNvbnN0Owor
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICp1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0
ZSAqLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIHVzZXJPYmpl
Y3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTVXNlck9iamVjdCogZkpTVXNlck9iamVjdDsKIH07
CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDk2IEBACisyMDA4LTA1LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI2OQorICAgICAgICAgIHNw
ZWVkIHVwIFN1blNwaWRlciBieSBlbGltaW5hdGluZyB0aGUgdG9PYmplY3QgY2FsbCBmb3IgbW9z
dCBnZXQvcHV0L2RlbGV0ZQorCisgICAgICAgIEVsaW1pbmF0ZSB0aGUgb3JpZ2luYWxPYmplY3Qg
YXJndW1lbnQgZnJvbSBwcm9wZXJ0eSBnZXR0ZXIgZnVuY3Rpb25zOyBpdCdzIG5vIGxvbmdlcgor
ICAgICAgICBhdmFpbGFibGUgYW5kIHdhcyB1c2VkIG9ubHkgZm9yIEphdmFTY3JpcHQgZnVuY3Rp
b24tYmFzZWQgZ2V0dGVycyBhbmQgc2V0dGVycy4KKworICAgICAgICBVcGRhdGVkIGNhbGxlcnMg
b2YgUHJvcGVydHlTbG90OjpzZXRVbmRlZmluZWQuIEl0IG5vIGxvbmdlciB0YWtlcyBhIGJhc2Ug
YXJndW1lbnQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6
Y2FjaGVkVmFsdWVHZXR0ZXIpOiBSZW1vdmVkIHRoZSBvcmlnaW5hbE9iamVjdAorICAgICAgICBh
cmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOiBDaGFuZ2VkIHRvIGluaXRpYWxpemUgdGhlCisgICAgICAgIFBy
b3BlcnR5U2xvdCB3aXRoIHRoZSBvcmlnaW5hbCBvYmplY3QgLS0gdGhpcyBpcyBhIG5ldyByZXF1
aXJlbWVudC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1BpeGVsQXJyYXk6OmluZGV4R2V0dGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3dCYXNlOjpjaGlsZEZyYW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3dCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Y3VzdG9tR2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFwcGxldEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEVt
YmVkRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxFbWJlZEVsZW1l
bnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZvcm1FbGVtZW50OjpuYW1lR2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1lR2V0dGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hpc3Rvcnk6OmN1c3RvbUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9u
OjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWlt
ZVR5cGVBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01pbWVUeXBlQXJyYXk6
Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxlbmd0aEdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlTGlz
dDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1BsdWdpbjo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50
aW5lZE9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpuYW1lR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL2tqc19iaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNG
dW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RUb1N0cmluZ0Z1bmN0aW9u
R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmpl
Y3RHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNf
cnVudGltZS5tbToKKyAgICAgICAgKE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChS
dW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChSdW50aW1lQXJyYXk6OmluZGV4
R2V0dGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAqIGJy
aWRnZS9ydW50aW1lX21ldGhvZC5jcHA6CisgICAgICAgIChSdW50aW1lTWV0aG9kOjpsZW5ndGhH
ZXR0ZXIpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oOgorICAgICAgICAqIGJy
aWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjpmYWxs
YmFja09iamVjdEdldHRlcik6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRl
cik6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIpOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorICAgICAgICBSZW1vdmVkIG9yaWdpbmFsT2JqZWN0
IGFyZ3VtZW50cyBmcm9tIGdldHRlciBmbmN0aW9ucyBhbmQgYmFzZSBhcmd1bWVudHMgZnJvbQor
ICAgICAgICBjYWxscyB0byBzZXRVbmRlZmluZWQuCisKIDIwMDgtMDUtMjcgIEtldmluIE9sbGl2
aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4LiBB
Y2NpZGVudGx5IGxlZnQgYSBjb3VwbGUgZml4ZXMgb3V0IG9mIHRoZSBwcmV2aW91cyBjb21taXQu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDggKzEy
Myw3IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpjYW5HZXRJdGVtc0YKIAogLy8gRklY
TUU6IFlvdSBjYW4gZ2V0IHRoZXNlIHByb3BlcnRpZXMsIGFuZCBzZXQgdGhlbSAoc2VlIGN1c3Rv
bVB1dCBiZWxvdyksCiAvLyBidXQgeW91IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gZW51bWVyYXRl
IHRoZW0uCi1KU1ZhbHVlKiBKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsCi0gICAgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U0NTU1N0eWxlRGVjbGFyYXRpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NTU1N0eWxlRGVj
bGFyYXRpb24qPihzbG90LnNsb3RCYXNlKCkpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTQ2FudmFzUGl4ZWxBcnJheTo6aW5kZXhHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNDYW52YXNQaXhlbEFycmF5
OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIENhbnZhc1BpeGVsQXJyYXkq
IGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNDYW52YXNQaXhlbEFycmF5Kj4oc2xvdC5zbG90QmFzZSgp
KS0+aW1wbCgpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gc2xvdC5pbmRleCgpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxMywxNyArNTEzLDE3IEBAIEpTVmFsdWUgKkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQcm9w
ZXIKICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvd0Jh
c2U6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZSogSlNET01XaW5kb3dCYXNlOjpjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oc2xv
dC5zbG90QmFzZSgpKS0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPmNoaWxkKEF0b21pY1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpKS0+ZG9tV2luZG93KCkpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRv
d0Jhc2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNET01XaW5kb3dC
YXNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nh
c3Q8SlNET01XaW5kb3dCYXNlKj4oc2xvdC5zbG90QmFzZSgpKS0+aW1wbCgpLT5mcmFtZSgpLT50
cmVlKCktPmNoaWxkKHNsb3QuaW5kZXgoKSktPmRvbVdpbmRvdygpKTsKIH0KIAotSlNWYWx1ZSog
SlNET01XaW5kb3dCYXNlOjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNET01XaW5kb3dCYXNlOjpuYW1lZEl0ZW1H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIERv
Y3VtZW50KiBkb2MgPSB0aGlzT2JqLT5pbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCk7CkBAIC01
NTksNyArNTU5LDcgQEAgYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OmdldE93blByb3BlcnR5U2xvdAog
ICAgICAgICAgICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgICAgICAgICAg
c2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljRnVuY3Rpb25HZXR0ZXIpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMp
OworICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVH
ZXR0ZXI8SlNET01XaW5kb3dCYXNlPik7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTcxLDcg
KzU3MSw3IEBAIGJvb2wgSlNET01XaW5kb3dCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICBp
ZiAocHJvdG8tPmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4ocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewog
ICAgICAgICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQotICAgICAgICAgICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTU4
OCw3ICs1ODgsNyBAQCBib29sIEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90CiAg
ICAgfQogCiAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7Ci0gICAgICAgIHNsb3Qu
c2V0VW5kZWZpbmVkKHRoaXMpOworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOSArMTQxLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBLSlM6OkpTVmFsdWUqIGdldExpc3RlbmVyKEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0OwogICAgICAgICB2b2lkIHNl
dExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEtKUzo6SlNWYWx1ZSogZnVuY3Rpb24pOwogCi0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUq
IGNoaWxkRnJhbWVHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3Qg
S0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3Rh
dGljIEtKUzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2Jq
ZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogbmFtZWRJdGVtR2V0dGVyKEtKUzo6RXhlY1N0
YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6
UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGNoaWxkRnJhbWVH
ZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6
OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBpbmRleEdldHRl
cihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJv
cGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIG5hbWVkSXRlbUdldHRl
cihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJv
cGVydHlTbG90Jik7CiAKICAgICAgICAgdm9pZCBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMo
KTsKICAgICAgICAgdm9pZCBjbGVhckFsbFRpbWVvdXRzKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAs
NyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNET01XaW5kb3c6OmN1c3RvbUdlCiAKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgbWVzc2FnZSBoZXJlIHRoYXQgZXhwbGFpbnMgd2h5
IHRoZSBwcm9wZXJ0eSBhY2Nlc3MvZnVuY3Rpb24gY2FsbCB3YXMKICAgICAgICAgLy8gbm90IGFs
bG93ZWQuIAotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICAgICAgc2xvdC5z
ZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBib29sIEpTSFRNTEFw
cGxldEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yCiAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA9PSAi
X19hcHBsZV9ydW50aW1lX29iamVjdCI7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTEFwcGxldEVsZW1l
bnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZSogSlNIVE1MQXBwbGV0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIG9yaWdpbmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVy
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgYm9vbCBKU0hU
TUxDb2xsZWN0aW9uOjpjYW5HZXRJdGVtc0Zvck5hbQogICAgIHJldHVybiAhZ2V0TmFtZWRJdGVt
cyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpLT5pc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRNTENvbGxlY3Rpb246Om5hbWVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0hUTUxDb2xsZWN0aW9uKiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNIVE1MQ29sbGVjdGlvbio+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0
dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpc09iai0+aW1wbCgpLCBwcm9wZXJ0eU5hbWUpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBKU0hUTUxEb2N1bWVu
dDo6Y2FuR2V0SXRlbXNGb3JOYW1lKAogICAgIHJldHVybiBhdG9taWNQcm9wZXJ0eU5hbWUgJiYg
KGRvY3VtZW50LT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+
aGFzRXh0cmFOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSk7CiB9CiAKLUpTVmFsdWUqIEpT
SFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRG9jdW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxK
U0hUTUxEb2N1bWVudCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXNPYmotPmltcGwoKSk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBib29sIEpTSFRN
TEVtYmVkRWxlbWVudDo6Y2FuR2V0SXRlbXNGb3JOCiAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA9
PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCI7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTEVtYmVkRWxl
bWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlKiBKU0hUTUxFbWJlZEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKLSAgICByZXR1cm4gcnVudGltZU9iamVjdEdldHRlcihleGVjLCBvcmlnaW5hbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gcnVudGltZU9iamVjdEdldHRl
cihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1F
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBib29sIEpT
SFRNTEZvcm1FbGVtZW50OjpjYW5HZXRJdGVtc0Zvck5hCiAgICAgcmV0dXJuIG5hbWVkSXRlbXMu
c2l6ZSgpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU0hUTUxGb3JtRWxlbWVudDo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQq
PihzbG90LnNsb3RCYXNlKCkpLT5pbXBsKCkpOwogICAgIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgYm9vbCBKU0hUTUxGcmFtZVNl
dEVsZW1lbnQ6OmNhbkdldEl0ZW1zRgogICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+aGFzVGFn
TmFtZShmcmFtZVRhZyk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTEZyYW1lU2V0RWxlbWVudDo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVu
dCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KHRoaXNPYmotPmltcGwoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0
MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBib29sIEpTSFRNTE9iamVjdEVsZW1l
bnQ6OmNhbkdldEl0ZW1zRm9yCiAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9y
dW50aW1lX29iamVjdCI7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZSogSlNIVE1MT2JqZWN0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw3ICs2Nyw3IEBAIGJvb2wgSlNIaXN0b3J5OjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QK
ICAgICB9CiAKICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKGltcGwoKS0+ZnJhbWUoKSwg
bWVzc2FnZSk7Ci0gICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAgc2xvdC5zZXRVbmRl
ZmluZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgYm9vbCBKU0xvY2F0aW9uOjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsbwogewogICAgIEZyYW1l
KiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIHNs
b3Quc2V0VW5kZWZpbmVkKHRoaXMpOworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBKU0xvY2F0
aW9uOjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsbwogICAgIC8vIHN1Y2ggY2FzZXMgd2hlbiBub3Jt
YWxseSB0aGUgc3RyaW5nIGZvcm0gb2YgTG9jYXRpb24gd291bGQgYmUgdGhlIFVSTC4KIAogICAg
IHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoZnJhbWUsIG1lc3NhZ2UpOwotICAgIHNsb3Quc2V0
VW5kZWZpbmVkKHRoaXMpOworICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1
c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVU
eXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGJvb2wg
SlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUKICAgICByZXR1cm4gbWltZVR5cGVB
cnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpT
TWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmln
aW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU01pbWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxKU01pbWVUeXBlQXJyYXkqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0b0pTKGV4
ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAz
NDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNOYW1lZE5vZGVNYXA6OmNhbkdl
dEl0ZW1zRm9yTmFtZSgKICAgICByZXR1cm4gaW1wbC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZSk7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTTmFtZWROb2RlTWFw
OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOYW1lZE5vZGVNYXAqIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVkTm9kZU1hcCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29s
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05h
bWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDEzIEBA
IEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OkpTTmFtZWROb2Rlc0NvbGwKIHsKIH0KIAotSlNWYWx1
ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rp
b246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTTmFtZWROb2Rlc0Nv
bGxlY3Rpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVkTm9kZXNDb2xsZWN0aW9uKj4o
c2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+bV9ub2Rlcy5z
aXplKCkpOwogfQogCi1KU1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBK
U05hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gdG9KUyhleGVj
LCB0aGlzT2JqLT5tX25vZGVzW3Nsb3QuaW5kZXgoKV0uZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDM0MTUxKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0
aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
c3RhdGljIEtKUzo6SlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpK
U09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0
YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6
UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGxlbmd0aEdldHRl
cihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJv
cGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEtK
Uzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0
eVNsb3QmKTsKIAogICAgICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9ub2RlczsKICAgICB9
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgYm9vbCBKU05vZGVMaXN0OjpjYW5HZXRJdGVt
c0Zvck5hbWUoS0pTOgogICAgIHJldHVybiBpbXBsLT5pdGVtV2l0aE5hbWUocHJvcGVydHlOYW1l
KTsKIH0KIAotS0pTOjpKU1ZhbHVlKiBKU05vZGVMaXN0OjpuYW1lR2V0dGVyKEtKUzo6RXhlY1N0
YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgS0pTOjpJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90JiBzbG90KQorS0pT
OjpKU1ZhbHVlKiBKU05vZGVMaXN0OjpuYW1lR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBLSlM6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgSlNOb2RlTGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTTm9k
ZUxpc3QqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmot
PmltcGwoKS0+aXRlbVdpdGhOYW1lKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDcgQEAgYm9vbCBKU1BsdWdpbkFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUo
RQogICAgIHJldHVybiBwbHVnaW5BcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFt
ZSk7CiB9CiAKLUpTVmFsdWUqIEpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNQbHVnaW5BcnJheTo6
bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTUGx1Z2luQXJyYXkqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbkFycmF5Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0ZXIocHJvcGVydHlOYW1l
KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcAkocmV2aXNpb24g
MzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBib29sIEpTUGx1Z2luOjpjYW5HZXRJdGVtc0Zvck5h
bWUoRXhlY1N0CiAgICAgcmV0dXJuIHBsdWdpbi0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5
TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTUGx1Z2luOjpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxKU1BsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
dGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHJl
dmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIqIEpTUXVhcmFudGluZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlcio+KG9iamVjdCk7CiB9CiAKLUpTVmFsdWUqIEpTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyOjpjYWNoZWRWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
KiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U1ZhbHVlKiB2ID0gc2xvdC5zbG90QmFzZSgpOwogICAgIEFTU0VSVCh2KTsKQEAgLTEwMywxNCAr
MTAzLDE0IEBAIHZvaWQgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Om1hcmsoKQogYm9vbCBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIGlmICghYWxsb3dzR2V0UHJvcGVydHkoKSkgewotICAgICAgICBzbG90LnNldFVuZGVm
aW5lZCh0aGlzKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgUHJvcGVydHlTbG90IHVud3JhcHBlZFNsb3Q7CisgICAgUHJv
cGVydHlTbG90IHVud3JhcHBlZFNsb3QobV91bndyYXBwZWRPYmplY3QpOwogICAgIGJvb2wgcmVz
dWx0ID0gbV91bndyYXBwZWRPYmplY3QtPmdldE93blByb3BlcnR5U2xvdCh1bndyYXBwZWRFeGVj
U3RhdGUoKSwgaWRlbnRpZmllciwgdW53cmFwcGVkU2xvdCk7CiAgICAgaWYgKHJlc3VsdCkgewot
ICAgICAgICBKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSA9IHVud3JhcHBlZFNsb3QuZ2V0VmFsdWUo
dW53cmFwcGVkRXhlY1N0YXRlKCksIG1fdW53cmFwcGVkT2JqZWN0LCBpZGVudGlmaWVyKTsKKyAg
ICAgICAgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVu
d3JhcHBlZEV4ZWNTdGF0ZSgpLCBpZGVudGlmaWVyKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b20o
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPih3cmFwT3V0Z29pbmdWYWx1ZSh1bndyYXBwZWRFeGVjU3Rh
dGUoKSwgdW53cmFwcGVkVmFsdWUpKSwgY2FjaGVkVmFsdWVHZXR0ZXIpOwogICAgIH0KIApAQCAt
MTIyLDE0ICsxMjIsMTQgQEAgYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3du
UAogYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIGlmICghYWxsb3dzR2V0UHJvcGVydHkoKSkgewotICAgICAgICBzbG90LnNldFVuZGVm
aW5lZCh0aGlzKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgUHJvcGVydHlTbG90IHVud3JhcHBlZFNsb3Q7CisgICAgUHJv
cGVydHlTbG90IHVud3JhcHBlZFNsb3QobV91bndyYXBwZWRPYmplY3QpOwogICAgIGJvb2wgcmVz
dWx0ID0gbV91bndyYXBwZWRPYmplY3QtPmdldE93blByb3BlcnR5U2xvdCh1bndyYXBwZWRFeGVj
U3RhdGUoKSwgaWRlbnRpZmllciwgdW53cmFwcGVkU2xvdCk7CiAgICAgaWYgKHJlc3VsdCkgewot
ICAgICAgICBKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSA9IHVud3JhcHBlZFNsb3QuZ2V0VmFsdWUo
dW53cmFwcGVkRXhlY1N0YXRlKCksIG1fdW53cmFwcGVkT2JqZWN0LCBpZGVudGlmaWVyKTsKKyAg
ICAgICAgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVu
d3JhcHBlZEV4ZWNTdGF0ZSgpLCBpZGVudGlmaWVyKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b20o
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPih3cmFwT3V0Z29pbmdWYWx1ZSh1bndyYXBwZWRFeGVjU3Rh
dGUoKSwgdW53cmFwcGVkVmFsdWUpKSwgY2FjaGVkVmFsdWVHZXR0ZXIpOwogICAgIH0KIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIu
aAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogd3JhcE91dGdvaW5nVmFs
dWUoS0pTOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEtKUzo6SlNWYWx1ZSogdW53cmFwcGVk
VmFsdWUpIGNvbnN0ID0gMDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpT
VmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCos
IGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKIAog
ICAgICAgICB2b2lkIHRyYW5zZmVyRXhjZXB0aW9uVG9FeGVjU3RhdGUoS0pTOjpFeGVjU3RhdGUq
KSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAko
cmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgYm9vbCBKU1N0b3JhZ2U6OmNhbkdl
dEl0ZW1zRm9yTmFtZShFeGVjUwogICAgIHJldHVybiBpbXBsLT5jb250YWlucyhwcm9wZXJ0eU5h
bWUpOwogfQogCi1KU1ZhbHVlKiBKU1N0b3JhZ2U6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNTdG9yYWdlOjpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8SlNTdG9yYWdlKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4ganNTdHJpbmdP
ck51bGwodGhpc09iai0+aW1wbCgpLT5nZXRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi0KIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMyLDE0ICszMSwx
NiBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5o
IgogCit1c2luZyBuYW1lc3BhY2UgS0pTOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
SlNTdHlsZVNoZWV0TGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEtKUzo6RXhlY1N0YXRlKiwgU3R5
bGVTaGVldExpc3QqIHN0eWxlU2hlZXRMaXN0LCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkKK2Jvb2wgSlNTdHlsZVNoZWV0TGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNT
dGF0ZSosIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBzdHlsZVNoZWV0TGlzdC0+Z2V0TmFtZWRJdGVt
KHByb3BlcnR5TmFtZSk7CiB9CiAKLUtKUzo6SlNWYWx1ZSogSlNTdHlsZVNoZWV0TGlzdDo6bmFt
ZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWUqIEpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBKU1N0eWxlU2hlZXRMaXN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNTdHlsZVNo
ZWV0TGlzdCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTFN0eWxlRWxlbWVudCogZWxlbWVu
dCA9IHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM0LDEzICsz
MzQsMTMgQEAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcgogICAgICAg
ICB3aW5kb3ctPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi1KU1ZhbHVlKiBub25D
YWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHNsb3Quc3RhdGljRW50cnkoKTsKICAg
ICByZXR1cm4gbmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGVudHJ5LT5sZW5ndGgsIHByb3Bl
cnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uVmFsdWUpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RUb1N0
cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlKiBvYmpl
Y3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBuZXcg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNU
b1N0cmluZyk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCShyZXZpc2lvbiAz
NDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDggKzE0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBib29sIGFsbG93
c0FjY2Vzc0Zyb21GcmFtZShLSlM6OkV4ZWNTdGF0ZSosIEZyYW1lKik7CiAgICAgYm9vbCBhbGxv
d3NBY2Nlc3NGcm9tRnJhbWUoS0pTOjpFeGVjU3RhdGUqLCBGcmFtZSosIFN0cmluZyYgbWVzc2Fn
ZSk7CiAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKLSAgICBLSlM6OkpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBLSlM6
OkpTVmFsdWUqIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBL
SlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAgS0pTOjpKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGlj
RnVuY3Rpb25HZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBLSlM6OkpTVmFsdWUq
IG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19o
dG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcAko
cmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsMTQgKzU4LDE0IEBAIHN0YXRpYyBKU09iamVjdCogZ2V0UnVudGlt
ZU9iamVjdChFeGVjU3QKICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogcnVudGltZU9iamVj
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlKiBydW50aW1lT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1M
RWxlbWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90LnNsb3RC
YXNlKCkpOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPih0aGlzT2JqLT5pbXBsKCkpOwogICAgIHJldHVybiBnZXRSdW50aW1lT2JqZWN0KGV4ZWMs
IGVsZW1lbnQpOwogfQogCi1KU1ZhbHVlKiBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogcnVudGlt
ZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRWxl
bWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90LnNsb3RCYXNl
KCkpOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pih0aGlzT2JqLT5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAkocmV2aXNpb24g
MzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFJ1bnRpbWUgb2Jq
ZWN0IHN1cHBvcnQgY29kZSBmb3IgSlNIVE1MQXBwbGV0RWxlbWVudCwgSlNIVE1MRW1iZWRFbGVt
ZW50IGFuZCBKU0hUTUxPYmplY3RFbGVtZW50LgogICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRv
IGEgbW9yZSBhcHByb3ByaWF0ZSBwbGFjZS4KIAotICAgIEtKUzo6SlNWYWx1ZSogcnVudGltZU9i
amVjdEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgIEtKUzo6SlNWYWx1ZSog
cnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVj
dCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7Cisg
ICAgS0pTOjpKU1ZhbHVlKiBydW50aW1lT2JqZWN0R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29u
c3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBLSlM6
OkpTVmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNv
bnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAgICAgYm9v
bCBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmLCBKU0hUTUxFbGVtZW50
KiwgSFRNTEVsZW1lbnQqKTsKICAgICBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoS0pTOjpF
eGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqLCBIVE1MRWxl
bWVudCopOwogICAgIGJvb2wgcnVudGltZU9iamVjdEltcGxlbWVudHNDYWxsKEhUTUxFbGVtZW50
Kik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNTczLDcgKzU3Myw3IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogCiAgICAgIyBJbmRleCBnZXR0ZXIKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSGFzSW5kZXhHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJIYXNDdXN0b21JbmRleEdldHRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQ
cm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBLSlM6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pT
OjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgIH0KIAog
ICAgICMgSW5kZXggc2V0dGVyCkBAIC01ODQsNyArNTg0LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIi
fSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdl
dHRlciJ9KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcml2YXRlOlxuIik7CiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgY2FuR2V0SXRlbXNG
b3JOYW1lKEtKUzo6RXhlY1N0YXRlKiwgJGltcGxDbGFzc05hbWUqLCBjb25zdCBLSlM6OklkZW50
aWZpZXImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBL
SlM6OkpTVmFsdWUqIG5hbWVHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0Kiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUqIG5h
bWVHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBL
SlM6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgfQogCiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIn07XG5cbiIpOwpAQCAtMTMwNyw3ICsxMzA3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SGFzSW5kZXhHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuSlNWYWx1
ZSogJHtjbGFzc05hbWV9OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
cmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbkpTVmFs
dWUqICR7Y2xhc3NOYW1lfTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4o
c2xvdC5zbG90QmFzZSgpKTtcbiIpOwogICAgICAgICBpZiAoSW5kZXhHZXR0ZXJSZXR1cm5zU3Ry
aW5ncygkaW1wbENsYXNzTmFtZSkpIHsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShy
ZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXko
RXhlY1N0YXRlICpleAogewogfQogCi1KU1ZhbHVlICpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IFJ1bnRpbWVBcnJheSAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSAqPihzbG90
LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBqc051bWJlcih0aGlzT2JqLT5nZXRMZW5ndGgoKSk7
CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVBcnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlICpSdW50aW1lQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1l
QXJyYXkgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkgKj4oc2xvdC5zbG90QmFz
ZSgpKTsKICAgICByZXR1cm4gdGhpc09iai0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4
ZWMsIHNsb3QuaW5kZXgoKSk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShyZXZpc2lvbiAz
NDE1MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtNTQsOCArNTQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdldHRlcihFeGVjU3Rh
dGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3Qg
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBK
U1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBPd25Q
dHI8QmluZGluZ3M6OkFycmF5PiBfYXJyYXk7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhv
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgUnVudGltZU1ldGhvZDo6UnVu
dGltZU1ldGhvZChFeGVjU3RhdGUgKgogewogfQogCi1KU1ZhbHVlICpSdW50aW1lTWV0aG9kOjps
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgUnVudGltZU1ldGhvZCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVN
ZXRob2QgKj4oc2xvdC5zbG90QmFzZSgpKTsKIApJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5o
CShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSlNWYWx1
ZSAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncyk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdl
dHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgT3duUHRy
PEJpbmRpbmdzOjpNZXRob2RMaXN0PiBfbWV0aG9kTGlzdDsKIH07CkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9vYmplY3QuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFJ1bnRp
bWVPYmplY3RJbXA6OmludmFsaWRhdGUoKQogICAgIGluc3RhbmNlID0gMDsKIH0KIAotSlNWYWx1
ZSAqUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplY3RH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0SW1wICp0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAg
IFJlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7
CkBAIC03MSw3ICs3MSw3IEBAIEpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNrT2Jq
ZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpm
aWVsZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBSdW50aW1l
T2JqZWN0SW1wOjpmaWVsZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogeyAgICAKICAgICBSdW50
aW1lT2JqZWN0SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCAqPihz
bG90LnNsb3RCYXNlKCkpOwogICAgIFJlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNl
ID0gdGhpc09iai0+aW5zdGFuY2U7CkBAIC05MCw3ICs5MCw3IEBAIEpTVmFsdWUgKlJ1bnRpbWVP
YmplY3RJbXA6OmZpZWxkR2V0dGVyKEUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVl
ICpSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgUnVudGltZU9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVPYmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBSZWZQdHI8QmluZGluZ3M6
Okluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDkgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBSdW50aW1lT2JqZWN0SW1wKCk7IC8vIHByZXZlbnQgZGVmYXVsdCBjb25zdHJ1
Y3Rpb24KICAgICAKLSAgICBzdGF0aWMgSlNWYWx1ZSAqZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhl
Y1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqZmllbGRHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2Jq
ZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0
aWMgSlNWYWx1ZSAqbWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIGZh
bGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogZmllbGRHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBK
U1ZhbHVlKiBtZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwogCiAgICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFu
Y2U7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDM0
MTUxKQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIwNyw3ICsyMDcsNyBAQCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6Ok9iamNGYWxsYmFj
a09iamVjCiBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
Ly8ga2VlcCB0aGUgcHJvdG90eXBlIGZyb20gZ2V0dGluZyBjYWxsZWQgaW5zdGVhZCBvZiBqdXN0
IHJldHVybmluZyBmYWxzZQotICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOworICAgIHNsb3Qu
c2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>
<flag name="review"
          id="9340"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21367</attachid>
            <date>2008-05-27 12:28:12 -0700</date>
            <delta_ts>2008-05-27 12:28:12 -0700</delta_ts>
            <desc>earlier try -- this made things slower because I went too far in some way</desc>
            <filename>BadSpeedupsPatch.txt</filename>
            <type>text/plain</type>
            <size>486346</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE3IEBACisyMDA4LTA1LTI3ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTI2OQorICAgICAgICAgIHNwZWVkIHVwIFN1blNwaWRlciBieSBlbGltaW5hdGluZyB0aGUg
dG9PYmplY3QgY2FsbCBmb3IgbW9zdCBnZXQvcHV0L2RlbGV0ZQorCisgICAgICAgIFRoZSBnZXRP
d25Qcm9wZXJ0eVNsb3QgdmlydHVhbCBmdW5jdGlvbiBub3cgdGFrZXMgY2FyZSBvZiB0aGUgdG9P
YmplY3QgY2FsbAorICAgICAgICBmb3IgZ2V0LiBTaW1pbGFybHksIHRoZSBwdXQgYW5kIGRlbGV0
ZVByb3BlcnR5IGZ1bmN0aW9ucyBkbyB0aGUgc2FtZSBmb3IgdGhvc2UKKyAgICAgICAgb3BlcmF0
aW9ucy4gVG8gZG8gdGhpcywgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIHdlcmUgbW92ZWQgZnJvbSB0
aGUgSlNPYmplY3QgY2xhc3MKKyAgICAgICAgdG8gdGhlIEpTQ2VsbCBjbGFzcy4gQWxzbywgc2lu
Y2UgdGhlIGNhbGxlciBubyBsb25nZXIga25vd3MgdGhlIGlkZW50aXR5IG9mIHRoZQorICAgICAg
ICAib3JpZ2luYWwgb2JqZWN0Iiwgd2hpY2ggaXMgdXNlZCBieSBKYXZhU2NyaXB0LWZ1bmN0aW9u
IGJhc2VkIGdldHRlcnMsIGNoYW5nZWQKKyAgICAgICAgdGhlIFByb3BlcnR5U2xvdCBjbGFzcyBz
byB0aGUgb3JpZ2luYWwgb2JqZWN0IGlzIGFscmVhZHkgc3RvcmVkIGluIHRoZSBzbG90CisgICAg
ICAgIHdoZW4gZ2V0T3duUHJvcGVydHlTbG90IGlzIGNhbGxlZCwgaWYgdGhlIGNhbGxlciBpbnRl
bmRzIHRvIGNhbGwgZ2V0VmFsdWUuCisKKyAgICAgICAgVGhpcyBhZmZlY3RlZCB0aGUgb2xkIGlu
dGVycHJldGVyIGNvZGUgZW5vdWdoIHRoYXQgdGhlIGVhc2llc3QgdGhpbmcgZm9yIG1lCisgICAg
ICAgIHdhcyB0byBqdXN0IGRlbGV0ZSBpdC4gV2hpbGUgSSBhbSBub3QgY2VydGFpbiB0aGUgbXlz
dGVyaW91cyBzbG93ZG93biBpcyBub3QKKyAgICAgICAgc3RpbGwgb2NjdXJyaW5nLCB0aGUgbmV0
IGNoYW5nZSBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgc3BlZWR1cC4KKworICAgICAgICBN
YWtlcyBzdGFuZGFsb25lIFN1blNwaWRlciAxLjA/P3ggZmFzdGVyLiBEQVJJTjogRklMTCBJTiBO
RVcgTlVNQkVSLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBVcGRhdGVkLgorCisg
ICAgICAgICogVk0vQ29kZUdlbmVyYXRvci5oOiBNb3ZlZCB0aGUgQ29kZVR5cGUgZW51bSBoZXJl
IGZyb20gRXhlY1N0YXRlLmguCisKKyAgICAgICAgKiBWTS9FeGNlcHRpb25IZWxwZXJzLmNwcDoK
KyAgICAgICAgKEtKUzo6Y3JlYXRlRXJyb3IpOiBNYXJrZWQgdGhlc2Ugc3RhdGljIHNvIHRoZXkg
aGF2ZSBpbnRlcm5hbCBsaW5rYWdlLgorICAgICAgICBSZW1vdmVkIHRoZSBvbmUgdGhhdCB0YWtl
cyBhIG5vZGUgYXJndW1lbnQuCisgICAgICAgIChLSlM6OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVy
cm9yKTogUmVtb3ZlZCB0aGUgbmV2ZXItdXNlZCBub2RlIGFyZ3VtZW50LgorICAgICAgICAoS0pT
OjpjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcik6IERpdHRvLgorICAgICAgICAqIFZNL0V4Y2VwdGlv
bkhlbHBlcnMuaDogUmVtb3ZlZCB0aGUgbm8tbG9uZ2VyLXVzZWQgbm9kZSBhcmd1bWVudHMuCisK
KyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDogTW92ZWQgdGhlIFVOTElLRUxZIG1hY3JvIGludG8g
QWx3YXlzSW5saW5lLmguCisgICAgICAgIChLSlM6OnJlc29sdmUpOiBTZXQgdXAgdGhlIG9yaWdp
bmFsT2JqZWN0IGluIHRoZSBQcm9wZXJ0eVNsb3QgYmVmb3JlCisgICAgICAgIGNhbGxpbmcgZ2V0
UHJvcGVydHlTbG90LiBBbHNvIHJlbW92ZWQgdGhlIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50IGZy
b20KKyAgICAgICAgZ2V0VmFsdWUuCisgICAgICAgIChLSlM6OnJlc29sdmVfc2tpcCk6IERpdHRv
LgorICAgICAgICAoS0pTOjpyZXNvbHZlQmFzZUFuZFByb3BlcnR5KTogRGl0dG8uCisgICAgICAg
IChLSlM6OnJlc29sdmVCYXNlQW5kRnVuYyk6IERpdHRvLgorICAgICAgICAoS0pTOjpNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZSk6IFJlbW92ZWQgdGhlIHRvT2JqZWN0IGNhbGxzIGZyb20gdGhlIGdl
dCwKKyAgICAgICAgcHV0LCBhbmQgZGVsZXRlUHJvcGVydHkgZnVuY3Rpb25zIHdoZXJlIHBvc3Np
YmxlLCBpbnN0ZWFkIGNhbGxpbmcgZGlyZWN0bHkKKyAgICAgICAgb24gSlNWYWx1ZSBhbmQgbGV0
dGluZyB0aGUgSlNWYWx1ZSBhbmQgSlNDZWxsIGNhbGxzIGhhbmRsZSB0b09iamVjdC4KKyAgICAg
ICAgU2FtZSBmb3IgdG9UaGlzT2JqZWN0LiBBbHNvIHVwZGF0ZWQgY2FsbHMgdG8gY3JlYXRlIGVy
cm9yIG9iamVjdHMgdG8gb21pdAorICAgICAgICB0aGUgYWx3YXlzLXplcm8gbm9kZSBwb2ludGVy
LgorCisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5oOiBSZW1vdmVkIE9sZEludGVycHJldGVyRXhl
Y1N0YXRlIGFuZCBsb3RzIG9mIGluY2x1ZGVzLgorICAgICAgICBNb3ZlZCBDb2RlVHlwZSBlbnVt
IHRvIENvZGVHZW5lcmF0b3IuaC4KKworICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOiBVcGRhdGVk
IGluY2x1ZGVzLgorCisgICAgICAgICoga2pzL0xvY2FsU3RvcmFnZUVudHJ5Lmg6IFJlbW92ZWQg
Y29udGVudHMuIExhdGVyIHdlIGNhbiByZW1vdmUgdGhlIGZpbGUgdG9vLgorCisgICAgICAgICog
a2pzL2FycmF5X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEtKUzo6QXJyYXlJbnN0YW5jZTo6bGVu
Z3RoR2V0dGVyKTogUmVtb3ZlZCBvcmlnaW5hbE9iamVjdCBhcmd1bWV0LgorICAgICAgICAoS0pT
OjpBcnJheUluc3RhbmNlOjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOiBEb24ndCBwYXNzIGEg
YmFzZSB2YWx1ZSB0bworICAgICAgICBzZXRWYWx1ZVNsb3QuIEFsc28gdXNlIFVOTElLRUxZIGFy
b3VuZCB0aGUgImdldHRpbmcgZWxlbWVudHMgcGFzdCB0aGUgZW5kIG9mCisgICAgICAgIHRoZSBh
cnJheSIgY29kZSBwYXRoOyBsZXNzIGNvbW1vbiB0aGFuIHN1Y2Nlc3NmdWxseSBnZXR0aW5nIGFu
IGVsZW1lbnQuCisKKyAgICAgICAgKiBranMvYXJyYXlfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtK
Uzo6Z2V0UHJvcGVydHkpOiBJbml0aWFsaXplIHRoZSBQcm9wZXJ0eVNsb3Qgd2l0aCB0aGUgb3Jp
Z2luYWwgb2JqZWN0LgorICAgICAgICBEb24ndCBwYXNzIHRoZSBvcmlnaW5hbCBvYmplY3QgdG8g
dGhlIGdldCBmdW5jdGlvbi4KKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIpOiBE
aXR0by4KKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNNYXApOiBEaXR0by4KKyAgICAgICAg
KEtKUzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6IERpdHRvLgorICAgICAgICAoS0pTOjphcnJheVBy
b3RvRnVuY0ZvckVhY2gpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6YXJyYXlQcm90b0Z1bmNTb21l
KTogRGl0dG8uCisKKyAgICAgICAgKiBranMvZnVuY3Rpb25fb2JqZWN0LmNwcDoKKyAgICAgICAg
KEtKUzo6RnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdCk6IFJlbW92ZWQgYW4gb2Jzb2xldGUg
Y29tbWVudC4KKworICAgICAgICAqIGtqcy9ncmFtbWFyLnk6IEVsaW1pbmF0ZWQgc3VwcG9ydCBm
b3Igc29tZSBvZiB0aGUgbm9kZSB0eXBlcyB0aGF0IHdlcmUKKyAgICAgICAgdXNlZCB0byBvcHRp
bWl6ZSBleGVjdXRpbmcgZnJvbSB0aGUgc3ludGF4IHRyZWUuCisKKyAgICAgICAgKiBranMvaW50
ZXJuYWwuY3BwOgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6OnRvVGhpc09iamVjdCk6IEFkZGVk
LiBTYW1lIGFzIHRvT2JqZWN0LgorICAgICAgICAoS0pTOjpOdW1iZXJJbXA6OnRvVGhpc09iamVj
dCk6IERpdHRvLgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OmdldE93blByb3BlcnR5
U2xvdCk6IEFkZGVkLiBOb3QgcmVhY2hlZC4KKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1w
OjpwdXQpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjp0b1RoaXNPYmpl
Y3QpOiBEaXR0by4KKworICAgICAgICAqIGtqcy9pbnRlcm5hbC5oOiBBZGRlZCB0b1RoaXNPYmpl
Y3QgdG8gTnVtYmVySW1wIGZvciBzcGVlZC4KKworICAgICAgICAqIGtqcy9pbnRlcnByZXRlci5o
OiBJbmNsdWRlICJjb21wbGV0aW9uLmgiIGhlcmUgbm93IHRoYXQgaXQncyBub3QgaW5jbHVkZWQK
KyAgICAgICAgYnkgRXhlY1N0YXRlLmguIFRoZSByZW1haW5pbmcgcm9sZSBmb3IgdGhlIENvbXBs
ZXRpb24gY2xhc3MgYW5kIHRoZSBDb21wbFR5cGUKKyAgICAgICAgZW51bSBpcyB0aGUgaW50ZXJu
YWwgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhpcyBmaWxlIC0tIGl0J3Mgbm90IHVzZWQgYXMgcGFy
dAorICAgICAgICBvZiBleGVjdXRpb24gYW55IG1vcmUuCisKKyAgICAgICAgKiBranMvbGV4ZXIu
Y3BwOgorICAgICAgICAoS0pTOjpMZXhlcjo6c2hpZnQpOiBDaGFuZ2VkIHNoaWZ0IHRvIGp1c3Qg
ZG8gYSBzaW5nbGUgY2hhcmFjdGVyLCB0byB1bnJvbGwKKyAgICAgICAgdGhlIGxvb3AgYW5kIGVz
cGVjaWFsbHkgdG8gbWFrZSB0aGUgb25lIGNoYXJhY3RlciBjYXNlIGZhc3Rlci4KKyAgICAgICAg
KEtKUzo6TGV4ZXI6OnNldENvZGUpOiBDYWxsIHNoaWZ0IG11bHRpcGxlIHRpbWVzIGluc3RlYWQg
b2YgcGFzc2luZyBhIG51bWJlci4KKyAgICAgICAgKEtKUzo6TGV4ZXI6OmxleCk6IERpdHRvLgor
ICAgICAgICAoS0pTOjpMZXhlcjo6bWF0Y2hQdW5jdHVhdG9yKTogRGl0dG8uIEFsc28gcmVtb3Zl
ZCB1bm5lZWRlZCBlbHNlcyBhZnRlciByZXR1cm5zLgorICAgICAgICAoS0pTOjpMZXhlcjo6c2Nh
blJlZ0V4cCk6IERpdHRvLgorICAgICAgICAqIGtqcy9sZXhlci5oOiBSZW1vdmVkIHRoZSBjb3Vu
dCBhcmd1bWVudCBmcm9tIHNoaWZ0LgorCisgICAgICAgICoga2pzL21hdGhfb2JqZWN0LmNwcDoK
KyAgICAgICAgKEtKUzo6bWF0aFByb3RvRnVuY1Bvdyk6IENhbGwganNOYU4gaW5zdGVhZCBvZiBq
c051bWJlcihOYU4pLgorCisgICAgICAgICoga2pzL25vZGVzLmNwcDogUmVtb3ZlZCBsb3RzIG9m
IHRoaW5ncyBuZWVkZWQgb25seSBmb3IgdGhlIHByZS1TcXVpcnJlbEZpc2gKKyAgICAgICAgZXhl
Y3V0aW9uIG1vZGVsLgorICAgICAgICAoS0pTOjpOb2RlOjpOb2RlKTogR290IHJpZCBvZiBtX2V4
cGVjdGVkUmV0dXJuVHlwZS4KKyAgICAgICAgKEtKUzo6Rm9yTm9kZTo6ZW1pdENvZGUpOiBIYW5k
bGUgY2FzZXMgd2hlcmUgc29tZSBleHByZXNzaW9ucyBhcmUgbWlzc2luZyBieQorICAgICAgICBu
b3QgZW1pdHRpbmcgYW55IGNvZGUgYXQgYWxsLiBUaGUgb2xkIHdheSB3YXMgdG8gZW1pdCBjb2Rl
IGZvciAidHJ1ZSIsIGJ1dAorICAgICAgICB0aGlzIGlzIGFuIHVubmVjZXNzYXJ5IHJlbW5hbnQg
b2YgdGhlIG9sZCB3YXkgb2YgZG9pbmcgdGhpbmdzLgorCisgICAgICAgICoga2pzL25vZGVzLmg6
IFJlbW92ZWQgbG90cyBvZiB0aGluZ3MgbmVlZGVkIG9ubHkgZm9yIHRoZSBwcmUtU3F1aXJyZWxG
aXNoCisgICAgICAgIGV4ZWN1dGlvbiBtb2RlbC4gTWFkZSBlbWl0Q29kZSBwdXJlIHZpcnR1YWwu
IE1vdmVkIGlzUmV0dXJuTm9kZSB0bworICAgICAgICBTdGF0ZW1lbnROb2RlIGFuZCByZW5hbWVk
IGl0IHRvIGlzUmV0dXJuU3RhdGVtZW50LiBNYWRlIHRoZSBub2RlcyB0aGF0IGFyZW4ndAorICAg
ICAgICBkaXJlY3RseSBpbnZvbHZlZCBpbiBlbWl0dGluZyBjb2RlIGluaGVyaXQgZnJvbSBQYXJz
ZXJSZWZDb3VudGVkIGluc3RlYWQgb2YKKyAgICAgICAgTm9kZS4gKFdlIG1heSB3YW50IHRvIGNo
YW5nZSBuYW1lcyBsYXRlci4pCisKKyAgICAgICAgKiBranMvbm9kZXMyc3RyaW5nLmNwcDogUmVt
b3ZlZCBjb250ZW50cy4gTGF0ZXIgd2UgY2FuIHJlbW92ZSB0aGUgZmlsZSB0b28uCisKKyAgICAg
ICAgKiBranMvb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQ
cm9wZXJ0eVNsb3QpOiBDaGFuZ2VkIHRvIG9ubHkgcGFzcyBpbiB0aGUgZ2V0dGVyCisgICAgICAg
IGZ1bmN0aW9uLiBUaGUgb2xkIGNvZGUgcGFzc2VkIGluIGEgYmFzZSwgYnV0IGl0IHdhcyBuZXZl
ciB1c2VkIHdoZW4KKyAgICAgICAgYWN0dWFsbHkgZ2V0dGluZyB0aGUgcHJvcGVydHk7IHRoZSB0
b1RoaXNPYmplY3QgY2FsbCB3YXMgcG9pbnRsZXNzLiBBbHNvCisgICAgICAgIGNoYW5nZWQgdG8g
bm90IHBhc3MgYSBiYXNlIGZvciBzZXRVbmRlZmluZWQuCisKKyAgICAgICAgKiBranMvb2JqZWN0
Lmg6IEFkZGVkIHRoZSBuZXcgSlNDZWxsIG9wZXJhdGlvbnMgdG8gR2V0dGVyU2V0dGVySW1wLgor
ICAgICAgICBOZXZlciBjYWxsZWQuCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpnZXQpOiBJbml0
aWFsaXplIHRoZSBvYmplY3QgaW4gdGhlIFByb3BlcnR5U2xvdCBhbmQgZG9uJ3QKKyAgICAgICAg
cGFzcyBpdCBpbiBnZXRWYWx1ZS4KKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEZvcldyaXRlKTogUmVtb3ZlZCB0aGUgYmFzZSBhcmd1bWVudAorICAgICAgICBpbiBj
YWxscyB0byBzZXRWYWx1ZVNsb3QuCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6Z2V0KTogQWRkZWQuIEhl
cmUgYmVjYXVzZSBpdCBjYWxscyB0aHJvdWdoIHRvIEpTT2JqZWN0LgorICAgICAgICBBIHZlcnNp
b24gb2YgSlNPYmplY3Q6OmdldCB0aGF0IGFsc28gaGFuZGxlcyB0aGUgb3RoZXIgdHlwZXMgb2Yg
SlNWYWx1ZQorICAgICAgICBieSBjcmVhdGluZyB0aGUgYXBwcm9wcmlhdGUgd3JhcHBlci4gU2F2
ZXMgdGhlIHZpcnR1YWwgY2FsbCB0byB0b09iamVjdC4KKyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6
cHV0KTogRGl0dG8uCisgICAgICAgIChLSlM6OkpTVmFsdWU6OmRlbGV0ZVByb3BlcnR5KTogRGl0
dG8uCisKKyAgICAgICAgKiBranMvcHJvcGVydHlfc2xvdC5jcHA6CisgICAgICAgIChLSlM6OlBy
b3BlcnR5U2xvdDo6dW5kZWZpbmVkR2V0dGVyKTogUmVtb3ZlZCB0aGUgb3JpZ2luYWxPYmplY3Qg
YXJndW1lbnQuCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6dW5nZXR0YWJsZUdldHRlcik6
IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKTogRGl0
dG8uIFVzZSB0aGUgdmFsdWUgaW4gdGhlIGJhc2UKKyAgICAgICAgYXMgdGhlICJ0aGlzIiBvYmpl
Y3QsIHdoaWNoIHdpbGwgYmUgc2V0IHRvIHRoZSBvcmlnaW5hbCBvYmplY3QgYnkgdGhlIG5ldwor
ICAgICAgICBQcm9wZXJ0eVNsb3QgaW5pdGlhbGl6YXRpb24gY29kZS4gQWxzbyBjYWxsIHRvVGhp
c09iamVjdC4gVGhlIG9sZCBjb2RlIGRpZAorICAgICAgICBub3QgZG8gdGhpcywgYnV0IG5lZWRl
ZCB0byBzbyB3ZSBjYW4gcHJvcGVybHkgaGFuZGxlIHRoZSBhY3RpdmF0aW9uIG9iamVjdAorICAg
ICAgICBsaWtlIHRoZSBvdGhlciBzaW1pbGFyIGNvZGUgcGF0aHMuCisKKyAgICAgICAgKiBranMv
cHJvcGVydHlfc2xvdC5oOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xv
dCk6IEFkZGVkIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIGJhc2UKKyAgICAgICAgb2JqZWN0
LiBJbiBkZWJ1ZyBidWlsZHMsIHNldCB0aGUgYmFzZSB0byAwIGlmIHlvdSBkb24ndCBwYXNzIG9u
ZS4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpnZXRWYWx1ZSk6IERvbid0IHRha2Ugb3Ig
cGFzcyB0aGUgb3JpZ2luYWxPYmplY3QuCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0
VmFsdWVTbG90KTogRG9uJ3QgdGFrZSBhIGJhc2Ugb2JqZWN0LCBhbmQgY2xlYXIgdGhlCisgICAg
ICAgIGJhc2Ugb2JqZWN0IGluIGRlYnVnIGJ1aWxkcy4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlT
bG90OjpzZXRHZXR0ZXJTbG90KTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6
c2V0VW5kZWZpbmVkKTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0VW5n
ZXR0YWJsZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnNsb3RCYXNlKTog
QXNzZXJ0IHRoYXQgYSBiYXNlIG9iamVjdCBpcyBwcmVzZW50LgorICAgICAgICBUaGlzIHdpbGwg
ZmlyZSBpZiBzb21lb25lIGFjdHVhbGx5IGNhbGxzIHRoZSBnZXQgZnVuY3Rpb24gd2l0aG91dCBo
YXZpbmcKKyAgICAgICAgcGFzc2VkIGluIGEgYmFzZSBvYmplY3QgYW5kIHRoZSBnZXR0ZXIgbmVl
ZHMgaXQuCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0QmFzZSk6IEFkZGVkLiBVc2Vk
IGJ5IHRoZSBjb2RlIHRoYXQgaW1wbGVtZW50cworICAgICAgICB0b09iamVjdCBzbyBpdCBjYW4g
c3VwcGx5IHRoZSBvcmlnaW5hbCBvYmplY3QgYWZ0ZXIgdGhlIGZhY3QuCisgICAgICAgIChLSlM6
OlByb3BlcnR5U2xvdDo6Y2xlYXJCYXNlKTogQWRkZWQuIENsZWFycyB0aGUgYmFzZSwgYnV0IGlz
IGRlYnVnLW9ubHkKKyAgICAgICAgY29kZSBiZWNhdXNlIGl0J3MgYW4gZXJyb3IgdG8gZmV0Y2gg
dGhlIGJhc2UgaWYgeW91IGRvbid0IGhhdmUgYSBndWFyYW50ZWUKKyAgICAgICAgaXQgd2FzIHNl
dC4KKworICAgICAgICAqIGtqcy90ZXN0a2pzLmNwcDoKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRz
KToKKyAgICAgICAgKHBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKGtqc21haW4pOgorICAgICAg
ICBSZW1vdmVkIHRoZSAiLXAiIGZsYWcuIEphdmFTY3JpcHRDb3JlIG5vIGxvbmdlciBoYXMgdGhl
IGFiaWxpdHkgdG8gcGFyc2UKKyAgICAgICAgYW5kIHRoZW4gc2VyaWFsaXplIGNvZGUsIHNvIHRo
aXMgaXMgbm93IHBvaW50bGVzcy4gV2UgY2FuIGJyaW5nIGlmIGJhY2sKKyAgICAgICAgaWYgd2Ug
YnJpbmcgdGhpcyBjYXBhYmlsaXR5IGJhY2suCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09i
amVjdC5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAg
ICAgIChLSlM6OkpTQ2FsbGJhY2tPYmplY3Q6OmNhY2hlZFZhbHVlR2V0dGVyKToKKyAgICAgICAg
KEtKUzo6SlNDYWxsYmFja09iamVjdDo6c3RhdGljVmFsdWVHZXR0ZXIpOgorICAgICAgICAoS0pT
OjpKU0NhbGxiYWNrT2JqZWN0OjpzdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChLSlM6
OkpTQ2FsbGJhY2tPYmplY3Q6OmNhbGxiYWNrR2V0dGVyKToKKyAgICAgICAgKiBranMvSlNBY3Rp
dmF0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoS0pTOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAg
ICAgICoga2pzL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAqIGtqcy9KU1ZhcmlhYmxlT2JqZWN0
Lmg6CisgICAgICAgIChLSlM6OkpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KToKKyAg
ICAgICAgKiBranMvYXJyYXlfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBranMvZnVuY3Rpb24uY3Bw
OgorICAgICAgICAoS0pTOjpGdW5jdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAg
KEtKUzo6RnVuY3Rpb25JbXA6OmNhbGxlckdldHRlcik6CisgICAgICAgIChLSlM6OkZ1bmN0aW9u
SW1wOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpBcmd1bWVudHM6Om1hcHBlZEluZGV4
R2V0dGVyKToKKyAgICAgICAgKiBranMvZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvbG9va3Vw
Lmg6CisgICAgICAgIChLSlM6OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKEtKUzo6
c3RhdGljVmFsdWVHZXR0ZXIpOgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAg
ICAgICAgKEtKUzo6U3RyaW5nSW5zdGFuY2U6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChLSlM6
OlN0cmluZ0luc3RhbmNlOjppbmRleEdldHRlcik6CisgICAgICAgIChLSlM6OnN0cmluZ0luc3Rh
bmNlTnVtZXJpY1Byb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5o
OgorICAgICAgICBSZW1vdmVkIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50cyBmcm9tIGdldHRlcnMu
IERvbid0IHBhc3MgYmFzZSB2YWx1ZXMgdG8KKyAgICAgICAgdGhlIHZhcmlvdXMgUHJvcGVydHlT
bG90IGZ1bmN0aW9ucyB0aGF0IG5vIGxvbmdlciB0YWtlIHRoZW0uCisKKyAgICAgICAgKiBranMv
dmFsdWUuY3BwOgorICAgICAgICAoS0pTOjpKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdCk6IEFk
ZGVkLiBDYWxscyB0b09iamVjdCBhbmQgdGhlbiBzZXRzIHRoZSBzbG90LgorICAgICAgICBUaGlz
IGZ1bmN0aW9uIGhhcyB0byBhbHdheXMgcmV0dXJuIHRydWUsIGJlY2F1c2UgdGhlIGNhbGxlciBj
YW4ndCB3YWxrIHRoZSBwcm90b3R5cGUKKyAgICAgICAgY2hhaW4uIEJlY2F1c2Ugb2YgdGhhdCwg
d2UgZG8gYSBnZXRQcm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QsIHdoaWNoIHdv
cmtzCisgICAgICAgIGZvciB0aGUgY2FsbGVyLiBUaGlzIGlzIHByaXZhdGUsIG9ubHkgY2FsbGVk
IGJ5IGdldE93blByb3BlcnR5U2xvdEludGVybmFsLgorICAgICAgICAoS0pTOjpKU0NlbGw6OnB1
dCk6IEFkZGVkLiBDYWxscyB0b09iamVjdCBhbmQgdGhlbiBwdXQuCisgICAgICAgIChLSlM6OkpT
Q2VsbDo6ZGVsZXRlUHJvcGVydHkpOiBBZGRlZC4gQ2FsbHMgdG9PYmplY3QgYW5kIHRoZW4gZGVs
ZXRlUHJvcGVydHkuCisgICAgICAgIChLSlM6OkpTQ2VsbDo6dG9UaGlzT2JqZWN0KTogQWRkZWQu
IENhbGxzIHRvT2JqZWN0LgorCisgICAgICAgICoga2pzL3ZhbHVlLmg6IEFkZGVkIGdldCwgcHV0
LCBkZWxldGVQcm9wZXJ0eSwgYW5kIHRvVGhpc09iamVjdCB0byBib3RoIEpTVmFsdWUKKyAgICAg
ICAgYW5kIEpTQ2VsbC4gVGhlc2UgdGFrZSBjYXJlIG9mIHRoZSB0b09iamVjdCBvcGVyYXRpb24g
d2l0aG91dCBhbiBhZGRpdGlvbmFsIHZpcnR1YWwKKyAgICAgICAgZnVuY3Rpb24gY2FsbCwgYW5k
IHNvIG1ha2UgdGhlIGNvbW1vbiAiYWxyZWFkeSBhbiBvYmplY3QiIGNhc2UgZmFzdGVyLgorCisg
ICAgICAgICogd3RmL0Fsd2F5c0lubGluZS5oOiBNb3ZlZCB0aGUgVU5MSUtFTFkgbWFjcm8gaGVy
ZSBmb3Igbm93LiBNYXliZSB3ZSBjYW4gZmluZCBhCisgICAgICAgIGJldHRlciBwbGFjZSBsYXRl
ciwgb3IgcmVuYW1lIHRoaXMgaGVhZGVyLgorCiAyMDA4LTA1LTI3ICBLZXZpbiBPbGxpdmllciAg
PGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeGVzIHRvIGNh
dGNoIHVwIHdpdGggU3F1aXJyZWxGaXNoLCBldGMuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIF9fWk4zS0pTMTFQcm9wZXJ0
eU1hcDNwdXRFUktOU18xMElkZW50aWYKIF9fWk4zS0pTMTFQcm9wZXJ0eU1hcDVjbGVhckV2CiBf
X1pOM0tKUzExUHJvcGVydHlNYXBEMUV2CiBfX1pOM0tKUzEyRGF0ZUluc3RhbmNlNGluZm9FCi1f
X1pOM0tKUzEyUHJvcGVydHlTbG90MTV1bmRlZmluZWRHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUE5T
XzhKU09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSS1MwXworX19aTjNLSlMxMlByb3BlcnR5U2xv
dDE1dW5kZWZpbmVkR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJLUzBf
CiBfX1pOM0tKUzEyUmVnaXN0ZXJGaWxlMTRhZGRHbG9iYWxTbG90c0VtCiBfX1pOM0tKUzEzQXJy
YXlJbnN0YW5jZTRpbmZvRQogX19aTjNLSlMxM0NvZGVHZW5lcmF0b3IyMXNldER1bXBzR2VuZXJh
dGVkQ29kZUViCkBAIC0xNTAsNyArMTUwLDEzIEBAIF9fWk4zS0pTMjNvYmplY3RQcm90b0Z1bmNU
b1N0cmluZ0VQTlNfOUUKIF9fWk4zS0pTNExpc3QxNWV4cGFuZEFuZEFwcGVuZEVQTlNfN0pTVmFs
dWVFCiBfX1pOM0tKUzRMaXN0N21hcmtTZXRFdgogX19aTjNLSlM2SlNDZWxsMTFnZXRDYWxsRGF0
YUVSTlNfOENhbGxEYXRhRQorX19aTjNLSlM2SlNDZWxsMTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zS0pTNkpTQ2VsbDE0ZGVsZXRlUHJvcGVy
dHlFUE5TXzlFeGVjU3RhdGVFagogX19aTjNLSlM2SlNDZWxsMTZnZXRDb25zdHJ1Y3REYXRhRVJO
U18xM0NvbnN0cnVjdERhdGFFCitfX1pOM0tKUzZKU0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCitfX1pO
M0tKUzZKU0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJv
cGVydHlTbG90RQorX19aTjNLSlM2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRl
bnRpZmllckVQTlNfN0pTVmFsdWVFCitfX1pOM0tKUzZKU0NlbGwzcHV0RVBOU185RXhlY1N0YXRl
RWpQTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzZKU0NlbGw5Z2V0T2JqZWN0RXYKIF9fWk4zS0pTNkpT
Q2VsbG53RW0KIF9fWk4zS0pTNkpTTG9jazEyRHJvcEFsbExvY2tzQzFFdgpAQCAtMjYxLDcgKzI2
Nyw3IEBAIF9fWk5LM0tKUzE3RGVidWdnZXJDYWxsRnJhbWUxMmZ1bmN0aW9uTmEKIF9fWk5LM0tK
UzE3RGVidWdnZXJDYWxsRnJhbWU4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VSUE5TXzdKU1ZhbHVl
RQogX19aTkszS0pTMTlJbnRlcm5hbEZ1bmN0aW9uSW1wMjFpbXBsZW1lbnRzSGFzSW5zdGFuY2VF
dgogX19aTkszS0pTNExpc3Q4Z2V0U2xpY2VFaVJTMF8KLV9fWk5LM0tKUzROb2RlOHRvU3RyaW5n
RXYKK19fWk5LM0tKUzZKU0NlbGwxMnRvVGhpc09iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5L
M0tKUzZKU0NlbGwxN2dldFRydW5jYXRlZEludDMyRVJpCiBfX1pOSzNLSlM2SlNDZWxsMThnZXRU
cnVuY2F0ZWRVSW50MzJFUmoKIF9fWk5LM0tKUzZKU0NlbGw5Z2V0TnVtYmVyRVJkCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9BUEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDEyIEBACiAjaW5jbHVkZSAi
SlNCYXNlLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiY29tcGxldGlvbi5o
IgogI2luY2x1ZGUgPGtqcy9FeGVjU3RhdGUuaD4KICNpbmNsdWRlIDxranMvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oPgotI2luY2x1ZGUgPGtqcy9pbnRlcnByZXRlci5oPgogI2luY2x1ZGUgPGtqcy9K
U0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxranMv
aW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDxranMvb2JqZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9u
IDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsMTAgKzc4LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBp
bml0KEV4ZWNTdGF0ZSopOwogICAgIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWNoZWRWYWx1ZUdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IEpTVmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogc3RhdGljVmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBKU1ZhbHVlKiBzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFs
dWUqIGNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAKICAgICB2b2lkKiBtX3ByaXZhdGVEYXRhOwogICAgIEpTQ2xh
c3NSZWYgbV9jbGFzczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsNyArNDI3
LDcgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojppbmhlcml0cyhKUwogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhY2hl
ZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46
OmNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNWYWx1ZSogdiA9IHNsb3Quc2xvdEJhc2UoKTsK
ICAgICBBU1NFUlQodik7CkBAIC00MzUsNyArNDM1LDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFja09i
amVjdDxCYXNlPjo6Y2FjaGVkVgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUq
IEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY1Zh
bHVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2Uo
KS0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKICAgICBKU0NhbGxiYWNrT2Jq
ZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KHNsb3Quc2xvdEJh
c2UoKSk7CkBAIC00NTYsMTUgKzQ1NiwxNSBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJh
c2U+OjpzdGF0aWNWCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlNDYWxs
YmFja09iamVjdDxCYXNlPjo6c3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljRnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgp
LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOwogICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5zbG90QmFz
ZSgpKTsKICAgICAKICAgICAvLyBDaGVjayBmb3IgY2FjaGVkIG9yIG92ZXJyaWRlIHByb3BlcnR5
LgotICAgIFByb3BlcnR5U2xvdCBzbG90MjsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdDIodGhpc09i
aik7CiAgICAgaWYgKHRoaXNPYmotPkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QyKSkKLSAgICAgICAgcmV0dXJuIHNsb3QyLmdldFZhbHVlKGV4ZWMsIHRo
aXNPYmosIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBzbG90Mi5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0gdGhp
c09iai0+bV9jbGFzczsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7
CiAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzOjpTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGlj
RnVuY3Rpb25zID0ganNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKSB7CkBAIC00ODIsNyArNDgyLDcg
QEAgSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljRgogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNr
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTQ2FsbGJhY2tP
YmplY3Q8QmFzZT46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNT
RVJUKHNsb3Quc2xvdEJhc2UoKS0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsK
ICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09i
amVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5o
CShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
RmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CiAgICAgfTsKICAgICAKKyAgICBlbnVtIENv
ZGVUeXBlIHsgR2xvYmFsQ29kZSwgRXZhbENvZGUsIEZ1bmN0aW9uQ29kZSB9OworCiAgICAgY2xh
c3MgQ29kZUdlbmVyYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIERlY2xhcmF0
aW9uU3RhY2tzOjpWYXJTdGFjayBWYXJTdGFjazsKQEAgLTI4Nyw4ICsyODksOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgSnVtcENvbnRleHQqIGp1bXBDb250ZXh0Rm9yQ29udGludWUoY29u
c3QgSWRlbnRpZmllciYpOwogICAgICAgICBKdW1wQ29udGV4dCoganVtcENvbnRleHRGb3JCcmVh
ayhjb25zdCBJZGVudGlmaWVyJik7CiAKLQogICAgICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFBhc3NS
ZWZQdHI8TGFiZWxJRD4gZW1pdENvbXBsZXhKdW1wU2NvcGVzKExhYmVsSUQqIHRhcmdldCwgQ29u
dHJvbEZsb3dDb250ZXh0KiB0b3BTY29wZSwgQ29udHJvbEZsb3dDb250ZXh0KiBib3R0b21TY29w
ZSk7CiAgICAgICAgIHN0cnVjdCBKU1ZhbHVlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8SlNWYWx1
ZSo+IHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lv
biAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwyOCArNDUsMTkgQEAgc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3Ry
aW5nJiBzdHJpbmcsIAogICAgIHN0cmluZyA9IG5ld1N0cmluZzsKIH0KICAgICAKLUpTVmFsdWUq
IGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1z
ZykKK3N0YXRpYyBKU1ZhbHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlw
ZSBlLCBjb25zdCBjaGFyKiBtc2cpCiB7CiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywg
ZSwgbXNnLCAtMSwgLTEsIDApOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxh
YmVsKQorc3RhdGljIEpTVmFsdWUqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JU
eXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYgbGFiZWwpCiB7CiAgICAg
VVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgbGFiZWwudXN0
cmluZygpKTsKICAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtZXNzYWdlLCAtMSwg
LTEsIDApOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9y
VHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqIHYsIE5vZGUqIGV4cHIpCi17Ci0gICAg
VVN0cmluZyBtZXNzYWdlID0gbXNnOwotICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgdi0+dG9TdHJp
bmcoZXhlYykpOwotICAgIGlmIChleHByKQotICAgICAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGV4
cHItPnRvU3RyaW5nKCkpOwotICAgIHJldHVybiBFcnJvcjo6Y3JlYXRlKGV4ZWMsIGUsIG1lc3Nh
Z2UsIC0xLCAtMSwgMCk7Ci19Ci0KLUpTVmFsdWUqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdikKK3N0YXRpYyBKU1Zh
bHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFy
KiBtc2csIEpTVmFsdWUqIHYpCiB7CiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1
YnN0aXR1dGUobWVzc2FnZSwgdi0+dG9TdHJpbmcoZXhlYykpOwpAQCAtOTEsMTcgKzgyLDEzIEBA
IEpTVmFsdWUqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdGEKICAgICByZXR1cm4gRXJy
b3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsIG1lc3NhZ2UsIC0xLCAtMSwgMCk7CiB9CiAKLUpT
VmFsdWUqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsdWUsIE5vZGUqIGV4cHIpCitKU1ZhbHVlKiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQogewotICAgIGlmIChleHByKQotICAg
ICAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3Vs
dCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYSBjb25zdHJ1Y3Rvci4gQ2Fubm90IGJlIHVzZWQg
d2l0aCBuZXcuIiwgdmFsdWUsIGV4cHIpOwogICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBU
eXBlRXJyb3IsICJWYWx1ZSAlcyBpcyBub3QgYSBjb25zdHJ1Y3Rvci4gQ2Fubm90IGJlIHVzZWQg
d2l0aCBuZXcuIiwgdmFsdWUpOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBOb2RlKiBleHByKQorSlNWYWx1ZSog
Y3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkK
IHsKLSAgICBpZiAoZXhwcikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIFR5cGVF
cnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgZG9lcyBub3QgYWxsb3cg
ZnVuY3Rpb24gY2FsbHMuIiwgdmFsdWUsIGV4cHIpOwogICAgIHJldHVybiBjcmVhdGVFcnJvcihl
eGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyBkb2VzIG5vdCBhbGxvdyBmdW5jdGlvbiBjYWxscy4i
LCB2YWx1ZSk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0V4Y2VwdGlvbkhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9FeGNlcHRpb25IZWxwZXJzLmgJKHJl
dmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUvVk0vRXhjZXB0aW9uSGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTMgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKIAog
bmFtZXNwYWNlIEtKUyB7Ci0gICAgY2xhc3MgTm9kZTsKKwogICAgIEpTVmFsdWUqIGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKICAgICBKU1ZhbHVlKiBjcmVhdGVVbmRlZmlu
ZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICBKU1Zh
bHVlKiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwg
SlNWYWx1ZSopOwotICAgIEpTVmFsdWUqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIE5vZGUqIGV4cHIpOwotICAgIEpTVmFsdWUqIGNy
ZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIE5v
ZGUqIGV4cHIpOworICAgIEpTVmFsdWUqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNT
dGF0ZSosIEpTVmFsdWUqKTsKKyAgICBKU1ZhbHVlKiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihF
eGVjU3RhdGUqLCBKU1ZhbHVlKik7CisKIH0KIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5l
LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDYgQEAKICNpbmNsdWRlICJvcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAicmVnZXhwX29iamVjdC5oIgogCi0jaWYgQ09NUElMRVIoR0NDKQotI2RlZmlu
ZSBVTkxJS0VMWSh4KSBcCi0gIF9fYnVpbHRpbl9leHBlY3QgKCh4KSwgMCkKLSNlbHNlCi0jZGVm
aW5lIFVOTElLRUxZKHgpIHgKLSNlbmRpZgotCiBuYW1lc3BhY2UgS0pTIHsKIAogI2lmIEhBVkUo
Q09NUFVURURfR09UTykKQEAgLTIxMCwxMiArMjAzLDEyIEBAIHN0YXRpYyBib29sIE5FVkVSX0lO
TElORSByZXNvbHZlKEV4ZWNTdGEKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVD
aGFpbi0+ZW5kKCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKIAotICAgIFByb3BlcnR5U2xv
dCBzbG90OwogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyc1tw
cm9wZXJ0eV07CiAgICAgZG8gewogICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOworICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChl
eGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3Qu
Z2V0VmFsdWUoZXhlYywgbywgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
c2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CiAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9
IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI0MCwxMiArMjMzLDEyIEBAIHN0YXRpYyBi
b29sIE5FVkVSX0lOTElORSByZXNvbHZlX3NraXAoRXgKICAgICAgICAgKytpdGVyOwogICAgICAg
ICBBU1NFUlQoaXRlciAhPSBlbmQpOwogICAgIH0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAg
ICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwog
ICAgIGRvIHsKICAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKKyAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Qobyk7CiAgICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4
ZWMsIG8sIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFs
dWUoZXhlYywgaWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNl
cHRpb24oKTsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yOTUsMTMgKzI4OCwxMyBAQCBzdGF0aWMgYm9vbCBORVZFUl9J
TkxJTkUgcmVzb2x2ZUJhc2VBbmRQCiAgICAgCiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKICAg
ICAKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVC
bG9jay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwogICAgIEpTT2JqZWN0KiBiYXNlOwogICAgIGRv
IHsKICAgICAgICAgYmFzZSA9ICppdGVyOworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
KTsKICAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFz
ZSwgaWRlbnQpOyAgCisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVl
KGV4ZWMsIGlkZW50KTsKICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzI5LDExICszMjIsMTEgQEAgc3RhdGljIGJvb2wgTkVWRVJfSU5M
SU5FIHJlc29sdmVCYXNlQW5kRgogICAgIAogICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAgICAg
Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXJzW3Byb3BlcnR5XTsKICAgICBKU09iamVjdCogYmFzZTsKICAgICBkbyB7
CiAgICAgICAgIGJhc2UgPSAqaXRlcjsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7
CiAgICAgICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKSB7
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBFQ01BIDExLjIuMyBzYXlzIHRoYXQgaWYgd2Ug
aGl0IGFuIGFjdGl2YXRpb24gdGhlIHRoaXMgdmFsdWUgc2hvdWxkIGJlIG51bGwuCiAgICAgICAg
ICAgICAvLyBIb3dldmVyLCBzZWN0aW9uIDEwLjIuMyBzYXlzIHRoYXQgaW4gdGhlIGNhc2Ugd2hl
cmUgdGhlIHZhbHVlIHByb3ZpZGVkCkBAIC0zNDMsNyArMzM2LDcgQEAgc3RhdGljIGJvb2wgTkVW
RVJfSU5MSU5FIHJlc29sdmVCYXNlQW5kRgogICAgICAgICAgICAgLy8gdGhhdCBpbiBob3N0IG9i
amVjdHMgeW91IGFsd2F5cyBnZXQgYSB2YWxpZCBvYmplY3QgZm9yIHRoaXMuCiAgICAgICAgICAg
ICAvLyBXZSBhbHNvIGhhbmRsZSB3cmFwcGVyIHN1YnN0aXR1dGlvbiBmb3IgdGhlIGdsb2JhbCBv
YmplY3QgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
YmFzZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
c2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBpZGVudCk7CisgICAgICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKICAgICAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFs
dWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYwOCwxMCArMTYwMSw5IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CiAjZW5k
aWYKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSByW2Jhc2VdLnUuanNWYWx1ZS0+dG9PYmpl
Y3QoZXhlYyk7CiAKICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50
aWZpZXJzW3Byb3BlcnR5XTsKLSAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gYmFzZU9iai0+Z2V0
KGV4ZWMsIGlkZW50KTsKKyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gcltiYXNlXS51LmpzVmFs
dWUtPmdldChleGVjLCBpZGVudCk7CiAgICAgICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA9PSAo
ciAtICgqcmVnaXN0ZXJCYXNlKSkpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKICAg
ICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKQEAgLTE2MzMsMTEgKzE2MjUsOSBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAjaWZuZGVmIE5ERUJVRwog
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdpc3RlckJhc2UpOwogI2VuZGlm
Ci0KLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSByW2Jhc2VdLnUuanNWYWx1ZS0+dG9PYmpl
Y3QoZXhlYyk7CiAgICAgICAgIAogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcnNbcHJvcGVydHldOwotICAgICAgICBiYXNlT2JqLT5wdXQoZXhlYywgaWRl
bnQsIHJbdmFsdWVdLnUuanNWYWx1ZSk7CisgICAgICAgIHJbYmFzZV0udS5qc1ZhbHVlLT5wdXQo
ZXhlYywgaWRlbnQsIHJbdmFsdWVdLnUuanNWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChyZWdpc3Rl
ck9mZnNldCA9PSAociAtICgqcmVnaXN0ZXJCYXNlKSkpOwogICAgICAgICAKICAgICAgICAgVk1f
Q0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xNjU2LDEwICsxNjQ2LDggQEAgSlNWYWx1ZSogTWFjaGlu
ZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgYmFzZSA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0g
ICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gcltiYXNlXS51LmpzVmFsdWUtPnRvT2JqZWN0KGV4
ZWMpOwotICAgICAgICAKICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXJzW3Byb3BlcnR5XTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFu
KGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGlkZW50KSk7CisgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzQm9vbGVhbihyW2Jhc2VdLnUuanNWYWx1ZS0+ZGVsZXRlUHJvcGVydHkoZXhl
YywgaWRlbnQpKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIHJbZHN0
XS51LmpzVmFsdWUgPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwpAQCAtMTY3NywxNCArMTY2NSwx
NiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGlu
dCBiYXNlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgcHJvcGVydHkgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSByW2Jhc2VdLnUu
anNWYWx1ZS0+dG9PYmplY3QoZXhlYyk7IC8vIG1heSB0aHJvdworICAgICAgICBKU1ZhbHVlKiBi
YXNlVmFsdWUgPSByW2Jhc2VdLnUuanNWYWx1ZTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUq
IHN1YnNjcmlwdCA9IHJbcHJvcGVydHldLnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogcmVz
dWx0OwogICAgICAgICB1aW50MzJfdCBpOwogICAgICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50
MzIoaSkpCi0gICAgICAgICAgICByZXN1bHQgPSBiYXNlT2JqLT5nZXQoZXhlYywgaSk7CisgICAg
ICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChleGVjLCBpKTsKICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhl
Yyk7IC8vIG1heSB0aHJvdworICAgICAgICAKICAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHk7CiAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0LT5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7IC8vIElmIHRvT2JqZWN0IHRocmV3LCB3ZSBtdXN0
IG5vdCBjYWxsIHRvU3RyaW5nLCB3aGljaCBtYXkgZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQpAQCAt
MTcxNiwxNCArMTcwNiwxNiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAg
aW50IHZhbHVlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTT2JqZWN0KiBiYXNl
T2JqID0gcltiYXNlXS51LmpzVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOworICAgICAgICBKU1ZhbHVl
KiBiYXNlVmFsdWUgPSByW2Jhc2VdLnUuanNWYWx1ZTsKICAgICAgICAgCiAgICAgICAgIEpTVmFs
dWUqIHN1YnNjcmlwdCA9IHJbcHJvcGVydHldLnUuanNWYWx1ZTsKIAogICAgICAgICB1aW50MzJf
dCBpOwogICAgICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIoaSkpCi0gICAgICAgICAgICBi
YXNlT2JqLT5wdXQoZXhlYywgaSwgclt2YWx1ZV0udS5qc1ZhbHVlKTsKKyAgICAgICAgICAgIGJh
c2VWYWx1ZS0+cHV0KGV4ZWMsIGksIHJbdmFsdWVdLnUuanNWYWx1ZSk7CiAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4
ZWMpOworCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5OwogICAgICAgICAgICAgaWYg
KHN1YnNjcmlwdC0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOyAvLyBJZiB0b09iamVjdCB0aHJldywgd2UgbXVzdCBub3QgY2FsbCB0b1N0cmluZywg
d2hpY2ggbWF5IGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUKQEAgLTE3NTEsMTQgKzE3NDMsMTMgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpbnQgYmFz
ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwogCi0gICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gcltiYXNlXS51LmpzVmFs
dWUtPnRvT2JqZWN0KGV4ZWMpOyAvLyBtYXkgdGhyb3cKLQogICAgICAgICBKU1ZhbHVlKiBzdWJz
Y3JpcHQgPSByW3Byb3BlcnR5XS51LmpzVmFsdWU7CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsK
ICAgICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKGkp
KQotICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5
KGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihyW2Jhc2VdLnUuanNW
YWx1ZS0+ZGVsZXRlUHJvcGVydHkoZXhlYywgaSkpOwogICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gcltiYXNlXS51LmpzVmFsdWUtPnRvT2JqZWN0KGV4ZWMp
OyAvLyBtYXkgdGhyb3cKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOyAvLyBJZiB0
b09iamVjdCB0aHJldywgd2UgbXVzdCBub3QgY2FsbCB0b1N0cmluZywgd2hpY2ggbWF5IGV4ZWN1
dGUgYXJiaXRyYXJ5IGNvZGUKICAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoc3Vic2Ny
aXB0LT50b1N0cmluZyhleGVjKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
QEAgLTE5MDIsNyArMTg5Myw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgLy8gdGhpcyBpbnN0cnVjdGlvbiBhcyBhIG5vcm1hbCBmdW5jdGlvbiBj
YWxsLCBzdXBwbHlpbmcgdGhlIHByb3BlciAndGhpcycKICAgICAgICAgLy8gdmFsdWUuCiAgICAg
ICAgIHZQQyAtPSA1OwotICAgICAgICByW2Jhc2VdLnUuanNWYWx1ZSA9IGJhc2VWYWwtPnRvT2Jq
ZWN0KGV4ZWMpLT50b1RoaXNPYmplY3QoZXhlYyk7CisgICAgICAgIHJbYmFzZV0udS5qc1ZhbHVl
ID0gYmFzZVZhbC0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCiAjaWYgSEFWRShDT01QVVRFRF9HT1RP
KQogICAgICAgICAvLyBIYWNrIGFyb3VuZCBnY2MgcGVyZm9ybWFuY2UgcXVpcmsgYnkgcGVyZm9y
bWluZyBhbiBpbmRpcmVjdCBnb3RvCkBAIC0xOTc4LDcgKzE5NjksNyBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSk7CiAKLSAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihleGVjLCB2LCAwKTsKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVO
b3RBRnVuY3Rpb25FcnJvcihleGVjLCB2KTsKICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICB9
CiAgICAgQkVHSU5fT1BDT0RFKG9wX3JldCkgewpAQCAtMjA5Niw3ICsyMDg3LDcgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgIEFTU0VSVChjb25z
dHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKTsKIAotICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmNWYWwsIDApOworICAgICAg
ICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmNW
YWwpOwogICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3Bf
cHVzaF9zY29wZSkgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMzQxNTEp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDI5ICsyNCwxNyBAQAogI2lmbmRlZiBFeGVjU3RhdGVfaAogI2RlZmluZSBFeGVjU3RhdGVfaAog
Ci0jaW5jbHVkZSAiTGFiZWxTdGFjay5oIgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUVudHJ5Lmgi
Ci0jaW5jbHVkZSAiY29tcGxldGlvbi5oIgogI2luY2x1ZGUgImxpc3QuaCIKICNpbmNsdWRlICJz
Y29wZV9jaGFpbi5oIgogCiBuYW1lc3BhY2UgS0pTICB7CiAKICAgICBjbGFzcyBDb21tb25JZGVu
dGlmaWVyczsKLSAgICBjbGFzcyBFdmFsTm9kZTsKLSAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2Rl
OwotICAgIGNsYXNzIEZ1bmN0aW9uSW1wOwotICAgIGNsYXNzIEdsb2JhbEZ1bmNJbXA7Ci0gICAg
c3RydWN0IEhhc2hUYWJsZTsKLSAgICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKLSAgICBjbGFzcyBKU1ZhcmlhYmxlT2JqZWN0OwogICAgIGNsYXNzIE1hY2hp
bmU7Ci0gICAgY2xhc3MgUHJvZ3JhbU5vZGU7CiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxlOwotICAg
IGNsYXNzIFNjb3BlTm9kZTsKIAotICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKKyAgICBzdHJ1Y3Qg
SGFzaFRhYmxlOwogICAgIAogICAgIHN0cnVjdCBQZXJUaHJlYWREYXRhIHsKICAgICAgICAgY29u
c3QgSGFzaFRhYmxlKiBhcnJheVRhYmxlOwpAQCAtMTA0LDkgKzkyLDggQEAgbmFtZXNwYWNlIEtK
UyAgewogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBzdHJpbmdUYWJsZShFeGVjU3Rh
dGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMtPm1fcGVyVGhyZWFkRGF0YS0+c3RyaW5nVGFibGU7IH0K
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IgcmVxdWlyZWQg
Zm9yIE9sZEludGVycHJldGVyRXhlY1N0YXRlIHdpdGggZ2NjIDMuCi0gICAgICAgIEV4ZWNTdGF0
ZSgpIHt9OwotCisgICAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IgcmVxdWlyZWQgZm9yIGdj
YyAzLgorICAgICAgICBFeGVjU3RhdGUoKSB7IH0KICAgICAgICAgRXhlY1N0YXRlKEV4ZWNTdGF0
ZSosIE1hY2hpbmUqLCBSZWdpc3RlckZpbGUqLCBTY29wZUNoYWluTm9kZSosIGludCBjYWxsRnJh
bWVPZmZzZXQpOwogCiAgICAgICAgIGJvb2wgaXNHbG9iYWxPYmplY3QoSlNPYmplY3QqKSBjb25z
dDsKQEAgLTEyNiwxMTAgKzExMyw2IEBAIG5hbWVzcGFjZSBLSlMgIHsKICAgICAgICAgaW50IG1f
Y2FsbEZyYW1lT2Zmc2V0OyAvLyBBIG5lZ2F0aXZlIG9mZnNldCBpbmRpY2F0ZXMgYSBub24tZnVu
Y3Rpb24gc2NvcGUuCiAgICAgfTsKIAotICAgIC8vIFRoaXMgY29kZSBpcyBub3cgZGVmdW5jdDoK
LQotICAgIGVudW0gQ29kZVR5cGUgeyBHbG9iYWxDb2RlLCBFdmFsQ29kZSwgRnVuY3Rpb25Db2Rl
IH07Ci0gICAgY2xhc3MgT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUgOiBwdWJsaWMgRXhlY1N0YXRl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgcHVzaFN3aXRjaCgpIHsgbV9zd2l0Y2hEZXB0
aCsrOyB9Ci0gICAgICAgIHZvaWQgcG9wU3dpdGNoKCkgeyBtX3N3aXRjaERlcHRoLS07IH0KLSAg
ICAgICAgYm9vbCBpblN3aXRjaCgpIGNvbnN0IHsgcmV0dXJuIChtX3N3aXRjaERlcHRoID4gMCk7
IH0KLQotICAgICAgICAvLyBUaGVzZSBhcmUgb25seSB2YWxpZCByaWdodCBhZnRlciBjYWxsaW5n
IGV4ZWN1dGUoKS4KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21wbGV0aW9uVHlwZTsgfQotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBicmVh
a09yQ29udGludWVUYXJnZXQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9jb21wbGV0aW9uVHlwZSA9PSBCcmVhayB8fCBtX2NvbXBsZXRpb25UeXBlID09IENvbnRpbnVl
KTsKLSAgICAgICAgICAgIHJldHVybiAqbV9icmVha09yQ29udGludWVUYXJnZXQ7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBPbmx5IGZvciB1c2UgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGV4
ZWN1dGUoKS4KLSAgICAgICAgdm9pZCBzZXRDb21wbGV0aW9uVHlwZShDb21wbFR5cGUgdHlwZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQnJlYWspOwotICAgICAgICAg
ICAgQVNTRVJUKHR5cGUgIT0gQ29udGludWUpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlw
ZSA9IHR5cGU7Ci0gICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSogc2V0Tm9ybWFsQ29tcGxldGlv
bigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkpOwotICAg
ICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IE5vcm1hbDsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNldE5vcm1hbENvbXBsZXRpb24oSlNWYWx1
ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkp
OwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IE5vcm1hbDsKLSAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICBKU1ZhbHVlKiBzZXRCcmVha0NvbXBsZXRp
b24oY29uc3QgSWRlbnRpZmllciogdGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWhhZEV4Y2VwdGlvbigpKTsKLSAgICAgICAgICAgIG1fY29tcGxldGlvblR5cGUgPSBCcmVh
azsKLSAgICAgICAgICAgIG1fYnJlYWtPckNvbnRpbnVlVGFyZ2V0ID0gdGFyZ2V0OwotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSogc2V0Q29udGludWVD
b21wbGV0aW9uKGNvbnN0IElkZW50aWZpZXIqIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKCFoYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBtX2NvbXBsZXRpb25UeXBl
ID0gQ29udGludWU7Ci0gICAgICAgICAgICBtX2JyZWFrT3JDb250aW51ZVRhcmdldCA9IHRhcmdl
dDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNl
dFJldHVyblZhbHVlQ29tcGxldGlvbihKU1ZhbHVlKiByZXR1cm5WYWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
cmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IFJldHVyblZhbHVl
OwotICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIEpT
VmFsdWUqIHNldFRocm93Q29tcGxldGlvbihKU1ZhbHVlKiBleGNlcHRpb24pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgQVNTRVJU
KGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBtX2NvbXBsZXRpb25UeXBlID0gVGhyb3c7Ci0gICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUqIHNl
dEludGVycnVwdGVkQ29tcGxldGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IEludGVycnVw
dGVkOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgQ29kZVR5cGUg
Y29kZVR5cGUoKSB7IHJldHVybiBtX2NvZGVUeXBlOyB9Ci0gICAgICAgIHZvaWQgcHVzaEl0ZXJh
dGlvbigpIHsgbV9pdGVyYXRpb25EZXB0aCsrOyB9Ci0gICAgICAgIHZvaWQgcG9wSXRlcmF0aW9u
KCkgeyBtX2l0ZXJhdGlvbkRlcHRoLS07IH0KLSAgICAgICAgYm9vbCBpbkl0ZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIChtX2l0ZXJhdGlvbkRlcHRoID4gMCk7IH0KLSAgICAgICAgTGFiZWxTdGFj
ayYgc2VlbkxhYmVscygpIHsgcmV0dXJuIG1fbGFiZWxTdGFjazsgfQotICAgICAgICB2b2lkIHB1
c2hTY29wZShKU09iamVjdCogcykgeyBtX3Njb3BlQ2hhaW4ucHVzaChzKTsgfQotICAgICAgICB2
b2lkIHBvcFNjb3BlKCkgeyBtX3Njb3BlQ2hhaW4ucG9wKCk7IH0KLSAgICAgICAgSlNWYXJpYWJs
ZU9iamVjdCogdmFyaWFibGVPYmplY3QoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gbV92YXJpYWJsZU9iamVjdDsgfQotICAgICAgICB2b2lkIHNldFZhcmlhYmxlT2JqZWN0
KEpTVmFyaWFibGVPYmplY3QqIHYpIHsgbV92YXJpYWJsZU9iamVjdCA9IHY7IH0KLSAgICAgICAg
RXhlY1N0YXRlKiBjYWxsaW5nRXhlY1N0YXRlKCkgeyByZXR1cm4gbV9jYWxsaW5nRXhlYzsgfQot
ICAgICAgICBTY29wZU5vZGUqIHNjb3BlTm9kZSgpIHsgcmV0dXJuIG1fc2NvcGVOb2RlOyB9Ci0g
ICAgICAgIGNvbnN0IExpc3QqIGFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
OyB9Ci0gICAgICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVu
Y3Rpb247IH0KLSAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UoKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gKihMb2NhbFN0b3JhZ2UqKTA7IH0KLSAgICAgICAgdm9pZCBz
ZXRMb2NhbFN0b3JhZ2UoTG9jYWxTdG9yYWdlKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQot
ICAgICAgICBTY29wZUNoYWluJiBzY29wZUNoYWluKCkgeyByZXR1cm4gbV9zY29wZUNoYWluOyB9
Ci0gICAgICAgIEpTT2JqZWN0KiB0aGlzVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3RoaXNWYWx1
ZTsgfQotICAgICAgICAKLSAgICAgICAgQ29tcGxUeXBlIG1fY29tcGxldGlvblR5cGU7Ci0gICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIG1fYnJlYWtPckNvbnRpbnVlVGFyZ2V0OwotICAgICAgICBp
bnQgbV9zd2l0Y2hEZXB0aDsKLSAgICAgICAgQ29kZVR5cGUgbV9jb2RlVHlwZTsKLSAgICAgICAg
aW50IG1faXRlcmF0aW9uRGVwdGg7Ci0gICAgICAgIExhYmVsU3RhY2sgbV9sYWJlbFN0YWNrOwot
ICAgICAgICBTY29wZUNoYWluTm9kZSBtX2lubGluZVNjb3BlQ2hhaW5Ob2RlOwotICAgICAgICBT
Y29wZUNoYWluIG1fc2NvcGVDaGFpbjsKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogbV92YXJp
YWJsZU9iamVjdDsKLSAgICAgICAgU2NvcGVOb2RlKiBtX3Njb3BlTm9kZTsKLSAgICAgICAgY29u
c3QgTGlzdCogbV9hcmd1bWVudHM7Ci0gICAgICAgIEZ1bmN0aW9uSW1wKiBtX2Z1bmN0aW9uOwot
ICAgICAgICBFeGVjU3RhdGUqIG1fY2FsbGluZ0V4ZWM7Ci0gICAgICAgIEpTT2JqZWN0KiBtX3Ro
aXNWYWx1ZTsKLSAgICB9OwotCiB9IC8vIG5hbWVzcGFjZSBLSlMKIAogI2VuZGlmIC8vIEV4ZWNT
dGF0ZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMzQx
NTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsNyBAQCBib29sIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90
KEV4CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKEpTVmFsdWUqKiBsb2NhdGlvbiA9
IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1
ZVNsb3QodGhpcywgbG9jYXRpb24pOworICAgICAgICBzbG90LnNldFZhbHVlU2xvdChsb2NhdGlv
bik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTYwLDcgKzE2MCw3IEBAIGJv
b2wgSlNBY3RpdmF0aW9uOjppc0R5bmFtaWNTY29wZSgpIGNvbnMKICAgICByZXR1cm4gZCgpLT5m
dW5jdGlvbkJvZHktPnVzZXNFdmFsKCk7CiB9CiAKLUpTVmFsdWUqIEpTQWN0aXZhdGlvbjo6YXJn
dW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNBY3RpdmF0aW9uOjphcmd1
bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iaiA9IHN0YXRpY19j
YXN0PEpTQWN0aXZhdGlvbio+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgaWYgKCF0aGlzT2JqLT5k
KCktPmFyZ3VtZW50c09iamVjdCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgJKHJl
dmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAg
SlNPYmplY3QqIGFyZ3VtZW50c09iamVjdDsKICAgICAgICAgfTsKICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwogICAgICAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CiAgICAgICAgIE5FVkVSX0lOTElORSBK
U09iamVjdCogY3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSopOwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcg
KzEwMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCku
cmVwKCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVlQXQoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QoJnZhbHVlQXQoZW50cnkuZ2V0SW5kZXgoKSkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTEwLDcgKzExMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHsKICAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS51
c3RyaW5nKCkucmVwKCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVlQXQoZW50cnkuZ2V0SW5kZXgoKSkp
OworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QoJnZhbHVlQXQoZW50cnkuZ2V0SW5kZXgo
KSkpOwogICAgICAgICAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvTG9jYWxTdG9yYWdlRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvTG9jYWxTdG9yYWdlRW50cnkuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvTG9jYWxTdG9yYWdlRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiArMSBAQAot
Ly8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCi0vKgotICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hA
dXdhdGVybG9vLmNhKQotICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaWZuZGVmIEtKU19MT0NBTF9TVE9SQUdFX0gKLSNkZWZpbmUgS0pTX0xPQ0FM
X1NUT1JBR0VfSAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yVHJhaXRzLmg+Ci0KLW5hbWVzcGFjZSBLSlMgewotICAgIGNsYXNzIEpTVmFsdWU7Ci0KLSAg
ICBzdHJ1Y3QgTG9jYWxTdG9yYWdlRW50cnkgewotICAgICAgICBMb2NhbFN0b3JhZ2VFbnRyeSgp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgIAotICAgICAgICBMb2NhbFN0b3JhZ2VFbnRyeShK
U1ZhbHVlKiB2LCB1bnNpZ25lZCBhKQotICAgICAgICAgICAgOiB2YWx1ZSh2KQotICAgICAgICAg
ICAgLCBhdHRyaWJ1dGVzKGEpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEpTVmFs
dWUqIHZhbHVlOwotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICB0
eXBlZGVmIFZlY3RvcjxMb2NhbFN0b3JhZ2VFbnRyeSwgMzI+IExvY2FsU3RvcmFnZTsKLX0KLQot
bmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPEtKUzo6
TG9jYWxTdG9yYWdlRW50cnk+IDogVmVjdG9yVHJhaXRzQmFzZTx0cnVlLCBLSlM6OkxvY2FsU3Rv
cmFnZUVudHJ5PiB7IH07Ci19Ci0KLSNlbmRpZiAvLyBLSlNfTE9DQUxfU1RPUkFHRV9ICisvKiBp
bnRlbnRpb25hbGx5IGxlZnQgYmxhbmsgKi8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJh
eV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2lu
c3RhbmNlLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlf
aW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgSlNWYWx1ZSog
QXJyYXlJbnN0YW5jZTo6Z2V0SXRlbSh1bnNpZ25lZAogICAgIHJldHVybiB2YWx1ZSA/IHZhbHVl
IDoganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogQXJyYXlJbnN0YW5jZTo6bGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEFycmF5SW5zdGFuY2U6Omxlbmd0aEdldHRlcihFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlKj4oc2xvdC5zbG90
QmFzZSgpKS0+bV9sZW5ndGgpOwogfQpAQCAtMTM3LDcgKzEzNyw3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBBcnJheUluc3RhbmNlOjppbmxpbmUKIHsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7CiAKLSAgICBpZiAoaSA+PSBtX2xlbmd0aCkgeworICAgIGlmIChVTkxJS0VM
WShpID49IG1fbGVuZ3RoKSkgewogICAgICAgICBpZiAoaSA+IG1heEFycmF5SW5kZXgpCiAgICAg
ICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
aSksIHNsb3QpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDYsMTQgKzE0NiwxNCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgQXJyYXlJbnN0YW5jZTo6aW5saW5lCiAgICAgaWYgKGkgPCBtX3Zl
Y3Rvckxlbmd0aCkgewogICAgICAgICBKU1ZhbHVlKiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWVTbG90KHRoaXMsICZ2YWx1ZVNsb3QpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNs
b3QoJnZhbHVlU2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VW
YWx1ZU1hcCkgewogICAgICAgICBpZiAoaSA+PSBzcGFyc2VBcnJheUN1dG9mZikgewogICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAg
ICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5lbmQoKSkgewotICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWVTbG90KHRoaXMsICZpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBzbG90LnNl
dFZhbHVlU2xvdCgmaXQtPnNlY29uZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9p
bnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5j
ZS5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHZvaWQgc2V0TGF6eUNyZWF0aW9uRGF0YSh2b2lkKik7CiAKICAgcHJpdmF0ZToKLSAgICBzdGF0
aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwogICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICB2b2lkIHNldExlbmd0aCh1
bnNpZ25lZCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAkocmV2aXNpb24g
MzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsMTAgKzgxLDEwIEBAIGJvb2wgQXJyYXlQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5U2xvdCgKIC8vIEhlbHBlciBmdW5jdGlvbgogc3RhdGljIEpTVmFsdWUqIGdldFByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAg
UHJvcGVydHlTbG90IHNsb3Q7CisgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqKTsKICAgICBpZiAo
IW9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgb2JqLCBpbmRleCk7CisgICAgcmV0
dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogfQogCiBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmKQpAQCAtNTAwLDEyICs1MDAsMTIgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGaWx0ZXIo
RXhlY1N0YXRlKgogICAgIHVuc2lnbmVkIGZpbHRlckluZGV4ID0gMDsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkt
PnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYg
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmopOwogCiAgICAgICAgIGlmICghdGhp
c09iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGssIHNsb3QpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgdGhpc09iaiwg
ayk7CisgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGspOwogCiAgICAg
ICAgIExpc3QgZWFjaEFyZ3VtZW50czsKIApAQCAtNTM2LDExICs1MzYsMTEgQEAgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleAogICAgIEpTT2JqZWN0KiByZXN1bHRBcnJh
eSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5h
cnJheUNvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLCBtYXBBcmdzKSk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytr
KSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCh0aGlzT2JqKTsKICAgICAgICAgaWYgKCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aywgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0g
c2xvdC5nZXRWYWx1ZShleGVjLCB0aGlzT2JqLCBrKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IHNs
b3QuZ2V0VmFsdWUoZXhlYywgayk7CiAKICAgICAgICAgTGlzdCBlYWNoQXJndW1lbnRzOwogCkBA
IC01NzMsMTQgKzU3MywxNCBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0
ZSogCiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmop
OwogCiAgICAgICAgIGlmICghdGhpc09iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGssIHNsb3Qp
KQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgTGlzdCBlYWNoQXJndW1lbnRzOwog
Ci0gICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhlYywgdGhpc09i
aiwgaykpOworICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChzbG90LmdldFZhbHVlKGV4ZWMs
IGspKTsKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoaykpOwogICAgICAg
ICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIApAQCAtNjA2LDEyICs2MDYsMTIgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZQogCiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LT50b1VJbnQzMihleGVjKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYm
ICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90
OworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqKTsKICAgICAgICAgaWYgKCF0aGlz
T2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBMaXN0IGVhY2hBcmd1bWVudHM7Ci0gICAgICAgIGVhY2hBcmd1bWVudHMu
YXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhlYywgdGhpc09iaiwgaykpOworICAgICAgICBlYWNoQXJn
dW1lbnRzLmFwcGVuZChzbG90LmdldFZhbHVlKGV4ZWMsIGspKTsKICAgICAgICAgZWFjaEFyZ3Vt
ZW50cy5hcHBlbmQoanNOdW1iZXIoaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0
aGlzT2JqKTsKIApAQCAtNjMzLDEyICs2MzMsMTIgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNT
b21lKEV4ZWNTdGF0ZSogZQogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsg
KytrKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdCh0aGlzT2JqKTsKICAgICAgICAgaWYgKCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
Yywgaywgc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMaXN0IGVhY2hB
cmd1bWVudHM7Ci0gICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHNsb3QuZ2V0VmFsdWUoZXhl
YywgdGhpc09iaiwgaykpOworICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChzbG90LmdldFZh
bHVlKGV4ZWMsIGspKTsKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoaykp
OwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9m
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDIxICs5OSwyMSBAQCBKU1ZhbHVlKiBG
dW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlCiAgICAgfQogfQogCi1KU1ZhbHVlKiBGdW5j
dGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogRnVuY3Rp
b25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnVuY3Rpb25JbXAqIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgQVNTRVJU
KGV4ZWMtPm1hY2hpbmUoKSk7CiAgICAgcmV0dXJuIGV4ZWMtPm1hY2hpbmUoKS0+cmV0cmlldmVB
cmd1bWVudHMoZXhlYywgdGhpc09iaik7CiB9CiAKLUpTVmFsdWUqIEZ1bmN0aW9uSW1wOjpjYWxs
ZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBGdW5jdGlvbkltcDo6Y2FsbGVyR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBGdW5jdGlvbkltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0
aW9uSW1wKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBBU1NFUlQoZXhlYy0+bWFjaGluZSgpKTsK
ICAgICByZXR1cm4gZXhlYy0+bWFjaGluZSgpLT5yZXRyaWV2ZUNhbGxlcihleGVjLCB0aGlzT2Jq
KTsKIH0KIAotSlNWYWx1ZSogRnVuY3Rpb25JbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlKiBGdW5jdGlvbkltcDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnVuY3Rpb25JbXAqIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAg
cmV0dXJuIGpzTnVtYmVyKHRoaXNPYmotPmJvZHktPnBhcmFtZXRlcnMoKS5zaXplKCkpOwpAQCAt
MzAyLDcgKzMwMiw3IEBAIHZvaWQgQXJndW1lbnRzOjptYXJrKCkgCiAgICAgX2FjdGl2YXRpb25P
YmplY3QtPm1hcmsoKTsKIH0KIAotSlNWYWx1ZSogQXJndW1lbnRzOjptYXBwZWRJbmRleEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBBcmd1bWVudHM6Om1hcHBl
ZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEFyZ3VtZW50cyogdGhpc09iaiA9
IHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiB0aGlz
T2JqLT5fYWN0aXZhdGlvbk9iamVjdC0+Z2V0KGV4ZWMsIHRoaXNPYmotPmluZGV4VG9OYW1lTWFw
W3Byb3BlcnR5TmFtZV0pOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDM0MTUx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDkgKzg2LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHByaXZhdGU6CiAgICAgU2NvcGVDaGFpbiBf
c2NvcGU7CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyBKU1ZhbHVlKiBjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUq
IGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSogY2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
ICAgfTsKIAogICBjbGFzcyBJbmRleFRvTmFtZU1hcCB7CkBAIC0xMTUsNyArMTE1LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
ICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlKiBtYXBwZWRJbmRleEdldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBtYXBwZWRJbmRleEdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAogICAgIEpTQWN0
aXZhdGlvbiogX2FjdGl2YXRpb25PYmplY3Q7CiAgICAgbXV0YWJsZSBJbmRleFRvTmFtZU1hcCBp
bmRleFRvTmFtZU1hcDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3Bw
CShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOCArMTY3LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9u
T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRQogCiAgICAgLy8gTm8gcHJvZ3JhbSBub2RlID09IHN5bnRh
eCBlcnJvciAtIHRocm93IGEgc3ludGF4IGVycm9yCiAgICAgaWYgKCFmdW5jdGlvbkJvZHkpCi0g
ICAgICAgIC8vIFdlIGNhbid0IHJldHVybiBhIENvbXBsZXRpb24oVGhyb3cpIGhlcmUsIHNvIGp1
c3Qgc2V0IHRoZSBleGNlcHRpb24KLSAgICAgICAgLy8gYW5kIHJldHVybiBpdAogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3Vy
Y2VJZCwgc291cmNlVVJMKTsKICAgICAKICAgICBmdW5jdGlvbkJvZHktPnNldFNvdXJjZShTb3Vy
Y2VSYW5nZShzb3VyY2UsIDAsIHNvdXJjZS0+bGVuZ3RoKCkpKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9ncmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2dyYW1t
YXIueQkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogCiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC02MSw4ICs2MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd0F1dG9tYXRp
Y1NlbWljb2wKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi1z
dGF0aWMgQWRkTm9kZSogbWFrZUFkZE5vZGUoRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9k
ZSopOwotc3RhdGljIExlc3NOb2RlKiBtYWtlTGVzc05vZGUoRXhwcmVzc2lvbk5vZGUqLCBFeHBy
ZXNzaW9uTm9kZSopOwogc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShFeHBy
ZXNzaW9uTm9kZSogbG9jLCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGJvb2wgbG9j
SGFzQXNzaWdubWVudHMsIGJvb2wgZXhwckhhc0Fzc2lnbm1lbnRzKTsKIHN0YXRpYyBFeHByZXNz
aW9uTm9kZSogbWFrZVByZWZpeE5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yKTsK
IHN0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZVBvc3RmaXhOb2RlKEV4cHJlc3Npb25Ob2RlKiBl
eHByLCBPcGVyYXRvcik7CkBAIC03MSwxMSArNjksOSBAQCBzdGF0aWMgRXhwcmVzc2lvbk5vZGVJ
bmZvIG1ha2VGdW5jdGlvbkNhCiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VUeXBlT2ZOb2Rl
KEV4cHJlc3Npb25Ob2RlKik7CiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VEZWxldGVOb2Rl
KEV4cHJlc3Npb25Ob2RlKik7CiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VOZWdhdGVOb2Rl
KEV4cHJlc3Npb25Ob2RlKik7Ci1zdGF0aWMgTnVtYmVyTm9kZSogbWFrZU51bWJlck5vZGUoZG91
YmxlKTsKIHN0YXRpYyBTdGF0ZW1lbnROb2RlKiBtYWtlVmFyU3RhdGVtZW50Tm9kZShFeHByZXNz
aW9uTm9kZSopOwogc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBjb21iaW5lVmFySW5pdGlhbGl6ZXJz
KEV4cHJlc3Npb25Ob2RlKiBsaXN0LCBBc3NpZ25SZXNvbHZlTm9kZSogaW5pdCk7CiAKLQogI2lm
IENPTVBJTEVSKE1TVkMpCiAKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQpAQCAtMjgy
LDcgKzI3OCw3IEBAIExpdGVyYWw6CiAgICAgTlVMTFRPS0VOICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBO
dWxsTm9kZSwgMCk7IH0KICAgfCBUUlVFVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obmV3IFRydWVOb2Rl
LCAwKTsgfQogICB8IEZBTFNFVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBj
cmVhdGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUqPihuZXcgRmFsc2VOb2RlLCAwKTsg
fQotICB8IE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVO
b2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUqPihtYWtlTnVtYmVyTm9kZSgkMSksIDApOyB9
CisgIHwgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5v
ZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBOdW1iZXJOb2RlKCQxKSwgMCk7IH0K
ICAgfCBTVFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9k
ZUZlYXR1cmVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obmV3IFN0cmluZ05vZGUoJDEpLCAwKTsgfQog
ICB8ICcvJyAvKiByZWdleHAgKi8gICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGV4ZXImIGwgPSAqTEVYRVI7CkBAIC00NzUs
MTQgKzQ3MSwxNCBAQCBNdWx0aXBsaWNhdGl2ZUV4cHJOb0JGOgogCiBBZGRpdGl2ZUV4cHI6CiAg
ICAgTXVsdGlwbGljYXRpdmVFeHByCi0gIHwgQWRkaXRpdmVFeHByICcrJyBNdWx0aXBsaWNhdGl2
ZUV4cHIgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG1ha2VB
ZGROb2RlKCQxLm1fbm9kZSwgJDMubV9ub2RlKSwgJDEubV9mZWF0dXJlSW5mbyB8ICQzLm1fZmVh
dHVyZUluZm8pOyB9CisgIHwgQWRkaXRpdmVFeHByICcrJyBNdWx0aXBsaWNhdGl2ZUV4cHIgeyAk
JCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBBZGROb2RlKCQx
Lm1fbm9kZSwgJDMubV9ub2RlKSwgJDEubV9mZWF0dXJlSW5mbyB8ICQzLm1fZmVhdHVyZUluZm8p
OyB9CiAgIHwgQWRkaXRpdmVFeHByICctJyBNdWx0aXBsaWNhdGl2ZUV4cHIgeyAkJCA9IGNyZWF0
ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBTdWJOb2RlKCQxLm1fbm9kZSwg
JDMubV9ub2RlKSwgJDEubV9mZWF0dXJlSW5mbyB8ICQzLm1fZmVhdHVyZUluZm8pOyB9CiA7CiAK
IEFkZGl0aXZlRXhwck5vQkY6CiAgICAgTXVsdGlwbGljYXRpdmVFeHByTm9CRgogICB8IEFkZGl0
aXZlRXhwck5vQkYgJysnIE11bHRpcGxpY2F0aXZlRXhwcgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lv
bk5vZGUqPihtYWtlQWRkTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSksICQxLm1fZmVhdHVyZUlu
Zm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUqPihu
ZXcgQWRkTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSksICQxLm1fZmVhdHVyZUluZm8gfCAkMy5t
X2ZlYXR1cmVJbmZvKTsgfQogICB8IEFkZGl0aXZlRXhwck5vQkYgJy0nIE11bHRpcGxpY2F0aXZl
RXhwcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVh
dGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUqPihuZXcgU3ViTm9kZSgkMS5tX25vZGUs
ICQzLm1fbm9kZSksICQxLm1fZmVhdHVyZUluZm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQogOwpA
QCAtNTAzLDcgKzQ5OSw3IEBAIFNoaWZ0RXhwck5vQkY6CiAKIFJlbGF0aW9uYWxFeHByOgogICAg
IFNoaWZ0RXhwcgotICB8IFJlbGF0aW9uYWxFeHByICc8JyBTaGlmdEV4cHIgICAgICAgIHsgJCQg
PSBjcmVhdGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUqPihtYWtlTGVzc05vZGUoJDEu
bV9ub2RlLCAkMy5tX25vZGUpLCAkMS5tX2ZlYXR1cmVJbmZvIHwgJDMubV9mZWF0dXJlSW5mbyk7
IH0KKyAgfCBSZWxhdGlvbmFsRXhwciAnPCcgU2hpZnRFeHByICAgICAgICB7ICQkID0gY3JlYXRl
Tm9kZUZlYXR1cmVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obmV3IExlc3NOb2RlKCQxLm1fbm9kZSwg
JDMubV9ub2RlKSwgJDEubV9mZWF0dXJlSW5mbyB8ICQzLm1fZmVhdHVyZUluZm8pOyB9CiAgIHwg
UmVsYXRpb25hbEV4cHIgJz4nIFNoaWZ0RXhwciAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0
dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBHcmVhdGVyTm9kZSgkMS5tX25vZGUsICQzLm1f
bm9kZSksICQxLm1fZmVhdHVyZUluZm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQogICB8IFJlbGF0
aW9uYWxFeHByIExFIFNoaWZ0RXhwciAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUlu
Zm88RXhwcmVzc2lvbk5vZGUqPihuZXcgTGVzc0VxTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSks
ICQxLm1fZmVhdHVyZUluZm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQogICB8IFJlbGF0aW9uYWxF
eHByIEdFIFNoaWZ0RXhwciAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88RXhw
cmVzc2lvbk5vZGUqPihuZXcgR3JlYXRlckVxTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSksICQx
Lm1fZmVhdHVyZUluZm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQpAQCAtNTEzLDcgKzUwOSw3IEBA
IFJlbGF0aW9uYWxFeHByOgogCiBSZWxhdGlvbmFsRXhwck5vSW46CiAgICAgU2hpZnRFeHByCi0g
IHwgUmVsYXRpb25hbEV4cHJOb0luICc8JyBTaGlmdEV4cHIgICAgeyAkJCA9IGNyZWF0ZU5vZGVG
ZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG1ha2VMZXNzTm9kZSgkMS5tX25vZGUsICQzLm1f
bm9kZSksICQxLm1fZmVhdHVyZUluZm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQorICB8IFJlbGF0
aW9uYWxFeHByTm9JbiAnPCcgU2hpZnRFeHByICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUlu
Zm88RXhwcmVzc2lvbk5vZGUqPihuZXcgTGVzc05vZGUoJDEubV9ub2RlLCAkMy5tX25vZGUpLCAk
MS5tX2ZlYXR1cmVJbmZvIHwgJDMubV9mZWF0dXJlSW5mbyk7IH0KICAgfCBSZWxhdGlvbmFsRXhw
ck5vSW4gJz4nIFNoaWZ0RXhwciAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPEV4cHJl
c3Npb25Ob2RlKj4obmV3IEdyZWF0ZXJOb2RlKCQxLm1fbm9kZSwgJDMubV9ub2RlKSwgJDEubV9m
ZWF0dXJlSW5mbyB8ICQzLm1fZmVhdHVyZUluZm8pOyB9CiAgIHwgUmVsYXRpb25hbEV4cHJOb0lu
IExFIFNoaWZ0RXhwciAgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9u
Tm9kZSo+KG5ldyBMZXNzRXFOb2RlKCQxLm1fbm9kZSwgJDMubV9ub2RlKSwgJDEubV9mZWF0dXJl
SW5mbyB8ICQzLm1fZmVhdHVyZUluZm8pOyB9CiAgIHwgUmVsYXRpb25hbEV4cHJOb0luIEdFIFNo
aWZ0RXhwciAgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9uTm9kZSo+
KG5ldyBHcmVhdGVyRXFOb2RlKCQxLm1fbm9kZSwgJDMubV9ub2RlKSwgJDEubV9mZWF0dXJlSW5m
byB8ICQzLm1fZmVhdHVyZUluZm8pOyB9CkBAIC01MjMsNyArNTE5LDcgQEAgUmVsYXRpb25hbEV4
cHJOb0luOgogCiBSZWxhdGlvbmFsRXhwck5vQkY6CiAgICAgU2hpZnRFeHByTm9CRgotICB8IFJl
bGF0aW9uYWxFeHByTm9CRiAnPCcgU2hpZnRFeHByICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVy
ZUluZm88RXhwcmVzc2lvbk5vZGUqPihtYWtlTGVzc05vZGUoJDEubV9ub2RlLCAkMy5tX25vZGUp
LCAkMS5tX2ZlYXR1cmVJbmZvIHwgJDMubV9mZWF0dXJlSW5mbyk7IH0KKyAgfCBSZWxhdGlvbmFs
RXhwck5vQkYgJzwnIFNoaWZ0RXhwciAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPEV4
cHJlc3Npb25Ob2RlKj4obmV3IExlc3NOb2RlKCQxLm1fbm9kZSwgJDMubV9ub2RlKSwgJDEubV9m
ZWF0dXJlSW5mbyB8ICQzLm1fZmVhdHVyZUluZm8pOyB9CiAgIHwgUmVsYXRpb25hbEV4cHJOb0JG
ICc+JyBTaGlmdEV4cHIgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9u
Tm9kZSo+KG5ldyBHcmVhdGVyTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSksICQxLm1fZmVhdHVy
ZUluZm8gfCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQogICB8IFJlbGF0aW9uYWxFeHByTm9CRiBMRSBT
aGlmdEV4cHIgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUq
PihuZXcgTGVzc0VxTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSksICQxLm1fZmVhdHVyZUluZm8g
fCAkMy5tX2ZlYXR1cmVJbmZvKTsgfQogICB8IFJlbGF0aW9uYWxFeHByTm9CRiBHRSBTaGlmdEV4
cHIgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88RXhwcmVzc2lvbk5vZGUqPihuZXcg
R3JlYXRlckVxTm9kZSgkMS5tX25vZGUsICQzLm1fbm9kZSksICQxLm1fZmVhdHVyZUluZm8gfCAk
My5tX2ZlYXR1cmVJbmZvKTsgfQpAQCAtMTA5MiwzOSArMTA4OCw2IEBAIFNvdXJjZUVsZW1lbnQ6
CiAgCiAlJQogCi1zdGF0aWMgQWRkTm9kZSogbWFrZUFkZE5vZGUoRXhwcmVzc2lvbk5vZGUqIGxl
ZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCkKLXsKLSAgICBKU1R5cGUgdDEgPSBsZWZ0LT5leHBl
Y3RlZFJldHVyblR5cGUoKTsKLSAgICBKU1R5cGUgdDIgPSByaWdodC0+ZXhwZWN0ZWRSZXR1cm5U
eXBlKCk7Ci0KLSAgICBpZiAodDEgPT0gTnVtYmVyVHlwZSAmJiB0MiA9PSBOdW1iZXJUeXBlKQot
ICAgICAgICByZXR1cm4gbmV3IEFkZE51bWJlcnNOb2RlKGxlZnQsIHJpZ2h0KTsKLSAgICBpZiAo
dDEgPT0gU3RyaW5nVHlwZSAmJiB0MiA9PSBTdHJpbmdUeXBlKQotICAgICAgICByZXR1cm4gbmV3
IEFkZFN0cmluZ3NOb2RlKGxlZnQsIHJpZ2h0KTsKLSAgICBpZiAodDEgPT0gU3RyaW5nVHlwZSkK
LSAgICAgICAgcmV0dXJuIG5ldyBBZGRTdHJpbmdMZWZ0Tm9kZShsZWZ0LCByaWdodCk7Ci0gICAg
aWYgKHQyID09IFN0cmluZ1R5cGUpCi0gICAgICAgIHJldHVybiBuZXcgQWRkU3RyaW5nUmlnaHRO
b2RlKGxlZnQsIHJpZ2h0KTsKLSAgICByZXR1cm4gbmV3IEFkZE5vZGUobGVmdCwgcmlnaHQpOwot
fQotCi1zdGF0aWMgTGVzc05vZGUqIG1ha2VMZXNzTm9kZShFeHByZXNzaW9uTm9kZSogbGVmdCwg
RXhwcmVzc2lvbk5vZGUqIHJpZ2h0KQotewotICAgIEpTVHlwZSB0MSA9IGxlZnQtPmV4cGVjdGVk
UmV0dXJuVHlwZSgpOwotICAgIEpTVHlwZSB0MiA9IHJpZ2h0LT5leHBlY3RlZFJldHVyblR5cGUo
KTsKLSAgICAKLSAgICBpZiAodDEgPT0gU3RyaW5nVHlwZSAmJiB0MiA9PSBTdHJpbmdUeXBlKQot
ICAgICAgICByZXR1cm4gbmV3IExlc3NTdHJpbmdzTm9kZShsZWZ0LCByaWdodCk7Ci0KLSAgICAv
LyBUaGVyZSBhcmUgY2VydGFpbmx5IG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcyB0eXBl
IGNoZWNrIGlmIG5lY2Vzc2FyeQotICAgIGlmICh0MSA9PSBOdW1iZXJUeXBlIHx8IHQxID09IEJv
b2xlYW5UeXBlIHx8IHQxID09IFVuZGVmaW5lZFR5cGUgfHwgdDEgPT0gTnVsbFR5cGUgfHwKLSAg
ICAgICAgdDIgPT0gTnVtYmVyVHlwZSB8fCB0MiA9PSBCb29sZWFuVHlwZSB8fCB0MiA9PSBVbmRl
ZmluZWRUeXBlIHx8IHQyID09IE51bGxUeXBlKQotICAgICAgICByZXR1cm4gbmV3IExlc3NOdW1i
ZXJzTm9kZShsZWZ0LCByaWdodCk7Ci0KLSAgICAvLyBOZWl0aGVyIGlzIGNlcnRhaW4gdG8gYmUg
YSBudW1iZXIsIG5vciB3ZXJlIGJvdGggY2VydGFpbiB0byBiZSBzdHJpbmdzLCBzbyB3ZSB1c2Ug
dGhlIGRlZmF1bHQgKHNsb3cpIGltcGxlbWVudGF0aW9uLgotICAgIHJldHVybiBuZXcgTGVzc05v
ZGUobGVmdCwgcmlnaHQpOwotfQotCiBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25O
b2RlKEV4cHJlc3Npb25Ob2RlKiBsb2MsIE9wZXJhdG9yIG9wLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgYm9vbCBsb2NIYXNBc3NpZ25tZW50cywgYm9vbCBleHBySGFzQXNzaWdubWVudHMpCiB7CiAg
ICAgaWYgKCFsb2MtPmlzTG9jYXRpb24oKSkKQEAgLTEyNzcsMTQgKzEyNDAsNiBAQCBzdGF0aWMg
RXhwcmVzc2lvbk5vZGUqIG1ha2VOZWdhdGVOb2RlKEV4CiAgICAgcmV0dXJuIG5ldyBOZWdhdGVO
b2RlKG4pOwogfQogCi1zdGF0aWMgTnVtYmVyTm9kZSogbWFrZU51bWJlck5vZGUoZG91YmxlIGQp
Ci17Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsKLSAgICBpZiAo
dmFsdWUpCi0gICAgICAgIHJldHVybiBuZXcgSW1tZWRpYXRlTnVtYmVyTm9kZSh2YWx1ZSwgZCk7
Ci0gICAgcmV0dXJuIG5ldyBOdW1iZXJOb2RlKGQpOwotfQotCiAvKiBjYWxsZWQgYnkgeXlwYXJz
ZSBvbiBlcnJvciAqLwogaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqKQogewpAQCAtMTMwMSw3ICsx
MjU2LDcgQEAgc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBjb21iaW5lVmFySW5pdGlhbAogewogICAg
IGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuIGluaXQ7Ci0gICAgcmV0dXJuIG5ldyBWYXJEZWNs
Q29tbWFOb2RlKGxpc3QsIGluaXQpOworICAgIHJldHVybiBuZXcgQ29tbWFOb2RlKGxpc3QsIGlu
aXQpOwogfQogCiAvLyBXZSB0dXJuIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpbnRvIGVpdGhlciBh
c3NpZ25tZW50cyBvciBlbXB0eQpAQCAtMTMxMyw0ICsxMjY4LDMgQEAgc3RhdGljIFN0YXRlbWVu
dE5vZGUqIG1ha2VWYXJTdGF0ZW1lbnRObwogICAgICAgICByZXR1cm4gbmV3IEVtcHR5U3RhdGVt
ZW50Tm9kZSgpOwogICAgIHJldHVybiBuZXcgVmFyU3RhdGVtZW50Tm9kZShleHByKTsKIH0KLQpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDExIEBA
IEpTT2JqZWN0KiBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gbmV3
IFN0cmluZ0luc3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90
eXBlKCksIGNvbnN0X2Nhc3Q8U3RyaW5nSW1wKj4odGhpcykpOwogfQogCitKU09iamVjdCogU3Ry
aW5nSW1wOjp0b1RoaXNPYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVy
biBuZXcgU3RyaW5nSW5zdGFuY2UoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQ
cm90b3R5cGUoKSwgY29uc3RfY2FzdDxTdHJpbmdJbXAqPih0aGlzKSk7Cit9CisKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEpTVHlwZSBOdW1iZXJJbXA6OnR5cGUoKSBjb25zdApAQCAtMTI2
LDYgKzEzMSwxMyBAQCBKU09iamVjdCAqTnVtYmVySW1wOjp0b09iamVjdChFeGVjU3RhdGUgCiAg
IHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm51bWJlckNvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKIH0KIAorSlNP
YmplY3QqIE51bWJlckltcDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sK
KyAgICBMaXN0IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoY29uc3RfY2FzdDxOdW1iZXJJbXAqPih0
aGlzKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5udW1iZXJDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgYXJncykp
OworfQorCiBib29sIE51bWJlckltcDo6Z2V0VUludDMyKHVpbnQzMl90JiB1aW50MzIpIGNvbnN0
CiB7CiAgICAgdWludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbCk7CkBAIC0xOTcsNiAr
MjA5LDM0IEBAIEpTT2JqZWN0ICpHZXR0ZXJTZXR0ZXJJbXA6OnRvT2JqZWN0KEV4ZWMKICAgICBy
ZXR1cm4ganNOdWxsKCktPnRvT2JqZWN0KGV4ZWMpOwogfQogCitib29sIEdldHRlclNldHRlcklt
cDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBHZXR0ZXJTZXR0ZXJJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR2V0dGVyU2V0dGVySW1wOjpwdXQoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIEdldHRlclNldHRlckltcDo6cHV0KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkLCBKU1ZhbHVlKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSlNP
YmplY3QqIEdldHRlclNldHRlckltcDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMYWJlbFN0YWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgTGFiZWxTdGFjazo6cHVzaChjb25zdCBJZGVudGlmaWVy
ICZpZCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBKU09iamVjdCAqdG9PYmplY3QoRXhlY1N0YXRlICpl
eGVjKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7Ci0gICAgCisgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSop
IGNvbnN0OworCiAgICAgVVN0cmluZyB2YWw7CiAgIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cnByZXRlci5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnBy
ZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTIgQEAKICNpZm5kZWYgS0pTX0lu
dGVycHJldGVyX2gKICNkZWZpbmUgS0pTX0ludGVycHJldGVyX2gKIAorI2luY2x1ZGUgImNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKLSAgY2xhc3MgQ29tcGxldGlvbjsK
ICAgY2xhc3MgRXhlY1N0YXRlOwogICBjbGFzcyBKU1ZhbHVlOwogICBjbGFzcyBTY29wZUNoYWlu
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9sZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsMjQgQEAgTGV4
ZXI6On5MZXhlcigpCiAgICAgZGVsZXRlW10gbWFpblRhYmxlLnRhYmxlOwogfQogCitpbmxpbmUg
dm9pZCBMZXhlcjo6c2hpZnQoKQoreworICAgIC8vIEVDTUEtMjYyIGNhbGxzIGZvciBzdHJpcHBp
bmcgQ2YgY2hhcmFjdGVycyBoZXJlLCBidXQgd2Ugb25seSBkbyB0aGlzIGZvciBCT00sCisgICAg
Ly8gc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzMT4uCisK
KyAgICBjdXJyZW50ID0gbmV4dDE7CisgICAgbmV4dDEgPSBuZXh0MjsKKyAgICBuZXh0MiA9IG5l
eHQzOworICAgIGRvIHsKKyAgICAgICAgaWYgKHBvcyA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAg
IHBvcysrOworICAgICAgICAgICAgbmV4dDMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG5leHQzID0gY29kZVtwb3MrK107CisgICAgfSB3aGlsZSAobmV4dDMg
PT0gMHhGRUZGKTsKK30KKwogdm9pZCBMZXhlcjo6c2V0Q29kZShpbnQgc3RhcnRpbmdMaW5lTnVt
YmVyLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2UpCiB7CiAgICAgeXlsaW5lbm8g
PSAxICsgc3RhcnRpbmdMaW5lTnVtYmVyOwpAQCAtMTIwLDI3ICsxMzgsMTAgQEAgdm9pZCBMZXhl
cjo6c2V0Q29kZShpbnQgc3RhcnRpbmdMaW5lTnVtYgogICAgIGF0TGluZVN0YXJ0ID0gdHJ1ZTsK
IAogICAgIC8vIHJlYWQgZmlyc3QgY2hhcmFjdGVycwotICAgIHNoaWZ0KDQpOwotfQotCi12b2lk
IExleGVyOjpzaGlmdCh1bnNpZ25lZCBwKQotewotICAgIC8vIEVDTUEtMjYyIGNhbGxzIGZvciBz
dHJpcHBpbmcgQ2YgY2hhcmFjdGVycyBoZXJlLCBidXQgd2Ugb25seSBkbyB0aGlzIGZvciBCT00s
Ci0gICAgLy8gc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkz
MT4uCi0KLSAgICB3aGlsZSAocC0tKSB7Ci0gICAgICAgIGN1cnJlbnQgPSBuZXh0MTsKLSAgICAg
ICAgbmV4dDEgPSBuZXh0MjsKLSAgICAgICAgbmV4dDIgPSBuZXh0MzsKLSAgICAgICAgZG8gewot
ICAgICAgICAgICAgaWYgKHBvcyA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBwb3MrKzsK
LSAgICAgICAgICAgICAgICBuZXh0MyA9IC0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbmV4dDMgPSBjb2RlW3BvcysrXTsKLSAgICAgICAgfSB3
aGlsZSAobmV4dDMgPT0gMHhGRUZGKTsKLSAgICB9CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKIH0KIAogLy8gY2FsbGVkIG9uIGVhY2ggbmV3
IGxpbmUKQEAgLTE4NywxNyArMTg4LDE3IEBAIGludCBMZXhlcjo6bGV4KHZvaWQqIHAxLCB2b2lk
KiBwMikKICAgICB7CiAgICAgICAgIHNraXBMRiA9IGZhbHNlOwogICAgICAgICBza2lwQ1IgPSBm
YWxzZTsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0KCk7CiAgICAgfQogICAgIHN3
aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIFN0YXJ0OgogICAgICAgaWYgKGlzV2hpdGVTcGFjZSgp
KSB7CiAgICAgICAgIC8vIGRvIG5vdGhpbmcKICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAn
LycgJiYgbmV4dDEgPT0gJy8nKSB7Ci0gICAgICAgIHNoaWZ0KDEpOworICAgICAgICBzaGlmdCgp
OwogICAgICAgICBzdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1lbnQ7CiAgICAgICB9IGVsc2UgaWYg
KGN1cnJlbnQgPT0gJy8nICYmIG5leHQxID09ICcqJykgewotICAgICAgICBzaGlmdCgxKTsKKyAg
ICAgICAgc2hpZnQoKTsKICAgICAgICAgc3RhdGUgPSBJbk11bHRpTGluZUNvbW1lbnQ7CiAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gLTEpIHsKICAgICAgICAgaWYgKCF0ZXJtaW5hdG9yICYm
ICFkZWxpbWl0ZWQpIHsKQEAgLTIzNCwyNSArMjM1LDI3IEBAIGludCBMZXhlcjo6bGV4KHZvaWQq
IHAxLCB2b2lkKiBwMikKICAgICAgICAgLy8gPCEtLSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEg
bGluZSBjb21tZW50IChmb3Igd3d3IHVzYWdlKQogICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09
ICc8JyAmJiBuZXh0MSA9PSAnIScgJiYKICAgICAgICAgICAgICAgICAgbmV4dDIgPT0gJy0nICYm
IG5leHQzID09ICctJykgewotICAgICAgICBzaGlmdCgzKTsKKyAgICAgICAgc2hpZnQoKTsKKyAg
ICAgICAgc2hpZnQoKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgICAgc3RhdGUgPSBJblNpbmds
ZUxpbmVDb21tZW50OwogICAgICAgICAvLyBzYW1lIGZvciAtLT4KICAgICAgIH0gZWxzZSBpZiAo
YXRMaW5lU3RhcnQgJiYgY3VycmVudCA9PSAnLScgJiYgbmV4dDEgPT0gJy0nICYmICBuZXh0MiA9
PSAnPicpIHsKLSAgICAgICAgc2hpZnQoMik7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHNo
aWZ0KCk7CiAgICAgICAgIHN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgIHRva2VuID0gbWF0Y2hQdW5jdHVhdG9yKGx2YWxwLT5pbnRWYWx1ZSwgY3Vy
cmVudCwgbmV4dDEsIG5leHQyLCBuZXh0Myk7CiAgICAgICAgIGlmICh0b2tlbiAhPSAtMSkgewog
ICAgICAgICAgIHNldERvbmUoT3RoZXIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8v
ICAgICAgY2VyciA8PCAiZW5jb3VudGVyZWQgdW5rbm93biBjaGFyYWN0ZXIiIDw8IGVuZGw7CiAg
ICAgICAgICAgc2V0RG9uZShCYWQpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsK
ICAgICBjYXNlIEluU3RyaW5nOgogICAgICAgaWYgKGN1cnJlbnQgPT0gc3RyaW5nVHlwZSkgewot
ICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgICAgc2V0RG9uZShTdHJp
bmcpOwogICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKCkgfHwgY3VycmVudCA9PSAt
MSkgewogICAgICAgICBzZXREb25lKEJhZCk7CkBAIC0yNjUsMTQgKzI2OCwxNCBAQCBpbnQgTGV4
ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgLy8gRXNjYXBlIFNlcXVlbmNlcyBpbnNp
ZGUgb2Ygc3RyaW5ncwogICAgIGNhc2UgSW5Fc2NhcGVTZXF1ZW5jZToKICAgICAgIGlmIChpc09j
dGFsRGlnaXQoY3VycmVudCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQgPj0gJzAnICYmIGN1cnJl
bnQgPD0gJzMnICYmCi0gICAgICAgICAgICBpc09jdGFsRGlnaXQobmV4dDEpICYmIGlzT2N0YWxE
aWdpdChuZXh0MikpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPj0gJzAnICYmIGN1cnJlbnQgPD0g
JzMnICYmIGlzT2N0YWxEaWdpdChuZXh0MSkgJiYgaXNPY3RhbERpZ2l0KG5leHQyKSkgewogICAg
ICAgICAgIHJlY29yZDE2KGNvbnZlcnRPY3RhbChjdXJyZW50LCBuZXh0MSwgbmV4dDIpKTsKLSAg
ICAgICAgICBzaGlmdCgyKTsKKyAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgIHNoaWZ0KCk7
CiAgICAgICAgICAgc3RhdGUgPSBJblN0cmluZzsKICAgICAgICAgfSBlbHNlIGlmIChpc09jdGFs
RGlnaXQoY3VycmVudCkgJiYgaXNPY3RhbERpZ2l0KG5leHQxKSkgewogICAgICAgICAgIHJlY29y
ZDE2KGNvbnZlcnRPY3RhbCgnMCcsIGN1cnJlbnQsIG5leHQxKSk7Ci0gICAgICAgICAgc2hpZnQo
MSk7CisgICAgICAgICAgc2hpZnQoKTsKICAgICAgICAgICBzdGF0ZSA9IEluU3RyaW5nOwogICAg
ICAgICB9IGVsc2UgaWYgKGlzT2N0YWxEaWdpdChjdXJyZW50KSkgewogICAgICAgICAgIHJlY29y
ZDE2KGNvbnZlcnRPY3RhbCgnMCcsICcwJywgY3VycmVudCkpOwpAQCAtMjk2LDEwICsyOTksMTAg
QEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgaWYgKGlzSGV4RGln
aXQoY3VycmVudCkgJiYgaXNIZXhEaWdpdChuZXh0MSkpIHsKICAgICAgICAgc3RhdGUgPSBJblN0
cmluZzsKICAgICAgICAgcmVjb3JkMTYoY29udmVydEhleChjdXJyZW50LCBuZXh0MSkpOwotICAg
ICAgICBzaGlmdCgxKTsKKyAgICAgICAgc2hpZnQoKTsKICAgICAgIH0gZWxzZSBpZiAoY3VycmVu
dCA9PSBzdHJpbmdUeXBlKSB7CiAgICAgICAgIHJlY29yZDE2KCd4Jyk7Ci0gICAgICAgIHNoaWZ0
KDEpOworICAgICAgICBzaGlmdCgpOwogICAgICAgICBzZXREb25lKFN0cmluZyk7CiAgICAgICB9
IGVsc2UgewogICAgICAgICByZWNvcmQxNigneCcpOwpAQCAtMzEwLDExICszMTMsMTMgQEAgaW50
IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgIGNhc2UgSW5Vbmljb2RlRXNjYXBl
OgogICAgICAgaWYgKGlzSGV4RGlnaXQoY3VycmVudCkgJiYgaXNIZXhEaWdpdChuZXh0MSkgJiYg
aXNIZXhEaWdpdChuZXh0MikgJiYgaXNIZXhEaWdpdChuZXh0MykpIHsKICAgICAgICAgcmVjb3Jk
MTYoY29udmVydFVuaWNvZGUoY3VycmVudCwgbmV4dDEsIG5leHQyLCBuZXh0MykpOwotICAgICAg
ICBzaGlmdCgzKTsKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
c2hpZnQoKTsKICAgICAgICAgc3RhdGUgPSBJblN0cmluZzsKICAgICAgIH0gZWxzZSBpZiAoY3Vy
cmVudCA9PSBzdHJpbmdUeXBlKSB7CiAgICAgICAgIHJlY29yZDE2KCd1Jyk7Ci0gICAgICAgIHNo
aWZ0KDEpOworICAgICAgICBzaGlmdCgpOwogICAgICAgICBzZXREb25lKFN0cmluZyk7CiAgICAg
ICB9IGVsc2UgewogICAgICAgICBzZXREb25lKEJhZCk7CkBAIC0zNDAsNyArMzQ1LDcgQEAgaW50
IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICBuZXh0TGluZSgpOwogICAg
ICAgfSBlbHNlIGlmIChjdXJyZW50ID09ICcqJyAmJiBuZXh0MSA9PSAnLycpIHsKICAgICAgICAg
c3RhdGUgPSBTdGFydDsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0KCk7CiAgICAg
ICB9CiAgICAgICBicmVhazsKICAgICBjYXNlIEluSWRlbnRpZmllck9yS2V5d29yZDoKQEAgLTQ0
Myw3ICs0NDgsOSBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgICAg
IGJyZWFrOwogICAgICAgfQogICAgICAgdG9rZW4gPSBjb252ZXJ0VW5pY29kZShjdXJyZW50LCBu
ZXh0MSwgbmV4dDIsIG5leHQzKTsKLSAgICAgIHNoaWZ0KDMpOworICAgICAgc2hpZnQoKTsKKyAg
ICAgIHNoaWZ0KCk7CisgICAgICBzaGlmdCgpOwogICAgICAgaWYgKCFpc0lkZW50U3RhcnQodG9r
ZW4pKSB7CiAgICAgICAgIHNldERvbmUoQmFkKTsKICAgICAgICAgYnJlYWs7CkBAIC00NTcsNyAr
NDY0LDkgQEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICBicmVh
azsKICAgICAgIH0KICAgICAgIHRva2VuID0gY29udmVydFVuaWNvZGUoY3VycmVudCwgbmV4dDEs
IG5leHQyLCBuZXh0Myk7Ci0gICAgICBzaGlmdCgzKTsKKyAgICAgIHNoaWZ0KCk7CisgICAgICBz
aGlmdCgpOworICAgICAgc2hpZnQoKTsKICAgICAgIGlmICghaXNJZGVudFBhcnQodG9rZW4pKSB7
CiAgICAgICAgIHNldERvbmUoQmFkKTsKICAgICAgICAgYnJlYWs7CkBAIC00NzEsNyArNDgwLDcg
QEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogCiAgICAgLy8gbW92ZSBvbiB0
byB0aGUgbmV4dCBjaGFyYWN0ZXIKICAgICBpZiAoIWRvbmUpCi0gICAgICBzaGlmdCgxKTsKKyAg
ICAgIHNoaWZ0KCk7CiAgICAgaWYgKHN0YXRlICE9IFN0YXJ0ICYmIHN0YXRlICE9IEluU2luZ2xl
TGluZUNvbW1lbnQpCiAgICAgICBhdExpbmVTdGFydCA9IGZhbHNlOwogICB9CkBAIC02NDgsODIg
KzY1NywxMzYgQEAgYm9vbCBMZXhlcjo6aXNPY3RhbERpZ2l0KGludCBjKQogaW50IExleGVyOjpt
YXRjaFB1bmN0dWF0b3IoaW50JiBjaGFyUG9zLCBpbnQgYzEsIGludCBjMiwgaW50IGMzLCBpbnQg
YzQpCiB7CiAgIGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz4nICYmIGMzID09ICc+JyAmJiBjNCA9
PSAnPScpIHsKLSAgICBzaGlmdCg0KTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CisgICAg
c2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBVUlNISUZURVFVQUw7Ci0gIH0gZWxz
ZSBpZiAoYzEgPT0gJz0nICYmIGMyID09ICc9JyAmJiBjMyA9PSAnPScpIHsKLSAgICBzaGlmdCgz
KTsKKyAgfQorICBpZiAoYzEgPT0gJz0nICYmIGMyID09ICc9JyAmJiBjMyA9PSAnPScpIHsKKyAg
ICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gU1RSRVE7
Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJyEnICYmIGMyID09ICc9JyAmJiBjMyA9PSAnPScpIHsKLSAg
ICBzaGlmdCgzKTsKKyAgfQorICBpZiAoYzEgPT0gJyEnICYmIGMyID09ICc9JyAmJiBjMyA9PSAn
PScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1
cm4gU1RSTkVROwotICAgfSBlbHNlIGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz4nICYmIGMzID09
ICc+JykgewotICAgIHNoaWZ0KDMpOworICAgfQorICAgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAn
PicgJiYgYzMgPT0gJz4nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0
KCk7CiAgICAgcmV0dXJuIFVSU0hJRlQ7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJzwnICYmIGMyID09
ICc8JyAmJiBjMyA9PSAnPScpIHsKLSAgICBzaGlmdCgzKTsKKyAgfQorICBpZiAoYzEgPT0gJzwn
ICYmIGMyID09ICc8JyAmJiBjMyA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7
CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gTFNISUZURVFVQUw7Ci0gIH0gZWxzZSBpZiAoYzEg
PT0gJz4nICYmIGMyID09ICc+JyAmJiBjMyA9PSAnPScpIHsKLSAgICBzaGlmdCgzKTsKKyAgfQor
ICBpZiAoYzEgPT0gJz4nICYmIGMyID09ICc+JyAmJiBjMyA9PSAnPScpIHsKKyAgICBzaGlmdCgp
OworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gUlNISUZURVFVQUw7Ci0g
IH0gZWxzZSBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9
CisgIGlmIChjMSA9PSAnPCcgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlm
dCgpOwogICAgIHJldHVybiBMRTsKLSAgfSBlbHNlIGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz0n
KSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPScpIHsK
KyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIEdFOwotICB9IGVsc2UgaWYg
KGMxID09ICchJyAmJiBjMiA9PSAnPScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEg
PT0gJyEnICYmIGMyID09ICc9JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICBy
ZXR1cm4gTkU7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJysnICYmIGMyID09ICcrJykgewotICAgIHNo
aWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnKycgJiYgYzIgPT0gJysnKSB7CisgICAgc2hpZnQo
KTsKKyAgICBzaGlmdCgpOwogICAgIGlmICh0ZXJtaW5hdG9yKQogICAgICAgcmV0dXJuIEFVVE9Q
TFVTUExVUzsKICAgICBlbHNlCiAgICAgICByZXR1cm4gUExVU1BMVVM7Ci0gIH0gZWxzZSBpZiAo
YzEgPT0gJy0nICYmIGMyID09ICctJykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9
PSAnLScgJiYgYzIgPT0gJy0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIGlm
ICh0ZXJtaW5hdG9yKQogICAgICAgcmV0dXJuIEFVVE9NSU5VU01JTlVTOwogICAgIGVsc2UKICAg
ICAgIHJldHVybiBNSU5VU01JTlVTOwotICB9IGVsc2UgaWYgKGMxID09ICc9JyAmJiBjMiA9PSAn
PScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJz0nICYmIGMyID09ICc9Jykg
eworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gRVFFUTsKLSAgfSBlbHNl
IGlmIChjMSA9PSAnKycgJiYgYzIgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAgaWYg
KGMxID09ICcrJyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAg
ICAgcmV0dXJuIFBMVVNFUVVBTDsKLSAgfSBlbHNlIGlmIChjMSA9PSAnLScgJiYgYzIgPT0gJz0n
KSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAgaWYgKGMxID09ICctJyAmJiBjMiA9PSAnPScpIHsK
KyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIE1JTlVTRVFVQUw7Ci0gIH0g
ZWxzZSBpZiAoYzEgPT0gJyonICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9Cisg
IGlmIChjMSA9PSAnKicgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OwogICAgIHJldHVybiBNVUxURVFVQUw7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJy8nICYmIGMyID09
ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnLycgJiYgYzIgPT0gJz0n
KSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBESVZFUVVBTDsKLSAg
fSBlbHNlIGlmIChjMSA9PSAnJicgJiYgYzIgPT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0K
KyAgaWYgKGMxID09ICcmJyAmJiBjMiA9PSAnPScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0
KCk7CiAgICAgcmV0dXJuIEFOREVRVUFMOwotICB9IGVsc2UgaWYgKGMxID09ICdeJyAmJiBjMiA9
PSAnPScpIHsKLSAgICBzaGlmdCgyKTsKKyAgfQorICBpZiAoYzEgPT0gJ14nICYmIGMyID09ICc9
JykgeworICAgIHNoaWZ0KCk7CisgICAgc2hpZnQoKTsKICAgICByZXR1cm4gWE9SRVFVQUw7Ci0g
IH0gZWxzZSBpZiAoYzEgPT0gJyUnICYmIGMyID09ICc9JykgewotICAgIHNoaWZ0KDIpOworICB9
CisgIGlmIChjMSA9PSAnJScgJiYgYzIgPT0gJz0nKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlm
dCgpOwogICAgIHJldHVybiBNT0RFUVVBTDsKLSAgfSBlbHNlIGlmIChjMSA9PSAnfCcgJiYgYzIg
PT0gJz0nKSB7Ci0gICAgc2hpZnQoMik7CisgIH0KKyAgaWYgKGMxID09ICd8JyAmJiBjMiA9PSAn
PScpIHsKKyAgICBzaGlmdCgpOworICAgIHNoaWZ0KCk7CiAgICAgcmV0dXJuIE9SRVFVQUw7Ci0g
IH0gZWxzZSBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc8JykgewotICAgIHNoaWZ0KDIpOworICB9
CisgIGlmIChjMSA9PSAnPCcgJiYgYzIgPT0gJzwnKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlm
dCgpOwogICAgIHJldHVybiBMU0hJRlQ7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJz4nICYmIGMyID09
ICc+JykgewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz4n
KSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBSU0hJRlQ7Ci0gIH0g
ZWxzZSBpZiAoYzEgPT0gJyYnICYmIGMyID09ICcmJykgewotICAgIHNoaWZ0KDIpOworICB9Cisg
IGlmIChjMSA9PSAnJicgJiYgYzIgPT0gJyYnKSB7CisgICAgc2hpZnQoKTsKKyAgICBzaGlmdCgp
OwogICAgIHJldHVybiBBTkQ7Ci0gIH0gZWxzZSBpZiAoYzEgPT0gJ3wnICYmIGMyID09ICd8Jykg
ewotICAgIHNoaWZ0KDIpOworICB9CisgIGlmIChjMSA9PSAnfCcgJiYgYzIgPT0gJ3wnKSB7Cisg
ICAgc2hpZnQoKTsKKyAgICBzaGlmdCgpOwogICAgIHJldHVybiBPUjsKICAgfQogCkBAIC03NTAs
MTUgKzgxMywxNSBAQCBpbnQgTGV4ZXI6Om1hdGNoUHVuY3R1YXRvcihpbnQmIGNoYXJQb3MsCiAg
ICAgY2FzZSAnWyc6CiAgICAgY2FzZSAnXSc6CiAgICAgY2FzZSAnOyc6Ci0gICAgICBzaGlmdCgx
KTsKKyAgICAgIHNoaWZ0KCk7CiAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjMSk7CiAg
ICAgY2FzZSAneyc6CiAgICAgICBjaGFyUG9zID0gcG9zIC0gNDsKLSAgICAgIHNoaWZ0KDEpOwor
ICAgICAgc2hpZnQoKTsKICAgICAgIHJldHVybiBPUEVOQlJBQ0U7CiAgICAgY2FzZSAnfSc6CiAg
ICAgICBjaGFyUG9zID0gcG9zIC0gNDsKLSAgICAgIHNoaWZ0KDEpOworICAgICAgc2hpZnQoKTsK
ICAgICAgIHJldHVybiBDTE9TRUJSQUNFOwogICAgIGRlZmF1bHQ6CiAgICAgICByZXR1cm4gLTE7
CkBAIC04NDUsNyArOTA4LDcgQEAgYm9vbCBMZXhlcjo6c2NhblJlZ0V4cCgpCiAgIHdoaWxlICgx
KSB7CiAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoKSB8fCBjdXJyZW50ID09IC0xKQogICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGVsc2UgaWYgKGN1cnJlbnQgIT0gJy8nIHx8IGxhc3RXYXNFc2Nh
cGUgPT0gdHJ1ZSB8fCBpbkJyYWNrZXRzID09IHRydWUpCisgICAgaWYgKGN1cnJlbnQgIT0gJy8n
IHx8IGxhc3RXYXNFc2NhcGUgPT0gdHJ1ZSB8fCBpbkJyYWNrZXRzID09IHRydWUpCiAgICAgewog
ICAgICAgICAvLyBrZWVwIHRyYWNrIG9mICdbJyBhbmQgJ10nCiAgICAgICAgIGlmICghbGFzdFdh
c0VzY2FwZSkgewpAQCAtODU1LDIwICs5MTgsMTkgQEAgYm9vbCBMZXhlcjo6c2NhblJlZ0V4cCgp
CiAgICAgICAgICAgICBpbkJyYWNrZXRzID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmVj
b3JkMTYoY3VycmVudCk7Ci0gICAgICAgIGxhc3RXYXNFc2NhcGUgPQotICAgICAgICAgICAgIWxh
c3RXYXNFc2NhcGUgJiYgKGN1cnJlbnQgPT0gJ1xcJyk7CisgICAgICAgIGxhc3RXYXNFc2NhcGUg
PSAhbGFzdFdhc0VzY2FwZSAmJiAoY3VycmVudCA9PSAnXFwnKTsKICAgICB9IGVsc2UgeyAvLyBl
bmQgb2YgcmVnZXhwCiAgICAgICAgIG1fcGF0dGVybiA9IFVTdHJpbmcobV9idWZmZXIxNik7CiAg
ICAgICAgIG1fYnVmZmVyMTYuY2xlYXIoKTsKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNo
aWZ0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBzaGlmdCgxKTsKKyAgICBzaGlmdCgp
OwogICB9CiAKICAgd2hpbGUgKGlzSWRlbnRQYXJ0KGN1cnJlbnQpKSB7CiAgICAgcmVjb3JkMTYo
Y3VycmVudCk7Ci0gICAgc2hpZnQoMSk7CisgICAgc2hpZnQoKTsKICAgfQogICBtX2ZsYWdzID0g
VVN0cmluZyhtX2J1ZmZlcjE2KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmgJKHJldmlzaW9uIDM0MTUx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3
ICsxMTYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBTdGF0ZSBzdGF0ZTsKICAgICB2b2lkIHNl
dERvbmUoU3RhdGUpOwogICAgIHVuc2lnbmVkIGludCBwb3M7Ci0gICAgdm9pZCBzaGlmdCh1bnNp
Z25lZCBpbnQgcCk7CisgICAgdm9pZCBzaGlmdCgpOwogICAgIHZvaWQgbmV4dExpbmUoKTsKICAg
ICBpbnQgbG9va3VwS2V5d29yZChjb25zdCBjaGFyICopOwogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvbG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5o
CShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICogQGludGVybmFs
CiAgICAqIEhlbHBlciBmb3IgZ2V0U3RhdGljRnVuY3Rpb25TbG90IGFuZCBnZXRTdGF0aWNQcm9w
ZXJ0eVNsb3QKICAgICovCi0gIGlubGluZSBKU1ZhbHVlKiBzdGF0aWNGdW5jdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCisgIGlubGluZSBKU1ZhbHVlKiBzdGF0aWNGdW5j
dGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogICB7CiAgICAgICAvLyBMb29rIGZvciBjYWNo
ZWQgdmFsdWUgaW4gZHluYW1pYyBtYXAgb2YgcHJvcGVydGllcyAoaW4gSlNPYmplY3QpCiAgICAg
ICBKU09iamVjdCogdGhpc09iaiA9IHNsb3Quc2xvdEJhc2UoKTsKQEAgLTEwMiw3ICsxMDIsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICogSGVscGVyIGZvciBnZXRTdGF0aWNWYWx1ZVNsb3QgYW5k
IGdldFN0YXRpY1Byb3BlcnR5U2xvdAogICAgKi8KICAgdGVtcGxhdGUgPGNsYXNzIFRoaXNJbXA+
Ci0gIGlubGluZSBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKKyAg
aW5saW5lIEpTVmFsdWUqIHN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAgewogICAgICAgVGhpc0lt
cCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFRoaXNJbXAqPihzbG90LnNsb3RCYXNlKCkpOwogICAg
ICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHNsb3Quc3RhdGljRW50cnkoKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvbWF0aF9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOSArMjAwLDkg
QEAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZQogICAgIGRvdWJsZSBh
cmcyID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAKICAgICBpZiAoaXNuYW4oYXJnMikpCi0g
ICAgICAgIHJldHVybiBqc051bWJlcihOYU4pOworICAgICAgICByZXR1cm4ganNOYU4oKTsKICAg
ICBpZiAoaXNpbmYoYXJnMikgJiYgZmFicyhhcmcpID09IDEpCi0gICAgICAgIHJldHVybiBqc051
bWJlcihOYU4pOworICAgICAgICByZXR1cm4ganNOYU4oKTsKICAgICByZXR1cm4ganNOdW1iZXIo
cG93KGFyZywgYXJnMikpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNw
cAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw5NzkgKzEgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJub2Rlcy5o
IgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBLSlMgewotCi0v
LyBBIHNpbXBsZSB0ZXh0IHN0cmVhbWluZyBjbGFzcyB0aGF0IGhlbHBzIHdpdGggY29kZSBpbmRl
bnRhdGlvbi4KLQotZW51bSBFbmRsVHlwZSB7IEVuZGwgfTsKLWVudW0gSW5kZW50VHlwZSB7IElu
ZGVudCB9OwotZW51bSBVbmluZGVudFR5cGUgeyBVbmluZGVudCB9OwotZW51bSBEb3RFeHByVHlw
ZSB7IERvdEV4cHIgfTsKLQotY2xhc3MgU291cmNlU3RyZWFtIHsKLXB1YmxpYzoKLSAgICBTb3Vy
Y2VTdHJlYW0oKQotICAgICAgICA6IG1fbnVtYmVyTmVlZHNQYXJlbnMoZmFsc2UpCi0gICAgICAg
ICwgbV9hdFN0YXJ0T2ZTdGF0ZW1lbnQodHJ1ZSkKLSAgICAgICAgLCBtX3ByZWNlZGVuY2UoUHJl
Y0V4cHJlc3Npb24pCi0gICAgewotICAgIH0KLQotICAgIFVTdHJpbmcgdG9TdHJpbmcoKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZzsgfQotCi0gICAgU291cmNlU3RyZWFtJiBvcGVyYXRvcjw8KGNv
bnN0IElkZW50aWZpZXImKTsKLSAgICBTb3VyY2VTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgVVN0
cmluZyYpOwotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyKik7Ci0gICAg
U291cmNlU3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSk7Ci0gICAgU291cmNlU3RyZWFtJiBvcGVy
YXRvcjw8KGNoYXIpOwotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChFbmRsVHlwZSk7Ci0g
ICAgU291cmNlU3RyZWFtJiBvcGVyYXRvcjw8KEluZGVudFR5cGUpOwotICAgIFNvdXJjZVN0cmVh
bSYgb3BlcmF0b3I8PChVbmluZGVudFR5cGUpOwotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8
PChEb3RFeHByVHlwZSk7Ci0gICAgU291cmNlU3RyZWFtJiBvcGVyYXRvcjw8KFByZWNlZGVuY2Up
OwotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBOb2RlKik7Ci0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBSZWZQdHI8VD4m
IG4pIHsgcmV0dXJuICp0aGlzIDw8IG4uZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBVU3RyaW5n
IG1fc3RyaW5nOwotICAgIFVTdHJpbmcgbV9zcGFjZXNGb3JJbmRlbnRhdGlvbjsKLSAgICBib29s
IG1fbnVtYmVyTmVlZHNQYXJlbnM7Ci0gICAgYm9vbCBtX2F0U3RhcnRPZlN0YXRlbWVudDsKLSAg
ICBQcmVjZWRlbmNlIG1fcHJlY2VkZW5jZTsKLX07Ci0KLS8vIC0tLS0tLS0tCi0KLXN0YXRpYyBV
U3RyaW5nIGVzY2FwZVN0cmluZ0ZvclByZXR0eVByaW50aW5nKGNvbnN0IFVTdHJpbmcmIHMpCi17
Ci0gICAgVVN0cmluZyBlc2NhcGVkU3RyaW5nOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzLmRhdGEoKVtpXTsKLSAgICAgICAg
c3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlICdcIic6Ci0gICAgICAgICAgICAgICAgZXNj
YXBlZFN0cmluZyArPSAiXFxcIiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgZXNjYXBlZFN0cmluZyArPSAiXFxuIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAg
ICAgICBlc2NhcGVkU3RyaW5nICs9ICJcXHIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgICAgIGVzY2FwZWRTdHJpbmcgKz0gIlxc
dCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAg
ICAgICAgICAgICAgZXNjYXBlZFN0cmluZyArPSAiXFxcXCI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjIDwgMTI4ICYm
IGlzUHJpbnRhYmxlQ2hhcihjKSkKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlZFN0cmluZy5h
cHBlbmQoYyk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNo
YXIgaGV4VmFsdWVbN107Ci0gICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGhleFZhbHVlLCA3
LCAiXFx1JTA0eCIsIGMpOwotICAgICAgICAgICAgICAgICAgICBlc2NhcGVkU3RyaW5nICs9IGhl
eFZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBlc2NhcGVkU3RyaW5nOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogb3BlcmF0b3JTdHJpbmco
T3BlcmF0b3Igb3BlcikKLXsKLSAgICBzd2l0Y2ggKG9wZXIpIHsKLSAgICAgICAgY2FzZSBPcEVx
dWFsOgotICAgICAgICAgICAgcmV0dXJuICI9IjsKLSAgICAgICAgY2FzZSBPcE11bHRFcToKLSAg
ICAgICAgICAgIHJldHVybiAiKj0iOwotICAgICAgICBjYXNlIE9wRGl2RXE6Ci0gICAgICAgICAg
ICByZXR1cm4gIi89IjsKLSAgICAgICAgY2FzZSBPcFBsdXNFcToKLSAgICAgICAgICAgIHJldHVy
biAiKz0iOwotICAgICAgICBjYXNlIE9wTWludXNFcToKLSAgICAgICAgICAgIHJldHVybiAiLT0i
OwotICAgICAgICBjYXNlIE9wTFNoaWZ0OgotICAgICAgICAgICAgcmV0dXJuICI8PD0iOwotICAg
ICAgICBjYXNlIE9wUlNoaWZ0OgotICAgICAgICAgICAgcmV0dXJuICI+Pj0iOwotICAgICAgICBj
YXNlIE9wVVJTaGlmdDoKLSAgICAgICAgICAgIHJldHVybiAiPj4+PSI7Ci0gICAgICAgIGNhc2Ug
T3BBbmRFcToKLSAgICAgICAgICAgIHJldHVybiAiJj0iOwotICAgICAgICBjYXNlIE9wWE9yRXE6
Ci0gICAgICAgICAgICByZXR1cm4gIl49IjsKLSAgICAgICAgY2FzZSBPcE9yRXE6Ci0gICAgICAg
ICAgICByZXR1cm4gInw9IjsKLSAgICAgICAgY2FzZSBPcE1vZEVxOgotICAgICAgICAgICAgcmV0
dXJuICIlPSI7Ci0gICAgICAgIGNhc2UgT3BQbHVzUGx1czoKLSAgICAgICAgICAgIHJldHVybiAi
KysiOwotICAgICAgICBjYXNlIE9wTWludXNNaW51czoKLSAgICAgICAgICAgIHJldHVybiAiLS0i
OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIj8/PyI7Ci19
Ci0KLXN0YXRpYyBib29sIGlzUGFyc2VyUm91bmRUcmlwTnVtYmVyKGNvbnN0IFVTdHJpbmcmIHN0
cmluZykKLXsKLSAgICBkb3VibGUgbnVtYmVyID0gc3RyaW5nLnRvRG91YmxlKGZhbHNlLCBmYWxz
ZSk7Ci0gICAgaWYgKGlzbmFuKG51bWJlcikgfHwgaXNpbmYobnVtYmVyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBzdHJpbmcgPT0gVVN0cmluZzo6ZnJvbShudW1iZXIpOwot
fQotCi0vLyAtLS0tLS0tLQotCi1Tb3VyY2VTdHJlYW0mIFNvdXJjZVN0cmVhbTo6b3BlcmF0b3I8
PChjaGFyIGMpCi17Ci0gICAgbV9udW1iZXJOZWVkc1BhcmVucyA9IGZhbHNlOwotICAgIG1fYXRT
dGFydE9mU3RhdGVtZW50ID0gZmFsc2U7Ci0gICAgLy8gdXNlIHVuc2lnbmVkIGNoYXIgdG8gemVy
by1leHRlbmQgaW5zdGVhZCBvZiBzaWduLWV4dGVuZAotICAgIFVDaGFyIGNoKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KGMpKTsKLSAgICBtX3N0cmluZy5hcHBlbmQoY2gpOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoY29u
c3QgY2hhciogcykKLXsKLSAgICBtX251bWJlck5lZWRzUGFyZW5zID0gZmFsc2U7Ci0gICAgbV9h
dFN0YXJ0T2ZTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBtX3N0cmluZyArPSBzOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoZG91
YmxlIHZhbHVlKQotewotICAgIGJvb2wgbmVlZFBhcmVucyA9IG1fbnVtYmVyTmVlZHNQYXJlbnM7
Ci0gICAgbV9udW1iZXJOZWVkc1BhcmVucyA9IGZhbHNlOwotICAgIG1fYXRTdGFydE9mU3RhdGVt
ZW50ID0gZmFsc2U7Ci0KLSAgICBpZiAobmVlZFBhcmVucykKLSAgICAgICAgbV9zdHJpbmcuYXBw
ZW5kKCcoJyk7Ci0gICAgbV9zdHJpbmcgKz0gVVN0cmluZzo6ZnJvbSh2YWx1ZSk7Ci0gICAgaWYg
KG5lZWRQYXJlbnMpCi0gICAgICAgIG1fc3RyaW5nLmFwcGVuZCgnKScpOwotCi0gICAgcmV0dXJu
ICp0aGlzOwotfQotCi1Tb3VyY2VTdHJlYW0mIFNvdXJjZVN0cmVhbTo6b3BlcmF0b3I8PChjb25z
dCBVU3RyaW5nJiBzKQotewotICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsKLSAgICBt
X2F0U3RhcnRPZlN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fc3RyaW5nICs9IHM7Ci0gICAgcmV0
dXJuICp0aGlzOwotfQotCi1Tb3VyY2VTdHJlYW0mIFNvdXJjZVN0cmVhbTo6b3BlcmF0b3I8PChj
b25zdCBJZGVudGlmaWVyJiBzKQotewotICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsK
LSAgICBtX2F0U3RhcnRPZlN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fc3RyaW5nICs9IHMudXN0
cmluZygpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU291cmNlU3RyZWFtJiBTb3VyY2VTdHJl
YW06Om9wZXJhdG9yPDwoY29uc3QgTm9kZSogbikKLXsKLSAgICBib29sIG5lZWRQYXJlbnMgPSAo
bV9wcmVjZWRlbmNlICE9IFByZWNFeHByZXNzaW9uICYmIG4tPnByZWNlZGVuY2UoKSA+IG1fcHJl
Y2VkZW5jZSkgfHwgKG1fYXRTdGFydE9mU3RhdGVtZW50ICYmIG4tPm5lZWRzUGFyZW5zSWZMZWZ0
bW9zdCgpKTsKLSAgICBtX3ByZWNlZGVuY2UgPSBQcmVjRXhwcmVzc2lvbjsKLSAgICBpZiAoIW4p
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICBpZiAobmVlZFBhcmVucykgewotICAgICAgICBt
X251bWJlck5lZWRzUGFyZW5zID0gZmFsc2U7Ci0gICAgICAgIG1fc3RyaW5nLmFwcGVuZCgnKCcp
OwotICAgIH0KLSAgICBuLT5zdHJlYW1UbygqdGhpcyk7Ci0gICAgaWYgKG5lZWRQYXJlbnMpCi0g
ICAgICAgIG1fc3RyaW5nLmFwcGVuZCgnKScpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU291
cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoRW5kbFR5cGUpCi17Ci0gICAgbV9u
dW1iZXJOZWVkc1BhcmVucyA9IGZhbHNlOwotICAgIG1fYXRTdGFydE9mU3RhdGVtZW50ID0gdHJ1
ZTsKLSAgICBtX3N0cmluZy5hcHBlbmQoJ1xuJyk7Ci0gICAgbV9zdHJpbmcuYXBwZW5kKG1fc3Bh
Y2VzRm9ySW5kZW50YXRpb24pOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU291cmNlU3RyZWFt
JiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoSW5kZW50VHlwZSkKLXsKLSAgICBtX251bWJlck5l
ZWRzUGFyZW5zID0gZmFsc2U7Ci0gICAgbV9hdFN0YXJ0T2ZTdGF0ZW1lbnQgPSBmYWxzZTsKLSAg
ICBtX3NwYWNlc0ZvckluZGVudGF0aW9uICs9ICIgICI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1Tb3VyY2VTdHJlYW0mIFNvdXJjZVN0cmVhbTo6b3BlcmF0b3I8PChVbmluZGVudFR5cGUpCi17
Ci0gICAgbV9udW1iZXJOZWVkc1BhcmVucyA9IGZhbHNlOwotICAgIG1fYXRTdGFydE9mU3RhdGVt
ZW50ID0gZmFsc2U7Ci0gICAgbV9zcGFjZXNGb3JJbmRlbnRhdGlvbiA9IG1fc3BhY2VzRm9ySW5k
ZW50YXRpb24uc3Vic3RyKDAsIG1fc3BhY2VzRm9ySW5kZW50YXRpb24uc2l6ZSgpIC0gMik7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06
Om9wZXJhdG9yPDwoRG90RXhwclR5cGUpCi17Ci0gICAgbV9udW1iZXJOZWVkc1BhcmVucyA9IHRy
dWU7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgU291cmNlU3RyZWFtJiBTb3VyY2VT
dHJlYW06Om9wZXJhdG9yPDwoUHJlY2VkZW5jZSBwcmVjZWRlbmNlKQotewotICAgIG1fcHJlY2Vk
ZW5jZSA9IHByZWNlZGVuY2U7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1zdGF0aWMgdm9pZCBz
dHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihTb3VyY2VTdHJlYW0mIHMsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSwKLSAgICBjb25zdCBjaGFyKiBvcGVyYXRvclN0cmluZywgY29uc3Qg
Tm9kZSogbGVmdCwgY29uc3QgTm9kZSogcmlnaHQpCi17Ci0gICAgcyA8PCBwcmVjZWRlbmNlIDw8
IGxlZnQKLSAgICAgICAgPDwgJyAnIDw8IG9wZXJhdG9yU3RyaW5nIDw8ICcgJwotICAgICAgICA8
PCBzdGF0aWNfY2FzdDxQcmVjZWRlbmNlPihwcmVjZWRlbmNlIC0gMSkgPDwgcmlnaHQ7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQgc3RyZWFtTGVmdEFzc29j
aWF0aXZlQmluYXJ5T3BlcmF0b3IoU291cmNlU3RyZWFtJiBzLAotICAgIFByZWNlZGVuY2UgcCwg
Y29uc3QgY2hhciogbywgY29uc3QgUmVmUHRyPFQ+JiBsLCBjb25zdCBSZWZQdHI8VD4mIHIpCi17
Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcCwgbywgbC5nZXQo
KSwgci5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBicmFja2V0Tm9kZVN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcywgY29uc3QgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiYgYmFzZSwgY29u
c3QgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiYgc3Vic2NyaXB0KQotewotICAgIHMgPDwgUHJlY0Nh
bGwgPDwgYmFzZS5nZXQoKSA8PCAiWyIgPDwgc3Vic2NyaXB0LmdldCgpIDw8ICJdIjsKLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIGRvdE5vZGVTdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMsIGNvbnN0
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4mIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQot
ewotICAgIHMgPDwgRG90RXhwciA8PCBQcmVjQ2FsbCA8PCBiYXNlLmdldCgpIDw8ICIuIiA8PCBp
ZGVudDsKLX0KLQotLy8gLS0tLS0tLS0KLQotVVN0cmluZyBOb2RlOjp0b1N0cmluZygpIGNvbnN0
Ci17Ci0gICAgU291cmNlU3RyZWFtIHN0cmVhbTsKLSAgICBzdHJlYW1UbyhzdHJlYW0pOwotICAg
IHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTsKLX0KLQotLy8gLS0tLS0tLS0KLQotdm9pZCBOdWxs
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgIm51bGwi
OwotfQotCi12b2lkIEZhbHNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIHMgPDwgImZhbHNlIjsKLX0KLQotdm9pZCBUcnVlTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgInRydWUiOwotfQotCi12b2lkIFBsYWNlaG9s
ZGVyVHJ1ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0Ci17Ci19Ci0KLXZvaWQg
TnVtYmVyTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwg
dmFsdWUoKTsKLX0KLQotdm9pZCBTdHJpbmdOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMp
IGNvbnN0Ci17Ci0gICAgcyA8PCAnIicgPDwgZXNjYXBlU3RyaW5nRm9yUHJldHR5UHJpbnRpbmco
bV92YWx1ZSkgPDwgJyInOwotfQotCi12b2lkIFJlZ0V4cE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICcvJyA8PCAgbV9yZWdFeHAtPnBhdHRlcm4oKSA8
PCAnLycgPDwgbV9yZWdFeHAtPmZsYWdzKCk7Ci19Ci0KLXZvaWQgVGhpc05vZGU6OnN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICJ0aGlzIjsKLX0KLQotdm9pZCBS
ZXNvbHZlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwg
bV9pZGVudDsKLX0KLQotdm9pZCBFbGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIGZvciAoY29uc3QgRWxlbWVudE5vZGUqIG4gPSB0aGlzOyBuOyBuID0g
bi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbi0+bV9lbGlz
aW9uOyBpKyspCi0gICAgICAgICAgICBzIDw8ICcsJzsKLSAgICAgICAgcyA8PCBQcmVjQXNzaWdu
bWVudCA8PCBuLT5tX25vZGU7Ci0gICAgICAgIGlmIChuLT5tX25leHQpCi0gICAgICAgICAgICBz
IDw8ICcsJzsKLSAgICB9Ci19Ci0KLXZvaWQgQXJyYXlOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAnWycgPDwgbV9lbGVtZW50OwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9lbGlzaW9uOyBpKyspCi0gICAgICAgIHMgPDwgJywnOwotICAgIC8vIFBh
cnNlciBjb25zdW1lcyBvbmUgZWxpc2lvbiBjb21tYSBpZiB0aGVyZSdzIGFycmF5IGVsZW1lbnRz
Ci0gICAgLy8gcHJlc2VudCBpbiB0aGUgZXhwcmVzc2lvbi4KLSAgICBpZiAobV9vcHRpb25hbCAm
JiBtX2VsZW1lbnQpCi0gICAgICAgIHMgPDwgJywnOwotICAgIHMgPDwgJ10nOwotfQotCi12b2lk
IE9iamVjdExpdGVyYWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fbGlzdCkKLSAgICAgICAgcyA8PCAieyAiIDw8IG1fbGlzdCA8PCAiIH0iOwotICAg
IGVsc2UKLSAgICAgICAgcyA8PCAieyB9IjsKLX0KLQotdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBtX25vZGU7Ci0gICAg
Zm9yIChjb25zdCBQcm9wZXJ0eUxpc3ROb2RlKiBuID0gbV9uZXh0LmdldCgpOyBuOyBuID0gbi0+
bV9uZXh0LmdldCgpKQotICAgICAgICBzIDw8ICIsICIgPDwgbi0+bV9ub2RlOwotfQotCi12b2lk
IFByb3BlcnR5Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN3
aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIFVT
dHJpbmcgcHJvcGVydHlOYW1lID0gbmFtZSgpLnVzdHJpbmcoKTsKLSAgICAgICAgICAgIGlmIChp
c1BhcnNlclJvdW5kVHJpcE51bWJlcihwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgIHMg
PDwgcHJvcGVydHlOYW1lOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHMgPDwg
JyInIDw8IGVzY2FwZVN0cmluZ0ZvclByZXR0eVByaW50aW5nKHByb3BlcnR5TmFtZSkgPDwgJyIn
OwotICAgICAgICAgICAgcyA8PCAiOiAiIDw8IFByZWNBc3NpZ25tZW50IDw8IG1fYXNzaWduOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXR0ZXI6Ci0gICAg
ICAgIGNhc2UgU2V0dGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBGdW5jRXhwck5vZGUqIGZ1bmMg
PSBzdGF0aWNfY2FzdDxjb25zdCBGdW5jRXhwck5vZGUqPihtX2Fzc2lnbi5nZXQoKSk7Ci0gICAg
ICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKLSAgICAgICAgICAgICAgICBzIDw8ICJnZXQg
IjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzIDw8ICJzZXQgIjsKLSAgICAg
ICAgICAgIHMgPDwgZXNjYXBlU3RyaW5nRm9yUHJldHR5UHJpbnRpbmcobmFtZSgpLnVzdHJpbmco
KSkKLSAgICAgICAgICAgICAgICA8PCAiKCIgPDwgZnVuYy0+bV9wYXJhbWV0ZXIgPDwgJyknIDw8
IGZ1bmMtPm1fYm9keTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29u
c3QKLXsKLSAgICBicmFja2V0Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9zdWJzY3JpcHQpOwot
fQotCi12b2lkIERvdEFjY2Vzc29yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAotewotICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1faWRlbnQpOwotfQotCi12b2lk
IEFyZ3VtZW50TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzIDw8IFByZWNBc3NpZ25tZW50IDw8IG1fZXhwcjsKLSAgICBmb3IgKEFyZ3VtZW50TGlzdE5v
ZGUqIG4gPSBtX25leHQuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQuZ2V0KCkpCi0gICAgICAgIHMg
PDwgIiwgIiA8PCBQcmVjQXNzaWdubWVudCA8PCBuLT5tX2V4cHI7Ci19Ci0KLXZvaWQgQXJndW1l
bnRzTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgJygn
IDw8IG1fbGlzdE5vZGUgPDwgJyknOwotfQotCi12b2lkIE5ld0V4cHJOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAibmV3ICIgPDwgUHJlY01lbWJlciA8
PCBtX2V4cHIgPDwgbV9hcmdzOwotfQotCi12b2lkIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAiZXZhbCIgPDwgbV9hcmdz
OwotfQotCi12b2lkIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFt
JiBzKSBjb25zdAotewotICAgIHMgPDwgUHJlY0NhbGwgPDwgbV9leHByIDw8IG1fYXJnczsKLX0K
LQotdm9pZCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgbV9pZGVudCA8PCBtX2FyZ3M7Ci19Ci0KLXZvaWQgRnVuY3Rp
b25DYWxsQnJhY2tldE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBicmFja2V0Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9zdWJzY3JpcHQpOwotICAgIHMgPDwg
bV9hcmdzOwotfQotCi12b2lkIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QKLXsKLSAgICBkb3ROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX2lkZW50
KTsKLSAgICBzIDw8IG1fYXJnczsKLX0KLQotdm9pZCBQb3N0SW5jUmVzb2x2ZU5vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQgPDwgIisrIjsK
LX0KLQotdm9pZCBQb3N0RGVjUmVzb2x2ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykg
Y29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQgPDwgIi0tIjsKLX0KLQotdm9pZCBQb3N0SW5jQnJh
Y2tldE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBicmFja2V0
Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9zdWJzY3JpcHQpOwotICAgIHMgPDwgIisrIjsKLX0K
LQotdm9pZCBQb3N0RGVjQnJhY2tldE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29u
c3QKLXsKLSAgICBicmFja2V0Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9zdWJzY3JpcHQpOwot
ICAgIHMgPDwgIi0tIjsKLX0KLQotdm9pZCBQb3N0SW5jRG90Tm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1faWRl
bnQpOwotICAgIHMgPDwgIisrIjsKLX0KLQotdm9pZCBQb3N0RGVjRG90Tm9kZTo6c3RyZWFtVG8o
U291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2Us
IG1faWRlbnQpOwotICAgIHMgPDwgIi0tIjsKLX0KLQotdm9pZCBQb3N0Zml4RXJyb3JOb2RlOjpz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBQcmVjTGVmdEhhbmRT
aWRlIDw8IG1fZXhwcjsKLSAgICBpZiAobV9vcGVyYXRvciA9PSBPcFBsdXNQbHVzKQotICAgICAg
ICBzIDw8ICIrKyI7Ci0gICAgZWxzZQotICAgICAgICBzIDw8ICItLSI7Ci19Ci0KLXZvaWQgRGVs
ZXRlUmVzb2x2ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBz
IDw8ICJkZWxldGUgIiA8PCBtX2lkZW50OwotfQotCi12b2lkIERlbGV0ZUJyYWNrZXROb2RlOjpz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAiZGVsZXRlICI7Ci0g
ICAgYnJhY2tldE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1fc3Vic2NyaXB0KTsKLX0KLQotdm9p
ZCBEZWxldGVEb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAg
cyA8PCAiZGVsZXRlICI7Ci0gICAgZG90Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9pZGVudCk7
Ci19Ci0KLXZvaWQgRGVsZXRlVmFsdWVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNv
bnN0Ci17Ci0gICAgcyA8PCAiZGVsZXRlICIgPDwgUHJlY1VuYXJ5IDw8IG1fZXhwcjsKLX0KLQot
dm9pZCBWb2lkTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMg
PDwgInZvaWQgIiA8PCBQcmVjVW5hcnkgPDwgbV9leHByOwotfQotCi12b2lkIFR5cGVPZlZhbHVl
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgInR5cGVv
ZiAiIDw8IFByZWNVbmFyeSA8PCBtX2V4cHI7Ci19Ci0KLXZvaWQgVHlwZU9mUmVzb2x2ZU5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICJ0eXBlb2YgIiA8
PCBtX2lkZW50OwotfQotCi12b2lkIFByZUluY1Jlc29sdmVOb2RlOjpzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAiKysiIDw8IG1faWRlbnQ7Ci19Ci0KLXZvaWQg
UHJlRGVjUmVzb2x2ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzIDw8ICItLSIgPDwgbV9pZGVudDsKLX0KLQotdm9pZCBQcmVJbmNCcmFja2V0Tm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgIisrIjsKLSAgICBicmFj
a2V0Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9zdWJzY3JpcHQpOwotfQotCi12b2lkIFByZURl
Y0JyYWNrZXROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8
PCAiLS0iOwotICAgIGJyYWNrZXROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX3N1YnNjcmlwdCk7
Ci19Ci0KLXZvaWQgUHJlSW5jRG90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAotewotICAgIHMgPDwgIisrIjsKLSAgICBkb3ROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX2lk
ZW50KTsKLX0KLQotdm9pZCBQcmVEZWNEb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMp
IGNvbnN0Ci17Ci0gICAgcyA8PCAiLS0iOwotICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2Us
IG1faWRlbnQpOwotfQotCi12b2lkIFByZWZpeEVycm9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAotewotICAgIGlmIChtX29wZXJhdG9yID09IE9wUGx1c1BsdXMpCi0gICAg
ICAgIHMgPDwgIisrIiA8PCBQcmVjVW5hcnkgPDwgbV9leHByOwotICAgIGVsc2UKLSAgICAgICAg
cyA8PCAiLS0iIDw8IFByZWNVbmFyeSA8PCBtX2V4cHI7Ci19Ci0KLXZvaWQgVW5hcnlQbHVzTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgIisgIiA8PCBQ
cmVjVW5hcnkgPDwgbV9leHByOwotfQotCi12b2lkIE5lZ2F0ZU5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICItICIgPDwgUHJlY1VuYXJ5IDw8IG1fZXhw
cjsKLX0KLQotdm9pZCBCaXR3aXNlTm90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBj
b25zdAotewotICAgIHMgPDwgIn4iIDw8IFByZWNVbmFyeSA8PCBtX2V4cHI7Ci19Ci0KLXZvaWQg
TG9naWNhbE5vdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBz
IDw8ICIhIiA8PCBQcmVjVW5hcnkgPDwgbV9leHByOwotfQotCi12b2lkIE11bHROb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZl
QmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiKiIsIG1fdGVybTEsIG1fdGVybTIpOwot
fQotCi12b2lkIERpdk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICIv
IiwgbV90ZXJtMSwgbV90ZXJtMik7Ci19Ci0KLXZvaWQgTW9kTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJh
dG9yKHMsIHByZWNlZGVuY2UoKSwgIiUiLCBtX3Rlcm0xLCBtX3Rlcm0yKTsKLX0KLQotdm9pZCBB
ZGROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVm
dEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiKyIsIG1fdGVybTEs
IG1fdGVybTIpOwotfQotCi12b2lkIFN1Yk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykg
Y29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVj
ZWRlbmNlKCksICItIiwgbV90ZXJtMSwgbV90ZXJtMik7Ci19Ci0KLXZvaWQgTGVmdFNoaWZ0Tm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3Nv
Y2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIjw8IiwgbV90ZXJtMSwgbV90
ZXJtMik7Ci19Ci0KLXZvaWQgUmlnaHRTaGlmdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYg
cykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBw
cmVjZWRlbmNlKCksICI+PiIsIG1fdGVybTEsIG1fdGVybTIpOwotfQotCi12b2lkIFVuc2lnbmVk
UmlnaHRTaGlmdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBz
dHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI+Pj4i
LCBtX3Rlcm0xLCBtX3Rlcm0yKTsKLX0KLQotdm9pZCBMZXNzTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJh
dG9yKHMsIHByZWNlZGVuY2UoKSwgIjwiLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBH
cmVhdGVyTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVh
bUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj4iLCBtX2V4
cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBMZXNzRXFOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3Io
cywgcHJlY2VkZW5jZSgpLCAiPD0iLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBHcmVh
dGVyRXFOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFt
TGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiPj0iLCBtX2V4
cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBJbnN0YW5jZU9mTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJh
dG9yKHMsIHByZWNlZGVuY2UoKSwgImluc3RhbmNlb2YiLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0K
LQotdm9pZCBJbk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBz
dHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICJpbiIs
IG1fZXhwcjEsIG1fZXhwcjIpOwotfQotCi12b2lkIEVxdWFsTm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJh
dG9yKHMsIHByZWNlZGVuY2UoKSwgIj09IiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQg
Tm90RXF1YWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3Ry
ZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiIT0iLCBt
X2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBTdHJpY3RFcXVhbE5vZGU6OnN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlP
cGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI9PT0iLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQot
dm9pZCBOb3RTdHJpY3RFcXVhbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QK
LXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNl
KCksICIhPT0iLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBCaXRBbmROb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZl
QmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiJiIsIG1fZXhwcjEsIG1fZXhwcjIpOwot
fQotCi12b2lkIEJpdFhPck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsK
LSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCks
ICJeIiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgQml0T3JOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5
T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAifCIsIG1fZXhwcjEsIG1fZXhwcjIpOwotfQotCi12
b2lkIExvZ2ljYWxBbmROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAi
JiYiLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBMb2dpY2FsT3JOb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmlu
YXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAifHwiLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0K
LQotdm9pZCBDb25kaXRpb25hbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QK
LXsKLSAgICBzIDw8IFByZWNMb2dpY2FsT3IgPDwgbV9sb2dpY2FsCi0gICAgICAgIDw8ICIgPyAi
IDw8IFByZWNBc3NpZ25tZW50IDw8IG1fZXhwcjEKLSAgICAgICAgPDwgIiA6ICIgPDwgUHJlY0Fz
c2lnbm1lbnQgPDwgbV9leHByMjsKLX0KLQotdm9pZCBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQgPDwgJyAn
IDw8IG9wZXJhdG9yU3RyaW5nKG1fb3BlcmF0b3IpIDw8ICcgJyA8PCBQcmVjQXNzaWdubWVudCA8
PCBtX3JpZ2h0OwotfQotCi12b2lkIEFzc2lnblJlc29sdmVOb2RlOjpzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBtX2lkZW50IDw8ICIgPSAiIDw8IFByZWNBc3Np
Z25tZW50IDw8IG1fcmlnaHQ7Ci19Ci0KLXZvaWQgUmVhZE1vZGlmeUJyYWNrZXROb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgYnJhY2tldE5vZGVTdHJlYW1Ubyhz
LCBtX2Jhc2UsIG1fc3Vic2NyaXB0KTsKLSAgICBzIDw8ICcgJyA8PCBvcGVyYXRvclN0cmluZyht
X29wZXJhdG9yKSA8PCAnICcgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9yaWdodDsKLX0KLQotdm9p
ZCBBc3NpZ25CcmFja2V0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewot
ICAgIGJyYWNrZXROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX3N1YnNjcmlwdCk7Ci0gICAgcyA8
PCAiID0gIiA8PCBQcmVjQXNzaWdubWVudCA8PCBtX3JpZ2h0OwotfQotCi12b2lkIFJlYWRNb2Rp
ZnlEb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgZG90Tm9k
ZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9pZGVudCk7Ci0gICAgcyA8PCAnICcgPDwgb3BlcmF0b3JT
dHJpbmcobV9vcGVyYXRvcikgPDwgJyAnIDw8IFByZWNBc3NpZ25tZW50IDw8IG1fcmlnaHQ7Ci19
Ci0KLXZvaWQgQXNzaWduRG90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1faWRlbnQpOwotICAgIHMgPDwgIiA9
ICIgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9yaWdodDsKLX0KLQotdm9pZCBBc3NpZ25FcnJvck5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IFByZWNMZWZ0
SGFuZFNpZGUgPDwgbV9sZWZ0IDw8ICcgJwotICAgICAgICA8PCBvcGVyYXRvclN0cmluZyhtX29w
ZXJhdG9yKSA8PCAnICcgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9yaWdodDsKLX0KLQotdm9pZCBD
b21tYU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IFBy
ZWNBc3NpZ25tZW50IDw8IG1fZXhwcjEgPDwgIiwgIiA8PCBQcmVjQXNzaWdubWVudCA8PCBtX2V4
cHIyOwotfQotCi12b2lkIENvbnN0RGVjbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykg
Y29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQ7Ci0gICAgaWYgKG1faW5pdCkKLSAgICAgICAgcyA8
PCAiID0gIiA8PCBQcmVjQXNzaWdubWVudCA8PCBtX2luaXQ7Ci0gICAgZm9yIChDb25zdERlY2xO
b2RlKiBuID0gbV9uZXh0LmdldCgpOyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAg
IHMgPDwgIiwgIiA8PCBuLT5tX2lkZW50OwotICAgICAgICBpZiAobi0+bV9pbml0KQotICAgICAg
ICAgICAgcyA8PCAiID0gIiA8PCBQcmVjQXNzaWdubWVudCA8PCBuLT5tX2luaXQ7Ci0gICAgfQot
fQotCi12b2lkIENvbnN0U3RhdGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBj
b25zdAotewotICAgIHMgPDwgRW5kbCA8PCAiY29uc3QgIiA8PCBtX25leHQgPDwgJzsnOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVtZW50TGlzdFN0cmVhbVRvKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3RhdGVtZW50Tm9kZT4gPiYgbm9kZXMsIFNvdXJjZVN0cmVhbSYgcykKLXsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8U3RhdGVtZW50Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgcHRyID0g
bm9kZXMuYmVnaW4oKTsgcHRyICE9IG5vZGVzLmVuZCgpOyBwdHIrKykKLSAgICAgICAgcyA8PCAq
cHRyOwotfQotCi12b2lkIEJsb2NrTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAotewotICAgIHMgPDwgRW5kbCA8PCAieyIgPDwgSW5kZW50OwotICAgIHN0YXRlbWVudExpc3RT
dHJlYW1UbyhtX2NoaWxkcmVuLCBzKTsKLSAgICBzIDw8IFVuaW5kZW50IDw8IEVuZGwgPDwgIn0i
OwotfQotCi12b2lkIFNjb3BlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIHMgPDwgRW5kbCA8PCAieyIgPDwgSW5kZW50OwotCi0gICAgYm9vbCBwcmludGVkVmFy
ID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhclN0YWNrLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX3ZhclN0YWNrW2ldLnNlY29uZCA9PSAwKSB7Ci0gICAgICAg
ICAgICBpZiAoIXByaW50ZWRWYXIpIHsKLSAgICAgICAgICAgICAgICBzIDw8IEVuZGwgPDwgInZh
ciAiOwotICAgICAgICAgICAgICAgIHByaW50ZWRWYXIgPSB0cnVlOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcyA8PCAiLCAiOwotICAgICAgICAgICAgcyA8PCBtX3ZhclN0
YWNrW2ldLmZpcnN0OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChwcmludGVkVmFyKQotICAg
ICAgICBzIDw8ICc7JzsKLQotICAgIHN0YXRlbWVudExpc3RTdHJlYW1UbyhtX2NoaWxkcmVuLCBz
KTsKLSAgICBzIDw8IFVuaW5kZW50IDw8IEVuZGwgPDwgIn0iOwotfQotCi12b2lkIEVtcHR5U3Rh
dGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwg
RW5kbCA8PCAnOyc7Ci19Ci0KLXZvaWQgRXhwclN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgbV9leHByIDw8ICc7JzsKLX0K
LQotdm9pZCBWYXJTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
Ci17Ci0gICAgcyA8PCBFbmRsIDw8ICJ2YXIgIiA8PCBtX2V4cHIgPDwgJzsnOwotfQotCi12b2lk
IElmTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgRW5k
bCA8PCAiaWYgKCIgPDwgbV9jb25kaXRpb24gPDwgJyknIDw8IEluZGVudCA8PCBtX2lmQmxvY2sg
PDwgVW5pbmRlbnQ7Ci19Ci0KLXZvaWQgSWZFbHNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFt
JiBzKSBjb25zdAotewotICAgIElmTm9kZTo6c3RyZWFtVG8ocyk7Ci0gICAgcyA8PCBFbmRsIDw8
ICJlbHNlIiA8PCBJbmRlbnQgPDwgbV9lbHNlQmxvY2sgPDwgVW5pbmRlbnQ7Ci19Ci0KLXZvaWQg
RG9XaGlsZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8
IEVuZGwgPDwgImRvICIgPDwgSW5kZW50IDw8IG1fc3RhdGVtZW50IDw8IFVuaW5kZW50IDw8IEVu
ZGwKLSAgICAgICAgPDwgIndoaWxlICgiIDw8IG1fZXhwciA8PCAiKTsiOwotfQotCi12b2lkIFdo
aWxlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgRW5k
bCA8PCAid2hpbGUgKCIgPDwgbV9leHByIDw8ICcpJyA8PCBJbmRlbnQgPDwgbV9zdGF0ZW1lbnQg
PDwgVW5pbmRlbnQ7Ci19Ci0KLXZvaWQgRm9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgRW5kbCA8PCAiZm9yICgiCi0gICAgICAgIDw8IChtX2V4cHIx
V2FzVmFyRGVjbCA/ICJ2YXIgIiA6ICIiKQotICAgICAgICA8PCBtX2V4cHIxCi0gICAgICAgIDw8
ICI7ICIgPDwgbV9leHByMgotICAgICAgICA8PCAiOyAiIDw8IG1fZXhwcjMKLSAgICAgICAgPDwg
JyknIDw8IEluZGVudCA8PCBtX3N0YXRlbWVudCA8PCBVbmluZGVudDsKLX0KLQotdm9pZCBGb3JJ
bk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwg
PDwgImZvciAoIjsKLSAgICBpZiAobV9pZGVudElzVmFyRGVjbCkgewotICAgICAgICBzIDw8ICJ2
YXIgIjsKLSAgICAgICAgaWYgKG1faW5pdCkKLSAgICAgICAgICAgIHMgPDwgbV9pbml0OwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzIDw8IFByZWNMZWZ0SGFuZFNpZGUgPDwgbV9sZXhwcjsK
LSAgICB9IGVsc2UKLSAgICAgICAgcyA8PCBQcmVjTGVmdEhhbmRTaWRlIDw8IG1fbGV4cHI7Ci0K
LSAgICBzIDw8ICIgaW4gIiA8PCBtX2V4cHIgPDwgJyknIDw8IEluZGVudCA8PCBtX3N0YXRlbWVu
dCA8PCBVbmluZGVudDsKLX0KLQotdm9pZCBDb250aW51ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgImNvbnRpbnVlIjsKLSAgICBpZiAo
IW1faWRlbnQuaXNOdWxsKCkpCi0gICAgICAgIHMgPDwgJyAnIDw8IG1faWRlbnQ7Ci0gICAgcyA8
PCAnOyc7Ci19Ci0KLXZvaWQgQnJlYWtOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNv
bnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8ICJicmVhayI7Ci0gICAgaWYgKCFtX2lkZW50LmlzTnVs
bCgpKQotICAgICAgICBzIDw8ICcgJyA8PCBtX2lkZW50OwotICAgIHMgPDwgJzsnOwotfQotCi12
b2lkIFJldHVybk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBz
IDw8IEVuZGwgPDwgInJldHVybiI7Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIHMgPDwgJyAn
IDw8IG1fdmFsdWU7Ci0gICAgcyA8PCAnOyc7Ci19Ci0KLXZvaWQgV2l0aE5vZGU6OnN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgIndpdGggKCIgPDwg
bV9leHByIDw8ICIpICIgPDwgbV9zdGF0ZW1lbnQ7Ci19Ci0KLXZvaWQgQ2FzZUNsYXVzZU5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGw7Ci0gICAg
aWYgKG1fZXhwcikKLSAgICAgICAgcyA8PCAiY2FzZSAiIDw8IG1fZXhwcjsKLSAgICBlbHNlCi0g
ICAgICAgIHMgPDwgImRlZmF1bHQiOwotICAgIHMgPDwgIjoiIDw8IEluZGVudDsKLSAgICBzdGF0
ZW1lbnRMaXN0U3RyZWFtVG8obV9jaGlsZHJlbiwgcyk7Ci0gICAgcyA8PCBVbmluZGVudDsKLX0K
LQotdm9pZCBDbGF1c2VMaXN0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+Z2V0
TmV4dCgpKQotICAgICAgICBzIDw8IG4tPmdldENsYXVzZSgpOwotfQotCi12b2lkIENhc2VCbG9j
a05vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0
IENsYXVzZUxpc3ROb2RlKiBuID0gbV9saXN0MS5nZXQoKTsgbjsgbiA9IG4tPmdldE5leHQoKSkK
LSAgICAgICAgcyA8PCBuLT5nZXRDbGF1c2UoKTsKLSAgICBzIDw8IG1fZGVmYXVsdENsYXVzZTsK
LSAgICBmb3IgKGNvbnN0IENsYXVzZUxpc3ROb2RlKiBuID0gbV9saXN0Mi5nZXQoKTsgbjsgbiA9
IG4tPmdldE5leHQoKSkKLSAgICAgICAgcyA8PCBuLT5nZXRDbGF1c2UoKTsKLX0KLQotdm9pZCBT
d2l0Y2hOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBF
bmRsIDw8ICJzd2l0Y2ggKCIgPDwgbV9leHByIDw8ICIpIHsiCi0gICAgICAgIDw8IEluZGVudCA8
PCBtX2Jsb2NrIDw8IFVuaW5kZW50Ci0gICAgICAgIDw8IEVuZGwgPDwgIn0iOwotfQotCi12b2lk
IExhYmVsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwg
RW5kbCA8PCBtX2xhYmVsIDw8ICI6IiA8PCBJbmRlbnQgPDwgbV9zdGF0ZW1lbnQgPDwgVW5pbmRl
bnQ7Ci19Ci0KLXZvaWQgVGhyb3dOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
Ci17Ci0gICAgcyA8PCBFbmRsIDw8ICJ0aHJvdyAiIDw8IG1fZXhwciA8PCAnOyc7Ci19Ci0KLXZv
aWQgVHJ5Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwg
RW5kbCA8PCAidHJ5ICIgPDwgbV90cnlCbG9jazsKLSAgICBpZiAobV9jYXRjaEJsb2NrKQotICAg
ICAgICBzIDw8IEVuZGwgPDwgImNhdGNoICgiIDw8IG1fZXhjZXB0aW9uSWRlbnQgPDwgJyknIDw8
IG1fY2F0Y2hCbG9jazsKLSAgICBpZiAobV9maW5hbGx5QmxvY2spCi0gICAgICAgIHMgPDwgRW5k
bCA8PCAiZmluYWxseSAiIDw8IG1fZmluYWxseUJsb2NrOwotfQotCi12b2lkIFBhcmFtZXRlck5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQ7
Ci0gICAgZm9yIChQYXJhbWV0ZXJOb2RlKiBuID0gbV9uZXh0LmdldCgpOyBuOyBuID0gbi0+bV9u
ZXh0LmdldCgpKQotICAgICAgICBzIDw8ICIsICIgPDwgbi0+bV9pZGVudDsKLX0KLQotdm9pZCBG
dW5jRGVjbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8
IEVuZGwgPDwgImZ1bmN0aW9uICIgPDwgbV9pZGVudCA8PCAnKCcgPDwgbV9wYXJhbWV0ZXIgPDwg
JyknIDw8IG1fYm9keTsKLX0KLQotdm9pZCBGdW5jRXhwck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICJmdW5jdGlvbiAiIDw8IG1faWRlbnQgPDwgJygn
IDw8IG1fcGFyYW1ldGVyIDw8ICcpJyA8PCBtX2JvZHk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEtK
UworLyogaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rICovCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJ
KHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNzMgKzQ1LDYgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLWNsYXNzIEZ1
bmN0aW9uQm9keU5vZGVXaXRoRGVidWdnZXJIb29rcyA6IHB1YmxpYyBGdW5jdGlvbkJvZHlOb2Rl
IHsKLXB1YmxpYzoKLSAgICBGdW5jdGlvbkJvZHlOb2RlV2l0aERlYnVnZ2VySG9va3MoU291cmNl
RWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBib29sIHVzZXNFdmFsLCBib29s
IG5lZWRzQ2xvc3VyZSkgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotfTsKLQotI2lmIENP
TVBJTEVSKEdDQykKLSNkZWZpbmUgVU5MSUtFTFkoeCkgXAotICBfX2J1aWx0aW5fZXhwZWN0ICgo
eCksIDApCi0jZWxzZQotI2RlZmluZSBVTkxJS0VMWSh4KSB4Ci0jZW5kaWYKLSAgICAKLSNkZWZp
bmUgS0pTX0NIRUNLRVhDRVBUSU9OIFwKLWlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpIFwKLSAgICByZXR1cm4gcmV0aHJvd0V4Y2VwdGlvbihleGVjKTsKLQotI2RlZmluZSBLSlNf
Q0hFQ0tFWENFUFRJT05WQUxVRSBcCi1pZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KSB7IFwKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYyk7IFwKLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsgXAotfQotCi0jZGVmaW5lIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUiBcCi1pZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7IFwKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhl
Yyk7IFwKLSAgICByZXR1cm4gMDsgXAotfQotCi0jZGVmaW5lIEtKU19DSEVDS0VYQ0VQVElPTkJP
T0xFQU4gXAotaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkgeyBcCi0gICAgaGFu
ZGxlRXhjZXB0aW9uKGV4ZWMpOyBcCi0gICAgcmV0dXJuIGZhbHNlOyBcCi19Ci0KLSNkZWZpbmUg
S0pTX0NIRUNLRVhDRVBUSU9OVk9JRCBcCi1pZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKSB7IFwKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYyk7IFwKLSAgICByZXR1cm47IFwKLX0K
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5Ta2lwTG9va3Vw
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
LXsKLSAgICAvLyBTdGF0aWMgbG9va3VwIGluIEV2YWxDb2RlIGlzIGltcG9zc2libGUgYmVjYXVz
ZSB2YXJpYWJsZXMgYXJlbid0IERvbnREZWxldGUuCi0gICAgLy8gU3RhdGljIGxvb2t1cCBpbiBH
bG9iYWxDb2RlIG1heSBiZSBwb3NzaWJsZSwgYnV0IHdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQgc3Vw
cG9ydCBmb3IgaXQgeWV0LgotICAgIGlmIChleGVjLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29k
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU3RhdGljIGxvb2t1cCBpcyBpbXBv
c3NpYmxlIHdoZW4gc29tZXRoaW5nIGR5bmFtaWMgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZyb250
IG9mIHRoZSBzY29wZSBjaGFpbi4KLSAgICBpZiAoZXhlYy0+dmFyaWFibGVPYmplY3QoKSAhPSBl
eGVjLT5zY29wZUNoYWluKCkudG9wKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFN0YXRpYyBsb29rdXAgaXMgaW1wb3NzaWJsZSBpZiB0aGUgc3ltYm9sIGlzbid0IHN0YXRpY2Fs
bHkgZGVjbGFyZWQuCi0gICAgaWYgKCFleGVjLT52YXJpYWJsZU9iamVjdCgpLT5zeW1ib2xUYWJs
ZSgpLmNvbnRhaW5zKGlkZW50LnVzdHJpbmcoKS5yZXAoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c0NvbnN0YW50KGNvbnN0IExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlLCBzaXplX3QgaW5kZXgp
Ci17Ci0gICAgQVNTRVJUKGluZGV4IDwgbG9jYWxTdG9yYWdlLnNpemUoKSk7Ci0gICAgcmV0dXJu
IGxvY2FsU3RvcmFnZVtpbmRleF0uYXR0cmlidXRlcyAmIFJlYWRPbmx5OwotfQotCiBzdGF0aWMg
aW5saW5lIFVTdHJpbmc6OlJlcCogcmVwKGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewogICAg
IHJldHVybiBpZGVudC51c3RyaW5nKCkucmVwKCk7CkBAIC0yMjQsNDUgKzE1NywxMCBAQCB2b2lk
IFBhcnNlclJlZkNvdW50ZWQ6OmRlbGV0ZU5ld09iamVjdHMoCiB9CiAKIE5vZGU6Ok5vZGUoKQot
ICAgIDogbV9leHBlY3RlZFJldHVyblR5cGUoT2JqZWN0VHlwZSkKLXsKLSAgICBtX2xpbmUgPSBs
ZXhlcigpLmxpbmVObygpOwotfQotCi1Ob2RlOjpOb2RlKEpTVHlwZSBleHBlY3RlZFJldHVybikK
LSAgICA6IG1fZXhwZWN0ZWRSZXR1cm5UeXBlKGV4cGVjdGVkUmV0dXJuKQogewogICAgIG1fbGlu
ZSA9IGxleGVyKCkubGluZU5vKCk7CiB9CiAKLWRvdWJsZSBFeHByZXNzaW9uTm9kZTo6ZXZhbHVh
dGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVl
KiB2YWx1ZSA9IGV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgot
ICAgIHJldHVybiB2YWx1ZS0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgRXhwcmVzc2lvbk5v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OQk9PTEVBTgotICAgIHJldHVybiB2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpOwotfQotCi1pbnQz
Ml90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdmFsdWUtPnRvSW50MzIoZXhlYyk7
Ci19Ci0KLXVpbnQzMl90IEV4cHJlc3Npb25Ob2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHZhbHVlLT50
b1VJbnQzMihleGVjKTsKLX0KLQogc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IFVTdHJpbmcmIHN1YnN0cmluZykgS0pTX0ZBU1RfQ0FMTDsKIHN0YXRpYyB2b2lk
IHN1YnN0aXR1dGUoVVN0cmluZyYgc3RyaW5nLCBjb25zdCBVU3RyaW5nJiBzdWJzdHJpbmcpCiB7
CkBAIC0yODgsMTA1ICsxODYsNiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFVTdHJpbmcgY3VycmVu
dFNvdXJjCiAgICAgcmV0dXJuIFVTdHJpbmcoKTsKIH0KIAotSlNWYWx1ZSogTm9kZTo6c2V0RXJy
b3JDb21wbGV0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwg
Y29uc3QgY2hhciogbXNnKQotewotICAgIHJldHVybiBleGVjLT5zZXRUaHJvd0NvbXBsZXRpb24o
RXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtc2csIGxpbmVObygpLCBjdXJyZW50U291cmNlSWQoZXhl
YyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpKTsKLX0KLQotSlNWYWx1ZSogTm9kZTo6c2V0RXJy
b3JDb21wbGV0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwg
Y29uc3QgY2hhciogbXNnLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBVU3RyaW5n
IG1lc3NhZ2UgPSBtc2c7Ci0gICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBpZGVudC51c3RyaW5nKCkp
OwotICAgIHJldHVybiBleGVjLT5zZXRUaHJvd0NvbXBsZXRpb24oRXJyb3I6OmNyZWF0ZShleGVj
LCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291
cmNlVVJMKGV4ZWMpKSk7Ci19Ci0KLUpTVmFsdWUqIE5vZGU6OnRocm93RXJyb3IoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2cpCi17Ci0g
ICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtc2csIGxpbmVObygpLCBjdXJyZW50
U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQotCi1KU1ZhbHVlKiBO
b2RlOjp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUg
ZSwgY29uc3QgY2hhciogbXNnLCBjb25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgVVN0cmluZyBt
ZXNzYWdlID0gbXNnOwotICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgc3RyaW5nKTsKLSAgICByZXR1
cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50U291
cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQotCi1KU1ZhbHVlKiBOb2Rl
Ojp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwg
Y29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2LCBOb2RlKiBleHByKQotewotICAgIFVTdHJpbmcg
bWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIHYtPnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGV4cHItPnRvU3RyaW5nKCkpOwotICAgIHJldHVy
biBLSlM6OnRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSwgbGluZU5vKCksIGN1cnJlbnRTb3Vy
Y2VJZChleGVjKSwgY3VycmVudFNvdXJjZVVSTChleGVjKSk7Ci19Ci0KLUpTVmFsdWUqIE5vZGU6
OnRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBj
b25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQotewotICAgIFVTdHJpbmcg
bWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxhYmVsLnVzdHJpbmcoKSk7
Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwg
Y3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4ZWMpKTsKLX0KLQotSlNW
YWx1ZSogTm9kZTo6dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgRXJy
b3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdiwgTm9kZSogZTEsIE5vZGUqIGUy
KQotewotICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2Us
IHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGUxLT50b1N0cmlu
ZygpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGUyLT50b1N0cmluZygpKTsKLSAgICByZXR1
cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UsIGxpbmVObygpLCBjdXJyZW50U291
cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpOwotfQotCi1KU1ZhbHVlKiBOb2Rl
Ojp0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwg
Y29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2LCBOb2RlKiBleHByLCBjb25zdCBJZGVudGlmaWVy
JiBsYWJlbCkKLXsKLSAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7Ci0gICAgc3Vic3RpdHV0ZSht
ZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7Ci0gICAgc3Vic3RpdHV0ZShtZXNzYWdlLCBleHBy
LT50b1N0cmluZygpKTsKLSAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxhYmVsLnVzdHJpbmcoKSk7
Ci0gICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBlLCBtZXNzYWdlLCBsaW5lTm8oKSwg
Y3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4ZWMpKTsKLX0KLQotSlNW
YWx1ZSogTm9kZTo6dGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgRXJy
b3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSogdiwgY29uc3QgSWRlbnRpZmllciYg
bGFiZWwpCi17Ci0gICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwotICAgIHN1YnN0aXR1dGUobWVz
c2FnZSwgdi0+dG9TdHJpbmcoZXhlYykpOwotICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgbGFiZWwu
dXN0cmluZygpKTsKLSAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2Us
IGxpbmVObygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykp
OwotfQotCi1KU1ZhbHVlKiBOb2RlOjp0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQotewotICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiQ2FuJ3QgZmluZCB2YXJp
YWJsZTogJXMiLCBpZGVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6aGFuZGxlRXhjZXB0aW9uKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGhhbmRsZUV4Y2VwdGlvbihleGVjLCBl
eGVjLT5leGNlcHRpb24oKSk7Ci19Ci0KLXZvaWQgTm9kZTo6aGFuZGxlRXhjZXB0aW9uKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSkKLXsKLSAg
ICBpZiAoZXhjZXB0aW9uVmFsdWUtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGV4
Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBpZiAoIWV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgImxpbmUiKSAmJiAhZXhjZXB0aW9u
LT5oYXNQcm9wZXJ0eShleGVjLCAic291cmNlVVJMIikpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlv
bi0+cHV0KGV4ZWMsICJsaW5lIiwganNOdW1iZXIobV9saW5lKSk7Ci0gICAgICAgICAgICBleGNl
cHRpb24tPnB1dChleGVjLCAic291cmNlVVJMIiwganNTdHJpbmcoY3VycmVudFNvdXJjZVVSTChl
eGVjKSkpOwotICAgICAgICB9Ci0gICAgfQotI2lmIDAKLSAgICBEZWJ1Z2dlciogZGJnID0gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmIChkYmcgJiYgIWRi
Zy0+aGFzSGFuZGxlZEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSkpCi0gICAgICAgIGRi
Zy0+ZXhjZXB0aW9uKGV4ZWMsIGN1cnJlbnRTb3VyY2VJZChleGVjKSwgbV9saW5lLCBleGNlcHRp
b25WYWx1ZSk7Ci0jZW5kaWYKLX0KLQotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIE5vZGU6OnJldGhy
b3dFeGNlcHRpb24oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1
ZSogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4g
ZXhlYy0+c2V0VGhyb3dDb21wbGV0aW9uKGV4Y2VwdGlvbik7Ci19Ci0KIFJlZ2lzdGVySUQqIE5v
ZGU6OmVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgRXJyb3JUeXBlIGUs
IGNvbnN0IGNoYXIqIG1zZykKIHsKICAgICBSZWdpc3RlcklEKiBleGNlcHRpb24gPSBnZW5lcmF0
b3IuZW1pdE5ld0Vycm9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZSwganNTdHJpbmcobXNn
KSk7CkBAIC00MjcsMjkgKzIyNiw2IEBAIHZvaWQgU291cmNlRWxlbWVudHM6OmFwcGVuZChQYXNz
UmVmUHRyPFMKICAgICBtX3N0YXRlbWVudHMuYXBwZW5kKHN0YXRlbWVudCk7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQnJlYWtwb2ludENoZWNrU3RhdGVtZW50
OjpCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQoUGFzc1JlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0
ZW1lbnQpCi0gICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCi17Ci0gICAgQVNTRVJUKG1fc3Rh
dGVtZW50KTsKLX0KLQotSlNWYWx1ZSogQnJlYWtwb2ludENoZWNrU3RhdGVtZW50OjpleGVjdXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX3N0YXRlbWVu
dC0+ZXhlY3V0ZShleGVjKTsKLX0KLQotdm9pZCBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQ6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgc3RyZWFtKSBjb25zdAotewotICAgIG1fc3RhdGVtZW50LT5z
dHJlYW1UbyhzdHJlYW0pOwotfQotCi12b2lkIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChtX3N0YXRlbWVudC5nZXQoKSk7Ci19Ci0KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdWxsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIE51bGxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1NywxMSArMjMzLDYgQEAgUmVn
aXN0ZXJJRCogTnVsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcgogICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwganNOdWxsKCkpOwog
fQogCi1KU1ZhbHVlKiBOdWxsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
ICkKLXsKLSAgICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBGYWxzZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBSZWdpc3RlcklEKiBGYWxzZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDY5LDExICsyNDAsNiBAQCBSZWdpc3RlcklEKiBGYWxz
ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEZh
bHNlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gVHJ1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3Rl
cklEKiBUcnVlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCkBAIC00ODEsMTEgKzI0Nyw2IEBAIFJlZ2lzdGVySUQqIFRydWVOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXIKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHRydWUpOwogfQogCi1KU1ZhbHVlKiBUcnVlTm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4o
dHJ1ZSk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIE51bWJl
ck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQpAQCAtNDkzLDUzICsyNTQsNiBAQCBSZWdpc3RlcklEKiBOdW1iZXJOb2RlOjplbWl0Q29kZShD
b2RlR2VuCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCBtX2RvdWJsZSk7CiB9CiAKLUpTVmFsdWUqIE51bWJlck5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICAvLyBOdW1iZXIgbm9kZXMgYXJl
IG9ubHkgY3JlYXRlZCB3aGVuIHRoZSBudW1iZXIgY2FuJ3QgZml0IGluIGEgSlNJbW1lZGlhdGUs
IHNvIG5vIG5lZWQgdG8gY2hlY2sgYWdhaW4uCi0gICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChtX2Rv
dWJsZSk7Ci19Ci0KLWRvdWJsZSBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICByZXR1cm4gbV9kb3VibGU7Ci19Ci0KLWJvb2wgTnVt
YmVyTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewot
ICAgIHJldHVybiBtX2RvdWJsZSA8IDAuMCB8fCBtX2RvdWJsZSA+IDAuMDsgLy8gZmFsc2UgZm9y
IE5hTiBhcyB3ZWxsIGFzIDAKLX0KLQotaW50MzJfdCBOdW1iZXJOb2RlOjpldmFsdWF0ZVRvSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b0lu
dDMyKG1fZG91YmxlKTsKLX0KLQotdWludDMyX3QgTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvVUlu
dDMyKG1fZG91YmxlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElt
bWVkaWF0ZU51bWJlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
SlNWYWx1ZSogSW1tZWRpYXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKQotewotICAgIHJldHVybiBtX3ZhbHVlOwotfQotCi1pbnQzMl90IEltbWVkaWF0ZU51
bWJlck5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopCi17Ci0g
ICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihtX3ZhbHVlKTsKLX0KLQot
dWludDMyX3QgSW1tZWRpYXRlTnVtYmVyTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopCi17Ci0gICAgdWludDMyX3QgaTsKLSAgICBpZiAoSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZFVJbnQzMihtX3ZhbHVlLCBpKSkKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAg
Ym9vbCBvazsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzJTbG93Q2FzZShtX2RvdWJsZSwg
b2spOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBTdHJpbmdO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
QEAgLTU0OCwyMSArMjYyLDYgQEAgUmVnaXN0ZXJJRCogU3RyaW5nTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwganNPd25lZFN0cmluZyhtX3ZhbHVlKSk7CiB9CiAKLUpTVmFsdWUqIFN0cmlu
Z05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikKLXsKLSAgICByZXR1cm4g
anNPd25lZFN0cmluZyhtX3ZhbHVlKTsKLX0KLQotZG91YmxlIFN0cmluZ05vZGU6OmV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBtX3ZhbHVl
LnRvRG91YmxlKCk7Ci19Ci0KLWJvb2wgU3RyaW5nTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiAhbV92YWx1ZS5pc0VtcHR5KCk7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAt
NTcyLDEyICsyNzEsNiBAQCBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Q29kZShDb2RlR2Vu
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIG1fcmVnRXhwLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogUmVnRXhwTm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gVGhpc05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBS
ZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCkBAIC01ODUsMTIgKzI3OCw2IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXIKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0
aW9uSWZOZWVkZWQoZHN0LCBnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOwogfQogCi0vLyBFQ01B
IDExLjEuMQotSlNWYWx1ZSogVGhpc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBleGVjLT50aGlzVmFsdWUoKTsKLX0KLQogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNjAxLDMzNTcgKzI4
OCw2MjEgQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZQogICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgbV9pZGVudCk7CiB9CiAKLS8vIEVDTUEgMTEuMS4yICYgMTAuMS40Ci1KU1ZhbHVlKiBSZXNv
bHZlTm9kZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAg
QVNTRVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIGNvbnN0IFNjb3Bl
Q2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRv
ciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hh
aW4uZW5kKCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUg
c2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgUHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgZG8gewotICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOwotCi0gICAgICAg
IGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCi0gICAgICAgICAg
ICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBvLCBtX2lkZW50KTsKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBBcnJheU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLSAgICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsK
K1JlZ2lzdGVySUQqIEFycmF5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5ld0FycmF5ID0g
Z2VuZXJhdG9yLmVtaXROZXdBcnJheShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCkpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAKLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotfQorICAgIFJlZ2lzdGVySUQqIHZhbHVlOworICAg
IGZvciAoRWxlbWVudE5vZGUqIG4gPSBtX2VsZW1lbnQuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQu
Z2V0KCkpIHsKKyAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobi0+bV9ub2RlLmdl
dCgpKTsKKyAgICAgICAgbGVuZ3RoICs9IG4tPm1fZWxpc2lvbjsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRCeUluZGV4KG5ld0FycmF5LmdldCgpLCBsZW5ndGgrKywgdmFsdWUpOworICAgIH0K
IAotSlNWYWx1ZSogUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KKyAgICB2YWx1
ZSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVy
KG1fZWxpc2lvbiArIGxlbmd0aCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChuZXdBcnJh
eS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIHZhbHVlKTsKIAotZG91
YmxlIFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbmV3QXJy
YXkuZ2V0KCkpOwogfQogCi1ib29sIFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZh
bHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2
LT50b0Jvb2xlYW4oZXhlYyk7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
T2JqZWN0TGl0ZXJhbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbnQzMl90
IFJlc29sdmVOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCitSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVy
biB2LT50b0ludDMyKGV4ZWMpOworICAgIGlmIChtX2xpc3QpCisgICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX2xpc3QuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdE5ld09iamVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKIH0KIAotdWlu
dDMyX3QgUmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsK
LX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBzaXplX3QgZ2V0U3ltYm9sVGFi
bGVFbnRyeShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgc2l6ZV90JiBzdGFja0RlcHRo
KSAKK1JlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGludCBpbmRleCA9IHN5bWJvbFRh
YmxlLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4
ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBzdGFja0RlcHRoID0gMDsKLSAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2Jq
ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgIAotICAgIGlmIChpZGVudCA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAgIHN0YWNrRGVwdGgg
PSAwOwotICAgICAgICByZXR1cm4gbWlzc2luZ1N5bWJvbE1hcmtlcigpOwotICAgIH0KKyAgICBn
ZW5lcmF0b3IuZW1pdE5ld09iamVjdChuZXdPYmouZ2V0KCkpOwogICAgIAotICAgIGNvbnN0IFNj
b3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVy
YXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
Y2hhaW4uZW5kKCk7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlciwgKytkZXB0aCkgewotICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3BlID0g
Kml0ZXI7Ci0gICAgICAgIGlmICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpIAot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJp
YWJsZU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUp
OwotICAgICAgICBpbmRleCA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5n
ZXQoaWRlbnQudXN0cmluZygpLnJlcCgpKS5nZXRJbmRleCgpOwotICAgICAgICBpZiAoaW5kZXgg
IT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBzdGFja0RlcHRoID0gZGVw
dGg7Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgZm9yIChQcm9wZXJ0eUxpc3ROb2Rl
KiBwID0gdGhpczsgcDsgcCA9IHAtPm1fbmV4dC5nZXQoKSkgeworICAgICAgICBSZWdpc3RlcklE
KiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fYXNzaWduLmdldCgpKTsK
KyAgICAgICAgCisgICAgICAgIHN3aXRjaCAocC0+bV9ub2RlLT5tX3R5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgUHJvcGVydHlOb2RlOjpDb25zdGFudDoKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dEJ5SWQobmV3T2JqLmdldCgpLCBwLT5tX25vZGUtPm5hbWUoKSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eU5vZGU6Okdl
dHRlcjoKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlcihuZXdPYmouZ2V0
KCksIHAtPm1fbm9kZS0+bmFtZSgpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0dGVyOgorICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0UHV0U2V0dGVyKG5ld09iai5nZXQoKSwgcC0+bV9ub2RlLT5uYW1lKCksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+aXNEeW5hbWljU2NvcGUoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBzdGFja0RlcHRoID0gZGVwdGg7Ci0gICAgcmV0dXJuIG1pc3NpbmdT
eW1ib2xNYXJrZXIoKTsKKyAgICAKKyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0
aW9uSWZOZWVkZWQoZHN0LCBuZXdPYmouZ2V0KCkpOwogfQogCi12b2lkIFJlc29sdmVOb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYpCi17Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICBpbnQgaW5kZXggPSBnZXRTeW1ib2xU
YWJsZUVudHJ5KGV4ZWMsIG1faWRlbnQsIHN5bWJvbFRhYmxlLCBkZXB0aCk7Ci0gICAgaWYgKGlu
ZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBpZiAoIWRlcHRoKQotICAg
ICAgICAgICAgbmV3ICh0aGlzKSBMb2NhbFZhckFjY2Vzc05vZGUoaW5kZXgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBuZXcgKHRoaXMpIFNjb3BlZFZhckFjY2Vzc05vZGUoaW5kZXgsIGRl
cHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBCcmFja2V0QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLSAgICBpZiAoIWRlcHRoKQotICAgICAgICByZXR1cm47CitSZWdpc3RlcklEKiBCcmFj
a2V0QWNjZXNzb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgpKTsKIAotICAgIG5ldyAodGhpcykgTm9uTG9j
YWxWYXJBY2Nlc3NOb2RlKGRlcHRoKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZh
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7
CiB9CiAKLUpTVmFsdWUqIExvY2FsVmFyQWNjZXNzTm9kZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2Jq
ZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICByZXR1cm4gZXhlYy0+bG9j
YWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRG90QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLUpTVmFsdWUqIExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKKyAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBiYXNlLCBtX2lkZW50KTsKIH0KIAotZG91
YmxlIExvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvTnVt
YmVyKGV4ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyZ3VtZW50
TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBMb2NhbFZhckFj
Y2Vzc05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQorUmVnaXN0ZXJJRCogQXJndW1lbnRMaXN0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRl
KGV4ZWMpLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgQVNTRVJUKG1fZXhwcik7CisgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwci5nZXQoKSk7CiB9CiAKLWludDMyX3QgTG9j
YWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50b0ludDMyKGV4ZWMp
OwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5ld0V4cHJOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdWludDMyX3QgTG9jYWxWYXJBY2Nlc3NO
b2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVn
aXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9V
SW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwci5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUqIGdldE5vbkxvY2FsU3ltYm9sKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjLCBzaXplX3QsIHNpemVfdCBzY29wZURlcHRoKQorUmVnaXN0ZXJJ
RCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhl
Yy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVn
aW4oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjb3BlRGVwdGg7ICsraXRlciwgKytp
KQotICAgICAgICBBU1NFUlQoaXRlciAhPSBjaGFpbi5lbmQoKSk7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIEpTT2JqZWN0KiBzY29wZSA9ICppdGVyOwotI2VuZGlmCi0gICAgQVNTRVJUKHNjb3BlLT5p
c1ZhcmlhYmxlT2JqZWN0KCkpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biAwOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7CisgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoYmFzZS5nZXQoKSwgZnVuYywg
Q29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpLT5ldmFsKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkp
LCBmdW5jLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBTY29wZWRW
YXJBY2Nlc3NOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKK1JlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGdldE5vbkxv
Y2FsU3ltYm9sKGV4ZWMsIG1faW5kZXgsIG1fc2NvcGVEZXB0aCk7CisgICAgUmVnaXN0ZXJJRCog
cjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLCAwLCBtX2Fy
Z3MuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBTY29wZWRWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci19CisgICAgaWYgKFJl
Z2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpCisg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KSwgbG9jYWwsIDAsIG1fYXJncy5nZXQoKSk7CiAKLWRvdWJsZSBTY29wZWRWYXJBY2Nl
c3NOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0K
LWJvb2wgU2NvcGVkVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpLT50
b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgU2NvcGVkVmFyQWNjZXNzTm9kZTo6ZXZhbHVh
dGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKS0+dG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgU2NvcGVk
VmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyktPnRvVUludDMyKGV4ZWMp
OwotfQotCi1KU1ZhbHVlKiBOb25Mb2NhbFZhckFjY2Vzc05vZGU6OmlubGluZUV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNrIGZvciBtaXNzZWQg
b3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tpcExvb2t1cChleGVj
LCBtX2lkZW50KSk7Ci0gICAgCi0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5z
Y29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigp
OwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fc2NvcGVEZXB0aDsgKytpLCArK2l0ZXIpCi0gICAgICAgIEFTU0VS
VChpdGVyICE9IGVuZCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBp
biB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotICAgIAotICAgIFBy
b3BlcnR5U2xvdCBzbG90OwotICAgIGRvIHsKLSAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsK
LSAgICAgICAgCi0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwg
c2xvdCkpCi0gICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBvLCBtX2lkZW50
KTsKLSAgICAgICAgCi0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
Ci0gICAgCi0gICAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBtX2lk
ZW50KTsKLX0KLQotSlNWYWx1ZSogTm9uTG9jYWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7Ci19Ci0KLWRvdWJsZSBOb25Mb2NhbFZhckFjY2Vzc05vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlKGV4ZWMpLT50b051bWJlcihleGVjKTsKLX0KLQotYm9vbCBOb25Mb2NhbFZhckFjY2Vz
c05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKS0+dG9Cb29sZWFuKGV4ZWMpOwotfQot
Ci1pbnQzMl90IE5vbkxvY2FsVmFyQWNjZXNzTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVj
KS0+dG9JbnQzMihleGVjKTsKLX0KKyAgICBpbnQgaW5kZXggPSAwOworICAgIHNpemVfdCBkZXB0
aCA9IDA7CisgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVudCwgaW5k
ZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgZGVwdGgsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmdW5jLCAwLCBtX2FyZ3Mu
Z2V0KCkpOworICAgIH0KIAotdWludDMyX3QgTm9uTG9jYWxWYXJBY2Nlc3NOb2RlOjpldmFsdWF0
ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZShleGVjKS0+dG9VSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVnaXN0ZXJJ
RCogZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdFJl
c29sdmVGdW5jdGlvbihiYXNlLmdldCgpLCBmdW5jLCBtX2lkZW50KTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQo
KSksIGZ1bmMsIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBFbGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZvaWQgRWxlbWVudE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3Rv
cmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQorUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJh
Y2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewotICAgIGlmIChtX25leHQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9uZXh0
LmdldCgpKTsKLSAgICBBU1NFUlQobV9ub2RlKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fbm9k
ZS5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogZnVuY3Rpb24gPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQo
KSwgcHJvcGVydHkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwgZnVuY3Rpb24sIGJhc2UuZ2V0KCksIG1f
YXJncy5nZXQoKSk7CiB9CiAKLS8vIEVDTUEgMTEuMS40Ci1KU1ZhbHVlKiBFbGVtZW50Tm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBGdW5j
dGlvbkNhbGxEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKLSAgICBKU09iamVjdCogYXJyYXkgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMsIGV4ZWMtPmVtcHR5
TGlzdCgpKTsKLSAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICBmb3IgKEVsZW1lbnROb2RlKiBuID0g
dGhpczsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBu
LT5tX25vZGUtPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotICAgICAgICBsZW5ndGggKz0gbi0+bV9lbGlzaW9uOwotICAgICAgICBhcnJheS0+cHV0KGV4
ZWMsIGxlbmd0aCsrLCB2YWwpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKKyAg
ICBSZWdpc3RlcklEKiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwg
ZnVuY3Rpb24sIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBBcnJheU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4UmVz
b2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZWdpc3RlcklE
KiBBcnJheU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQorUmVnaXN0ZXJJRCogUG9zdEluY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gbmV3QXJyYXkgPSBnZW5lcmF0b3IuZW1pdE5ld0FycmF5KGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLQotICAgIFJlZ2lzdGVy
SUQqIHZhbHVlOwotICAgIGZvciAoRWxlbWVudE5vZGUqIG4gPSBtX2VsZW1lbnQuZ2V0KCk7IG47
IG4gPSBuLT5tX25leHQuZ2V0KCkpIHsKLSAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobi0+bV9ub2RlLmdldCgpKTsKLSAgICAgICAgbGVuZ3RoICs9IG4tPm1fZWxpc2lvbjsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUluZGV4KG5ld0FycmF5LmdldCgpLCBsZW5ndGgrKywg
dmFsdWUpOworICAgIC8vIEZJWE1FOiBJIHRoaW5rIHdlIGNhbiBkZXRlY3QgdGhlIGFic2VuY2Ug
b2YgZGVwZW5kZW50IGV4cHJlc3Npb25zIGhlcmUsIAorICAgIC8vIGFuZCBlbWl0IGEgUHJlSW5j
IGluc3RlYWQgb2YgYSBQb3N0SW5jLiBBIHBvc3QtcGFzcyB0byBlbGltaW5hdGUgZGVhZAorICAg
IC8vIGNvZGUgd291bGQgd29yaywgdG9vLgorICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdl
bmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0
b3IuaXNMb2NhbENvbnN0YW50KG1faWRlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0VG9KU051bWJlcihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7
CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwpOwogICAgIH0KIAotICAgIHZhbHVlID0gZ2VuZXJhdG9yLmVt
aXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIobV9lbGlzaW9uICsgbGVu
Z3RoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKG5ld0FycmF5LmdldCgpLCBnZW5lcmF0
b3IucHJvcGVydHlOYW1lcygpLmxlbmd0aCwgdmFsdWUpOwotCi0gICAgcmV0dXJuIGdlbmVyYXRv
ci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbmV3QXJyYXkuZ2V0KCkpOwotfQotCi12
b2lkIEFycmF5Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgbm9kZVN0YWNrLmFw
cGVuZChtX2VsZW1lbnQuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjEuNAotSlNWYWx1ZSogQXJy
YXlOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U09iamVjdCogYXJyYXk7Ci0gICAgaW50IGxlbmd0aDsKLQotICAgIGlmIChtX2VsZW1lbnQpIHsK
LSAgICAgICAgYXJyYXkgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KG1fZWxlbWVudC0+ZXZhbHVh
dGUoZXhlYykpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgICAgICBsZW5n
dGggPSBtX29wdGlvbmFsID8gYXJyYXktPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKS0+dG9JbnQzMihleGVjKSA6IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSlNWYWx1
ZSogbmV3QXJyID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheUNvbnN0cnVjdG9y
KCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgICAgIGFycmF5ID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihuZXdBcnIpOwotICAgICAgICBsZW5ndGggPSAwOworICAg
IGludCBpbmRleCA9IDA7CisgICAgc2l6ZV90IGRlcHRoID0gMDsKKyAgICBpZiAoZ2VuZXJhdG9y
LmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUg
PSBnZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRl
cHRoLCBpbmRleCk7CisgICAgICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVt
aXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCB2YWx1ZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBvbGRWYWx1ZTsKICAgICB9CiAKLSAgICBpZiAobV9vcHRp
b25hbCkKLSAgICAgICAgYXJyYXktPnB1dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcihtX2VsaXNpb24gKyBsZW5ndGgpKTsKLQotICAgIHJldHVybiBhcnJheTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9iamVjdExpdGVyYWxOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogT2JqZWN0TGl0ZXJh
bE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQotewotICAgIGlmIChtX2xpc3QpCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX2xpc3QuZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0TmV3T2JqZWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOwotfQotCi12b2lk
IE9iamVjdExpdGVyYWxOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAobV9saXN0KQotICAgICAgICBub2RlU3RhY2su
YXBwZW5kKG1fbGlzdC5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMS41Ci1KU1ZhbHVlKiBPYmpl
Y3RMaXRlcmFsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgaWYgKG1fbGlzdCkKLSAgICAgICAgcmV0dXJuIG1fbGlzdC0+ZXZhbHVhdGUoZXhlYyk7
Ci0KLSAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RDb25zdHJ1
Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZ2lzdGVySUQq
IG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5n
ZXQoKSwgbV9pZGVudCwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5TGlzdE5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCitSZWdp
c3RlcklEKiBQb3N0RGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmog
PSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgCi0gICAgZ2VuZXJhdG9yLmVt
aXROZXdPYmplY3QobmV3T2JqLmdldCgpKTsKLSAgICAKLSAgICBmb3IgKFByb3BlcnR5TGlzdE5v
ZGUqIHAgPSB0aGlzOyBwOyBwID0gcC0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKHAtPm1fbm9kZS0+bV9hc3NpZ24uZ2V0KCkp
OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChwLT5tX25vZGUtPm1fdHlwZSkgewotICAgICAg
ICAgICAgY2FzZSBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50OiB7Ci0gICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRCeUlkKG5ld09iai5nZXQoKSwgcC0+bV9ub2RlLT5uYW1lKCksIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgUHJvcGVydHlOb2RlOjpHZXR0ZXI6IHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dEdldHRlcihuZXdPYmouZ2V0KCksIHAtPm1fbm9kZS0+bmFtZSgpLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb3Bl
cnR5Tm9kZTo6U2V0dGVyOiB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTZXR0
ZXIobmV3T2JqLmdldCgpLCBwLT5tX25vZGUtPm5hbWUoKSwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgIC8vIEZJWE1FOiBJ
IHRoaW5rIHdlIGNhbiBkZXRlY3QgdGhlIGFic2VuY2Ugb2YgZGVwZW5kZW50IGV4cHJlc3Npb25z
IGhlcmUsIAorICAgIC8vIGFuZCBlbWl0IGEgUHJlRGVjIGluc3RlYWQgb2YgYSBQb3N0RGVjLiBB
IHBvc3QtcGFzcyB0byBlbGltaW5hdGUgZGVhZAorICAgIC8vIGNvZGUgd291bGQgd29yaywgdG9v
LgorICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2Fs
KG1faWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50KG1faWRl
bnQpKQorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VG9KU051bWJlcihnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwog
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVk
ZWQoZHN0LCBuZXdPYmouZ2V0KCkpOwotfQotCi12b2lkIFByb3BlcnR5TGlzdE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAg
IGlmIChtX25leHQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9uZXh0LmdldCgpKTsKLSAg
ICBub2RlU3RhY2suYXBwZW5kKG1fbm9kZS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMS41Ci1K
U1ZhbHVlKiBQcm9wZXJ0eUxpc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBKU09iamVjdCogb2JqID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5vYmplY3RDb25zdHJ1Y3RvcigpLT5jb25zdHJ1Y3QoZXhlYywgZXhlYy0+ZW1wdHlMaXN0
KCkpOwogCi0gICAgZm9yIChQcm9wZXJ0eUxpc3ROb2RlKiBwID0gdGhpczsgcDsgcCA9IHAtPm1f
bmV4dC5nZXQoKSkgewotICAgICAgICBKU1ZhbHVlKiB2ID0gcC0+bV9ub2RlLT5tX2Fzc2lnbi0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICAg
ICAgc3dpdGNoIChwLT5tX25vZGUtPm1fdHlwZSkgewotICAgICAgICAgICAgY2FzZSBQcm9wZXJ0
eU5vZGU6OkdldHRlcjoKLSAgICAgICAgICAgICAgICBBU1NFUlQodi0+aXNPYmplY3QoKSk7Ci0g
ICAgICAgICAgICAgICAgb2JqLT5kZWZpbmVHZXR0ZXIoZXhlYywgcC0+bV9ub2RlLT5uYW1lKCks
IHN0YXRpY19jYXN0PEpTT2JqZWN0KiA+KHYpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgUHJvcGVydHlOb2RlOjpTZXR0ZXI6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHYtPmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIG9iai0+ZGVmaW5lU2V0dGVyKGV4
ZWMsIHAtPm1fbm9kZS0+bmFtZSgpLCBzdGF0aWNfY2FzdDxKU09iamVjdCogPih2KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6Q29uc3Rh
bnQ6Ci0gICAgICAgICAgICAgICAgb2JqLT5wdXQoZXhlYywgcC0+bV9ub2RlLT5uYW1lKCksIHYp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgaW50IGluZGV4ID0gMDsK
KyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFByb3Bl
cnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtl
cigpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZGVwdGgsIGluZGV4KTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFNjb3BlZFZhcihkZXB0aCwgaW5kZXgsIHZhbHVlLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIG9sZFZhbHVlOwogICAgIH0KIAotICAgIHJldHVybiBvYmo7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBQcm9wZXJ0eU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQo
bV9hc3NpZ24uZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjEuNQotSlNWYWx1ZSogUHJvcGVydHlO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopCi17Ci0gICAgQVNTRVJUKGZh
bHNlKTsKLSAgICByZXR1cm4ganNOdWxsKCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVl
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNl
ID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCB2YWx1ZS5nZXQoKSwgbV9pZGVudCk7CisgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5l
cmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUu
Z2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2
YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIG9sZFZhbHVlOwogfQogCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQnJhY2tldEFjY2Vzc29yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhC
cmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJlZ2lzdGVy
SUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJRCogUG9zdEluY0JyYWNrZXROb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkp
OwotICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2Ny
aXB0LmdldCgpKTsKLQotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKLX0KLQotdm9p
ZCBCcmFja2V0QWNjZXNzb3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBO
b2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0
LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLS8vIEVD
TUEgMTEuMi4xYQotSlNWYWx1ZSogQnJhY2tldEFjY2Vzc29yTm9kZTo6aW5saW5lRXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2Jh
c2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNW
YWx1ZSogdjIgPSBtX3N1YnNjcmlwdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogbyA9IHYxLT50b09iamVjdChleGVjKTsKLSAgICB1
aW50MzJfdCBpOwotICAgIGlmICh2Mi0+Z2V0VUludDMyKGkpKQotICAgICAgICByZXR1cm4gby0+
Z2V0KGV4ZWMsIGkpOwotICAgIHJldHVybiBvLT5nZXQoZXhlYywgSWRlbnRpZmllcih2Mi0+dG9T
dHJpbmcoZXhlYykpKTsKLX0KLQotSlNWYWx1ZSogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlKGV4ZWMpOwotfQotCi1kb3VibGUgQnJhY2tldEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVU
b051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2
ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0g
ICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIEJyYWNrZXRBY2Nlc3Nvck5v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENF
UFRJT05CT09MRUFOCi0gICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0KLQotaW50MzJf
dCBCcmFja2V0QWNjZXNzb3JOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwot
ICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMp
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdC5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJh
dG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHBy
b3BlcnR5LmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0
UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFs
dWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotdWludDMyX3QgQnJhY2tldEFj
Y2Vzc29yTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKK1JlZ2lzdGVySUQqIFBvc3REZWNCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IGlubGlu
ZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVy
biB2LT50b1VJbnQzMihleGVjKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
ZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICBSZWdpc3RlcklE
KiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNl
LmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1
ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvdEFjY2Vzc29yTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBEb3RBY2Nl
c3Nvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotdm9pZCBEb3RBY2Nlc3Nvck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQorUmVnaXN0ZXJJRCogUG9zdEluY0RvdE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZ2lzdGVySUQqIG9sZFZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHZhbHVlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwg
bV9pZGVudCwgdmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotLy8gRUNN
QSAxMS4yLjFiCi1KU1ZhbHVlKiBEb3RBY2Nlc3Nvck5vZGU6OmlubGluZUV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogUG9zdERlY0RvdE5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAg
IEpTVmFsdWUqIHYgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCi0gICAgcmV0dXJuIHYtPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgbV9pZGVu
dCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsK
KyAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4g
b2xkVmFsdWU7CiB9CiAKLUpTVmFsdWUqIERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4
ZWMpOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhFcnJvck5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotZG91YmxlIERvdEFjY2Vz
c29yTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
K1JlZ2lzdGVySUQqIFBvc3RmaXhFcnJvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051
bWJlcihleGVjKTsKKyAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVu
Y2VFcnJvciwgbV9vcGVyYXRvciA9PSBPcFBsdXNQbHVzCisgICAgICAgID8gIlBvc3RmaXggKysg
b3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5jZS4iCisgICAg
ICAgIDogIlBvc3RmaXggLS0gb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBh
IHJlZmVyZW5jZS4iKTsKIH0KIAotYm9vbCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAg
cmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBEZWxldGVSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1pbnQzMl90IERvdEFjY2Vzc29yTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAg
IEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0KKyAgICBpZiAoZ2VuZXJh
dG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpCisgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZmFsc2UpOwogCi11aW50
MzJfdCBEb3RBY2Nlc3Nvck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwot
ICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b1VJbnQzMihleGVj
KTsKKyAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZShnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIG1faWRlbnQpOworICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlKSwg
YmFzZSwgbV9pZGVudCk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBB
cmd1bWVudExpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVy
SUQqIEFyZ3VtZW50TGlzdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQotewotICAgIEFTU0VSVChtX2V4cHIpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIuZ2V0KCkpOwotfQotCi12b2lkIEFyZ3VtZW50TGlz
dE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0
YWNrKQotewotICAgIGlmIChtX25leHQpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9uZXh0
LmdldCgpKTsKLSAgICBBU1NFUlQobV9leHByKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhw
ci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi40Ci12b2lkIEFyZ3VtZW50TGlzdE5vZGU6OmV2
YWx1YXRlTGlzdChPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgTGlzdCYgbGlzdCkKLXsK
LSAgICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+bV9uZXh0Lmdl
dCgpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBuLT5tX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwot
ICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WT0lECi0gICAgICAgIGxpc3QuYXBwZW5kKHYpOwot
ICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyZ3VtZW50c05v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBBcmd1bWVudHNOb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3Qg
U3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykK
LXsKLSAgICBpZiAobV9saXN0Tm9kZSkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2xpc3RO
b2RlLmdldCgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5ld0V4
cHJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCog
TmV3RXhwck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2V4cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgbV9hcmdzLmdldCgpKTsKLX0K
LQotdm9pZCBOZXdFeHByTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fYXJncykKLSAgICAgICAgbm9kZVN0YWNr
LmFwcGVuZChtX2FyZ3MuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgp
KTsKLX0KLQotLy8gRUNNQSAxMS4yLjIKLQotSlNWYWx1ZSogTmV3RXhwck5vZGU6OmlubGluZUV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYg
PSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0K
LSAgICBMaXN0IGFyZ0xpc3Q7Ci0gICAgaWYgKG1fYXJncykgewotICAgICAgICBtX2FyZ3MtPmV2
YWx1YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICB9Ci0KLSAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAl
cykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCBuZXcuIiwgdiwgbV9leHBy
LmdldCgpKTsKLQotICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKLSAgICBpZiAodi0+
Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSkKLSAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3Vs
dCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYSBjb25zdHJ1Y3Rvci4gQ2Fubm90IGJlIHVzZWQg
d2l0aCBuZXcuIiwgdiwgbV9leHByLmdldCgpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYpLT5jb25zdHJ1Y3QoZXhlYywgYXJnTGlzdCk7Ci19Ci0KLUpTVmFsdWUqIE5l
d0V4cHJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci19Ci0KLWRvdWJsZSBOZXdFeHByTm9kZTo6
ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIE5ld0V4cHJO
b2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWludDMy
X3QgTmV3RXhwck5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pT
X0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Ci19Ci0K
LXVpbnQzMl90IE5ld0V4cHJOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9VSW50MzIoZXhl
Yyk7Ci19Ci0KLXRlbXBsYXRlIDxFeHByZXNzaW9uTm9kZTo6Q2FsbGVyVHlwZSBjYWxsZXJUeXBl
LCBib29sIHNjb3BlRGVwdGhJc1plcm8+IAotaW5saW5lIEpTVmFsdWUqIEV4cHJlc3Npb25Ob2Rl
OjpyZXNvbHZlQW5kQ2FsbChPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIHNpemVfdCBzY29wZURlcHRoKQot
ewotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAg
IFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWlu
SXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICBpZiAoIXNjb3BlRGVwdGhJc1plcm8p
IHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY29wZURlcHRoOyArK2l0ZXIsICsr
aSkKLSAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IGNoYWluLmVuZCgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gd2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWlu
Ci0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAg
IEpTT2JqZWN0KiBiYXNlOwotICAgIGRvIHsKLSAgICAgICAgYmFzZSA9ICppdGVyOwotICAgICAg
ICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAg
ICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgaWRlbnQpOwotICAg
ICAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgICAgICAgICAgaWYgKCF2LT5p
c09iamVjdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4i
LCB2LCBpZGVudCk7Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jID0gc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPih2KTsKLQotICAgICAgICAgICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIk9i
amVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMgbm90IGFsbG93IGNhbGxzLiIs
IHYsIGlkZW50KTsKLQotICAgICAgICAgICAgTGlzdCBhcmdMaXN0OwotICAgICAgICAgICAgYXJn
cy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOwotICAgICAgICAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLQotICAgICAgICAgICAgaWYgKGNhbGxlclR5cGUgPT0gRXZhbE9wZXJhdG9y
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2UgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpICYmIGZ1bmMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ID0gYmFzZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmMtPmNh
bGwoZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgKytpdGVyOwot
ICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLQotICAgIHJldHVybiB0aHJvd1VuZGVmaW5lZFZh
cmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOwotfQotCi1SZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCk7Ci0gICAgUmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKLSAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShiYXNlLmdldCgpLCBmdW5j
LCBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPmV2YWwpOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQo
KSksIGZ1bmMsIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgRXZhbEZ1bmN0
aW9uQ2FsbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLX0KLQot
SlNWYWx1ZSogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiByZXNvbHZlQW5kQ2FsbDxFdmFsT3BlcmF0b3Is
IHRydWU+KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ldmFsLCBtX2FyZ3MuZ2V0KCkpOwot
fQotCi1SZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZ2lzdGVySUQqIHIw
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMCwgMCwgbV9hcmdz
LmdldCgpKTsKLX0KLQotdm9pZCBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNv
bnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQo
KSk7Ci19Ci0KLS8vIEVDTUEgMTEuMi4zCi1KU1ZhbHVlKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUq
IHYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICBpZiAoIXYtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBu
b3Qgb2JqZWN0LiIsIHYsIG1fZXhwci5nZXQoKSk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGZ1
bmMgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpOwotCi0gICAgaWYgKCFmdW5jLT5pbXBsZW1l
bnRzQ2FsbCgpKSB7Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwg
Ik9iamVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMgbm90IGFsbG93IGNhbGxz
LiIsIHYsIG1fZXhwci5nZXQoKSk7Ci0gICAgfQotCi0gICAgTGlzdCBhcmdMaXN0OwotICAgIG1f
YXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgp
OwotICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOwotfQotCi1S
ZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxv
Y2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpCi0gICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9j
YWwsIDAsIG1fYXJncy5nZXQoKSk7Ci0KLSAgICBpbnQgaW5kZXggPSAwOwotICAgIHNpemVfdCBk
ZXB0aCA9IDA7Ci0gICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVudCwg
aW5kZXgsIGRlcHRoKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAgICAg
ICAgUmVnaXN0ZXJJRCogZnVuYyA9IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFyKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgZGVwdGgsIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmdW5jLCAwLCBtX2Fy
Z3MuZ2V0KCkpOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIFJlZ2lzdGVySUQqIGZ1bmMgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlRnVuY3Rpb24oYmFz
ZS5nZXQoKSwgZnVuYywgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLCBiYXNlLmdl
dCgpLCBtX2FyZ3MuZ2V0KCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKLQot
ICAgIHNpemVfdCBkZXB0aCA9IDA7Ci0gICAgaW50IGluZGV4ID0gZ2V0U3ltYm9sVGFibGVFbnRy
eShleGVjLCBtX2lkZW50LCBzeW1ib2xUYWJsZSwgZGVwdGgpOwotICAgIGlmIChpbmRleCAhPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKLSAgICAgICAgaWYgKCFkZXB0aCkKLSAgICAgICAgICAg
IG5ldyAodGhpcykgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlKGluZGV4KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbmV3ICh0aGlzKSBTY29wZWRWYXJGdW5jdGlvbkNhbGxOb2RlKGluZGV4
LCBkZXB0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFkZXB0aCkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG5ldyAodGhpcykgTm9uTG9jYWxWYXJGdW5jdGlv
bkNhbGxOb2RlKGRlcHRoKTsKLX0KLQotLy8gRUNNQSAxMS4yLjMKLUpTVmFsdWUqIEZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICAvLyBDaGVjayBmb3IgbWlzc2VkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0
eS4KLSAgICBBU1NFUlQoIWNhblNraXBMb29rdXAoZXhlYywgbV9pZGVudCkpOwotCi0gICAgcmV0
dXJuIHJlc29sdmVBbmRDYWxsPEZ1bmN0aW9uQ2FsbCwgdHJ1ZT4oZXhlYywgbV9pZGVudCwgbV9h
cmdzLmdldCgpKTsKLX0KLQotSlNWYWx1ZSogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZShleGVjKTsKLX0KLQotZG91YmxlIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFs
dWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFs
dWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1C
RVIKLSAgICByZXR1cm4gdi0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWJvb2wgRnVuY3Rpb25DYWxs
UmVzb2x2ZU5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNf
Q0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0K
LQotaW50MzJfdCBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+
dG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2
YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNW
YWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgotICAgIHJldHVybiB2LT50b1VJbnQzMihleGVjKTsKLX0KLQotSlNWYWx1ZSogTG9jYWxW
YXJGdW5jdGlvbkNhbGxOb2RlOjppbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5z
Y29wZUNoYWluKCkudG9wKCkpOwotCi0gICAgSlNWYWx1ZSogdiA9IGV4ZWMtPmxvY2FsU3RvcmFn
ZSgpW21faW5kZXhdLnZhbHVlOwotCi0gICAgaWYgKCF2LT5pc09iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4
cHJlc3Npb24gJXMpIGlzIG5vdCBvYmplY3QuIiwgdiwgbV9pZGVudCk7Ci0KLSAgICBKU09iamVj
dCogZnVuYyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odik7Ci0gICAgaWYgKCFmdW5jLT5pbXBs
ZW1lbnRzQ2FsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Is
ICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxs
cy4iLCB2LCBtX2lkZW50KTsKLQotICAgIExpc3QgYXJnTGlzdDsKLSAgICBtX2FyZ3MtPmV2YWx1
YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0g
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKLSAgICByZXR1
cm4gZnVuYy0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKLX0KLQotSlNWYWx1ZSogTG9j
YWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci19Ci0KLWRvdWJsZSBM
b2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMp
OwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051bWJlcihl
eGVjKTsKLX0KLQotYm9vbCBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBp
bmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAg
cmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0KLQotaW50MzJfdCBMb2NhbFZhckZ1bmN0aW9u
Q2FsbE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQz
Ml90IExvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUlu
dDMyKGV4ZWMpOwotfQotCi1KU1ZhbHVlKiBTY29wZWRWYXJGdW5jdGlvbkNhbGxOb2RlOjppbmxp
bmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQo
ZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAg
IAotICAgIEpTVmFsdWUqIHYgPSBnZXROb25Mb2NhbFN5bWJvbChleGVjLCBtX2luZGV4LCBtX3Nj
b3BlRGVwdGgpOwotICAgIAotICAgIGlmICghdi0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNz
aW9uICVzKSBpcyBub3Qgb2JqZWN0LiIsIHYsIG1faWRlbnQpOwotICAgIAotICAgIEpTT2JqZWN0
KiBmdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KTsKLSAgICBpZiAoIWZ1bmMtPmltcGxl
bWVudHNDYWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwg
Ik9iamVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMgbm90IGFsbG93IGNhbGxz
LiIsIHYsIG1faWRlbnQpOwotICAgIAotICAgIExpc3QgYXJnTGlzdDsKLSAgICBtX2FyZ3MtPmV2
YWx1YXRlTGlzdChleGVjLCBhcmdMaXN0KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
Ci0gICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKLSAgICBy
ZXR1cm4gZnVuYy0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKLX0KLQotSlNWYWx1ZSog
U2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlKGV4ZWMpOwotfQotCi1kb3Vi
bGUgU2NvcGVkVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVt
YmVyKGV4ZWMpOwotfQotCi1ib29sIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRl
VG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUq
IHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFO
Ci0gICAgcmV0dXJuIHYtPnRvQm9vbGVhbihleGVjKTsKLX0KLQotaW50MzJfdCBTY29wZWRWYXJG
dW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b0ludDMyKGV4ZWMpOwotfQot
Ci11aW50MzJfdCBTY29wZWRWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVF
dmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4g
di0+dG9VSW50MzIoZXhlYyk7Ci19Ci0KLUpTVmFsdWUqIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxs
Tm9kZTo6aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAgQVNT
RVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKLSAgICAKLSAgICByZXR1cm4gcmVz
b2x2ZUFuZENhbGw8RnVuY3Rpb25DYWxsLCBmYWxzZT4oZXhlYywgbV9pZGVudCwgbV9hcmdzLmdl
dCgpLCBtX3Njb3BlRGVwdGgpOwotfQotCi1KU1ZhbHVlKiBOb25Mb2NhbFZhckZ1bmN0aW9uQ2Fs
bE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KLQotZG91YmxlIE5vbkxvY2FsVmFyRnVuY3Rp
b25DYWxsTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvTnVtYmVyKGV4ZWMpOwotfQotCi1i
b29sIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4gdi0+
dG9Cb29sZWFuKGV4ZWMpOwotfQotCi1pbnQzMl90IE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9k
ZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgTm9u
TG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBpbmxpbmVFdmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICByZXR1cm4gdi0+dG9VSW50MzIo
ZXhlYyk7Ci19Ci0KLVJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwot
ICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0
LmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlW
YWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7Ci0gICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGJhc2UuZ2V0KCkpLCBmdW5jdGlvbiwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpKTsKLX0KLQot
dm9pZCBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2Fy
Z3MuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9zdWJzY3JpcHQuZ2V0KCkpOwotICAg
IG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4yLjMKLUpT
VmFsdWUqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsID0gbV9iYXNlLT5ldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogc3Vi
c2NyaXB0VmFsID0gbV9zdWJzY3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotCi0gICAgSlNPYmplY3Qq
IGJhc2VPYmogPSBiYXNlVmFsLT50b09iamVjdChleGVjKTsKLSAgICB1aW50MzJfdCBpOwotICAg
IFByb3BlcnR5U2xvdCBzbG90OwotCi0gICAgSlNWYWx1ZSogZnVuY1ZhbDsKLSAgICBpZiAoc3Vi
c2NyaXB0VmFsLT5nZXRVSW50MzIoaSkpIHsKLSAgICAgICAgaWYgKGJhc2VPYmotPmdldFByb3Bl
cnR5U2xvdChleGVjLCBpLCBzbG90KSkKLSAgICAgICAgICAgIGZ1bmNWYWwgPSBzbG90LmdldFZh
bHVlKGV4ZWMsIGJhc2VPYmosIGkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jVmFs
ID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBJZGVudGlmaWVyIGlkZW50
KHN1YnNjcmlwdFZhbC0+dG9TdHJpbmcoZXhlYykpOwotICAgICAgICBpZiAoYmFzZU9iai0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkKLSAgICAgICAgICAgIGZ1bmNWYWwgPSBi
YXNlT2JqLT5nZXQoZXhlYywgaWRlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5j
VmFsID0ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotCi0gICAgaWYgKCFmdW5jVmFsLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXNb
JXNdKSBpcyBub3Qgb2JqZWN0LiIsIGZ1bmNWYWwsIG1fYmFzZS5nZXQoKSwgbV9zdWJzY3JpcHQu
Z2V0KCkpOwotCi0gICAgSlNPYmplY3QqIGZ1bmMgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGZ1
bmNWYWwpOwotCi0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmplY3QgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzWyVzXSkgZG9lcyBub3QgYWxsb3cgY2FsbHMuIiwgZnVuY1ZhbCwgbV9iYXNlLmdl
dCgpLCBtX3N1YnNjcmlwdC5nZXQoKSk7Ci0KLSAgICBMaXN0IGFyZ0xpc3Q7Ci0gICAgbV9hcmdz
LT5ldmFsdWF0ZUxpc3QoZXhlYywgYXJnTGlzdCk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gYmFzZU9iajsKLSAgICBBU1NFUlQodGhpc09i
aik7Ci0gICAgQVNTRVJUKHRoaXNPYmotPmlzT2JqZWN0KCkpOwotICAgIEFTU0VSVCghdGhpc09i
ai0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpOwotCi0gICAgLy8gTm8gbmVlZCB0byBjYWxsIHRvVGhp
c09iamVjdCgpIG9uIHRoZSB0aGlzT2JqIGFzIGl0IGlzIGtub3duIG5vdCB0byBiZSB0aGUgR2xv
YmFsT2JqZWN0IG9yIEFjdGl2YXRpb25PYmplY3QKLSAgICByZXR1cm4gZnVuYy0+Y2FsbChleGVj
LCB0aGlzT2JqLCBhcmdMaXN0KTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGRvdEV4cHJOb3RB
bk9iamVjdFN0cmluZygpIEtKU19GQVNUX0NBTEw7Ci1zdGF0aWMgY29uc3QgY2hhciogZG90RXhw
ck5vdEFuT2JqZWN0U3RyaW5nKCkKLXsKLSAgICByZXR1cm4gIlZhbHVlICVzIChyZXN1bHQgb2Yg
ZXhwcmVzc2lvbiAlcy4lcykgaXMgbm90IG9iamVjdC4iOwotfQotCi1zdGF0aWMgY29uc3QgY2hh
ciogZG90RXhwckRvZXNOb3RBbGxvd0NhbGxzU3RyaW5nKCkgS0pTX0ZBU1RfQ0FMTDsKLXN0YXRp
YyBjb25zdCBjaGFyKiBkb3RFeHByRG9lc05vdEFsbG93Q2FsbHNTdHJpbmcoKQotewotICAgIHJl
dHVybiAiT2JqZWN0ICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcy4lcykgZG9lcyBub3QgYWxs
b3cgY2FsbHMuIjsKLX0KLQotUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsK
LSAgICBSZWdpc3RlcklEKiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgp
KSwgZnVuY3Rpb24sIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSk7Ci19Ci0KLXZvaWQgRnVuY3Rp
b25DYWxsRG90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2FyZ3MuZ2V0KCkpOwotICAg
IG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS4yLjMKLUpT
VmFsdWUqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBtX2Jhc2UtPmV2YWx1
YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09iamVjdCog
YmFzZU9iaiA9IGJhc2VWYWwtPnRvT2JqZWN0KGV4ZWMpOwotICAgIFByb3BlcnR5U2xvdCBzbG90
OwotICAgIEpTVmFsdWUqIGZ1bmNWYWwgPSBiYXNlT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
bV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2VPYmosIG1faWRlbnQpIDog
anNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgaWYgKCFm
dW5jVmFsLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IsIGRvdEV4cHJOb3RBbk9iamVjdFN0cmluZygpLCBmdW5jVmFsLCBtX2Jhc2UuZ2V0KCks
IG1faWRlbnQpOwotCi0gICAgSlNPYmplY3QqIGZ1bmMgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KGZ1bmNWYWwpOwotCi0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsIGRvdEV4cHJEb2VzTm90QWxsb3dDYWxs
c1N0cmluZygpLCBmdW5jVmFsLCBtX2Jhc2UuZ2V0KCksIG1faWRlbnQpOwotCi0gICAgTGlzdCBh
cmdMaXN0OwotICAgIG1fYXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGFyZ0xpc3QpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09iamVjdCogdGhpc09iaiA9IGJhc2VPYmo7
Ci0gICAgQVNTRVJUKHRoaXNPYmopOwotICAgIEFTU0VSVCh0aGlzT2JqLT5pc09iamVjdCgpKTsK
LSAgICBBU1NFUlQoIXRoaXNPYmotPmlzQWN0aXZhdGlvbk9iamVjdCgpKTsKLQotICAgIC8vIE5v
IG5lZWQgdG8gY2FsbCB0b1RoaXNPYmplY3QoKSBvbiB0aGUgdGhpc09iaiBhcyBpdCBpcyBrbm93
biBub3QgdG8gYmUgdGhlIEdsb2JhbE9iamVjdCBvciBBY3RpdmF0aW9uT2JqZWN0Ci0gICAgcmV0
dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7Ci19Ci0KLUpTVmFsdWUqIEZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLX0KLQotZG91YmxlIEZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IGlubGluZUV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiB2LT50b051bWJlcihleGVjKTsKLX0K
LQotYm9vbCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiB2LT50b0Jv
b2xlYW4oZXhlYyk7Ci19Ci0KLWludDMyX3QgRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGVU
b0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYg
PSBpbmxpbmVFdmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAg
ICByZXR1cm4gdi0+dG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgRnVuY3Rpb25DYWxsRG90
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlKiB2ID0gaW5saW5lRXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIHYtPnRvVUludDMyKGV4ZWMpOwotfQotCi0vLyBFQ01B
IDExLjMKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhSZXNvbHZl
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQqIFBv
c3RJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCi17Ci0gICAgLy8gRklYTUU6IEkgdGhpbmsgd2UgY2FuIGRldGVjdCB0aGUg
YWJzZW5zZSBvZiBkZXBlbmRlbnQgZXhwcmVzc2lvbnMgaGVyZSwgCi0gICAgLy8gYW5kIGVtaXQg
YSBQcmVJbmMgaW5zdGVhZCBvZiBhIFBvc3RJbmMuIEEgcG9zdC1wYXNzIHRvIGVsaW1pbmF0ZSBk
ZWFkCi0gICAgLy8gY29kZSB3b3VsZCB3b3JrLCB0b28uCi0gICAgaWYgKFJlZ2lzdGVySUQqIGxv
Y2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYg
KGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkpCi0gICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRUb0pTTnVtYmVyKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IGxvY2FsKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFBvc3RJbmMo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwotICAgIH0KLQotICAgIGlu
dCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICBpZiAoZ2VuZXJhdG9yLmZp
bmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBn
ZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRo
LCBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQ
b3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCB2YWx1ZS5nZXQo
KSk7Ci0gICAgICAgIHJldHVybiBvbGRWYWx1ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKLSAgICBSZWdpc3RlcklEKiBvbGRW
YWx1ZSA9IGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCB2YWx1ZS5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCks
IG1faWRlbnQsIHZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4gb2xkVmFsdWU7Ci19Ci0KLS8vIElu
Y3JlbWVudAotdm9pZCBQb3N0SW5jUmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IGNvbnN0IExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlLCBOb2RlU3RhY2smKQotewotICAgIGlu
dCBpbmRleCA9IHN5bWJvbFRhYmxlLmdldChtX2lkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5k
ZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAg
IGlmIChpc0NvbnN0YW50KGxvY2FsU3RvcmFnZSwgaW5kZXgpKQotICAgICAgICAgICAgbmV3ICh0
aGlzKSBQb3N0SW5jQ29uc3ROb2RlKGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bmV3ICh0aGlzKSBQb3N0SW5jTG9jYWxWYXJOb2RlKGluZGV4KTsKLSAgICB9Ci19Ci0KLUpTVmFs
dWUqIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5p
dHkuCi0gICAgQVNTRVJUKCFjYW5Ta2lwTG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIGNv
bnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3Ig
ZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGlu
ZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgZG8gewotICAgICAgICBpZiAoKCppdGVyKS0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICAvLyBJZiBtX2lkZW50
IGlzICdhcmd1bWVudHMnLCB0aGUgYmFzZS0+Z2V0UHJvcGVydHlTbG90KCkgbWF5IGNhdXNlIAot
ICAgICAgICAgICAgLy8gYmFzZSAod2hpY2ggbXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1
Y2ggdGhpcyBjYXNlKSB0byBiZSB0b3JuCi0gICAgICAgICAgICAvLyBvZmYgZnJvbSB0aGUgYWN0
aXZhdGlvbiBzdGFjaywgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGdldCBpdCBhZ2FpbgotICAg
ICAgICAgICAgLy8gZnJvbSB0aGUgU2NvcGVDaGFpbkl0ZXJhdG9yLgotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwotICAgICAgICAgICAgSlNWYWx1ZSog
diA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCktPnRvSlNOdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1iZXIodi0+dG9OdW1i
ZXIoZXhlYykgKyAxKSk7Ci0gICAgICAgICAgICByZXR1cm4gdjsKLSAgICAgICAgfQotCi0gICAg
ICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICByZXR1cm4gdGhy
b3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotfQotCi12b2lkIFBvc3RJ
bmNSZXNvbHZlTm9kZTo6b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpCi17Ci0gICAgbmV3
ICh0aGlzKSBQcmVJbmNSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCk7Ci19Ci0KLUpTVmFs
dWUqIFBvc3RJbmNMb2NhbFZhck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNj
b3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAgICBKU1ZhbHVlKiogc2xvdCA9ICZleGVjLT5sb2NhbFN0
b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLSAgICBKU1ZhbHVlKiB2ID0gKCpzbG90KS0+dG9KU051
bWJlcihleGVjKTsKLSAgICAqc2xvdCA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSk7
Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLXZvaWQgUG9zdEluY0xvY2FsVmFyTm9kZTo6b3B0aW1pemVG
b3JVbm5lY2Vzc2FyeVJlc3VsdCgpCi17Ci0gICAgbmV3ICh0aGlzKSBQcmVJbmNMb2NhbFZhck5v
ZGUobV9pbmRleCk7Ci19Ci0KLS8vIERlY3JlbWVudAotUmVnaXN0ZXJJRCogUG9zdERlY1Jlc29s
dmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKLXsKLSAgICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9m
IGRlcGVuZGVudCBleHByZXNzaW9ucyBoZXJlLCAKLSAgICAvLyBhbmQgZW1pdCBhIFByZURlYyBp
bnN0ZWFkIG9mIGEgUG9zdERlYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKLSAgICAv
LyBjb2RlIHdvdWxkIHdvcmssIHRvby4KLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5l
cmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgewotICAgICAgICBpZiAoZ2VuZXJhdG9y
LmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7Ci0gICAgfQotCi0gICAgaW50IGluZGV4ID0g
MDsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFBy
b3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1h
cmtlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZGVwdGgsIGluZGV4KTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOwotICAgICAgICBnZW5l
cmF0b3IuZW1pdFB1dFNjb3BlZFZhcihkZXB0aCwgaW5kZXgsIHZhbHVlLmdldCgpKTsKLSAgICAg
ICAgcmV0dXJuIG9sZFZhbHVlOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgdmFsdWUuZ2V0KCksIG1faWRlbnQpOwotICAgIFJlZ2lzdGVySUQqIG9sZFZhbHVlID0gZ2Vu
ZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHZhbHVl
LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwg
dmFsdWUuZ2V0KCkpOwotICAgIHJldHVybiBvbGRWYWx1ZTsKLX0KLQotdm9pZCBQb3N0RGVjUmVz
b2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYgbG9j
YWxTdG9yYWdlLCBOb2RlU3RhY2smKQotewotICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlLmdl
dChtX2lkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0g
bWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIGlmIChpc0NvbnN0YW50KGxvY2FsU3Rv
cmFnZSwgaW5kZXgpKQotICAgICAgICAgICAgbmV3ICh0aGlzKSBQb3N0RGVjQ29uc3ROb2RlKGlu
ZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3ICh0aGlzKSBQb3N0RGVjTG9jYWxW
YXJOb2RlKGluZGV4KTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIFBvc3REZWNSZXNvbHZlTm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gQ2hlY2sg
Zm9yIG1pc3NlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuCi0gICAgQVNTRVJUKCFjYW5Ta2lw
TG9va3VwKGV4ZWMsIG1faWRlbnQpKTsKLQotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0g
ZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4u
YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAg
ICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAg
ICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgZG8g
ewotICAgICAgICBpZiAoKCppdGVyKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNs
b3QpKSB7Ci0gICAgICAgICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jlc29sdmVO
b2RlOjpldmFsdWF0ZSgpLgotCi0gICAgICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwot
ICAgICAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVu
dCktPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVu
dCwganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7Ci0gICAgICAgICAgICByZXR1cm4g
djsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVu
ZCk7Ci0KLSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIG1faWRl
bnQpOwotfQotCi12b2lkIFBvc3REZWNSZXNvbHZlTm9kZTo6b3B0aW1pemVGb3JVbm5lY2Vzc2Fy
eVJlc3VsdCgpCi17Ci0gICAgbmV3ICh0aGlzKSBQcmVEZWNSZXNvbHZlTm9kZShQbGFjZW1lbnRO
ZXdBZG9wdCk7Ci19Ci0KLUpTVmFsdWUqIFBvc3REZWNMb2NhbFZhck5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChleGVjLT52YXJpYWJs
ZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAgICBKU1ZhbHVlKiog
c2xvdCA9ICZleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLSAgICBKU1ZhbHVl
KiB2ID0gKCpzbG90KS0+dG9KU051bWJlcihleGVjKTsKLSAgICAqc2xvdCA9IGpzTnVtYmVyKHYt
PnRvTnVtYmVyKGV4ZWMpIC0gMSk7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLWRvdWJsZSBQb3N0RGVj
TG9jYWxWYXJOb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMt
PnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAgICBKU1ZhbHVlKiogc2xvdCA9ICZleGVjLT5sb2Nh
bFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZTsKLSAgICBkb3VibGUgbiA9ICgqc2xvdCktPnRvTnVt
YmVyKGV4ZWMpOwotICAgICpzbG90ID0ganNOdW1iZXIobiAtIDEpOwotICAgIHJldHVybiBuOwot
fQotCi1kb3VibGUgUG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb051
bWJlcihleGVjKTsKLX0KLQotYm9vbCBQb3N0RGVjTG9jYWxWYXJOb2RlOjpldmFsdWF0ZVRvQm9v
bGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBkb3VibGUgcmVzdWx0
ID0gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICByZXR1cm4gIHJlc3VsdCA+IDAu
MCB8fCAwLjAgPiByZXN1bHQ7IC8vIE5hTiBwcm9kdWNlcyBmYWxzZSBhcyB3ZWxsCi19Ci0KLWlu
dDMyX3QgUG9zdERlY0xvY2FsVmFyTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2
YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotfQotCi11aW50MzJfdCBQb3N0RGVjTG9jYWxWYXJOb2Rl
OjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsK
LX0KLQotdm9pZCBQb3N0RGVjTG9jYWxWYXJOb2RlOjpvcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVz
dWx0KCkKLXsKLSAgICBuZXcgKHRoaXMpIFByZURlY0xvY2FsVmFyTm9kZShtX2luZGV4KTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhCcmFja2V0Tm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUG9zdGZpeEJyYWNrZXRO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLVJlZ2lzdGVySUQqIFBvc3RJbmNCcmFj
a2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlLmdldCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBi
YXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBn
ZW5lcmF0b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFs
dWUuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVy
dHkuZ2V0KCksIHZhbHVlLmdldCgpKTsKLSAgICByZXR1cm4gb2xkVmFsdWU7Ci19Ci0KLUpTVmFs
dWUqIFBvc3RJbmNCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9
IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwotCi0g
ICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsKLSAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIo
cHJvcGVydHlJbmRleCkpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIEpT
VmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xv
dCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgICAgICBKU1ZhbHVl
KiB2MiA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgICAgIGJhc2UtPnB1dChleGVjLCBwcm9w
ZXJ0eUluZGV4LCBqc051bWJlcih2Mi0+dG9OdW1iZXIoZXhlYykgKyAxKSk7Ci0KLSAgICAgICAg
cmV0dXJuIHYyOwotICAgIH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlw
dC0+dG9TdHJpbmcoZXhlYykpOwotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUq
IHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSA/IHNs
b3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gdi0+dG9KU051
bWJlcihleGVjKTsKLSAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBqc051bWJlcih2
Mi0+dG9OdW1iZXIoZXhlYykgKyAxKSk7Ci0gICAgcmV0dXJuIHYyOwotfQotCi1SZWdpc3RlcklE
KiBQb3N0RGVjQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3Bl
cnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQq
IG9sZFZhbHVlID0gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIHZhbHVlLmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2Uu
Z2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIG9sZFZhbHVl
OwotfQotCi1KU1ZhbHVlKiBQb3N0RGVjQnJhY2tldE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+
ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVl
KiBzdWJzY3JpcHQgPSBtX3N1YnNjcmlwdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKLQotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVj
dChleGVjKTsKLQotICAgIHVpbnQzMl90IHByb3BlcnR5SW5kZXg7Ci0gICAgaWYgKHN1YnNjcmlw
dC0+Z2V0VUludDMyKHByb3BlcnR5SW5kZXgpKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90
OwotICAgICAgICBKU1ZhbHVlKiB2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eUluZGV4
KSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAg
ICAgICAgSlNWYWx1ZSogdjIgPSB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAgICAgICBiYXNlLT5w
dXQoZXhlYywgcHJvcGVydHlJbmRleCwganNOdW1iZXIodjItPnRvTnVtYmVyKGV4ZWMpIC0gMSkp
OwotICAgICAgICByZXR1cm4gdjI7Ci0gICAgfQotCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUoc3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgSlNWYWx1ZSogdiA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRl
ZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogdjIg
PSB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUs
IGpzTnVtYmVyKHYyLT50b051bWJlcihleGVjKSAtIDEpKTsKLSAgICByZXR1cm4gdjI7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4RG90Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUG9zdGZpeERvdE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAg
IG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotUmVnaXN0ZXJJRCogUG9zdElu
Y0RvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgbV9pZGVu
dCk7Ci0gICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBnZW5lcmF0b3IuZW1pdFBvc3RJbmMoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0KCkpOwotICAgIGdlbmVyYXRv
ci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0
dXJuIG9sZFZhbHVlOwotfQotCi1KU1ZhbHVlKiBQb3N0SW5jRG90Tm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0g
bV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAg
IEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLT50b09iamVjdChleGVjKTsKLQotICAgIFByb3Bl
cnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgbV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDog
anNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1
ZSogdjIgPSB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50
LCBqc051bWJlcih2Mi0+dG9OdW1iZXIoZXhlYykgKyAxKSk7Ci0gICAgcmV0dXJuIHYyOwotfQot
Ci1SZWdpc3RlcklEKiBQb3N0RGVjRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICBSZWdpc3RlcklEKiBvbGRWYWx1ZSA9IGdlbmVy
YXRvci5lbWl0UG9zdERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5n
ZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZh
bHVlLmdldCgpKTsKLSAgICByZXR1cm4gb2xkVmFsdWU7Ci19Ci0KLUpTVmFsdWUqIFBvc3REZWNE
b3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0
KGV4ZWMpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdiA9IGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhl
YywgYmFzZSwgbV9pZGVudCkgOiBqc1VuZGVmaW5lZCgpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0KLSAgICBKU1ZhbHVlKiB2MiA9IHYtPnRvSlNOdW1iZXIoZXhlYyk7Ci0gICAgYmFz
ZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYyLT50b051bWJlcihleGVjKSAtIDEpKTsK
LSAgICByZXR1cm4gdjI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
b3N0Zml4RXJyb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJl
Z2lzdGVySUQqIFBvc3RmaXhFcnJvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCopCi17Ci0gICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRv
ciwgUmVmZXJlbmNlRXJyb3IsIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/ICJQb3N0Zml4ICsr
IG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6ICJQ
b3N0Zml4IC0tIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVu
Y2UuIik7Ci19Ci0KLUpTVmFsdWUqIFBvc3RmaXhFcnJvck5vZGU6OmV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHRocm93RXJyb3IoZXhlYywgUmVmZXJlbmNl
RXJyb3IsICJQb3N0Zml4ICVzIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3Qg
YSByZWZlcmVuY2UuIiwKLSAgICAgICAgICAgICAgIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/
ICIrKyIgOiAiLS0iKTsKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYyk7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxl
dGVSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdp
c3RlcklEKiBEZWxldGVSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgaWYgKGdlbmVyYXRvci5yZWdpc3RlckZvckxv
Y2FsKG1faWRlbnQpKQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGZhbHNlKTsKLQotICAgIFJlZ2lzdGVySUQqIGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UpLCBiYXNlLCBtX2lkZW50KTsKLX0KLQotdm9p
ZCBEZWxldGVSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQo
bV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSkKLSAgICAgICAgbmV3ICh0aGlzKSBMb2NhbFZhckRlbGV0ZU5v
ZGUoKTsKLX0KLQotLy8gRUNNQSAxMS40LjEKLQotSlNWYWx1ZSogRGVsZXRlUmVzb2x2ZU5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIENoZWNr
IGZvciBtaXNzZWQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgotICAgIEFTU0VSVCghY2FuU2tp
cExvb2t1cChleGVjLCBtX2lkZW50KSk7Ci0KLSAgICBjb25zdCBTY29wZUNoYWluJiBjaGFpbiA9
IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IGNoYWlu
LmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IGNoYWluLmVuZCgpOwotCi0g
ICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0g
ICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpT
T2JqZWN0KiBiYXNlOwotICAgIGRvIHsKLSAgICAgICAgYmFzZSA9ICppdGVyOwotICAgICAgICBp
ZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKQotICAgICAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlLT5kZWxldGVQcm9wZXJ0eShleGVjLCBtX2lkZW50KSk7
Ci0KLSAgICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLQotICAgIHJl
dHVybiBqc0Jvb2xlYW4odHJ1ZSk7Ci19Ci0KLUpTVmFsdWUqIExvY2FsVmFyRGVsZXRlTm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKQotewotICAgIHJldHVybiBqc0Jvb2xl
YW4oZmFsc2UpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRl
QnJhY2tldE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0
ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAu
Z2V0KCksIHIxLmdldCgpKTsKLX0KLQotdm9pZCBEZWxldGVCcmFja2V0Tm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX3N1YnNjcmlwdC5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCht
X2Jhc2UuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBEZWxldGVCcmFja2V0Tm9kZTo6ZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVl
ID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
ICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVjKTsKLSAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFs
dWUtPnRvT2JqZWN0KGV4ZWMpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsKLSAgICBp
ZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIocHJvcGVydHlJbmRleCkpCi0gICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oYmFzZS0+ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVydHlJbmRleCkpOwotCi0g
ICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoc3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7Ci0g
ICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlLT5kZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5h
bWUpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZURvdE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogRGVs
ZXRlRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCi17Ci0gICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLCBtX2lkZW50KTsKLX0KLQotdm9pZCBEZWxldGVEb3RO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUq
IERlbGV0ZURvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAg
SlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwotICAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCi0KLSAgICByZXR1cm4ganNCb29sZWFuKGJhc2UtPmRlbGV0ZVByb3Bl
cnR5KGV4ZWMsIG1faWRlbnQpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIERlbGV0ZVZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1SZWdpc3RlcklEKiBEZWxldGVWYWx1ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIuZ2V0KCkpOwotCi0gICAgLy8gZGVsZXRlIG9uIGEgbm9uLWxvY2F0aW9uIGV4cHJlc3Npb24g
aWdub3JlcyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZQotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdHJ1ZSk7Ci19Ci0KLXZv
aWQgRGVsZXRlVmFsdWVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7
Ci19Ci0KLUpTVmFsdWUqIERlbGV0ZVZhbHVlTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgbV9leHByLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNf
Q0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgLy8gZGVsZXRlIG9uIGEgbm9uLWxvY2F0aW9uIGV4
cHJlc3Npb24gaWdub3JlcyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZQotICAgIHJldHVybiBq
c0Jvb2xlYW4odHJ1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBW
b2lkTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVy
SUQqIFZvaWROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjAuZ2V0KCkpLCBqc1VuZGVmaW5lZCgpKTsKLX0KLQot
dm9pZCBWb2lkTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQot
Ci0vLyBFQ01BIDExLjQuMgotSlNWYWx1ZSogVm9pZE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQot
Ci0vLyBFQ01BIDExLjQuMwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlw
ZU9mVmFsdWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQg
VHlwZU9mVmFsdWVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19
Ci0KLXN0YXRpYyBKU1ZhbHVlKiB0eXBlU3RyaW5nRm9yVmFsdWUoSlNWYWx1ZSogdikgS0pTX0ZB
U1RfQ0FMTDsKLXN0YXRpYyBKU1ZhbHVlKiB0eXBlU3RyaW5nRm9yVmFsdWUoSlNWYWx1ZSogdikK
LXsKLSAgICBzd2l0Y2ggKHYtPnR5cGUoKSkgewotICAgICAgICBjYXNlIFVuZGVmaW5lZFR5cGU6
Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoInVuZGVmaW5lZCIpOwotICAgICAgICBjYXNl
IE51bGxUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJvYmplY3QiKTsKLSAgICAg
ICAgY2FzZSBCb29sZWFuVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygiYm9vbGVh
biIpOwotICAgICAgICBjYXNlIE51bWJlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJp
bmcoIm51bWJlciIpOwotICAgICAgICBjYXNlIFN0cmluZ1R5cGU6Ci0gICAgICAgICAgICByZXR1
cm4ganNTdHJpbmcoInN0cmluZyIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYg
KHYtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBSZXR1cm4gInVuZGVmaW5lZCIg
Zm9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAotICAgICAgICAgICAgICAgIC8vIGFz
IG51bGwgd2hlbiBkb2luZyBjb21wYXJpc29ucy4KLSAgICAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPih2KS0+bWFzcXVlcmFkZUFzVW5kZWZpbmVkKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqc1N0cmluZygidW5kZWZpbmVkIik7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJmdW5jdGlvbiIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoIm9iamVjdCIpOwotICAgIH0KLX0K
LQotdm9pZCBUeXBlT2ZSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJs
ZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4
ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkKLSAgICAgICAgbmV3ICh0aGlzKSBMb2NhbFZhclR5
cGVPZk5vZGUoaW5kZXgpOwotfQotCi1KU1ZhbHVlKiBMb2NhbFZhclR5cGVPZk5vZGU6OmV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChleGVjLT52
YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAgICByZXR1
cm4gdHlwZVN0cmluZ0ZvclZhbHVlKGV4ZWMtPmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVl
KTsKLX0KLQotUmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIGlmIChSZWdpc3RlcklE
KiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRlbnQpKQotICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgbG9jYWwpOwotCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjcmF0Y2ggPSBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHNjcmF0Y2guZ2V0KCksIHNjcmF0Y2guZ2V0KCks
IG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFR5cGVPZihnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIHNjcmF0Y2guZ2V0KCkpLCBzY3JhdGNoLmdldCgpKTsKLX0KLQot
SlNWYWx1ZSogVHlwZU9mUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2NvcGVD
aGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAg
ICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7Ci0KLSAgICAvLyBXZSBtdXN0
IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRl
ciAhPSBlbmQpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgSlNPYmplY3QqIGJhc2U7
Ci0gICAgZG8gewotICAgICAgICBiYXNlID0gKml0ZXI7Ci0gICAgICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwotICAgICAgICAgICAgcmV0
dXJuIHR5cGVTdHJpbmdGb3JWYWx1ZSh2KTsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRlcjsK
LSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICByZXR1cm4ganNTdHJpbmcoInVuZGVm
aW5lZCIpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZU9mVmFs
dWVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQq
IFR5cGVPZlZhbHVlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYyA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFR5cGVPZihn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMuZ2V0KCkpOwotfQotCi1KU1ZhbHVl
KiBUeXBlT2ZWYWx1ZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIEpTVmFsdWUqIHYgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICByZXR1cm4gdHlwZVN0cmluZ0ZvclZhbHVlKHYpOwot
fQotCi0vLyBFQ01BIDExLjQuNCBhbmQgMTEuNC41Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBQcmVmaXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLVJlZ2lzdGVySUQqIFByZUluY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBpZiAoUmVnaXN0ZXJJ
RCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgewotICAgICAg
ICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkgewotICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIDEuMCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJlSW5jKGxvY2FsKTsKLSAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwotICAgIH0KLQotICAg
IGludCBpbmRleCA9IDA7Ci0gICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICBpZiAoZ2VuZXJhdG9y
LmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERz
dCA9IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFyKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgZGVwdGgsIGluZGV4KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcmVJbmMocHJvcERz
dC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHV0U2NvcGVkVmFyKGRlcHRoLCBpbmRl
eCwgcHJvcERzdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGlu
YXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOzsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNl
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERzdC5nZXQoKSwgbV9pZGVudCk7Ci0gICAg
Z2VuZXJhdG9yLmVtaXRQcmVJbmMocHJvcERzdC5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQ
dXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHByb3BEc3QuZ2V0KCkpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwot
fQotCi12b2lkIFByZUluY1Jlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25z
dCBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSwgTm9kZVN0YWNrJikKLXsKLSAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7
Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICBpZiAo
aXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykg
UHJlSW5jQ29uc3ROb2RlKGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3ICh0
aGlzKSBQcmVJbmNMb2NhbFZhck5vZGUoaW5kZXgpOwotICAgIH0KLX0KLQotSlNWYWx1ZSogUHJl
SW5jTG9jYWxWYXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWlu
KCkudG9wKCkpOwotICAgIEpTVmFsdWUqKiBzbG90ID0gJmV4ZWMtPmxvY2FsU3RvcmFnZSgpW21f
aW5kZXhdLnZhbHVlOwotCi0gICAgZG91YmxlIG4gPSAoKnNsb3QpLT50b051bWJlcihleGVjKTsK
LSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gKyAxKTsKLSAgICAqc2xvdCA9IG4yOwotICAg
IHJldHVybiBuMjsKLX0KLQotSlNWYWx1ZSogUHJlSW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNo
YWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0g
Y2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7
Ci0KLSAgICAvLyB3ZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hh
aW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgZG8gewotICAgICAgICBpZiAoKCppdGVyKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRl
bnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZSgpLgotCi0gICAgICAgICAgICBKU09iamVjdCogYmFzZSA9ICpp
dGVyOwotICAgICAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwg
bV9pZGVudCk7Ci0KLSAgICAgICAgICAgIGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gKyAxKTsKLSAgICAgICAgICAgIGJh
c2UtPnB1dChleGVjLCBtX2lkZW50LCBuMik7Ci0KLSAgICAgICAgICAgIHJldHVybiBuMjsKLSAg
ICAgICAgfQotCi0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0K
LSAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwot
fQotCi1SZWdpc3RlcklEKiBQcmVEZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxv
Y2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKLSAgICAgICAgaWYg
KGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCAtMS4wKTsKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEFk
ZChyMC5nZXQoKSwgbG9jYWwsIHIwLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcmVEZWMobG9jYWwpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
Lm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbCk7Ci0gICAgfQotCi0gICAgaW50
IGluZGV4ID0gMDsKLSAgICBzaXplX3QgZGVwdGggPSAwOwotICAgIGlmIChnZW5lcmF0b3IuZmlu
ZFNjb3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCkgJiYgaW5kZXggIT0gbWlzc2lu
Z1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0g
Z2VuZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBkZXB0aCwgaW5kZXgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFByZURlYyhwcm9wRHN0Lmdl
dCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCBw
cm9wRHN0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7OwotICAgIH0KLQotICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wRHN0LmdldCgpLCBtX2lkZW50KTsKLSAgICBnZW5l
cmF0b3IuZW1pdFByZURlYyhwcm9wRHN0LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5
SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgcHJvcERzdC5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7Ci19Ci0K
LXZvaWQgUHJlRGVjUmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExv
Y2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlLCBOb2RlU3RhY2smKQotewotICAgIGludCBpbmRleCA9
IHN5bWJvbFRhYmxlLmdldChtX2lkZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5kZXgoKTsKLSAg
ICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIGlmIChpc0Nv
bnN0YW50KGxvY2FsU3RvcmFnZSwgaW5kZXgpKQotICAgICAgICAgICAgbmV3ICh0aGlzKSBQcmVE
ZWNDb25zdE5vZGUoaW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXcgKHRoaXMp
IFByZURlY0xvY2FsVmFyTm9kZShpbmRleCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBQcmVEZWNM
b2NhbFZhck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50
b3AoKSk7Ci0gICAgSlNWYWx1ZSoqIHNsb3QgPSAmZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRl
eF0udmFsdWU7Ci0KLSAgICBkb3VibGUgbiA9ICgqc2xvdCktPnRvTnVtYmVyKGV4ZWMpOwotICAg
IEpTVmFsdWUqIG4yID0ganNOdW1iZXIobiAtIDEpOwotICAgICpzbG90ID0gbjI7Ci0gICAgcmV0
dXJuIG4yOwotfQotCi1KU1ZhbHVlKiBQcmVEZWNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4g
PSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFp
bi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQot
ICAgIC8vIHdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgot
ICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBk
byB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwg
c2xvdCkpIHsKLSAgICAgICAgICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiBQb3N0SW5jUmVzb2x2
ZU5vZGU6OmV2YWx1YXRlKCkuCi0KLSAgICAgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gKml0ZXI7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lk
ZW50KTsKLQotICAgICAgICAgICAgZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIG4yID0ganNOdW1iZXIobiAtIDEpOwotICAgICAgICAgICAgYmFzZS0+
cHV0KGV4ZWMsIG1faWRlbnQsIG4yKTsKLQotICAgICAgICAgICAgcmV0dXJuIG4yOwotICAgICAg
ICB9Ci0KLSAgICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLQotICAg
IHJldHVybiB0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgbV9pZGVudCk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVJbmNDb25zdE5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1KU1ZhbHVlKiBQcmVJbmNDb25zdE5vZGU6
OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChl
eGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0gICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZhbHVlLT50b051
bWJlcihleGVjKSArIDEpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
UHJlRGVjQ29uc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNW
YWx1ZSogUHJlRGVjQ29uc3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29w
ZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLT5sb2NhbFN0b3JhZ2Uo
KVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykgLSAxKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RJbmNDb25zdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1KU1ZhbHVlKiBQb3N0SW5jQ29uc3ROb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoZXhlYy0+dmFyaWFi
bGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkpOwotICAgIHJldHVybiBqc051
bWJlcihleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9zdERlY0NvbnN0Tm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFsdWUqIFBvc3REZWND
b25zdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMtPnNjb3BlQ2hhaW4oKS50b3Ao
KSk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMtPmxvY2FsU3RvcmFnZSgpW21faW5kZXhdLnZh
bHVlLT50b051bWJlcihleGVjKSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBQcmVmaXhCcmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLXZvaWQgUHJlZml4QnJhY2tldE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9zdWJz
Y3JpcHQuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQot
UmVnaXN0ZXJJRCogUHJlSW5jQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KTsKLSAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwocHJv
cERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5l
bWl0UHJlSW5jKHZhbHVlKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCks
IHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIFByZUlu
Y0JyYWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gbV9zdWJzY3Jp
cHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBK
U09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICB1aW50MzJf
dCBwcm9wZXJ0eUluZGV4OwotICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUlu
ZGV4KSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgSlNWYWx1ZSogdiA9
IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3Qu
Z2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOwotICAg
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgICAgIEpTVmFsdWUqIG4yID0ganNO
dW1iZXIodi0+dG9OdW1iZXIoZXhlYykgKyAxKTsKLSAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIHBy
b3BlcnR5SW5kZXgsIG4yKTsKLQotICAgICAgICByZXR1cm4gbjI7Ci0gICAgfQotCi0gICAgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUoc3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7Ci0gICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdiA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9w
ZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
Ci0gICAgSlNWYWx1ZSogbjIgPSBqc051bWJlcih2LT50b051bWJlcihleGVjKSArIDEpOwotICAg
IGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIG4yKTsKLQotICAgIHJldHVybiBuMjsKLX0K
LQotUmVnaXN0ZXJJRCogUHJlRGVjQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIAotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0Lmdl
dCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KTsKLSAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0
QnlWYWwocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwotICAgIGdl
bmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJh
c2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5t
b3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7Ci19Ci0KLUpTVmFs
dWUqIFByZURlY0JyYWNrZXROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMp
OwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0g
bV9zdWJzY3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAg
ICB1aW50MzJfdCBwcm9wZXJ0eUluZGV4OwotICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihw
cm9wZXJ0eUluZGV4KSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgSlNW
YWx1ZSogdiA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90
KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgICAgIEpTVmFsdWUq
IG4yID0ganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKTsKLSAgICAgICAgYmFzZS0+cHV0
KGV4ZWMsIHByb3BlcnR5SW5kZXgsIG4yKTsKLQotICAgICAgICByZXR1cm4gbjI7Ci0gICAgfQot
Ci0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoc3Vic2NyaXB0LT50b1N0cmluZyhleGVjKSk7
Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdiA9IGJhc2UtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBi
YXNlLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05WQUxVRQotCi0gICAgSlNWYWx1ZSogbjIgPSBqc051bWJlcih2LT50b051bWJlcihleGVjKSAt
IDEpOwotICAgIGJhc2UtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIG4yKTsKLQotICAgIHJldHVy
biBuMjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeERvdE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFByZWZpeERvdE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNr
KQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNlLmdldCgpKTsKLX0KLQotUmVnaXN0ZXJJ
RCogUHJlSW5jRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9
IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWdpc3RlcklEKiB2YWx1ZSA9
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm9wRHN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50
KTsKLSAgICBnZW5lcmF0b3IuZW1pdFByZUluYyh2YWx1ZSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQ
dXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
Lm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKLX0KLQotSlNW
YWx1ZSogUHJlSW5jRG90Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZh
bHVlLT50b09iamVjdChleGVjKTsKLQotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFs
dWUqIHYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkgPyBzbG90
LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNf
Q0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsK
LSAgICBKU1ZhbHVlKiBuMiA9IGpzTnVtYmVyKG4gKyAxKTsKLSAgICBiYXNlLT5wdXQoZXhlYywg
bV9pZGVudCwgbjIpOwotCi0gICAgcmV0dXJuIG4yOwotfQotCi1SZWdpc3RlcklEKiBQcmVEZWNE
b3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2Jhc2UuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeUlkKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAgIGdl
bmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsKLSAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFz
ZS5nZXQoKSwgbV9pZGVudCwgdmFsdWUpOwotICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBQcmVE
ZWNEb3ROb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBtX2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUtPnRvT2Jq
ZWN0KGV4ZWMpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdiA9IGJh
c2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUo
ZXhlYywgYmFzZSwgbV9pZGVudCkgOiBqc1VuZGVmaW5lZCgpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCi0KLSAgICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgIEpTVmFs
dWUqIG4yID0ganNOdW1iZXIobiAtIDEpOwotICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBu
Mik7Ci0KLSAgICByZXR1cm4gbjI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBQcmVmaXhFcnJvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotUmVnaXN0ZXJJRCogUHJlZml4RXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQotewotICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5l
cmF0b3IsIFJlZmVyZW5jZUVycm9yLCBtX29wZXJhdG9yID09IE9wUGx1c1BsdXMgPyAiUHJlZml4
ICsrIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIiA6
ICJQcmVmaXggLS0gb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVy
ZW5jZS4iKTsKLX0KLQotSlNWYWx1ZSogUHJlZml4RXJyb3JOb2RlOjpldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5j
ZUVycm9yLCAiUHJlZml4ICVzIG9wZXJhdG9yIGFwcGxpZWQgdG8gdmFsdWUgdGhhdCBpcyBub3Qg
YSByZWZlcmVuY2UuIiwKLSAgICAgICAgICAgICAgIG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cyA/
ICIrKyIgOiAiLS0iKTsKLSAgICBoYW5kbGVFeGNlcHRpb24oZXhlYyk7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVbmFy
eVBsdXNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVySUQq
IFVuYXJ5UGx1c05vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQotewotICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X2V4cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNOdW1iZXIoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKLX0KLQotdm9pZCBVbmFyeVBsdXNOb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3Qg
U3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykK
LXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEu
NC42Ci1KU1ZhbHVlKiBVbmFyeVBsdXNOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiB2LT50b0pTTnVtYmVyKGV4
ZWMpOwotfQotCi1ib29sIFVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX2V4cHItPmV2YWx1YXRlVG9C
b29sZWFuKGV4ZWMpOwotfQotCi1kb3VibGUgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gbV9leHByLT5l
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1pbnQzMl90IFVuYXJ5UGx1c05vZGU6OmV2YWx1
YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
bV9leHByLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IFVuYXJ5UGx1c05v
ZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIG1fZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTmVnYXRlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBOZWdhdGVOb2RlOjplbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWdpc3RlcklEKiBz
cmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXROZWdhdGUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKLX0K
LQotdm9pZCBOZWdhdGVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7
Ci19Ci0KLS8vIEVDTUEgMTEuNC43Ci1KU1ZhbHVlKiBOZWdhdGVOb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGV4
Y2VwdGlvbiwgY2FsbGVyIHdpbGwgZG8gc28gcmlnaHQgYWZ0ZXIgZXZhbHVhdGUoKQotICAgIHJl
dHVybiBqc051bWJlcigtbV9leHByLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotZG91
YmxlIE5lZ2F0ZU5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgLy8gTm8gbmVlZCB0byBjaGVjayBleGNlcHRpb24sIGNhbGxlciB3aWxs
IGRvIHNvIHJpZ2h0IGFmdGVyIGV2YWx1YXRlVG9OdW1iZXIoKQotICAgIHJldHVybiAtbV9leHBy
LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gQml0d2lzZU5vdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1SZWdpc3RlcklEKiBCaXR3aXNlTm90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qml0
Tm90KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7Ci19Ci0KLXZvaWQgQml0
d2lzZU5vdE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKLX0KLQot
Ly8gRUNNQSAxMS40LjgKLWludDMyX3QgQml0d2lzZU5vdE5vZGU6OmlubGluZUV2YWx1YXRlVG9J
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gfm1fZXhw
ci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQotCi1KU1ZhbHVlKiBCaXR3aXNlTm90Tm9kZTo6
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpz
TnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7Ci19Ci0KLWRvdWJsZSBCaXR3aXNl
Tm90Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQotCi1ib29sIEJp
dHdpc2VOb3ROb2RlOjpldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQotCi1p
bnQzMl90IEJpdHdpc2VOb3ROb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsK
LX0KLQotdWludDMyX3QgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQz
MihleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxO
b3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVnaXN0ZXJJRCogTG9n
aWNhbE5vdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQotewotICAgIFJlZ2lzdGVySUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vdChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCBzcmMpOwotfQotCi12b2lkIExvZ2ljYWxOb3ROb2RlOjpvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFi
bGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuNC45Ci1KU1Zh
bHVlKiBMb2dpY2FsTm90Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGpzQm9vbGVhbighbV9leHByLT5ldmFsdWF0ZVRvQm9vbGVhbihl
eGVjKSk7Ci19Ci0KLWJvb2wgTG9naWNhbE5vdE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiAhbV9leHByLT5ldmFsdWF0
ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE11bHRpcGxpY2F0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLVJlZ2lzdGVySUQqIE11bHROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdE11bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMx
LmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBNdWx0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTIuZ2V0KCkpOwot
fQotCi0vLyBFQ01BIDExLjUuMQotZG91YmxlIE11bHROb2RlOjppbmxpbmVFdmFsdWF0ZVRvTnVt
YmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGRvdWJsZSBuMSA9IG1f
dGVybTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCi0gICAgZG91YmxlIG4yID0gbV90ZXJtMi0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAg
ICByZXR1cm4gbjEgKiBuMjsKLX0KLQotSlNWYWx1ZSogTXVsdE5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVF
dmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotZG91YmxlIE11bHROb2RlOjpldmFsdWF0ZVRv
TnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotfQotCi1ib29sIE11bHROb2RlOjpldmFsdWF0ZVRv
Qm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBkb3VibGUgcmVz
dWx0ID0gaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICByZXR1cm4gIHJlc3VsdCA+
IDAuMCB8fCAwLjAgPiByZXN1bHQ7IC8vIE5hTiBwcm9kdWNlcyBmYWxzZSBhcyB3ZWxsCi19Ci0K
LWludDMyX3QgTXVsdE5vZGU6OmV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRv
TnVtYmVyKGV4ZWMpKTsKLX0KLQotdWludDMyX3QgTXVsdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRv
VUludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotfQotCi1SZWdpc3RlcklEKiBE
aXZOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZGl2aWRlbmQgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV90ZXJtMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogZGl2aXNvciA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREaXYoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBkaXZpZGVuZC5nZXQoKSksIGRpdmlkZW5kLmdl
dCgpLCBkaXZpc29yKTsKLX0KLQotdm9pZCBEaXZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7Ci19
Ci0KLS8vIEVDTUEgMTEuNS4yCi1kb3VibGUgRGl2Tm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJl
cihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBkb3VibGUgbjEgPSBtX3Rl
cm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJF
UgotICAgIGRvdWJsZSBuMiA9IG1fdGVybTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAg
cmV0dXJuIG4xIC8gbjI7Ci19Ci0KLUpTVmFsdWUqIERpdk5vZGU6OmV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotZG91YmxlIERpdk5vZGU6OmV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2
YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWludDMyX3QgRGl2Tm9kZTo6ZXZhbHVhdGVUb0lu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVl
Ojp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYykpOwotfQotCi11aW50MzJfdCBE
aXZOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpKTsKLX0KLQotUmVnaXN0ZXJJRCogTW9kTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRp
dmlkZW5kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOwotICAgIFJlZ2lzdGVy
SUQqIGRpdmlzb3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TW9kKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZGl2
aWRlbmQuZ2V0KCkpLCBkaXZpZGVuZC5nZXQoKSwgZGl2aXNvcik7Ci19Ci0KLXZvaWQgTW9kTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2sp
Ci17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3Rlcm0xLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fdGVybTIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDExLjUuMwotZG91YmxlIE1vZE5v
ZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgZG91YmxlIG4xID0gbV90ZXJtMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAg
ICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICBkb3VibGUgbjIgPSBtX3Rlcm0yLT5ldmFs
dWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgIHJldHVybiBmbW9kKG4xLCBuMik7Ci19Ci0KLUpTVmFs
dWUqIE1vZE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQot
ZG91YmxlIE1vZE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci19Ci0K
LWJvb2wgTW9kTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhl
Yyk7Ci0gICAgcmV0dXJuICByZXN1bHQgPiAwLjAgfHwgMC4wID4gcmVzdWx0OyAvLyBOYU4gcHJv
ZHVjZXMgZmFsc2UgYXMgd2VsbAotfQotCi1pbnQzMl90IE1vZE5vZGU6OmV2YWx1YXRlVG9JbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
dG9JbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotdWludDMyX3QgTW9k
Tm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6dG9VSW50MzIoaW5saW5lRXZhbHVhdGVUb051bWJlcihleGVj
KSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGRpdGl2ZSBOb2Rl
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgZG91Ymxl
IHRocm93T3V0T2ZNZW1vcnlFcnJvclRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIEpTT2JqZWN0KiBlcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJh
bEVycm9yLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7
Ci0gICAgcmV0dXJuIDAuMDsKLX0KLQotLy8gRUNNQSAxMS42Ci1zdGF0aWMgSlNWYWx1ZSogYWRk
U2xvd0Nhc2UoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1Zh
bHVlKiB2MikKLXsKLSAgICAvLyBleGNlcHRpb24gZm9yIHRoZSBEYXRlIGV4Y2VwdGlvbiBpbiBk
ZWZhdWx0VmFsdWUoKQotICAgIEpTVmFsdWUqIHAxID0gdjEtPnRvUHJpbWl0aXZlKGV4ZWMsIFVu
c3BlY2lmaWVkVHlwZSk7Ci0gICAgSlNWYWx1ZSogcDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhlYywg
VW5zcGVjaWZpZWRUeXBlKTsKLQotICAgIGlmIChwMS0+aXNTdHJpbmcoKSB8fCBwMi0+aXNTdHJp
bmcoKSkgewotICAgICAgICBVU3RyaW5nIHZhbHVlID0gcDEtPnRvU3RyaW5nKGV4ZWMpICsgcDIt
PnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4ganNT
dHJpbmcodmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiBqc051bWJlcihwMS0+dG9OdW1iZXIo
ZXhlYykgKyBwMi0+dG9OdW1iZXIoZXhlYykpOwotfQotCi1zdGF0aWMgZG91YmxlIGFkZFNsb3dD
YXNlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBK
U1ZhbHVlKiB2MikKLXsKLSAgICAvLyBleGNlcHRpb24gZm9yIHRoZSBEYXRlIGV4Y2VwdGlvbiBp
biBkZWZhdWx0VmFsdWUoKQotICAgIEpTVmFsdWUqIHAxID0gdjEtPnRvUHJpbWl0aXZlKGV4ZWMs
IFVuc3BlY2lmaWVkVHlwZSk7Ci0gICAgSlNWYWx1ZSogcDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhl
YywgVW5zcGVjaWZpZWRUeXBlKTsKLQotICAgIGlmIChwMS0+aXNTdHJpbmcoKSB8fCBwMi0+aXNT
dHJpbmcoKSkgewotICAgICAgICBVU3RyaW5nIHZhbHVlID0gcDEtPnRvU3RyaW5nKGV4ZWMpICsg
cDItPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yVG9OdW1iZXIoZXhlYyk7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS50b0RvdWJsZSgpOwotICAgIH0KLQotICAgIHJldHVybiBwMS0+dG9OdW1i
ZXIoZXhlYykgKyBwMi0+dG9OdW1iZXIoZXhlYyk7Ci19Ci0KLS8vIEZhc3QtcGF0aCBjaG9pY2Vz
IGhlcmUgYXJlIGJhc2VkIG9uIGZyZXF1ZW5jeSBkYXRhIGZyb20gU3VuU3BpZGVyOgotLy8gICAg
PHRpbWVzPiBBZGQgY2FzZTogPHQxPiA8dDI+Ci0vLyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vICAgIDU2MjcxNjAgQWRkIGNhc2U6IDEgMQotLy8gICAgMjQ3NDI3ICBBZGQgY2Fz
ZTogNSA1Ci0vLyAgICAyMDkwMSAgIEFkZCBjYXNlOiA1IDYKLS8vICAgIDEzOTc4ICAgQWRkIGNh
c2U6IDUgMQotLy8gICAgNDAwMCAgICBBZGQgY2FzZTogMSA1Ci0vLyAgICAxICAgICAgIEFkZCBj
YXNlOiAzIDUKLQotc3RhdGljIGlubGluZSBKU1ZhbHVlKiBhZGQoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKLXsKLSAgICBKU1R5cGUgdDEg
PSB2MS0+dHlwZSgpOwotICAgIEpTVHlwZSB0MiA9IHYyLT50eXBlKCk7Ci0gICAgY29uc3QgdW5z
aWduZWQgYm90aFR5cGVzID0gKHQxIDw8IDMpIHwgdDI7Ci0KLSAgICBpZiAoYm90aFR5cGVzID09
ICgoTnVtYmVyVHlwZSA8PCAzKSB8IE51bWJlclR5cGUpKQotICAgICAgICByZXR1cm4ganNOdW1i
ZXIodjEtPnRvTnVtYmVyKGV4ZWMpICsgdjItPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICBpZiAoYm90
aFR5cGVzID09ICgoU3RyaW5nVHlwZSA8PCAzKSB8IFN0cmluZ1R5cGUpKSB7Ci0gICAgICAgIFVT
dHJpbmcgdmFsdWUgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBzdGF0
aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybiBqc1N0cmluZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWxsIG90aGVy
IGNhc2VzIGFyZSBwcmV0dHkgdW5jb21tb24KLSAgICByZXR1cm4gYWRkU2xvd0Nhc2UoZXhlYywg
djEsIHYyKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYWRkVG9OdW1iZXIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKLXsKLSAgICBK
U1R5cGUgdDEgPSB2MS0+dHlwZSgpOwotICAgIEpTVHlwZSB0MiA9IHYyLT50eXBlKCk7Ci0gICAg
Y29uc3QgdW5zaWduZWQgYm90aFR5cGVzID0gKHQxIDw8IDMpIHwgdDI7Ci0KLSAgICBpZiAoYm90
aFR5cGVzID09ICgoTnVtYmVyVHlwZSA8PCAzKSB8IE51bWJlclR5cGUpKQotICAgICAgICByZXR1
cm4gdjEtPnRvTnVtYmVyKGV4ZWMpICsgdjItPnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChib3Ro
VHlwZXMgPT0gKChTdHJpbmdUeXBlIDw8IDMpIHwgU3RyaW5nVHlwZSkpIHsKLSAgICAgICAgVVN0
cmluZyB2YWx1ZSA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KHYxKS0+dmFsdWUoKSArIHN0YXRp
Y19jYXN0PFN0cmluZ0ltcCo+KHYyKS0+dmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvclRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9Eb3VibGUoKTsKLSAgICB9Ci0KLSAgICAvLyBB
bGwgb3RoZXIgY2FzZXMgYXJlIHByZXR0eSB1bmNvbW1vbgotICAgIHJldHVybiBhZGRTbG93Q2Fz
ZVRvTnVtYmVyKGV4ZWMsIHYxLCB2Mik7Ci19Ci0KLVJlZ2lzdGVySUQqIEFkZE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkp
OwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQo
KSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwotfQotCi12b2lkIEFkZE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNr
KQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0YWNr
LmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS42LjEKLUpTVmFsdWUqIEFk
ZE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpT
VmFsdWUqIHYxID0gbV90ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIHJldHVybiBhZGQoZXhlYywgdjEsIHYy
KTsKLX0KLQotZG91YmxlIEFkZE5vZGU6OmlubGluZUV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX3Rlcm0xLT5ldmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLQotICAgIEpTVmFsdWUq
IHYyID0gbV90ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OTlVN
QkVSCi0KLSAgICByZXR1cm4gYWRkVG9OdW1iZXIoZXhlYywgdjEsIHYyKTsKLX0KLQotZG91Ymxl
IEFkZE5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci19Ci0KLWludDMy
X3QgQWRkTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRlVG9OdW1iZXIo
ZXhlYykpOwotfQotCi11aW50MzJfdCBBZGROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihp
bmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotZG91YmxlIEFkZE51bWJlcnNOb2Rl
OjppbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIGRvdWJsZSBuMSA9IG1fdGVybTEtPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgZG91YmxlIG4yID0gbV90ZXJtMi0+ZXZhbHVh
dGVUb051bWJlcihleGVjKTsKLSAgICByZXR1cm4gbjEgKyBuMjsKLX0KLQotSlNWYWx1ZSogQWRk
TnVtYmVyc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQot
ZG91YmxlIEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OwotfQotCi1pbnQzMl90IEFkZE51bWJlcnNOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnRvSW50MzIoaW5s
aW5lRXZhbHVhdGVUb051bWJlcihleGVjKSk7Ci19Ci0KLXVpbnQzMl90IEFkZE51bWJlcnNOb2Rl
OjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBKU1ZhbHVlOjp0b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsK
LX0KLQotSlNWYWx1ZSogQWRkU3RyaW5nc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV90ZXJtMS0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIEpTVmFsdWUqIHYyID0gbV90
ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAg
IHJldHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MSktPnZhbHVlKCkgKyBz
dGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVlKCkpOwotfQotCi1KU1ZhbHVlKiBBZGRT
dHJpbmdMZWZ0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgSlNWYWx1ZSogdjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogdjIgPSBtX3Rlcm0yLT5ldmFsdWF0ZShl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgSlNWYWx1ZSogcDIgPSB2
Mi0+dG9QcmltaXRpdmUoZXhlYywgVW5zcGVjaWZpZWRUeXBlKTsKLSAgICByZXR1cm4ganNTdHJp
bmcoc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjEpLT52YWx1ZSgpICsgcDItPnRvU3RyaW5nKGV4
ZWMpKTsKLX0KLQotSlNWYWx1ZSogQWRkU3RyaW5nUmlnaHROb2RlOjpldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fdGVybTEtPmV2
YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU1ZhbHVl
KiB2MiA9IG1fdGVybTItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZB
TFVFCi0KLSAgICBKU1ZhbHVlKiBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjLCBVbnNwZWNpZmll
ZFR5cGUpOwotICAgIHJldHVybiBqc1N0cmluZyhwMS0+dG9TdHJpbmcoZXhlYykgKyBzdGF0aWNf
Y2FzdDxTdHJpbmdJbXAqPih2MiktPnZhbHVlKCkpOwotfQotCi1SZWdpc3RlcklEKiBTdWJOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsK
LSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0x
LmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVy
bTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFN1YihnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKLX0KLQotdm9p
ZCBTdWJOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5v
ZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fdGVybTEuZ2V0KCkpOwotICAgIG5v
ZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuNi4yCi1kb3Vi
bGUgU3ViTm9kZTo6aW5saW5lRXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBkb3VibGUgbjEgPSBtX3Rlcm0xLT5ldmFsdWF0ZVRvTnVtYmVyKGV4
ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIGRvdWJsZSBuMiA9IG1fdGVy
bTItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0dXJuIG4xIC0gbjI7Ci19Ci0KLUpT
VmFsdWUqIFN1Yk5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0K
LQotZG91YmxlIFN1Yk5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci19
Ci0KLWludDMyX3QgU3ViTm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0b0ludDMyKGlubGluZUV2YWx1YXRl
VG9OdW1iZXIoZXhlYykpOwotfQotCi11aW50MzJfdCBTdWJOb2RlOjpldmFsdWF0ZVRvVUludDMy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjp0
b1VJbnQzMihpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNoaWZ0IE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcklEKiBMZWZ0U2hpZnROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOwotICAgIFJl
Z2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwotICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdExlZnRTaGlmdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHZhbC5nZXQoKSksIHZhbC5nZXQoKSwgc2hpZnQpOwotfQotCi12b2lkIExlZnRTaGlm
dE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBj
b25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0
YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMS5nZXQoKSk7Ci0gICAgbm9kZVN0
YWNrLmFwcGVuZChtX3Rlcm0yLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMS43LjEKLWludDMyX3Qg
TGVmdFNoaWZ0Tm9kZTo6aW5saW5lRXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIGludCBpMSA9IG1fdGVybTEtPmV2YWx1YXRlVG9JbnQzMihleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIKLSAgICB1bnNpZ25lZCBpbnQgaTIgPSBt
X3Rlcm0yLT5ldmFsdWF0ZVRvVUludDMyKGV4ZWMpICYgMHgxZjsKLSAgICByZXR1cm4gKGkxIDw8
IGkyKTsKLX0KLQotSlNWYWx1ZSogTGVmdFNoaWZ0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRl
VG9JbnQzMihleGVjKSk7Ci19Ci0KLWRvdWJsZSBMZWZ0U2hpZnROb2RlOjpldmFsdWF0ZVRvTnVt
YmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLWludDMyX3QgTGVmdFNoaWZ0Tm9kZTo6ZXZhbHVh
dGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0KLXVpbnQzMl90IExlZnRTaGlmdE5vZGU6
OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQotUmVnaXN0ZXJJRCogUmln
aHRTaGlmdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWwgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV90ZXJtMS5nZXQoKSk7Ci0gICAgUmVnaXN0ZXJJRCogc2hpZnQgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV90ZXJtMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UmlnaHRTaGlm
dChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbC5nZXQoKSksIHZhbC5nZXQoKSwg
c2hpZnQpOwotfQotCi12b2lkIFJpZ2h0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7Ci19
Ci0KLS8vIEVDTUEgMTEuNy4yCi1pbnQzMl90IFJpZ2h0U2hpZnROb2RlOjppbmxpbmVFdmFsdWF0
ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaW50IGkxID0g
bV90ZXJtMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5V
TUJFUgotICAgIHVuc2lnbmVkIGludCBpMiA9IG1fdGVybTItPmV2YWx1YXRlVG9VSW50MzIoZXhl
YykgJiAweDFmOwotICAgIHJldHVybiAoaTEgPj4gaTIpOwotfQotCi1KU1ZhbHVlKiBSaWdodFNo
aWZ0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGpzTnVtYmVyKGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKSk7Ci19Ci0KLWRvdWJs
ZSBSaWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQot
Ci1pbnQzMl90IFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVj
KTsKLX0KLQotdWludDMyX3QgUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9J
bnQzMihleGVjKTsKLX0KLQotUmVnaXN0ZXJJRCogVW5zaWduZWRSaWdodFNoaWZ0Tm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHZhbCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgp
KTsKLSAgICBSZWdpc3RlcklEKiBzaGlmdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdl
dCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbnNpZ25lZFJpZ2h0U2hpZnQoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWwuZ2V0KCkpLCB2YWwuZ2V0KCksIHNoaWZ0KTsK
LX0KLQotdm9pZCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2Nh
bFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5k
KG1fdGVybTEuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV90ZXJtMi5nZXQoKSk7Ci19
Ci0KLS8vIEVDTUEgMTEuNy4zCi11aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjppbmxp
bmVFdmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHVuc2lnbmVkIGludCBpMSA9IG1fdGVybTEtPmV2YWx1YXRlVG9VSW50MzIoZXhlYyk7Ci0gICAg
S0pTX0NIRUNLRVhDRVBUSU9OTlVNQkVSCi0gICAgdW5zaWduZWQgaW50IGkyID0gbV90ZXJtMi0+
ZXZhbHVhdGVUb1VJbnQzMihleGVjKSAmIDB4MWY7Ci0gICAgcmV0dXJuIChpMSA+PiBpMik7Ci19
Ci0KLUpTVmFsdWUqIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc051bWJlcihpbmxpbmVFdmFsdWF0
ZVRvVUludDMyKGV4ZWMpKTsKLX0KLQotZG91YmxlIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmV2
YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGlubGluZUV2YWx1YXRlVG9VSW50MzIoZXhlYyk7Ci19Ci0KLWludDMyX3QgVW5zaWduZWRS
aWdodFNoaWZ0Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvVUludDMyKGV4ZWMpOwotfQotCi11
aW50MzJfdCBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvVUlu
dDMyKGV4ZWMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVsYXRp
b25hbCBOb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBsZXNzVGhhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
djEsIEpTVmFsdWUqIHYyKQotewotICAgIGRvdWJsZSBuMTsKLSAgICBkb3VibGUgbjI7Ci0gICAg
SlNWYWx1ZSogcDE7Ci0gICAgSlNWYWx1ZSogcDI7Ci0gICAgYm9vbCB3YXNOb3RTdHJpbmcxID0g
djEtPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBuMSwgcDEpOwotICAgIGJvb2wgd2FzTm90U3Ry
aW5nMiA9IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhlYywgbjIsIHAyKTsKLQotICAgIGlmICh3
YXNOb3RTdHJpbmcxIHwgd2FzTm90U3RyaW5nMikKLSAgICAgICAgcmV0dXJuIG4xIDwgbjI7Ci0K
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wKj4ocDEpLT52YWx1ZSgpIDwg
c3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wKj4ocDIpLT52YWx1ZSgpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgbGVzc1RoYW5FcShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSogdjEsIEpTVmFsdWUqIHYyKQotewotICAgIGRvdWJsZSBuMTsKLSAgICBkb3VibGUgbjI7
Ci0gICAgSlNWYWx1ZSogcDE7Ci0gICAgSlNWYWx1ZSogcDI7Ci0gICAgYm9vbCB3YXNOb3RTdHJp
bmcxID0gdjEtPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBuMSwgcDEpOwotICAgIGJvb2wgd2Fz
Tm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhlYywgbjIsIHAyKTsKLQotICAg
IGlmICh3YXNOb3RTdHJpbmcxIHwgd2FzTm90U3RyaW5nMikKLSAgICAgICAgcmV0dXJuIG4xIDw9
IG4yOwotCi0gICAgcmV0dXJuICEoc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wKj4ocDIpLT52
YWx1ZSgpIDwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wKj4ocDEpLT52YWx1ZSgpKTsKLX0K
LQotUmVnaXN0ZXJJRCogTGVzc05vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0TGVzcyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMx
LmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBMZXNzTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwot
fQotCi0vLyBFQ01BIDExLjguMQotYm9vbCBMZXNzTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBt
X2V4cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0g
ICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tF
WENFUFRJT05CT09MRUFOCi0gICAgcmV0dXJuIGxlc3NUaGFuKGV4ZWMsIHYxLCB2Mik7Ci19Ci0K
LUpTVmFsdWUqIExlc3NOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMp
KTsKLX0KLQotYm9vbCBMZXNzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4
ZWMpOwotfQotCi1ib29sIExlc3NOdW1iZXJzTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgZG91YmxlIG4xID0gbV9leHBy
MS0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
ICAgIGRvdWJsZSBuMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9OdW1iZXIoZXhlYyk7Ci0gICAgcmV0
dXJuIG4xIDwgbjI7Ci19Ci0KLUpTVmFsdWUqIExlc3NOdW1iZXJzTm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihpbmxp
bmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7Ci19Ci0KLWJvb2wgTGVzc051bWJlcnNOb2RlOjpl
dmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLWJvb2wgTGVzc1N0cmlu
Z3NOb2RlOjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFs
dWF0ZShleGVjKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjEpLT52YWx1
ZSgpIDwgc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4odjIpLT52YWx1ZSgpOwotfQotCi1KU1ZhbHVl
KiBMZXNzU3RyaW5nc05vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykp
OwotfQotCi1ib29sIExlc3NTdHJpbmdzTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOwotfQotCi1SZWdpc3RlcklEKiBHcmVhdGVyTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCi17Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgUmVn
aXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRMZXNzKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
c3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwotfQotCi12b2lkIEdyZWF0ZXJOb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsK
LSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBl
bmQobV9leHByMS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuOC4yCi1ib29sIEdyZWF0ZXJOb2Rl
OjppbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRl
KGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAgICByZXR1cm4gbGVzc1Ro
YW4oZXhlYywgdjIsIHYxKTsKLX0KLQotSlNWYWx1ZSogR3JlYXRlck5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQotCi1ib29sIEdyZWF0ZXJOb2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci19Ci0KLVJlZ2lzdGVySUQqIExlc3NF
cU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
ZXhwcjEuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9leHByMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TGVzc0VxKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwot
fQotCi12b2lkIExlc3NFcU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQo
KSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKLX0KLQotLy8gRUNNQSAx
MS44LjMKLWJvb2wgTGVzc0VxTm9kZTo6aW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSog
djIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09M
RUFOCi0gICAgcmV0dXJuIGxlc3NUaGFuRXEoZXhlYywgdjEsIHYyKTsKLX0KLQotSlNWYWx1ZSog
TGVzc0VxTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGpzQm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7Ci19Ci0K
LWJvb2wgTGVzc0VxTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwot
fQotCi1SZWdpc3RlcklEKiBHcmVhdGVyRXFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3Jj
MSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBz
cmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdExlc3NFcShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0
KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBHcmVhdGVyRXFOb2RlOjpvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFi
bGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9l
eHByMS5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuOC40Ci1ib29sIEdyZWF0ZXJFcU5vZGU6Omlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhl
Yyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiBsZXNzVGhhbkVx
KGV4ZWMsIHYyLCB2MSk7Ci19Ci0KLUpTVmFsdWUqIEdyZWF0ZXJFcU5vZGU6OmV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqc0Jvb2xlYW4oaW5s
aW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQotCi1ib29sIEdyZWF0ZXJFcU5vZGU6OmV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotUmVnaXN0ZXJJRCogSW5z
dGFuY2VPZk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEluc3RhbmNl
T2YoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdl
dCgpLCBiYXNlKTsKLX0KLQotdm9pZCBJbnN0YW5jZU9mTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkp
OwotfQotCi0vLyBFQ01BIDExLjguNgotSlNWYWx1ZSogSW5zdGFuY2VPZk5vZGU6OmV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYxID0gbV9l
eHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBK
U1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCi0KLSAgICBpZiAoIXYyLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24g
JXMpIGlzIG5vdCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggaW5zdGFuY2VvZiBvcGVy
YXRvci4iLCB2MiwgbV9leHByMi5nZXQoKSk7Ci0KLSAgICBKU09iamVjdCogbzIgPSBzdGF0aWNf
Y2FzdDxKU09iamVjdCo+KHYyKTsKLQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgb25s
eSBzb21lIHR5cGVzIG9mIG9iamVjdHMgImltcGxlbWVudCIgdGhlIFtbSGFzSW5zdGFuY2VdXSBw
cm9wZXJ0eS4KLSAgICAvLyBCdXQgd2UgYXJlIHN1cHBvc2VkIHRvIHRocm93IGFuIGV4Y2VwdGlv
biB3aGVyZSB0aGUgb2JqZWN0IGRvZXMgbm90ICJoYXZlIiB0aGUgW1tIYXNJbnN0YW5jZV1dCi0g
ICAgLy8gcHJvcGVydHkuIEl0IHNlZW1zIHRoYXQgYWxsIG9iamVjdHMgaGF2ZSB0aGUgcHJvcGVy
dHksIGJ1dCBub3QgYWxsIGltcGxlbWVudCBpdCwgc28gaW4gdGhpcwotICAgIC8vIGNhc2Ugd2Ug
cmV0dXJuIGZhbHNlIChjb25zaXN0ZW50IHdpdGggTW96aWxsYSkuCi0gICAgaWYgKCFvMi0+aW1w
bGVtZW50c0hhc0luc3RhbmNlKCkpCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwot
Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihvMi0+aGFzSW5zdGFuY2UoZXhlYywgdjEpKTsKLX0KLQot
Ym9vbCBJbnN0YW5jZU9mTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShleGVj
KTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNWYWx1ZSogdjIgPSBtX2V4
cHIyLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0KLSAg
ICBpZiAoIXYyLT5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0
LiBDYW5ub3QgYmUgdXNlZCB3aXRoICdpbnN0YW5jZW9mJyBvcGVyYXRvci4iLCB2MiwgbV9leHBy
Mi5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCog
bzIgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYyKTsKLQotICAgIC8vIEFjY29yZGluZyB0byB0
aGUgc3BlYywgb25seSBzb21lIHR5cGVzIG9mIG9iamVjdHMgImltcGxlbWVudCIgdGhlIFtbSGFz
SW5zdGFuY2VdXSBwcm9wZXJ0eS4KLSAgICAvLyBCdXQgd2UgYXJlIHN1cHBvc2VkIHRvIHRocm93
IGFuIGV4Y2VwdGlvbiB3aGVyZSB0aGUgb2JqZWN0IGRvZXMgbm90ICJoYXZlIiB0aGUgW1tIYXNJ
bnN0YW5jZV1dCi0gICAgLy8gcHJvcGVydHkuIEl0IHNlZW1zIHRoYXQgYWxsIG9iamVjdHMgaGF2
ZSB0aGUgcHJvcGVydHksIGJ1dCBub3QgYWxsIGltcGxlbWVudCBpdCwgc28gaW4gdGhpcwotICAg
IC8vIGNhc2Ugd2UgcmV0dXJuIGZhbHNlIChjb25zaXN0ZW50IHdpdGggTW96aWxsYSkuCi0gICAg
aWYgKCFvMi0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBvMi0+aGFzSW5zdGFuY2UoZXhlYywgdjEpOwotfQotCi1SZWdpc3RlcklE
KiBJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEluKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcHJvcGVydHkuZ2V0KCkpLCBwcm9wZXJ0eS5nZXQo
KSwgYmFzZSk7Ci19Ci0KLXZvaWQgSW5Ob2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3Jh
Z2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhw
cjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7Ci19CisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlQnJhY2tldE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8gRUNNQSAxMS44LjcKLUpTVmFsdWUqIElu
Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklE
KiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIxLT5ldmFsdWF0ZShl
eGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHYyID0gbV9l
eHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3Jp
cHQuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7Cit9CiAKLSAgICBp
ZiAoIXYyLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IsICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmpl
Y3QuIENhbm5vdCBiZSB1c2VkIHdpdGggJ2luJyBvcGVyYXRvci4iLCB2MiwgbV9leHByMi5nZXQo
KSk7CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlRG90Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgcmV0dXJuIGpzQm9vbGVhbihz
dGF0aWNfY2FzdDxKU09iamVjdCo+KHYyKS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcih2
MS0+dG9TdHJpbmcoZXhlYykpKSk7CitSZWdpc3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWdp
c3RlcklEKiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgcjAsIG1faWRlbnQpOwogfQogCi1ib29sIEluTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4cHIx
LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05CT09MRUFOCi0gICAgSlNW
YWx1ZSogdjIgPSBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05CT09MRUFOCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlVmFsdWVO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBpZiAoIXYyLT5p
c09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUg
JXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUg
dXNlZCB3aXRoICdpbicgb3BlcmF0b3IuIiwgdjIsIG1fZXhwcjIuZ2V0KCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorUmVnaXN0ZXJJRCogRGVsZXRlVmFsdWVOb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBnZW5l
cmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHYyKS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcih2MS0+dG9TdHJpbmco
ZXhlYykpKTsKKyAgICAvLyBkZWxldGUgb24gYSBub24tbG9jYXRpb24gZXhwcmVzc2lvbiBpZ25v
cmVzIHRoZSB2YWx1ZSBhbmQgcmV0dXJucyB0cnVlCisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB0cnVlKTsKIH0KIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVxdWFsaXR5IE5vZGVzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFZvaWROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUmVnaXN0
ZXJJRCogRXF1YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK1JlZ2lzdGVySUQqIFZvaWROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
c3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKLSAgICBSZWdpc3RlcklE
KiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdEVxdWFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5n
ZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCByMC5nZXQoKSksIGpzVW5kZWZp
bmVkKCkpOwogfQogCi12b2lkIEVxdWFsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4
cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBFQ01BIDExLjkuMQotYm9vbCBFcXVhbE5v
ZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQorUmVnaXN0ZXJJRCogVHlwZU9mUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIEpTVmFsdWUqIHYxID0gbV9leHBy
MS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpT
VmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OQk9PTEVBTgorICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3Rl
ckZvckxvY2FsKG1faWRlbnQpKQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2Yo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwogCi0gICAgcmV0dXJuIGVx
dWFsKGV4ZWMsIHYxLCB2Mik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjcmF0Y2ggPSBnZW5l
cmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9p
ZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHNjcmF0Y2guZ2V0KCksIHNjcmF0Y2gu
Z2V0KCksIG1faWRlbnQpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFR5cGVPZihnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNjcmF0Y2guZ2V0KCkpLCBzY3JhdGNoLmdldCgpKTsK
IH0KIAotSlNWYWx1ZSogRXF1YWxOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4ganNCb29sZWFuKGlubGluZUV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpKTsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlT2ZWYWx1
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBFcXVhbE5v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVn
aXN0ZXJJRCogVHlwZU9mVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0Jvb2xl
YW4oZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFR5cGVPZihnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMuZ2V0KCkpOwogfQogCi1SZWdpc3RlcklEKiBO
b3RFcXVhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwcjEuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm90RXF1YWwo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwg
c3JjMik7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4UmVzb2x2
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIE5vdEVxdWFs
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCitSZWdpc3RlcklEKiBQcmVJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQor
ICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1f
aWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50KG1faWRlbnQp
KSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdExv
YWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgMS4wKTsKKyAgICAgICAgICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdEFkZChyMC5nZXQoKSwgbG9jYWwsIHIwLmdldCgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcmVJbmMobG9jYWwpOworICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2Nh
bCk7CisgICAgfQogCi0vLyBFQ01BIDExLjkuMgotYm9vbCBOb3RFcXVhbE5vZGU6OmlubGluZUV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpT
VmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0g
ICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgorICAgIGludCBpbmRleCA9IDA7CisgICAgc2l6
ZV90IGRlcHRoID0gMDsKKyAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lk
ZW50LCBpbmRleCwgZGVwdGgpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewor
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci5lbWl0R2V0U2Nv
cGVkVmFyKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgZGVwdGgsIGluZGV4KTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcmVJbmMocHJvcERzdC5nZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0UHV0U2NvcGVkVmFyKGRlcHRoLCBpbmRleCwgcHJvcERzdC5nZXQoKSk7CisgICAg
ICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BE
c3QuZ2V0KCkpOzsKKyAgICB9CiAKLSAgICByZXR1cm4gIWVxdWFsKGV4ZWMsdjEsIHYyKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2
ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcERzdC5nZXQoKSwgbV9pZGVu
dCk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVJbmMocHJvcERzdC5nZXQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHByb3BEc3QuZ2V0KCkpOworICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3Qu
Z2V0KCkpOwogfQogCi1KU1ZhbHVlKiBOb3RFcXVhbE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogUHJlRGVjUmVzb2x2ZU5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJl
dHVybiBqc0Jvb2xlYW4oaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oZXhlYykpOwotfQorICAgIGlm
IChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRlbnQp
KSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50KG1faWRlbnQpKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgLTEuMCk7CisgICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKGxvY2FsKTsKKyAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwor
ICAgIH0KIAotYm9vbCBOb3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVh
bihleGVjKTsKLX0KKyAgICBpbnQgaW5kZXggPSAwOworICAgIHNpemVfdCBkZXB0aCA9IDA7Cisg
ICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRo
KSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGRlcHRoLCBpbmRleCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJlRGVjKHByb3BEc3QuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFNjb3Bl
ZFZhcihkZXB0aCwgaW5kZXgsIHByb3BEc3QuZ2V0KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTs7CisgICAg
fQogCi1SZWdpc3RlcklEKiBTdHJpY3RFcXVhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQotewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
cmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQq
IHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0U3RyaWN0RXF1YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBz
cmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBy
b3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHByb3BEc3QuZ2V0KCksIG1faWRlbnQpOworICAgIGdlbmVyYXRvci5lbWl0
UHJlRGVjKHByb3BEc3QuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdl
dCgpLCBtX2lkZW50LCBwcm9wRHN0LmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVU
b0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKIH0KIAotdm9pZCBTdHJp
Y3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeEJyYWNr
ZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCog
UHJlSW5jQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQoKSk7Ci0g
ICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQo
KSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCk7CisgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKHByb3BEc3QuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdFByZUluYyh2YWx1ZSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNl
LmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUpOworICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwogfQogCi0vLyBFQ01B
IDExLjkuNAotYm9vbCBTdHJpY3RFcXVhbE5vZGU6OmlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogUHJlRGVjQnJhY2tldE5v
ZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ewotICAgIEpTVmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NI
RUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIEpTVmFsdWUqIHYyID0gbV9leHByMi0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotCi0gICAgcmV0dXJuIHN0cmlj
dEVxdWFsKHYxLCB2Mik7CisgICAgCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJv
cGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwor
ICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChwcm9wRHN0Lmdl
dCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVE
ZWModmFsdWUpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVy
dHkuZ2V0KCksIHZhbHVlKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogU3RyaWN0RXF1YWxO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVmaXhEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogUHJlSW5jRG90Tm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgcmV0dXJuIGpz
Qm9vbGVhbihpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKSk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsK
KyAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm9wRHN0Lmdl
dCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKKyAgICBnZW5lcmF0b3IuZW1pdFByZUluYyh2YWx1
ZSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVl
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBw
cm9wRHN0LmdldCgpKTsKIH0KIAotYm9vbCBTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29s
ZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogUHJlRGVjRG90
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOworICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCk7CisgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJv
cERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcmVE
ZWModmFsdWUpOworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCB2YWx1ZSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CiAKLVJlZ2lzdGVySUQqIE5vdFN0cmljdEVxdWFsTm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZml4RXJyb3JOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIFByZWZpeEVycm9yTm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdl
dCgpKTsKLSAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIu
Z2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vdFN0cmljdEVxdWFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwor
ICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFJlZmVyZW5jZUVycm9yLCBtX29w
ZXJhdG9yID09IE9wUGx1c1BsdXMKKyAgICAgICAgPyAiUHJlZml4ICsrIG9wZXJhdG9yIGFwcGxp
ZWQgdG8gdmFsdWUgdGhhdCBpcyBub3QgYSByZWZlcmVuY2UuIgorICAgICAgICA6ICJQcmVmaXgg
LS0gb3BlcmF0b3IgYXBwbGllZCB0byB2YWx1ZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsK
IH0KIAotdm9pZCBOb3RTdHJpY3RFcXVhbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3Rv
cmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFVuYXJ5UGx1c05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
UmVnaXN0ZXJJRCogVW5hcnlQbHVzTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdl
dCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lzdGVy
SUQqIHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOworICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
c3JjKTsKIH0KIAotLy8gRUNNQSAxMS45LjUKLWJvb2wgTm90U3RyaWN0RXF1YWxOb2RlOjppbmxp
bmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBKU1ZhbHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VY
Q0VQVElPTkJPT0xFQU4KLSAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMp
OwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBOZWdhdGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLSAgICByZXR1cm4gIXN0cmljdEVxdWFsKHYxLCB2Mik7CitSZWdpc3RlcklEKiBOZWdhdGVO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
K3sKKyAgICBSZWdpc3RlcklEKiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgp
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZWdhdGUoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgc3JjKTsKIH0KIAotSlNWYWx1ZSogTm90U3RyaWN0RXF1YWxOb2RlOjpldmFs
dWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCaXR3aXNlTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1JlZ2lzdGVySUQqIEJpdHdpc2VOb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKGlu
bGluZUV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBSZWdpc3RlcklEKiBzcmMgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRC
aXROb3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKIH0KIAotYm9vbCBO
b3RTdHJpY3RFcXVhbE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxOb3RO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogTG9naWNh
bE5vdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKKyAgICBS
ZWdpc3RlcklEKiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXROb3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
c3JjKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpdCBPcGVyYXRp
b24gTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIE11bHRpcGxpY2F0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJlZ2lzdGVySUQqIEJpdEFuZE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJRCog
TXVsdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fZXhwcjEuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qml0QW5kKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIp
OworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVy
bTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90
ZXJtMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TXVsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwogfQogCi12
b2lkIEJpdEFuZE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQorUmVnaXN0ZXJJRCogRGl2Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCht
X2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBkaXZpZGVuZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0x
LmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBkaXZpc29yID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
dGVybTIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERpdihnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGRpdmlkZW5kLmdldCgpKSwgZGl2aWRlbmQuZ2V0KCksIGRpdmlz
b3IpOwogfQogCi0vLyBFQ01BIDExLjEwCi1KU1ZhbHVlKiBCaXRBbmROb2RlOjpldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIE1vZE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIEpT
VmFsdWUqIHYxID0gbV9leHByMS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLSAgICBKU1ZhbHVlKiB2MiA9IG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwotICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICByZXR1cm4ganNOdW1iZXJGcm9tQW5kKGV4
ZWMsIHYxLCB2Mik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRpdmlkZW5kID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIGRpdmlzb3IgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
TW9kKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZGl2aWRlbmQuZ2V0KCkpLCBkaXZp
ZGVuZC5nZXQoKSwgZGl2aXNvcik7CiB9CiAKLWludDMyX3QgQml0QW5kTm9kZTo6aW5saW5lRXZh
bHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGl0aXZlIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIEFkZE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGludDMyX3QgaTEg
PSBtX2V4cHIxLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9O
TlVNQkVSCi0gICAgaW50MzJfdCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVjKTsK
LSAgICByZXR1cm4gKGkxICYgaTIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0QWRkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEu
Z2V0KCksIHNyYzIpOwogfQogCi1kb3VibGUgQml0QW5kTm9kZTo6ZXZhbHVhdGVUb051bWJlcihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQqIFN1Yk5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJl
dHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJ
RCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRTdWIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdl
dCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLWJvb2wgQml0QW5kTm9kZTo6ZXZhbHVhdGVU
b0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gU2hpZnQgTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIExlZnRTaGlmdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzaGlmdCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRMZWZ0U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWwuZ2V0KCkpLCB2
YWwuZ2V0KCksIHNoaWZ0KTsKIH0KIAotaW50MzJfdCBCaXRBbmROb2RlOjpldmFsdWF0ZVRvSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBSaWdodFNoaWZ0
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdmFsID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTEuZ2V0KCkpOworICAg
IFJlZ2lzdGVySUQqIHNoaWZ0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFJpZ2h0U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCB2YWwuZ2V0KCkpLCB2YWwuZ2V0KCksIHNoaWZ0KTsKIH0KIAotdWludDMyX3Qg
Qml0QW5kTm9kZTo6ZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhl
YykKK1JlZ2lzdGVySUQqIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVF
dmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3Rlcm0xLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzaGlmdCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRVbnNpZ25lZFJpZ2h0U2hpZnQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWwu
Z2V0KCkpLCB2YWwuZ2V0KCksIHNoaWZ0KTsKIH0KIAotUmVnaXN0ZXJJRCogQml0WE9yTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVsYXRpb25hbCBOb2RlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVySUQqIExlc3NOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKICAg
ICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwot
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpdFhPcihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKLX0KLQotdm9pZCBCaXRYT3JO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFj
ay5hcHBlbmQobV9leHByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TGVzcyhn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBz
cmMyKTsKIH0KIAotaW50MzJfdCBCaXRYT3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBHcmVhdGVyTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAg
aW50IGkxID0gbV9leHByMS0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgIEtKU19DSEVDS0VY
Q0VQVElPTk5VTUJFUgotICAgIGludCBpMiA9IG1fZXhwcjItPmV2YWx1YXRlVG9JbnQzMihleGVj
KTsKLSAgICByZXR1cm4gKGkxIF4gaTIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0TGVzcyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBz
cmMxLmdldCgpLCBzcmMyKTsKIH0KIAotSlNWYWx1ZSogQml0WE9yTm9kZTo6ZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBMZXNzRXFOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBy
ZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAg
ICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExlc3NFcShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAotZG91YmxlIEJpdFhP
ck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitS
ZWdpc3RlcklEKiBHcmVhdGVyRXFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0ludDMy
KGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fZXhwcjIuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TGVzc0VxKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIp
OwogfQogCi1ib29sIEJpdFhPck5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogSW5zdGFuY2VPZk5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIGJh
c2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0SW5zdGFuY2VPZihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVl
LmdldCgpKSwgdmFsdWUuZ2V0KCksIGJhc2UpOwogfQogCi1pbnQzMl90IEJpdFhPck5vZGU6OmV2
YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQq
IEluTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7Ci0gICAgcmV0dXJuIGlubGluZUV2YWx1YXRlVG9JbnQzMihleGVjKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQo
KSk7CisgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdl
dCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRJbihnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIHByb3BlcnR5LmdldCgpKSwgcHJvcGVydHkuZ2V0KCksIGJhc2UpOwogfQogCi11
aW50MzJfdCBCaXRYT3JOb2RlOjpldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXF1YWxpdHkgTm9kZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJlZ2lzdGVySUQqIEJpdE9yTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCitSZWdp
c3RlcklEKiBFcXVhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fZXhwcjEuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qml0
T3IoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQo
KSwgc3JjMik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RXF1YWwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLXZv
aWQgQml0T3JOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
IG5vZGVTdGFjaykKK1JlZ2lzdGVySUQqIE5vdEVxdWFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgbm9kZVN0YWNrLmFwcGVu
ZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjEu
Z2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
Mi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm90RXF1YWwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAK
LWludDMyX3QgQml0T3JOb2RlOjppbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBTdHJpY3RFcXVhbE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGludCBpMSA9
IG1fZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05O
VU1CRVIKLSAgICBpbnQgaTIgPSBtX2V4cHIyLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAg
cmV0dXJuIChpMSB8IGkyKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIxLmdldCgpKTsKKyAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFN0
cmljdEVxdWFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNy
YzEuZ2V0KCksIHNyYzIpOwogfQogCi1KU1ZhbHVlKiBCaXRPck5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQorUmVnaXN0ZXJJRCogTm90U3RyaWN0RXF1YWxOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICByZXR1cm4ganNOdW1iZXIoaW5saW5lRXZhbHVhdGVUb0ludDMyKGV4ZWMpKTsKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxLmdldCgp
KTsKKyAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIuZ2V0
KCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vdFN0cmljdEVxdWFsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIpOwogfQog
Ci1kb3VibGUgQml0T3JOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQml0IE9wZXJhdGlvbiBOb2RlcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQml0T3JOb2RlOjpldmFs
dWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKK1JlZ2lzdGVySUQq
IEJpdEFuZE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogewotICAgIHJldHVybiBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQo
KSk7CisgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdl
dCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaXRBbmQoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CiB9CiAKLWludDMy
X3QgQml0T3JOb2RlOjpldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4
ZWMpCitSZWdpc3RlcklEKiBCaXRYT3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICByZXR1cm4gaW5saW5lRXZhbHVhdGVUb0lu
dDMyKGV4ZWMpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwcjEuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByMi5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qml0WE9yKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNy
YzIpOwogfQogCi11aW50MzJfdCBCaXRPck5vZGU6OmV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCitSZWdpc3RlcklEKiBCaXRPck5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIHJldHVybiBp
bmxpbmVFdmFsdWF0ZVRvSW50MzIoZXhlYyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3Jj
MiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRCaXRPcihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkp
LCBzcmMxLmdldCgpLCBzcmMyKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEJpbmFyeSBMb2dpY2FsIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTM5NjksMzMgKzkyMCw2IEBAIFJlZ2lzdGVySUQqIExvZ2ljYWxBbmROb2RlOjplbWl0Q29kZShD
b2QKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0
ZW1wLmdldCgpKTsKIH0KIAotdm9pZCBMb2dpY2FsQW5kTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkp
OwotfQotCi0vLyBFQ01BIDExLjExCi1KU1ZhbHVlKiBMb2dpY2FsQW5kTm9kZTo6ZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdjEgPSBtX2V4
cHIxLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIGJv
b2wgYjEgPSB2MS0+dG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0gICAgaWYgKCFiMSkKLSAgICAgICAgcmV0dXJuIHYxOwotICAgIEpTVmFsdWUqIHYyID0gbV9l
eHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBy
ZXR1cm4gdjI7Ci19Ci0KLWJvb2wgTG9naWNhbEFuZE5vZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fZXhwcjEtPmV2
YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTkJPT0xFQU4KLSAg
ICByZXR1cm4gYiAmJiBtX2V4cHIyLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQogUmVn
aXN0ZXJJRCogTG9naWNhbE9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CkBAIC00MDA5LDI4ICs5MzMsNiBAQCBSZWdpc3Rl
cklEKiBMb2dpY2FsT3JOb2RlOjplbWl0Q29kZShDb2RlCiAgICAgcmV0dXJuIGdlbmVyYXRvci5t
b3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKLXZvaWQgTG9n
aWNhbE9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBu
b2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIyLmdldCgpKTsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBMb2dpY2FsT3JO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlKiB2MSA9IG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0gICAgaWYgKHYxLT50b0Jvb2xlYW4oZXhlYykpCi0gICAgICAgIHJldHVybiB2MTsK
LSAgICByZXR1cm4gbV9leHByMi0+ZXZhbHVhdGUoZXhlYyk7Ci19Ci0KLWJvb2wgTG9naWNhbE9y
Tm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgYm9vbCBiID0gbV9leHByMS0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pT
X0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiBiIHx8IG1fZXhwcjItPmV2YWx1YXRl
VG9Cb29sZWFuKGV4ZWMpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Q29uZGl0aW9uYWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3Rl
cklEKiBDb25kaXRpb25hbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQpAQCAtNDA1MywxMTkgKzk1NSwxMSBAQCBSZWdpc3RlcklEKiBDb25k
aXRpb25hbE5vZGU6OmVtaXRDb2RlKENvCiAgICAgcmV0dXJuIG5ld0RzdC5nZXQoKTsKIH0KIAot
dm9pZCBDb25kaXRpb25hbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMi5nZXQo
KSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIxLmdldCgpKTsKLSAgICBub2RlU3RhY2su
YXBwZW5kKG1fbG9naWNhbC5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTEuMTIKLUpTVmFsdWUqIENv
bmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgYm9vbCBiID0gbV9sb2dpY2FsLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiBiID8gbV9leHByMS0+ZXZhbHVhdGUo
ZXhlYykgOiBtX2V4cHIyLT5ldmFsdWF0ZShleGVjKTsKLX0KLQotYm9vbCBDb25kaXRpb25hbE5v
ZGU6OmV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIGJvb2wgYiA9IG1fbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pT
X0NIRUNLRVhDRVBUSU9OQk9PTEVBTgotICAgIHJldHVybiBiID8gbV9leHByMS0+ZXZhbHVhdGVU
b0Jvb2xlYW4oZXhlYykgOiBtX2V4cHIyLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQot
ZG91YmxlIENvbmRpdGlvbmFsTm9kZTo6ZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBib29sIGIgPSBtX2xvZ2ljYWwtPmV2YWx1YXRlVG9Cb29s
ZWFuKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTk5VTUJFUgotICAgIHJldHVybiBiID8g
bV9leHByMS0+ZXZhbHVhdGVUb051bWJlcihleGVjKSA6IG1fZXhwcjItPmV2YWx1YXRlVG9OdW1i
ZXIoZXhlYyk7Ci19Ci0KLWludDMyX3QgQ29uZGl0aW9uYWxOb2RlOjpldmFsdWF0ZVRvSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgYm9vbCBiID0gbV9sb2dpY2Fs
LT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05OVU1CRVIK
LSAgICByZXR1cm4gYiA/IG1fZXhwcjEtPmV2YWx1YXRlVG9JbnQzMihleGVjKSA6IG1fZXhwcjIt
PmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQotdWludDMyX3QgQ29uZGl0aW9uYWxOb2RlOjpl
dmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIGJv
b2wgYiA9IG1fbG9naWNhbC0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci0gICAgS0pTX0NIRUNL
RVhDRVBUSU9OTlVNQkVSCi0gICAgcmV0dXJuIGIgPyBtX2V4cHIxLT5ldmFsdWF0ZVRvVUludDMy
KGV4ZWMpIDogbV9leHByMi0+ZXZhbHVhdGVUb1VJbnQzMihleGVjKTsKLX0KLQotLy8gRUNNQSAx
MS4xMwotCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlB
c3NpZ25tZW50KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBjdXJyZW50
LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIE9wZXJhdG9yIG9wZXIpIEtKU19GQVNUX0NBTEw7Ci1z
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBjdXJyZW50LCBFeHByZXNz
aW9uTm9kZSogcmlnaHQsIE9wZXJhdG9yIG9wZXIpCi17Ci0gICAgSlNWYWx1ZSogdjsKLSAgICBp
bnQgaTE7Ci0gICAgaW50IGkyOwotICAgIHVuc2lnbmVkIGludCB1aTsKLSAgICBzd2l0Y2ggKG9w
ZXIpIHsKLSAgICAgICAgY2FzZSBPcE11bHRFcToKLSAgICAgICAgICAgIHYgPSBqc051bWJlcihj
dXJyZW50LT50b051bWJlcihleGVjKSAqIHJpZ2h0LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wRGl2RXE6Ci0gICAgICAgICAgICB2
ID0ganNOdW1iZXIoY3VycmVudC0+dG9OdW1iZXIoZXhlYykgLyByaWdodC0+ZXZhbHVhdGVUb051
bWJlcihleGVjKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcFBsdXNFcToK
LSAgICAgICAgICAgIHYgPSBhZGQoZXhlYywgY3VycmVudCwgcmlnaHQtPmV2YWx1YXRlKGV4ZWMp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wTWludXNFcToKLSAgICAgICAg
ICAgIHYgPSBqc051bWJlcihjdXJyZW50LT50b051bWJlcihleGVjKSAtIHJpZ2h0LT5ldmFsdWF0
ZVRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wTFNo
aWZ0OgotICAgICAgICAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwotICAgICAgICAg
ICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgdiA9IGpz
TnVtYmVyKGkxIDw8IGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wUlNo
aWZ0OgotICAgICAgICAgICAgaTEgPSBjdXJyZW50LT50b0ludDMyKGV4ZWMpOwotICAgICAgICAg
ICAgaTIgPSByaWdodC0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgdiA9IGpz
TnVtYmVyKGkxID4+IGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wVVJT
aGlmdDoKLSAgICAgICAgICAgIHVpID0gY3VycmVudC0+dG9VSW50MzIoZXhlYyk7Ci0gICAgICAg
ICAgICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0g
anNOdW1iZXIodWkgPj4gaTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3BB
bmRFcToKLSAgICAgICAgICAgIGkxID0gY3VycmVudC0+dG9JbnQzMihleGVjKTsKLSAgICAgICAg
ICAgIGkyID0gcmlnaHQtPmV2YWx1YXRlVG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHYgPSBq
c051bWJlcihpMSAmIGkyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9wWE9y
RXE6Ci0gICAgICAgICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAg
ICBpMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNO
dW1iZXIoaTEgXiBpMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcE9yRXE6
Ci0gICAgICAgICAgICBpMSA9IGN1cnJlbnQtPnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICBp
MiA9IHJpZ2h0LT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICB2ID0ganNOdW1i
ZXIoaTEgfCBpMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPcE1vZEVxOiB7
Ci0gICAgICAgICAgICBkb3VibGUgZDEgPSBjdXJyZW50LT50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgIGRvdWJsZSBkMiA9IHJpZ2h0LT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMpOwotICAgICAg
ICAgICAgdiA9IGpzTnVtYmVyKGZtb2QoZDEsIGQyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICB2ID0ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
djsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWRNb2RpZnlSZXNv
bHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBGSVhNRTog
c2hvdWxkIHRoaXMgYmUgbW92ZWQgdG8gYmUgYSBtZXRob2Qgb24gQ29kZUdlbmVyYXRvcj8KLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmF0b3Igb3BlcikKKy8vIEZJWE1FOiBzaG91bGQgdGhp
cyBiZSBtb3ZlZCB0byB0aGUgQ29kZUdlbmVyYXRvciBjbGFzcz8KK3N0YXRpYyBBTFdBWVNfSU5M
SU5FIFJlZ2lzdGVySUQqIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsCisgICAgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3Rl
cklEKiBzcmMyLCBPcGVyYXRvciBvcGVyKQogewogICAgIHN3aXRjaCAob3BlcikgewogICAgICAg
ICBjYXNlIE9wTXVsdEVxOgpAQCAtNDIzNiwxOCArMTAzMCw2IEBAIFJlZ2lzdGVySUQqIFJlYWRN
b2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEMKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlk
KGJhc2UuZ2V0KCksIG1faWRlbnQsIHJlc3VsdCk7CiB9CiAKLXZvaWQgUmVhZE1vZGlmeVJlc29s
dmVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBMb2NhbFN0b3JhZ2UmIGxvY2Fs
U3RvcmFnZSwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZCht
X3JpZ2h0LmdldCgpKTsKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS5nZXQobV9pZGVudC51
c3RyaW5nKCkucmVwKCkpLmdldEluZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSkgewotICAgICAgICBpZiAoaXNDb25zdGFudChsb2NhbFN0b3JhZ2UsIGluZGV4
KSkKLSAgICAgICAgICAgIG5ldyAodGhpcykgUmVhZE1vZGlmeUNvbnN0Tm9kZShpbmRleCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykgUmVhZE1vZGlmeUxvY2FsVmFyTm9k
ZShpbmRleCk7Ci0gICAgfQotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
QXNzaWduUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
UmVnaXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDI3MywxNDYgKzEwNTUsNyBAQCBSZWdpc3Rl
cklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZSk7CiB9CiAKLXZvaWQgQXNzaWdu
UmVzb2x2ZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYg
bG9jYWxTdG9yYWdlLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fcmlnaHQuZ2V0KCkpOwotICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlLmdldChtX2lk
ZW50LnVzdHJpbmcoKS5yZXAoKSkuZ2V0SW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gbWlzc2lu
Z1N5bWJvbE1hcmtlcigpKSB7Ci0gICAgICAgIGlmIChpc0NvbnN0YW50KGxvY2FsU3RvcmFnZSwg
aW5kZXgpKQotICAgICAgICAgICAgbmV3ICh0aGlzKSBBc3NpZ25Db25zdE5vZGU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG5ldyAodGhpcykgQXNzaWduTG9jYWxWYXJOb2RlKGluZGV4KTsK
LSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWFkTW9kaWZ5
TG9jYWxWYXJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUpTVmFs
dWUqIFJlYWRNb2RpZnlMb2NhbFZhck5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEFTU0VSVChleGVjLT52YXJpYWJsZU9iamVjdCgpID09IGV4ZWMt
PnNjb3BlQ2hhaW4oKS50b3AoKSk7Ci0KLSAgICBBU1NFUlQobV9vcGVyYXRvciAhPSBPcEVxdWFs
KTsKLSAgICBKU1ZhbHVlKiB2ID0gdmFsdWVGb3JSZWFkTW9kaWZ5QXNzaWdubWVudChleGVjLCBl
eGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZSwgbV9yaWdodC5nZXQoKSwgbV9vcGVy
YXRvcik7Ci0KLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIAotICAgIC8vIFdlIGNh
bid0IHN0b3JlIGEgcG9pbnRlciBpbnRvIGxvY2FsU3RvcmFnZSgpIGFuZCB1c2UgaXQgdGhyb3Vn
aG91dCB0aGUgZnVuY3Rpb24KLSAgICAvLyBib2R5LCBiZWNhdXNlIHZhbHVlRm9yUmVhZE1vZGlm
eUFzc2lnbm1lbnQoKSBtaWdodCBjYXVzZSBhbiBBY3RpdmF0aW9uSW1wIHRlYXItb2ZmLAotICAg
IC8vIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBsb2NhbFN0b3JhZ2UoKS4KLSAgICAKLSAgICBleGVj
LT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52YWx1ZSA9IHY7Ci0gICAgcmV0dXJuIHY7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25Mb2NhbFZhck5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSogQXNzaWduTG9jYWxW
YXJOb2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBB
U1NFUlQoZXhlYy0+dmFyaWFibGVPYmplY3QoKSA9PSBleGVjLT5zY29wZUNoYWluKCkudG9wKCkp
OwotICAgIEpTVmFsdWUqIHYgPSBtX3JpZ2h0LT5ldmFsdWF0ZShleGVjKTsKLQotICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBleGVjLT5sb2NhbFN0b3JhZ2UoKVttX2luZGV4XS52
YWx1ZSA9IHY7Ci0KLSAgICByZXR1cm4gdjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFJlYWRNb2RpZnlDb25zdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotSlNWYWx1ZSogUmVhZE1vZGlmeUNvbnN0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2Jq
ZWN0KCkgPT0gZXhlYy0+c2NvcGVDaGFpbigpLnRvcCgpKTsKLSAgICBKU1ZhbHVlKiBsZWZ0ID0g
ZXhlYy0+bG9jYWxTdG9yYWdlKClbbV9pbmRleF0udmFsdWU7Ci0gICAgQVNTRVJUKG1fb3BlcmF0
b3IgIT0gT3BFcXVhbCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gdmFsdWVGb3JSZWFkTW9kaWZ5
QXNzaWdubWVudChleGVjLCBsZWZ0LCBtX3JpZ2h0LmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25Db25zdE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSlNWYWx1ZSogQXNzaWduQ29uc3ROb2RlOjpldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gbV9yaWdodC0+
ZXZhbHVhdGUoZXhlYyk7Ci19Ci0KLUpTVmFsdWUqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgY29uc3QgU2NvcGVD
aGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGl0ZXIgPSBjaGFpbi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFp
bi5lbmQoKTsKLQotICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBz
Y29wZSBjaGFpbgotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSAqaXRl
cjsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90
KSkgewotICAgICAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9k
ZTo6ZXZhbHVhdGUoKS4KLQotICAgICAgICAgICAgYmFzZSA9ICppdGVyOwotICAgICAgICAgICAg
Z290byBmb3VuZDsKLSAgICAgICAgfQotCi0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChp
dGVyICE9IGVuZCk7Ci0KLSAgICBBU1NFUlQobV9vcGVyYXRvciAhPSBPcEVxdWFsKTsKLSAgICBy
ZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIG1faWRlbnQpOwotCi1mb3Vu
ZDoKLSAgICBKU1ZhbHVlKiB2OwotCi0gICAgQVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7
Ci0gICAgSlNWYWx1ZSogdjEgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwot
ICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFz
c2lnbm1lbnQoZXhlYywgdjEsIG1fcmlnaHQuZ2V0KCksIG1fb3BlcmF0b3IpOwotCi0gICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICAKLSAgICAvLyBTaW5jZSB2YWx1ZUZvclJlYWRNb2Rp
ZnlBc3NpZ25tZW50KCkgbWlnaHQgY2F1c2UgYW4gQWN0aXZhdGlvbkltcCB0ZWFyLW9mZiwKLSAg
ICAvLyB3ZSBuZWVkIHRvIGdldCB0aGUgYmFzZSBmcm9tIHRoZSBTY29wZUNoYWluSXRlcmF0b3Ig
YWdhaW4uCi0gICAgCi0gICAgKCppdGVyKS0+cHV0KGV4ZWMsIG1faWRlbnQsIHYpOwotICAgIHJl
dHVybiB2OwotfQotCi1KU1ZhbHVlKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4g
PSBleGVjLT5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBjaGFp
bi5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQot
ICAgIC8vIHdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbgot
ICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBK
U09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAg
aWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAg
ICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUo
KS4KLQotICAgICAgICAgICAgYmFzZSA9ICppdGVyOwotICAgICAgICAgICAgZ290byBmb3VuZDsK
LSAgICAgICAgfQotCi0gICAgICAgICsraXRlcjsKLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7
Ci0KLWZvdW5kOgotICAgIEpTVmFsdWUqIHYgPSBtX3JpZ2h0LT5ldmFsdWF0ZShleGVjKTsKLQot
ICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVu
dCwgdik7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBSZWFkTW9kaWZ5RG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9k
ZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
CkBAIC00NDIzLDI1ICsxMDY2LDcgQEAgUmVnaXN0ZXJJRCogQXNzaWduRG90Tm9kZTo6ZW1pdENv
ZGUoQ29kZQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHJlc3VsdCk7CiB9CiAKLXZvaWQgQXNzaWduRG90Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFw
cGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7
Ci19Ci0KLUpTVmFsdWUqIEFzc2lnbkRvdE5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1fYmFzZS0+ZXZhbHVh
dGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU09iamVjdCogYmFz
ZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICBKU1ZhbHVlKiB2ID0gbV9yaWdo
dC0+ZXZhbHVhdGUoZXhlYyk7Ci0KLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAg
YmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIHYpOwotICAgIHJldHVybiB2OwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWRNb2RpZnlEb3ROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKQEAg
LTQ0NTIsMzIgKzEwNzcsNiBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdENv
ZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50
LCB1cGRhdGVkVmFsdWUpOwogfQogCi12b2lkIFJlYWRNb2RpZnlEb3ROb2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fcmlnaHQuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9iYXNl
LmdldCgpKTsKLX0KLQotSlNWYWx1ZSogUmVhZE1vZGlmeURvdE5vZGU6OmV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IG1f
YmFzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBK
U09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+dG9PYmplY3QoZXhlYyk7Ci0KLSAgICBKU1ZhbHVl
KiB2OwotCi0gICAgQVNTRVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7Ci0gICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgSlNWYWx1ZSogdjEgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
bV9pZGVudCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNV
bmRlZmluZWQoKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIHYgPSB2YWx1ZUZv
clJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMsIHYxLCBtX3JpZ2h0LmdldCgpLCBtX29wZXJhdG9y
KTsKLQotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBiYXNlLT5wdXQoZXhlYywg
bV9pZGVudCwgdik7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBBc3NpZ25FcnJvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogUmVnaXN0ZXJJRCogQXNzaWduRXJyb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQpAQCAtNDQ4NSwxMyArMTA4NCw2IEBAIFJlZ2lz
dGVySUQqIEFzc2lnbkVycm9yTm9kZTo6ZW1pdENvZGUoQ28KICAgICByZXR1cm4gZW1pdFRocm93
RXJyb3IoZ2VuZXJhdG9yLCBSZWZlcmVuY2VFcnJvciwgIkxlZnQgc2lkZSBvZiBhc3NpZ25tZW50
IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKIH0KIAotSlNWYWx1ZSogQXNzaWduRXJyb3JOb2RlOjpl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICB0aHJvd0Vycm9y
KGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiTGVmdCBzaWRlIG9mIGFzc2lnbm1lbnQgaXMgbm90IGEg
cmVmZXJlbmNlLiIpOwotICAgIGhhbmRsZUV4Y2VwdGlvbihleGVjKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2ln
bkJyYWNrZXROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lz
dGVySUQqIEFzc2lnbkJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1MDQsMzkgKzEwOTYsNiBAQCBSZWdpc3RlcklEKiBB
c3NpZ25CcmFja2V0Tm9kZTo6ZW1pdENvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9E
ZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKIH0KIAotdm9pZCBBc3NpZ25CcmFja2V0
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBub2RlU3Rh
Y2suYXBwZW5kKG1fc3Vic2NyaXB0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFz
ZS5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUqIEFzc2lnbkJyYWNrZXROb2RlOjpldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBt
X2Jhc2UtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAg
SlNWYWx1ZSogc3Vic2NyaXB0ID0gbV9zdWJzY3JpcHQtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS0+
dG9PYmplY3QoZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBwcm9wZXJ0eUluZGV4OwotICAgIGlmIChz
dWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4KSkgewotICAgICAgICBKU1ZhbHVlKiB2
ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZB
TFVFCi0KLSAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHYpOwotICAgICAg
ICByZXR1cm4gdjsKLSAgICB9Ci0KLSAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShzdWJzY3Jp
cHQtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBKU1ZhbHVlKiB2ID0gbV9yaWdodC0+ZXZhbHVhdGUo
ZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAgIGJhc2UtPnB1dChleGVj
LCBwcm9wZXJ0eU5hbWUsIHYpOwotICAgIHJldHVybiB2OwotfQotCiBSZWdpc3RlcklEKiBSZWFk
TW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9y
LmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5nZXQoKSwgbV9zdWJzY3JpcHRIYXNBc3Np
Z25tZW50cyB8fCBtX3JpZ2h0SGFzQXNzaWdubWVudHMpOwpAQCAtNDU1MSw1MiArMTExMCw2IEBA
IFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEMKICAgICByZXR1cm4gdXBk
YXRlZFZhbHVlOwogfQogCi12b2lkIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwg
Y29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0
YWNrLmFwcGVuZChtX3JpZ2h0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3Vic2Ny
aXB0LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fYmFzZS5nZXQoKSk7Ci19Ci0KLUpT
VmFsdWUqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gbV9iYXNlLT5ldmFsdWF0
ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIEpTVmFsdWUqIHN1YnNj
cmlwdCA9IG1fc3Vic2NyaXB0LT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJ
T05WQUxVRQotCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMp
OwotCi0gICAgdWludDMyX3QgcHJvcGVydHlJbmRleDsKLSAgICBpZiAoc3Vic2NyaXB0LT5nZXRV
SW50MzIocHJvcGVydHlJbmRleCkpIHsKLSAgICAgICAgSlNWYWx1ZSogdjsKLSAgICAgICAgQVNT
RVJUKG1fb3BlcmF0b3IgIT0gT3BFcXVhbCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90Owot
ICAgICAgICBKU1ZhbHVlKiB2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eUluZGV4LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgcHJvcGVydHlJbmRleCkg
OiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgICAg
ICB2ID0gdmFsdWVGb3JSZWFkTW9kaWZ5QXNzaWdubWVudChleGVjLCB2MSwgbV9yaWdodC5nZXQo
KSwgbV9vcGVyYXRvcik7Ci0KLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLQotICAg
ICAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwgdik7Ci0gICAgICAgIHJldHVybiB2
OwotICAgIH0KLQotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJp
bmcoZXhlYykpOwotICAgIEpTVmFsdWUqIHY7Ci0KLSAgICBBU1NFUlQobV9vcGVyYXRvciAhPSBP
cEVxdWFsKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVlKiB2MSA9IGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1
ZShleGVjLCBiYXNlLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKLSAgICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotICAgIHYgPSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4
ZWMsIHYxLCBtX3JpZ2h0LmdldCgpLCBtX29wZXJhdG9yKTsKLQotICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCi0KLSAgICBiYXNlLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2KTsKLSAgICBy
ZXR1cm4gdjsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbW1hTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29t
bWFOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKQEAgLTQ2MDUsMjAgKzExMTgsNiBAQCBSZWdpc3RlcklEKiBDb21tYU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZXhwcjIuZ2V0
KCkpOwogfQogCi12b2lkIENvbW1hTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIy
LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwcjEuZ2V0KCkpOwotfQotCi0vLyBF
Q01BIDExLjE0Ci1KU1ZhbHVlKiBDb21tYU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIG1fZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgcmV0dXJuIG1fZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3REZWNsTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENvbnN0RGVjbE5vZGU6OkNvbnN0RGVj
bE5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0KQpAQCAt
NDYyNyw2NyArMTEyNiw2IEBAIENvbnN0RGVjbE5vZGU6OkNvbnN0RGVjbE5vZGUoY29uc3QgSWRl
bnQKIHsKIH0KIAotdm9pZCBDb25zdERlY2xOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0
b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBpZiAobV9uZXh0KQotICAgICAg
ICBub2RlU3RhY2suYXBwZW5kKG1fbmV4dC5nZXQoKSk7Ci0gICAgaWYgKG1faW5pdCkKLSAgICAg
ICAgbm9kZVN0YWNrLmFwcGVuZChtX2luaXQuZ2V0KCkpOwotfQotCi12b2lkIENvbnN0RGVjbE5v
ZGU6OmhhbmRsZVNsb3dDYXNlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
Y29wZUNoYWluJiBjaGFpbiwgSlNWYWx1ZSogdmFsKQotewotICAgIFNjb3BlQ2hhaW5JdGVyYXRv
ciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hh
aW4uZW5kKCk7Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUg
c2NvcGUgY2hhaW4KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgSlNPYmplY3QqIGJh
c2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSAqaXRlcjsKLSAgICAgICAgaWYgKGJhc2Ut
PmlzVmFyaWFibGVPYmplY3QoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK2l0ZXI7
Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwotCi0gICAgQVNTRVJUKGJhc2UgJiYgYmFzZS0+
aXNWYXJpYWJsZU9iamVjdCgpKTsKLQotICAgIHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3Qq
PihiYXNlKS0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgbV9pZGVudCwgdmFsLCBSZWFkT25seSk7
Ci19Ci0KLS8vIEVDTUEgMTIuMgotaW5saW5lIHZvaWQgQ29uc3REZWNsTm9kZTo6ZXZhbHVhdGVT
aW5nbGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGV4ZWMt
PnZhcmlhYmxlT2JqZWN0KCktPmhhc093blByb3BlcnR5KGV4ZWMsIG1faWRlbnQpIHx8IGV4ZWMt
PmNvZGVUeXBlKCkgPT0gRXZhbENvZGUpOyAvLyBHdWFyYW50ZWVkIGJ5IHByb2Nlc3NEZWNsYXJh
dGlvbnMuCi0gICAgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7
Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QgPSBleGVjLT52YXJpYWJsZU9i
amVjdCgpOwotCi0gICAgYm9vbCBpbkdsb2JhbFNjb3BlID0gKytjaGFpbi5iZWdpbigpID09IGNo
YWluLmVuZCgpOwotCi0gICAgaWYgKG1faW5pdCkgewotICAgICAgICBpZiAoaW5HbG9iYWxTY29w
ZSkgewotICAgICAgICAgICAgSlNWYWx1ZSogdmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBSZWFkT25seTsKLSAgICAgICAgICAg
IGlmIChleGVjLT5jb2RlVHlwZSgpICE9IEV2YWxDb2RlKQotICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMgfD0gRG9udERlbGV0ZTsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXRXaXRo
QXR0cmlidXRlcyhleGVjLCBtX2lkZW50LCB2YWwsIGF0dHJpYnV0ZXMpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSogdmFsID0gbV9pbml0LT5ldmFsdWF0ZShleGVjKTsK
LSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZPSUQKLQotICAgICAgICAgICAgLy8gaWYg
dGhlIHZhcmlhYmxlIG9iamVjdCBpcyB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbiwgdGhlbiB0
aGF0IG11c3QKLSAgICAgICAgICAgIC8vIGJlIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgZGVjbGFy
ZWQsIHByb2Nlc3NWYXJEZWNscyB3b3VsZCBoYXZlIHB1dAotICAgICAgICAgICAgLy8gaXQgdGhl
cmUuIERvbid0IHNlYXJjaCB0aGUgc2NvcGUgY2hhaW4sIHRvIG9wdGltaXplIHRoaXMgdmVyeSBj
b21tb24gY2FzZS4KLSAgICAgICAgICAgIGlmIChjaGFpbi50b3AoKSAhPSB2YXJpYWJsZU9iamVj
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlU2xvd0Nhc2UoZXhlYywgY2hhaW4sIHZh
bCk7Ci0KLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVj
LCBtX2lkZW50LCB2YWwsIFJlYWRPbmx5KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogUmVnaXN0
ZXJJRCogQ29uc3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yKQogewogICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsQ29uc3RJbml0KG1faWRlbnQpKQpAQCAtNDcwOSw0MyArMTE0NywxNCBAQCBSZWdpc3Rl
cklEKiBDb25zdERlY2xOb2RlOjplbWl0Q29kZShDb2RlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSlNWYWx1ZSogQ29uc3REZWNsTm9kZTo6ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgZXZhbHVhdGVTaW5nbGUoZXhlYyk7Ci0KLSAgICBpZiAoQ29uc3RE
ZWNsTm9kZSogbiA9IG1fbmV4dC5nZXQoKSkgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBu
LT5ldmFsdWF0ZVNpbmdsZShleGVjKTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZB
TFVFCi0gICAgICAgICAgICBuID0gbi0+bV9uZXh0LmdldCgpOwotICAgICAgICB9IHdoaWxlIChu
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotdm9pZCBDb25zdFN0YXRlbWVudE5vZGU6Om9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIEFTU0VSVChtX25l
eHQpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9uZXh0LmdldCgpKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqKQogewogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobV9uZXh0Lmdl
dCgpKTsKIH0KIAotLy8gRUNNQSAxMi4yCi1KU1ZhbHVlKiBDb25zdFN0YXRlbWVudE5vZGU6OmV4
ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgbV9uZXh0LT5ldmFs
dWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIHJldHVybiBleGVjLT5z
ZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBWZWN0b3JzIG9mIFN0YXRlbWVudE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIFN0YXRlbWVudFZlY3RvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIHN0YXRpYyBpbmxpbmUgUmVnaXN0ZXJJRCogc3RhdGVtZW50TGlzdEVtaXRDb2RlKFN0
YXRlbWVudFZlY3RvciYgc3RhdGVtZW50cywgQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QgPSAwKQogewpAQCAtNDc2Miw0NyArMTE3MSw2IEBAIHN0YXRpYyBpbmxpbmUg
UmVnaXN0ZXJJRCogc3RhdGVtZW50TGlzdEUKICAgICByZXR1cm4gcjAuZ2V0KCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8oU3RhdGVtZW50VmVjdG9yJiBz
dGF0ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKLXsKLSAgICBT
dGF0ZW1lbnRWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc3RhdGVtZW50cy5lbmQoKTsKLSAgICBTdGF0
ZW1lbnRWZWN0b3I6Oml0ZXJhdG9yIGJlZ2luID0gc3RhdGVtZW50cy5iZWdpbigpOwotICAgIHdo
aWxlIChpdCAhPSBiZWdpbikgewotICAgICAgICAtLWl0OwotICAgICAgICBzdGFjay5hcHBlbmQo
KCppdCkuZ2V0KCkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBOb2RlKiBzdGF0ZW1lbnRM
aXN0SW5pdGlhbGl6ZVZhcmlhYmxlQWNjZXNzU3RhY2soU3RhdGVtZW50VmVjdG9yJiBzdGF0ZW1l
bnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKLXsKLSAgICBpZiAoc3Rh
dGVtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RhdGVtZW50VmVj
dG9yOjppdGVyYXRvciBpdCA9IHN0YXRlbWVudHMuZW5kKCk7Ci0gICAgU3RhdGVtZW50VmVjdG9y
OjppdGVyYXRvciBiZWdpbiA9IHN0YXRlbWVudHMuYmVnaW4oKTsKLSAgICBTdGF0ZW1lbnRWZWN0
b3I6Oml0ZXJhdG9yIGJlZ2luUGx1c09uZSA9IGJlZ2luICsgMTsKLQotICAgIHdoaWxlIChpdCAh
PSBiZWdpblBsdXNPbmUpIHsKLSAgICAgICAgLS1pdDsKLSAgICAgICAgc3RhY2suYXBwZW5kKCgq
aXQpLmdldCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKCpiZWdpbikuZ2V0KCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSogc3RhdGVtZW50TGlzdEV4ZWN1dGUoU3RhdGVtZW50VmVjdG9y
JiBzdGF0ZW1lbnRzLCBPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlKiB2YWx1ZSA9IDA7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGF0ZW1lbnRzLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSog
c3RhdGVtZW50VmFsdWUgPSBzdGF0ZW1lbnRzW2ldLT5leGVjdXRlKGV4ZWMpOwotICAgICAgICBp
ZiAoc3RhdGVtZW50VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwot
ICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0
aW9uKHZhbHVlKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJsb2Nr
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQmxvY2tOb2RlOjpC
bG9ja05vZGUoU291cmNlRWxlbWVudHMqIGNoaWxkcmVuKQpAQCAtNDgxNiwxNyArMTE4NCw2IEBA
IFJlZ2lzdGVySUQqIEJsb2NrTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmUKICAgICByZXR1cm4gc3Rh
dGVtZW50TGlzdEVtaXRDb2RlKG1fY2hpbGRyZW4sIGdlbmVyYXRvciwgZHN0KTsKIH0KIAotdm9p
ZCBCbG9ja05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQotewotICAgIHN0YXRlbWVudExpc3RQdXNoRklGTyhtX2NoaWxkcmVuLCBub2Rl
U3RhY2spOwotfQotCi0vLyBFQ01BIDEyLjEKLUpTVmFsdWUqIEJsb2NrTm9kZTo6ZXhlY3V0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gc3RhdGVtZW50TGlz
dEV4ZWN1dGUobV9jaGlsZHJlbiwgZXhlYyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFbXB0eVN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIFJlZ2lzdGVySUQqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ4MzQsMzMgKzExOTEsMTIgQEAgUmVnaXN0ZXJJRCog
RW1wdHlTdGF0ZW1lbnROb2RlOjplbWl0Q29kZQogICAgIHJldHVybiBkc3Q7CiB9CiAKLS8vIEVD
TUEgMTIuMwotSlNWYWx1ZSogRW1wdHlTdGF0ZW1lbnROb2RlOjpleGVjdXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0
aW9uKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFeHByU3RhdGVt
ZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEV4cHJT
dGF0ZW1lbnROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKICAgICBBU1NFUlQobV9leHByKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKLX0KLQotdm9pZCBFeHByU3RhdGVtZW50Tm9kZTo6
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17
Ci0gICAgQVNTRVJUKG1fZXhwcik7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkp
OwotfQotCi0vLyBFQ01BIDEyLjQKLUpTVmFsdWUqIEV4cHJTdGF0ZW1lbnROb2RlOjpleGVjdXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0g
bV9leHByLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIHJl
dHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKHZhbHVlKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFZhclN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtNDg3MSwyMCArMTIwNyw2IEBAIFJlZ2lzdGVySUQqIFZhclN0YXRlbWVudE5vZGU6
OmVtaXRDb2RlKEMKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7
CiB9CiAKLXZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgQVNTRVJUKG1fZXhwcik7Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi1KU1ZhbHVlKiBWYXJTdGF0ZW1l
bnROb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIG1f
ZXhwci0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0KLSAgICByZXR1
cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbigpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gSWZOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBSZWdpc3RlcklEKiBJZk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDg5NywyNyArMTIxOSwxMCBAQCBSZWdpc3RlcklE
KiBJZk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9pZkJsb2NrLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyVGhlbi5n
ZXQoKSk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHN0YXRl
bWVudCBleGVjdHV0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9u
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhl
Y3V0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmV0dXJuZWQgYXMgYSBDb21wbGV0aW9uCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgSWZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2Um
LCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1faWZCbG9j
ay5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2NvbmRpdGlvbi5nZXQoKSk7Ci19Ci0K
LS8vIEVDTUEgMTIuNQotSlNWYWx1ZSogSWZOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fY29uZGl0aW9uLT5ldmFsdWF0ZVRvQm9v
bGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGlmIChiKQotICAgICAg
ICByZXR1cm4gbV9pZkJsb2NrLT5leGVjdXRlKGV4ZWMpOwotICAgIHJldHVybiBleGVjLT5zZXRO
b3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0KIFJlZ2lzdGVySUQqIElmRWxzZU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0
cjxMYWJlbElEPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CkBAIC00OTM0LDI3
ICsxMjM5LDEwIEBAIFJlZ2lzdGVySUQqIElmRWxzZU5vZGU6OmVtaXRDb2RlKENvZGVHZW4KIAog
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoYWZ0ZXJFbHNlLmdldCgpKTsKIAotICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCByZXR1cm4gdGhlIGxhc3Qgc3RhdGVtZW50IGV4ZWN0dXRlZCBzbyB0aGF0
IGl0IGNhbiBiZSByZXR1cm5lZCBhcyBhIENvbXBsZXRpb24KKyAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgcmV0dXJuIHRoZSBsYXN0IHN0YXRlbWVudCBleGVjdXRlZCBzbyB0aGF0IGl0IGNhbiBi
ZSByZXR1cm5lZCBhcyBhIENvbXBsZXRpb24KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBJZkVs
c2VOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIGNvbnN0IExvY2FsU3RvcmFnZSYg
bG9jYWxTdG9yYWdlLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBw
ZW5kKG1fZWxzZUJsb2NrLmdldCgpKTsKLSAgICBJZk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nl
c3MoZXhlYywgc3ltYm9sVGFibGUsIGxvY2FsU3RvcmFnZSwgbm9kZVN0YWNrKTsKLX0KLQotLy8g
RUNNQSAxMi41Ci1KU1ZhbHVlKiBJZkVsc2VOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIGJvb2wgYiA9IG1fY29uZGl0aW9uLT5ldmFsdWF0ZVRvQm9v
bGVhbihleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGlmIChiKQotICAgICAg
ICByZXR1cm4gbV9pZkJsb2NrLT5leGVjdXRlKGV4ZWMpOwotICAgIHJldHVybiBtX2Vsc2VCbG9j
ay0+ZXhlY3V0ZShleGVjKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IERvV2hpbGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0
ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQpAQCAtNDk3Niw0NiArMTI2NCw2IEBAIFJlZ2lzdGVySUQqIERvV2hpbGVO
b2RlOjplbWl0Q29kZShDb2RlR2UKICAgICByZXR1cm4gcmVzdWx0LmdldCgpOwogfQogCi12b2lk
IERvV2hpbGVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
IG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsK
LSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTIuNi4x
Ci1KU1ZhbHVlKiBEb1doaWxlTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7Ci0KLSAgICB3aGlsZSAoMSkgewotICAg
ICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAgICAgIEpTVmFsdWUqIHN0YXRlbWVudFZh
bHVlID0gbV9zdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPnBvcEl0ZXJh
dGlvbigpOwotCi0gICAgICAgIGlmIChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRpbWVk
T3V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZXhlYy0+c2V0SW50ZXJydXB0ZWRDb21wbGV0aW9u
KCk7Ci0KLSAgICAgICAgaWYgKHN0YXRlbWVudFZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBz
dGF0ZW1lbnRWYWx1ZTsKLQotICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBO
b3JtYWwpIHsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRp
bnVlICYmIG1fbGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQo
KSkpCi0gICAgICAgICAgICAgICAgZ290byBjb250aW51ZURvV2hpbGVMb29wOwotICAgICAgICAg
ICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsgJiYgbV9sYWJlbFN0YWNrLmNv
bnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnRWYWx1ZTsKLSAgICAgICAgfQotCi0g
ICAgY29udGludWVEb1doaWxlTG9vcDoKLSAgICAgICAgYm9vbCBiID0gbV9leHByLT5ldmFsdWF0
ZVRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgICAgIGlm
ICghYikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBleGVjLT5zZXRO
b3JtYWxDb21wbGV0aW9uKHZhbHVlKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFdoaWxlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
UmVnaXN0ZXJJRCogV2hpbGVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKQEAgLTUwNDEsNTAgKzEyODksMTIgQEAgUmVnaXN0ZXJJRCogV2hp
bGVOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdoaWxl
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3Rh
Y2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3N0YXRlbWVudC5nZXQoKSk7Ci0gICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi0vLyBFQ01BIDEyLjYuMgotSlNWYWx1
ZSogV2hpbGVOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUqIHZhbHVlID0gMDsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGJvb2wg
YiA9IG1fZXhwci0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VY
Q0VQVElPTgotICAgICAgICBpZiAoIWIpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBl
eGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAgICAgIEpTVmFsdWUqIHN0YXRlbWVudFZhbHVlID0g
bV9zdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPnBvcEl0ZXJhdGlvbigp
OwotCi0gICAgICAgIGlmIChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRpbWVkT3V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZXhlYy0+c2V0SW50ZXJydXB0ZWRDb21wbGV0aW9uKCk7Ci0K
LSAgICAgICAgaWYgKHN0YXRlbWVudFZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBzdGF0ZW1l
bnRWYWx1ZTsKLQotICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwp
IHsKLSAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRpbnVlICYm
IG1fbGFiZWxTdGFjay5jb250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlv
blR5cGUoKSA9PSBCcmVhayAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNv
bnRpbnVlVGFyZ2V0KCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0
dXJuIHN0YXRlbWVudFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4ZWMt
PnNldE5vcm1hbENvbXBsZXRpb24odmFsdWUpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRm9yTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBSZWdpc3RlcklEKiBGb3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMS5n
ZXQoKSk7CisgICAgaWYgKG1fZXhwcjEpCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIxLmdldCgpKTsKICAgICAKICAgICBSZWZQdHI8TGFiZWxJRD4gdG9wT2ZMb29wID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGJlZm9yZUNvbmRpdGlvbiA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtNTA5Nyw2MiArMTMwNywyMCBAQCBSZWdpc3RlcklEKiBG
b3JOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50LmdldCgpKTsKICAgICBnZW5l
cmF0b3IucG9wSnVtcENvbnRleHQoKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNvbnRpbnVl
VGFyZ2V0LmdldCgpKTsgIAotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIzLmdldCgpKTsK
KyAgICBpZiAobV9leHByMykKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjMuZ2V0
KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVDb25kaXRpb24uZ2V0KCkpOwot
ICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMi5nZXQoKSk7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7Cisg
ICAgaWYgKCFtX2V4cHIyKQorICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAodG9wT2ZMb29wLmdl
dCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVl
KGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7CisgICAgfQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
YnJlYWtUYXJnZXQuZ2V0KCkpOwogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKLXZvaWQg
Rm9yTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2Rl
U3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX3N0YXRlbWVudC5nZXQoKSk7Ci0gICAg
bm9kZVN0YWNrLmFwcGVuZChtX2V4cHIzLmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1f
ZXhwcjIuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByMS5nZXQoKSk7Ci19Ci0K
LS8vIEVDTUEgMTIuNi4zCi1KU1ZhbHVlKiBGb3JOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gMDsKLQotICAgIG1fZXhw
cjEtPmV2YWx1YXRlKGV4ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0gICAgd2hpbGUg
KDEpIHsKLSAgICAgICAgYm9vbCBiID0gbV9leHByMi0+ZXZhbHVhdGVUb0Jvb2xlYW4oZXhlYyk7
Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICBpZiAoIWIpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0gICAgICAgIEpTVmFs
dWUqIHN0YXRlbWVudFZhbHVlID0gbV9zdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7Ci0gICAgICAg
IGV4ZWMtPnBvcEl0ZXJhdGlvbigpOwotICAgICAgICBpZiAoc3RhdGVtZW50VmFsdWUpCi0gICAg
ICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZhbHVlOwotCi0gICAgICAgIGlmIChleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPnRpbWVkT3V0KCkpCi0gICAgICAgICAgICByZXR1cm4gZXhlYy0+
c2V0SW50ZXJydXB0ZWRDb21wbGV0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRp
b25UeXBlKCkgIT0gTm9ybWFsKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5
cGUoKSA9PSBDb250aW51ZSAmJiBtX2xhYmVsU3RhY2suY29udGFpbnMoZXhlYy0+YnJlYWtPckNv
bnRpbnVlVGFyZ2V0KCkpKQotICAgICAgICAgICAgICAgIGdvdG8gY29udGludWVGb3JMb29wOwot
ICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJlYWsgJiYgbV9sYWJl
bFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnRWYWx1ZTsKLSAgICAg
ICAgfQotCi0gICAgY29udGludWVGb3JMb29wOgotICAgICAgICBtX2V4cHIzLT5ldmFsdWF0ZShl
eGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgfQotCi0gICAgcmV0dXJuIGV4
ZWMtPnNldE5vcm1hbENvbXBsZXRpb24odmFsdWUpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRm9ySW5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBGb3JJbk5vZGU6OkZvckluTm9kZShFeHByZXNzaW9uTm9kZSogbCwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCkKQEAgLTUxNzYsMTUgKzEzNDQs
NiBAQCBGb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyJiBpCiAgICAgLy8gZm9y
KCB2YXIgZm9vID0gYmFyIGluIGJheiApCiB9CiAKLXZvaWQgRm9ySW5Ob2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUm
LCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKLXsKLSAgICBub2Rl
U3RhY2suYXBwZW5kKG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1f
ZXhwci5nZXQoKSk7Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2xleHByLmdldCgpKTsKLSAgICBp
ZiAobV9pbml0KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1faW5pdC5nZXQoKSk7Ci19Ci0K
IFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGxvb3BTdGFydCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwpAQCAtNTIzNCwxMDMgKzEzOTMsNiBAQCBSZWdpc3RlcklEKiBG
b3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotLy8gRUNN
QSAxMi42LjQKLUpTVmFsdWUqIEZvckluTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7Ci0KLSAgICBpZiAobV9pbml0
KSB7Ci0gICAgICAgIG1faW5pdC0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VY
Q0VQVElPTgotICAgIH0KLQotICAgIEpTVmFsdWUqIGUgPSBtX2V4cHItPmV2YWx1YXRlKGV4ZWMp
OwotICAgIEtKU19DSEVDS0VYQ0VQVElPTgotCi0gICAgLy8gRm9yIE51bGwgYW5kIFVuZGVmaW5l
ZCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgbm90IHRvIGdvIHRocm91Z2gKLSAgICAvLyB0aGUgbG9v
cCBhdCBhbGwsIGJlY2F1c2UgdG9PYmplY3Qgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAg
aWYgKGUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBleGVjLT5zZXROb3Jt
YWxDb21wbGV0aW9uKCk7Ci0KLSAgICBKU09iamVjdCogdiA9IGUtPnRvT2JqZWN0KGV4ZWMpOwot
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXM7Ci0gICAgdi0+Z2V0UHJvcGVydHlO
YW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKLQotICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0eU5hbWVzLmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlO
YW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydHlOYW1lcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSA9ICppdDsKLSAg
ICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1lKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIEpTVmFsdWUqIHN0ciA9IGpzT3duZWRTdHJpbmcobmFtZS51c3RyaW5n
KCkpOwotCi0gICAgICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPiht
X2xleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBjb25zdCBTY29wZUNo
YWluJiBjaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICAgICAgICAgIFNjb3BlQ2hhaW5J
dGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKLSAgICAgICAgICAgIFNjb3BlQ2hhaW5JdGVy
YXRvciBlbmQgPSBjaGFpbi5lbmQoKTsKLQotICAgICAgICAgICAgLy8gd2UgbXVzdCBhbHdheXMg
aGF2ZSBzb21ldGhpbmcgaW4gdGhlIHNjb3BlIGNoYWluCi0gICAgICAgICAgICBBU1NFUlQoaXRl
ciAhPSBlbmQpOwotCi0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAg
IEpTT2JqZWN0KiBvOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG8gPSAqaXRl
cjsKLSAgICAgICAgICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBz
bG90KSkgewotICAgICAgICAgICAgICAgICAgICBvLT5wdXQoZXhlYywgaWRlbnQsIHN0cik7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgICAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICAg
ICAgICAgIGlmIChpdGVyID09IGVuZCkKLSAgICAgICAgICAgICAgICBvLT5wdXQoZXhlYywgaWRl
bnQsIHN0cik7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUo
KSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxE
b3RBY2Nlc3Nvck5vZGUqPihtX2xleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwotICAgICAgICAg
ICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KG1fbGV4cHIuZ2V0
KCkpLT5iYXNlKCktPmV2YWx1YXRlKGV4ZWMpOwotICAgICAgICAgICAgS0pTX0NIRUNLRVhDRVBU
SU9OCi0gICAgICAgICAgICBKU09iamVjdCogbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwotCi0gICAg
ICAgICAgICBvLT5wdXQoZXhlYywgaWRlbnQsIHN0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9sZXhwci0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpOwotICAgICAg
ICAgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihtX2xl
eHByLmdldCgpKS0+YmFzZSgpLT5ldmFsdWF0ZShleGVjKTsKLSAgICAgICAgICAgIEtKU19DSEVD
S0VYQ0VQVElPTgotICAgICAgICAgICAgSlNWYWx1ZSogdjIgPSBzdGF0aWNfY2FzdDxCcmFja2V0
QWNjZXNzb3JOb2RlKj4obV9sZXhwci5nZXQoKSktPnN1YnNjcmlwdCgpLT5ldmFsdWF0ZShleGVj
KTsKLSAgICAgICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICAgICAgICAgICAgSlNPYmplY3Qq
IG8gPSB2LT50b09iamVjdChleGVjKTsKLQotICAgICAgICAgICAgdWludDMyX3QgaTsKLSAgICAg
ICAgICAgIGlmICh2Mi0+Z2V0VUludDMyKGkpKQotICAgICAgICAgICAgICAgIG8tPnB1dChleGVj
LCBpLCBzdHIpOwotICAgICAgICAgICAgby0+cHV0KGV4ZWMsIElkZW50aWZpZXIodjItPnRvU3Ry
aW5nKGV4ZWMpKSwgc3RyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtKU19DSEVDS0VYQ0VQVElP
TgotCi0gICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRpb24oKTsKLSAgICAgICAgSlNWYWx1ZSogc3Rh
dGVtZW50VmFsdWUgPSBtX3N0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKLSAgICAgICAgZXhlYy0+
cG9wSXRlcmF0aW9uKCk7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnRWYWx1ZSkKLSAgICAgICAgICAg
IHZhbHVlID0gc3RhdGVtZW50VmFsdWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLT50aW1lZE91dCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMt
PnNldEludGVycnVwdGVkQ29tcGxldGlvbigpOwotCi0gICAgICAgIGlmIChleGVjLT5jb21wbGV0
aW9uVHlwZSgpICE9IE5vcm1hbCkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25U
eXBlKCkgPT0gQ29udGludWUgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JD
b250aW51ZVRhcmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIG1fbGFiZWxTdGFjay5jb250
YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VmFsdWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2YWx1ZSk7Ci19Ci0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb250aW51ZU5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTIuNwpAQCAtNTM1NiwxNSArMTQxOCw2
IEBAIFJlZ2lzdGVySUQqIENvbnRpbnVlTm9kZTo6ZW1pdENvZGUoQ29kZUcKICAgICByZXR1cm4g
ZHN0OwogfQogCi1KU1ZhbHVlKiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKG1faWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5p
bkl0ZXJhdGlvbigpKQotICAgICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5
bnRheEVycm9yLCAiSW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIik7Ci0gICAgaWYgKCFtX2lk
ZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+c2VlbkxhYmVscygpLmNvbnRhaW5zKG1faWRlbnQpKQot
ICAgICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiTGFi
ZWwgJXMgbm90IGZvdW5kLiIsIG1faWRlbnQpOwotICAgIHJldHVybiBleGVjLT5zZXRDb250aW51
ZUNvbXBsZXRpb24oJm1faWRlbnQpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gQnJlYWtOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAv
LyBFQ01BIDEyLjgKQEAgLTUzNzgsOCArMTQzMSw3IEBAIFJlZ2lzdGVySUQqIEJyZWFrTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmUKICAgICBpZiAoIXRhcmdldENvbnRleHQpIHsKICAgICAgICAgaWYg
KG1faWRlbnQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdl
bmVyYXRvciwgU3ludGF4RXJyb3IsICJJbnZhbGlkIGJyZWFrIHN0YXRlbWVudC4iKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRvciwgU3lu
dGF4RXJyb3IsICJMYWJlbCAlcyBub3QgZm91bmQuIiwgbV9pZGVudCk7CisgICAgICAgIHJldHVy
biBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5bnRheEVycm9yLCAiTGFiZWwgJXMgbm90IGZv
dW5kLiIsIG1faWRlbnQpOwogICAgIH0KIAogICAgIEFTU0VSVCh0YXJnZXRDb250ZXh0LT5icmVh
a1RhcmdldCk7CkBAIC01Mzg5LDE1ICsxNDQxLDYgQEAgUmVnaXN0ZXJJRCogQnJlYWtOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZQogICAgIHJldHVybiBkc3Q7CiB9CiAKLUpTVmFsdWUqIEJyZWFrTm9k
ZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAobV9p
ZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPmluSXRlcmF0aW9uKCkgJiYgIWV4ZWMtPmluU3dpdGNo
KCkpCi0gICAgICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3Is
ICJJbnZhbGlkIGJyZWFrIHN0YXRlbWVudC4iKTsKLSAgICBpZiAoIW1faWRlbnQuaXNFbXB0eSgp
ICYmICFleGVjLT5zZWVuTGFiZWxzKCkuY29udGFpbnMobV9pZGVudCkpCi0gICAgICAgIHJldHVy
biBzZXRFcnJvckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJMYWJlbCAlcyBub3QgZm91
bmQuIik7Ci0gICAgcmV0dXJuIGV4ZWMtPnNldEJyZWFrQ29tcGxldGlvbigmbV9pZGVudCk7Ci19
Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXR1cm5Ob2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTQx
NSwyOCArMTQ1OCw2IEBAIFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRDb2RlKENvZGVHZW4K
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRSZXR1cm4ocjApOwogfQogCi12b2lkIFJldHVybk5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNr
KQotewotICAgIGlmIChtX3ZhbHVlKQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fdmFsdWUu
Z2V0KCkpOwotfQotCi0vLyBFQ01BIDEyLjkKLUpTVmFsdWUqIFJldHVybk5vZGU6OmV4ZWN1dGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQ29kZVR5cGUgY29kZVR5cGUg
PSBleGVjLT5jb2RlVHlwZSgpOwotICAgIGlmIChjb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0g
ICAgICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJJbnZh
bGlkIHJldHVybiBzdGF0ZW1lbnQuIik7Ci0KLSAgICBpZiAoIW1fdmFsdWUpCi0gICAgICAgIHJl
dHVybiBleGVjLT5zZXRSZXR1cm5WYWx1ZUNvbXBsZXRpb24oanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICBKU1ZhbHVlKiB2ID0gbV92YWx1ZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgS0pTX0NIRUNLRVhD
RVBUSU9OCi0KLSAgICByZXR1cm4gZXhlYy0+c2V0UmV0dXJuVmFsdWVDb21wbGV0aW9uKHYpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2l0aE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC01NDQ4
LDUyICsxNDY5LDYgQEAgUmVnaXN0ZXJJRCogV2l0aE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2l0aE5vZGU6Om9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIC8vIENhbid0IG9w
dGltaXplIHdpdGhpbiBzdGF0ZW1lbnQgYmVjYXVzZSAid2l0aCIgaW50cm9kdWNlcyBhIGR5bmFt
aWMgc2NvcGUuCi0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2V4cHIuZ2V0KCkpOwotfQotCi0vLyBF
Q01BIDEyLjEwCi1KU1ZhbHVlKiBXaXRoTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQ2xhdXNlTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgQ2FzZUNsYXVzZU5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIGlm
IChtX2V4cHIpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9leHByLmdldCgpKTsKLSAgICBz
dGF0ZW1lbnRMaXN0UHVzaEZJRk8obV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKLX0KLQotLy8gRUNN
QSAxMi4xMQotSlNWYWx1ZSogQ2FzZUNsYXVzZU5vZGU6OmV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIHYgPSBtX2V4cHItPmV2YWx1YXRlKGV4
ZWMpOwotICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0KLSAgICByZXR1cm4gdjsKLX0KLQot
Ly8gRUNNQSAxMi4xMQotSlNWYWx1ZSogQ2FzZUNsYXVzZU5vZGU6OmV4ZWN1dGVTdGF0ZW1lbnRz
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBzdGF0ZW1lbnRM
aXN0RXhlY3V0ZShtX2NoaWxkcmVuLCBleGVjKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIENsYXVzZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotdm9pZCBDbGF1c2VMaXN0Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgaWYgKG1fbmV4dCkKLSAgICAgICAgbm9k
ZVN0YWNrLmFwcGVuZChtX25leHQuZ2V0KCkpOwotICAgIG5vZGVTdGFjay5hcHBlbmQobV9jbGF1
c2UuZ2V0KCkpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2FzZUJs
b2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBD
YXNlQmxvY2tOb2RlOjplbWl0Q29kZUZvckJsb2NrKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogc3dpdGNoRXhwcmVzc2lvbiwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTU0NCw3
NCArMTUxOSw2IEBAIFJlZ2lzdGVySUQqIENhc2VCbG9ja05vZGU6OmVtaXRDb2RlRm9yQmwKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENhc2VCbG9ja05vZGU6Om9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNv
bnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQotewotICAgIGlmIChtX2xp
c3QyKQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fbGlzdDIuZ2V0KCkpOwotICAgIGlmICht
X2RlZmF1bHRDbGF1c2UpCi0gICAgICAgIG5vZGVTdGFjay5hcHBlbmQobV9kZWZhdWx0Q2xhdXNl
LmdldCgpKTsKLSAgICBpZiAobV9saXN0MSkKLSAgICAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2xp
c3QxLmdldCgpKTsKLX0KLQotLy8gRUNNQSAxMi4xMQotSlNWYWx1ZSogQ2FzZUJsb2NrTm9kZTo6
ZXhlY3V0ZUJsb2NrKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBpbnB1
dCkKLXsKLSAgICBDbGF1c2VMaXN0Tm9kZSogYSA9IG1fbGlzdDEuZ2V0KCk7Ci0gICAgd2hpbGUg
KGEpIHsKLSAgICAgICAgQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSA9IGEtPmdldENsYXVzZSgpOwot
ICAgICAgICBhID0gYS0+Z2V0TmV4dCgpOwotICAgICAgICBKU1ZhbHVlKiB2ID0gY2xhdXNlLT5l
dmFsdWF0ZShleGVjKTsKLSAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gICAgICAgIGlmIChz
dHJpY3RFcXVhbChpbnB1dCwgdikpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlcyA9IGNsYXVz
ZS0+ZXhlY3V0ZVN0YXRlbWVudHMoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxl
dGlvblR5cGUoKSAhPSBOb3JtYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAg
ICAgICAgIGZvciAoOyBhOyBhID0gYS0+Z2V0TmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSogcmVzID0gYS0+Z2V0Q2xhdXNlKCktPmV4ZWN1dGVTdGF0ZW1lbnRzKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ2xhdXNlTGlzdE5vZGUqIGIgPSBtX2xpc3Qy
LmdldCgpOwotICAgIHdoaWxlIChiKSB7Ci0gICAgICAgIENhc2VDbGF1c2VOb2RlKiBjbGF1c2Ug
PSBiLT5nZXRDbGF1c2UoKTsKLSAgICAgICAgYiA9IGItPmdldE5leHQoKTsKLSAgICAgICAgSlNW
YWx1ZSogdiA9IGNsYXVzZS0+ZXZhbHVhdGUoZXhlYyk7Ci0gICAgICAgIEtKU19DSEVDS0VYQ0VQ
VElPTgotICAgICAgICBpZiAoc3RyaWN0RXF1YWwoaW5wdXQsIHYpKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiByZXMgPSBjbGF1c2UtPmV4ZWN1dGVTdGF0ZW1lbnRzKGV4ZWMpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKQotICAgICAgICAgICAgICAg
IHJldHVybiByZXM7Ci0gICAgICAgICAgICBnb3RvIHN0ZXAxODsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIGRlZmF1bHQgY2xhdXNlCi0gICAgaWYgKG1fZGVmYXVsdENsYXVzZSkgewotICAg
ICAgICBKU1ZhbHVlKiByZXMgPSBtX2RlZmF1bHRDbGF1c2UtPmV4ZWN1dGVTdGF0ZW1lbnRzKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBiID0gbV9saXN0Mi5nZXQoKTsKLXN0ZXAx
ODoKLSAgICB3aGlsZSAoYikgewotICAgICAgICBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlID0gYi0+
Z2V0Q2xhdXNlKCk7Ci0gICAgICAgIEpTVmFsdWUqIHJlcyA9IGNsYXVzZS0+ZXhlY3V0ZVN0YXRl
bWVudHMoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1h
bCkKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIGIgPSBiLT5nZXROZXh0KCk7Ci0g
ICAgfQotCi0gICAgLy8gYmFpbCBvdXQgb24gZXJyb3IKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT04K
LQotICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTd2l0Y2hOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIFN3aXRjaE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNTYyOCwyOCArMTUzNSw4
IEBAIFJlZ2lzdGVySUQqIFN3aXRjaE5vZGU6OmVtaXRDb2RlKENvZGVHZW4KICAgICByZXR1cm4g
cjE7CiB9CiAKLXZvaWQgU3dpdGNoTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChtX2Jsb2Nr
LmdldCgpKTsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVD
TUEgMTIuMTEKLUpTVmFsdWUqIFN3aXRjaE5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSogdiA9IG1fZXhwci0+ZXZhbHVhdGUoZXhlYyk7
Ci0gICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0KLSAgICBleGVjLT5wdXNoU3dpdGNoKCk7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0ID0gbV9ibG9jay0+ZXhlY3V0ZUJsb2NrKGV4ZWMsIHYpOwotICAgIGV4
ZWMtPnBvcFN3aXRjaCgpOwotCi0gICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gQnJl
YWsgJiYgbV9sYWJlbFN0YWNrLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgp
KSkKLSAgICAgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGFiZWxOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBSZWdpc3RlcklEKiBMYWJl
bE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewogICAgIGlmIChnZW5lcmF0b3IuanVtcENvbnRleHRGb3JCcmVhayhtX2xhYmVsKSkKQEAg
LTU2NjgsMjQgKzE1NTUsNiBAQCBSZWdpc3RlcklEKiBMYWJlbE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lCiAgICAgcmV0dXJuIHIwOwogfQogCi12b2lkIExhYmVsTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNr
LmFwcGVuZChtX3N0YXRlbWVudC5nZXQoKSk7Ci19Ci0KLS8vIEVDTUEgMTIuMTIKLUpTVmFsdWUq
IExhYmVsTm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBpZiAoIWV4ZWMtPnNlZW5MYWJlbHMoKS5wdXNoKG1fbGFiZWwpKQotICAgICAgICByZXR1cm4g
c2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiRHVwbGljYXRlZCBsYWJlbCAl
cyBmb3VuZC4iLCBtX2xhYmVsKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX3N0YXRlbWVudC0+
ZXhlY3V0ZShleGVjKTsKLSAgICBleGVjLT5zZWVuTGFiZWxzKCkucG9wKCk7Ci0KLSAgICBpZiAo
ZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBCcmVhayAmJiBleGVjLT5icmVha09yQ29udGludWVU
YXJnZXQoKSA9PSBtX2xhYmVsKQotICAgICAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShOb3Jt
YWwpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBUaHJvd05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IFJlZ2lzdGVySUQqIFRocm93Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCkBAIC01Njk0LDIxICsxNTYzLDYgQEAgUmVnaXN0ZXJJRCogVGhy
b3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZvaWQgVGhy
b3dOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVT
dGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKG1fZXhwci5nZXQoKSk7Ci19Ci0KLS8vIEVD
TUEgMTIuMTMKLUpTVmFsdWUqIFRocm93Tm9kZTo6ZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlKiB2ID0gbV9leHByLT5ldmFsdWF0ZShleGVjKTsK
LSAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLQotICAgIGhhbmRsZUV4Y2VwdGlvbihleGVjLCB2KTsK
LSAgICByZXR1cm4gZXhlYy0+c2V0VGhyb3dDb21wbGV0aW9uKHYpOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJ5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTU3NjIsMjEgKzE2MTYsNiBAQCBS
ZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhCiB9CiAKIAotdm9pZCBUcnlO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFj
aykKLXsKLSAgICAvLyBDYW4ndCBvcHRpbWl6ZSB3aXRoaW4gY2F0Y2hCbG9jayBiZWNhdXNlICJj
YXRjaCIgaW50cm9kdWNlcyBhIGR5bmFtaWMgc2NvcGUuCi0gICAgaWYgKG1fZmluYWxseUJsb2Nr
KQotICAgICAgICBub2RlU3RhY2suYXBwZW5kKG1fZmluYWxseUJsb2NrLmdldCgpKTsKLSAgICBu
b2RlU3RhY2suYXBwZW5kKG1fdHJ5QmxvY2suZ2V0KCkpOwotfQotCi0vLyBFQ01BIDEyLjE0Ci1K
U1ZhbHVlKiBUcnlOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQm9keU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogU2NvcGVOb2RlOjpTY29wZU5vZGUoU291cmNlRWxlbWVudHMqIGNoaWxk
cmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgYm9vbCB1
c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpCkBAIC01ODg3LDcgKzE3MjYsNyBAQCBSZWdpc3Rl
cklEKiBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Q29kZShDCiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soRGlkRW50ZXJDYWxsRnJhbWUsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKICAg
ICBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9jaGlsZHJlbiwgZ2VuZXJhdG9yKTsKLSAgICBpZiAo
IW1fY2hpbGRyZW4uc2l6ZSgpIHx8ICFtX2NoaWxkcmVuLmxhc3QoKS0+aXNSZXR1cm5Ob2RlKCkp
IHsKKyAgICBpZiAoIW1fY2hpbGRyZW4uc2l6ZSgpIHx8ICFtX2NoaWxkcmVuLmxhc3QoKS0+aXNS
ZXR1cm5TdGF0ZW1lbnQoKSkgewogICAgICAgICBSZWdpc3RlcklEKiByMCA9IGdlbmVyYXRvci5l
bWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1cm4ocjApOwpAQCAtNTkx
OCwxNTcgKzE3NTcsNiBAQCB2b2lkIFByb2dyYW1Ob2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFp
CiAgICAgbV9jaGlsZHJlbi5zaHJpbmtDYXBhY2l0eSgwKTsKIH0KIAotdm9pZCBQcm9ncmFtTm9k
ZTo6aW5pdGlhbGl6ZVN5bWJvbFRhYmxlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIC8vIElmIGEgcHJldmlvdXMgc2NyaXB0IGRlZmluZWQgYSBzeW1ib2wgd2l0aCB0aGUg
c2FtZSBuYW1lIGFzIG9uZSBvZiBvdXIKLSAgICAvLyBzeW1ib2xzLCB0byBhdm9pZCBicmVha2lu
ZyBwcmV2aW91c2x5IG9wdGltaXplZCBub2Rlcywgd2UgbmVlZCB0byByZXVzZQotICAgIC8vIHRo
ZSBzeW1ib2wncyBleGlzdGluZyBzdG9yYWdlIGluZGV4LiBTbywgd2UgY2FuJ3QgYmUgYXMgZWZm
aWNpZW50IGFzCi0gICAgLy8gRnVuY3Rpb25Cb2R5Tm9kZTo6aW5pdGlhbGl6ZVN5bWJvbFRhYmxl
LCB3aGljaCBrbm93cyB0aGF0IG5vIGJpbmRpbmdzCi0gICAgLy8gaGF2ZSB5ZXQgYmVlbiBtYWRl
LgotCi0gICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QgPSBleGVjLT52YXJpYWJs
ZU9iamVjdCgpOwotICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHZhcmlhYmxlT2JqZWN0
LT5zeW1ib2xUYWJsZSgpOwotCi0gICAgc2l6ZV90IGxvY2FsU3RvcmFnZUluZGV4ID0gc3ltYm9s
VGFibGUuc2l6ZSgpOwotICAgIHNpemVfdCBzaXplOwotCi0gICAgLy8gT3JkZXIgbXVzdCBtYXRj
aCB0aGUgb3JkZXIgaW4gcHJvY2Vzc0RlY2xhcmF0aW9ucy4KLQotICAgIHNpemUgPSBtX2Z1bmN0
aW9uU3RhY2suc2l6ZSgpOwotICAgIG1fZnVuY3Rpb25JbmRleGVzLnJlc2l6ZShzaXplKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBVU3RyaW5nOjpS
ZXAqIHJlcCA9IG1fZnVuY3Rpb25TdGFja1tpXS0+bV9pZGVudC51c3RyaW5nKCkucmVwKCk7Ci0g
ICAgICAgIHBhaXI8U3ltYm9sVGFibGU6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBzeW1ib2xU
YWJsZS5hZGQocmVwLCBsb2NhbFN0b3JhZ2VJbmRleCk7Ci0gICAgICAgIG1fZnVuY3Rpb25JbmRl
eGVzW2ldID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQuZ2V0SW5kZXgoKTsKLSAgICAgICAgaWYgKHJl
c3VsdC5zZWNvbmQpCi0gICAgICAgICAgICArK2xvY2FsU3RvcmFnZUluZGV4OwotICAgIH0KLQot
ICAgIHNpemUgPSBtX3ZhclN0YWNrLnNpemUoKTsKLSAgICBtX3ZhckluZGV4ZXMucmVzaXplKHNp
emUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gbV92YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAgaWYg
KHZhcmlhYmxlT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsKLSAgICAgICAgICAg
IG1fdmFySW5kZXhlc1tpXSA9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKTsgLy8gU2lnbmFsIG5vdCB0
byBpbml0aWFsaXplIHRoaXMgZGVjbGFyYXRpb24uCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVTdHJpbmc6OlJlcCogcmVwID0gaWRlbnQudXN0cmluZygpLnJl
cCgpOwotICAgICAgICBwYWlyPFN5bWJvbFRhYmxlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
c3ltYm9sVGFibGUuYWRkKHJlcCwgbG9jYWxTdG9yYWdlSW5kZXgpOwotICAgICAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpIHsKLSAgICAgICAgICAgIG1fdmFySW5kZXhlc1tpXSA9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKTsgLy8gU2lnbmFsIG5vdCB0byBpbml0aWFsaXplIHRoaXMgZGVjbGFyYXRpb24u
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fdmFySW5kZXhl
c1tpXSA9IHJlc3VsdC5maXJzdC0+c2Vjb25kLmdldEluZGV4KCk7Ci0gICAgICAgICsrbG9jYWxT
dG9yYWdlSW5kZXg7Ci0gICAgfQotfQotCi12b2lkIFNjb3BlTm9kZTo6b3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBOb2RlU3RhY2sg
bm9kZVN0YWNrOwotICAgIE5vZGUqIG5vZGUgPSBzdGF0ZW1lbnRMaXN0SW5pdGlhbGl6ZVZhcmlh
YmxlQWNjZXNzU3RhY2sobV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IGV4
ZWMtPnZhcmlhYmxlT2JqZWN0KCktPnN5bWJvbFRhYmxlKCk7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgY29uc3QgTG9jYWxTdG9yYWdlIGxvY2FsU3RvcmFnZTsKLSAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICBub2RlLT5vcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKGV4ZWMsIHN5bWJv
bFRhYmxlLCBsb2NhbFN0b3JhZ2UsIG5vZGVTdGFjayk7Ci0KLSAgICAgICAgc2l6ZV90IHNpemUg
PSBub2RlU3RhY2suc2l6ZSgpOwotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgLS1zaXplOwotICAgICAgICBub2RlID0gbm9kZVN0YWNrW3NpemVdOwotICAg
ICAgICBub2RlU3RhY2suc2hyaW5rKHNpemUpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZ2Nj
SXNDcmF6eSgpIEtKU19GQVNUX0NBTEw7Ci1zdGF0aWMgdm9pZCBnY2NJc0NyYXp5KCkKLXsKLX0K
LQotdm9pZCBQcm9ncmFtTm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW9ucyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBJZiB5b3UgcmVtb3ZlIHRoaXMgY2FsbCwgc29tZSBT
dW5TcGlkZXIgdGVzdHMsIGluY2x1ZGluZwotICAgIC8vIGJpdG9wcy1uc2lldmUtYml0cy5qcywg
d2lsbCByZWdyZXNzIHN1YnN0YW50aWFsbHkgb24gTWFjLCBkdWUgdG8gYSB+NDAlCi0gICAgLy8g
aW5jcmVhc2UgaW4gTDIgY2FjaGUgbWlzc2VzLiBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzU2NTc0
Mzk+IFdURj8KLSAgICBnY2NJc0NyYXp5KCk7Ci0KLSAgICBpbml0aWFsaXplU3ltYm9sVGFibGUo
ZXhlYyk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBMb2NhbFN0b3JhZ2UgbG9j
YWxTdG9yYWdlOwotCi0gICAgLy8gV2UgY2FuJ3QganVzdCByZXNpemUgbG9jYWxTdG9yYWdlIGhl
cmUgYmVjYXVzZSB0aGF0IHdvdWxkIHRlbXBvcmFyaWx5Ci0gICAgLy8gbGVhdmUgdW5pbml0aWFs
aXplZCBlbnRyaWVzLCB3aGljaCB3b3VsZCBjcmFzaCBHQyBkdXJpbmcgdGhlIG1hcmsgcGhhc2Uu
Ci0gICAgbG9jYWxTdG9yYWdlLnJlc2VydmVDYXBhY2l0eShsb2NhbFN0b3JhZ2Uuc2l6ZSgpICsg
bV92YXJTdGFjay5zaXplKCkgKyBtX2Z1bmN0aW9uU3RhY2suc2l6ZSgpKTsKLQotICAgIGludCBt
aW5BdHRyaWJ1dGVzID0gRG9udERlbGV0ZTsKLQotICAgIC8vIEluIG9yZGVyIGZvciBvdXIgbG9j
YWxTdG9yYWdlIGluZGV4ZXMgdG8gYmUgY29ycmVjdCwgd2UgbXVzdCBtYXRjaCB0aGUKLSAgICAv
LyBvcmRlciBvZiBhZGRpdGlvbiBpbiBpbml0aWFsaXplU3ltYm9sVGFibGUoKS4KLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbV9mdW5jdGlvblN0YWNrLnNpemUoKTsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBGdW5jRGVjbE5vZGUqIG5vZGUgPSBtX2Z1bmN0aW9uU3RhY2tbaV07
Ci0gICAgICAgIExvY2FsU3RvcmFnZUVudHJ5IGVudHJ5ID0gTG9jYWxTdG9yYWdlRW50cnkobm9k
ZS0+bWFrZUZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKS5ub2RlKCkpLCBtaW5BdHRy
aWJ1dGVzKTsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9mdW5jdGlvbkluZGV4ZXNbaV07Ci0K
LSAgICAgICAgaWYgKGluZGV4ID09IGxvY2FsU3RvcmFnZS5zaXplKCkpCi0gICAgICAgICAgICBs
b2NhbFN0b3JhZ2UudW5jaGVja2VkQXBwZW5kKGVudHJ5KTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPCBsb2NhbFN0b3JhZ2Uuc2l6ZSgpKTsKLSAgICAgICAgICAg
IGxvY2FsU3RvcmFnZVtpbmRleF0gPSBlbnRyeTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbV92YXJTdGFjay5zaXplKCk7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgaW50IGluZGV4ID0gbV92YXJJbmRleGVzW2ldOwotICAgICAgICBpZiAoaW5k
ZXggPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaW50IGF0dHJpYnV0ZXMgPSBtaW5BdHRyaWJ1dGVzOwotICAgICAgICBpZiAobV92YXJT
dGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7Ci0gICAgICAgIExvY2FsU3RvcmFnZUVudHJ5IGVu
dHJ5ID0gTG9jYWxTdG9yYWdlRW50cnkoanNVbmRlZmluZWQoKSwgYXR0cmlidXRlcyk7Ci0KLSAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPT0gbG9jYWxTdG9yYWdl
LnNpemUoKSk7Ci0gICAgICAgIGxvY2FsU3RvcmFnZS51bmNoZWNrZWRBcHBlbmQoZW50cnkpOwot
ICAgIH0KLQotICAgIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoZXhlYyk7Ci19Ci0KLXZvaWQgRXZh
bE5vZGU6OnByb2Nlc3NEZWNsYXJhdGlvbnMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgLy8gV2UgY291bGQgb3B0aW1pemUgYWNjZXNzIHRvIHByZS1leGlzdGluZyBzeW1i
b2xzIGhlcmUsIGJ1dCBTdW5TcGlkZXIKLSAgICAvLyByZXBvcnRzIHRoYXQgdG8gYmUgYSBuZXQg
bG9zcy4KLQotICAgIHNpemVfdCBpOwotICAgIHNpemVfdCBzaXplOwotCi0gICAgSlNWYXJpYWJs
ZU9iamVjdCogdmFyaWFibGVPYmplY3QgPSBleGVjLT52YXJpYWJsZU9iamVjdCgpOwotCi0gICAg
Zm9yIChpID0gMCwgc2l6ZSA9IG1fdmFyU3RhY2suc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gbV92YXJTdGFja1tpXS5maXJzdDsKLSAgICAgICAg
aWYgKHZhcmlhYmxlT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaW50IGF0dHJpYnV0ZXMgPSAwOwotICAgICAgICBpZiAobV92
YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkKLSAgICAg
ICAgICAgIGF0dHJpYnV0ZXMgPSBSZWFkT25seTsKLSAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1
dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIGlkZW50LCBqc1VuZGVmaW5lZCgpLCBhdHRyaWJ1dGVzKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwLCBzaXplID0gbV9mdW5jdGlvblN0YWNrLnNpemUoKTsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1bmNEZWNsID0gbV9mdW5j
dGlvblN0YWNrW2ldOwotICAgICAgICB2YXJpYWJsZU9iamVjdC0+cHV0V2l0aEF0dHJpYnV0ZXMo
ZXhlYywgZnVuY0RlY2wtPm1faWRlbnQsIGZ1bmNEZWNsLT5tYWtlRnVuY3Rpb24oZXhlYywgZXhl
Yy0+c2NvcGVDaGFpbigpLm5vZGUoKSksIDApOwotICAgIH0KLX0KLQogVVN0cmluZyBGdW5jdGlv
bkJvZHlOb2RlOjpwYXJhbVN0cmluZygpIGNvbnN0CiB7CiAgICAgVVN0cmluZyBzKCIiKTsKQEAg
LTYwODIsMzIgKzE3NzAsNiBAQCBVU3RyaW5nIEZ1bmN0aW9uQm9keU5vZGU6OnBhcmFtU3RyaW5n
KCkgCiAgICAgcmV0dXJuIHM7CiB9CiAKLUpTVmFsdWUqIFByb2dyYW1Ob2RlOjpleGVjdXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAgIHByb2Nlc3NEZWNsYXJhdGlvbnMo
ZXhlYyk7Ci0gICAgcmV0dXJuIFNjb3BlTm9kZTo6ZXhlY3V0ZShleGVjKTsKLX0KLQotSlNWYWx1
ZSogRXZhbE5vZGU6OmV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcHJvY2Vzc0RlY2xhcmF0aW9ucyhleGVjKTsKLSAgICByZXR1cm4gU2NvcGVOb2RlOjpleGVj
dXRlKGV4ZWMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rp
b25Cb2R5Tm9kZVdpdGhEZWJ1Z2dlckhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1GdW5jdGlvbkJvZHlOb2RlV2l0aERlYnVnZ2VySG9va3M6OkZ1bmN0aW9uQm9keU5v
ZGVXaXRoRGVidWdnZXJIb29rcyhTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIERlY2xhcmF0aW9u
U3RhY2tzOjpWYXJTdGFjayogdmFyU3RhY2ssIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlKQotICAgIDog
RnVuY3Rpb25Cb2R5Tm9kZShjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgdXNlc0V2YWws
IG5lZWRzQ2xvc3VyZSkKLXsKLX0KLQotSlNWYWx1ZSogRnVuY3Rpb25Cb2R5Tm9kZVdpdGhEZWJ1
Z2dlckhvb2tzOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVjKQotewotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IEZ1bmN0aW9uQm9keU5vZGU6OmV4ZWN1dGUoZXhlYyk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY0RlY2xOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIEZ1
bmNEZWNsTm9kZTo6YWRkUGFyYW1zKCkKQEAgLTYxMzIsMTEgKzE3OTQsNiBAQCBSZWdpc3RlcklE
KiBGdW5jRGVjbE5vZGU6OmVtaXRDb2RlKENvZGVHCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotSlNW
YWx1ZSogRnVuY0RlY2xOb2RlOjpleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7Ci19Ci0KIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jRXhwck5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEZ1bmNFeHByTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC02MTc1LDMyICsx
ODMyLDQgQEAgdm9pZCBGdW5jRXhwck5vZGU6OmFkZFBhcmFtcygpCiAgICAgICAgIG1fYm9keS0+
cGFyYW1ldGVycygpLmFwcGVuZChwLT5pZGVudCgpKTsKIH0KIAotSlNWYWx1ZSogRnVuY0V4cHJO
b2RlOjpldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGJvb2wgbmFtZWQgPSAhbV9pZGVudC5pc051bGwoKTsK
LSAgICBKU09iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IDA7Ci0KLSAgICBpZiAobmFtZWQp
IHsKLSAgICAgICAgLy8gbmFtZWQgRnVuY3Rpb25FeHByZXNzaW9ucyBjYW4gcmVjdXJzaXZlbHkg
Y2FsbCB0aGVtc2VsdmVzLAotICAgICAgICAvLyBidXQgdGhleSB3b24ndCByZWdpc3RlciB3aXRo
IHRoZSBjdXJyZW50IHNjb3BlIGNoYWluIGFuZCBzaG91bGQKLSAgICAgICAgLy8gYmUgY29udGFp
bmVkIGFzIHNpbmdsZSBwcm9wZXJ0eSBpbiBhbiBhbm9ueW1vdXMgb2JqZWN0LgotICAgICAgICBm
dW5jdGlvblNjb3BlT2JqZWN0ID0gbmV3IEpTT2JqZWN0OwotICAgICAgICBleGVjLT5wdXNoU2Nv
cGUoZnVuY3Rpb25TY29wZU9iamVjdCk7Ci0gICAgfQotCi0gICAgRnVuY3Rpb25JbXAqIGZ1bmMg
PSBuZXcgRnVuY3Rpb25JbXAoZXhlYywgbV9pZGVudCwgbV9ib2R5LmdldCgpLCBleGVjLT5zY29w
ZUNoYWluKCkubm9kZSgpKTsKLSAgICBKU09iamVjdCogcHJvdG8gPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm9iamVjdENvbnN0cnVjdG9yKCktPmNvbnN0cnVjdChleGVjLCBleGVjLT5l
bXB0eUxpc3QoKSk7Ci0gICAgcHJvdG8tPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIGZ1bmMsIERvbnRFbnVtKTsKLSAgICBmdW5jLT5wdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG8sIERvbnREZWxldGUpOwotCi0gICAgaWYg
KG5hbWVkKSB7Ci0gICAgICAgIGZ1bmN0aW9uU2NvcGVPYmplY3QtPnB1dERpcmVjdChtX2lkZW50
LCBmdW5jLCBSZWFkT25seSB8IChleGVjLT5jb2RlVHlwZSgpID09IEV2YWxDb2RlID8gMCA6IERv
bnREZWxldGUpKTsKLSAgICAgICAgZXhlYy0+cG9wU2NvcGUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZnVuYzsKLX0KLQogfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkocmV2
aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTUgKzI2LDE2IEBACiAjaWZuZGVmIE5PREVTX0hfCiAjZGVmaW5lIE5PREVTX0hf
CiAKLSNpbmNsdWRlICJpbnRlcm5hbC5oIgotI2luY2x1ZGUgInJlZ2V4cC5oIgorI2luY2x1ZGUg
IkxhYmVsU3RhY2suaCIKICNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVkZSAiU291cmNl
UmFuZ2UuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnZXhwLmgiCiAjaW5j
bHVkZSA8d3RmL0xpc3RSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShYODYpICYmIENPTVBJTEVSKEdDQykK
QEAgLTQ1LDE2ICs0NiwxNSBAQAogCiBuYW1lc3BhY2UgS0pTIHsKIAotICAgIGNsYXNzIEFyZ3Vt
ZW50c05vZGU7CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIENvZGVHZW5lcmF0b3I7
CiAgICAgY2xhc3MgQ29uc3REZWNsTm9kZTsKKyAgICBjbGFzcyBFdmFsQ29kZUJsb2NrOwogICAg
IGNsYXNzIEZ1bmNEZWNsTm9kZTsKKyAgICBjbGFzcyBGdW5jdGlvbkltcDsKICAgICBjbGFzcyBO
b2RlOwotICAgIGNsYXNzIEV2YWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9j
azsKICAgICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwotICAgIGNsYXNzIFNvdXJjZVN0cmVhbTsK
IAogICAgIGVudW0gT3BlcmF0b3IgewogICAgICAgICBPcEVxdWFsLApAQCAtNzMsMjggKzczLDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIE9wVVJTaGlmdCwKICAgICB9OwogCi0gICAgZW51
bSBQcmVjZWRlbmNlIHsKLSAgICAgICAgUHJlY1ByaW1hcnksCi0gICAgICAgIFByZWNNZW1iZXIs
Ci0gICAgICAgIFByZWNDYWxsLAotICAgICAgICBQcmVjTGVmdEhhbmRTaWRlLAotICAgICAgICBQ
cmVjUG9zdGZpeCwKLSAgICAgICAgUHJlY1VuYXJ5LAotICAgICAgICBQcmVjTXVsdGlwbGljaXRh
dmUsCi0gICAgICAgIFByZWNBZGRpdGl2ZSwKLSAgICAgICAgUHJlY1NoaWZ0LAotICAgICAgICBQ
cmVjUmVsYXRpb25hbCwKLSAgICAgICAgUHJlY0VxdWFsaXR5LAotICAgICAgICBQcmVjQml0d2lz
ZUFuZCwKLSAgICAgICAgUHJlY0JpdHdpc2VYb3IsCi0gICAgICAgIFByZWNCaXR3aXNlT3IsCi0g
ICAgICAgIFByZWNMb2dpY2FsQW5kLAotICAgICAgICBQcmVjTG9naWNhbE9yLAotICAgICAgICBQ
cmVjQ29uZGl0aW9uYWwsCi0gICAgICAgIFByZWNBc3NpZ25tZW50LAotICAgICAgICBQcmVjRXhw
cmVzc2lvbgotICAgIH07Ci0KICAgICBzdHJ1Y3QgRGVjbGFyYXRpb25TdGFja3MgewogICAgICAg
ICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMTY+IE5vZGVTdGFjazsKICAgICAgICAgZW51bSB7IElz
Q29uc3RhbnQgPSAxLCBIYXNJbml0aWFsaXplciA9IDIgfSBWYXJBdHRyczsKQEAgLTExOCw5ICs5
Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIFBhcnNlclJlZkNvdW50ZWQgOiBOb25j
b3B5YWJsZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBQYXJzZXJSZWZDb3VudGVkKCkgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgUGFyc2VyUmVmQ291bnRlZChQbGFjZW1lbnROZXdBZG9wdFR5
cGUpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgewotICAgICAgICB9CiAKICAgICBwdWJsaWM6CiAg
ICAgICAgIHZvaWQgcmVmKCkgS0pTX0ZBU1RfQ0FMTDsKQEAgLTEzOSwxMCArMTE0LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9u
U3RhY2sgRnVuY3Rpb25TdGFjazsKIAogICAgICAgICBOb2RlKCkgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgTm9kZShQbGFjZW1lbnROZXdBZG9wdFR5cGUgcGxhY2VtZW50QWRvcHQpIEtKU19GQVNU
X0NBTEwKLSAgICAgICAgICAgIDogUGFyc2VyUmVmQ291bnRlZChwbGFjZW1lbnRBZG9wdCkKLSAg
ICAgICAgewotICAgICAgICB9CiAKICAgICAgICAgLyoKICAgICAgICAgICAgIFJldHVybiB2YWx1
ZTogVGhlIHJlZ2lzdGVyIGhvbGRpbmcgdGhlIHByb2R1Y3Rpb24ncyB2YWx1ZS4KQEAgLTE2Niw2
OCArMTM3LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAgYmVjYXVzZSB0aGUgYXNz
aWdubWVudCBub2RlLCAieCA9IiwgcGFzc2VzIHJbeF0gYXMgZHN0IHRvIHRoZSBudW1iZXIKICAg
ICAgICAgICAgIG5vZGUsICIxIi4KICAgICAgICAgKi8KLSAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZHN0ID0gMCkgS0pTX0ZB
U1RfQ0FMTCAKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgwLCAi
RG9uJ3Qga25vdyBob3cgdG8gZ2VuZXJhdGUgY29kZSBmb3I6XG4lc1xuIiwgdG9TdHJpbmcoKS5h
c2NpaSgpKTsKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShkc3QpOyAKLSAgICAgICAgICAgIHJl
dHVybiAwOyAKLSAgICAgICAgfSAvLyBGSVhNRTogTWFrZSB0aGlzIHB1cmUgdmlydHVhbC4KKyAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogZHN0ID0gMCkgS0pTX0ZBU1RfQ0FMTCA9IDA7CiAKLSAgICAgICAgVVN0cmluZyB0b1N0
cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIGludCBsaW5lTm8oKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbGluZTsgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBp
c1JldHVybk5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICAgICAgLy8gU2VyaWFsaXphdGlvbi4KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEwgPSAwOwotICAgICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG5l
ZWRzUGFyZW5zSWZMZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIAot
ICAgICAgICAvLyBVc2VkIGZvciBpdGVyYXRpdmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0
aGUgbm9kZSB0cmVlLiBEb2VzIG5vdCBjcm9zcyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMIHsgfQotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBOb2Rl
KEpTVHlwZSkgS0pTX0ZBU1RfQ0FMTDsgLy8gdXNlZCBieSBFeHByZXNzaW9uTm9kZQotCi0gICAg
ICAgIC8vIGZvciB1c2UgaW4gZXhlY3V0ZSgpCi0gICAgICAgIEpTVmFsdWUqIHNldEVycm9yQ29t
cGxldGlvbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciog
bXNnKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICBKU1ZhbHVlKiBzZXRFcnJvckNvbXBsZXRpb24o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29u
c3QgSWRlbnRpZmllciYpIEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgLy8gZm9yIHVzZSBpbiBl
dmFsdWF0ZSgpCi0gICAgICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZykgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgSlNWYWx1ZSogdGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlw
ZSwgY29uc3QgY2hhciogbXNnLCBjb25zdCBjaGFyKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
SlNWYWx1ZSogdGhyb3dFcnJvcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIEVycm9yVHlwZSwg
Y29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiwgTm9kZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUs
IGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBFcnJvclR5
cGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSosIGNvbnN0IElkZW50aWZpZXImKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICBKU1ZhbHVlKiB0aHJvd0Vycm9yKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqLCBOb2RlKiwgTm9kZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIEpTVmFsdWUqIHRocm93RXJyb3IoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSosIE5vZGUq
LCBjb25zdCBJZGVudGlmaWVyJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgCi0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBFcnJvclR5cGUsIGNvbnN0
IGNoYXIqIG1zZyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0Vycm9yKENvZGVHZW5l
cmF0b3ImLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpOwot
Ci0gICAgICAgIEpTVmFsdWUqIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImKSBLSlNfRkFTVF9DQUxMOworICAgICAg
ICBzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdFRocm93RXJyb3IoQ29kZUdlbmVyYXRvciYsIEVycm9y
VHlwZSwgY29uc3QgY2hhciogbXNnKTsKKyAgICAgICAgc3RhdGljIFJlZ2lzdGVySUQqIGVtaXRU
aHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29u
c3QgSWRlbnRpZmllciYpOwogCi0gICAgICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdm9pZCBoYW5kbGVFeGNl
cHRpb24oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBKU1ZhbHVlKikgS0pTX0ZBU1RfQ0FMTDsK
LQotICAgICAgICAvLyBmb3IgdXNlIGluIGV4ZWN1dGUoKQotICAgICAgICBKU1ZhbHVlKiByZXRo
cm93RXhjZXB0aW9uKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQot
ICAgICAgICBpbnQgbV9saW5lIDogMjg7Ci0gICAgICAgIHVuc2lnbmVkIG1fZXhwZWN0ZWRSZXR1
cm5UeXBlIDogMzsgLy8gSlNUeXBlCisgICAgICAgIGludCBtX2xpbmU7CiAgICAgfTsKIAogICAg
IGNsYXNzIEV4cHJlc3Npb25Ob2RlIDogcHVibGljIE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRXhwcmVzc2lvbk5vZGUoKSBLSlNfRkFTVF9DQUxMIDogTm9kZSgpIHt9Ci0gICAgICAgIEV4
cHJlc3Npb25Ob2RlKEpTVHlwZSBleHBlY3RlZFJldHVybikgS0pTX0ZBU1RfQ0FMTAotICAgICAg
ICAgICAgOiBOb2RlKGV4cGVjdGVkUmV0dXJuKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTcGVjaWFsIGNvbnN0cnVjdG9yIGZvciBjYXNlcyB3aGVyZSB3ZSBvdmVyd3JpdGUg
YW4gb2JqZWN0IGluIHBsYWNlLgotICAgICAgICBFeHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdB
ZG9wdFR5cGUpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogTm9kZShQbGFjZW1lbnROZXdB
ZG9wdCkKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUoKSBLSlNfRkFTVF9DQUxMCiAgICAgICAgIHsK
ICAgICAgICAgfQogCkBAIC0yMzYsMzYgKzE1OSwxOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgdmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nvck5vZGUo
KSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0RvdEFjY2Vzc29yTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFs
c2U7IH0KLQotICAgICAgICBKU1R5cGUgZXhwZWN0ZWRSZXR1cm5UeXBlKCkgY29uc3QgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1R5cGU+KG1fZXhwZWN0ZWRSZXR1cm5UeXBl
KTsgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMID0gMDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZh
bHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRl
VG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIC8vIFVzZWQgdG8gb3B0aW1pemUgdGhvc2Ugbm9k
ZXMgdGhhdCBkbyBleHRyYSB3b3JrIHdoZW4gcmV0dXJuaW5nIGEgcmVzdWx0LCBldmVuIGlmIHRo
ZSByZXN1bHQgaGFzIG5vIHNlbWFudGljIHJlbGV2YW5jZQotICAgICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVGb3JVbm5lY2Vzc2FyeVJlc3VsdCgpIHsgfQotCi0gICAgICAgIC8vIFRoaXMgbmVl
ZHMgdG8gYmUgaW4gcHVibGljIGluIG9yZGVyIHRvIGNvbXBpbGUgdXNpbmcgR0NDIDMueCAKLSAg
ICAgICAgdHlwZWRlZiBlbnVtIHsgRXZhbE9wZXJhdG9yLCBGdW5jdGlvbkNhbGwgfSBDYWxsZXJU
eXBlOwotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdGVtcGxhdGUgPENhbGxlclR5cGUsIGJvb2w+
IGlubGluZSBKU1ZhbHVlKiByZXNvbHZlQW5kQ2FsbChPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgc2l6ZV90ID0gMCk7CiAgICAgfTsK
IAogICAgIGNsYXNzIFN0YXRlbWVudE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBTdGF0ZW1lbnROb2RlKCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdm9pZCBzZXRM
b2MoaW50IGxpbmUwLCBpbnQgbGluZTEpIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZvaWQgc2V0
TG9jKGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
aW50IGZpcnN0TGluZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbGluZU5vKCk7IH0K
ICAgICAgICAgaW50IGxhc3RMaW5lKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2xh
c3RMaW5lOyB9CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlICpleGVjKSBLSlNfRkFTVF9DQUxMID0gMDsKLQogICAgICAgICB2aXJ0dWFs
IHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxMIHsg
bV9sYWJlbFN0YWNrLnB1c2goaWRlbnQpOyB9Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHBy
ZXNzaW9uOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZXR1cm5TdGF0ZW1lbnQoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIExhYmVsU3RhY2sgbV9sYWJlbFN0YWNrOwpAQCAtMjc3
LDExOSArMTgyLDU2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIE51bGxOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE51bGxOb2RlKCkgS0pT
X0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShOdWxsVHlwZSkKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogICAgIH07CiAKICAgICBjbGFzcyBG
YWxzZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
RmFsc2VOb2RlKCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShC
b29sZWFuVHlwZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAgICAgfTsKIAogICAgIGNsYXNz
IFRydWVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFRydWVOb2RlKCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShC
b29sZWFuVHlwZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KLSAgICB9OwotCi0gICAgY2xhc3Mg
UGxhY2Vob2xkZXJUcnVlTm9kZSA6IHB1YmxpYyBUcnVlTm9kZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICAvLyBMaWtlIFRydWVOb2RlLCBidXQgZG9lcyBub3Qgc2VyaWFsaXplIGFzICJ0cnVlIi4K
LSAgICAgICAgUGxhY2Vob2xkZXJUcnVlTm9kZSgpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAg
IDogVHJ1ZU5vZGUoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB9Owog
CiAgICAgY2xhc3MgTnVtYmVyTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBOdW1iZXJOb2RlKGRvdWJsZSB2KSBLSlNfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpCi0gICAgICAgICAgICAsIG1fZG91Ymxl
KHYpCisgICAgICAgICAgICA6IG1fZG91YmxlKHYpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
aW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBzaWduYml0KG1fZG91
YmxlKSA/IFByZWNVbmFyeSA6IFByZWNQcmltYXJ5OyB9Ci0KICAgICAgICAgdmlydHVhbCBib29s
IGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAg
IGRvdWJsZSB2YWx1ZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9kb3VibGU7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGRvdWJsZSBkKSBLSlNfRkFTVF9DQUxMIHsg
bV9kb3VibGUgPSBkOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGRvdWJsZSBtX2RvdWJs
ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgSW1tZWRpYXRlTnVtYmVyTm9kZSA6IHB1YmxpYyBOdW1i
ZXJOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltbWVkaWF0ZU51bWJlck5vZGUoSlNWYWx1
ZSogdiwgZG91YmxlIGQpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogTnVtYmVyTm9kZShk
KQotICAgICAgICAgICAgLCBtX3ZhbHVlKHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCh2ID09IEpTSW1tZWRpYXRlOjpmcm9tKGQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoZG91YmxlIGQpIEtKU19GQVNUX0NBTEwg
eyBtX2RvdWJsZSA9IGQ7IG1fdmFsdWUgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsgQVNTRVJUKG1f
dmFsdWUpOyB9CisgICAgICAgIHZvaWQgc2V0VmFsdWUoZG91YmxlIGQpIEtKU19GQVNUX0NBTEwg
eyBtX2RvdWJsZSA9IGQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTVmFsdWUqIG1fdmFs
dWU7IC8vIFRoaXMgaXMgbmV2ZXIgYSBKU0NlbGwsIG9ubHkgSlNJbW1lZGlhdGUsIHRodXMgbm8g
UHJvdGVjdGVkUHRyCisgICAgICAgIGRvdWJsZSBtX2RvdWJsZTsKICAgICB9OwogCiAgICAgY2xh
c3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTdHJpbmdOb2RlKGNvbnN0IFVTdHJpbmcqIHYpIEtKU19GQVNUX0NBTEwKLSAgICAgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUoU3RyaW5nVHlwZSkKLSAgICAgICAgICAgICwgbV92YWx1ZSgq
dikKKyAgICAgICAgICAgIDogbV92YWx1ZSgqdikKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1h
cnk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFVTdHJpbmcgbV92YWx1ZTsKICAgICB9OwpA
QCAtNDAzLDEwICsyNDUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19G
QVNUX0NBTEw7CiAKLSAgICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQotCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPFJlZ0V4cD4gbV9yZWdFeHA7CiAgICAgfTsKQEAgLTQxOCwx
MCArMjU2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtK
U19GQVNUX0NBTEw7Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9
CiAgICAgfTsKIAogICAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2Rl
IHsKQEAgLTQzMSw5NyArMjY1LDE4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBTcGVjaWFsIGNvbnN0cnVjdG9yIGZvciBjYXNlcyB3aGVyZSB3
ZSBvdmVyd3JpdGUgYW4gb2JqZWN0IGluIHBsYWNlLgotICAgICAgICBSZXNvbHZlTm9kZShQbGFj
ZW1lbnROZXdBZG9wdFR5cGUpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lv
bk5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgICAgICAsIG1faWRlbnQoUGxhY2VtZW50
TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1i
ZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1h
cnk7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZlTm9k
ZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2lk
ZW50OyB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
aW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLSAgICAgICAgSWRlbnRp
ZmllciBtX2lkZW50OwotICAgICAgICBpbnQgbV9pbmRleDsgLy8gVXNlZCBieSBMb2NhbFZhckFj
Y2Vzc05vZGUgYW5kIFNjb3BlZFZhckFjY2Vzc05vZGUuCi0gICAgICAgIHNpemVfdCBtX3Njb3Bl
RGVwdGg7IC8vIFVzZWQgYnkgU2NvcGVkVmFyQWNjZXNzTm9kZQotICAgIH07Ci0KLSAgICBjbGFz
cyBMb2NhbFZhckFjY2Vzc05vZGUgOiBwdWJsaWMgUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgLy8gT3ZlcndyaXRlcyBhIFJlc29sdmVOb2RlIGluIHBsYWNlLgotICAgICAgICBM
b2NhbFZhckFjY2Vzc05vZGUoaW50IGkpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUmVz
b2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChpICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBl
dmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRl
VG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAg
fTsKLSAgICAKLSAgICBjbGFzcyBTY29wZWRWYXJBY2Nlc3NOb2RlIDogcHVibGljIFJlc29sdmVO
b2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIE92ZXJ3cml0ZXMgYSBSZXNvbHZlTm9kZSBp
biBwbGFjZS4KLSAgICAgICAgU2NvcGVkVmFyQWNjZXNzTm9kZShpbnQgaSwgc2l6ZV90IHNjb3Bl
RGVwdGgpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgOiBSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdB
ZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1h
cmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICAgICAgbV9zY29wZURl
cHRoID0gc2NvcGVEZXB0aDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVU
b0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUlu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotICAgIH07Ci0gICAgCi0gICAgY2xhc3MgTm9u
TG9jYWxWYXJBY2Nlc3NOb2RlIDogcHVibGljIFJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIC8vIE92ZXJ3cml0ZXMgYSBSZXNvbHZlTm9kZSBpbiBwbGFjZS4KLSAgICAgICAgTm9u
TG9jYWxWYXJBY2Nlc3NOb2RlKHNpemVfdCBzY29wZURlcHRoKSBLSlNfRkFTVF9DQUxMCi0gICAg
ICAgIDogUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChzY29wZURlcHRoICE9IDApOwotICAgICAgICAgICAgbV9zY29wZURlcHRoID0g
c2NvcGVEZXB0aDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xl
YW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZlTm9k
ZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIElkZW50
aWZpZXIgbV9pZGVudDsKICAgICB9OwogCi0gICAgY2xhc3MgRWxlbWVudE5vZGUgOiBwdWJsaWMg
Tm9kZSB7CisgICAgY2xhc3MgRWxlbWVudE5vZGUgOiBwdWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7
CiAgICAgcHVibGljOgogICAgICAgICBFbGVtZW50Tm9kZShpbnQgZWxpc2lvbiwgRXhwcmVzc2lv
bk5vZGUqIG5vZGUpIEtKU19GQVNUX0NBTEwKICAgICAgICAgICAgIDogbV9lbGlzaW9uKGVsaXNp
b24pCkBAIC01MzYsMTQgKzI5MSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAgbC0+
bV9uZXh0ID0gdGhpczsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHBy
ZXNzaW9uOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29u
c3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBQ
YXNzUmVmUHRyPEVsZW1lbnROb2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gbV9uZXh0LnJlbGVhc2UoKTsgfQogCi0gICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBBcnJheU5vZGU7CiAgICAgICAgIExpc3RSZWZQdHI8RWxlbWVudE5v
ZGU+IG1fbmV4dDsKQEAgLTU3NSwxOCArMzI0LDEzIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9Ci0KICAgICBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8RWxlbWVudE5vZGU+IG1fZWxlbWVudDsKICAgICAgICAgaW50IG1fZWxpc2lv
bjsKICAgICAgICAgYm9vbCBtX29wdGlvbmFsOwogICAgIH07CiAKLSAgICBjbGFzcyBQcm9wZXJ0
eU5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3MgUHJvcGVydHlOb2RlIDogcHVibGljIFBh
cnNlclJlZkNvdW50ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3Rh
bnQsIEdldHRlciwgU2V0dGVyIH07CiAKQEAgLTU5NywxMSArMzQxLDYgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFi
bGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KLQotICAgICAgICBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KIAogICAgIHByaXZhdGU6CkBAIC02MjUsMTEgKzM2NCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9
CiAKLSAgICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgICBQYXNzUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IHJlbGVh
c2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAKICAg
ICBwcml2YXRlOgpAQCAtNjUwLDExICszODUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQotICAgICAgICB2aXJ0
dWFsIGJvb2wgbmVlZHNQYXJlbnNJZkxlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IG1fbGlzdDsK
QEAgLTY3MCwyMyArNDAwLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pT
X0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVU
b0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUlu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y01lbWJlcjsgfQotCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pT
X0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNr
ZXRBY2Nlc3Nvck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KICAg
ICAgICAgRXhwcmVzc2lvbk5vZGUqIGJhc2UoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1fYmFz
ZS5nZXQoKTsgfQogICAgICAgICBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KCkgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBtX3N1YnNjcmlwdC5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgIH07CkBAIC03MDAs
MTQgKzQxOSw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRl
VG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUlu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y01lbWJlcjsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pT
X0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0RvdEFj
Y2Vzc29yTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNzE1
LDggKzQyNiw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2lkZW50OyB9CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2Jhc2U7CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICB9OwpAQCAtNzM1
LDE4ICs0NDQsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAotICAgICAgICB2b2lkIGV2YWx1YXRl
TGlzdChPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIExpc3QmKSBLSlNfRkFTVF9DQUxMOwogICAg
ICAgICBQYXNzUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAKICAgICAgICAgTGlzdFJlZlB0cjxB
cmd1bWVudExpc3ROb2RlPiBtX25leHQ7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9leHByOwogICAgIH07CiAKLSAgICBjbGFzcyBBcmd1bWVudHNOb2RlIDogcHVibGljIE5vZGUg
eworICAgIGNsYXNzIEFyZ3VtZW50c05vZGUgOiBwdWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7CiAg
ICAgcHVibGljOgogICAgICAgICBBcmd1bWVudHNOb2RlKCkgS0pTX0ZBU1RfQ0FMTAogICAgICAg
ICB7CkBAIC03NTcsMTIgKzQ2Miw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0KLSAgICAgICAgdm9pZCBldmFsdWF0ZUxpc3QoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqIGV4ZWMsIExpc3QmIGxpc3QpIEtKU19GQVNUX0NBTEwgeyBp
ZiAobV9saXN0Tm9kZSkgbV9saXN0Tm9kZS0+ZXZhbHVhdGVMaXN0KGV4ZWMsIGxpc3QpOyB9Ci0K
ICAgICAgICAgUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IG1fbGlzdE5vZGU7CiAgICAgfTsKIApA
QCAtNzgxLDE4ICs0ODAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19G
QVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRl
VG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNM
ZWZ0SGFuZFNpZGU7IH0KLQogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSogaW5saW5lRXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50
c05vZGU+IG1fYXJnczsKICAgICB9OwpAQCAtODA1LDEwICs0OTMsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50c05vZGU+IG1fYXJnczsKQEAgLTgy
MywxMCArNTA3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gbV9leHByOwpAQCAtODQxLDkwICs1MjEsMTMgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEZ1bmN0aW9uQ2FsbFJlc29sdmVO
b2RlKFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBF
eHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgICAgICwgbV9pZGVudChQ
bGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgICAgICwgbV9hcmdzKFBsYWNlbWVudE5ld0Fkb3B0
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQz
Ml90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9Ci0KLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQorICAgIHByaXZhdGU6CiAgICAgICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50c05vZGU+IG1fYXJnczsK
LSAgICAgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxWYXJGdW5jdGlvbkNhbGxO
b2RlLgotICAgICAgICBzaXplX3QgbV9zY29wZURlcHRoOyAvLyBVc2VkIGJ5IFNjb3BlZFZhckZ1
bmN0aW9uQ2FsbE5vZGUgYW5kIE5vbkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZQotICAgIH07Ci0g
ICAgCi0gICAgY2xhc3MgTG9jYWxWYXJGdW5jdGlvbkNhbGxOb2RlIDogcHVibGljIEZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsVmFyRnVuY3Rpb25D
YWxsTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJf
dCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAg
ICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKik7Ci0gICAgfTsKLSAgICAKLSAgICBjbGFzcyBTY29wZWRWYXJGdW5jdGlvbkNh
bGxOb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFNjb3BlZFZhckZ1bmN0aW9uQ2FsbE5vZGUoaW50IGksIHNpemVfdCBkZXB0aCkgS0pT
X0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShQbGFjZW1l
bnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5
bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICAgICAgbV9z
Y29wZURlcHRoID0gZGVwdGg7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0
ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJ
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5saW5lRXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKICAgICB9OwogICAgIAotICAgIGNsYXNzIE5v
bkxvY2FsVmFyRnVuY3Rpb25DYWxsTm9kZSA6IHB1YmxpYyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBOb25Mb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGUoc2l6
ZV90IGRlcHRoKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Njb3Bl
RGVwdGggPSBkZXB0aDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9O
dW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBpbmxpbmVFdmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotICAgIH07Ci0KICAgICBjbGFzcyBGdW5jdGlvbkNh
bGxCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVz
c2lvbk5vZGUqIHN1YnNjcmlwdCwgQXJndW1lbnRzTm9kZSogYXJncykgS0pTX0ZBU1RfQ0FMTApA
QCAtOTM1LDEyICs1MzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNv
bnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZh
dGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgICAgICBSZWZQdHI8QXJndW1lbnRz
Tm9kZT4gbV9hcmdzOwpAQCAtOTU2LDE4ICs1NTUsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBT
eW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jv
b2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
dWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZUV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CiAgICAgICAg
IElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50c05vZGU+IG1fYXJn
czsKQEAgLTk3NiwyMCArNTY1LDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIFByZVBv
c3RSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBQcmVQb3N0UmVzb2x2ZU5vZGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEtKU19GQVNU
X0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSkKLSAgICAgICAg
ICAgICwgbV9pZGVudChpZGVudCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUHJl
UG9zdFJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgS0pTX0ZBU1RfQ0FMTAotICAg
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgICAg
ICwgbV9pZGVudChQbGFjZW1lbnROZXdBZG9wdCkKKyAgICAgICAgICAgIDogbV9pZGVudChpZGVu
dCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIElkZW50
aWZpZXIgbV9pZGVudDsKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxW
YXJQb3N0Zml4Tm9kZS4KICAgICB9OwogCiAgICAgY2xhc3MgUG9zdEluY1Jlc29sdmVOb2RlIDog
cHVibGljIFByZVBvc3RSZXNvbHZlTm9kZSB7CkBAIC05OTksNDIgKzU4MCw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBQb3N0SW5jUmVzb2x2ZU5v
ZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFBy
ZVBvc3RSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICB9
Ci0KICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7Ci0gICAgfTsKLQotICAgIGNs
YXNzIFBvc3RJbmNMb2NhbFZhck5vZGUgOiBwdWJsaWMgUG9zdEluY1Jlc29sdmVOb2RlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFBvc3RJbmNMb2NhbFZhck5vZGUoaW50IGkpIEtKU19GQVNUX0NB
TEwKLSAgICAgICAgICAgIDogUG9zdEluY1Jlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkp
OwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFs
IEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsK
LSAgICB9OwotCi0gICAgY2xhc3MgUG9zdEluY0NvbnN0Tm9kZSA6IHB1YmxpYyBQb3N0SW5jUmVz
b2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdEluY0NvbnN0Tm9kZShpbnQgaSkg
S0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBQb3N0SW5jUmVzb2x2ZU5vZGUoUGxhY2VtZW50
TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIH07CiAKICAgICBjbGFzcyBQb3N0RGVjUmVzb2x2ZU5vZGUgOiBw
dWJsaWMgUHJlUG9zdFJlc29sdmVOb2RlIHsKQEAgLTEwNDQsNTAgKzU5MCw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBQb3N0RGVjUmVzb2x2ZU5v
ZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFBy
ZVBvc3RSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICB9
Ci0KICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplRm9yVW5uZWNlc3NhcnlSZXN1bHQoKTsKLSAgICB9OwotCi0gICAg
Y2xhc3MgUG9zdERlY0xvY2FsVmFyTm9kZSA6IHB1YmxpYyBQb3N0RGVjUmVzb2x2ZU5vZGUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgUG9zdERlY0xvY2FsVmFyTm9kZShpbnQgaSkgS0pTX0ZBU1Rf
Q0FMTAotICAgICAgICAgICAgOiBQb3N0RGVjUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIo
KSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVU
b1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0KCk7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBvc3REZWND
b25zdE5vZGUgOiBwdWJsaWMgUG9zdERlY1Jlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFBvc3REZWNDb25zdE5vZGUoaW50IGkpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDog
UG9zdERlY1Jlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9p
bmRleCA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9OwogCiAgICAg
Y2xhc3MgUG9zdGZpeEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTEw
OTgsOSArNjAxLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9Ci0KICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwpAQCAtMTExNCw5ICs2MTQsNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLQotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNsYXNzIFBvc3REZWNCcmFja2V0
Tm9kZSA6IHB1YmxpYyBQb3N0Zml4QnJhY2tldE5vZGUgewpAQCAtMTEyNyw5ICs2MjQsNiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
LQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNsYXNzIFBvc3Rm
aXhEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTExNDAsOSArNjM0LDYgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNQb3N0Zml4OyB9Ci0KICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0x
MTU2LDkgKzY0Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICB9Owog
CiAgICAgY2xhc3MgUG9zdERlY0RvdE5vZGUgOiBwdWJsaWMgUG9zdGZpeERvdE5vZGUgewpAQCAt
MTE2OSw5ICs2NTcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsK
IAogICAgIGNsYXNzIFBvc3RmaXhFcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpA
QCAtMTE4Myw5ICs2NjgsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0
Zml4OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
ZXhwcjsKQEAgLTExOTksMzMgKzY4MSwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgRGVsZXRlUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHRU
eXBlKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKFBsYWNlbWVu
dE5ld0Fkb3B0KQotICAgICAgICAgICAgLCBtX2lkZW50KFBsYWNlbWVudE5ld0Fkb3B0KQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7
IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICB9Owog
Ci0gICAgY2xhc3MgTG9jYWxWYXJEZWxldGVOb2RlIDogcHVibGljIERlbGV0ZVJlc29sdmVOb2Rl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsVmFyRGVsZXRlTm9kZSgpIEtKU19GQVNUX0NB
TEwKLSAgICAgICAgICAgIDogRGVsZXRlUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIH07Ci0KICAgICBj
bGFzcyBEZWxldGVCcmFja2V0Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBEZWxldGVCcmFja2V0Tm9kZShFeHByZXNzaW9uTm9kZSogYmFzZSwgRXhw
cmVzc2lvbk5vZGUqIHN1YnNjcmlwdCkgS0pTX0ZBU1RfQ0FMTApAQCAtMTIzNiwxMSArNjk3LDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5
OyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fYmFz
ZTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKQEAgLTEyNTYs
MTEgKzcxMiw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNVbmFyeTsgfQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX2Jhc2U7CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKQEAgLTEyNzUsMTEgKzcy
Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNV
bmFyeTsgfQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHI7CiAgICAgfTsKQEAgLTEyOTMsMTEgKzczOSw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQotCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAgfTsKQEAgLTEzMDUsNjAg
Kzc0NiwyNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBUeXBlT2ZSZXNvbHZlTm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBUeXBlT2ZSZXNv
bHZlTm9kZShjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAg
ICAgOiBFeHByZXNzaW9uTm9kZShTdHJpbmdUeXBlKQotICAgICAgICAgICAgLCBtX2lkZW50KGlk
ZW50KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlT2ZSZXNvbHZlTm9kZShQ
bGFjZW1lbnROZXdBZG9wdFR5cGUpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVz
c2lvbk5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgICAgICAsIG1faWRlbnQoUGxhY2Vt
ZW50TmV3QWRvcHQpCisgICAgICAgICAgICA6IG1faWRlbnQoaWRlbnQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZXhwZWN0ZWRSZXR1cm5UeXBlID0gU3RyaW5nVHlwZTsKICAgICAgICAgfQog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQotCiAgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1f
aWRlbnQ7IH0KIAotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBJZGVudGlm
aWVyIG1faWRlbnQ7Ci0gICAgICAgIHNpemVfdCBtX2luZGV4OyAvLyBVc2VkIGJ5IExvY2FsVHlw
ZU9mTm9kZS4KLSAgICB9OwotCi0gICAgY2xhc3MgTG9jYWxWYXJUeXBlT2ZOb2RlIDogcHVibGlj
IFR5cGVPZlJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsVmFyVHlwZU9m
Tm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBUeXBlT2ZSZXNvbHZlTm9k
ZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9leHBlY3RlZFJl
dHVyblR5cGUgPSBTdHJpbmdUeXBlOwotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5
bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNsYXNzIFR5cGVPZlZhbHVlTm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBUeXBlT2ZWYWx1ZU5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUoU3RyaW5nVHlwZSkKLSAgICAgICAgICAgICwgbV9leHByKGV4cHIpCisgICAg
ICAgICAgICA6IG1fZXhwcihleHByKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNv
bnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAgIH07CkBAIC0xMzcwLDQxICs3NzgsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgUHJlSW5j
UmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IFByZVBvc3RSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9Ci0gICAg
fTsKLQotICAgIGNsYXNzIFByZUluY0xvY2FsVmFyTm9kZSA6IHB1YmxpYyBQcmVJbmNSZXNvbHZl
Tm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBQcmVJbmNMb2NhbFZhck5vZGUoaW50IGkpIEtK
U19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUHJlSW5jUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3
QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdTeW1ib2xN
YXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgIH07Ci0KLSAgICBjbGFzcyBQcmVJbmNDb25zdE5vZGUgOiBwdWJsaWMg
UHJlSW5jUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUHJlSW5jQ29uc3ROb2Rl
KGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFByZUluY1Jlc29sdmVOb2RlKFBs
YWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBtaXNz
aW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB9OwogCiAgICAgY2xhc3MgUHJlRGVjUmVzb2x2ZU5v
ZGUgOiBwdWJsaWMgUHJlUG9zdFJlc29sdmVOb2RlIHsKQEAgLTE0MTQsNDEgKzc4OCw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBQcmVEZWNSZXNv
bHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdFR5cGUpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAg
IDogUHJlUG9zdFJlc29sdmVOb2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KLSAgICB9Owot
Ci0gICAgY2xhc3MgUHJlRGVjTG9jYWxWYXJOb2RlIDogcHVibGljIFByZURlY1Jlc29sdmVOb2Rl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFByZURlY0xvY2FsVmFyTm9kZShpbnQgaSkgS0pTX0ZB
U1RfQ0FMTAotICAgICAgICAgICAgOiBQcmVEZWNSZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9w
dCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2luZ1N5bWJvbE1hcmtl
cigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgfTsKLQotICAgIGNsYXNzIFByZURlY0NvbnN0Tm9kZSA6IHB1YmxpYyBQcmVE
ZWNSZXNvbHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBQcmVEZWNDb25zdE5vZGUoaW50
IGkpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogUHJlRGVjUmVzb2x2ZU5vZGUoUGxhY2Vt
ZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdT
eW1ib2xNYXJrZXIoKSk7Ci0gICAgICAgICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAKICAgICBjbGFzcyBQcmVmaXhCcmFja2V0Tm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0xNDU5LDkgKzc5OSw2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRh
YmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
VW5hcnk7IH0KLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX2Jhc2U7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9zdWJzY3JpcHQ7CkBA
IC0xNDc2LDggKzgxMyw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZB
U1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNs
YXNzIFByZURlY0JyYWNrZXROb2RlIDogcHVibGljIFByZWZpeEJyYWNrZXROb2RlIHsKQEAgLTE0
ODgsOSArODIzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0
dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIH07CiAK
ICAgICBjbGFzcyBQcmVmaXhEb3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTE1
MDEsOSArODMzLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9Ci0KICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBJZGVudGlmaWVy
IG1faWRlbnQ7CkBAIC0xNTE3LDkgKzg0Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1
ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB9OwogCiAgICAgY2xhc3MgUHJlRGVjRG90Tm9kZSA6IHB1YmxpYyBQcmVmaXhE
b3ROb2RlIHsKQEAgLTE1MzAsOSArODU2LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICAgIH07CiAKICAgICBjbGFzcyBQcmVmaXhFcnJvck5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewpAQCAtMTU0NCw5ICs4NjcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNVbmFyeTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBtX2V4cHI7CkBAIC0xNTU2LDIwICs4NzYsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgY2xhc3MgVW5hcnlQbHVzTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBVbmFyeVBsdXNOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByKSBLSlNfRkFT
VF9DQUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpCi0gICAgICAg
ICAgICAsIG1fZXhwcihleHByKQorICAgICAgICAgICAgOiBtX2V4cHIoZXhwcikKICAgICAgICAg
ewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFs
dWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVU
b0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKQEAgLTE1NzgsMTcgKzg4OSwx
MSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBOZWdhdGVOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE5lZ2F0ZU5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVt
YmVyVHlwZSkKLSAgICAgICAgICAgICwgbV9leHByKGV4cHIpCisgICAgICAgICAgICA6IG1fZXhw
cihleHByKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2Um
LCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CkBAIC0xNTk3LDQxICs5MDIsMjQg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgQml0d2lzZU5vdE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQml0d2lzZU5vdE5vZGUoRXhwcmVz
c2lvbk5vZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUoTnVtYmVyVHlwZSkKLSAgICAgICAgICAgICwgbV9leHByKGV4cHIpCisgICAgICAgICAgICA6
IG1fZXhwcihleHByKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0
b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9v
bGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgaW50MzJfdCBldmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5h
cnk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxp
bmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKICAgICB9OwogCiAgICAgY2xhc3MgTG9naWNh
bE5vdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
TG9naWNhbE5vdE5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIEtKU19GQVNUX0NBTEwKLSAgICAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpCi0gICAgICAgICAgICAsIG1fZXhw
cihleHByKQorICAgICAgICAgICAgOiBtX2V4cHIoZXhwcikKICAgICAgICAgewogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVh
bihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNV
bmFyeTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHI7CkBAIC0xNjQwLDI1ICs5MjgsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3Mg
TXVsdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
TXVsdE5vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtK
U19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSkKLSAg
ICAgICAgICAgICwgbV90ZXJtMSh0ZXJtMSkKKyAgICAgICAgICAgIDogbV90ZXJtMSh0ZXJtMSkK
ICAgICAgICAgICAgICwgbV90ZXJtMih0ZXJtMikKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBB
TFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0xOwog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAgICAgfTsKQEAgLTE2NjYs
MjQgKzk0MywxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBEaXZOb2RlIDogcHVibGlj
IEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERpdk5vZGUoRXhwcmVzc2lv
bk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAgICAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSkKLSAgICAgICAgICAgICwgbV90ZXJt
MSh0ZXJtMSkKKyAgICAgICAgICAgIDogbV90ZXJtMSh0ZXJtMSkKICAgICAgICAgICAgICwgbV90
ZXJtMih0ZXJtMikKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX3Rlcm0xOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAg
ICAgfTsKQEAgLTE2OTEsMjUgKzk1OCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBN
b2ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIE1v
ZE5vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19G
QVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSkKLSAgICAg
ICAgICAgICwgbV90ZXJtMSh0ZXJtMSkKKyAgICAgICAgICAgIDogbV90ZXJtMSh0ZXJtMSkKICAg
ICAgICAgICAgICwgbV90ZXJtMih0ZXJtMikKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwg
Y29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
ZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFs
dWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY011bHRpcGxpY2l0YXZlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdB
WVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0xOwogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAgICAgfTsKQEAgLTE3MjMsOTYg
Kzk3OSwyMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2Fs
U3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRl
VG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBZGRpdGl2ZTsgfQotCi0gICAgcHJvdGVj
dGVkOgotICAgICAgICBBZGROb2RlKEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5v
ZGUqIHRlcm0yLCBKU1R5cGUgZXhwZWN0ZWRSZXR1cm4pIEtKU19GQVNUX0NBTEwKLSAgICAgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUoZXhwZWN0ZWRSZXR1cm4pCi0gICAgICAgICAgICAsIG1fdGVy
bTEodGVybTEpCi0gICAgICAgICAgICAsIG1fdGVybTIodGVybTIpCi0gICAgICAgIHsKLSAgICAg
ICAgfQogCisgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rl
cm0xOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVy
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKik7Ci0gICAgfTsKLQotICAgIGNsYXNzIEFkZE51bWJl
cnNOb2RlIDogcHVibGljIEFkZE5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgQWRkTnVtYmVy
c05vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19G
QVNUX0NBTEwKLSAgICAgICAgICAgIDogQWRkTm9kZSh0ZXJtMSwgdGVybTIsIE51bWJlclR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWlu
dDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBpbmxp
bmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICB9OwotCi0gICAgY2xhc3MgQWRkU3RyaW5nTGVmdE5vZGUgOiBwdWJsaWMgQWRkTm9k
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBBZGRTdHJpbmdMZWZ0Tm9kZShFeHByZXNzaW9uTm9k
ZSogdGVybTEsIEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAg
ICAgOiBBZGROb2RlKHRlcm0xLCB0ZXJtMiwgU3RyaW5nVHlwZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsKLQotICAgIGNsYXNzIEFkZFN0cmluZ1Jp
Z2h0Tm9kZSA6IHB1YmxpYyBBZGROb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFkZFN0cmlu
Z1JpZ2h0Tm9kZShFeHByZXNzaW9uTm9kZSogdGVybTEsIEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikg
S0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBBZGROb2RlKHRlcm0xLCB0ZXJtMiwgU3RyaW5n
VHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBl
dmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsK
LQotICAgIGNsYXNzIEFkZFN0cmluZ3NOb2RlIDogcHVibGljIEFkZE5vZGUgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgQWRkU3RyaW5nc05vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0xLCBFeHByZXNz
aW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogQWRkTm9kZSh0ZXJt
MSwgdGVybTIsIFN0cmluZ1R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIH07CiAKICAgICBjbGFzcyBTdWJOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN1Yk5vZGUoRXhwcmVzc2lvbk5vZGUqIHRlcm0x
LCBFeHByZXNzaW9uTm9kZSogdGVybTIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhw
cmVzc2lvbk5vZGUoTnVtYmVyVHlwZSkKLSAgICAgICAgICAgICwgbV90ZXJtMSh0ZXJtMSkKKyAg
ICAgICAgICAgIDogbV90ZXJtMSh0ZXJtMSkKICAgICAgICAgICAgICwgbV90ZXJtMih0ZXJtMikK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0
YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
ZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJf
dCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdB
WVNfSU5MSU5FIGRvdWJsZSBpbmxpbmVFdmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKik7Ci0KICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0xOwogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdGVybTI7CiAgICAgfTsKQEAgLTE4MjAsMjQg
KzEwMDMsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgTGVmdFNoaWZ0Tm9kZSA6IHB1
YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBMZWZ0U2hpZnROb2Rl
KEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5vZGUqIHRlcm0yKSBLSlNfRkFTVF9D
QUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpCi0gICAgICAgICAg
ICAsIG1fdGVybTEodGVybTEpCisgICAgICAgICAgICA6IG1fdGVybTEodGVybTEpCiAgICAgICAg
ICAgICAsIG1fdGVybTIodGVybTIpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0
IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQzMl90IGV2
YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNTaGlmdDsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IGlubGluZUV2YWx1YXRlVG9JbnQz
MihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Rlcm0yOwog
ICAgIH07CkBAIC0xODQ1LDI0ICsxMDE4LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNz
IFJpZ2h0U2hpZnROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFJpZ2h0U2hpZnROb2RlKEV4cHJlc3Npb25Ob2RlKiB0ZXJtMSwgRXhwcmVzc2lvbk5v
ZGUqIHRlcm0yKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKE51
bWJlclR5cGUpCi0gICAgICAgICAgICAsIG1fdGVybTEodGVybTEpCisgICAgICAgICAgICA6IG1f
dGVybTEodGVybTEpCiAgICAgICAgICAgICAsIG1fdGVybTIodGVybTIpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBldmFsdWF0
ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJ
bnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNTaGlmdDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90
IGlubGluZUV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopOwotCiAgICAg
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRyPEV4cHJl
c3Npb25Ob2RlPiBtX3Rlcm0yOwogICAgIH07CkBAIC0xODcwLDIzICsxMDMzLDE0IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIGNsYXNzIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgVW5zaWduZWRSaWdodFNoaWZ0Tm9k
ZShFeHByZXNzaW9uTm9kZSogdGVybTEsIEV4cHJlc3Npb25Ob2RlKiB0ZXJtMikgS0pTX0ZBU1Rf
Q0FMTAotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShOdW1iZXJUeXBlKQotICAgICAgICAg
ICAgLCBtX3Rlcm0xKHRlcm0xKQorICAgICAgICAgICAgOiBtX3Rlcm0xKHRlcm0xKQogICAgICAg
ICAgICAgLCBtX3Rlcm0yKHRlcm0yKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgZXZhbHVhdGVUb051bWJlcihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgaW50MzJfdCBl
dmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV2YWx1YXRlVG9VSW50MzIoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KLSAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGlubGluZUV2YWx1YXRlVG9VSW50
MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKIAorICAgIHByaXZhdGU6CiAgICAgICAgIFJl
ZlB0cjxFeHByZXNzaW9uTm9kZT4gbV90ZXJtMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25O
b2RlPiBtX3Rlcm0yOwogICAgIH07CkBAIC0xODk0LDU1ICsxMDQ4LDE4IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIGNsYXNzIExlc3NOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIExlc3NOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2Rl
KEJvb2xlYW5UeXBlKQotICAgICAgICAgICAgLCBtX2V4cHIxKGV4cHIxKQorICAgICAgICAgICAg
OiBtX2V4cHIxKGV4cHIxKQogICAgICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQogICAgICAgICB7
CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwg
Y29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1
YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopOwotCi0gICAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1f
ZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9Owog
Ci0gICAgY2xhc3MgTGVzc051bWJlcnNOb2RlIDogcHVibGljIExlc3NOb2RlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIExlc3NOdW1iZXJzTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJl
c3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBMZXNzTm9kZShl
eHByMSwgZXhwcjIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNW
YWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQUxXQVlTX0lO
TElORSBib29sIGlubGluZUV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRl
Kik7Ci0gICAgfTsKLQotICAgIGNsYXNzIExlc3NTdHJpbmdzTm9kZSA6IHB1YmxpYyBMZXNzTm9k
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMZXNzU3RyaW5nc05vZGUoRXhwcmVzc2lvbk5vZGUq
IGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAg
IDogTGVzc05vZGUoZXhwcjEsIGV4cHIyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmxpbmVFdmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopOwotICAgIH07Ci0KICAgICBjbGFzcyBHcmVhdGVyTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBHcmVhdGVyTm9kZShFeHBy
ZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTApA
QCAtMTk1MiwxNSArMTA2OSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwg
Y29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRl
cnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFs
OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZh
bHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9leHByMjsKICAgICB9OwpAQCAtMTk3NCwxNSArMTA4NCw4IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFs
dWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMTk5NiwxNSArMTA5
OSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9y
YWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2Ug
cHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4o
T2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAg
ICB9OwpAQCAtMjAxMiwxOCArMTEwOCwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBJ
bnN0YW5jZU9mTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBJbnN0YW5jZU9mTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2Rl
KiBleHByMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29s
ZWFuVHlwZSkKLSAgICAgICAgICAgICwgbV9leHByMShleHByMSkKKyAgICAgICAgICAgIDogbV9l
eHByMShleHByMSkKICAgICAgICAgICAgICwgbV9leHByMihleHByMikKICAgICAgICAgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRv
Qm9vbGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNSZWxhdGlvbmFsOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IG1fZXhwcjE7CkBAIC0yMDQwLDEyICsxMTMwLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29s
ZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y1JlbGF0aW9uYWw7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwpA
QCAtMjA1NCwyMiArMTEzOCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBFcXVhbE5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRXF1YWxO
b2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFT
VF9DQUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKQotICAgICAg
ICAgICAgLCBtX2V4cHIxKGV4cHIxKQorICAgICAgICAgICAgOiBtX2V4cHIxKGV4cHIxKQogICAg
ICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9leHByMjsKICAgICB9OwpAQCAtMjA3NywyMiArMTE1MywxNCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBjbGFzcyBOb3RFcXVhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1
YmxpYzoKICAgICAgICAgTm90RXF1YWxOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKEJvb2xlYW5UeXBlKQotICAgICAgICAgICAgLCBtX2V4cHIxKGV4cHIxKQorICAgICAgICAg
ICAgOiBtX2V4cHIxKGV4cHIxKQogICAgICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQogICAgICAg
ICB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVy
cHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2
YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAg
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjEwMCwyMiArMTE2
OCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBTdHJpY3RFcXVhbE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU3RyaWN0RXF1YWxOb2Rl
KEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9D
QUxMCi0gICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKQotICAgICAgICAg
ICAgLCBtX2V4cHIxKGV4cHIxKQorICAgICAgICAgICAgOiBtX2V4cHIxKGV4cHIxKQogICAgICAg
ICAgICAgLCBtX2V4cHIyKGV4cHIyKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25z
dCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVU
b0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9l
eHByMjsKICAgICB9OwpAQCAtMjEyMywyMiArMTE4MywxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBjbGFzcyBOb3RTdHJpY3RFcXVhbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAg
IHB1YmxpYzoKICAgICAgICAgTm90U3RyaWN0RXF1YWxOb2RlKEV4cHJlc3Npb25Ob2RlKiBleHBy
MSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEV4
cHJlc3Npb25Ob2RlKEJvb2xlYW5UeXBlKQotICAgICAgICAgICAgLCBtX2V4cHIxKGV4cHIxKQor
ICAgICAgICAgICAgOiBtX2V4cHIxKGV4cHIxKQogICAgICAgICAgICAgLCBtX2V4cHIyKGV4cHIy
KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRl
KE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNl
KCkgY29uc3QgeyByZXR1cm4gUHJlY0VxdWFsaXR5OyB9CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7
CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjE0
NiwyNSArMTE5OCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBCaXRBbmROb2RlIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEJpdEFuZE5vZGUo
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NB
TEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoTnVtYmVyVHlwZSkKLSAgICAgICAgICAg
ICwgbV9leHByMShleHByMSkKKyAgICAgICAgICAgIDogbV9leHByMShleHByMSkKICAgICAgICAg
ICAgICwgbV9leHByMihleHByMikKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3Qg
TG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVh
dGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBldmFsdWF0ZVRv
VUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0JpdHdpc2VBbmQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUg
aW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsK
LQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjE3MiwyNSArMTIxMywxNCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBCaXRPck5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQml0T3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBl
eHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKE51bWJlclR5cGUpCi0gICAgICAgICAgICAsIG1fZXhwcjEoZXhwcjEp
CisgICAgICAgICAgICA6IG1fZXhwcjEoZXhwcjEpCiAgICAgICAgICAgICAsIG1fZXhwcjIoZXhw
cjIpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCog
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIGRvdWJsZSBldmFsdWF0ZVRvTnVtYmVyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBib29sIGV2YWx1YXRlVG9Cb29sZWFuKE9sZElu
dGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBpbnQz
Ml90IGV2YWx1YXRlVG9JbnQzMihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlT3I7IH0K
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFs
dWF0ZVRvSW50MzIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9leHByMjsKICAgICB9OwpAQCAtMjE5OCwyNSArMTIyOCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBjbGFzcyBCaXRYT3JOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIEJpdFhPck5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9u
Tm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
TnVtYmVyVHlwZSkKLSAgICAgICAgICAgICwgbV9leHByMShleHByMSkKKyAgICAgICAgICAgIDog
bV9leHByMShleHByMSkKICAgICAgICAgICAgICwgbV9leHByMihleHByMikKICAgICAgICAgewog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91YmxlIGV2YWx1
YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0lu
dDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB1aW50MzJfdCBldmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0JpdHdpc2VYb3I7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBpbmxpbmVFdmFsdWF0ZVRvSW50MzIoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9
OwpAQCAtMjIyNywyMiArMTI0NiwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBMb2dp
Y2FsQW5kTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBMb2dpY2FsQW5kTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBl
eHByMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShCb29sZWFu
VHlwZSkKLSAgICAgICAgICAgICwgbV9leHByMShleHByMSkKKyAgICAgICAgICAgIDogbV9leHBy
MShleHByMSkKICAgICAgICAgICAgICwgbV9leHByMihleHByMikKICAgICAgICAgewogICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9v
bGVhbihPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwot
ICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFBy
ZWNMb2dpY2FsQW5kOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9OwpAQCAtMjI1MCwyMiArMTI2MSwxNCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBMb2dpY2FsT3JOb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExvZ2ljYWxPck5vZGUoRXhwcmVzc2lvbk5v
ZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpIEtKU19GQVNUX0NBTEwKLSAgICAgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUoQm9vbGVhblR5cGUpCi0gICAgICAgICAgICAsIG1fZXhwcjEo
ZXhwcjEpCisgICAgICAgICAgICA6IG1fZXhwcjEoZXhwcjEpCiAgICAgICAgICAgICAsIG1fZXhw
cjIoZXhwcjIpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFn
ZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jvb2xlYW4oT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTG9naWNhbE9yOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5saW5lRXZhbHVhdGVUb0Jvb2xlYW4oT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKTsKLQogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsKICAgICB9
OwpAQCAtMjI4MywxNCArMTI4Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZVRvQm9vbGVhbihPbGRJ
bnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgZG91
YmxlIGV2YWx1YXRlVG9OdW1iZXIoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIGludDMyX3QgZXZhbHVhdGVUb0ludDMyKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBl
dmFsdWF0ZVRvVUludDMyKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3Qg
eyByZXR1cm4gUHJlY0NvbmRpdGlvbmFsOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fbG9naWNhbDsKQEAgLTIzMDgsNTMgKzEzMDMsMTUgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFJlYWRNb2RpZnlS
ZXNvbHZlTm9kZShQbGFjZW1lbnROZXdBZG9wdFR5cGUpIEtKU19GQVNUX0NBTEwKLSAgICAgICAg
ICAgIDogRXhwcmVzc2lvbk5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgICAgICAsIG1f
aWRlbnQoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgICAgICAsIG1fcmlnaHQoUGxhY2VtZW50
TmV3QWRvcHQpCi0gICAgICAgICAgICAsIG1fcmlnaHRIYXNBc3NpZ25tZW50cyh0cnVlKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xk
SW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdu
bWVudDsgfQotCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZp
ZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3JpZ2h0OwotICAg
ICAgICBzaXplX3QgbV9pbmRleDsgLy8gVXNlZCBieSBSZWFkTW9kaWZ5TG9jYWxWYXJOb2RlLgog
ICAgICAgICBPcGVyYXRvciBtX29wZXJhdG9yIDogMzE7CiAgICAgICAgIGJvb2wgbV9yaWdodEhh
c0Fzc2lnbm1lbnRzIDogMTsKICAgICB9OwogCi0gICAgY2xhc3MgUmVhZE1vZGlmeUxvY2FsVmFy
Tm9kZSA6IHB1YmxpYyBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgUmVhZE1vZGlmeUxvY2FsVmFyTm9kZShpbnQgaSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAg
ICAgOiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChpICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7Ci0gICAgICAg
ICAgICBtX2luZGV4ID0gaTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIH07
Ci0KLSAgICBjbGFzcyBSZWFkTW9kaWZ5Q29uc3ROb2RlIDogcHVibGljIFJlYWRNb2RpZnlSZXNv
bHZlTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZWFkTW9kaWZ5Q29uc3ROb2RlKGludCBp
KSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IFJlYWRNb2RpZnlSZXNvbHZlTm9kZShQbGFj
ZW1lbnROZXdBZG9wdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGkgIT0gbWlzc2lu
Z1N5bWJvbE1hcmtlcigpKTsKLSAgICAgICAgICAgIG1faW5kZXggPSBpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgfTsKLQogICAgIGNsYXNzIEFzc2lnblJlc29sdmVOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEFzc2lnblJl
c29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogcmlnaHQs
IGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykgS0pTX0ZBU1RfQ0FMTApAQCAtMjM2NCw0OSArMTMy
MSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
QXNzaWduUmVzb2x2ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSBLSlNfRkFTVF9DQUxMCi0g
ICAgICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICAg
ICAgLCBtX2lkZW50KFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICAgICAgLCBtX3JpZ2h0KFBs
YWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwg
Y29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7Ci0gICAgICAgIHNpemVfdCBtX2luZGV4OyAvLyBVc2Vk
IGJ5IFJlYWRNb2RpZnlMb2NhbFZhck5vZGUuCiAgICAgICAgIGJvb2wgbV9yaWdodEhhc0Fzc2ln
bm1lbnRzOwogICAgIH07CiAKLSAgICBjbGFzcyBBc3NpZ25Mb2NhbFZhck5vZGUgOiBwdWJsaWMg
QXNzaWduUmVzb2x2ZU5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgQXNzaWduTG9jYWxWYXJO
b2RlKGludCBpKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IEFzc2lnblJlc29sdmVOb2Rl
KFBsYWNlbWVudE5ld0Fkb3B0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSAhPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCkpOwotICAgICAgICAgICAgbV9pbmRleCA9IGk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB9OwotCi0gICAgY2xhc3MgQXNzaWduQ29uc3RO
b2RlIDogcHVibGljIEFzc2lnblJlc29sdmVOb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFz
c2lnbkNvbnN0Tm9kZSgpIEtKU19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogQXNzaWduUmVzb2x2
ZU5vZGUoUGxhY2VtZW50TmV3QWRvcHQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNf
RkFTVF9DQUxMOwotICAgIH07Ci0KICAgICBjbGFzcyBSZWFkTW9kaWZ5QnJhY2tldE5vZGUgOiBw
dWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVhZE1vZGlmeUJy
YWNrZXROb2RlKEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0
LCBPcGVyYXRvciBvcGVyLCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgc3Vic2NyaXB0SGFz
QXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykgS0pTX0ZBU1RfQ0FMTApAQCAt
MjQyMSwxMiArMTM0Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZB
U1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhP
bGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxT
dG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNBc3NpZ25tZW50OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CiAgICAgICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gbV9zdWJzY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9yaWdodDsKQEAgLTI0NDgsMTIgKzEzNjUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQotCi0gICAgcHJvdGVjdGVk
OgorICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0yNDcyLDEyICsxMzg0LDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2ln
bm1lbnQ7IH0KIAotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0yNDk3LDEyICsxNDA1LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKE9s
ZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0Fzc2ln
bm1lbnQ7IH0KLQotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8
RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0yNTIwLDExICsxNDIzLDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0ZXJFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQogCi0gICAg
cHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4g
bV9sZWZ0OwogICAgICAgICBPcGVyYXRvciBtX29wZXJhdG9yOwogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0yNTM2LDM4ICsxNDM2LDE5IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICAgICAgOiBtX2V4cHIxKGV4cHIxKQogICAgICAgICAgICAgLCBtX2V4cHIy
KGV4cHIyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4cHIxLT5vcHRpbWl6ZUZvclVubmVj
ZXNzYXJ5UmVzdWx0KCk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1
YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJl
Y0V4cHJlc3Npb247IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9leHByMTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwog
ICAgIH07Ci0gICAgCi0gICAgY2xhc3MgVmFyRGVjbENvbW1hTm9kZSA6IHB1YmxpYyBDb21tYU5v
ZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgVmFyRGVjbENvbW1hTm9kZShFeHByZXNzaW9uTm9k
ZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMikgS0pTX0ZBU1RfQ0FMTAotICAgICAgICAg
ICAgOiBDb21tYU5vZGUoZXhwcjEsIGV4cHIyKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNz
aWdubWVudDsgfQotICAgIH07CiAKICAgICBjbGFzcyBDb25zdERlY2xOb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnN0RGVjbE5vZGUoY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbikgS0pTX0ZBU1RfQ0FMTDsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGV2
YWx1YXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dm9pZCBldmFsdWF0ZVNpbmdsZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAg
ICAgICBQYXNzUmVmUHRyPENvbnN0RGVjbE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lk
ZW50OwpAQCAtMjU3Niw4ICsxNDU3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGVTaW5nbGUoQ29kZUdlbmVyYXRvciYpIEtKU19GQVNUX0NBTEw7Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgdm9pZCBoYW5kbGVTbG93Q2FzZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFNjb3BlQ2hhaW4mLCBKU1ZhbHVlKikgS0pTX0ZBU1RfQ0FMTCBORVZFUl9JTkxJTkU7CiAg
ICAgfTsKIAogICAgIGNsYXNzIENvbnN0U3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnRO
b2RlIHsKQEAgLTI1ODYsMTIgKzE0NjUsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAg
IDogbV9uZXh0KG5leHQpCiAgICAgICAgIHsKICAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29u
c3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJF
eGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxDb25zdERl
Y2xOb2RlPiBtX25leHQ7CiAgICAgfTsKQEAgLTI2MTYsOSArMTQ5Miw2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBCbG9ja05vZGUoU291cmNlRWxlbWVudHMqIGNoaWxkcmVuKSBLSlNfRkFT
VF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25z
dCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAgcHJvdGVjdGVkOgogICAg
ICAgICBTdGF0ZW1lbnRWZWN0b3IgbV9jaGlsZHJlbjsKQEAgLTI2MzIsOCArMTUwNSw2IEBAIG5h
bWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdGF0ZW1lbnQo
KSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KICAgICB9OwogCkBAIC0yNjQ1
LDkgKzE1MTYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExv
Y2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX2V4cHI7CkBAIC0yNjYyLDEwICsxNTMwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9w
dGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVm
UHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAgfTsKQEAgLTI2NzksOSArMTU0Myw2IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwg
Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVj
dXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9jb25kaXRp
b247CkBAIC0yNjk3LDkgKzE1NTgsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFN0
YXRlbWVudE5vZGU+IG1fZWxzZUJsb2NrOwpAQCAtMjcxNCw5ICsxNTcyLDYgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50
ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKQEAgLTI3MzIs
OSArMTU4Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9j
YWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjsKQEAgLTI3NDMsMzMgKzE1OTUsMjIgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBj
bGFzcyBGb3JOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRm9yTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIzLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGJvb2wgZXhw
cjFXYXNWYXJEZWNsKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IG1fZXhwcjEoZXhwcjEg
PyBleHByMSA6IG5ldyBQbGFjZWhvbGRlclRydWVOb2RlKQotICAgICAgICAgICAgLCBtX2V4cHIy
KGV4cHIyID8gZXhwcjIgOiBuZXcgUGxhY2Vob2xkZXJUcnVlTm9kZSkKLSAgICAgICAgICAgICwg
bV9leHByMyhleHByMyA/IGV4cHIzIDogbmV3IFBsYWNlaG9sZGVyVHJ1ZU5vZGUpCisgICAgICAg
IEZvck5vZGUoRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIEV4
cHJlc3Npb25Ob2RlKiBleHByMywgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBib29sIC8qZXhw
cjFXYXNWYXJEZWNsKi8pIEtKU19GQVNUX0NBTEwKKyAgICAgICAgICAgIDogbV9leHByMShleHBy
MSkKKyAgICAgICAgICAgICwgbV9leHByMihleHByMikKKyAgICAgICAgICAgICwgbV9leHByMyhl
eHByMykKICAgICAgICAgICAgICwgbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQotICAgICAgICAgICAg
LCBtX2V4cHIxV2FzVmFyRGVjbChleHByMSAmJiBleHByMVdhc1ZhckRlY2wpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2V4cHIxKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2V4cHIy
KTsKLSAgICAgICAgICAgIEFTU0VSVChtX2V4cHIzKTsKICAgICAgICAgICAgIEFTU0VSVChzdGF0
ZW1lbnQpOwotCi0gICAgICAgICAgICBtX2V4cHIxLT5vcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVz
dWx0KCk7Ci0gICAgICAgICAgICBtX2V4cHIzLT5vcHRpbWl6ZUZvclVubmVjZXNzYXJ5UmVzdWx0
KCk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRl
KiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJw
cmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMTsKICAgICAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIyOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fZXhwcjM7CiAgICAgICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKLSAg
ICAgICAgYm9vbCBtX2V4cHIxV2FzVmFyRGVjbDsKICAgICB9OwogCiAgICAgY2xhc3MgRm9ySW5O
b2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtMjc3OCw5ICsxNjE5LDYgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIEZvckluTm9kZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lv
bk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0
IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0yODAzLDggKzE2NDEsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAg
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZp
ZXIgbV9pZGVudDsKQEAgLTI4MjIsOCArMTY1OCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50
OwpAQCAtMjgzNywxMCArMTY3MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9CiAKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1JldHVybk5vZGUo
KSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBi
b29sIGlzUmV0dXJuU3RhdGVtZW50KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVl
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fdmFs
dWU7CkBAIC0yODU1LDkgKzE2ODYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJs
ZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBLSlNfRkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBtX2V4cHI7CkBAIC0yODczLDkgKzE3MDEsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBLSlNfRkFTVF9DQUxMIHsg
bV9zdGF0ZW1lbnQtPnB1c2hMYWJlbChpZGVudCk7IH0KIAogICAgIHByaXZhdGU6CkBAIC0yODkx
LDkgKzE3MTYsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExv
Y2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2Rl
PiBtX2V4cHI7CkBAIC0yOTA5LDkgKzE3MzEsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExv
Y2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqIGRzdCA9IDApIEtKU19GQVNUX0NBTEw7CiAKQEAgLTI5MjIs
NyArMTc0MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBSZWZQdHI8U3RhdGVtZW50Tm9k
ZT4gbV9maW5hbGx5QmxvY2s7CiAgICAgfTsKIAotICAgIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBw
dWJsaWMgTm9kZSB7CisgICAgY2xhc3MgUGFyYW1ldGVyTm9kZSA6IHB1YmxpYyBQYXJzZXJSZWZD
b3VudGVkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpIEtKU19GQVNUX0NBTEwKICAgICAgICAgICAgIDogbV9pZGVudChpZGVudCkK
QEAgLTI5MzcsOSArMTc1Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIElkZW50aWZp
ZXIgaWRlbnQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1faWRlbnQ7IH0KICAgICAgICAgUGFy
YW1ldGVyTm9kZSAqbmV4dFBhcmFtKCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQuZ2V0
KCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyTm9kZT4gcmVsZWFz
ZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KLSAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGdW5jRGVjbE5vZGU7CkBAIC0yOTU0LDE0ICsxNzcxLDExIEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgICAgIGludCBzb3VyY2VJZCgpIGNvbnN0IEtKU19GQVNUX0NBTEwg
eyByZXR1cm4gbV9zb3VyY2VJZDsgfQogICAgICAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwo
KSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1fc291cmNlVVJMOyB9Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwog
ICAgICAgICAKICAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0V2
YWw7IH0KICAgICAgICAgYm9vbCBuZWVkc0Nsb3N1cmUoKSBjb25zdCB7IHJldHVybiBtX25lZWRz
Q2xvc3VyZTsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCiAgICAg
ICAgIFZhclN0YWNrIG1fdmFyU3RhY2s7CiAgICAgICAgIEZ1bmN0aW9uU3RhY2sgbV9mdW5jdGlv
blN0YWNrOwogCkBAIC0yOTc3LDggKzE3OTEsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
c3RhdGljIFByb2dyYW1Ob2RlKiBjcmVhdGUoU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1
bmN0aW9uU3RhY2sqLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSkgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB+UHJvZ3JhbU5vZGUoKTsKICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7Ci0KICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgY29kZShTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiwgYm9vbCBjYW5DcmVhdGVHbG9iYWxzKSBLSlNfRkFTVF9DQUxMCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jb2RlKQpAQCAtMjk5Miw5ICsxODA0LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiwg
Ym9vbCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCi0gICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZVN5bWJvbFRhYmxlKE9sZEludGVycHJldGVyRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHByb2Nlc3NEZWNsYXJh
dGlvbnMoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotCiAgICAgICAg
IFZlY3RvcjxzaXplX3Q+IG1fdmFySW5kZXhlczsgLy8gU3RvcmFnZSBpbmRleGVzIGJlbG9uZ2lu
ZyB0byB0aGUgbm9kZXMgaW4gbV92YXJTdGFjay4gKFJlY29yZGVkIHRvIGF2b2lkIGRvdWJsZSBs
b29rdXAuKQogICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX2Z1bmN0aW9uSW5kZXhlczsgLy8gU3Rv
cmFnZSBpbmRleGVzIGJlbG9uZ2luZyB0byB0aGUgbm9kZXMgaW4gbV9mdW5jdGlvblN0YWNrLiAo
UmVjb3JkZWQgdG8gYXZvaWQgZG91YmxlIGxvb2t1cC4pCiAKQEAgLTMwMDYsOCArMTgxNSw2IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICBzdGF0aWMgRXZhbE5vZGUqIGNyZWF0ZShTb3VyY2VF
bGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIGJvb2wgdXNlc0V2YWwsIGJvb2wg
bmVlZHNDbG9zdXJlKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIH5FdmFsTm9kZSgp
OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBFdmFsQ29kZUJsb2NrJiBj
b2RlKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKSBLSlNfRkFTVF9DQUxMCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghbV9jb2RlKQpAQCAtMzAxOCw3ICsxODI1LDYgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgRXZhbE5vZGUoU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3Vy
ZSkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvY2Vzc0Rl
Y2xhcmF0aW9ucyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCkBAIC0zMDU0LDEyICsxODYwLDExIEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICB2b2lkIG1hcmsoKTsKIAogICAgICAgICB2b2lkIHNldFNvdXJj
ZShjb25zdCBTb3VyY2VSYW5nZSYgc291cmNlKSB7IG1fc291cmNlID0gc291cmNlOyB9IAotICAg
ICAgICBVU3RyaW5nIHRvU291cmNlU3RyaW5nKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVy
biBVU3RyaW5nKCJ7IikgKyBtX3NvdXJjZS50b1N0cmluZygpICsgVVN0cmluZygifSIpOyB9Cisg
ICAgICAgIFVTdHJpbmcgdG9Tb3VyY2VTdHJpbmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuICJ7IiArIG1fc291cmNlLnRvU3RyaW5nKCkgKyAifSI7IH0KIAotICAgIHByb3RlY3RlZDoK
KyAgICBwcml2YXRlOgogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFNvdXJjZUVsZW1lbnRzKiwg
VmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1
cmUpIEtKU19GQVNUX0NBTEw7CiAKLSAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGdlbmVyYXRl
Q29kZShTY29wZUNoYWluTm9kZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIAogICAgICAgICBW
ZWN0b3I8SWRlbnRpZmllcj4gbV9wYXJhbWV0ZXJzOwpAQCAtMzA4MSwxMCArMTg4Niw2IEBAIG5h
bWVzcGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgRnVu
Y3Rpb25JbXAqIG1ha2VGdW5jdGlvbihFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopIEtKU19G
QVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoT2xkSW50ZXJwcmV0
ZXJFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBuZWVkc1BhcmVuc0lmTGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSgpIHsgcmV0dXJuIG1fYm9k
eS5nZXQoKTsgfQogCkBAIC0zMDkyLDcgKzE4OTMsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgdm9pZCBhZGRQYXJhbXMoKSBLSlNfRkFTVF9DQUxMOwogCiAgICAgICAgIC8vIFVzZWQgZm9y
IHN0cmVhbVRvCi0gICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eU5vZGU7CiAgICAgICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPFBhcmFtZXRlck5vZGU+IG1fcGFyYW1l
dGVyOwogICAgICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbV9ib2R5OwpAQCAtMzExMSw4
ICsxOTExLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklE
KiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxM
OwogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnByZXRlckV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgICBGdW5jdGlvbkltcCogbWFr
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgS0pTX0ZBU1RfQ0FMTDsKIAog
ICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0zMTI2LDcgKzE5MjQsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG1fYm9keTsKICAgICB9
OwogCi0gICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3Mg
Q2FzZUNsYXVzZU5vZGUgOiBwdWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7CiAgICAgcHVibGljOgog
ICAgICAgICBDYXNlQ2xhdXNlTm9kZShFeHByZXNzaW9uTm9kZSogZXhwcikgS0pTX0ZBU1RfQ0FM
TAogICAgICAgICAgICAgOiBtX2V4cHIoZXhwcikKQEAgLTMxNDAsMTMgKzE5MzgsNiBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgICAgICAgICAgICBjaGlsZHJlbi0+cmVsZWFzZUNvbnRlbnRzSW50
b1ZlY3RvcihtX2NoaWxkcmVuKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKE9sZEludGVycHJldGVyRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KLQotICAg
ICAgICBKU1ZhbHVlKiBldmFsdWF0ZShPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGVTdGF0ZW1lbnRzKE9sZEludGVycHJldGVy
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLQogICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhw
cigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwci5nZXQoKTsgfQogICAgICAgICBTdGF0ZW1lbnRWZWN0
b3ImIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQogCkBAIC0zMTU1LDcgKzE5NDYs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRyZW47
CiAgICAgfTsKIAotICAgIGNsYXNzIENsYXVzZUxpc3ROb2RlIDogcHVibGljIE5vZGUgeworICAg
IGNsYXNzIENsYXVzZUxpc3ROb2RlIDogcHVibGljIFBhcnNlclJlZkNvdW50ZWQgewogICAgIHB1
YmxpYzoKICAgICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2FzZUNsYXVzZU5vZGUqIGNsYXVzZSkgS0pT
X0ZBU1RfQ0FMTAogICAgICAgICAgICAgOiBtX2NsYXVzZShjbGF1c2UpCkBAIC0zMTY4LDEyICsx
OTU5LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICBjbGF1c2VMaXN0LT5tX25leHQg
PSB0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNv
bnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIENh
c2VDbGF1c2VOb2RlKiBnZXRDbGF1c2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1f
Y2xhdXNlLmdldCgpOyB9CiAgICAgICAgIENsYXVzZUxpc3ROb2RlKiBnZXROZXh0KCkgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IFBhc3NSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7
IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHBy
ZXNzaW9uOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ2FzZUJsb2Nr
Tm9kZTsKQEAgLTMxODEsNyArMTk2OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBMaXN0
UmVmUHRyPENsYXVzZUxpc3ROb2RlPiBtX25leHQ7CiAgICAgfTsKIAotICAgIGNsYXNzIENhc2VC
bG9ja05vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6IHB1Ymxp
YyBQYXJzZXJSZWZDb3VudGVkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhc2VCbG9ja05vZGUo
Q2xhdXNlTGlzdE5vZGUqIGxpc3QxLCBDYXNlQ2xhdXNlTm9kZSogZGVmYXVsdENsYXVzZSwgQ2xh
dXNlTGlzdE5vZGUqIGxpc3QyKSBLSlNfRkFTVF9DQUxMCiAgICAgICAgICAgICA6IG1fbGlzdDEo
bGlzdDEpCkBAIC0zMTkyLDExICsxOTgwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdENvZGVGb3JCbG9jayhDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
aW5wdXQsIFJlZ2lzdGVySUQqIGRzdCA9IDApIEtKU19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoT2xkSW50ZXJwcmV0ZXJFeGVjU3RhdGUq
LCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtK
U19GQVNUX0NBTEw7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGVCbG9jayhPbGRJbnRlcnByZXRl
ckV4ZWNTdGF0ZSosIEpTVmFsdWUgKmlucHV0KSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbV9saXN0MTsKICAgICAgICAgUmVmUHRyPENhc2VD
bGF1c2VOb2RlPiBtX2RlZmF1bHRDbGF1c2U7CkBAIC0zMjEzLDI3ICsxOTk2LDExIEBAIG5hbWVz
cGFjZSBLSlMgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSos
IGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKE9sZEludGVycHJl
dGVyRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7Ci0KICAgICBwcml2YXRlOgog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKICAgICAgICAgUmVmUHRyPENh
c2VCbG9ja05vZGU+IG1fYmxvY2s7CiAgICAgfTsKIAotICAgIGNsYXNzIEJyZWFrcG9pbnRDaGVj
a1N0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudChQYXNzUmVmUHRyPFN0YXRlbWVudE5vZGU+KSBLSlNf
RkFTVF9DQUxMOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShPbGRJbnRlcnBy
ZXRlckV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhPbGRJbnRlcnByZXRlckV4ZWNTdGF0ZSosIGNv
bnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZB
U1RfQ0FMTDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBt
X3N0YXRlbWVudDsKLSAgICB9OwotCiAgICAgc3RydWN0IEVsZW1lbnRMaXN0IHsKICAgICAgICAg
RWxlbWVudE5vZGUqIGhlYWQ7CiAgICAgICAgIEVsZW1lbnROb2RlKiB0YWlsOwpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OSwxNCArNTc5LDEyIEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dERpcmVjdEZ1bmN0aW9uKEludGVybmEKICAgICBwdXREaXJlY3QoZnVuYy0+ZnVuY3Rp
b25OYW1lKCksIGZ1bmMsIGF0dHIpOyAKIH0KIAotdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclBy
b3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgKipsb2NhdGlvbikKK3ZvaWQg
SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1Zh
bHVlKiogbG9jYXRpb24pCiB7Ci0gICAgR2V0dGVyU2V0dGVySW1wICpncyA9IHN0YXRpY19jYXN0
PEdldHRlclNldHRlckltcCAqPigqbG9jYXRpb24pOwotICAgIEpTT2JqZWN0ICpnZXR0ZXJGdW5j
ID0gZ3MtPmdldEdldHRlcigpOwotICAgIGlmIChnZXR0ZXJGdW5jKQotICAgICAgICBzbG90LnNl
dEdldHRlclNsb3QodGhpcy0+dG9UaGlzT2JqZWN0KDApLCBnZXR0ZXJGdW5jKTsKKyAgICBpZiAo
SlNPYmplY3QqIGdldHRlckZ1bmMgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAqPigqbG9j
YXRpb24pLT5nZXRHZXR0ZXIoKSkKKyAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1
bmMpOwogICAgIGVsc2UKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBFcnJvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL29iamVjdC5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxMyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICB2b2lkIHNldFNldHRlcihKU09iamVjdCAqcykgeyBzZXR0ZXIgPSBzOyB9CiAgICAg
ICAKICAgcHJpdmF0ZToKKyAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmpl
Y3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgorICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgs
IFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICB2aXJ0
dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CisKICAgICBKU09i
amVjdCAqZ2V0dGVyOwogICAgIEpTT2JqZWN0ICpzZXR0ZXI7ICAKICAgfTsKQEAgLTUyNSwyMyAr
NTMyLDIwIEBAIGlubGluZSBib29sIEpTVmFsdWU6OmlzT2JqZWN0KGNvbnN0IENsYXMKICAgICBy
ZXR1cm4gIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSAmJiBhc0NlbGwoKS0+aXNPYmpl
Y3QoYyk7CiB9CiAKLWlubGluZSBKU1ZhbHVlICpKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAoraW5saW5lIEpTVmFsdWUq
IEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0CiB7Ci0gIFByb3BlcnR5U2xvdCBzbG90OwotCi0gIGlmIChjb25zdF9jYXN0
PEpTT2JqZWN0ICo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KSkKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBjb25zdF9jYXN0PEpTT2JqZWN0
ICo+KHRoaXMpLCBwcm9wZXJ0eU5hbWUpOwotICAgIAotICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcykpOworICAg
IGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBw
cm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBpbmxpbmUgSlNW
YWx1ZSAqSlNPYmplY3Q6OmdldChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSkgY29uc3QKIHsKLSAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIGlmIChjb25zdF9jYXN0PEpTT2Jq
ZWN0ICo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
LSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBjb25zdF9jYXN0PEpTT2JqZWN0ICo+KHRo
aXMpLCBwcm9wZXJ0eU5hbWUpOwotICAgIAotICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcykpOworICAgIGlmIChj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAvLyBJdCBtYXkgc2VlbSBj
cmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlIGJ1dCBpdCBtYWtlcyBhIGJpZyBk
aWZmZXJlbmNlCkBAIC01ODksMTMgKzU5MywxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlCiAgICAgICAgICAgICBzbG90SXNXcml0ZWFibGUgPSBmYWxzZTsKICAg
ICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsIGxvY2F0aW9uKTsK
KyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KGxvY2F0aW9uKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgLy8gbm9uLXN0YW5kYXJkIE5ldHNjYXBlIGV4dGVuc2lvbgog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQ
cm90bykgewotICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCAmX3Byb3RvKTsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZVNsb3QoJl9wcm90byk7CiAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9
IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYxMiwxMyArNjE2LDEzIEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKICAgICAgICAgaWYgKF9w
cm9wLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlvblswXS0+dHlwZSgpID09
IEdldHRlclNldHRlclR5cGUpCiAgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNs
b3QsIGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNs
b3QodGhpcywgbG9jYXRpb24pOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRp
b24pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBub24tc3RhbmRhcmQg
TmV0c2NhcGUgZXh0ZW5zaW9uCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRo
aXMsICZfcHJvdG8pOworICAgICAgICBzbG90LnNldFZhbHVlU2xvdCgmX3Byb3RvKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02NDAsNiArNjQ0LDgyIEBAIGlubGluZSBKU1Zh
bHVlKiBKU09iamVjdDo6dG9QcmltaXRpdmUoRXgKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlKGV4
ZWMsIHByZWZlcnJlZFR5cGUpOwogfQogCitpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAorewor
ICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykpKSB7CisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0ltbWVkaWF0ZTo6dG9PYmplY3QodGhpcywgZXhlYyk7
CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CisgICAgICAgIGlmICghb2JqZWN0
LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAgICBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihjb25zdF9jYXN0PEpTVmFsdWUqPih0aGlzKSk7CisgICAgUHJvcGVydHlTbG90IHNs
b3Qoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgaWYgKGNlbGwtPmdldE93blByb3BlcnR5U2xvdEludGVybmFsKGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICBBU1NFUlQoY2VsbC0+aXNPYmplY3QoKSk7CisgICAgICAgIEpT
VmFsdWUqIHByb3RvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJvdG90eXBlKCk7
CisgICAgICAgIGlmICghcHJvdG8tPmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgY2VsbCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHByb3RvKTsK
KyAgICB9Cit9CisKK2lubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKEpTSW1t
ZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IEpTSW1tZWRpYXRlOjp0b09iamVjdCh0aGlzLCBleGVjKTsKKyAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0KTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAg
fQorICAgIEpTQ2VsbCogY2VsbCA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4oYXNDZWxsKCkpOworICAg
IFByb3BlcnR5U2xvdCBzbG90KHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCkpOworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIGlmIChjZWxsLT5nZXRPd25Qcm9wZXJ0eVNsb3RJbnRlcm5h
bChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgQVNTRVJUKGNlbGwtPmlzT2JqZWN0
KCkpOworICAgICAgICBKU1ZhbHVlKiBwcm90byA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2Vs
bCktPnByb3RvdHlwZSgpOworICAgICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIGNlbGwgPSBzdGF0aWNfY2FzdDxK
U0NlbGwqPihwcm90byk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBKU1ZhbHVlOjpwdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZh
bHVlKQoreworICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykp
KSB7CisgICAgICAgIEpTSW1tZWRpYXRlOjp0b09iamVjdCh0aGlzLCBleGVjKS0+cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFzQ2Vs
bCgpLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIEpT
VmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0
aGlzKSkpIHsKKyAgICAgICAgSlNJbW1lZGlhdGU6OnRvT2JqZWN0KHRoaXMsIGV4ZWMpLT5wdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
YXNDZWxsKCktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKworaW5saW5lIGJv
b2wgSlNWYWx1ZTo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZSh0aGlzKSkpCisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6dG9PYmplY3QodGhp
cywgZXhlYyktPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJu
IGFzQ2VsbCgpLT5kZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCitpbmxp
bmUgYm9vbCBKU1ZhbHVlOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1tZWRp
YXRlKHRoaXMpKSkKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjp0b09iamVjdCh0aGlzLCBl
eGVjKS0+ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gYXND
ZWxsKCktPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlCiAKICNlbmRpZiAvLyBLSlNfT0JKRUNUX0gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9wcm9wZXJ0eV9zbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJv
cGVydHlfc2xvdC5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3By
b3BlcnR5X3Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNyArMzAsMjggQEAKIAogbmFt
ZXNwYWNlIEtKUyB7CiAKLUpTVmFsdWUgKlByb3BlcnR5U2xvdDo6dW5kZWZpbmVkR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpCitKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OnVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmdldHRhYmxlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpCitKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OnVuZ2V0dGFibGVHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUg
KlByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IHNsb3QubV9zbG90QmFzZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
OwogICAgIENhbGxEYXRhIGRhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzbG90Lm1fZGF0
YS5nZXR0ZXJGdW5jLT5nZXRDYWxsRGF0YShkYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOYXRpdmUpCi0gICAgICAgIHJldHVybiBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxs
KGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7CisgICAgICAgIHJldHVy
biBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmplY3QsIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7CiAgICAgUmVn
aXN0ZXJGaWxlU3RhY2sqIHN0YWNrID0gJmV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+cmVn
aXN0ZXJGaWxlU3RhY2soKTsKICAgICBzdGFjay0+cHVzaEZ1bmN0aW9uUmVnaXN0ZXJGaWxlKCk7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYy0+Y2FsbChleGVj
LCBvcmlnaW5hbE9iamVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNhbGwoZXhlYywgdGhpc09iamVjdCwgZXhlYy0+
ZW1wdHlMaXN0KCkpOwogICAgIHN0YWNrLT5wb3BGdW5jdGlvblJlZ2lzdGVyRmlsZSgpOwogICAg
IHJldHVybiByZXN1bHQ7ICAgIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5
X3Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5o
CShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDI0ICszOCwyNyBAQCBzdHJ1Y3QgSGFzaEVudHJ5OwogCiBj
bGFzcyBQcm9wZXJ0eVNsb3QgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpHZXRW
YWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpH
ZXRWYWx1ZU51bWVyaWNGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3Qs
IHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBQcm9wZXJ0eVNsb3Qo
KSB7IGNsZWFyQmFzZSgpOyB9CisgICAgZXhwbGljaXQgUHJvcGVydHlTbG90KEpTT2JqZWN0KiBi
YXNlKSA6IG1fc2xvdEJhc2UoYmFzZSkgeyB9CiAKLSAgICBKU1ZhbHVlKiBnZXRWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKSBjb25zdAorICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpHZXRWYWx1ZUZ1bmMp
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICB0eXBlZGVmIEpTVmFsdWUqICgqR2V0VmFsdWVOdW1lcmljRnVuYykoRXhlY1N0YXRlKiwgdW5z
aWduZWQgaW5kZXgsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworCisgICAgSlNWYWx1ZSogZ2V0VmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0
CiAgICAgeyAKICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gS0pTX1ZBTFVFX1NMT1RfTUFSS0VS
KQogICAgICAgICAgICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwogICAgICAgICBBU1NFUlQo
bV9nZXRWYWx1ZSAhPSBLSlNfTlVNRVJJQ19QUk9QRVJUWV9OQU1FX1NMT1RfTUFSS0VSKTsKLSAg
ICAgICAgcmV0dXJuIG1fZ2V0VmFsdWUoZXhlYywgb3JpZ2luYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgKnRoaXMpOyAKKyAgICAgICAgcmV0dXJuIG1fZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1l
LCAqdGhpcyk7IAogICAgIH0KIAotICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0
CisgICAgSlNWYWx1ZSogZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUpIGNvbnN0CiAgICAgeyAKICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gS0pTX1ZBTFVF
X1NMT1RfTUFSS0VSKQogICAgICAgICAgICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwogICAg
ICAgICBpZiAobV9nZXRWYWx1ZSA9PSBLSlNfTlVNRVJJQ19QUk9QRVJUWV9OQU1FX1NMT1RfTUFS
S0VSKQotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5udW1lcmljRnVuYyhleGVjLCBvcmlnaW5h
bE9iamVjdCwgcHJvcGVydHlOYW1lLCAqdGhpcyk7Ci0gICAgICAgIHJldHVybiBtX2dldFZhbHVl
KGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0
aGlzKTsgCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLm51bWVyaWNGdW5jKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgKnRoaXMpOworICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBJZGVudGlm
aWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0aGlzKTsgCiAgICAgfQogCiAgICAgdm9pZCBwdXRW
YWx1ZShKU1ZhbHVlKiB2YWx1ZSkKQEAgLTY0LDEwICs2NywxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICptX2RhdGEudmFsdWVTbG90ID0gdmFsdWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0VmFs
dWVTbG90KEpTT2JqZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSoqIHZhbHVlU2xvdCkgCisgICAgdm9p
ZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZSoqIHZhbHVlU2xvdCkgCiAgICAgeworICAgICAgICBjbGVh
ckJhc2UoKTsKICAgICAgICAgbV9nZXRWYWx1ZSA9IEtKU19WQUxVRV9TTE9UX01BUktFUjsKLSAg
ICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwogICAgICAgICBtX2RhdGEudmFsdWVTbG90ID0g
dmFsdWVTbG90OwogICAgIH0KIApAQCAtOTcsNDIgKzEwMCw1MiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRDdXN0b21OdW1lcmljKEpTT2JqZWN0KiBzbG90QmFzZSwgR2V0VmFsdWVOdW1lcmljRnVu
YyBnZXRWYWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7Ci0gICAgICAgIG1f
c2xvdEJhc2UgPSBzbG90QmFzZTsKICAgICAgICAgbV9nZXRWYWx1ZSA9IEtKU19OVU1FUklDX1BS
T1BFUlRZX05BTUVfU0xPVF9NQVJLRVI7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsK
ICAgICAgICAgbV9kYXRhLm51bWVyaWNGdW5jID0gZ2V0VmFsdWU7CiAgICAgfQogICAgIAotICAg
IHZvaWQgc2V0R2V0dGVyU2xvdChKU09iamVjdCogc2xvdEJhc2UsIEpTT2JqZWN0KiBnZXR0ZXJG
dW5jKQorICAgIHZvaWQgc2V0R2V0dGVyU2xvdChKU09iamVjdCogZ2V0dGVyRnVuYykKICAgICB7
CiAgICAgICAgIG1fZ2V0VmFsdWUgPSBmdW5jdGlvbkdldHRlcjsKLSAgICAgICAgbV9zbG90QmFz
ZSA9IHNsb3RCYXNlOwogICAgICAgICBtX2RhdGEuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgc2V0VW5kZWZpbmVkKEpTT2JqZWN0ICpzbG90QmFzZSkKKyAg
ICB2b2lkIHNldFVuZGVmaW5lZCgpCiAgICAgewotICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJh
c2U7CisgICAgICAgIGNsZWFyQmFzZSgpOwogICAgICAgICBtX2dldFZhbHVlID0gdW5kZWZpbmVk
R2V0dGVyOwogICAgIH0KIAotICAgIHZvaWQgc2V0VW5nZXR0YWJsZShKU09iamVjdCogc2xvdEJh
c2UpIC8vIFVzZWQgdG8gc2lnbmFsIHRoYXQgeW91IGhhdmUgYSBwcm9wZXJ0eSwgYnV0IHRyeWlu
ZyB0byBnZXQgaXQgYXQgdGhpcyB0aW1lIGlzIGFuIGVycm9yLgorICAgIHZvaWQgc2V0VW5nZXR0
YWJsZSgpIC8vIFVzZWQgdG8gc2lnbmFsIHRoYXQgeW91IGhhdmUgYSBwcm9wZXJ0eSwgYnV0IHRy
eWluZyB0byBnZXQgaXQgYXQgdGhpcyB0aW1lIGlzIGFuIGVycm9yLgogICAgIHsKLSAgICAgICAg
bV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBjbGVhckJhc2UoKTsKICAgICAgICAgbV9n
ZXRWYWx1ZSA9IHVuZ2V0dGFibGVHZXR0ZXI7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIHNsb3RC
YXNlKCkgY29uc3QgeyByZXR1cm4gbV9zbG90QmFzZTsgfQorICAgIEpTT2JqZWN0KiBzbG90QmFz
ZSgpIGNvbnN0IHsgQVNTRVJUKG1fc2xvdEJhc2UpOyByZXR1cm4gbV9zbG90QmFzZTsgfQorCisg
ICAgdm9pZCBzZXRCYXNlKEpTT2JqZWN0KiBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
c2xvdEJhc2UpOworICAgICAgICBtX3Nsb3RCYXNlID0gYmFzZTsKKyAgICB9CisgICAgdm9pZCBj
bGVhckJhc2UoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1fc2xvdEJhc2UgPSAw
OworI2VuZGlmCisgICAgfQogCiAgICAgY29uc3QgSGFzaEVudHJ5KiBzdGF0aWNFbnRyeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5zdGF0aWNFbnRyeTsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLmluZGV4OyB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpT
VmFsdWUqIHVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogdW5nZXR0
YWJsZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25HZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIHVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUq
IHVuZ2V0dGFibGVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkdldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgCiAgICAg
R2V0VmFsdWVGdW5jIG1fZ2V0VmFsdWU7Ci0KICAgICBKU09iamVjdCogbV9zbG90QmFzZTsKICAg
ICB1bmlvbiB7CiAgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXJGdW5jOwpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE3ICs1OCwxNyBA
QCBTdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgCiAgIHNldEludGVybmFs
VmFsdWUoanNTdHJpbmcoc3RyaW5nKSk7CiB9CiAKLUpTVmFsdWUgKlN0cmluZ0luc3RhbmNlOjps
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90ICZzbG90KQorSlNWYWx1ZSAqU3RyaW5nSW5zdGFuY2U6Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZz
bG90KQogewogICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+
KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCkpOwogfQog
Ci1KU1ZhbHVlKiBTdHJpbmdJbnN0YW5jZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZSogU3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzU3RyaW5nKHN0
YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1
ZSgpLT52YWx1ZSgpLnN1YnN0cihzbG90LmluZGV4KCksIDEpKTsKIH0KIAotc3RhdGljIEpTVmFs
dWUqIHN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3N0YXRpYyBK
U1ZhbHVlKiBzdHJpbmdJbnN0YW5jZU51bWVyaWNQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqLCB1
bnNpZ25lZCBpbmRleCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBq
c1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2UoKSktPmlu
dGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zdWJzdHIoaW5kZXgsIDEpKTsKIH0KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3N0cmluZ19vYmplY3QuaAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvc3RyaW5nX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIG5h
bWVzcGFjZSBLSlMgewogICBwcml2YXRlOgogICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIHN0YXRpYyBK
U1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpT
VmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKICAgfTsKIAogICAvLyBXZWJDb3JlIHVzZXMgdGhpcyB0byBtYWtlIHN0
eWxlLmZpbHRlciB1bmRldGVjdGFibGUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy90ZXN0a2pz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdGVzdGtqcy5jcHAJKHJldmlz
aW9uIDM0MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Rlc3RranMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAsMjIgKzI3MCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgYm9vbCBwcmV0dHlQcmludFNjcmlwdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IHNjcmlwdCkKLXsKLSAgICBpbnQgZXJyTGluZSA9IDA7Ci0gICAgVVN0cmluZyBlcnJNc2c7Ci0g
ICAgVVN0cmluZyBzY3JpcHRVU3RyaW5nKHNjcmlwdC5kYXRhKCkpOwotICAgIFJlZlB0cjxQcm9n
cmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZXIoKS5wYXJzZTxQcm9ncmFtTm9kZT4oZXhlYywg
ZmlsZU5hbWUsIDAsIFVTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNjcmlwdFVTdHJpbmcp
LCAwLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0gICAgaWYgKCFwcm9ncmFtTm9kZSkgewotICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlcy5cbiIsIGZpbGVOYW1lLlVURjhTdHJpbmcoKS5j
X3N0cigpLCBlcnJMaW5lLCBlcnJNc2cuVVRGOFN0cmluZygpLmNfc3RyKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpbnRmKCIlc1xuIiwgcHJvZ3JhbU5vZGUtPnRv
U3RyaW5nKCkuVVRGOFN0cmluZygpLmNfc3RyKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhjb25zdCBWZWN0b3I8VVN0cmluZz4mIGZpbGVOYW1l
cywgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMsIGJvb2wgcHJldHR5UHJpbnQsIGJvb2wgZHVt
cCkKK3N0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgZmls
ZU5hbWVzLCBWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cywgYm9vbCBkdW1wKQogewogICAgIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IEdsb2JhbE9iamVjdChhcmd1bWVudHMpOwog
ICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CkBAIC0zMDEsMTcgKzI4NiwxMyBAQCBzdGF0aWMgYm9v
bCBydW5XaXRoU2NyaXB0cyhjb25zdCBWZWN0b3I8CiAgICAgICAgIGlmICghZmlsbEJ1ZmZlcldp
dGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gZmFpbCBlYXJseSBzbyB3ZSBjYW4gY2F0Y2ggbWlzc2luZyBmaWxlcwogCi0gICAg
ICAgIGlmIChwcmV0dHlQcmludCkKLSAgICAgICAgICAgIHByZXR0eVByaW50U2NyaXB0KGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZSwgc2NyaXB0KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBJbnRlcnByZXRlcjo6ZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVD
aGFpbigpLCBmaWxlTmFtZSwgMCwgc2NyaXB0LmRhdGEoKSk7Ci0gICAgICAgICAgICBzdWNjZXNz
ID0gc3VjY2VzcyAmJiBjb21wbGV0aW9uLmNvbXBsVHlwZSgpICE9IFRocm93OwotICAgICAgICAg
ICAgaWYgKGR1bXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVlKCktPnRvU3RyaW5n
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS5hc2NpaSgpKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgY29tcGxl
dGlvbi52YWx1ZSgpLT50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkuYXNjaWko
KSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVy
cHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxTY29wZUNoYWluKCksIGZpbGVOYW1lLCAwLCBzY3JpcHQuZGF0YSgpKTsKKyAgICAg
ICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY29tcGxldGlvbi5jb21wbFR5cGUoKSAhPSBUaHJvdzsK
KyAgICAgICAgaWYgKGR1bXApIHsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAg
ICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgY29tcGxldGlvbi52YWx1ZSgpLT50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkuYXNjaWkoKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVl
KCktPnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS5hc2NpaSgpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gc3VjY2VzczsKQEAgLTMyMyw3ICszMDQsNyBAQCBzdGF0
aWMgdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KCkKICAgICBleGl0KC0xKTsKIH0KIAotc3RhdGlj
IHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2LCBWZWN0b3I8VVN0cmlu
Zz4mIGZpbGVOYW1lcywgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMsIGJvb2wmIHByZXR0eVBy
aW50LCBib29sJiBkdW1wKQorc3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNo
YXIqKiBhcmd2LCBWZWN0b3I8VVN0cmluZz4mIGZpbGVOYW1lcywgVmVjdG9yPFVTdHJpbmc+JiBh
cmd1bWVudHMsIGJvb2wmIGR1bXApCiB7CiAgICAgaWYgKGFyZ2MgPCAzKQogICAgICAgICBwcmlu
dFVzYWdlU3RhdGVtZW50KCk7CkBAIC0zMzcsMTAgKzMxOCw2IEBAIHN0YXRpYyB2b2lkIHBhcnNl
QXJndW1lbnRzKGludCBhcmdjLCBjaGEKICAgICAgICAgICAgIGZpbGVOYW1lcy5hcHBlbmQoYXJn
dltpXSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc3Ry
Y21wKGFyZywgIi1wIikgPT0gMCkgewotICAgICAgICAgICAgcHJldHR5UHJpbnQgPSB0cnVlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHN0cmNtcChhcmcs
ICItZCIpID09IDApIHsKICAgICAgICAgICAgIGR1bXAgPSB0cnVlOwogICAgICAgICAgICAgY29u
dGludWU7CkBAIC0zNzEsMTMgKzM0OCwxMiBAQCBpbnQga2pzbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAKICAgICBKU0xvY2sgbG9jazsKIAotICAgIGJvb2wgcHJldHR5UHJpbnQgPSBmYWxz
ZTsKICAgICBib29sIGR1bXAgPSBmYWxzZTsKICAgICBWZWN0b3I8VVN0cmluZz4gZmlsZU5hbWVz
OwogICAgIFZlY3RvcjxVU3RyaW5nPiBhcmd1bWVudHM7Ci0gICAgcGFyc2VBcmd1bWVudHMoYXJn
YywgYXJndiwgZmlsZU5hbWVzLCBhcmd1bWVudHMsIHByZXR0eVByaW50LCBkdW1wKTsKKyAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBmaWxlTmFtZXMsIGFyZ3VtZW50cywgZHVtcCk7CiAK
LSAgICBib29sIHN1Y2Nlc3MgPSBydW5XaXRoU2NyaXB0cyhmaWxlTmFtZXMsIGFyZ3VtZW50cywg
cHJldHR5UHJpbnQsIGR1bXApOworICAgIGJvb2wgc3VjY2VzcyA9IHJ1bldpdGhTY3JpcHRzKGZp
bGVOYW1lcywgYXJndW1lbnRzLCBkdW1wKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBDb2xsZWN0
b3I6OmNvbGxlY3QoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcAkocmV2aXNpb24gMzQxNTEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiAr
MjE3LDc1IEBAIENvbnN0cnVjdFR5cGUgSlNDZWxsOjpnZXRDb25zdHJ1Y3REYXRhKEMKICAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZU5vbmU7CiB9CiAKK2Jvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgLy8gVGhpcyBpcyBub3QgYSBnZW5lcmFsIHB1cnBvc2Ug
aW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlTbG90LgorICAgIC8vIEl0IHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBieSBKU1ZhbHVlOjpnZXQuCisgICAgLy8gSXQgY2FsbHMgZ2V0UHJvcGVy
dHlTbG90LCBub3QgZ2V0T3duUHJvcGVydHlTbG90LgorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0
b09iamVjdChleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKSB7
CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBzbG90LnNldEJhc2Uob2JqZWN0KTsKKyAgICBpZiAoIW9iamVjdC0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBzbG90LnNldFVuZGVmaW5l
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIC8vIFRoaXMgaXMgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIGltcGxlbWVudGF0
aW9uIG9mIGdldE93blByb3BlcnR5U2xvdC4KKyAgICAvLyBJdCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYnkgSlNWYWx1ZTo6Z2V0LgorICAgIC8vIEl0IGNhbGxzIGdldFByb3BlcnR5U2xvdCwgbm90
IGdldE93blByb3BlcnR5U2xvdC4KKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9PYmplY3QoZXhl
Yyk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkgeworICAgICAgICBz
bG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgc2xv
dC5zZXRCYXNlKG9iamVjdCk7CisgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVj
LCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU0NlbGw6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB0b09iamVjdChleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm47CisgICAgb2JqZWN0LT5wdXQoZXhlYywgaWRlbnRp
ZmllciwgdmFsdWUpOworfQorCit2b2lkIEpTQ2VsbDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaWRlbnRpZmllciwgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IHRvT2JqZWN0KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgICAgIHJldHVybjsKKyAgICBvYmplY3QtPnB1dChleGVjLCBpZGVudGlmaWVyLCB2
YWx1ZSk7Cit9CisKK2Jvb2wgSlNDZWxsOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9
IHRvT2JqZWN0KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gb2JqZWN0LT5kZWxldGVQcm9wZXJ0
eShleGVjLCBpZGVudGlmaWVyKTsKK30KKworYm9vbCBKU0NlbGw6OmRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllcikKK3sKKyAgICBKU09iamVjdCogb2Jq
ZWN0ID0gdG9PYmplY3QoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBvYmplY3QtPmRlbGV0ZVBy
b3BlcnR5KGV4ZWMsIGlkZW50aWZpZXIpOworfQorCitKU09iamVjdCogSlNDZWxsOjp0b1RoaXNP
YmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiB0b09iamVjdChleGVj
KTsKK30KKwogSlNDZWxsKiBqc1N0cmluZyhjb25zdCBjaGFyKiBzKQogewogICAgIHJldHVybiBu
ZXcgU3RyaW5nSW1wKHMgPyBzIDogIiIpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHJldmlzaW9uIDM0
MTUxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDEwIEBACiBuYW1lc3BhY2UgS0pTIHsKIAogY2xhc3MgRXhlY1N0YXRlOworY2xhc3Mg
SWRlbnRpZmllcjsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNDZWxsOworY2xhc3MgUHJvcGVy
dHlTbG90OwogCiBzdHJ1Y3QgQ2xhc3NJbmZvOwogc3RydWN0IEluc3RydWN0aW9uOwpAQCAtMTIx
LDYgKzEyMywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludDMyX3QgdG9JbnQzMlNsb3dDYXNl
KGRvdWJsZSwgYm9vbCYgb2spOwogICAgIHN0YXRpYyB1aW50MzJfdCB0b1VJbnQzMlNsb3dDYXNl
KGRvdWJsZSwgYm9vbCYgb2spOwogCisgICAgLy8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhl
IHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KKyAgICBKU1ZhbHVlKiBnZXQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBKU1ZhbHVlKiBn
ZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2b2lkIHB1
dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsK
KyAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUq
KTsKKyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSk7CisgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpOworICAgIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRl
KikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgaW50MzJfdCB0b0ludDMyU2xvd0Nhc2UoRXhlY1N0
YXRlKiwgYm9vbCYgb2spIGNvbnN0OwogICAgIHVpbnQzMl90IHRvVUludDMyU2xvd0Nhc2UoRXhl
Y1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0OwpAQCAtMTM2LDEyICsxNDcsNyBAQCBwcml2YXRlOgog
CiBjbGFzcyBKU0NlbGwgOiBwdWJsaWMgSlNWYWx1ZSB7CiAgICAgZnJpZW5kIGNsYXNzIENvbGxl
Y3RvcjsKLSAgICBmcmllbmQgY2xhc3MgTnVtYmVySW1wOwotICAgIGZyaWVuZCBjbGFzcyBTdHJp
bmdJbXA7Ci0gICAgZnJpZW5kIGNsYXNzIEpTT2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBHZXR0
ZXJTZXR0ZXJJbXA7Ci0gICAgZnJpZW5kIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7Ci1w
cml2YXRlOgorcHJvdGVjdGVkOgogICAgIEpTQ2VsbCgpOwogICAgIHZpcnR1YWwgfkpTQ2VsbCgp
OwogcHVibGljOgpAQCAtMTgwLDYgKzE4NiwyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCAqb3BlcmF0
b3IgbmV3KHNpemVfdCk7CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICBib29sIG1hcmtl
ZCgpIGNvbnN0OworCisgICAgLy8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0
IG9wZXJhdGlvbiBpbmNsdWRlZC4KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAg
dmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlz
T2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OworCisgICAgLy8gU3BlY2lhbCB2ZXJzaW9uIG9mIGdl
dE93blByb3BlcnR5U2xvdCB0aGF0IGluY2x1ZGVzIHRvT2JqZWN0LgorICAgIC8vIEZvciBub24t
b2JqZWN0cywgdGhpcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdCBhbmQgYWxzbyBhbHdheXMg
cmV0dXJucyB0cnVlLgorICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90SW50ZXJuYWwoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBib29sIGdldE93blByb3BlcnR5U2xvdEludGVybmFsKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisKK3ByaXZhdGU6CisgICAgLy8gU3BlY2lhbCB2
ZXJzaW9uIG9mIGdldE93blByb3BlcnR5U2xvdCB0aGF0IGluY2x1ZGVzIHRvT2JqZWN0LgorICAg
IC8vIEZvciBub24tb2JqZWN0cywgdGhpcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdCBhbmQg
YWxzbyBhbHdheXMgcmV0dXJucyB0cnVlLgorICAgIC8vIEJlY2F1c2Ugb2YgdGhpcywgaXQncyBw
cml2YXRlIHNvIGNhbGxlcnMgZG9uJ3QgZ2V0IGl0IHdoZW4gdGhleSB3YW50IHRoZSAicmVhbCIg
Z2V0T3duUHJvcGVydHlTbG90LgorICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiB9OwogCiBjbGFzcyBOdW1iZXJJbXAg
OiBwdWJsaWMgSlNDZWxsIHsKQEAgLTE5Niw3ICsyMjEsOCBAQCBwdWJsaWM6CiAgIHZpcnR1YWwg
ZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3Q7CiAgIHZpcnR1YWwgVVN0cmlu
ZyB0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OwogICB2aXJ0dWFsIEpTT2JqZWN0KiB0
b09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OwotICAKKyAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CisKICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCBzaXplKQogICB7CiAjaWZkZWYgSkFWQVNDUklQVENPUkVfQlVJTERJTkdfQUxMX0lO
X09ORV9GSUxFCkBAIC01ODMsNiArNjA5LDIzIEBAIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0
b1VJbnQzMihFeGVjU3QKICAgICByZXR1cm4gdG9VSW50MzJTbG93Q2FzZShleGVjLCBvayk7CiB9
CiAKK2lubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK3sKKyAgICBpZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHRo
aXMpKSkKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjp0b09iamVjdCh0aGlzLCBleGVjKTsK
KyAgICByZXR1cm4gYXNDZWxsKCktPnRvVGhpc09iamVjdChleGVjKTsKK30KKworaW5saW5lIGJv
b2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
KworaW5saW5lIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RJbnRlcm5hbChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmIC8vIEtKU19WQUxVRV9ICkluZGV4OiBKYXZh
U2NyaXB0Q29yZS93dGYvQWx3YXlzSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL0Fsd2F5c0lubGluZS5oCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRDb3Jl
L3d0Zi9BbHdheXNJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM3LDMgKzM3LDExIEBACiAj
ZGVmaW5lIE5FVkVSX0lOTElORQogI2VuZGlmCiAjZW5kaWYKKworI2lmbmRlZiBVTkxJS0VMWQor
I2lmIENPTVBJTEVSKEdDQykKKyNkZWZpbmUgVU5MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCgo
eCksIDApCisjZWxzZQorI2RlZmluZSBVTkxJS0VMWSh4KSAoeCkKKyNlbmRpZgorI2VuZGlmCklu
ZGV4OiBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEds
dWUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNDE1MSkKKysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDA4LTA1LTI3ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICAtIHVwZGF0ZSBmb3IgSmF2YVNjcmlwdENv
cmUgY2hhbmdlcyBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MjY5CisgICAgICAgICAgc3BlZWQgdXAgU3VuU3BpZGVyIGJ5IGVsaW1pbmF0aW5nIHRoZSB0b09i
amVjdCBjYWxsIGZvciBtb3N0IGdldC9wdXQvZGVsZXRlCisKKyAgICAgICAgKiBVc2VyT2JqZWN0
SW1wLmNwcDoKKyAgICAgICAgKFVzZXJPYmplY3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIpOiBSZW1v
dmVkIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50LgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDog
RGl0dG8uCisKIDIwMDgtMDUtMTAgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Vc2Vy
T2JqZWN0SW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1w
LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgVXNlck9iamVjdEltcDo6
Z2V0UHJvcGVydHlOYW1lcyhFeGUKICAgICBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhleGVj
LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAotSlNWYWx1ZSAqVXNlck9iamVjdEltcDo6dXNlck9iamVj
dEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBVc2VyT2JqZWN0SW1w
Ojp1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFVzZXJPYmplY3RJbXAgKnRo
aXNPYmogPSBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAg
ICAgLy8gZ2V0T3duUHJvcGVydHlTbG90IHNob3VsZCBoYXZlIGd1YXJkZWQgYWdhaW5zdCBhIG51
bGwgZkpTVXNlck9iamVjdC4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlzaW9uIDM0
MTUxKQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw4ICs1OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCiAgICAg
SlNVc2VyT2JqZWN0ICpHZXRKU1VzZXJPYmplY3QoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBz
dGF0aWMgSlNWYWx1ZSAqdXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKm9y
aWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiB1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7
CiAKICAgICBKU1VzZXJPYmplY3QqIGZKU1VzZXJPYmplY3Q7CiB9OwpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTUx
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAor
MjAwOC0wNS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNjkKKyAgICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIg
YnkgZWxpbWluYXRpbmcgdGhlIHRvT2JqZWN0IGNhbGwgZm9yIG1vc3QgZ2V0L3B1dC9kZWxldGUK
KworICAgICAgICBFbGltaW5hdGUgdGhlIG9yaWdpbmFsT2JqZWN0IGFyZ3VtZW50IGZyb20gcHJv
cGVydHkgZ2V0dGVyIGZ1bmN0aW9uczsgaXQncyBubyBsb25nZXIKKyAgICAgICAgYXZhaWxhYmxl
IGFuZCB3YXMgdXNlZCBvbmx5IGZvciBKYXZhU2NyaXB0IGZ1bmN0aW9uLWJhc2VkIGdldHRlcnMg
YW5kIHNldHRlcnMuCisKKyAgICAgICAgVXBkYXRlZCBjYWxsZXJzIG9mIFByb3BlcnR5U2xvdDo6
c2V0VW5kZWZpbmVkLiBJdCBubyBsb25nZXIgdGFrZXMgYSBiYXNlIGFyZ3VtZW50LgorCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZhbHVlR2V0dGVy
KTogUmVtb3ZlZCB0aGUgb3JpZ2luYWxPYmplY3QKKyAgICAgICAgYXJndW1lbnQuCisgICAgICAg
IChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3duUHJvcGVydHlTbG90
KTogQ2hhbmdlZCB0byBpbml0aWFsaXplIHRoZQorICAgICAgICBQcm9wZXJ0eVNsb3Qgd2l0aCB0
aGUgb3JpZ2luYWwgb2JqZWN0IC0tIHRoaXMgaXMgYSBuZXcgcmVxdWlyZW1lbnQuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDYW52YXNQaXhlbEFycmF5OjppbmRleEdldHRlcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6Y2hpbGRGcmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6bmFt
ZWRJdGVtR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OmN1c3RvbUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0hUTUxBcHBsZXRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TENvbGxlY3Rpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpuYW1l
R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTEZyYW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxPYmplY3RFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpjdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6Y3VzdG9tR2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNOYW1l
ZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TmFtZWROb2Rlc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVMaXN0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3Q6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNQbHVnaW5DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW46Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTU3RvcmFnZTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hl
ZXRMaXN0OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6b2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAg
ICogYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
aHRtbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0R2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2h0bWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAg
ICAgIChPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoUnVudGltZUFycmF5OjpsZW5n
dGhHZXR0ZXIpOgorICAgICAgICAoUnVudGltZUFycmF5OjppbmRleEdldHRlcik6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRo
b2QuY3BwOgorICAgICAgICAoUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAg
KiBicmlkZ2UvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwOgorICAgICAgICAoUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplY3RHZXR0ZXIp
OgorICAgICAgICAoUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIpOgorICAgICAgICAoUnVu
dGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9v
YmplY3QuaDoKKyAgICAgICAgUmVtb3ZlZCBvcmlnaW5hbE9iamVjdCBhcmd1bWVudHMgZnJvbSBn
ZXR0ZXIgZm5jdGlvbnMgYW5kIGJhc2UgYXJndW1lbnRzIGZyb20KKyAgICAgICAgY2FsbHMgdG8g
c2V0VW5kZWZpbmVkLgorCiAyMDA4LTA1LTI3ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVv
bGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeC4gQWNjaWRlbnRseSBsZWZ0IGEg
Y291cGxlIGZpeGVzIG91dCBvZiB0aGUgcHJldmlvdXMgY29tbWl0LgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2
aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw4ICsxMjMsNyBAQCBib29sIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y2FuR2V0SXRlbXNGCiAKIC8vIEZJWE1FOiBZb3UgY2FuIGdldCB0
aGVzZSBwcm9wZXJ0aWVzLCBhbmQgc2V0IHRoZW0gKHNlZSBjdXN0b21QdXQgYmVsb3cpLAogLy8g
YnV0IHlvdSBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIGVudW1lcmF0ZSB0aGVtLgotSlNWYWx1ZSog
SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9yaWdpbmFsT2JqZWN0LAotICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNDU1NTdHlsZURlY2xhcmF0aW9u
OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDU1NTdHlsZURlY2xhcmF0
aW9uKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNDU1NTdHlsZURlY2xhcmF0aW9uKj4oc2xvdC5z
bG90QmFzZSgpKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJy
YXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQ
aXhlbEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1K
U1ZhbHVlKiBKU0NhbnZhc1BpeGVsQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTQ2FudmFzUGl4ZWxBcnJheTo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBDYW52YXNQaXhlbEFycmF5KiBhcnJheSA9IHN0YXRpY19j
YXN0PEpTQ2FudmFzUGl4ZWxBcnJheSo+KHNsb3Quc2xvdEJhc2UoKSktPmltcGwoKTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IHNsb3QuaW5kZXgoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsMTcgKzUxMywxNyBA
QCBKU1ZhbHVlICpKU0RPTVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVyCiAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dCYXNlOjpjaGlsZEZyYW1lR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTRE9NV2luZG93QmFz
ZTo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiB0b0pT
KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHNsb3Quc2xvdEJhc2UoKSktPmlt
cGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkt
PmRvbVdpbmRvdygpKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dCYXNlOjppbmRleEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6aW5kZXhHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFz
ZSo+KHNsb3Quc2xvdEJhc2UoKSktPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChzbG90
LmluZGV4KCkpLT5kb21XaW5kb3coKSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6
bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNE
T01XaW5kb3dCYXNlKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBEb2N1bWVudCogZG9jID0gdGhp
c09iai0+aW1wbCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpOwpAQCAtNTU5LDcgKzU1OSw3IEBAIGJv
b2wgSlNET01XaW5kb3dCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAgICAgICAgIGlmIChh
bGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICAgICAgICAgIHNsb3Quc2V0U3RhdGljRW50
cnkodGhpcywgZW50cnksIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNsb3Qu
c2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPEpTRE9NV2luZG93
QmFzZT4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MSw3ICs1NzEsNyBAQCBib29sIEpT
RE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgaWYgKHByb3RvLT5pc09iamVj
dCgpKSB7CiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvKS0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgIGlmICgh
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAgICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5l
ZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC01ODgsNyArNTg4LDcgQEAgYm9v
bCBKU0RPTVdpbmRvd0Jhc2U6OmdldE93blByb3BlcnR5U2xvdAogICAgIH0KIAogICAgIGlmICgh
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkgewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlz
KTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9u
IDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQxLDkgKzE0MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
S0pTOjpKU1ZhbHVlKiBnZXRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRMaXN0ZW5lcihLSlM6OkV4
ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBLSlM6OkpTVmFsdWUqIGZ1
bmN0aW9uKTsKIAotICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBjaGlsZEZyYW1lR2V0dGVy
KEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYs
IGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFsdWUq
IGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6
SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBL
SlM6OkpTVmFsdWUqIG5hbWVkSXRlbUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmpl
Y3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwor
ICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBjaGlsZEZyYW1lR2V0dGVyKEtKUzo6RXhlY1N0
YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgc3RhdGljIEtKUzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoS0pTOjpFeGVjU3RhdGUq
LCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAg
ICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBuYW1lZEl0ZW1HZXR0ZXIoS0pTOjpFeGVjU3RhdGUq
LCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwogCiAg
ICAgICAgIHZvaWQgY2xlYXJIZWxwZXJPYmplY3RQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHZvaWQg
Y2xlYXJBbGxUaW1lb3V0cygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTRE9NV2luZG93OjpjdXN0b21HZQogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgaGF2ZSBhIG1lc3NhZ2UgaGVyZSB0aGF0IGV4cGxhaW5zIHdoeSB0aGUgcHJvcGVydHkgYWNj
ZXNzL2Z1bmN0aW9uIGNhbGwgd2FzCiAgICAgICAgIC8vIG5vdCBhbGxvd2VkLiAKLSAgICAgICAg
c2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjYW5H
ZXRJdGVtc0ZvcgogICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9v
YmplY3QiOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxBcHBsZXRFbGVtZW50OjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRN
TEFwcGxldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1
cm4gcnVudGltZU9iamVjdEdldHRlcihleGVjLCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKKyAgICByZXR1cm4gcnVudGltZU9iamVjdEdldHRlcihleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIGJvb2wgSlNIVE1MQ29sbGVjdGlvbjo6Y2Fu
R2V0SXRlbXNGb3JOYW0KICAgICByZXR1cm4gIWdldE5hbWVkSXRlbXMoZXhlYywgdGhpc09iaiwg
cHJvcGVydHlOYW1lKS0+aXNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MQ29sbGVj
dGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlKiBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgSlNIVE1MQ29sbGVjdGlvbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRN
TENvbGxlY3Rpb24qPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBnZXROYW1lZEl0ZW1z
KGV4ZWMsIHRoaXNPYmotPmltcGwoKSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgSlNIVE1MRG9jdW1lbnQ6OmNhbkdldEl0ZW1zRm9y
TmFtZSgKICAgICByZXR1cm4gYXRvbWljUHJvcGVydHlOYW1lICYmIChkb2N1bWVudC0+aGFzTmFt
ZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkgfHwgZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVt
KGF0b21pY1Byb3BlcnR5TmFtZSkpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlKiBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTSFRNTERvY3VtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRG9jdW1lbnQqPihz
bG90LnNsb3RCYXNlKCkpOwogICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRG9jdW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6OmNh
bkdldEl0ZW1zRm9yTgogICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGlt
ZV9vYmplY3QiOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxFbWJlZEVsZW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNI
VE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0
dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgb3JpZ2luYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CisgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0
MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgYm9vbCBKU0hUTUxGb3JtRWxlbWVudDo6
Y2FuR2V0SXRlbXNGb3JOYQogICAgIHJldHVybiBuYW1lZEl0ZW1zLnNpemUoKTsKIH0KIAotSlNW
YWx1ZSogSlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSogSlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oc2xvdC5zbG90QmFzZSgp
KS0+aW1wbCgpKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVT
ZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpjYW5HZXRJ
dGVtc0YKICAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpOwog
fQogCi1KU1ZhbHVlKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNIVE1MRnJhbWVT
ZXRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRWxl
bWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihzbG90LnNsb3RCYXNl
KCkpOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pih0aGlzT2JqLT5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmpl
Y3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDkgKzU4LDkgQEAgYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpjYW5HZXRJdGVtc0Zv
cgogICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwog
fQogCi1KU1ZhbHVlKiBKU0hUTUxPYmplY3RFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTSFRNTE9iamVjdEVs
ZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4gcnVudGlt
ZU9iamVjdEdldHRlcihleGVjLCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
KyAgICByZXR1cm4gcnVudGltZU9iamVjdEdldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBi
b29sIEpTSGlzdG9yeTo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90CiAgICAgfQogCiAgICAgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZShpbXBsKCktPmZyYW1lKCksIG1lc3NhZ2UpOwotICAgIHNs
b3Quc2V0VW5kZWZpbmVkKHRoaXMpOworICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJvb2wgSlNMb2NhdGlv
bjo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG8KIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCkt
PmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0
aGlzKTsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tR2V0T3du
UHJvcGVydHlTbG8KICAgICAvLyBzdWNoIGNhc2VzIHdoZW4gbm9ybWFsbHkgdGhlIHN0cmluZyBm
b3JtIG9mIExvY2F0aW9uIHdvdWxkIGJlIHRoZSBVUkwuCiAKICAgICBwcmludEVycm9yTWVzc2Fn
ZUZvckZyYW1lKGZyYW1lLCBtZXNzYWdlKTsKLSAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsK
KyAgICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lv
biAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBib29sIEpTTWltZVR5cGVBcnJheTo6
Y2FuR2V0SXRlbXNGb3JOYW1lCiAgICAgcmV0dXJuIG1pbWVUeXBlQXJyYXktPmNhbkdldEl0ZW1z
Rm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU01pbWVUeXBlQXJyYXk6Om5h
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSogSlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNNaW1lVHlwZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFycmF5
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBs
KCktPm5hbWVHZXR0ZXIocHJvcGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBib29sIEpTTmFtZWROb2RlTWFwOjpjYW5HZXRJdGVtc0Zvck5hbWUoCiAg
ICAgcmV0dXJuIGltcGwtPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVl
KiBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
cmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIEpTTmFtZWROb2RlTWFwKiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8SlNOYW1lZE5vZGVNYXAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0b0pTKGV4
ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxMyBAQCBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uOjpKU05hbWVkTm9kZXNDb2xsCiB7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0Nv
bGxlY3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5h
bE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05hbWVkTm9kZXNDb2xsZWN0aW9uKiB0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5vZGVzQ29sbGVjdGlvbio+KHNsb3Quc2xvdEJhc2UoKSk7
CiAgICAgcmV0dXJuIGpzTnVtYmVyKHRoaXNPYmotPm1fbm9kZXMuc2l6ZSgpKTsKIH0KIAotSlNW
YWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05hbWVkTm9kZXND
b2xsZWN0aW9uICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5vZGVzQ29sbGVjdGlvbio+
KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9ub2Rl
c1tzbG90LmluZGV4KCldLmdldCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1l
ZE5vZGVzQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNO
YW1lZE5vZGVzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0
NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xh
c3NJbmZvIHNfaW5mbzsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBLSlM6OkpTVmFs
dWUqIGxlbmd0aEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBL
SlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0
aWMgS0pTOjpKU1ZhbHVlKiBpbmRleEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmpl
Y3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwor
ICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoS0pTOjpFeGVjU3RhdGUq
LCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAg
ICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBpbmRleEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNv
bnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAg
ICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fbm9kZXM7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw3IEBAIGJvb2wgSlNOb2RlTGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEtKUzoKICAg
ICByZXR1cm4gaW1wbC0+aXRlbVdpdGhOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUtKUzo6SlNW
YWx1ZSogSlNOb2RlTGlzdDo6bmFtZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpK
U09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYgc2xvdCkKK0tKUzo6SlNWYWx1ZSogSlNOb2Rl
TGlzdDo6bmFtZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTTm9kZUxpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05vZGVMaXN0Kj4oc2xvdC5zbG90
QmFzZSgpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPml0ZW1XaXRo
TmFtZShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5B
cnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdp
bkFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
IGJvb2wgSlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEUKICAgICByZXR1cm4gcGx1
Z2luQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVl
KiBKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9y
aWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBKU1BsdWdpbkFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
SlNQbHVnaW5BcnJheSo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
dGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAgYm9vbCBKU1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdAogICAgIHJl
dHVybiBwbHVnaW4tPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1Zh
bHVlKiBKU1BsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmln
aW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU1BsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIEpTUGx1Z2luKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW4qPihz
bG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+
bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiAzNDE1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBK
U1F1YXJhbnRpbmUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXIqPihvYmplY3QpOwogfQogCi1KU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogSlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXI6OmNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNWYWx1ZSogdiA9IHNsb3Qu
c2xvdEJhc2UoKTsKICAgICBBU1NFUlQodik7CkBAIC0xMDMsMTQgKzEwMywxNCBAQCB2b2lkIEpT
UXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjptYXJrKCkKIGJvb2wgSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIWFsbG93
c0dldFByb3BlcnR5KCkpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAg
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIFByb3BlcnR5U2xvdCB1bndyYXBwZWRTbG90OworICAgIFByb3BlcnR5U2xvdCB1bndyYXBw
ZWRTbG90KG1fdW53cmFwcGVkT2JqZWN0KTsKICAgICBib29sIHJlc3VsdCA9IG1fdW53cmFwcGVk
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZp
ZXIsIHVud3JhcHBlZFNsb3QpOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgSlNWYWx1ZSog
dW53cmFwcGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0
ZSgpLCBtX3Vud3JhcHBlZE9iamVjdCwgaWRlbnRpZmllcik7CisgICAgICAgIEpTVmFsdWUqIHVu
d3JhcHBlZFZhbHVlID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUo
KSwgaWRlbnRpZmllcik7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4od3JhcE91dGdvaW5nVmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFZh
bHVlKSksIGNhY2hlZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKQEAgLTEyMiwxNCArMTIyLDE0IEBA
IGJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldE93blAKIGJvb2wgSlNRdWFyYW50
aW5lZE9iamVjdFdyYXBwZXI6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIWFsbG93
c0dldFByb3BlcnR5KCkpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7CisgICAg
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIFByb3BlcnR5U2xvdCB1bndyYXBwZWRTbG90OworICAgIFByb3BlcnR5U2xvdCB1bndyYXBw
ZWRTbG90KG1fdW53cmFwcGVkT2JqZWN0KTsKICAgICBib29sIHJlc3VsdCA9IG1fdW53cmFwcGVk
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZp
ZXIsIHVud3JhcHBlZFNsb3QpOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgSlNWYWx1ZSog
dW53cmFwcGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0
ZSgpLCBtX3Vud3JhcHBlZE9iamVjdCwgaWRlbnRpZmllcik7CisgICAgICAgIEpTVmFsdWUqIHVu
d3JhcHBlZFZhbHVlID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUo
KSwgaWRlbnRpZmllcik7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4od3JhcE91dGdvaW5nVmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFZh
bHVlKSksIGNhY2hlZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDM0MTUx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1ZhbHVlKEtKUzo6RXhlY1N0YXRl
KiB1bndyYXBwZWRFeGVjLCBLSlM6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBjYWNoZWRWYWx1
ZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50
aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgS0pTOjpK
U1ZhbHVlKiBjYWNoZWRWYWx1ZUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRl
bnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgdm9pZCB0cmFu
c2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRlKEtKUzo6RXhlY1N0YXRlKikgY29uc3Q7CiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM0MTUxKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNTdG9yYWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhl
Y1MKICAgICByZXR1cm4gaW1wbC0+Y29udGFpbnMocHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1
ZSogSlNTdG9yYWdlOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUqIEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIEpTU3RvcmFnZSogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3RvcmFnZSo+
KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKHRoaXNPYmotPmlt
cGwoKS0+Z2V0SXRlbShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiwxNCArMzEsMTYgQEAKICNpbmNsdWRlICJT
dHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKIAordXNpbmcgbmFtZXNw
YWNlIEtKUzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTU3R5bGVTaGVldExpc3Q6
OmNhbkdldEl0ZW1zRm9yTmFtZShLSlM6OkV4ZWNTdGF0ZSosIFN0eWxlU2hlZXRMaXN0KiBzdHls
ZVNoZWV0TGlzdCwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitib29sIEpT
U3R5bGVTaGVldExpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBTdHlsZVNoZWV0
TGlzdCogc3R5bGVTaGVldExpc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsK
ICAgICByZXR1cm4gc3R5bGVTaGVldExpc3QtPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwog
fQogCi1LSlM6OkpTVmFsdWUqIEpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIoS0pTOjpFeGVj
U3RhdGUqIGV4ZWMsIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBKU1N0eWxl
U2hlZXRMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNTdHlsZVNo
ZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3R5bGVTaGVldExpc3QqPihzbG90LnNs
b3RCYXNlKCkpOwogICAgIEhUTUxTdHlsZUVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzT2JqLT5pbXBs
KCktPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfYmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
YmluZGluZy5jcHAJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
YmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNCwxMyArMzM0LDEzIEBAIHZvaWQgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnIKICAgICAgICAgd2luZG93LT5wcmludEVy
cm9yTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIG5vbkNhY2hp
bmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGNvbnN0IEhh
c2hFbnRyeSogZW50cnkgPSBzbG90LnN0YXRpY0VudHJ5KCk7CiAgICAgcmV0dXJuIG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBlbnRyeS0+bGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5m
dW5jdGlvblZhbHVlKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlv
bkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOwogfQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw4ICsxNDIs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUo
S0pTOjpFeGVjU3RhdGUqLCBGcmFtZSopOwogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1l
KEtKUzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgIHZvaWQgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0g
ICAgS0pTOjpKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7Ci0gICAgS0pTOjpKU1ZhbHVlKiBvYmplY3RU
b1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNv
bnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlByb3BlcnR5U2xv
dCYpOworICAgIEtKUzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEtK
Uzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAgS0pTOjpKU1ZhbHVlKiBvYmplY3RUb1N0cmluZ0Z1
bmN0aW9uR2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDM0MTUxKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDE0ICs1OCwxNCBAQCBzdGF0aWMgSlNPYmplY3QqIGdldFJ1bnRpbWVPYmplY3QoRXhlY1N0CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogcnVudGltZU9iamVj
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1w
bCgpKTsKICAgICByZXR1cm4gZ2V0UnVudGltZU9iamVjdChleGVjLCBlbGVtZW50KTsKIH0KIAot
SlNWYWx1ZSogcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBz
dGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgp
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmgJKHJldmlzaW9uIDM0MTUxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBSdW50aW1lIG9iamVjdCBzdXBwb3J0IGNvZGUg
Zm9yIEpTSFRNTEFwcGxldEVsZW1lbnQsIEpTSFRNTEVtYmVkRWxlbWVudCBhbmQgSlNIVE1MT2Jq
ZWN0RWxlbWVudC4KICAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSB0byBhIG1vcmUgYXBwcm9wcmlh
dGUgcGxhY2UuCiAKLSAgICBLSlM6OkpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoS0pTOjpF
eGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3Qg
S0pTOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBLSlM6OkpTVmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9w
ZXJ0eUdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAgIEtKUzo6SlNWYWx1ZSog
cnVudGltZU9iamVjdEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmll
ciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAgS0pTOjpKU1ZhbHVlKiBydW50aW1l
T2JqZWN0UHJvcGVydHlHZXR0ZXIoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZp
ZXImLCBjb25zdCBLSlM6OlByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcnVudGltZU9iamVjdEN1
c3RvbUdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRp
ZmllciYsIEtKUzo6UHJvcGVydHlTbG90JiwgSlNIVE1MRWxlbWVudCosIEhUTUxFbGVtZW50Kik7
CiAgICAgYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3Qg
S0pTOjpJZGVudGlmaWVyJiwgS0pTOjpKU1ZhbHVlKiwgSFRNTEVsZW1lbnQqKTsKICAgICBib29s
IHJ1bnRpbWVPYmplY3RJbXBsZW1lbnRzQ2FsbChIVE1MRWxlbWVudCopOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAzNDE1MSkK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTU3Myw3ICs1NzMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgSW5k
ZXggZ2V0dGVyCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0lu
ZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9t
SW5kZXhHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBLSlM6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVj
dCosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgS0pTOjpKU1ZhbHVl
KiBpbmRleEdldHRlcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIGNv
bnN0IEtKUzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICB9CiAKICAgICAjIEluZGV4IHNldHRl
cgpAQCAtNTg0LDcgKzU4NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOYW1lR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgewogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShLSlM6OkV4ZWNT
dGF0ZSosICRpbXBsQ2xhc3NOYW1lKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJik7XG4iKTsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBuYW1l
R2V0dGVyKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIGNvbnN0IEtKUzo6SWRlbnRp
ZmllciYsIGNvbnN0IEtKUzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgS0pTOjpKU1ZhbHVlKiBuYW1lR2V0dGVyKEtKUzo6RXhl
Y1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgY29uc3QgS0pTOjpQcm9wZXJ0eVNsb3Qm
KTtcbiIpOwogICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKQEAg
LTEzMDcsNyArMTMwNyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0p
IHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbkpTVmFsdWUqICR7Y2xhc3NOYW1lfTo6
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5KU1ZhbHVlKiAke2NsYXNzTmFtZX06
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05h
bWV9KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHNsb3Quc2xvdEJhc2UoKSk7
XG4iKTsKICAgICAgICAgaWYgKEluZGV4R2V0dGVyUmV0dXJuc1N0cmluZ3MoJGltcGxDbGFzc05h
bWUpKSB7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMzQxNTEpCisr
KyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTMgKzM4LDEzIEBAIFJ1bnRpbWVBcnJheTo6UnVudGltZUFycmF5KEV4ZWNTdGF0ZSAqZXgKIHsK
IH0KIAotSlNWYWx1ZSAqUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSAqUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkgKnRo
aXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAg
ICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+Z2V0TGVuZ3RoKCkpOwogfQogCi1KU1ZhbHVlICpS
dW50aW1lQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUnVudGlt
ZUFycmF5OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5ICp0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8UnVudGltZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJu
IHRoaXNPYmotPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBzbG90LmluZGV4KCkp
OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgT3duUHRyPEJpbmRpbmdzOjpBcnJh
eT4gX2FycmF5OwogfTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9u
IDM0MTUxKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIFJ1bnRpbWVNZXRob2Q6OlJ1bnRpbWVNZXRob2QoRXhlY1N0
YXRlICoKIHsKIH0KIAotSlNWYWx1ZSAqUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUgKlJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRp
bWVNZXRob2QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kICo+KHNsb3Quc2xv
dEJhc2UoKSk7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMzQxNTEp
CisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICos
IEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIE93blB0cjxCaW5kaW5nczo6TWV0aG9k
TGlzdD4gX21ldGhvZExpc3Q7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAko
cmV2aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSdW50aW1lT2JqZWN0SW1wOjppbnZh
bGlkYXRlKCkKICAgICBpbnN0YW5jZSA9IDA7CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJ
bXA6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgUnVudGltZU9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVPYmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBSZWZQdHI8QmluZGluZ3M6
Okluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtNzEsNyArNzEsNyBA
QCBKU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmllbGRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsgICAgCiAgICAgUnVudGltZU9iamVjdEltcCAqdGhp
c09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgICBSZWZQdHI8QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPmluc3Rh
bmNlOwpAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpmaWVsZEdl
dHRlcihFCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSAqUnVudGltZU9iamVjdElt
cDo6bWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUqIFJ1
bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1
bnRpbWVPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wICo+
KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFu
Y2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2
aXNpb24gMzQxNTEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw5ICs2Miw5IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgUnVudGlt
ZU9iamVjdEltcCgpOyAvLyBwcmV2ZW50IGRlZmF1bHQgY29uc3RydWN0aW9uCiAgICAgCi0gICAg
c3RhdGljIEpTVmFsdWUgKmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVj
dCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IEpTVmFsdWUgKmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKm1ldGhv
ZEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBmYWxsYmFja09iamVjdEdldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIEpTVmFsdWUqIGZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogbWV0aG9kR2V0
dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIFJlZlB0cjxCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNlOwogfTsKSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAzNDE1MSkKKysrIFdlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3
LDcgQEAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpPYmpjRmFsbGJhY2tPYmplYwogYm9vbCBPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIGtlZXAgdGhlIHByb3Rv
dHlwZSBmcm9tIGdldHRpbmcgY2FsbGVkIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UK
LSAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKKyAgICBzbG90LnNldFVuZGVmaW5lZCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>